gsap-react-marquee 0.1.0

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