@kittycad/react-shared 0.1.0

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,2551 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+
6
+ function styleInject(css, ref) {
7
+ if ( ref === void 0 ) ref = {};
8
+ var insertAt = ref.insertAt;
9
+
10
+ if (typeof document === 'undefined') { return; }
11
+
12
+ var head = document.head || document.getElementsByTagName('head')[0];
13
+ var style = document.createElement('style');
14
+ style.type = 'text/css';
15
+
16
+ if (insertAt === 'top') {
17
+ if (head.firstChild) {
18
+ head.insertBefore(style, head.firstChild);
19
+ } else {
20
+ head.appendChild(style);
21
+ }
22
+ } else {
23
+ head.appendChild(style);
24
+ }
25
+
26
+ if (style.styleSheet) {
27
+ style.styleSheet.cssText = css;
28
+ } else {
29
+ style.appendChild(document.createTextNode(css));
30
+ }
31
+ }
32
+
33
+ var css_248z = "*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:\"\"}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.inline-flex{display:inline-flex}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-8{height:2rem}.items-center{align-items:center}.justify-center{justify-content:center}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-primary-700{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-medium{font-weight:500}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.outline{outline-style:solid}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\\:bg-primary-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.focus-visible\\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:pointer-events-none:disabled{pointer-events:none}.disabled\\:opacity-50:disabled{opacity:.5}";
34
+ styleInject(css_248z,{"insertAt":"top"});
35
+
36
+ function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);}else for(f in e)e[f]&&(n&&(n+=" "),n+=f);return n}function clsx(){for(var e,t,f=0,n="",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}
37
+
38
+ const CLASS_PART_SEPARATOR = '-';
39
+ const createClassGroupUtils = config => {
40
+ const classMap = createClassMap(config);
41
+ const {
42
+ conflictingClassGroups,
43
+ conflictingClassGroupModifiers
44
+ } = config;
45
+ const getClassGroupId = className => {
46
+ const classParts = className.split(CLASS_PART_SEPARATOR);
47
+ // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.
48
+ if (classParts[0] === '' && classParts.length !== 1) {
49
+ classParts.shift();
50
+ }
51
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
52
+ };
53
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
54
+ const conflicts = conflictingClassGroups[classGroupId] || [];
55
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
56
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
57
+ }
58
+ return conflicts;
59
+ };
60
+ return {
61
+ getClassGroupId,
62
+ getConflictingClassGroupIds
63
+ };
64
+ };
65
+ const getGroupRecursive = (classParts, classPartObject) => {
66
+ if (classParts.length === 0) {
67
+ return classPartObject.classGroupId;
68
+ }
69
+ const currentClassPart = classParts[0];
70
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
71
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;
72
+ if (classGroupFromNextClassPart) {
73
+ return classGroupFromNextClassPart;
74
+ }
75
+ if (classPartObject.validators.length === 0) {
76
+ return undefined;
77
+ }
78
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
79
+ return classPartObject.validators.find(({
80
+ validator
81
+ }) => validator(classRest))?.classGroupId;
82
+ };
83
+ const arbitraryPropertyRegex = /^\[(.+)\]$/;
84
+ const getGroupIdForArbitraryProperty = className => {
85
+ if (arbitraryPropertyRegex.test(className)) {
86
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
87
+ const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));
88
+ if (property) {
89
+ // I use two dots here because one dot is used as prefix for class groups in plugins
90
+ return 'arbitrary..' + property;
91
+ }
92
+ }
93
+ };
94
+ /**
95
+ * Exported for testing only
96
+ */
97
+ const createClassMap = config => {
98
+ const {
99
+ theme,
100
+ prefix
101
+ } = config;
102
+ const classMap = {
103
+ nextPart: new Map(),
104
+ validators: []
105
+ };
106
+ const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
107
+ prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {
108
+ processClassesRecursively(classGroup, classMap, classGroupId, theme);
109
+ });
110
+ return classMap;
111
+ };
112
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
113
+ classGroup.forEach(classDefinition => {
114
+ if (typeof classDefinition === 'string') {
115
+ const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
116
+ classPartObjectToEdit.classGroupId = classGroupId;
117
+ return;
118
+ }
119
+ if (typeof classDefinition === 'function') {
120
+ if (isThemeGetter(classDefinition)) {
121
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
122
+ return;
123
+ }
124
+ classPartObject.validators.push({
125
+ validator: classDefinition,
126
+ classGroupId
127
+ });
128
+ return;
129
+ }
130
+ Object.entries(classDefinition).forEach(([key, classGroup]) => {
131
+ processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);
132
+ });
133
+ });
134
+ };
135
+ const getPart = (classPartObject, path) => {
136
+ let currentClassPartObject = classPartObject;
137
+ path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {
138
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
139
+ currentClassPartObject.nextPart.set(pathPart, {
140
+ nextPart: new Map(),
141
+ validators: []
142
+ });
143
+ }
144
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
145
+ });
146
+ return currentClassPartObject;
147
+ };
148
+ const isThemeGetter = func => func.isThemeGetter;
149
+ const getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {
150
+ if (!prefix) {
151
+ return classGroupEntries;
152
+ }
153
+ return classGroupEntries.map(([classGroupId, classGroup]) => {
154
+ const prefixedClassGroup = classGroup.map(classDefinition => {
155
+ if (typeof classDefinition === 'string') {
156
+ return prefix + classDefinition;
157
+ }
158
+ if (typeof classDefinition === 'object') {
159
+ return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));
160
+ }
161
+ return classDefinition;
162
+ });
163
+ return [classGroupId, prefixedClassGroup];
164
+ });
165
+ };
166
+
167
+ // LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance
168
+ const createLruCache = maxCacheSize => {
169
+ if (maxCacheSize < 1) {
170
+ return {
171
+ get: () => undefined,
172
+ set: () => {}
173
+ };
174
+ }
175
+ let cacheSize = 0;
176
+ let cache = new Map();
177
+ let previousCache = new Map();
178
+ const update = (key, value) => {
179
+ cache.set(key, value);
180
+ cacheSize++;
181
+ if (cacheSize > maxCacheSize) {
182
+ cacheSize = 0;
183
+ previousCache = cache;
184
+ cache = new Map();
185
+ }
186
+ };
187
+ return {
188
+ get(key) {
189
+ let value = cache.get(key);
190
+ if (value !== undefined) {
191
+ return value;
192
+ }
193
+ if ((value = previousCache.get(key)) !== undefined) {
194
+ update(key, value);
195
+ return value;
196
+ }
197
+ },
198
+ set(key, value) {
199
+ if (cache.has(key)) {
200
+ cache.set(key, value);
201
+ } else {
202
+ update(key, value);
203
+ }
204
+ }
205
+ };
206
+ };
207
+ const IMPORTANT_MODIFIER = '!';
208
+ const createParseClassName = config => {
209
+ const {
210
+ separator,
211
+ experimentalParseClassName
212
+ } = config;
213
+ const isSeparatorSingleCharacter = separator.length === 1;
214
+ const firstSeparatorCharacter = separator[0];
215
+ const separatorLength = separator.length;
216
+ // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
217
+ const parseClassName = className => {
218
+ const modifiers = [];
219
+ let bracketDepth = 0;
220
+ let modifierStart = 0;
221
+ let postfixModifierPosition;
222
+ for (let index = 0; index < className.length; index++) {
223
+ let currentCharacter = className[index];
224
+ if (bracketDepth === 0) {
225
+ if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
226
+ modifiers.push(className.slice(modifierStart, index));
227
+ modifierStart = index + separatorLength;
228
+ continue;
229
+ }
230
+ if (currentCharacter === '/') {
231
+ postfixModifierPosition = index;
232
+ continue;
233
+ }
234
+ }
235
+ if (currentCharacter === '[') {
236
+ bracketDepth++;
237
+ } else if (currentCharacter === ']') {
238
+ bracketDepth--;
239
+ }
240
+ }
241
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
242
+ const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
243
+ const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
244
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
245
+ return {
246
+ modifiers,
247
+ hasImportantModifier,
248
+ baseClassName,
249
+ maybePostfixModifierPosition
250
+ };
251
+ };
252
+ if (experimentalParseClassName) {
253
+ return className => experimentalParseClassName({
254
+ className,
255
+ parseClassName
256
+ });
257
+ }
258
+ return parseClassName;
259
+ };
260
+ /**
261
+ * Sorts modifiers according to following schema:
262
+ * - Predefined modifiers are sorted alphabetically
263
+ * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
264
+ */
265
+ const sortModifiers = modifiers => {
266
+ if (modifiers.length <= 1) {
267
+ return modifiers;
268
+ }
269
+ const sortedModifiers = [];
270
+ let unsortedModifiers = [];
271
+ modifiers.forEach(modifier => {
272
+ const isArbitraryVariant = modifier[0] === '[';
273
+ if (isArbitraryVariant) {
274
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
275
+ unsortedModifiers = [];
276
+ } else {
277
+ unsortedModifiers.push(modifier);
278
+ }
279
+ });
280
+ sortedModifiers.push(...unsortedModifiers.sort());
281
+ return sortedModifiers;
282
+ };
283
+ const createConfigUtils = config => ({
284
+ cache: createLruCache(config.cacheSize),
285
+ parseClassName: createParseClassName(config),
286
+ ...createClassGroupUtils(config)
287
+ });
288
+ const SPLIT_CLASSES_REGEX = /\s+/;
289
+ const mergeClassList = (classList, configUtils) => {
290
+ const {
291
+ parseClassName,
292
+ getClassGroupId,
293
+ getConflictingClassGroupIds
294
+ } = configUtils;
295
+ /**
296
+ * Set of classGroupIds in following format:
297
+ * `{importantModifier}{variantModifiers}{classGroupId}`
298
+ * @example 'float'
299
+ * @example 'hover:focus:bg-color'
300
+ * @example 'md:!pr'
301
+ */
302
+ const classGroupsInConflict = [];
303
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
304
+ let result = '';
305
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
306
+ const originalClassName = classNames[index];
307
+ const {
308
+ modifiers,
309
+ hasImportantModifier,
310
+ baseClassName,
311
+ maybePostfixModifierPosition
312
+ } = parseClassName(originalClassName);
313
+ let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
314
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
315
+ if (!classGroupId) {
316
+ if (!hasPostfixModifier) {
317
+ // Not a Tailwind class
318
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
319
+ continue;
320
+ }
321
+ classGroupId = getClassGroupId(baseClassName);
322
+ if (!classGroupId) {
323
+ // Not a Tailwind class
324
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
325
+ continue;
326
+ }
327
+ hasPostfixModifier = false;
328
+ }
329
+ const variantModifier = sortModifiers(modifiers).join(':');
330
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
331
+ const classId = modifierId + classGroupId;
332
+ if (classGroupsInConflict.includes(classId)) {
333
+ // Tailwind class omitted due to conflict
334
+ continue;
335
+ }
336
+ classGroupsInConflict.push(classId);
337
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
338
+ for (let i = 0; i < conflictGroups.length; ++i) {
339
+ const group = conflictGroups[i];
340
+ classGroupsInConflict.push(modifierId + group);
341
+ }
342
+ // Tailwind class not in conflict
343
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
344
+ }
345
+ return result;
346
+ };
347
+
348
+ /**
349
+ * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
350
+ *
351
+ * Specifically:
352
+ * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
353
+ * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
354
+ *
355
+ * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
356
+ */
357
+ function twJoin() {
358
+ let index = 0;
359
+ let argument;
360
+ let resolvedValue;
361
+ let string = '';
362
+ while (index < arguments.length) {
363
+ if (argument = arguments[index++]) {
364
+ if (resolvedValue = toValue(argument)) {
365
+ string && (string += ' ');
366
+ string += resolvedValue;
367
+ }
368
+ }
369
+ }
370
+ return string;
371
+ }
372
+ const toValue = mix => {
373
+ if (typeof mix === 'string') {
374
+ return mix;
375
+ }
376
+ let resolvedValue;
377
+ let string = '';
378
+ for (let k = 0; k < mix.length; k++) {
379
+ if (mix[k]) {
380
+ if (resolvedValue = toValue(mix[k])) {
381
+ string && (string += ' ');
382
+ string += resolvedValue;
383
+ }
384
+ }
385
+ }
386
+ return string;
387
+ };
388
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
389
+ let configUtils;
390
+ let cacheGet;
391
+ let cacheSet;
392
+ let functionToCall = initTailwindMerge;
393
+ function initTailwindMerge(classList) {
394
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
395
+ configUtils = createConfigUtils(config);
396
+ cacheGet = configUtils.cache.get;
397
+ cacheSet = configUtils.cache.set;
398
+ functionToCall = tailwindMerge;
399
+ return tailwindMerge(classList);
400
+ }
401
+ function tailwindMerge(classList) {
402
+ const cachedResult = cacheGet(classList);
403
+ if (cachedResult) {
404
+ return cachedResult;
405
+ }
406
+ const result = mergeClassList(classList, configUtils);
407
+ cacheSet(classList, result);
408
+ return result;
409
+ }
410
+ return function callTailwindMerge() {
411
+ return functionToCall(twJoin.apply(null, arguments));
412
+ };
413
+ }
414
+ const fromTheme = key => {
415
+ const themeGetter = theme => theme[key] || [];
416
+ themeGetter.isThemeGetter = true;
417
+ return themeGetter;
418
+ };
419
+ const arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
420
+ const fractionRegex = /^\d+\/\d+$/;
421
+ const stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);
422
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
423
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
424
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
425
+ // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
426
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
427
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
428
+ const isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
429
+ const isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);
430
+ const isNumber = value => Boolean(value) && !Number.isNaN(Number(value));
431
+ const isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);
432
+ const isInteger = value => Boolean(value) && Number.isInteger(Number(value));
433
+ const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
434
+ const isArbitraryValue = value => arbitraryValueRegex.test(value);
435
+ const isTshirtSize = value => tshirtUnitRegex.test(value);
436
+ const sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);
437
+ const isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);
438
+ const isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);
439
+ const imageLabels = /*#__PURE__*/new Set(['image', 'url']);
440
+ const isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);
441
+ const isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);
442
+ const isAny = () => true;
443
+ const getIsArbitraryValue = (value, label, testValue) => {
444
+ const result = arbitraryValueRegex.exec(value);
445
+ if (result) {
446
+ if (result[1]) {
447
+ return typeof label === 'string' ? result[1] === label : label.has(result[1]);
448
+ }
449
+ return testValue(result[2]);
450
+ }
451
+ return false;
452
+ };
453
+ const isLengthOnly = value =>
454
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
455
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
456
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
457
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
458
+ const isNever = () => false;
459
+ const isShadow = value => shadowRegex.test(value);
460
+ const isImage = value => imageRegex.test(value);
461
+ const getDefaultConfig = () => {
462
+ const colors = fromTheme('colors');
463
+ const spacing = fromTheme('spacing');
464
+ const blur = fromTheme('blur');
465
+ const brightness = fromTheme('brightness');
466
+ const borderColor = fromTheme('borderColor');
467
+ const borderRadius = fromTheme('borderRadius');
468
+ const borderSpacing = fromTheme('borderSpacing');
469
+ const borderWidth = fromTheme('borderWidth');
470
+ const contrast = fromTheme('contrast');
471
+ const grayscale = fromTheme('grayscale');
472
+ const hueRotate = fromTheme('hueRotate');
473
+ const invert = fromTheme('invert');
474
+ const gap = fromTheme('gap');
475
+ const gradientColorStops = fromTheme('gradientColorStops');
476
+ const gradientColorStopPositions = fromTheme('gradientColorStopPositions');
477
+ const inset = fromTheme('inset');
478
+ const margin = fromTheme('margin');
479
+ const opacity = fromTheme('opacity');
480
+ const padding = fromTheme('padding');
481
+ const saturate = fromTheme('saturate');
482
+ const scale = fromTheme('scale');
483
+ const sepia = fromTheme('sepia');
484
+ const skew = fromTheme('skew');
485
+ const space = fromTheme('space');
486
+ const translate = fromTheme('translate');
487
+ const getOverscroll = () => ['auto', 'contain', 'none'];
488
+ const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
489
+ const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];
490
+ const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];
491
+ const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];
492
+ const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];
493
+ const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];
494
+ const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];
495
+ const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
496
+ const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];
497
+ const getZeroAndEmpty = () => ['', '0', isArbitraryValue];
498
+ const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
499
+ const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];
500
+ return {
501
+ cacheSize: 500,
502
+ separator: ':',
503
+ theme: {
504
+ colors: [isAny],
505
+ spacing: [isLength, isArbitraryLength],
506
+ blur: ['none', '', isTshirtSize, isArbitraryValue],
507
+ brightness: getNumberAndArbitrary(),
508
+ borderColor: [colors],
509
+ borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],
510
+ borderSpacing: getSpacingWithArbitrary(),
511
+ borderWidth: getLengthWithEmptyAndArbitrary(),
512
+ contrast: getNumberAndArbitrary(),
513
+ grayscale: getZeroAndEmpty(),
514
+ hueRotate: getNumberAndArbitrary(),
515
+ invert: getZeroAndEmpty(),
516
+ gap: getSpacingWithArbitrary(),
517
+ gradientColorStops: [colors],
518
+ gradientColorStopPositions: [isPercent, isArbitraryLength],
519
+ inset: getSpacingWithAutoAndArbitrary(),
520
+ margin: getSpacingWithAutoAndArbitrary(),
521
+ opacity: getNumberAndArbitrary(),
522
+ padding: getSpacingWithArbitrary(),
523
+ saturate: getNumberAndArbitrary(),
524
+ scale: getNumberAndArbitrary(),
525
+ sepia: getZeroAndEmpty(),
526
+ skew: getNumberAndArbitrary(),
527
+ space: getSpacingWithArbitrary(),
528
+ translate: getSpacingWithArbitrary()
529
+ },
530
+ classGroups: {
531
+ // Layout
532
+ /**
533
+ * Aspect Ratio
534
+ * @see https://tailwindcss.com/docs/aspect-ratio
535
+ */
536
+ aspect: [{
537
+ aspect: ['auto', 'square', 'video', isArbitraryValue]
538
+ }],
539
+ /**
540
+ * Container
541
+ * @see https://tailwindcss.com/docs/container
542
+ */
543
+ container: ['container'],
544
+ /**
545
+ * Columns
546
+ * @see https://tailwindcss.com/docs/columns
547
+ */
548
+ columns: [{
549
+ columns: [isTshirtSize]
550
+ }],
551
+ /**
552
+ * Break After
553
+ * @see https://tailwindcss.com/docs/break-after
554
+ */
555
+ 'break-after': [{
556
+ 'break-after': getBreaks()
557
+ }],
558
+ /**
559
+ * Break Before
560
+ * @see https://tailwindcss.com/docs/break-before
561
+ */
562
+ 'break-before': [{
563
+ 'break-before': getBreaks()
564
+ }],
565
+ /**
566
+ * Break Inside
567
+ * @see https://tailwindcss.com/docs/break-inside
568
+ */
569
+ 'break-inside': [{
570
+ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']
571
+ }],
572
+ /**
573
+ * Box Decoration Break
574
+ * @see https://tailwindcss.com/docs/box-decoration-break
575
+ */
576
+ 'box-decoration': [{
577
+ 'box-decoration': ['slice', 'clone']
578
+ }],
579
+ /**
580
+ * Box Sizing
581
+ * @see https://tailwindcss.com/docs/box-sizing
582
+ */
583
+ box: [{
584
+ box: ['border', 'content']
585
+ }],
586
+ /**
587
+ * Display
588
+ * @see https://tailwindcss.com/docs/display
589
+ */
590
+ 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'],
591
+ /**
592
+ * Floats
593
+ * @see https://tailwindcss.com/docs/float
594
+ */
595
+ float: [{
596
+ float: ['right', 'left', 'none', 'start', 'end']
597
+ }],
598
+ /**
599
+ * Clear
600
+ * @see https://tailwindcss.com/docs/clear
601
+ */
602
+ clear: [{
603
+ clear: ['left', 'right', 'both', 'none', 'start', 'end']
604
+ }],
605
+ /**
606
+ * Isolation
607
+ * @see https://tailwindcss.com/docs/isolation
608
+ */
609
+ isolation: ['isolate', 'isolation-auto'],
610
+ /**
611
+ * Object Fit
612
+ * @see https://tailwindcss.com/docs/object-fit
613
+ */
614
+ 'object-fit': [{
615
+ object: ['contain', 'cover', 'fill', 'none', 'scale-down']
616
+ }],
617
+ /**
618
+ * Object Position
619
+ * @see https://tailwindcss.com/docs/object-position
620
+ */
621
+ 'object-position': [{
622
+ object: [...getPositions(), isArbitraryValue]
623
+ }],
624
+ /**
625
+ * Overflow
626
+ * @see https://tailwindcss.com/docs/overflow
627
+ */
628
+ overflow: [{
629
+ overflow: getOverflow()
630
+ }],
631
+ /**
632
+ * Overflow X
633
+ * @see https://tailwindcss.com/docs/overflow
634
+ */
635
+ 'overflow-x': [{
636
+ 'overflow-x': getOverflow()
637
+ }],
638
+ /**
639
+ * Overflow Y
640
+ * @see https://tailwindcss.com/docs/overflow
641
+ */
642
+ 'overflow-y': [{
643
+ 'overflow-y': getOverflow()
644
+ }],
645
+ /**
646
+ * Overscroll Behavior
647
+ * @see https://tailwindcss.com/docs/overscroll-behavior
648
+ */
649
+ overscroll: [{
650
+ overscroll: getOverscroll()
651
+ }],
652
+ /**
653
+ * Overscroll Behavior X
654
+ * @see https://tailwindcss.com/docs/overscroll-behavior
655
+ */
656
+ 'overscroll-x': [{
657
+ 'overscroll-x': getOverscroll()
658
+ }],
659
+ /**
660
+ * Overscroll Behavior Y
661
+ * @see https://tailwindcss.com/docs/overscroll-behavior
662
+ */
663
+ 'overscroll-y': [{
664
+ 'overscroll-y': getOverscroll()
665
+ }],
666
+ /**
667
+ * Position
668
+ * @see https://tailwindcss.com/docs/position
669
+ */
670
+ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
671
+ /**
672
+ * Top / Right / Bottom / Left
673
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
674
+ */
675
+ inset: [{
676
+ inset: [inset]
677
+ }],
678
+ /**
679
+ * Right / Left
680
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
681
+ */
682
+ 'inset-x': [{
683
+ 'inset-x': [inset]
684
+ }],
685
+ /**
686
+ * Top / Bottom
687
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
688
+ */
689
+ 'inset-y': [{
690
+ 'inset-y': [inset]
691
+ }],
692
+ /**
693
+ * Start
694
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
695
+ */
696
+ start: [{
697
+ start: [inset]
698
+ }],
699
+ /**
700
+ * End
701
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
702
+ */
703
+ end: [{
704
+ end: [inset]
705
+ }],
706
+ /**
707
+ * Top
708
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
709
+ */
710
+ top: [{
711
+ top: [inset]
712
+ }],
713
+ /**
714
+ * Right
715
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
716
+ */
717
+ right: [{
718
+ right: [inset]
719
+ }],
720
+ /**
721
+ * Bottom
722
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
723
+ */
724
+ bottom: [{
725
+ bottom: [inset]
726
+ }],
727
+ /**
728
+ * Left
729
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
730
+ */
731
+ left: [{
732
+ left: [inset]
733
+ }],
734
+ /**
735
+ * Visibility
736
+ * @see https://tailwindcss.com/docs/visibility
737
+ */
738
+ visibility: ['visible', 'invisible', 'collapse'],
739
+ /**
740
+ * Z-Index
741
+ * @see https://tailwindcss.com/docs/z-index
742
+ */
743
+ z: [{
744
+ z: ['auto', isInteger, isArbitraryValue]
745
+ }],
746
+ // Flexbox and Grid
747
+ /**
748
+ * Flex Basis
749
+ * @see https://tailwindcss.com/docs/flex-basis
750
+ */
751
+ basis: [{
752
+ basis: getSpacingWithAutoAndArbitrary()
753
+ }],
754
+ /**
755
+ * Flex Direction
756
+ * @see https://tailwindcss.com/docs/flex-direction
757
+ */
758
+ 'flex-direction': [{
759
+ flex: ['row', 'row-reverse', 'col', 'col-reverse']
760
+ }],
761
+ /**
762
+ * Flex Wrap
763
+ * @see https://tailwindcss.com/docs/flex-wrap
764
+ */
765
+ 'flex-wrap': [{
766
+ flex: ['wrap', 'wrap-reverse', 'nowrap']
767
+ }],
768
+ /**
769
+ * Flex
770
+ * @see https://tailwindcss.com/docs/flex
771
+ */
772
+ flex: [{
773
+ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]
774
+ }],
775
+ /**
776
+ * Flex Grow
777
+ * @see https://tailwindcss.com/docs/flex-grow
778
+ */
779
+ grow: [{
780
+ grow: getZeroAndEmpty()
781
+ }],
782
+ /**
783
+ * Flex Shrink
784
+ * @see https://tailwindcss.com/docs/flex-shrink
785
+ */
786
+ shrink: [{
787
+ shrink: getZeroAndEmpty()
788
+ }],
789
+ /**
790
+ * Order
791
+ * @see https://tailwindcss.com/docs/order
792
+ */
793
+ order: [{
794
+ order: ['first', 'last', 'none', isInteger, isArbitraryValue]
795
+ }],
796
+ /**
797
+ * Grid Template Columns
798
+ * @see https://tailwindcss.com/docs/grid-template-columns
799
+ */
800
+ 'grid-cols': [{
801
+ 'grid-cols': [isAny]
802
+ }],
803
+ /**
804
+ * Grid Column Start / End
805
+ * @see https://tailwindcss.com/docs/grid-column
806
+ */
807
+ 'col-start-end': [{
808
+ col: ['auto', {
809
+ span: ['full', isInteger, isArbitraryValue]
810
+ }, isArbitraryValue]
811
+ }],
812
+ /**
813
+ * Grid Column Start
814
+ * @see https://tailwindcss.com/docs/grid-column
815
+ */
816
+ 'col-start': [{
817
+ 'col-start': getNumberWithAutoAndArbitrary()
818
+ }],
819
+ /**
820
+ * Grid Column End
821
+ * @see https://tailwindcss.com/docs/grid-column
822
+ */
823
+ 'col-end': [{
824
+ 'col-end': getNumberWithAutoAndArbitrary()
825
+ }],
826
+ /**
827
+ * Grid Template Rows
828
+ * @see https://tailwindcss.com/docs/grid-template-rows
829
+ */
830
+ 'grid-rows': [{
831
+ 'grid-rows': [isAny]
832
+ }],
833
+ /**
834
+ * Grid Row Start / End
835
+ * @see https://tailwindcss.com/docs/grid-row
836
+ */
837
+ 'row-start-end': [{
838
+ row: ['auto', {
839
+ span: [isInteger, isArbitraryValue]
840
+ }, isArbitraryValue]
841
+ }],
842
+ /**
843
+ * Grid Row Start
844
+ * @see https://tailwindcss.com/docs/grid-row
845
+ */
846
+ 'row-start': [{
847
+ 'row-start': getNumberWithAutoAndArbitrary()
848
+ }],
849
+ /**
850
+ * Grid Row End
851
+ * @see https://tailwindcss.com/docs/grid-row
852
+ */
853
+ 'row-end': [{
854
+ 'row-end': getNumberWithAutoAndArbitrary()
855
+ }],
856
+ /**
857
+ * Grid Auto Flow
858
+ * @see https://tailwindcss.com/docs/grid-auto-flow
859
+ */
860
+ 'grid-flow': [{
861
+ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']
862
+ }],
863
+ /**
864
+ * Grid Auto Columns
865
+ * @see https://tailwindcss.com/docs/grid-auto-columns
866
+ */
867
+ 'auto-cols': [{
868
+ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]
869
+ }],
870
+ /**
871
+ * Grid Auto Rows
872
+ * @see https://tailwindcss.com/docs/grid-auto-rows
873
+ */
874
+ 'auto-rows': [{
875
+ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]
876
+ }],
877
+ /**
878
+ * Gap
879
+ * @see https://tailwindcss.com/docs/gap
880
+ */
881
+ gap: [{
882
+ gap: [gap]
883
+ }],
884
+ /**
885
+ * Gap X
886
+ * @see https://tailwindcss.com/docs/gap
887
+ */
888
+ 'gap-x': [{
889
+ 'gap-x': [gap]
890
+ }],
891
+ /**
892
+ * Gap Y
893
+ * @see https://tailwindcss.com/docs/gap
894
+ */
895
+ 'gap-y': [{
896
+ 'gap-y': [gap]
897
+ }],
898
+ /**
899
+ * Justify Content
900
+ * @see https://tailwindcss.com/docs/justify-content
901
+ */
902
+ 'justify-content': [{
903
+ justify: ['normal', ...getAlign()]
904
+ }],
905
+ /**
906
+ * Justify Items
907
+ * @see https://tailwindcss.com/docs/justify-items
908
+ */
909
+ 'justify-items': [{
910
+ 'justify-items': ['start', 'end', 'center', 'stretch']
911
+ }],
912
+ /**
913
+ * Justify Self
914
+ * @see https://tailwindcss.com/docs/justify-self
915
+ */
916
+ 'justify-self': [{
917
+ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']
918
+ }],
919
+ /**
920
+ * Align Content
921
+ * @see https://tailwindcss.com/docs/align-content
922
+ */
923
+ 'align-content': [{
924
+ content: ['normal', ...getAlign(), 'baseline']
925
+ }],
926
+ /**
927
+ * Align Items
928
+ * @see https://tailwindcss.com/docs/align-items
929
+ */
930
+ 'align-items': [{
931
+ items: ['start', 'end', 'center', 'baseline', 'stretch']
932
+ }],
933
+ /**
934
+ * Align Self
935
+ * @see https://tailwindcss.com/docs/align-self
936
+ */
937
+ 'align-self': [{
938
+ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']
939
+ }],
940
+ /**
941
+ * Place Content
942
+ * @see https://tailwindcss.com/docs/place-content
943
+ */
944
+ 'place-content': [{
945
+ 'place-content': [...getAlign(), 'baseline']
946
+ }],
947
+ /**
948
+ * Place Items
949
+ * @see https://tailwindcss.com/docs/place-items
950
+ */
951
+ 'place-items': [{
952
+ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']
953
+ }],
954
+ /**
955
+ * Place Self
956
+ * @see https://tailwindcss.com/docs/place-self
957
+ */
958
+ 'place-self': [{
959
+ 'place-self': ['auto', 'start', 'end', 'center', 'stretch']
960
+ }],
961
+ // Spacing
962
+ /**
963
+ * Padding
964
+ * @see https://tailwindcss.com/docs/padding
965
+ */
966
+ p: [{
967
+ p: [padding]
968
+ }],
969
+ /**
970
+ * Padding X
971
+ * @see https://tailwindcss.com/docs/padding
972
+ */
973
+ px: [{
974
+ px: [padding]
975
+ }],
976
+ /**
977
+ * Padding Y
978
+ * @see https://tailwindcss.com/docs/padding
979
+ */
980
+ py: [{
981
+ py: [padding]
982
+ }],
983
+ /**
984
+ * Padding Start
985
+ * @see https://tailwindcss.com/docs/padding
986
+ */
987
+ ps: [{
988
+ ps: [padding]
989
+ }],
990
+ /**
991
+ * Padding End
992
+ * @see https://tailwindcss.com/docs/padding
993
+ */
994
+ pe: [{
995
+ pe: [padding]
996
+ }],
997
+ /**
998
+ * Padding Top
999
+ * @see https://tailwindcss.com/docs/padding
1000
+ */
1001
+ pt: [{
1002
+ pt: [padding]
1003
+ }],
1004
+ /**
1005
+ * Padding Right
1006
+ * @see https://tailwindcss.com/docs/padding
1007
+ */
1008
+ pr: [{
1009
+ pr: [padding]
1010
+ }],
1011
+ /**
1012
+ * Padding Bottom
1013
+ * @see https://tailwindcss.com/docs/padding
1014
+ */
1015
+ pb: [{
1016
+ pb: [padding]
1017
+ }],
1018
+ /**
1019
+ * Padding Left
1020
+ * @see https://tailwindcss.com/docs/padding
1021
+ */
1022
+ pl: [{
1023
+ pl: [padding]
1024
+ }],
1025
+ /**
1026
+ * Margin
1027
+ * @see https://tailwindcss.com/docs/margin
1028
+ */
1029
+ m: [{
1030
+ m: [margin]
1031
+ }],
1032
+ /**
1033
+ * Margin X
1034
+ * @see https://tailwindcss.com/docs/margin
1035
+ */
1036
+ mx: [{
1037
+ mx: [margin]
1038
+ }],
1039
+ /**
1040
+ * Margin Y
1041
+ * @see https://tailwindcss.com/docs/margin
1042
+ */
1043
+ my: [{
1044
+ my: [margin]
1045
+ }],
1046
+ /**
1047
+ * Margin Start
1048
+ * @see https://tailwindcss.com/docs/margin
1049
+ */
1050
+ ms: [{
1051
+ ms: [margin]
1052
+ }],
1053
+ /**
1054
+ * Margin End
1055
+ * @see https://tailwindcss.com/docs/margin
1056
+ */
1057
+ me: [{
1058
+ me: [margin]
1059
+ }],
1060
+ /**
1061
+ * Margin Top
1062
+ * @see https://tailwindcss.com/docs/margin
1063
+ */
1064
+ mt: [{
1065
+ mt: [margin]
1066
+ }],
1067
+ /**
1068
+ * Margin Right
1069
+ * @see https://tailwindcss.com/docs/margin
1070
+ */
1071
+ mr: [{
1072
+ mr: [margin]
1073
+ }],
1074
+ /**
1075
+ * Margin Bottom
1076
+ * @see https://tailwindcss.com/docs/margin
1077
+ */
1078
+ mb: [{
1079
+ mb: [margin]
1080
+ }],
1081
+ /**
1082
+ * Margin Left
1083
+ * @see https://tailwindcss.com/docs/margin
1084
+ */
1085
+ ml: [{
1086
+ ml: [margin]
1087
+ }],
1088
+ /**
1089
+ * Space Between X
1090
+ * @see https://tailwindcss.com/docs/space
1091
+ */
1092
+ 'space-x': [{
1093
+ 'space-x': [space]
1094
+ }],
1095
+ /**
1096
+ * Space Between X Reverse
1097
+ * @see https://tailwindcss.com/docs/space
1098
+ */
1099
+ 'space-x-reverse': ['space-x-reverse'],
1100
+ /**
1101
+ * Space Between Y
1102
+ * @see https://tailwindcss.com/docs/space
1103
+ */
1104
+ 'space-y': [{
1105
+ 'space-y': [space]
1106
+ }],
1107
+ /**
1108
+ * Space Between Y Reverse
1109
+ * @see https://tailwindcss.com/docs/space
1110
+ */
1111
+ 'space-y-reverse': ['space-y-reverse'],
1112
+ // Sizing
1113
+ /**
1114
+ * Width
1115
+ * @see https://tailwindcss.com/docs/width
1116
+ */
1117
+ w: [{
1118
+ w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]
1119
+ }],
1120
+ /**
1121
+ * Min-Width
1122
+ * @see https://tailwindcss.com/docs/min-width
1123
+ */
1124
+ 'min-w': [{
1125
+ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']
1126
+ }],
1127
+ /**
1128
+ * Max-Width
1129
+ * @see https://tailwindcss.com/docs/max-width
1130
+ */
1131
+ 'max-w': [{
1132
+ 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {
1133
+ screen: [isTshirtSize]
1134
+ }, isTshirtSize]
1135
+ }],
1136
+ /**
1137
+ * Height
1138
+ * @see https://tailwindcss.com/docs/height
1139
+ */
1140
+ h: [{
1141
+ h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']
1142
+ }],
1143
+ /**
1144
+ * Min-Height
1145
+ * @see https://tailwindcss.com/docs/min-height
1146
+ */
1147
+ 'min-h': [{
1148
+ 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']
1149
+ }],
1150
+ /**
1151
+ * Max-Height
1152
+ * @see https://tailwindcss.com/docs/max-height
1153
+ */
1154
+ 'max-h': [{
1155
+ 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']
1156
+ }],
1157
+ /**
1158
+ * Size
1159
+ * @see https://tailwindcss.com/docs/size
1160
+ */
1161
+ size: [{
1162
+ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']
1163
+ }],
1164
+ // Typography
1165
+ /**
1166
+ * Font Size
1167
+ * @see https://tailwindcss.com/docs/font-size
1168
+ */
1169
+ 'font-size': [{
1170
+ text: ['base', isTshirtSize, isArbitraryLength]
1171
+ }],
1172
+ /**
1173
+ * Font Smoothing
1174
+ * @see https://tailwindcss.com/docs/font-smoothing
1175
+ */
1176
+ 'font-smoothing': ['antialiased', 'subpixel-antialiased'],
1177
+ /**
1178
+ * Font Style
1179
+ * @see https://tailwindcss.com/docs/font-style
1180
+ */
1181
+ 'font-style': ['italic', 'not-italic'],
1182
+ /**
1183
+ * Font Weight
1184
+ * @see https://tailwindcss.com/docs/font-weight
1185
+ */
1186
+ 'font-weight': [{
1187
+ font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]
1188
+ }],
1189
+ /**
1190
+ * Font Family
1191
+ * @see https://tailwindcss.com/docs/font-family
1192
+ */
1193
+ 'font-family': [{
1194
+ font: [isAny]
1195
+ }],
1196
+ /**
1197
+ * Font Variant Numeric
1198
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1199
+ */
1200
+ 'fvn-normal': ['normal-nums'],
1201
+ /**
1202
+ * Font Variant Numeric
1203
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1204
+ */
1205
+ 'fvn-ordinal': ['ordinal'],
1206
+ /**
1207
+ * Font Variant Numeric
1208
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1209
+ */
1210
+ 'fvn-slashed-zero': ['slashed-zero'],
1211
+ /**
1212
+ * Font Variant Numeric
1213
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1214
+ */
1215
+ 'fvn-figure': ['lining-nums', 'oldstyle-nums'],
1216
+ /**
1217
+ * Font Variant Numeric
1218
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1219
+ */
1220
+ 'fvn-spacing': ['proportional-nums', 'tabular-nums'],
1221
+ /**
1222
+ * Font Variant Numeric
1223
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1224
+ */
1225
+ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],
1226
+ /**
1227
+ * Letter Spacing
1228
+ * @see https://tailwindcss.com/docs/letter-spacing
1229
+ */
1230
+ tracking: [{
1231
+ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]
1232
+ }],
1233
+ /**
1234
+ * Line Clamp
1235
+ * @see https://tailwindcss.com/docs/line-clamp
1236
+ */
1237
+ 'line-clamp': [{
1238
+ 'line-clamp': ['none', isNumber, isArbitraryNumber]
1239
+ }],
1240
+ /**
1241
+ * Line Height
1242
+ * @see https://tailwindcss.com/docs/line-height
1243
+ */
1244
+ leading: [{
1245
+ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]
1246
+ }],
1247
+ /**
1248
+ * List Style Image
1249
+ * @see https://tailwindcss.com/docs/list-style-image
1250
+ */
1251
+ 'list-image': [{
1252
+ 'list-image': ['none', isArbitraryValue]
1253
+ }],
1254
+ /**
1255
+ * List Style Type
1256
+ * @see https://tailwindcss.com/docs/list-style-type
1257
+ */
1258
+ 'list-style-type': [{
1259
+ list: ['none', 'disc', 'decimal', isArbitraryValue]
1260
+ }],
1261
+ /**
1262
+ * List Style Position
1263
+ * @see https://tailwindcss.com/docs/list-style-position
1264
+ */
1265
+ 'list-style-position': [{
1266
+ list: ['inside', 'outside']
1267
+ }],
1268
+ /**
1269
+ * Placeholder Color
1270
+ * @deprecated since Tailwind CSS v3.0.0
1271
+ * @see https://tailwindcss.com/docs/placeholder-color
1272
+ */
1273
+ 'placeholder-color': [{
1274
+ placeholder: [colors]
1275
+ }],
1276
+ /**
1277
+ * Placeholder Opacity
1278
+ * @see https://tailwindcss.com/docs/placeholder-opacity
1279
+ */
1280
+ 'placeholder-opacity': [{
1281
+ 'placeholder-opacity': [opacity]
1282
+ }],
1283
+ /**
1284
+ * Text Alignment
1285
+ * @see https://tailwindcss.com/docs/text-align
1286
+ */
1287
+ 'text-alignment': [{
1288
+ text: ['left', 'center', 'right', 'justify', 'start', 'end']
1289
+ }],
1290
+ /**
1291
+ * Text Color
1292
+ * @see https://tailwindcss.com/docs/text-color
1293
+ */
1294
+ 'text-color': [{
1295
+ text: [colors]
1296
+ }],
1297
+ /**
1298
+ * Text Opacity
1299
+ * @see https://tailwindcss.com/docs/text-opacity
1300
+ */
1301
+ 'text-opacity': [{
1302
+ 'text-opacity': [opacity]
1303
+ }],
1304
+ /**
1305
+ * Text Decoration
1306
+ * @see https://tailwindcss.com/docs/text-decoration
1307
+ */
1308
+ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],
1309
+ /**
1310
+ * Text Decoration Style
1311
+ * @see https://tailwindcss.com/docs/text-decoration-style
1312
+ */
1313
+ 'text-decoration-style': [{
1314
+ decoration: [...getLineStyles(), 'wavy']
1315
+ }],
1316
+ /**
1317
+ * Text Decoration Thickness
1318
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1319
+ */
1320
+ 'text-decoration-thickness': [{
1321
+ decoration: ['auto', 'from-font', isLength, isArbitraryLength]
1322
+ }],
1323
+ /**
1324
+ * Text Underline Offset
1325
+ * @see https://tailwindcss.com/docs/text-underline-offset
1326
+ */
1327
+ 'underline-offset': [{
1328
+ 'underline-offset': ['auto', isLength, isArbitraryValue]
1329
+ }],
1330
+ /**
1331
+ * Text Decoration Color
1332
+ * @see https://tailwindcss.com/docs/text-decoration-color
1333
+ */
1334
+ 'text-decoration-color': [{
1335
+ decoration: [colors]
1336
+ }],
1337
+ /**
1338
+ * Text Transform
1339
+ * @see https://tailwindcss.com/docs/text-transform
1340
+ */
1341
+ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
1342
+ /**
1343
+ * Text Overflow
1344
+ * @see https://tailwindcss.com/docs/text-overflow
1345
+ */
1346
+ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
1347
+ /**
1348
+ * Text Wrap
1349
+ * @see https://tailwindcss.com/docs/text-wrap
1350
+ */
1351
+ 'text-wrap': [{
1352
+ text: ['wrap', 'nowrap', 'balance', 'pretty']
1353
+ }],
1354
+ /**
1355
+ * Text Indent
1356
+ * @see https://tailwindcss.com/docs/text-indent
1357
+ */
1358
+ indent: [{
1359
+ indent: getSpacingWithArbitrary()
1360
+ }],
1361
+ /**
1362
+ * Vertical Alignment
1363
+ * @see https://tailwindcss.com/docs/vertical-align
1364
+ */
1365
+ 'vertical-align': [{
1366
+ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]
1367
+ }],
1368
+ /**
1369
+ * Whitespace
1370
+ * @see https://tailwindcss.com/docs/whitespace
1371
+ */
1372
+ whitespace: [{
1373
+ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']
1374
+ }],
1375
+ /**
1376
+ * Word Break
1377
+ * @see https://tailwindcss.com/docs/word-break
1378
+ */
1379
+ break: [{
1380
+ break: ['normal', 'words', 'all', 'keep']
1381
+ }],
1382
+ /**
1383
+ * Hyphens
1384
+ * @see https://tailwindcss.com/docs/hyphens
1385
+ */
1386
+ hyphens: [{
1387
+ hyphens: ['none', 'manual', 'auto']
1388
+ }],
1389
+ /**
1390
+ * Content
1391
+ * @see https://tailwindcss.com/docs/content
1392
+ */
1393
+ content: [{
1394
+ content: ['none', isArbitraryValue]
1395
+ }],
1396
+ // Backgrounds
1397
+ /**
1398
+ * Background Attachment
1399
+ * @see https://tailwindcss.com/docs/background-attachment
1400
+ */
1401
+ 'bg-attachment': [{
1402
+ bg: ['fixed', 'local', 'scroll']
1403
+ }],
1404
+ /**
1405
+ * Background Clip
1406
+ * @see https://tailwindcss.com/docs/background-clip
1407
+ */
1408
+ 'bg-clip': [{
1409
+ 'bg-clip': ['border', 'padding', 'content', 'text']
1410
+ }],
1411
+ /**
1412
+ * Background Opacity
1413
+ * @deprecated since Tailwind CSS v3.0.0
1414
+ * @see https://tailwindcss.com/docs/background-opacity
1415
+ */
1416
+ 'bg-opacity': [{
1417
+ 'bg-opacity': [opacity]
1418
+ }],
1419
+ /**
1420
+ * Background Origin
1421
+ * @see https://tailwindcss.com/docs/background-origin
1422
+ */
1423
+ 'bg-origin': [{
1424
+ 'bg-origin': ['border', 'padding', 'content']
1425
+ }],
1426
+ /**
1427
+ * Background Position
1428
+ * @see https://tailwindcss.com/docs/background-position
1429
+ */
1430
+ 'bg-position': [{
1431
+ bg: [...getPositions(), isArbitraryPosition]
1432
+ }],
1433
+ /**
1434
+ * Background Repeat
1435
+ * @see https://tailwindcss.com/docs/background-repeat
1436
+ */
1437
+ 'bg-repeat': [{
1438
+ bg: ['no-repeat', {
1439
+ repeat: ['', 'x', 'y', 'round', 'space']
1440
+ }]
1441
+ }],
1442
+ /**
1443
+ * Background Size
1444
+ * @see https://tailwindcss.com/docs/background-size
1445
+ */
1446
+ 'bg-size': [{
1447
+ bg: ['auto', 'cover', 'contain', isArbitrarySize]
1448
+ }],
1449
+ /**
1450
+ * Background Image
1451
+ * @see https://tailwindcss.com/docs/background-image
1452
+ */
1453
+ 'bg-image': [{
1454
+ bg: ['none', {
1455
+ 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']
1456
+ }, isArbitraryImage]
1457
+ }],
1458
+ /**
1459
+ * Background Color
1460
+ * @see https://tailwindcss.com/docs/background-color
1461
+ */
1462
+ 'bg-color': [{
1463
+ bg: [colors]
1464
+ }],
1465
+ /**
1466
+ * Gradient Color Stops From Position
1467
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1468
+ */
1469
+ 'gradient-from-pos': [{
1470
+ from: [gradientColorStopPositions]
1471
+ }],
1472
+ /**
1473
+ * Gradient Color Stops Via Position
1474
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1475
+ */
1476
+ 'gradient-via-pos': [{
1477
+ via: [gradientColorStopPositions]
1478
+ }],
1479
+ /**
1480
+ * Gradient Color Stops To Position
1481
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1482
+ */
1483
+ 'gradient-to-pos': [{
1484
+ to: [gradientColorStopPositions]
1485
+ }],
1486
+ /**
1487
+ * Gradient Color Stops From
1488
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1489
+ */
1490
+ 'gradient-from': [{
1491
+ from: [gradientColorStops]
1492
+ }],
1493
+ /**
1494
+ * Gradient Color Stops Via
1495
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1496
+ */
1497
+ 'gradient-via': [{
1498
+ via: [gradientColorStops]
1499
+ }],
1500
+ /**
1501
+ * Gradient Color Stops To
1502
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1503
+ */
1504
+ 'gradient-to': [{
1505
+ to: [gradientColorStops]
1506
+ }],
1507
+ // Borders
1508
+ /**
1509
+ * Border Radius
1510
+ * @see https://tailwindcss.com/docs/border-radius
1511
+ */
1512
+ rounded: [{
1513
+ rounded: [borderRadius]
1514
+ }],
1515
+ /**
1516
+ * Border Radius Start
1517
+ * @see https://tailwindcss.com/docs/border-radius
1518
+ */
1519
+ 'rounded-s': [{
1520
+ 'rounded-s': [borderRadius]
1521
+ }],
1522
+ /**
1523
+ * Border Radius End
1524
+ * @see https://tailwindcss.com/docs/border-radius
1525
+ */
1526
+ 'rounded-e': [{
1527
+ 'rounded-e': [borderRadius]
1528
+ }],
1529
+ /**
1530
+ * Border Radius Top
1531
+ * @see https://tailwindcss.com/docs/border-radius
1532
+ */
1533
+ 'rounded-t': [{
1534
+ 'rounded-t': [borderRadius]
1535
+ }],
1536
+ /**
1537
+ * Border Radius Right
1538
+ * @see https://tailwindcss.com/docs/border-radius
1539
+ */
1540
+ 'rounded-r': [{
1541
+ 'rounded-r': [borderRadius]
1542
+ }],
1543
+ /**
1544
+ * Border Radius Bottom
1545
+ * @see https://tailwindcss.com/docs/border-radius
1546
+ */
1547
+ 'rounded-b': [{
1548
+ 'rounded-b': [borderRadius]
1549
+ }],
1550
+ /**
1551
+ * Border Radius Left
1552
+ * @see https://tailwindcss.com/docs/border-radius
1553
+ */
1554
+ 'rounded-l': [{
1555
+ 'rounded-l': [borderRadius]
1556
+ }],
1557
+ /**
1558
+ * Border Radius Start Start
1559
+ * @see https://tailwindcss.com/docs/border-radius
1560
+ */
1561
+ 'rounded-ss': [{
1562
+ 'rounded-ss': [borderRadius]
1563
+ }],
1564
+ /**
1565
+ * Border Radius Start End
1566
+ * @see https://tailwindcss.com/docs/border-radius
1567
+ */
1568
+ 'rounded-se': [{
1569
+ 'rounded-se': [borderRadius]
1570
+ }],
1571
+ /**
1572
+ * Border Radius End End
1573
+ * @see https://tailwindcss.com/docs/border-radius
1574
+ */
1575
+ 'rounded-ee': [{
1576
+ 'rounded-ee': [borderRadius]
1577
+ }],
1578
+ /**
1579
+ * Border Radius End Start
1580
+ * @see https://tailwindcss.com/docs/border-radius
1581
+ */
1582
+ 'rounded-es': [{
1583
+ 'rounded-es': [borderRadius]
1584
+ }],
1585
+ /**
1586
+ * Border Radius Top Left
1587
+ * @see https://tailwindcss.com/docs/border-radius
1588
+ */
1589
+ 'rounded-tl': [{
1590
+ 'rounded-tl': [borderRadius]
1591
+ }],
1592
+ /**
1593
+ * Border Radius Top Right
1594
+ * @see https://tailwindcss.com/docs/border-radius
1595
+ */
1596
+ 'rounded-tr': [{
1597
+ 'rounded-tr': [borderRadius]
1598
+ }],
1599
+ /**
1600
+ * Border Radius Bottom Right
1601
+ * @see https://tailwindcss.com/docs/border-radius
1602
+ */
1603
+ 'rounded-br': [{
1604
+ 'rounded-br': [borderRadius]
1605
+ }],
1606
+ /**
1607
+ * Border Radius Bottom Left
1608
+ * @see https://tailwindcss.com/docs/border-radius
1609
+ */
1610
+ 'rounded-bl': [{
1611
+ 'rounded-bl': [borderRadius]
1612
+ }],
1613
+ /**
1614
+ * Border Width
1615
+ * @see https://tailwindcss.com/docs/border-width
1616
+ */
1617
+ 'border-w': [{
1618
+ border: [borderWidth]
1619
+ }],
1620
+ /**
1621
+ * Border Width X
1622
+ * @see https://tailwindcss.com/docs/border-width
1623
+ */
1624
+ 'border-w-x': [{
1625
+ 'border-x': [borderWidth]
1626
+ }],
1627
+ /**
1628
+ * Border Width Y
1629
+ * @see https://tailwindcss.com/docs/border-width
1630
+ */
1631
+ 'border-w-y': [{
1632
+ 'border-y': [borderWidth]
1633
+ }],
1634
+ /**
1635
+ * Border Width Start
1636
+ * @see https://tailwindcss.com/docs/border-width
1637
+ */
1638
+ 'border-w-s': [{
1639
+ 'border-s': [borderWidth]
1640
+ }],
1641
+ /**
1642
+ * Border Width End
1643
+ * @see https://tailwindcss.com/docs/border-width
1644
+ */
1645
+ 'border-w-e': [{
1646
+ 'border-e': [borderWidth]
1647
+ }],
1648
+ /**
1649
+ * Border Width Top
1650
+ * @see https://tailwindcss.com/docs/border-width
1651
+ */
1652
+ 'border-w-t': [{
1653
+ 'border-t': [borderWidth]
1654
+ }],
1655
+ /**
1656
+ * Border Width Right
1657
+ * @see https://tailwindcss.com/docs/border-width
1658
+ */
1659
+ 'border-w-r': [{
1660
+ 'border-r': [borderWidth]
1661
+ }],
1662
+ /**
1663
+ * Border Width Bottom
1664
+ * @see https://tailwindcss.com/docs/border-width
1665
+ */
1666
+ 'border-w-b': [{
1667
+ 'border-b': [borderWidth]
1668
+ }],
1669
+ /**
1670
+ * Border Width Left
1671
+ * @see https://tailwindcss.com/docs/border-width
1672
+ */
1673
+ 'border-w-l': [{
1674
+ 'border-l': [borderWidth]
1675
+ }],
1676
+ /**
1677
+ * Border Opacity
1678
+ * @see https://tailwindcss.com/docs/border-opacity
1679
+ */
1680
+ 'border-opacity': [{
1681
+ 'border-opacity': [opacity]
1682
+ }],
1683
+ /**
1684
+ * Border Style
1685
+ * @see https://tailwindcss.com/docs/border-style
1686
+ */
1687
+ 'border-style': [{
1688
+ border: [...getLineStyles(), 'hidden']
1689
+ }],
1690
+ /**
1691
+ * Divide Width X
1692
+ * @see https://tailwindcss.com/docs/divide-width
1693
+ */
1694
+ 'divide-x': [{
1695
+ 'divide-x': [borderWidth]
1696
+ }],
1697
+ /**
1698
+ * Divide Width X Reverse
1699
+ * @see https://tailwindcss.com/docs/divide-width
1700
+ */
1701
+ 'divide-x-reverse': ['divide-x-reverse'],
1702
+ /**
1703
+ * Divide Width Y
1704
+ * @see https://tailwindcss.com/docs/divide-width
1705
+ */
1706
+ 'divide-y': [{
1707
+ 'divide-y': [borderWidth]
1708
+ }],
1709
+ /**
1710
+ * Divide Width Y Reverse
1711
+ * @see https://tailwindcss.com/docs/divide-width
1712
+ */
1713
+ 'divide-y-reverse': ['divide-y-reverse'],
1714
+ /**
1715
+ * Divide Opacity
1716
+ * @see https://tailwindcss.com/docs/divide-opacity
1717
+ */
1718
+ 'divide-opacity': [{
1719
+ 'divide-opacity': [opacity]
1720
+ }],
1721
+ /**
1722
+ * Divide Style
1723
+ * @see https://tailwindcss.com/docs/divide-style
1724
+ */
1725
+ 'divide-style': [{
1726
+ divide: getLineStyles()
1727
+ }],
1728
+ /**
1729
+ * Border Color
1730
+ * @see https://tailwindcss.com/docs/border-color
1731
+ */
1732
+ 'border-color': [{
1733
+ border: [borderColor]
1734
+ }],
1735
+ /**
1736
+ * Border Color X
1737
+ * @see https://tailwindcss.com/docs/border-color
1738
+ */
1739
+ 'border-color-x': [{
1740
+ 'border-x': [borderColor]
1741
+ }],
1742
+ /**
1743
+ * Border Color Y
1744
+ * @see https://tailwindcss.com/docs/border-color
1745
+ */
1746
+ 'border-color-y': [{
1747
+ 'border-y': [borderColor]
1748
+ }],
1749
+ /**
1750
+ * Border Color S
1751
+ * @see https://tailwindcss.com/docs/border-color
1752
+ */
1753
+ 'border-color-s': [{
1754
+ 'border-s': [borderColor]
1755
+ }],
1756
+ /**
1757
+ * Border Color E
1758
+ * @see https://tailwindcss.com/docs/border-color
1759
+ */
1760
+ 'border-color-e': [{
1761
+ 'border-e': [borderColor]
1762
+ }],
1763
+ /**
1764
+ * Border Color Top
1765
+ * @see https://tailwindcss.com/docs/border-color
1766
+ */
1767
+ 'border-color-t': [{
1768
+ 'border-t': [borderColor]
1769
+ }],
1770
+ /**
1771
+ * Border Color Right
1772
+ * @see https://tailwindcss.com/docs/border-color
1773
+ */
1774
+ 'border-color-r': [{
1775
+ 'border-r': [borderColor]
1776
+ }],
1777
+ /**
1778
+ * Border Color Bottom
1779
+ * @see https://tailwindcss.com/docs/border-color
1780
+ */
1781
+ 'border-color-b': [{
1782
+ 'border-b': [borderColor]
1783
+ }],
1784
+ /**
1785
+ * Border Color Left
1786
+ * @see https://tailwindcss.com/docs/border-color
1787
+ */
1788
+ 'border-color-l': [{
1789
+ 'border-l': [borderColor]
1790
+ }],
1791
+ /**
1792
+ * Divide Color
1793
+ * @see https://tailwindcss.com/docs/divide-color
1794
+ */
1795
+ 'divide-color': [{
1796
+ divide: [borderColor]
1797
+ }],
1798
+ /**
1799
+ * Outline Style
1800
+ * @see https://tailwindcss.com/docs/outline-style
1801
+ */
1802
+ 'outline-style': [{
1803
+ outline: ['', ...getLineStyles()]
1804
+ }],
1805
+ /**
1806
+ * Outline Offset
1807
+ * @see https://tailwindcss.com/docs/outline-offset
1808
+ */
1809
+ 'outline-offset': [{
1810
+ 'outline-offset': [isLength, isArbitraryValue]
1811
+ }],
1812
+ /**
1813
+ * Outline Width
1814
+ * @see https://tailwindcss.com/docs/outline-width
1815
+ */
1816
+ 'outline-w': [{
1817
+ outline: [isLength, isArbitraryLength]
1818
+ }],
1819
+ /**
1820
+ * Outline Color
1821
+ * @see https://tailwindcss.com/docs/outline-color
1822
+ */
1823
+ 'outline-color': [{
1824
+ outline: [colors]
1825
+ }],
1826
+ /**
1827
+ * Ring Width
1828
+ * @see https://tailwindcss.com/docs/ring-width
1829
+ */
1830
+ 'ring-w': [{
1831
+ ring: getLengthWithEmptyAndArbitrary()
1832
+ }],
1833
+ /**
1834
+ * Ring Width Inset
1835
+ * @see https://tailwindcss.com/docs/ring-width
1836
+ */
1837
+ 'ring-w-inset': ['ring-inset'],
1838
+ /**
1839
+ * Ring Color
1840
+ * @see https://tailwindcss.com/docs/ring-color
1841
+ */
1842
+ 'ring-color': [{
1843
+ ring: [colors]
1844
+ }],
1845
+ /**
1846
+ * Ring Opacity
1847
+ * @see https://tailwindcss.com/docs/ring-opacity
1848
+ */
1849
+ 'ring-opacity': [{
1850
+ 'ring-opacity': [opacity]
1851
+ }],
1852
+ /**
1853
+ * Ring Offset Width
1854
+ * @see https://tailwindcss.com/docs/ring-offset-width
1855
+ */
1856
+ 'ring-offset-w': [{
1857
+ 'ring-offset': [isLength, isArbitraryLength]
1858
+ }],
1859
+ /**
1860
+ * Ring Offset Color
1861
+ * @see https://tailwindcss.com/docs/ring-offset-color
1862
+ */
1863
+ 'ring-offset-color': [{
1864
+ 'ring-offset': [colors]
1865
+ }],
1866
+ // Effects
1867
+ /**
1868
+ * Box Shadow
1869
+ * @see https://tailwindcss.com/docs/box-shadow
1870
+ */
1871
+ shadow: [{
1872
+ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]
1873
+ }],
1874
+ /**
1875
+ * Box Shadow Color
1876
+ * @see https://tailwindcss.com/docs/box-shadow-color
1877
+ */
1878
+ 'shadow-color': [{
1879
+ shadow: [isAny]
1880
+ }],
1881
+ /**
1882
+ * Opacity
1883
+ * @see https://tailwindcss.com/docs/opacity
1884
+ */
1885
+ opacity: [{
1886
+ opacity: [opacity]
1887
+ }],
1888
+ /**
1889
+ * Mix Blend Mode
1890
+ * @see https://tailwindcss.com/docs/mix-blend-mode
1891
+ */
1892
+ 'mix-blend': [{
1893
+ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']
1894
+ }],
1895
+ /**
1896
+ * Background Blend Mode
1897
+ * @see https://tailwindcss.com/docs/background-blend-mode
1898
+ */
1899
+ 'bg-blend': [{
1900
+ 'bg-blend': getBlendModes()
1901
+ }],
1902
+ // Filters
1903
+ /**
1904
+ * Filter
1905
+ * @deprecated since Tailwind CSS v3.0.0
1906
+ * @see https://tailwindcss.com/docs/filter
1907
+ */
1908
+ filter: [{
1909
+ filter: ['', 'none']
1910
+ }],
1911
+ /**
1912
+ * Blur
1913
+ * @see https://tailwindcss.com/docs/blur
1914
+ */
1915
+ blur: [{
1916
+ blur: [blur]
1917
+ }],
1918
+ /**
1919
+ * Brightness
1920
+ * @see https://tailwindcss.com/docs/brightness
1921
+ */
1922
+ brightness: [{
1923
+ brightness: [brightness]
1924
+ }],
1925
+ /**
1926
+ * Contrast
1927
+ * @see https://tailwindcss.com/docs/contrast
1928
+ */
1929
+ contrast: [{
1930
+ contrast: [contrast]
1931
+ }],
1932
+ /**
1933
+ * Drop Shadow
1934
+ * @see https://tailwindcss.com/docs/drop-shadow
1935
+ */
1936
+ 'drop-shadow': [{
1937
+ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]
1938
+ }],
1939
+ /**
1940
+ * Grayscale
1941
+ * @see https://tailwindcss.com/docs/grayscale
1942
+ */
1943
+ grayscale: [{
1944
+ grayscale: [grayscale]
1945
+ }],
1946
+ /**
1947
+ * Hue Rotate
1948
+ * @see https://tailwindcss.com/docs/hue-rotate
1949
+ */
1950
+ 'hue-rotate': [{
1951
+ 'hue-rotate': [hueRotate]
1952
+ }],
1953
+ /**
1954
+ * Invert
1955
+ * @see https://tailwindcss.com/docs/invert
1956
+ */
1957
+ invert: [{
1958
+ invert: [invert]
1959
+ }],
1960
+ /**
1961
+ * Saturate
1962
+ * @see https://tailwindcss.com/docs/saturate
1963
+ */
1964
+ saturate: [{
1965
+ saturate: [saturate]
1966
+ }],
1967
+ /**
1968
+ * Sepia
1969
+ * @see https://tailwindcss.com/docs/sepia
1970
+ */
1971
+ sepia: [{
1972
+ sepia: [sepia]
1973
+ }],
1974
+ /**
1975
+ * Backdrop Filter
1976
+ * @deprecated since Tailwind CSS v3.0.0
1977
+ * @see https://tailwindcss.com/docs/backdrop-filter
1978
+ */
1979
+ 'backdrop-filter': [{
1980
+ 'backdrop-filter': ['', 'none']
1981
+ }],
1982
+ /**
1983
+ * Backdrop Blur
1984
+ * @see https://tailwindcss.com/docs/backdrop-blur
1985
+ */
1986
+ 'backdrop-blur': [{
1987
+ 'backdrop-blur': [blur]
1988
+ }],
1989
+ /**
1990
+ * Backdrop Brightness
1991
+ * @see https://tailwindcss.com/docs/backdrop-brightness
1992
+ */
1993
+ 'backdrop-brightness': [{
1994
+ 'backdrop-brightness': [brightness]
1995
+ }],
1996
+ /**
1997
+ * Backdrop Contrast
1998
+ * @see https://tailwindcss.com/docs/backdrop-contrast
1999
+ */
2000
+ 'backdrop-contrast': [{
2001
+ 'backdrop-contrast': [contrast]
2002
+ }],
2003
+ /**
2004
+ * Backdrop Grayscale
2005
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2006
+ */
2007
+ 'backdrop-grayscale': [{
2008
+ 'backdrop-grayscale': [grayscale]
2009
+ }],
2010
+ /**
2011
+ * Backdrop Hue Rotate
2012
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2013
+ */
2014
+ 'backdrop-hue-rotate': [{
2015
+ 'backdrop-hue-rotate': [hueRotate]
2016
+ }],
2017
+ /**
2018
+ * Backdrop Invert
2019
+ * @see https://tailwindcss.com/docs/backdrop-invert
2020
+ */
2021
+ 'backdrop-invert': [{
2022
+ 'backdrop-invert': [invert]
2023
+ }],
2024
+ /**
2025
+ * Backdrop Opacity
2026
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2027
+ */
2028
+ 'backdrop-opacity': [{
2029
+ 'backdrop-opacity': [opacity]
2030
+ }],
2031
+ /**
2032
+ * Backdrop Saturate
2033
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2034
+ */
2035
+ 'backdrop-saturate': [{
2036
+ 'backdrop-saturate': [saturate]
2037
+ }],
2038
+ /**
2039
+ * Backdrop Sepia
2040
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2041
+ */
2042
+ 'backdrop-sepia': [{
2043
+ 'backdrop-sepia': [sepia]
2044
+ }],
2045
+ // Tables
2046
+ /**
2047
+ * Border Collapse
2048
+ * @see https://tailwindcss.com/docs/border-collapse
2049
+ */
2050
+ 'border-collapse': [{
2051
+ border: ['collapse', 'separate']
2052
+ }],
2053
+ /**
2054
+ * Border Spacing
2055
+ * @see https://tailwindcss.com/docs/border-spacing
2056
+ */
2057
+ 'border-spacing': [{
2058
+ 'border-spacing': [borderSpacing]
2059
+ }],
2060
+ /**
2061
+ * Border Spacing X
2062
+ * @see https://tailwindcss.com/docs/border-spacing
2063
+ */
2064
+ 'border-spacing-x': [{
2065
+ 'border-spacing-x': [borderSpacing]
2066
+ }],
2067
+ /**
2068
+ * Border Spacing Y
2069
+ * @see https://tailwindcss.com/docs/border-spacing
2070
+ */
2071
+ 'border-spacing-y': [{
2072
+ 'border-spacing-y': [borderSpacing]
2073
+ }],
2074
+ /**
2075
+ * Table Layout
2076
+ * @see https://tailwindcss.com/docs/table-layout
2077
+ */
2078
+ 'table-layout': [{
2079
+ table: ['auto', 'fixed']
2080
+ }],
2081
+ /**
2082
+ * Caption Side
2083
+ * @see https://tailwindcss.com/docs/caption-side
2084
+ */
2085
+ caption: [{
2086
+ caption: ['top', 'bottom']
2087
+ }],
2088
+ // Transitions and Animation
2089
+ /**
2090
+ * Tranisition Property
2091
+ * @see https://tailwindcss.com/docs/transition-property
2092
+ */
2093
+ transition: [{
2094
+ transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]
2095
+ }],
2096
+ /**
2097
+ * Transition Duration
2098
+ * @see https://tailwindcss.com/docs/transition-duration
2099
+ */
2100
+ duration: [{
2101
+ duration: getNumberAndArbitrary()
2102
+ }],
2103
+ /**
2104
+ * Transition Timing Function
2105
+ * @see https://tailwindcss.com/docs/transition-timing-function
2106
+ */
2107
+ ease: [{
2108
+ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]
2109
+ }],
2110
+ /**
2111
+ * Transition Delay
2112
+ * @see https://tailwindcss.com/docs/transition-delay
2113
+ */
2114
+ delay: [{
2115
+ delay: getNumberAndArbitrary()
2116
+ }],
2117
+ /**
2118
+ * Animation
2119
+ * @see https://tailwindcss.com/docs/animation
2120
+ */
2121
+ animate: [{
2122
+ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]
2123
+ }],
2124
+ // Transforms
2125
+ /**
2126
+ * Transform
2127
+ * @see https://tailwindcss.com/docs/transform
2128
+ */
2129
+ transform: [{
2130
+ transform: ['', 'gpu', 'none']
2131
+ }],
2132
+ /**
2133
+ * Scale
2134
+ * @see https://tailwindcss.com/docs/scale
2135
+ */
2136
+ scale: [{
2137
+ scale: [scale]
2138
+ }],
2139
+ /**
2140
+ * Scale X
2141
+ * @see https://tailwindcss.com/docs/scale
2142
+ */
2143
+ 'scale-x': [{
2144
+ 'scale-x': [scale]
2145
+ }],
2146
+ /**
2147
+ * Scale Y
2148
+ * @see https://tailwindcss.com/docs/scale
2149
+ */
2150
+ 'scale-y': [{
2151
+ 'scale-y': [scale]
2152
+ }],
2153
+ /**
2154
+ * Rotate
2155
+ * @see https://tailwindcss.com/docs/rotate
2156
+ */
2157
+ rotate: [{
2158
+ rotate: [isInteger, isArbitraryValue]
2159
+ }],
2160
+ /**
2161
+ * Translate X
2162
+ * @see https://tailwindcss.com/docs/translate
2163
+ */
2164
+ 'translate-x': [{
2165
+ 'translate-x': [translate]
2166
+ }],
2167
+ /**
2168
+ * Translate Y
2169
+ * @see https://tailwindcss.com/docs/translate
2170
+ */
2171
+ 'translate-y': [{
2172
+ 'translate-y': [translate]
2173
+ }],
2174
+ /**
2175
+ * Skew X
2176
+ * @see https://tailwindcss.com/docs/skew
2177
+ */
2178
+ 'skew-x': [{
2179
+ 'skew-x': [skew]
2180
+ }],
2181
+ /**
2182
+ * Skew Y
2183
+ * @see https://tailwindcss.com/docs/skew
2184
+ */
2185
+ 'skew-y': [{
2186
+ 'skew-y': [skew]
2187
+ }],
2188
+ /**
2189
+ * Transform Origin
2190
+ * @see https://tailwindcss.com/docs/transform-origin
2191
+ */
2192
+ 'transform-origin': [{
2193
+ origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]
2194
+ }],
2195
+ // Interactivity
2196
+ /**
2197
+ * Accent Color
2198
+ * @see https://tailwindcss.com/docs/accent-color
2199
+ */
2200
+ accent: [{
2201
+ accent: ['auto', colors]
2202
+ }],
2203
+ /**
2204
+ * Appearance
2205
+ * @see https://tailwindcss.com/docs/appearance
2206
+ */
2207
+ appearance: [{
2208
+ appearance: ['none', 'auto']
2209
+ }],
2210
+ /**
2211
+ * Cursor
2212
+ * @see https://tailwindcss.com/docs/cursor
2213
+ */
2214
+ cursor: [{
2215
+ 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]
2216
+ }],
2217
+ /**
2218
+ * Caret Color
2219
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2220
+ */
2221
+ 'caret-color': [{
2222
+ caret: [colors]
2223
+ }],
2224
+ /**
2225
+ * Pointer Events
2226
+ * @see https://tailwindcss.com/docs/pointer-events
2227
+ */
2228
+ 'pointer-events': [{
2229
+ 'pointer-events': ['none', 'auto']
2230
+ }],
2231
+ /**
2232
+ * Resize
2233
+ * @see https://tailwindcss.com/docs/resize
2234
+ */
2235
+ resize: [{
2236
+ resize: ['none', 'y', 'x', '']
2237
+ }],
2238
+ /**
2239
+ * Scroll Behavior
2240
+ * @see https://tailwindcss.com/docs/scroll-behavior
2241
+ */
2242
+ 'scroll-behavior': [{
2243
+ scroll: ['auto', 'smooth']
2244
+ }],
2245
+ /**
2246
+ * Scroll Margin
2247
+ * @see https://tailwindcss.com/docs/scroll-margin
2248
+ */
2249
+ 'scroll-m': [{
2250
+ 'scroll-m': getSpacingWithArbitrary()
2251
+ }],
2252
+ /**
2253
+ * Scroll Margin X
2254
+ * @see https://tailwindcss.com/docs/scroll-margin
2255
+ */
2256
+ 'scroll-mx': [{
2257
+ 'scroll-mx': getSpacingWithArbitrary()
2258
+ }],
2259
+ /**
2260
+ * Scroll Margin Y
2261
+ * @see https://tailwindcss.com/docs/scroll-margin
2262
+ */
2263
+ 'scroll-my': [{
2264
+ 'scroll-my': getSpacingWithArbitrary()
2265
+ }],
2266
+ /**
2267
+ * Scroll Margin Start
2268
+ * @see https://tailwindcss.com/docs/scroll-margin
2269
+ */
2270
+ 'scroll-ms': [{
2271
+ 'scroll-ms': getSpacingWithArbitrary()
2272
+ }],
2273
+ /**
2274
+ * Scroll Margin End
2275
+ * @see https://tailwindcss.com/docs/scroll-margin
2276
+ */
2277
+ 'scroll-me': [{
2278
+ 'scroll-me': getSpacingWithArbitrary()
2279
+ }],
2280
+ /**
2281
+ * Scroll Margin Top
2282
+ * @see https://tailwindcss.com/docs/scroll-margin
2283
+ */
2284
+ 'scroll-mt': [{
2285
+ 'scroll-mt': getSpacingWithArbitrary()
2286
+ }],
2287
+ /**
2288
+ * Scroll Margin Right
2289
+ * @see https://tailwindcss.com/docs/scroll-margin
2290
+ */
2291
+ 'scroll-mr': [{
2292
+ 'scroll-mr': getSpacingWithArbitrary()
2293
+ }],
2294
+ /**
2295
+ * Scroll Margin Bottom
2296
+ * @see https://tailwindcss.com/docs/scroll-margin
2297
+ */
2298
+ 'scroll-mb': [{
2299
+ 'scroll-mb': getSpacingWithArbitrary()
2300
+ }],
2301
+ /**
2302
+ * Scroll Margin Left
2303
+ * @see https://tailwindcss.com/docs/scroll-margin
2304
+ */
2305
+ 'scroll-ml': [{
2306
+ 'scroll-ml': getSpacingWithArbitrary()
2307
+ }],
2308
+ /**
2309
+ * Scroll Padding
2310
+ * @see https://tailwindcss.com/docs/scroll-padding
2311
+ */
2312
+ 'scroll-p': [{
2313
+ 'scroll-p': getSpacingWithArbitrary()
2314
+ }],
2315
+ /**
2316
+ * Scroll Padding X
2317
+ * @see https://tailwindcss.com/docs/scroll-padding
2318
+ */
2319
+ 'scroll-px': [{
2320
+ 'scroll-px': getSpacingWithArbitrary()
2321
+ }],
2322
+ /**
2323
+ * Scroll Padding Y
2324
+ * @see https://tailwindcss.com/docs/scroll-padding
2325
+ */
2326
+ 'scroll-py': [{
2327
+ 'scroll-py': getSpacingWithArbitrary()
2328
+ }],
2329
+ /**
2330
+ * Scroll Padding Start
2331
+ * @see https://tailwindcss.com/docs/scroll-padding
2332
+ */
2333
+ 'scroll-ps': [{
2334
+ 'scroll-ps': getSpacingWithArbitrary()
2335
+ }],
2336
+ /**
2337
+ * Scroll Padding End
2338
+ * @see https://tailwindcss.com/docs/scroll-padding
2339
+ */
2340
+ 'scroll-pe': [{
2341
+ 'scroll-pe': getSpacingWithArbitrary()
2342
+ }],
2343
+ /**
2344
+ * Scroll Padding Top
2345
+ * @see https://tailwindcss.com/docs/scroll-padding
2346
+ */
2347
+ 'scroll-pt': [{
2348
+ 'scroll-pt': getSpacingWithArbitrary()
2349
+ }],
2350
+ /**
2351
+ * Scroll Padding Right
2352
+ * @see https://tailwindcss.com/docs/scroll-padding
2353
+ */
2354
+ 'scroll-pr': [{
2355
+ 'scroll-pr': getSpacingWithArbitrary()
2356
+ }],
2357
+ /**
2358
+ * Scroll Padding Bottom
2359
+ * @see https://tailwindcss.com/docs/scroll-padding
2360
+ */
2361
+ 'scroll-pb': [{
2362
+ 'scroll-pb': getSpacingWithArbitrary()
2363
+ }],
2364
+ /**
2365
+ * Scroll Padding Left
2366
+ * @see https://tailwindcss.com/docs/scroll-padding
2367
+ */
2368
+ 'scroll-pl': [{
2369
+ 'scroll-pl': getSpacingWithArbitrary()
2370
+ }],
2371
+ /**
2372
+ * Scroll Snap Align
2373
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2374
+ */
2375
+ 'snap-align': [{
2376
+ snap: ['start', 'end', 'center', 'align-none']
2377
+ }],
2378
+ /**
2379
+ * Scroll Snap Stop
2380
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2381
+ */
2382
+ 'snap-stop': [{
2383
+ snap: ['normal', 'always']
2384
+ }],
2385
+ /**
2386
+ * Scroll Snap Type
2387
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2388
+ */
2389
+ 'snap-type': [{
2390
+ snap: ['none', 'x', 'y', 'both']
2391
+ }],
2392
+ /**
2393
+ * Scroll Snap Type Strictness
2394
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2395
+ */
2396
+ 'snap-strictness': [{
2397
+ snap: ['mandatory', 'proximity']
2398
+ }],
2399
+ /**
2400
+ * Touch Action
2401
+ * @see https://tailwindcss.com/docs/touch-action
2402
+ */
2403
+ touch: [{
2404
+ touch: ['auto', 'none', 'manipulation']
2405
+ }],
2406
+ /**
2407
+ * Touch Action X
2408
+ * @see https://tailwindcss.com/docs/touch-action
2409
+ */
2410
+ 'touch-x': [{
2411
+ 'touch-pan': ['x', 'left', 'right']
2412
+ }],
2413
+ /**
2414
+ * Touch Action Y
2415
+ * @see https://tailwindcss.com/docs/touch-action
2416
+ */
2417
+ 'touch-y': [{
2418
+ 'touch-pan': ['y', 'up', 'down']
2419
+ }],
2420
+ /**
2421
+ * Touch Action Pinch Zoom
2422
+ * @see https://tailwindcss.com/docs/touch-action
2423
+ */
2424
+ 'touch-pz': ['touch-pinch-zoom'],
2425
+ /**
2426
+ * User Select
2427
+ * @see https://tailwindcss.com/docs/user-select
2428
+ */
2429
+ select: [{
2430
+ select: ['none', 'text', 'all', 'auto']
2431
+ }],
2432
+ /**
2433
+ * Will Change
2434
+ * @see https://tailwindcss.com/docs/will-change
2435
+ */
2436
+ 'will-change': [{
2437
+ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]
2438
+ }],
2439
+ // SVG
2440
+ /**
2441
+ * Fill
2442
+ * @see https://tailwindcss.com/docs/fill
2443
+ */
2444
+ fill: [{
2445
+ fill: [colors, 'none']
2446
+ }],
2447
+ /**
2448
+ * Stroke Width
2449
+ * @see https://tailwindcss.com/docs/stroke-width
2450
+ */
2451
+ 'stroke-w': [{
2452
+ stroke: [isLength, isArbitraryLength, isArbitraryNumber]
2453
+ }],
2454
+ /**
2455
+ * Stroke
2456
+ * @see https://tailwindcss.com/docs/stroke
2457
+ */
2458
+ stroke: [{
2459
+ stroke: [colors, 'none']
2460
+ }],
2461
+ // Accessibility
2462
+ /**
2463
+ * Screen Readers
2464
+ * @see https://tailwindcss.com/docs/screen-readers
2465
+ */
2466
+ sr: ['sr-only', 'not-sr-only'],
2467
+ /**
2468
+ * Forced Color Adjust
2469
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2470
+ */
2471
+ 'forced-color-adjust': [{
2472
+ 'forced-color-adjust': ['auto', 'none']
2473
+ }]
2474
+ },
2475
+ conflictingClassGroups: {
2476
+ overflow: ['overflow-x', 'overflow-y'],
2477
+ overscroll: ['overscroll-x', 'overscroll-y'],
2478
+ inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],
2479
+ 'inset-x': ['right', 'left'],
2480
+ 'inset-y': ['top', 'bottom'],
2481
+ flex: ['basis', 'grow', 'shrink'],
2482
+ gap: ['gap-x', 'gap-y'],
2483
+ p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],
2484
+ px: ['pr', 'pl'],
2485
+ py: ['pt', 'pb'],
2486
+ m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],
2487
+ mx: ['mr', 'ml'],
2488
+ my: ['mt', 'mb'],
2489
+ size: ['w', 'h'],
2490
+ 'font-size': ['leading'],
2491
+ 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],
2492
+ 'fvn-ordinal': ['fvn-normal'],
2493
+ 'fvn-slashed-zero': ['fvn-normal'],
2494
+ 'fvn-figure': ['fvn-normal'],
2495
+ 'fvn-spacing': ['fvn-normal'],
2496
+ 'fvn-fraction': ['fvn-normal'],
2497
+ 'line-clamp': ['display', 'overflow'],
2498
+ 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'],
2499
+ 'rounded-s': ['rounded-ss', 'rounded-es'],
2500
+ 'rounded-e': ['rounded-se', 'rounded-ee'],
2501
+ 'rounded-t': ['rounded-tl', 'rounded-tr'],
2502
+ 'rounded-r': ['rounded-tr', 'rounded-br'],
2503
+ 'rounded-b': ['rounded-br', 'rounded-bl'],
2504
+ 'rounded-l': ['rounded-tl', 'rounded-bl'],
2505
+ 'border-spacing': ['border-spacing-x', 'border-spacing-y'],
2506
+ 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
2507
+ 'border-w-x': ['border-w-r', 'border-w-l'],
2508
+ 'border-w-y': ['border-w-t', 'border-w-b'],
2509
+ 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
2510
+ 'border-color-x': ['border-color-r', 'border-color-l'],
2511
+ 'border-color-y': ['border-color-t', 'border-color-b'],
2512
+ 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],
2513
+ 'scroll-mx': ['scroll-mr', 'scroll-ml'],
2514
+ 'scroll-my': ['scroll-mt', 'scroll-mb'],
2515
+ 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],
2516
+ 'scroll-px': ['scroll-pr', 'scroll-pl'],
2517
+ 'scroll-py': ['scroll-pt', 'scroll-pb'],
2518
+ touch: ['touch-x', 'touch-y', 'touch-pz'],
2519
+ 'touch-x': ['touch'],
2520
+ 'touch-y': ['touch'],
2521
+ 'touch-pz': ['touch']
2522
+ },
2523
+ conflictingClassGroupModifiers: {
2524
+ 'font-size': ['leading']
2525
+ }
2526
+ };
2527
+ };
2528
+ const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
2529
+
2530
+ function cn(...inputs) {
2531
+ return twMerge(clsx(inputs));
2532
+ }
2533
+
2534
+ const Button = React.forwardRef(({ className, variant = 'primary', size = 'md', children, ...props }, ref) => {
2535
+ return (jsxRuntime.jsx("button", { className: cn('inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none', {
2536
+ // Variants
2537
+ 'bg-primary-600 text-white hover:bg-primary-700': variant === 'primary',
2538
+ 'bg-gray-200 text-gray-900 hover:bg-gray-300': variant === 'secondary',
2539
+ 'border border-gray-300 bg-transparent hover:bg-gray-50': variant === 'outline',
2540
+ 'hover:bg-gray-100': variant === 'ghost',
2541
+ // Sizes
2542
+ 'h-8 px-3 text-sm': size === 'sm',
2543
+ 'h-10 px-4 py-2': size === 'md',
2544
+ 'h-11 px-6 text-lg': size === 'lg',
2545
+ }, className), ref: ref, ...props, children: children }));
2546
+ });
2547
+ Button.displayName = 'Button';
2548
+
2549
+ exports.Button = Button;
2550
+ exports.cn = cn;
2551
+ //# sourceMappingURL=index.js.map