@niledatabase/react 3.0.0-alpha.2 → 3.0.0-alpha.21

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