mado-ui 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -6,186 +6,6 @@ var react = require('react');
6
6
  var react$1 = require('@headlessui/react');
7
7
  var reactDom = require('react-dom');
8
8
 
9
- /**
10
- * ### Has Class
11
- * - Returns a boolean based on whether the specified element has the specified class
12
- * @param {HTMLElement} element Any HTML Element
13
- * @param {string} className A string of any class to check for
14
- * @returns {boolean} true if the specified element has the specified class, else false
15
- */
16
- function hasClass(element, className) {
17
- return element.classList.contains(className);
18
- }
19
- /**
20
- * ### Add Class
21
- * - Adds the specified classes to the specified elements
22
- * @param {Element|HTMLElement|HTMLElement[]|NodeList|string|undefined} elements An HTML Element, an array of HTML Elements, a Node List, a string (as a selector for a querySelector)
23
- * @param {string|string[]} classList A string or an array of classes to add to each element
24
- */
25
- function addClass(elements, classList) {
26
- const elementsType = elements.constructor.name, elementsIsString = typeof elements === 'string', classListType = classList.constructor.name, classListIsString = typeof classList === 'string';
27
- let elementList, classListGroup;
28
- // & Convert elements to array
29
- switch (elementsType) {
30
- // Selector
31
- case 'String':
32
- if (elementsIsString)
33
- elementList = Array.from(document.querySelectorAll(elements));
34
- break;
35
- // Multiple HTML Elements
36
- case 'NodeList':
37
- if (!elementsIsString)
38
- elementList = Array.from(elements);
39
- break;
40
- // Array of Elements
41
- case 'Array':
42
- if (!elementsIsString)
43
- elementList = elements;
44
- break;
45
- // Single HTML Element
46
- default:
47
- if (elementsType.startsWith('HTML') && !elementsIsString)
48
- elementList = [elements];
49
- }
50
- // & Convert classList to array
51
- switch (classListType) {
52
- case 'String':
53
- if (classListIsString)
54
- if (classList.split(' ').length >= 2) {
55
- classListGroup = classList.split(' ');
56
- }
57
- else {
58
- classListGroup = [classList];
59
- }
60
- break;
61
- case 'Array':
62
- if (!classListIsString)
63
- classListGroup = classList;
64
- break;
65
- }
66
- if (!elementList || elementList.length < 1)
67
- throw new Error(`Elements are invalid or undefined. elements: ${elements} → elementList: ${elementList}`);
68
- if (!classListGroup || classListGroup.length < 1)
69
- throw new Error(`Class List is invalid or undefined. classList: ${classList} → classListGroup: ${classListGroup}`);
70
- elementList.forEach((element) => classListGroup.forEach((classItem) => {
71
- if (hasClass(element, classItem))
72
- return;
73
- element.classList.add(classItem);
74
- }));
75
- }
76
- /**
77
- * ### Remove Class
78
- * - Removes the specified classes from the specified elements
79
- * @param {HTMLElement|HTMLElement[]|NodeList|string|undefined} elements An HTML Element, an array of HTML Elements, a Node List, a string (as a selector for a querySelector)
80
- * @param {string|string[]} classList A string or an array of classes to remove from each element
81
- */
82
- function removeClass(elements, classList) {
83
- const elementsType = elements.constructor.name, elementsIsString = typeof elements === 'string', classListType = classList.constructor.name, classListIsString = typeof classList === 'string';
84
- let elementList, classListGroup;
85
- // & Convert elements to array
86
- switch (elementsType) {
87
- // Selector
88
- case 'String':
89
- if (elementsIsString)
90
- elementList = Array.from(document.querySelectorAll(elements));
91
- break;
92
- // Multiple HTML Elements
93
- case 'NodeList':
94
- if (!elementsIsString)
95
- elementList = Array.from(elements);
96
- break;
97
- // Array of Elements
98
- case 'Array':
99
- if (!elementsIsString)
100
- elementList = elements;
101
- break;
102
- // Single HTML Element
103
- default:
104
- if (elementsType.startsWith('HTML') && !elementsIsString)
105
- elementList = [elements];
106
- }
107
- // & Convert classList to array
108
- switch (classListType) {
109
- case 'String':
110
- if (classListIsString)
111
- if (classList.split(' ').length >= 2) {
112
- classListGroup = classList.split(' ');
113
- }
114
- else {
115
- classListGroup = [classList];
116
- }
117
- break;
118
- case 'Array':
119
- if (!classListIsString)
120
- classListGroup = classList;
121
- break;
122
- }
123
- if (!elementList || elementList.length < 1)
124
- throw new Error(`Elements are invalid or undefined. elements: ${elements} → elementList: ${elementList}`);
125
- if (!classListGroup || classListGroup.length < 1)
126
- throw new Error(`Class List is invalid or undefined. classList: ${classList} → classListGroup: ${classListGroup}`);
127
- elementList.forEach((element) => classListGroup.forEach((classItem) => {
128
- if (!hasClass(element, classItem))
129
- return;
130
- element.classList.remove(classItem);
131
- }));
132
- }
133
- /**
134
- * ### Toggle Class
135
- * - Toggles the specified classes on the specified elements
136
- * @param {HTMLElement|HTMLElement[]|NodeList|string|undefined} elements An HTML Element, an array of HTML Elements, a Node List, a string (as a selector for a querySelector)
137
- * @param {string|string[]} classList A string or an array of classes to toggle on each element
138
- */
139
- function toggleClass(elements, classList) {
140
- const elementsType = elements.constructor.name, elementsIsString = typeof elements === 'string', classListType = classList.constructor.name, classListIsString = typeof classList === 'string';
141
- let elementList, classListGroup;
142
- // & Convert elements to array
143
- switch (elementsType) {
144
- // Selector
145
- case 'String':
146
- if (elementsIsString)
147
- elementList = Array.from(document.querySelectorAll(elements));
148
- break;
149
- // Multiple HTML Elements
150
- case 'NodeList':
151
- if (!elementsIsString)
152
- elementList = Array.from(elements);
153
- break;
154
- // Array of Elements
155
- case 'Array':
156
- if (!elementsIsString)
157
- elementList = elements;
158
- break;
159
- // Single HTML Element
160
- default:
161
- if (elementsType.startsWith('HTML') && !elementsIsString)
162
- elementList = [elements];
163
- }
164
- // & Convert classList to array
165
- switch (classListType) {
166
- case 'String':
167
- if (classListIsString)
168
- if (classList.split(' ').length >= 2) {
169
- classListGroup = classList.split(' ');
170
- }
171
- else {
172
- classListGroup = [classList];
173
- }
174
- break;
175
- case 'Array':
176
- if (!classListIsString)
177
- classListGroup = classList;
178
- break;
179
- }
180
- if (!elementList || elementList.length < 1)
181
- throw new Error(`Elements are invalid or undefined. elements: ${elements} → elementList: ${elementList}`);
182
- if (!classListGroup || classListGroup.length < 1)
183
- throw new Error(`Class List is invalid or undefined. classList: ${classList} → classListGroup: ${classListGroup}`);
184
- elementList.forEach((element) => classListGroup.forEach((classItem) => {
185
- element.classList.toggle(classItem);
186
- }));
187
- }
188
-
189
9
  const integerList = Array.from({ length: 100 }, (_, i) => `${i + 1}`);
190
10
  const twMerge = tailwindMerge.extendTailwindMerge({
191
11
  extend: {
@@ -262,105 +82,13 @@ const twMerge = tailwindMerge.extendTailwindMerge({
262
82
  },
263
83
  },
264
84
  });
265
- function extendMadoTailwindMerge(configExtension) {
266
- const extend = configExtension.extend || {};
267
- const theme = extend.theme || {};
268
- const color = 'color' in theme ? theme.color : [];
269
- const classGroups = extend.classGroups || {};
270
- const themeRest = { ...theme };
271
- if ('color' in themeRest)
272
- delete themeRest.color;
273
- const extendRest = { ...extend };
274
- delete extendRest.theme;
275
- delete extendRest.classGroups;
276
- return tailwindMerge.extendTailwindMerge({
277
- extend: {
278
- theme: {
279
- color: [
280
- {
281
- ui: [
282
- 'red',
283
- 'orange',
284
- 'yellow',
285
- 'green',
286
- 'sky-blue',
287
- 'blue',
288
- 'violet',
289
- 'magenta',
290
- 'purple',
291
- 'brown',
292
- 'grey',
293
- 'pink',
294
- ],
295
- },
296
- ...color,
297
- ],
298
- ...themeRest,
299
- },
300
- classGroups: {
301
- animate: [
302
- {
303
- animate: [
304
- 'bounce',
305
- 'double-spin',
306
- 'drop-in',
307
- 'flip',
308
- 'flip-again',
309
- 'grid-rows',
310
- 'heartbeat',
311
- 'ping',
312
- 'pulse',
313
- 'slide-up',
314
- 'spin',
315
- 'wave',
316
- ],
317
- },
318
- ],
319
- 'animation-direction': [
320
- {
321
- 'animation-direction': ['normal', 'reverse', 'alternate', 'alternate-reverse'],
322
- },
323
- ],
324
- 'animation-fill': [
325
- {
326
- 'animation-fill': ['none', 'forwards', 'backwards', 'both'],
327
- },
328
- ],
329
- 'animation-iteration': [
330
- {
331
- 'animation-iteration': [...integerList, 'infinite'],
332
- },
333
- ],
334
- 'animation-state': [
335
- {
336
- 'animation-state': ['running', 'paused'],
337
- },
338
- ],
339
- 'grid-cols': [
340
- {
341
- 'grid-cols': ['0fr', '1fr'],
342
- },
343
- ],
344
- 'grid-rows': [
345
- {
346
- 'grid-rows': ['0fr', '1fr'],
347
- },
348
- ],
349
- transition: ['transition-rows'],
350
- ...classGroups,
351
- },
352
- ...extendRest,
353
- },
354
- ...configExtension,
355
- });
356
- }
357
85
 
358
86
  /** The current date as a Date object */
359
87
  const d = new Date();
360
88
  /** The current minute of the current hour */
361
89
  const minutes = d.getMinutes();
362
90
  /** The current year */
363
- const year = d.getFullYear();
91
+ d.getFullYear();
364
92
  /** An array of the names of month in order */
365
93
  const monthNamesList = [
366
94
  'January',
@@ -387,29 +115,9 @@ const weekdayNamesList = [
387
115
  'Saturday',
388
116
  ];
389
117
  /** The name of the current month */
390
- const currentMonthName = getMonthName();
118
+ getMonthName();
391
119
  /** The name of the current day of the week */
392
- const currentWeekdayName = getWeekdayName();
393
- /**
394
- * ### Days In Month
395
- * - Returns the number of days in the specified month.
396
- * @param {Date} date A Date object representing the month to get the number of days for. (Preset to the current date)
397
- * @returns {number} The number of days in the specified month.
398
- */
399
- function daysInMonth(date = d) {
400
- const selectedYear = date.getFullYear(), selectedMonth = date.getMonth() + 1;
401
- return new Date(selectedYear, selectedMonth, 0).getDate();
402
- }
403
- /**
404
- * ### First of Month
405
- * - Returns the first day of the specified month.
406
- * @param {Date} date A Date object representing the month to get the first day for. (Preset to current date)
407
- * @returns {Date} A Date object of the given month, with the first day.
408
- */
409
- function firstOfMonth(date = d) {
410
- // Return a new Date object with the first of the month selected
411
- return new Date(date.getFullYear(), date.getMonth(), 1);
412
- }
120
+ getWeekdayName();
413
121
  /**
414
122
  * ### Get Date
415
123
  * - Returns the date with two digits
@@ -438,32 +146,6 @@ function getHours(hours = d) {
438
146
  formattedHours = `0${formattedHours}`;
439
147
  return formattedHours;
440
148
  }
441
- /**
442
- * ### Get Hours in 12
443
- * - Returns the hour based on the specified 24 hour value in a 12 hour format
444
- * @param {number|Date} hour The hour to be converted to 12 hour format
445
- * @returns {number} The hour in a 12 hour format
446
- */
447
- function getHoursIn12(hour = d) {
448
- if (typeof hour !== 'number')
449
- hour = hour.getHours();
450
- if (hour > 12)
451
- return hour - 12;
452
- return hour;
453
- }
454
- /**
455
- * ### Get Meridian from Hour
456
- * - Returns either 'pm' or 'am' based on the specified 24 hour value
457
- * @param {number|Date} hour The hour to get the meridian from
458
- * @returns {'am'|'pm'} The meridian for the given hour
459
- */
460
- function getMeridianFromHour(hour = d) {
461
- if (typeof hour !== 'number')
462
- hour = hour.getHours();
463
- if (hour >= 12)
464
- return 'pm';
465
- return 'am';
466
- }
467
149
  /**
468
150
  * ### Get Milliseconds
469
151
  * - Returns the milliseconds with two digits
@@ -506,9 +188,6 @@ function getMonth(month = d) {
506
188
  formattedMonth = `0${formattedMonth}`;
507
189
  return formattedMonth;
508
190
  }
509
- function getMonthIndexFromName(name) {
510
- return monthNamesList.findIndex(monthName => monthName === name);
511
- }
512
191
  /**
513
192
  * ### Get Month Name
514
193
  * - Returns the name of the specified month
@@ -520,28 +199,6 @@ function getMonthName(date = d) {
520
199
  return monthNamesList[date];
521
200
  return monthNamesList[date.getMonth()];
522
201
  }
523
- /**
524
- * ### Get Next Month
525
- * - Returns the number of the following month from the specified month
526
- * @param {Date} date The Date object representing the month to get the following month from (Preset to current date)
527
- * @returns {number} The indexed month of the following month
528
- */
529
- function getNextMonth(date = d) {
530
- const givenMonth = date.getMonth(); // Get the month from date
531
- // Return the indexed month. min 0, max 11
532
- return givenMonth === 11 ? 0 : givenMonth + 1;
533
- }
534
- /**
535
- * ### Get Previous Month
536
- * - Returns the number of the previous month from the specified month
537
- * @param {Date} date The Date object representing the month to get the previous month from (Preset to current date)
538
- * @returns {number} The indexed month of the previous month
539
- */
540
- function getPreviousMonth(date = d) {
541
- const givenMonth = date.getMonth(); // Get the month from date
542
- // Return the indexed month. min 0, max 11
543
- return givenMonth === 0 ? 11 : givenMonth - 1;
544
- }
545
202
  /**
546
203
  * ### Get Seconds
547
204
  * - Returns the seconds with two digits
@@ -556,31 +213,6 @@ function getSeconds(seconds = d) {
556
213
  formattedSeconds = `0${formattedSeconds}`;
557
214
  return formattedSeconds;
558
215
  }
559
- /**
560
- * ### Get User Readable Date
561
- * - Returns a string of the current date in a user-friendly way
562
- * - Includes `'Yesterday'`, '`Today'`, and `'Tomorrow'`
563
- * @param date (default: `new Date()`)
564
- * @returns {'Today'|'Tomorrow'|'Yesterday'|string} `'weekday, month day, year'` | `'Yesterday'` | `'Today'` | `'Tomorrow'`
565
- */
566
- function getUserReadableDate(date = d) {
567
- const dateTime = date.getTime();
568
- const today = new Date(), isToday = dateTime === today.getTime();
569
- if (isToday)
570
- return 'Today';
571
- const yesterday = new Date(today.getDate() - 1), isYesterday = dateTime === yesterday.getTime();
572
- if (isYesterday)
573
- return 'Yesterday';
574
- const tomorrow = new Date(today.getDate() + 1), isTomorrow = dateTime === tomorrow.getTime();
575
- if (isTomorrow)
576
- return 'Tomorrow';
577
- const thisYear = today.getFullYear(), isSameYear = date.getFullYear() === thisYear;
578
- const fullDateString = toFullDateString(date, {
579
- weekday: 'code',
580
- year: !isSameYear,
581
- });
582
- return fullDateString;
583
- }
584
216
  /**
585
217
  * ### Get Weekday Name
586
218
  * - Returns the weekday name of the specified day
@@ -593,80 +225,6 @@ function getWeekdayName(weekday = d) {
593
225
  // Return the name of the day of the week
594
226
  return weekdayNamesList[weekday.getDay()];
595
227
  }
596
- /**
597
- * ### Get Years in Range
598
- * - Returns an array of years in between the specified minimum and maximum years
599
- * @param {number} minYear The minimum year
600
- * @param {number} maxYear The maximum year
601
- * @returns {number[]} Array of years
602
- */
603
- function getYearsInRange(minYear = 0, maxYear = year) {
604
- const yearList = [];
605
- for (let selectedYear = minYear; selectedYear <= maxYear; selectedYear++) {
606
- yearList.push(selectedYear);
607
- }
608
- return yearList;
609
- }
610
- /**
611
- * ### To Full Date String
612
- * - Returns a formatted string to display the date
613
- * @param {Date} date (default: `new Date()`)
614
- * @param {ToFullDateStringOptionsProps} options Change how to display the weekday, month name, day of the month, and year.
615
- * @returns {string} '`weekday`, `month` `day`, `year`'
616
- */
617
- function toFullDateString(date = d, options) {
618
- let weekdayName = getWeekdayName(date), monthName = getMonthName(date), dayOfMonth = date.getDate(), year = date.getFullYear().toString();
619
- if (options) {
620
- const includesWeekday = options.weekday !== false, includesDay = options.day !== false, includesMonth = options.month !== false, includesYear = options.year !== false;
621
- if (includesWeekday) {
622
- if (options.weekday === 'code')
623
- weekdayName = weekdayName.slice(0, 3);
624
- if (includesMonth || includesDay || includesYear)
625
- weekdayName += ', ';
626
- }
627
- else {
628
- weekdayName = '';
629
- }
630
- if (includesMonth) {
631
- if (options.month === 'code')
632
- monthName = monthName.slice(0, 3);
633
- if (includesDay)
634
- monthName += ' ';
635
- }
636
- else {
637
- monthName = '';
638
- }
639
- if (!includesDay)
640
- dayOfMonth = '';
641
- if (includesYear) {
642
- if (options.year === 'code')
643
- year = year.slice(-2);
644
- if (includesMonth || includesDay)
645
- year = ', ' + year;
646
- }
647
- else {
648
- year = '';
649
- }
650
- }
651
- return weekdayName + monthName + dayOfMonth + year;
652
- }
653
- /**
654
- * ### Get User Readable Date From Timestampz
655
- * - Returns a string of the current date in a user-friendly way
656
- * - Includes `'Yesterday'`, '`Today'`, and `'Tomorrow'`
657
- * @param string
658
- * @returns {'Today'|'Tomorrow'|'Yesterday'|string} `'weekday, month day, year'` | `'Yesterday'` | `'Today'` | `'Tomorrow'`
659
- */
660
- function getUserReadableDateFromTimestampz(timestampz) {
661
- const [date, time] = timestampz.split('T') || [];
662
- const [year, month, day] = date?.split('-').map(string => Number(string)) || [];
663
- const timezoneIsAheadOfUTC = time?.includes('+');
664
- const [hms, _timezone] = timezoneIsAheadOfUTC ? time?.split('+') : time?.split('-') || [];
665
- const [hours, minutes, seconds] = hms?.split(':').map(string => Number(string)) || [];
666
- // const [timezoneHours, timezoneMinutes] = timezone?.split(':').map(string => Number(string)) || []
667
- const dateAndTime = new Date(year, month - 1, day, hours, minutes, seconds), userReadableDateAndTime = getUserReadableDate(dateAndTime);
668
- return userReadableDateAndTime;
669
- }
670
228
 
671
229
  function findComponentByType(children, componentType) {
672
230
  const childrenArray = react.Children.toArray(children);
@@ -719,7 +277,7 @@ function isPhoneNumber(tel) {
719
277
  * @returns {string} string formatted (000) 000-0000
720
278
  */
721
279
  function formatPhoneNumber(string, countryCode) {
722
- return (`${countryCode ? `+${countryCode} ` : ''}` +
280
+ return (`${`+${countryCode} ` }` +
723
281
  string
724
282
  .replace(/\D/g, '')
725
283
  .slice(-10)
@@ -769,15 +327,15 @@ function Anchor({ className, disabled, href, onClick, ref, target, rel, ...props
769
327
  : 'prefetch' }));
770
328
  }
771
329
  // * Styles
772
- const baseClasses = twSort('ease-exponential isolate inline-block cursor-pointer duration-300 after:absolute after:left-1/2 after:-z-10 after:-translate-x-1/2 after:duration-500 active:scale-95 active:after:opacity-100');
773
- const lineStaticClasses = tailwindMerge.twJoin(baseClasses, 'after:border-1 whitespace-nowrap after:-bottom-0.5 after:w-[calc(100%+0.15rem)] after:rounded-full after:border-current');
774
- const lineClasses = tailwindMerge.twJoin(lineStaticClasses, 'after:ease-exponential whitespace-nowrap transition-transform after:transition-transform');
330
+ const baseClasses = twSort('isolate inline-block cursor-pointer duration-300 ease-exponential after:absolute after:left-1/2 after:-z-10 after:-translate-x-1/2 after:duration-500 active:scale-95 active:after:opacity-100');
331
+ const lineStaticClasses = tailwindMerge.twJoin(baseClasses, 'whitespace-nowrap after:-bottom-0.5 after:w-[calc(100%+0.15rem)] after:rounded-full after:border-1 after:border-current');
332
+ const lineClasses = tailwindMerge.twJoin(lineStaticClasses, 'whitespace-nowrap transition-transform after:transition-transform after:ease-exponential');
775
333
  const scaleXClasses = 'after:scale-x-0 pointer-fine:hover:after:scale-x-100 active:after:scale-x-100';
776
334
  const scaleYClasses = 'after:scale-y-0 pointer-fine:hover:after:scale-y-100 active:after:scale-y-100';
777
335
  const lineNormalClasses = tailwindMerge.twJoin([
778
336
  lineClasses,
779
337
  scaleYClasses,
780
- 'pointer-fine:hover:after:translate-y-0 after:origin-bottom after:translate-y-0.5 active:after:translate-y-0',
338
+ 'after:origin-bottom after:translate-y-0.5 active:after:translate-y-0 pointer-fine:hover:after:translate-y-0',
781
339
  ]);
782
340
  const lineLtrClasses = tailwindMerge.twJoin([lineClasses, scaleXClasses, 'after:origin-left']);
783
341
  const lineRtlClasses = tailwindMerge.twJoin([lineClasses, scaleXClasses, 'after:origin-right']);
@@ -785,160 +343,151 @@ const lineCenterClasses = tailwindMerge.twJoin([lineClasses, scaleXClasses]);
785
343
  const lineLiftClasses = tailwindMerge.twJoin([
786
344
  lineClasses,
787
345
  scaleYClasses,
788
- 'pointer-fine:hover:after:translate-y-0 pointer-fine:hover:after:scale-x-100 after:origin-bottom after:translate-y-1 after:scale-x-75 active:after:translate-y-0 active:after:scale-x-100',
346
+ 'after:origin-bottom after:translate-y-1 after:scale-x-75 active:after:translate-y-0 active:after:scale-x-100 pointer-fine:hover:after:translate-y-0 pointer-fine:hover:after:scale-x-100',
789
347
  ]);
790
- const fillClasses = tailwindMerge.twJoin(baseClasses, 'after:ease-exponential pointer-fine:hover:text-zinc-50 whitespace-nowrap transition-[transform_color] after:top-1/2 after:h-[calc(100%+0.05rem)] after:w-[calc(100%+0.25rem)] after:-translate-y-1/2 after:rounded active:text-zinc-50');
348
+ const fillClasses = tailwindMerge.twJoin(baseClasses, 'whitespace-nowrap transition-[transform_color] after:top-1/2 after:h-[calc(100%+0.05rem)] after:w-[calc(100%+0.25rem)] after:-translate-y-1/2 after:rounded after:ease-exponential active:text-zinc-50 pointer-fine:hover:text-zinc-50');
791
349
  // Define theme-specific fill color transition classes
792
350
  const getFillColorTransitionClasses = (theme = 'blue') => {
793
351
  switch (theme) {
794
352
  case 'brown':
795
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-brown contrast-more:after:bg-ui-brown after:transition-transform');
353
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-brown after:transition-transform contrast-more:after:bg-ui-brown');
796
354
  case 'green':
797
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-green contrast-more:after:bg-ui-green after:transition-transform');
355
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-green after:transition-transform contrast-more:after:bg-ui-green');
798
356
  case 'grey':
799
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-grey contrast-more:after:bg-ui-grey after:transition-transform');
357
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-grey after:transition-transform contrast-more:after:bg-ui-grey');
800
358
  case 'sky-blue':
801
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-sky-blue contrast-more:after:bg-ui-sky-blue after:transition-transform');
359
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-sky-blue after:transition-transform contrast-more:after:bg-ui-sky-blue');
802
360
  case 'magenta':
803
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-magenta contrast-more:after:bg-ui-magenta after:transition-transform');
361
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-magenta after:transition-transform contrast-more:after:bg-ui-magenta');
804
362
  case 'neutral':
805
363
  return tailwindMerge.twJoin(fillClasses, 'after:bg-zinc-700 after:transition-transform contrast-more:after:bg-zinc-700 dark:after:bg-zinc-300 dark:contrast-more:after:bg-zinc-300');
806
364
  case 'orange':
807
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-orange contrast-more:after:bg-ui-orange after:transition-transform');
365
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-orange after:transition-transform contrast-more:after:bg-ui-orange');
808
366
  case 'pink':
809
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-pink contrast-more:after:bg-ui-pink after:transition-transform');
810
- case 'primary':
811
- return tailwindMerge.twJoin(fillClasses, 'after:bg-primary-500 contrast-more:after:bg-primary-500 after:transition-transform');
367
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-pink after:transition-transform contrast-more:after:bg-ui-pink');
812
368
  case 'purple':
813
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-purple contrast-more:after:bg-ui-purple after:transition-transform');
369
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-purple after:transition-transform contrast-more:after:bg-ui-purple');
814
370
  case 'red':
815
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-red contrast-more:after:bg-ui-red after:transition-transform');
371
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-red after:transition-transform contrast-more:after:bg-ui-red');
816
372
  case 'violet':
817
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-violet contrast-more:after:bg-ui-violet after:transition-transform');
373
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-violet after:transition-transform contrast-more:after:bg-ui-violet');
818
374
  case 'yellow':
819
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-yellow contrast-more:after:bg-ui-yellow after:transition-transform');
375
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-yellow after:transition-transform contrast-more:after:bg-ui-yellow');
820
376
  case 'blue':
821
377
  default:
822
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-blue contrast-more:after:bg-ui-blue after:transition-transform');
378
+ return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-blue after:transition-transform contrast-more:after:bg-ui-blue');
823
379
  }
824
380
  };
825
381
  // Define theme-specific fill center classes
826
382
  const getFillCenterClasses = (theme = 'blue') => {
827
383
  switch (theme) {
828
384
  case 'brown':
829
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-brown/0 active:after:bg-ui-brown pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-brown after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
385
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-brown/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-brown pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-brown');
830
386
  case 'green':
831
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-green/0 active:after:bg-ui-green pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-green after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
387
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-green/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-green pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-green');
832
388
  case 'grey':
833
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-grey/0 active:after:bg-ui-grey pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-grey after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
389
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-grey/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-grey pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-grey');
834
390
  case 'sky-blue':
835
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-sky-blue/0 active:after:bg-ui-sky-blue pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-sky-blue after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
391
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-sky-blue/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-sky-blue pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-sky-blue');
836
392
  case 'magenta':
837
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-magenta/0 active:after:bg-ui-magenta pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-magenta after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
393
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-magenta/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-magenta pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-magenta');
838
394
  case 'neutral':
839
- return tailwindMerge.twJoin(fillClasses, 'pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-zinc-700 dark:pointer-fine:hover:after:bg-zinc-300 after:scale-x-50 after:scale-y-[0.25] after:bg-zinc-700/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-zinc-700 dark:after:bg-zinc-300/0 dark:active:after:bg-zinc-300');
395
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-zinc-700/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-zinc-700 dark:after:bg-zinc-300/0 dark:active:after:bg-zinc-300 pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-zinc-700 dark:pointer-fine:hover:after:bg-zinc-300');
840
396
  case 'orange':
841
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-orange/0 active:after:bg-ui-orange pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-orange after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
397
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-orange/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-orange pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-orange');
842
398
  case 'pink':
843
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-pink/0 active:after:bg-ui-pink pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-pink after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
844
- case 'primary':
845
- return tailwindMerge.twJoin(fillClasses, 'after:bg-primary-500/0 active:after:bg-primary-500 pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-primary-500 after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
399
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-pink/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-pink pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-pink');
846
400
  case 'purple':
847
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-purple/0 active:after:bg-ui-purple pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-purple after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
401
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-purple/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-purple pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-purple');
848
402
  case 'red':
849
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-red/0 active:after:bg-ui-red pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-red after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
403
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-red/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-red pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-red');
850
404
  case 'violet':
851
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-violet/0 active:after:bg-ui-violet pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-violet after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
405
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-violet/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-violet pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-violet');
852
406
  case 'yellow':
853
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-yellow/0 active:after:bg-ui-yellow pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-yellow after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
407
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-yellow/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-yellow pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-yellow');
854
408
  case 'blue':
855
409
  default:
856
- return tailwindMerge.twJoin(fillClasses, 'after:bg-ui-blue/0 active:after:bg-ui-blue pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-blue after:scale-x-50 after:scale-y-[0.25] after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100');
410
+ return tailwindMerge.twJoin(fillClasses, 'after:scale-x-50 after:scale-y-[0.25] after:bg-ui-blue/0 after:transition-[transform_background-color] active:after:scale-x-100 active:after:scale-y-100 active:after:bg-ui-blue pointer-fine:hover:after:scale-x-100 pointer-fine:hover:after:scale-y-100 pointer-fine:hover:after:bg-ui-blue');
857
411
  }
858
412
  };
859
413
  const multilineBaseClasses = twSort('bg-linear-to-r from-current to-current bg-no-repeat active:scale-95');
860
414
  const multilineLineStaticClasses = 'underline';
861
- const multilineNormalClasses = twSort('pointer-fine:hover:underline underline-offset-1 active:underline');
862
- const multilineClasses = tailwindMerge.twJoin(multilineBaseClasses, 'ease-exponential duration-500');
415
+ const multilineNormalClasses = twSort('underline-offset-1 active:underline pointer-fine:hover:underline');
416
+ const multilineClasses = tailwindMerge.twJoin(multilineBaseClasses, 'duration-500 ease-exponential');
863
417
  const multilineLineClasses = tailwindMerge.twJoin(multilineClasses, 'bg-[position:0%_100%] px-px pb-px transition-[background-size]');
864
- const multilineXClasses = tailwindMerge.twJoin(multilineLineClasses, 'pointer-fine:hover:bg-[size:100%_2px] bg-[size:0%_2px] focus-visible:bg-[size:100%_2px] active:bg-[size:100%_2px]');
418
+ const multilineXClasses = tailwindMerge.twJoin(multilineLineClasses, 'bg-[size:0%_2px] focus-visible:bg-[size:100%_2px] active:bg-[size:100%_2px] pointer-fine:hover:bg-[size:100%_2px]');
865
419
  const multilineLineRtlClasses = tailwindMerge.twJoin([multilineXClasses, 'bg-[position:100%_100%]']);
866
420
  const multilineLineCenterClasses = tailwindMerge.twJoin([multilineXClasses, 'bg-[position:50%_100%]']);
867
- const multilineLineLiftClasses = tailwindMerge.twJoin(multilineLineClasses, 'pointer-fine:hover:bg-[size:auto_2px] bg-[size:auto_0px] focus-visible:bg-[size:auto_2px] active:bg-[size:auto_2px]');
868
- const multilineFillBaseClasses = tailwindMerge.twJoin(multilineBaseClasses, 'py-0.75 pointer-fine:hover:text-zinc-50 rounded px-0.5 focus-visible:text-zinc-50 active:text-zinc-50');
869
- // Define theme-specific multiline fill color classes
421
+ const multilineLineLiftClasses = tailwindMerge.twJoin(multilineLineClasses, 'bg-[size:auto_0px] focus-visible:bg-[size:auto_2px] active:bg-[size:auto_2px] pointer-fine:hover:bg-[size:auto_2px]');
422
+ const multilineFillBaseClasses = tailwindMerge.twJoin(multilineBaseClasses, 'rounded px-0.5 py-0.75 focus-visible:text-zinc-50 active:text-zinc-50 pointer-fine:hover:text-zinc-50');
870
423
  const getMultilineFillColorClasses = (theme = 'blue') => {
871
424
  switch (theme) {
872
425
  case 'brown':
873
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-brown to-ui-brown contrast-more:from-ui-brown contrast-more:to-ui-brown transition-[background-size_color]');
426
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-brown to-ui-brown transition-[background-size_color] contrast-more:from-ui-brown contrast-more:to-ui-brown');
874
427
  case 'green':
875
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-green to-ui-green contrast-more:from-ui-green contrast-more:to-ui-green transition-[background-size_color]');
428
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-green to-ui-green transition-[background-size_color] contrast-more:from-ui-green contrast-more:to-ui-green');
876
429
  case 'grey':
877
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-grey to-ui-grey contrast-more:from-ui-grey contrast-more:to-ui-grey transition-[background-size_color]');
430
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-grey to-ui-grey transition-[background-size_color] contrast-more:from-ui-grey contrast-more:to-ui-grey');
878
431
  case 'sky-blue':
879
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-sky-blue to-ui-sky-blue contrast-more:from-ui-sky-blue contrast-more:to-ui-sky-blue transition-[background-size_color]');
432
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-sky-blue to-ui-sky-blue transition-[background-size_color] contrast-more:from-ui-sky-blue contrast-more:to-ui-sky-blue');
880
433
  case 'magenta':
881
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-magenta to-ui-magenta contrast-more:from-ui-magenta contrast-more:to-ui-magenta transition-[background-size_color]');
434
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-magenta to-ui-magenta transition-[background-size_color] contrast-more:from-ui-magenta contrast-more:to-ui-magenta');
882
435
  case 'neutral':
883
436
  return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-zinc-700 to-zinc-700 transition-[background-size_color] contrast-more:from-zinc-700 contrast-more:to-zinc-700 dark:from-zinc-300 dark:to-zinc-300 dark:contrast-more:from-zinc-300 dark:contrast-more:to-zinc-300');
884
437
  case 'orange':
885
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-orange to-ui-orange contrast-more:from-ui-orange contrast-more:to-ui-orange transition-[background-size_color]');
438
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-orange to-ui-orange transition-[background-size_color] contrast-more:from-ui-orange contrast-more:to-ui-orange');
886
439
  case 'pink':
887
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-pink to-ui-pink contrast-more:from-ui-pink contrast-more:to-ui-pink transition-[background-size_color]');
888
- case 'primary':
889
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-primary-500 to-primary-500 contrast-more:from-primary-500 contrast-more:to-primary-500 transition-[background-size_color]');
440
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-pink to-ui-pink transition-[background-size_color] contrast-more:from-ui-pink contrast-more:to-ui-pink');
890
441
  case 'purple':
891
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-purple to-ui-purple contrast-more:from-ui-purple contrast-more:to-ui-purple transition-[background-size_color]');
442
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-purple to-ui-purple transition-[background-size_color] contrast-more:from-ui-purple contrast-more:to-ui-purple');
892
443
  case 'red':
893
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-red to-ui-red contrast-more:from-ui-red contrast-more:to-ui-red transition-[background-size_color]');
444
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-red to-ui-red transition-[background-size_color] contrast-more:from-ui-red contrast-more:to-ui-red');
894
445
  case 'violet':
895
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-violet to-ui-violet contrast-more:from-ui-violet contrast-more:to-ui-violet transition-[background-size_color]');
446
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-violet to-ui-violet transition-[background-size_color] contrast-more:from-ui-violet contrast-more:to-ui-violet');
896
447
  case 'yellow':
897
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-yellow to-ui-yellow contrast-more:from-ui-yellow contrast-more:to-ui-yellow transition-[background-size_color]');
448
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-yellow to-ui-yellow transition-[background-size_color] contrast-more:from-ui-yellow contrast-more:to-ui-yellow');
898
449
  case 'blue':
899
450
  default:
900
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-blue to-ui-blue contrast-more:from-ui-blue contrast-more:to-ui-blue transition-[background-size_color]');
451
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-blue to-ui-blue transition-[background-size_color] contrast-more:from-ui-blue contrast-more:to-ui-blue');
901
452
  }
902
453
  };
903
454
  // Define theme-specific multiline fill classes
904
455
  const getMultilineFillClasses = (theme = 'blue') => {
905
456
  switch (theme) {
906
457
  case 'brown':
907
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-brown/0 to-ui-brown/0 focus-visible:from-ui-brown focus-visible:to-ui-brown active:from-ui-brown active:to-ui-brown contrast-more:from-ui-brown/0 contrast-more:to-ui-brown/0 focus-visible:contrast-more:from-ui-brown focus-visible:contrast-more:to-ui-brown active:contrast-more:from-ui-brown active:contrast-more:to-ui-brown pointer-fine:hover:from-ui-brown pointer-fine:hover:to-ui-brown pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-brown pointer-fine:hover:contrast-more:to-ui-brown bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
458
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-brown/0 to-ui-brown/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-brown focus-visible:to-ui-brown focus-visible:bg-[size:100%_100%] active:from-ui-brown active:to-ui-brown active:bg-[size:100%_100%] contrast-more:from-ui-brown/0 contrast-more:to-ui-brown/0 focus-visible:contrast-more:from-ui-brown focus-visible:contrast-more:to-ui-brown active:contrast-more:from-ui-brown active:contrast-more:to-ui-brown pointer-fine:hover:from-ui-brown pointer-fine:hover:to-ui-brown pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-brown pointer-fine:hover:contrast-more:to-ui-brown');
908
459
  case 'green':
909
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-green/0 to-ui-green/0 focus-visible:from-ui-green focus-visible:to-ui-green active:from-ui-green active:to-ui-green contrast-more:from-ui-green/0 contrast-more:to-ui-green/0 focus-visible:contrast-more:from-ui-green focus-visible:contrast-more:to-ui-green active:contrast-more:from-ui-green active:contrast-more:to-ui-green pointer-fine:hover:from-ui-green pointer-fine:hover:to-ui-green pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-green pointer-fine:hover:contrast-more:to-ui-green bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
460
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-green/0 to-ui-green/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-green focus-visible:to-ui-green focus-visible:bg-[size:100%_100%] active:from-ui-green active:to-ui-green active:bg-[size:100%_100%] contrast-more:from-ui-green/0 contrast-more:to-ui-green/0 focus-visible:contrast-more:from-ui-green focus-visible:contrast-more:to-ui-green active:contrast-more:from-ui-green active:contrast-more:to-ui-green pointer-fine:hover:from-ui-green pointer-fine:hover:to-ui-green pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-green pointer-fine:hover:contrast-more:to-ui-green');
910
461
  case 'grey':
911
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-grey/0 to-ui-grey/0 focus-visible:from-ui-grey focus-visible:to-ui-grey active:from-ui-grey active:to-ui-grey contrast-more:from-ui-grey/0 contrast-more:to-ui-grey/0 focus-visible:contrast-more:from-ui-grey focus-visible:contrast-more:to-ui-grey active:contrast-more:from-ui-grey active:contrast-more:to-ui-grey pointer-fine:hover:from-ui-grey pointer-fine:hover:to-ui-grey pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-grey pointer-fine:hover:contrast-more:to-ui-grey bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
462
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-grey/0 to-ui-grey/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-grey focus-visible:to-ui-grey focus-visible:bg-[size:100%_100%] active:from-ui-grey active:to-ui-grey active:bg-[size:100%_100%] contrast-more:from-ui-grey/0 contrast-more:to-ui-grey/0 focus-visible:contrast-more:from-ui-grey focus-visible:contrast-more:to-ui-grey active:contrast-more:from-ui-grey active:contrast-more:to-ui-grey pointer-fine:hover:from-ui-grey pointer-fine:hover:to-ui-grey pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-grey pointer-fine:hover:contrast-more:to-ui-grey');
912
463
  case 'sky-blue':
913
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-sky-blue/0 to-ui-sky-blue/0 focus-visible:from-ui-sky-blue focus-visible:to-ui-sky-blue active:from-ui-sky-blue active:to-ui-sky-blue contrast-more:from-ui-sky-blue/0 contrast-more:to-ui-sky-blue/0 focus-visible:contrast-more:from-ui-sky-blue focus-visible:contrast-more:to-ui-sky-blue active:contrast-more:from-ui-sky-blue active:contrast-more:to-ui-sky-blue pointer-fine:hover:from-ui-sky-blue pointer-fine:hover:to-ui-sky-blue pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-sky-blue pointer-fine:hover:contrast-more:to-ui-sky-blue bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
464
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-sky-blue/0 to-ui-sky-blue/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-sky-blue focus-visible:to-ui-sky-blue focus-visible:bg-[size:100%_100%] active:from-ui-sky-blue active:to-ui-sky-blue active:bg-[size:100%_100%] contrast-more:from-ui-sky-blue/0 contrast-more:to-ui-sky-blue/0 focus-visible:contrast-more:from-ui-sky-blue focus-visible:contrast-more:to-ui-sky-blue active:contrast-more:from-ui-sky-blue active:contrast-more:to-ui-sky-blue pointer-fine:hover:from-ui-sky-blue pointer-fine:hover:to-ui-sky-blue pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-sky-blue pointer-fine:hover:contrast-more:to-ui-sky-blue');
914
465
  case 'magenta':
915
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-magenta/0 to-ui-magenta/0 focus-visible:from-ui-magenta focus-visible:to-ui-magenta active:from-ui-magenta active:to-ui-magenta contrast-more:from-ui-magenta/0 contrast-more:to-ui-magenta/0 focus-visible:contrast-more:from-ui-magenta focus-visible:contrast-more:to-ui-magenta active:contrast-more:from-ui-magenta active:contrast-more:to-ui-magenta pointer-fine:hover:from-ui-magenta pointer-fine:hover:to-ui-magenta pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-magenta pointer-fine:hover:contrast-more:to-ui-magenta bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
466
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-magenta/0 to-ui-magenta/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-magenta focus-visible:to-ui-magenta focus-visible:bg-[size:100%_100%] active:from-ui-magenta active:to-ui-magenta active:bg-[size:100%_100%] contrast-more:from-ui-magenta/0 contrast-more:to-ui-magenta/0 focus-visible:contrast-more:from-ui-magenta focus-visible:contrast-more:to-ui-magenta active:contrast-more:from-ui-magenta active:contrast-more:to-ui-magenta pointer-fine:hover:from-ui-magenta pointer-fine:hover:to-ui-magenta pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-magenta pointer-fine:hover:contrast-more:to-ui-magenta');
916
467
  case 'neutral':
917
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'pointer-fine:hover:from-zinc-700 pointer-fine:hover:to-zinc-700 pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-zinc-700 pointer-fine:hover:contrast-more:to-zinc-700 dark:pointer-fine:hover:from-zinc-300 dark:pointer-fine:hover:to-zinc-300 dark:pointer-fine:hover:contrast-more:from-zinc-300 dark:pointer-fine:hover:contrast-more:to-zinc-300 from-zinc-700/0 to-zinc-700/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-zinc-700 focus-visible:to-zinc-700 focus-visible:bg-[size:100%_100%] active:from-zinc-700 active:to-zinc-700 active:bg-[size:100%_100%] contrast-more:from-zinc-700/0 contrast-more:to-zinc-700/0 focus-visible:contrast-more:from-zinc-700 focus-visible:contrast-more:to-zinc-700 active:contrast-more:from-zinc-700 active:contrast-more:to-zinc-700 dark:from-zinc-300/0 dark:to-zinc-300/0 dark:focus-visible:from-zinc-300 dark:focus-visible:to-zinc-300 dark:active:from-zinc-300 dark:active:to-zinc-300 dark:contrast-more:from-zinc-300/0 dark:contrast-more:to-zinc-300/0 dark:focus-visible:contrast-more:from-zinc-300 dark:focus-visible:contrast-more:to-zinc-300 dark:active:contrast-more:from-zinc-300 dark:active:contrast-more:to-zinc-300');
468
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-zinc-700/0 to-zinc-700/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-zinc-700 focus-visible:to-zinc-700 focus-visible:bg-[size:100%_100%] active:from-zinc-700 active:to-zinc-700 active:bg-[size:100%_100%] contrast-more:from-zinc-700/0 contrast-more:to-zinc-700/0 focus-visible:contrast-more:from-zinc-700 focus-visible:contrast-more:to-zinc-700 active:contrast-more:from-zinc-700 active:contrast-more:to-zinc-700 dark:from-zinc-300/0 dark:to-zinc-300/0 dark:focus-visible:from-zinc-300 dark:focus-visible:to-zinc-300 dark:active:from-zinc-300 dark:active:to-zinc-300 dark:contrast-more:from-zinc-300/0 dark:contrast-more:to-zinc-300/0 dark:focus-visible:contrast-more:from-zinc-300 dark:focus-visible:contrast-more:to-zinc-300 dark:active:contrast-more:from-zinc-300 dark:active:contrast-more:to-zinc-300 pointer-fine:hover:from-zinc-700 pointer-fine:hover:to-zinc-700 pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-zinc-700 pointer-fine:hover:contrast-more:to-zinc-700 dark:pointer-fine:hover:from-zinc-300 dark:pointer-fine:hover:to-zinc-300 dark:pointer-fine:hover:contrast-more:from-zinc-300 dark:pointer-fine:hover:contrast-more:to-zinc-300');
918
469
  case 'orange':
919
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-orange/0 to-ui-orange/0 focus-visible:from-ui-orange focus-visible:to-ui-orange active:from-ui-orange active:to-ui-orange contrast-more:from-ui-orange/0 contrast-more:to-ui-orange/0 focus-visible:contrast-more:from-ui-orange focus-visible:contrast-more:to-ui-orange active:contrast-more:from-ui-orange active:contrast-more:to-ui-orange pointer-fine:hover:from-ui-orange pointer-fine:hover:to-ui-orange pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-orange pointer-fine:hover:contrast-more:to-ui-orange bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
470
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-orange/0 to-ui-orange/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-orange focus-visible:to-ui-orange focus-visible:bg-[size:100%_100%] active:from-ui-orange active:to-ui-orange active:bg-[size:100%_100%] contrast-more:from-ui-orange/0 contrast-more:to-ui-orange/0 focus-visible:contrast-more:from-ui-orange focus-visible:contrast-more:to-ui-orange active:contrast-more:from-ui-orange active:contrast-more:to-ui-orange pointer-fine:hover:from-ui-orange pointer-fine:hover:to-ui-orange pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-orange pointer-fine:hover:contrast-more:to-ui-orange');
920
471
  case 'pink':
921
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-pink/0 to-ui-pink/0 focus-visible:from-ui-pink focus-visible:to-ui-pink active:from-ui-pink active:to-ui-pink contrast-more:from-ui-pink/0 contrast-more:to-ui-pink/0 focus-visible:contrast-more:from-ui-pink focus-visible:contrast-more:to-ui-pink active:contrast-more:from-ui-pink active:contrast-more:to-ui-pink pointer-fine:hover:from-ui-pink pointer-fine:hover:to-ui-pink pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-pink pointer-fine:hover:contrast-more:to-ui-pink bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
922
- case 'primary':
923
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-primary-500/0 to-primary-500/0 focus-visible:from-primary-500 focus-visible:to-primary-500 active:from-primary-500 active:to-primary-500 contrast-more:from-primary-500/0 contrast-more:to-primary-500/0 focus-visible:contrast-more:from-primary-500 focus-visible:contrast-more:to-primary-500 active:contrast-more:from-primary-500 active:contrast-more:to-primary-500 pointer-fine:hover:from-primary-500 pointer-fine:hover:to-primary-500 pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-primary-500 pointer-fine:hover:contrast-more:to-primary-500 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
472
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-pink/0 to-ui-pink/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-pink focus-visible:to-ui-pink focus-visible:bg-[size:100%_100%] active:from-ui-pink active:to-ui-pink active:bg-[size:100%_100%] contrast-more:from-ui-pink/0 contrast-more:to-ui-pink/0 focus-visible:contrast-more:from-ui-pink focus-visible:contrast-more:to-ui-pink active:contrast-more:from-ui-pink active:contrast-more:to-ui-pink pointer-fine:hover:from-ui-pink pointer-fine:hover:to-ui-pink pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-pink pointer-fine:hover:contrast-more:to-ui-pink');
924
473
  case 'purple':
925
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-purple/0 to-ui-purple/0 focus-visible:from-ui-purple focus-visible:to-ui-purple active:from-ui-purple active:to-ui-purple contrast-more:from-ui-purple/0 contrast-more:to-ui-purple/0 focus-visible:contrast-more:from-ui-purple focus-visible:contrast-more:to-ui-purple active:contrast-more:from-ui-purple active:contrast-more:to-ui-purple pointer-fine:hover:from-ui-purple pointer-fine:hover:to-ui-purple pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-purple pointer-fine:hover:contrast-more:to-ui-purple bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
474
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-purple/0 to-ui-purple/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-purple focus-visible:to-ui-purple focus-visible:bg-[size:100%_100%] active:from-ui-purple active:to-ui-purple active:bg-[size:100%_100%] contrast-more:from-ui-purple/0 contrast-more:to-ui-purple/0 focus-visible:contrast-more:from-ui-purple focus-visible:contrast-more:to-ui-purple active:contrast-more:from-ui-purple active:contrast-more:to-ui-purple pointer-fine:hover:from-ui-purple pointer-fine:hover:to-ui-purple pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-purple pointer-fine:hover:contrast-more:to-ui-purple');
926
475
  case 'red':
927
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-red/0 to-ui-red/0 focus-visible:from-ui-red focus-visible:to-ui-red active:from-ui-red active:to-ui-red contrast-more:from-ui-red/0 contrast-more:to-ui-red/0 focus-visible:contrast-more:from-ui-red focus-visible:contrast-more:to-ui-red active:contrast-more:from-ui-red active:contrast-more:to-ui-red pointer-fine:hover:from-ui-red pointer-fine:hover:to-ui-red pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-red pointer-fine:hover:contrast-more:to-ui-red bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
476
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-red/0 to-ui-red/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-red focus-visible:to-ui-red focus-visible:bg-[size:100%_100%] active:from-ui-red active:to-ui-red active:bg-[size:100%_100%] contrast-more:from-ui-red/0 contrast-more:to-ui-red/0 focus-visible:contrast-more:from-ui-red focus-visible:contrast-more:to-ui-red active:contrast-more:from-ui-red active:contrast-more:to-ui-red pointer-fine:hover:from-ui-red pointer-fine:hover:to-ui-red pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-red pointer-fine:hover:contrast-more:to-ui-red');
928
477
  case 'violet':
929
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-violet/0 to-ui-violet/0 focus-visible:from-ui-violet focus-visible:to-ui-violet active:from-ui-violet active:to-ui-violet contrast-more:from-ui-violet/0 contrast-more:to-ui-violet/0 focus-visible:contrast-more:from-ui-violet focus-visible:contrast-more:to-ui-violet active:contrast-more:from-ui-violet active:contrast-more:to-ui-violet pointer-fine:hover:from-ui-violet pointer-fine:hover:to-ui-violet pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-violet pointer-fine:hover:contrast-more:to-ui-violet bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
478
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-violet/0 to-ui-violet/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-violet focus-visible:to-ui-violet focus-visible:bg-[size:100%_100%] active:from-ui-violet active:to-ui-violet active:bg-[size:100%_100%] contrast-more:from-ui-violet/0 contrast-more:to-ui-violet/0 focus-visible:contrast-more:from-ui-violet focus-visible:contrast-more:to-ui-violet active:contrast-more:from-ui-violet active:contrast-more:to-ui-violet pointer-fine:hover:from-ui-violet pointer-fine:hover:to-ui-violet pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-violet pointer-fine:hover:contrast-more:to-ui-violet');
930
479
  case 'yellow':
931
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-yellow/0 to-ui-yellow/0 focus-visible:from-ui-yellow focus-visible:to-ui-yellow active:from-ui-yellow active:to-ui-yellow contrast-more:from-ui-yellow/0 contrast-more:to-ui-yellow/0 focus-visible:contrast-more:from-ui-yellow focus-visible:contrast-more:to-ui-yellow active:contrast-more:from-ui-yellow active:contrast-more:to-ui-yellow pointer-fine:hover:from-ui-yellow pointer-fine:hover:to-ui-yellow pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-yellow pointer-fine:hover:contrast-more:to-ui-yellow bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
480
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-yellow/0 to-ui-yellow/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-yellow focus-visible:to-ui-yellow focus-visible:bg-[size:100%_100%] active:from-ui-yellow active:to-ui-yellow active:bg-[size:100%_100%] contrast-more:from-ui-yellow/0 contrast-more:to-ui-yellow/0 focus-visible:contrast-more:from-ui-yellow focus-visible:contrast-more:to-ui-yellow active:contrast-more:from-ui-yellow active:contrast-more:to-ui-yellow pointer-fine:hover:from-ui-yellow pointer-fine:hover:to-ui-yellow pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-yellow pointer-fine:hover:contrast-more:to-ui-yellow');
932
481
  case 'blue':
933
482
  default:
934
- return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-blue/0 to-ui-blue/0 focus-visible:from-ui-blue focus-visible:to-ui-blue active:from-ui-blue active:to-ui-blue contrast-more:from-ui-blue/0 contrast-more:to-ui-blue/0 focus-visible:contrast-more:from-ui-blue focus-visible:contrast-more:to-ui-blue active:contrast-more:from-ui-blue active:contrast-more:to-ui-blue pointer-fine:hover:from-ui-blue pointer-fine:hover:to-ui-blue pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-blue pointer-fine:hover:contrast-more:to-ui-blue bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
483
+ return tailwindMerge.twJoin(multilineFillBaseClasses, 'from-ui-blue/0 to-ui-blue/0 bg-[size:50%_0px] bg-[position:50%_50%] transition-[background-size_background-image_color] focus-visible:from-ui-blue focus-visible:to-ui-blue focus-visible:bg-[size:100%_100%] active:from-ui-blue active:to-ui-blue active:bg-[size:100%_100%] contrast-more:from-ui-blue/0 contrast-more:to-ui-blue/0 focus-visible:contrast-more:from-ui-blue focus-visible:contrast-more:to-ui-blue active:contrast-more:from-ui-blue active:contrast-more:to-ui-blue pointer-fine:hover:from-ui-blue pointer-fine:hover:to-ui-blue pointer-fine:hover:bg-[size:100%_100%] pointer-fine:hover:contrast-more:from-ui-blue pointer-fine:hover:contrast-more:to-ui-blue');
935
484
  }
936
485
  };
937
486
  const getMultilineFillLiftClasses = (theme = 'blue') => {
938
- return tailwindMerge.twJoin(getMultilineFillColorClasses(theme), 'pointer-fine:hover:bg-[size:auto_100%] bg-[size:auto_0px] bg-[position:auto_100%] focus-visible:bg-[size:auto_100%] active:bg-[size:auto_100%]');
487
+ return tailwindMerge.twJoin(getMultilineFillColorClasses(theme), 'bg-[size:auto_0px] bg-[position:50%_100%] focus-visible:bg-[size:auto_100%] active:bg-[size:auto_100%] pointer-fine:hover:bg-[size:auto_100%]');
939
488
  };
940
489
  const getMultilineFillXClasses = (theme = 'blue') => {
941
- return tailwindMerge.twJoin(getMultilineFillColorClasses(theme), 'pointer-fine:hover:bg-[size:100%_100%] bg-[size:0%_100%] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%]');
490
+ return tailwindMerge.twJoin(getMultilineFillColorClasses(theme), 'bg-[size:0%_100%] focus-visible:bg-[size:100%_100%] active:bg-[size:100%_100%] pointer-fine:hover:bg-[size:100%_100%]');
942
491
  };
943
492
  const getMultilineFillRtlClasses = (theme = 'blue') => {
944
493
  return tailwindMerge.twJoin(getMultilineFillXClasses(theme), 'bg-[position:100%_auto]');
@@ -975,7 +524,7 @@ const getMultilineFillCenterClasses = (theme = 'blue') => {
975
524
  * @example
976
525
  * <Link href='/about' type='fill-ltr' theme='red' title='About Us'>Learn more about our company</Link>
977
526
  */
978
- function Link({ type, theme = 'blue', className, ref, ...props }) {
527
+ function Link({ as, className, ref, theme = 'blue', type, ...props }) {
979
528
  const getLinkClasses = () => {
980
529
  switch (type) {
981
530
  case 'static':
@@ -1023,14 +572,15 @@ function Link({ type, theme = 'blue', className, ref, ...props }) {
1023
572
  }
1024
573
  };
1025
574
  const linkClasses = getLinkClasses();
1026
- return jsxRuntime.jsx(Anchor, { ref: ref, ...props, className: twMerge(linkClasses, className) });
575
+ const LinkElement = as || Anchor;
576
+ return jsxRuntime.jsx(LinkElement, { ...props, className: twMerge(linkClasses, className), ref: ref });
1027
577
  }
1028
578
 
1029
579
  /**
1030
580
  * # Button
1031
581
  * - A pre-styled button with utility props for easy customization depending on use case.
1032
582
  */
1033
- function Button({ className, padding = 'md', rounded = 'lg', theme = 'primary', ref, ...props }) {
583
+ function Button({ className, padding = 'md', rounded = 'lg', theme = 'blue', ref, ...props }) {
1034
584
  const getPaddingClasses = () => {
1035
585
  switch (padding) {
1036
586
  case 'xs':
@@ -1062,71 +612,92 @@ function Button({ className, padding = 'md', rounded = 'lg', theme = 'primary',
1062
612
  }
1063
613
  };
1064
614
  const getThemeClasses = () => {
615
+ const classList = [];
1065
616
  switch (theme) {
1066
617
  case 'blue':
1067
- return twSort('before:bg-ui-blue shadow-ui-blue/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
618
+ classList.push(twSort('text-white shadow-lg shadow-ui-blue/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-blue before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
619
+ break;
1068
620
  case 'blue-gradient':
1069
- return twSort('bg-ui-blue shadow-ui-blue/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
621
+ classList.push(twSort('bg-ui-blue text-white shadow-lg shadow-ui-blue/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
622
+ break;
1070
623
  case 'brown':
1071
- return twSort('before:bg-ui-brown shadow-ui-brown/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
624
+ classList.push(twSort('text-white shadow-lg shadow-ui-brown/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-brown before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
625
+ break;
1072
626
  case 'brown-gradient':
1073
- return twSort('bg-ui-brown shadow-ui-brown/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
627
+ classList.push(twSort('bg-ui-brown text-white shadow-lg shadow-ui-brown/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
628
+ break;
1074
629
  case 'green':
1075
- return twSort('before:bg-ui-green shadow-ui-green/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
630
+ classList.push(twSort('text-white shadow-lg shadow-ui-green/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-green before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
631
+ break;
1076
632
  case 'green-gradient':
1077
- return twSort('bg-ui-green shadow-ui-green/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
633
+ classList.push(twSort('bg-ui-green text-white shadow-lg shadow-ui-green/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
634
+ break;
1078
635
  case 'grey':
1079
- return twSort('before:bg-ui-grey shadow-ui-grey/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
636
+ classList.push(twSort('text-white shadow-lg shadow-ui-grey/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-grey before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
637
+ break;
1080
638
  case 'grey-gradient':
1081
- return twSort('bg-ui-grey shadow-ui-grey/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
639
+ classList.push(twSort('bg-ui-grey text-white shadow-lg shadow-ui-grey/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
640
+ break;
1082
641
  case 'sky-blue':
1083
- return twSort('before:bg-ui-sky-blue shadow-ui-sky-blue/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
642
+ classList.push(twSort('text-white shadow-lg shadow-ui-sky-blue/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-sky-blue before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
643
+ break;
1084
644
  case 'sky-blue-gradient':
1085
- return twSort('bg-ui-sky-blue shadow-text-white lg shadow-ui-sky-blue/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
645
+ classList.push(twSort('bg-ui-sky-blue text-white shadow-lg shadow-ui-sky-blue/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
646
+ break;
1086
647
  case 'magenta':
1087
- return twSort('before:bg-ui-magenta shadow-ui-magenta/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
648
+ classList.push(twSort('text-white shadow-lg shadow-ui-magenta/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-magenta before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
649
+ break;
1088
650
  case 'magenta-gradient':
1089
- return twSort('bg-ui-magenta shadow-ui-magenta/25 before:bg-linear-to-t active:before transition-transform:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white mix-blend-soft-light shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:text-white before:opacity-75');
651
+ classList.push(twSort('bg-ui-magenta text-white shadow-lg shadow-ui-magenta/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
652
+ break;
1090
653
  case 'neutral':
1091
- return twSort('before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90text-white dark bg-zinc-200 text-black before:absolute before:inset-0 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90 dark:bg-zinc-800');
654
+ classList.push(twSort('pointer-fine:active:before:brightness-90text-white dark bg-zinc-200 text-black before:absolute before:inset-0 before:rounded-[inherit] before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 dark:bg-zinc-800 pointer-fine:hover:before:brightness-110'));
655
+ break;
1092
656
  case 'neutral-gradient':
1093
- return twSort('bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 dark from-zinc-300 via-zinc-200 to-zinc-100 text-black before:transition-[filter] before:duration-300 active:before:brightness-90 dark:from-zinc-900 dark:via-zinc-800 dark:to-zinc-700');
657
+ classList.push(twSort('dark bg-linear-to-t from-zinc-300 via-zinc-200 to-zinc-100 text-black before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 dark:from-zinc-900 dark:via-zinc-800 dark:to-zinc-700 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
658
+ break;
1094
659
  case 'orange':
1095
- return twSort('before:bg-ui-orange shadow-ui-orange/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
660
+ classList.push(twSort('text-white shadow-lg shadow-ui-orange/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-orange before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
661
+ break;
1096
662
  case 'orange-gradient':
1097
- return twSort('bg-ui-orange shadow-ui-orange/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
663
+ classList.push(twSort('bg-ui-orange text-white shadow-lg shadow-ui-orange/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
664
+ break;
1098
665
  case 'pink':
1099
- return twSort('before:bg-ui-pink shadow-ui-pink/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
666
+ classList.push(twSort('text-white shadow-lg shadow-ui-pink/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-pink before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
667
+ break;
1100
668
  case 'pink-gradient':
1101
- return twSort('bg-ui-pink shadow-ui-pink/25 before:bg-linear-to-t before:to-white/75/75 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
1102
- case 'primary-light':
1103
- return twSort('bg-primary-50 text-primary-600 active:bg-primary-600 active:text-primary-50 pointer-fine:hover:bg-primary-600 pointer-fine:hover:text-primary-50 pointer-fine:active:bg-primary-700 transition-[transform_background-color_color_box-shadow]');
1104
- case 'primary-gradient':
1105
- return twSort('bg-linear-to-t from-primary-700 via-primary-500 to-primary-300 bg-size-y-[200%] shadow-primary-600/25 pointer-fine:hover:[background-position:50%_0%] transition-[transform_background-position] [background-position:50%_50%] active:[background-position:50%_75%]');
669
+ classList.push(twSort('before:to-white/75/75 bg-ui-pink text-white shadow-lg shadow-ui-pink/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
670
+ break;
1106
671
  case 'purple':
1107
- return twSort('before:bg-ui-purple shadow-ui-purple/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
672
+ classList.push(twSort('text-white shadow-lg shadow-ui-purple/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-purple before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
673
+ break;
1108
674
  case 'purple-gradient':
1109
- return twSort('bg-ui-purple shadow-ui-purple/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
675
+ classList.push(twSort('bg-ui-purple text-white shadow-lg shadow-ui-purple/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
676
+ break;
1110
677
  case 'red':
1111
- return twSort('before:bg-ui-red shadow-ui-red/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
678
+ classList.push(twSort('text-white shadow-lg shadow-ui-red/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-red before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
679
+ break;
1112
680
  case 'red-gradient':
1113
- return twSort('bg-ui-red shadow-ui-red/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
681
+ classList.push(twSort('bg-ui-red text-white shadow-lg shadow-ui-red/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
682
+ break;
1114
683
  case 'violet':
1115
- return twSort('before:bg-ui-violet shadow-ui-violet/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
684
+ classList.push(twSort('text-white shadow-lg shadow-ui-violet/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-violet before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
685
+ break;
1116
686
  case 'violet-gradient':
1117
- return twSort('bg-ui-violet shadow-ui-violet/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-white shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
687
+ classList.push(twSort('bg-ui-violet text-white shadow-lg shadow-ui-violet/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black/75 before:via-transparent before:to-white/75 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
688
+ break;
1118
689
  case 'yellow':
1119
- return twSort('before:bg-ui-yellow shadow-ui-yellow/25 before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-black shadow-lg transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:transition-[filter] before:duration-300 active:before:brightness-90');
690
+ classList.push(twSort('text-black shadow-lg shadow-ui-yellow/25 transition-transform before:absolute before:inset-0 before:-z-10 before:rounded-[inherit] before:bg-ui-yellow before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
691
+ break;
1120
692
  case 'yellow-gradient':
1121
- return twSort('bg-ui-yellow shadow-ui-yellow/25 before:bg-linear-to-t before:ease-exponential pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90 text-black shadow-lg transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:from-black before:via-black/50 before:to-white/50 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 active:before:brightness-90');
1122
- case 'primary':
1123
- default:
1124
- return twSort('bg-primary-500 shadow-primary-700/25 active:bg-primary-600 pointer-fine:hover:bg-primary-400 pointer-fine:active:bg-primary-600 text-white shadow-lg transition-[transform_background-color_box-shadow]');
693
+ classList.push(twSort('bg-ui-yellow text-black shadow-lg shadow-ui-yellow/25 transition-transform before:absolute before:inset-0 before:rounded-[inherit] before:bg-linear-to-t before:from-black before:via-black/50 before:to-white/50 before:opacity-75 before:mix-blend-soft-light before:transition-[filter] before:duration-300 before:ease-exponential active:before:brightness-90 pointer-fine:hover:before:brightness-110 pointer-fine:active:before:brightness-90'));
694
+ break;
1125
695
  }
696
+ return classList.join(' ');
1126
697
  };
1127
698
  const paddingClasses = getPaddingClasses(), roundedClasses = getRoundedClasses(), themeClasses = getThemeClasses();
1128
699
  const buttonClasses = twMerge([
1129
- 'ease-exponential focus-visible:scale-101 pointer-fine:hover:scale-101 pointer-fine:active:scale-99 block w-fit min-w-fit text-center font-semibold duration-300 active:scale-95',
700
+ 'block w-fit min-w-fit text-center font-semibold duration-300 ease-exponential focus-visible:scale-101 active:scale-95 pointer-fine:hover:scale-101 pointer-fine:active:scale-99',
1130
701
  paddingClasses,
1131
702
  roundedClasses,
1132
703
  themeClasses,
@@ -1203,7 +774,7 @@ function useFormStatus() {
1203
774
  return useStore(store => store);
1204
775
  }
1205
776
 
1206
- function validateField(value, { required, type }) {
777
+ function validateField$1(value, { required, type }) {
1207
778
  const noValue = !value || value === '';
1208
779
  if (!required && noValue)
1209
780
  return true;
@@ -1220,8 +791,8 @@ function validateField(value, { required, type }) {
1220
791
  return true;
1221
792
  }
1222
793
  }
1223
- function Input({ checked, className, defaultValue, description, descriptionProps, disabled, fieldProps, invalid = true, label, labelProps, name, onChange, placeholder, ref, required = true, type, value, ...props }) {
1224
- const [formContext, setFormContext] = useFormContext(), [, setFormStatus] = useFormStatus();
794
+ function Input({ checked, className, defaultValue, description, descriptionProps, disabled, fieldProps, invalid = true, label, labelProps, name, onBlur, onChange, placeholder, ref, required = true, type, value, ...props }) {
795
+ const [formContext, setFormContext] = useFormContext();
1225
796
  if (placeholder === '*')
1226
797
  placeholder = name + (required && !label ? '*' : '');
1227
798
  if (label === '*')
@@ -1246,7 +817,7 @@ function Input({ checked, className, defaultValue, description, descriptionProps
1246
817
  }
1247
818
  };
1248
819
  const fieldContextType = getFieldContextType();
1249
- const fieldContext = defineField({
820
+ const initialFieldContext = defineField({
1250
821
  type: fieldContextType,
1251
822
  id: fieldContextID,
1252
823
  invalid,
@@ -1258,13 +829,14 @@ function Input({ checked, className, defaultValue, description, descriptionProps
1258
829
  if (!setFormContext)
1259
830
  return;
1260
831
  setFormContext(prevContext => {
1261
- const otherFields = (prevContext || []).filter(field => field.id !== fieldContext.id);
1262
- return [...otherFields, fieldContext];
832
+ const otherFields = (prevContext || []).filter(field => field.id !== initialFieldContext.id);
833
+ return [...otherFields, initialFieldContext];
1263
834
  });
1264
835
  return () => {
1265
- setFormContext(prevContext => (prevContext || []).filter(field => field.id !== fieldContext.id));
836
+ setFormContext(prevContext => (prevContext || []).filter(field => field.id !== initialFieldContext.id));
1266
837
  };
1267
838
  }, [setFormContext]);
839
+ const fieldContext = formContext?.find(({ id: fieldID }) => fieldID === initialFieldContext.id) || initialFieldContext;
1268
840
  const debounceTimerRef = react.useRef(undefined);
1269
841
  const handleChange = e => {
1270
842
  if (disabled) {
@@ -1276,32 +848,66 @@ function Input({ checked, className, defaultValue, description, descriptionProps
1276
848
  setFormContext?.(prevContext => {
1277
849
  if (!prevContext)
1278
850
  return [];
1279
- const field = prevContext.find(({ id: fieldID }) => fieldID === fieldContext.id);
851
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1280
852
  if (!field)
1281
- throw new Error(`Field with id "${fieldContext.id}" not found in form context.`);
1282
- const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== fieldContext.id);
853
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
854
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
1283
855
  const updatedField = { ...field, value: newValue };
1284
856
  return [...otherFields, updatedField];
1285
857
  });
1286
858
  debounceTimerRef.current = setTimeout(() => {
1287
- const field = formContext?.find(({ id: fieldID }) => fieldID === fieldContext.id);
859
+ const field = formContext?.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1288
860
  if (!field)
1289
861
  return;
1290
- const invalid = validateField(newValue, field) === false;
862
+ const invalid = validateField$1(newValue, field) === false;
1291
863
  if (invalid !== field.invalid)
1292
864
  setFormContext?.(prevContext => {
1293
865
  if (!prevContext)
1294
866
  return [];
1295
- const field = prevContext.find(({ id: fieldID }) => fieldID === fieldContext.id);
867
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1296
868
  if (!field)
1297
- throw new Error(`Field with id "${fieldContext.id}" not found in form context.`);
1298
- const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== fieldContext.id);
869
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
870
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
1299
871
  const updatedField = { ...field, invalid };
1300
872
  return [...otherFields, updatedField];
1301
873
  });
1302
874
  }, 500);
1303
875
  onChange?.(e);
1304
876
  };
877
+ const handleBlur = e => {
878
+ if (disabled) {
879
+ e.preventDefault();
880
+ return;
881
+ }
882
+ const { currentTarget } = e, { value: newValue } = currentTarget;
883
+ switch (type) {
884
+ case 'email':
885
+ setFormContext?.(prevContext => {
886
+ if (!prevContext)
887
+ return [];
888
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
889
+ if (!field)
890
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
891
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
892
+ const updatedField = { ...field, value: newValue.toLowerCase() };
893
+ return [...otherFields, updatedField];
894
+ });
895
+ break;
896
+ case 'tel':
897
+ setFormContext?.(prevContext => {
898
+ if (!prevContext)
899
+ return [];
900
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
901
+ if (!field)
902
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
903
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
904
+ const updatedField = { ...field, value: formatPhoneNumber(newValue, '1') };
905
+ return [...otherFields, updatedField];
906
+ });
907
+ break;
908
+ }
909
+ onBlur?.(e);
910
+ };
1305
911
  const restFieldProps = fieldProps
1306
912
  ? Object.fromEntries(Object.entries(fieldProps).filter(([key]) => key !== 'className'))
1307
913
  : {};
@@ -1311,25 +917,25 @@ function Input({ checked, className, defaultValue, description, descriptionProps
1311
917
  const restDescriptionProps = descriptionProps
1312
918
  ? Object.fromEntries(Object.entries(descriptionProps).filter(([key]) => key !== 'className'))
1313
919
  : {};
1314
- return (jsxRuntime.jsxs(react$1.Field, { ...restFieldProps, className: bag => twMerge('grid gap-1', typeof fieldProps?.className === 'function' ? fieldProps?.className(bag) : fieldProps?.className), disabled: disabled, children: [label && (jsxRuntime.jsx(react$1.Label, { ...restLabelProps, className: bag => twMerge('text-sm font-medium', required ? 'after:text-ui-red after:content-["_*"]' : '', typeof labelProps?.className === 'function' ? labelProps?.className(bag) : labelProps?.className), children: label })), jsxRuntime.jsx(react$1.Input, { ...props, className: bag => twMerge('pointer-fine:hover:bg-neutral-50 dark:pointer-fine:hover:bg-neutral-600 pointer-fine:active:bg-neutral-200 dark:pointer-fine:active:bg-neutral-800 border-1 outline-ui-sky-blue/95 focus-visible:outline-3 ease-exponential rounded-xl border-neutral-500/50 bg-neutral-100 py-1 pl-2 text-neutral-950 outline-offset-1 transition-[background-color] duration-300 focus-visible:bg-neutral-50 active:bg-neutral-200 dark:bg-neutral-700 dark:text-neutral-50 dark:focus-visible:bg-neutral-600 dark:active:bg-neutral-800', typeof className === 'function' ? className(bag) : className), invalid: invalid, onChange: handleChange, placeholder: placeholder, ref: ref, type: type }), description && (jsxRuntime.jsx(react$1.Description, { ...restDescriptionProps, className: bag => twMerge('text-xs', typeof descriptionProps?.className === 'function'
920
+ return (jsxRuntime.jsxs(react$1.Field, { ...restFieldProps, className: bag => twMerge('grid gap-1', typeof fieldProps?.className === 'function' ? fieldProps?.className(bag) : fieldProps?.className), disabled: disabled, children: [label && (jsxRuntime.jsx(react$1.Label, { ...restLabelProps, className: bag => twMerge('text-sm font-medium', required ? 'after:text-ui-red after:content-["_*"]' : '', typeof labelProps?.className === 'function' ? labelProps?.className(bag) : labelProps?.className), children: label })), jsxRuntime.jsx(react$1.Input, { ...props, className: bag => twMerge(
921
+ // Base styles
922
+ 'rounded-xl border-1 border-neutral-500/50 bg-neutral-100 py-1 pl-2 text-neutral-950 outline-offset-1 outline-ui-sky-blue/95 transition-[background-color] duration-300 ease-exponential dark:bg-neutral-700 dark:text-neutral-50',
923
+ // Pseudo styles
924
+ 'focus-visible:bg-neutral-50 focus-visible:outline-3 active:bg-neutral-200 dark:focus-visible:bg-neutral-600 dark:active:bg-neutral-800 pointer-fine:hover:bg-neutral-50 pointer-fine:active:bg-neutral-200 dark:pointer-fine:hover:bg-neutral-600 dark:pointer-fine:active:bg-neutral-800',
925
+ // user-invalid styles
926
+ 'user-invalid:border-ui-red user-invalid:bg-[color-mix(in_oklab,var(--color-ui-red)_20%,var(--color-neutral-100))] user-invalid:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-100))] user-invalid:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-100))] dark:user-invalid:bg-[color-mix(in_oklab,var(--color-ui-red)_20%,var(--color-neutral-800))] dark:user-invalid:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-800))] dark:user-invalid:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-800))] user-invalid:pointer-fine:hover:bg-[color-mix(in_oklab,var(--color-ui-red)_10%,var(--color-neutral-100))] user-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-100))] user-invalid:pointer-fine:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-100))] dark:user-invalid:pointer-fine:hover:bg-[color-mix(in_oklab,var(--color-ui-red)_10%,var(--color-neutral-800))] dark:user-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-800))] dark:user-invalid:pointer-fine:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-800))]',
927
+ // Custom styles
928
+ typeof className === 'function' ? className(bag) : className), id: fieldContext?.id, invalid: invalid, onBlur: handleBlur, onChange: handleChange, placeholder: placeholder, ref: ref, required: required, type: type, value: fieldContext?.value }), description && (jsxRuntime.jsx(react$1.Description, { ...restDescriptionProps, className: bag => twMerge('text-xs', typeof descriptionProps?.className === 'function'
1315
929
  ? descriptionProps?.className(bag)
1316
930
  : descriptionProps?.className), children: description }))] }));
1317
931
  }
1318
932
 
1319
- function SubmitButton({ children, className, 'aria-disabled': ariaDisabled, error, incomplete, loading, success, theme, type = 'submit', ref, ...props }) {
933
+ function SubmitButton({ children, className, error, incomplete, loading, success, theme, type = 'submit', ref, ...props }) {
1320
934
  const [formStatus] = useFormStatus();
1321
- const getDisabledStatus = () => {
1322
- if (ariaDisabled !== undefined)
1323
- return ariaDisabled;
1324
- if (formStatus !== 'ready')
1325
- return 'true';
1326
- return 'false';
1327
- };
1328
- const disabled = getDisabledStatus();
1329
935
  const getFormStatusButtonClasses = () => {
1330
936
  switch (formStatus) {
1331
937
  case 'loading':
1332
- return twSort('animate-pulse cursor-wait text-lg font-black leading-6 tracking-widest');
938
+ return twSort('animate-pulse cursor-wait text-lg leading-6 font-black tracking-widest');
1333
939
  case 'error':
1334
940
  case 'success':
1335
941
  return 'cursor-not-allowed';
@@ -1358,7 +964,7 @@ function SubmitButton({ children, className, 'aria-disabled': ariaDisabled, erro
1358
964
  case 'incomplete':
1359
965
  return incomplete || 'Complete Form';
1360
966
  case 'loading':
1361
- return (loading || (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: 'animate-wave animation-delay-300 inline-block', children: "\u2022" }), jsxRuntime.jsx("span", { className: 'animate-wave animation-delay-150 inline-block', children: "\u2022" }), jsxRuntime.jsx("span", { className: 'animate-wave inline-block', children: "\u2022" })] })));
967
+ return (loading || (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: 'inline-block animate-wave animation-delay-300', children: "\u2022" }), jsxRuntime.jsx("span", { className: 'inline-block animate-wave animation-delay-150', children: "\u2022" }), jsxRuntime.jsx("span", { className: 'inline-block animate-wave', children: "\u2022" })] })));
1362
968
  case 'error':
1363
969
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [error || 'Error', ' ', jsxRuntime.jsx("span", { className: 'absolute top-1/2 ml-1.5 translate-y-[calc(-50%-1.5px)] text-2xl', children: "\u00D7" })] }));
1364
970
  case 'success':
@@ -1368,7 +974,103 @@ function SubmitButton({ children, className, 'aria-disabled': ariaDisabled, erro
1368
974
  }
1369
975
  };
1370
976
  const buttonText = getButtonText();
1371
- return (jsxRuntime.jsx(Button, { ...props, ...(disabled === 'true' ? { 'aria-disabled': 'true', disabled: true } : {}), className: twMerge([formStatusButtonClasses, 'w-full', className]), ref: ref, theme: formStatusButtonTheme, type: type, children: buttonText }));
977
+ return (jsxRuntime.jsx(Button, { ...props, className: twMerge([formStatusButtonClasses, 'w-full', className]), ref: ref, theme: formStatusButtonTheme, type: type, children: buttonText }));
978
+ }
979
+
980
+ function validateField(value, { required }) {
981
+ const noValue = !value || value === '';
982
+ if (!required && noValue)
983
+ return true;
984
+ if (noValue)
985
+ return false;
986
+ return true;
987
+ }
988
+ function Textarea({ className, defaultValue, description, descriptionProps, disabled, fieldProps, invalid = true, label, labelProps, name, onBlur, onChange, placeholder, ref, required = true, value, ...props }) {
989
+ const [formContext, setFormContext] = useFormContext();
990
+ if (placeholder === '*')
991
+ placeholder = name + (required && !label ? '*' : '');
992
+ if (label === '*')
993
+ label = name;
994
+ const uniqueID = react.useId(), fieldContextID = toLowerCase(name, [, '_']) + '§' + uniqueID;
995
+ if (Boolean(formContext?.find(field => field.id === fieldContextID)?.invalid))
996
+ invalid = true;
997
+ const initialFieldContext = defineField({
998
+ type: 'textarea',
999
+ id: fieldContextID,
1000
+ invalid,
1001
+ name,
1002
+ required,
1003
+ value: value ? `${value}` : defaultValue ? `${defaultValue}` : '',
1004
+ });
1005
+ react.useEffect(() => {
1006
+ if (!setFormContext)
1007
+ return;
1008
+ setFormContext(prevContext => {
1009
+ const otherFields = (prevContext || []).filter(field => field.id !== initialFieldContext.id);
1010
+ return [...otherFields, initialFieldContext];
1011
+ });
1012
+ return () => {
1013
+ setFormContext(prevContext => (prevContext || []).filter(field => field.id !== initialFieldContext.id));
1014
+ };
1015
+ }, [setFormContext]);
1016
+ const fieldContext = formContext?.find(({ id: fieldID }) => fieldID === initialFieldContext.id) || initialFieldContext;
1017
+ const debounceTimerRef = react.useRef(undefined);
1018
+ const handleChange = e => {
1019
+ if (disabled) {
1020
+ e.preventDefault();
1021
+ return;
1022
+ }
1023
+ clearTimeout(debounceTimerRef.current);
1024
+ const { currentTarget } = e, { value: newValue } = currentTarget;
1025
+ setFormContext?.(prevContext => {
1026
+ if (!prevContext)
1027
+ return [];
1028
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1029
+ if (!field)
1030
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
1031
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
1032
+ const updatedField = { ...field, value: newValue };
1033
+ return [...otherFields, updatedField];
1034
+ });
1035
+ debounceTimerRef.current = setTimeout(() => {
1036
+ const field = formContext?.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1037
+ if (!field)
1038
+ return;
1039
+ const invalid = validateField(newValue, field) === false;
1040
+ if (invalid !== field.invalid)
1041
+ setFormContext?.(prevContext => {
1042
+ if (!prevContext)
1043
+ return [];
1044
+ const field = prevContext.find(({ id: fieldID }) => fieldID === initialFieldContext.id);
1045
+ if (!field)
1046
+ throw new Error(`Field with id "${initialFieldContext.id}" not found in form context.`);
1047
+ const otherFields = prevContext.filter(({ id: fieldID }) => fieldID !== initialFieldContext.id);
1048
+ const updatedField = { ...field, invalid };
1049
+ return [...otherFields, updatedField];
1050
+ });
1051
+ }, 500);
1052
+ onChange?.(e);
1053
+ };
1054
+ const restFieldProps = fieldProps
1055
+ ? Object.fromEntries(Object.entries(fieldProps).filter(([key]) => key !== 'className'))
1056
+ : {};
1057
+ const restLabelProps = labelProps
1058
+ ? Object.fromEntries(Object.entries(labelProps).filter(([key]) => key !== 'className'))
1059
+ : {};
1060
+ const restDescriptionProps = descriptionProps
1061
+ ? Object.fromEntries(Object.entries(descriptionProps).filter(([key]) => key !== 'className'))
1062
+ : {};
1063
+ return (jsxRuntime.jsxs(react$1.Field, { ...restFieldProps, className: bag => twMerge('grid gap-1', typeof fieldProps?.className === 'function' ? fieldProps?.className(bag) : fieldProps?.className), disabled: disabled, children: [label && (jsxRuntime.jsx(react$1.Label, { ...restLabelProps, className: bag => twMerge('text-sm font-medium', required ? 'after:text-ui-red after:content-["_*"]' : '', typeof labelProps?.className === 'function' ? labelProps?.className(bag) : labelProps?.className), children: label })), jsxRuntime.jsx(react$1.Textarea, { ...props, className: bag => twMerge(
1064
+ // Base styles
1065
+ 'field-sizing-content resize-none rounded-xl border-1 border-neutral-500/50 bg-neutral-100 py-1 pl-2 text-neutral-950 outline-offset-1 outline-ui-sky-blue/95 transition-[background-color] duration-300 ease-exponential dark:bg-neutral-700 dark:text-neutral-50',
1066
+ // Pseudo styles
1067
+ 'focus-visible:bg-neutral-50 focus-visible:outline-3 active:bg-neutral-200 dark:focus-visible:bg-neutral-600 dark:active:bg-neutral-800 pointer-fine:hover:bg-neutral-50 pointer-fine:active:bg-neutral-200 dark:pointer-fine:hover:bg-neutral-600 dark:pointer-fine:active:bg-neutral-800',
1068
+ // user-invalid styles
1069
+ 'user-invalid:border-ui-red user-invalid:bg-[color-mix(in_oklab,var(--color-ui-red)_20%,var(--color-neutral-100))] user-invalid:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-100))] user-invalid:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-100))] dark:user-invalid:bg-[color-mix(in_oklab,var(--color-ui-red)_20%,var(--color-neutral-800))] dark:user-invalid:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-800))] dark:user-invalid:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-800))] user-invalid:pointer-fine:hover:bg-[color-mix(in_oklab,var(--color-ui-red)_10%,var(--color-neutral-100))] user-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-100))] user-invalid:pointer-fine:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-100))] dark:user-invalid:pointer-fine:hover:bg-[color-mix(in_oklab,var(--color-ui-red)_10%,var(--color-neutral-800))] dark:user-invalid:pointer-fine:focus-visible:bg-[color-mix(in_oklab,var(--color-ui-red)_1%,var(--color-neutral-800))] dark:user-invalid:pointer-fine:active:bg-[color-mix(in_oklab,var(--color-ui-red)_25%,var(--color-neutral-800))]',
1070
+ // Custom styles
1071
+ typeof className === 'function' ? className(bag) : className), id: fieldContext?.id, invalid: invalid, onChange: handleChange, placeholder: placeholder, ref: ref, required: required, value: fieldContext?.value }), description && (jsxRuntime.jsx(react$1.Description, { ...restDescriptionProps, className: bag => twMerge('text-xs', typeof descriptionProps?.className === 'function'
1072
+ ? descriptionProps?.className(bag)
1073
+ : descriptionProps?.className), children: description }))] }));
1372
1074
  }
1373
1075
 
1374
1076
  // import { findComponentByType } from '../../utils'
@@ -1428,23 +1130,23 @@ function getTextFromChildren(children) {
1428
1130
  * A heading component that renders HTML heading elements (h1-h6) with appropriate styling.
1429
1131
  * Automatically generates an ID for the heading based on its content if none is provided.
1430
1132
  */
1431
- function Heading({ as = 'h2', children, className, id, ref, ...props }) {
1133
+ function Heading({ as = 'h2', children, customize, className, id, ref, ...props }) {
1432
1134
  const H = as;
1433
1135
  const targetableID = id || getTextFromChildren(children).replace(/\s+/g, '-').toLowerCase();
1434
1136
  const getBaseClasses = () => {
1435
1137
  switch (as) {
1436
1138
  case 'h1':
1437
- return twSort('pb-2.5 text-6xl font-black last:pb-0');
1139
+ return customize?.h1 || twSort('pb-2.5 text-6xl font-black last:pb-0');
1438
1140
  case 'h3':
1439
- return twSort('pb-2 text-4xl font-extralight last:pb-0');
1141
+ return customize?.h3 || twSort('pb-2 text-4xl font-extralight last:pb-0');
1440
1142
  case 'h4':
1441
- return twSort('pb-2 text-3xl font-extrabold last:pb-0');
1143
+ return customize?.h4 || twSort('pb-2 text-3xl font-extrabold last:pb-0');
1442
1144
  case 'h5':
1443
- return twSort('pb-1.5 text-2xl font-semibold last:pb-0');
1145
+ return customize?.h5 || twSort('pb-1.5 text-2xl font-semibold last:pb-0');
1444
1146
  case 'h6':
1445
- return twSort('pb-1 text-xl font-bold last:pb-0');
1147
+ return customize?.h6 || twSort('pb-1 text-xl font-bold last:pb-0');
1446
1148
  default:
1447
- return twSort('pb-2.5 text-5xl font-medium last:pb-0');
1149
+ return customize?.h2 || twSort('pb-2.5 text-5xl font-medium last:pb-0');
1448
1150
  }
1449
1151
  };
1450
1152
  const baseClasses = getBaseClasses();
@@ -2141,6 +1843,7 @@ exports.SquareAndPencil = SquareAndPencil;
2141
1843
  exports.SquareAndPencilFill = SquareAndPencilFill;
2142
1844
  exports.SubmitButton = SubmitButton;
2143
1845
  exports.TextBubble = TextBubble;
1846
+ exports.Textarea = Textarea;
2144
1847
  exports.ThreePeople = ThreePeople;
2145
1848
  exports.ThreeRectanglesDesktop = ThreeRectanglesDesktop;
2146
1849
  exports.ThreeRectanglesDesktopFill = ThreeRectanglesDesktopFill;
@@ -2150,45 +1853,7 @@ exports.TrashFill = TrashFill;
2150
1853
  exports.Tree = Tree;
2151
1854
  exports.UmbrellaFill = UmbrellaFill;
2152
1855
  exports.Xmark = xmark;
2153
- exports.addClass = addClass;
2154
- exports.currentMonthName = currentMonthName;
2155
- exports.currentWeekdayName = currentWeekdayName;
2156
- exports.daysInMonth = daysInMonth;
2157
1856
  exports.defineField = defineField;
2158
- exports.easeOutExpo = easeOutExpo;
2159
- exports.emailRegex = emailRegex;
2160
- exports.extendMadoTailwindMerge = extendMadoTailwindMerge;
2161
- exports.findComponentByType = findComponentByType;
2162
- exports.firstOfMonth = firstOfMonth;
2163
- exports.formatPhoneNumber = formatPhoneNumber;
2164
- exports.getDate = getDate;
2165
- exports.getHours = getHours;
2166
- exports.getHoursIn12 = getHoursIn12;
2167
- exports.getMeridianFromHour = getMeridianFromHour;
2168
- exports.getMilliseconds = getMilliseconds;
2169
- exports.getMinutes = getMinutes;
2170
- exports.getMonth = getMonth;
2171
- exports.getMonthIndexFromName = getMonthIndexFromName;
2172
- exports.getMonthName = getMonthName;
2173
- exports.getNextMonth = getNextMonth;
2174
- exports.getPreviousMonth = getPreviousMonth;
2175
- exports.getSeconds = getSeconds;
2176
- exports.getUserReadableDate = getUserReadableDate;
2177
- exports.getUserReadableDateFromTimestampz = getUserReadableDateFromTimestampz;
2178
- exports.getWeekdayName = getWeekdayName;
2179
- exports.getYearsInRange = getYearsInRange;
2180
- exports.hasClass = hasClass;
2181
- exports.isEmail = isEmail;
2182
- exports.isPhoneNumber = isPhoneNumber;
2183
- exports.monthNamesList = monthNamesList;
2184
- exports.removeClass = removeClass;
2185
- exports.telRegex = telRegex;
2186
- exports.toFullDateString = toFullDateString;
2187
- exports.toLowerCase = toLowerCase;
2188
- exports.toggleClass = toggleClass;
2189
- exports.twMerge = twMerge;
2190
- exports.twSort = twSort;
2191
1857
  exports.useFormContext = useFormContext;
2192
1858
  exports.useFormStatus = useFormStatus;
2193
- exports.weekdayNamesList = weekdayNamesList;
2194
1859
  //# sourceMappingURL=index.js.map