@getmicdrop/svelte-components 2.8.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/components/Alert/Alert.svelte +24 -12
  2. package/dist/components/Alert/Alert.svelte.d.ts +15 -45
  3. package/dist/components/Alert/Alert.svelte.d.ts.map +1 -1
  4. package/dist/components/Badges/Badge.svelte +53 -37
  5. package/dist/components/Badges/Badge.svelte.d.ts +60 -48
  6. package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
  7. package/dist/components/BottomSheet/BottomSheet.svelte +37 -20
  8. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts +45 -47
  9. package/dist/components/BottomSheet/BottomSheet.svelte.d.ts.map +1 -1
  10. package/dist/components/Breadcrumb/Breadcrumb.svelte +22 -16
  11. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +50 -31
  12. package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
  13. package/dist/components/Button/Button.svelte +179 -134
  14. package/dist/components/Button/Button.svelte.d.ts +37 -78
  15. package/dist/components/Button/Button.svelte.d.ts.map +1 -1
  16. package/dist/components/Checkbox/Checkbox.svelte +71 -41
  17. package/dist/components/Checkbox/Checkbox.svelte.d.ts +34 -62
  18. package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -1
  19. package/dist/components/Drawer/Drawer.svelte +63 -46
  20. package/dist/components/Drawer/Drawer.svelte.d.ts +110 -54
  21. package/dist/components/Drawer/Drawer.svelte.d.ts.map +1 -1
  22. package/dist/components/Dropdown/Dropdown.svelte +203 -193
  23. package/dist/components/Dropdown/Dropdown.svelte.d.ts +44 -42
  24. package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  25. package/dist/components/Dropdown/DropdownItem.svelte +124 -111
  26. package/dist/components/Dropdown/DropdownItem.svelte.d.ts +39 -43
  27. package/dist/components/Dropdown/DropdownItem.svelte.d.ts.map +1 -1
  28. package/dist/components/Dropdown/SelectDropdown.svelte +31 -25
  29. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +48 -29
  30. package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -1
  31. package/dist/components/Input/Input.svelte +141 -98
  32. package/dist/components/Input/Input.svelte.d.ts +94 -110
  33. package/dist/components/Input/Input.svelte.d.ts.map +1 -1
  34. package/dist/components/Input/MultiSelect.svelte +58 -39
  35. package/dist/components/Input/MultiSelect.svelte.d.ts +101 -40
  36. package/dist/components/Input/MultiSelect.svelte.d.ts.map +1 -1
  37. package/dist/components/Input/OTPInput.svelte +30 -17
  38. package/dist/components/Input/OTPInput.svelte.d.ts +45 -36
  39. package/dist/components/Input/OTPInput.svelte.d.ts.map +1 -1
  40. package/dist/components/Input/Search.svelte +196 -173
  41. package/dist/components/Input/Search.svelte.d.ts +36 -65
  42. package/dist/components/Input/Search.svelte.d.ts.map +1 -1
  43. package/dist/components/Input/Select.svelte +49 -35
  44. package/dist/components/Input/Select.svelte.d.ts +44 -46
  45. package/dist/components/Input/Select.svelte.d.ts.map +1 -1
  46. package/dist/components/Input/Textarea.svelte +187 -160
  47. package/dist/components/Input/Textarea.svelte.d.ts +56 -66
  48. package/dist/components/Input/Textarea.svelte.d.ts.map +1 -1
  49. package/dist/components/Modal/ConfirmationModal.svelte +103 -78
  50. package/dist/components/Modal/ConfirmationModal.svelte.d.ts +132 -47
  51. package/dist/components/Modal/ConfirmationModal.svelte.d.ts.map +1 -1
  52. package/dist/components/Modal/InputModal.svelte +157 -132
  53. package/dist/components/Modal/InputModal.svelte.d.ts +181 -48
  54. package/dist/components/Modal/InputModal.svelte.d.ts.map +1 -1
  55. package/dist/components/Modal/Modal.svelte +83 -45
  56. package/dist/components/Modal/Modal.svelte.d.ts +56 -41
  57. package/dist/components/Modal/Modal.svelte.d.ts.map +1 -1
  58. package/dist/components/Modal/ModalTestWrapper.svelte.d.ts +2 -2
  59. package/dist/components/Modal/StatusModal.svelte +149 -122
  60. package/dist/components/Modal/StatusModal.svelte.d.ts +126 -47
  61. package/dist/components/Modal/StatusModal.svelte.d.ts.map +1 -1
  62. package/dist/components/OrderSummary/OrderSummary.svelte +68 -59
  63. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts +72 -60
  64. package/dist/components/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
  65. package/dist/components/Pagination/Pagination.svelte +49 -39
  66. package/dist/components/Pagination/Pagination.svelte.d.ts +89 -36
  67. package/dist/components/Pagination/Pagination.svelte.d.ts.map +1 -1
  68. package/dist/components/PublicCard/PublicCard.svelte +22 -12
  69. package/dist/components/PublicCard/PublicCard.svelte.d.ts +14 -32
  70. package/dist/components/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  71. package/dist/components/Radio/Radio.svelte +35 -21
  72. package/dist/components/Radio/Radio.svelte.d.ts +22 -51
  73. package/dist/components/Radio/Radio.svelte.d.ts.map +1 -1
  74. package/dist/components/ShowCard/ShowCard.svelte +47 -40
  75. package/dist/components/ShowCard/ShowCard.svelte.d.ts +30 -36
  76. package/dist/components/ShowCard/ShowCard.svelte.d.ts.map +1 -1
  77. package/dist/components/ShowTimeCard/ShowTimeCard.svelte +23 -14
  78. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts +20 -34
  79. package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
  80. package/dist/components/SuperLogin/SuperLogin.svelte +1282 -0
  81. package/dist/components/SuperLogin/SuperLogin.svelte.d.ts +44 -0
  82. package/dist/components/SuperLogin/SuperLogin.svelte.d.ts.map +1 -0
  83. package/dist/components/SuperLogin/index.d.ts +2 -0
  84. package/dist/components/SuperLogin/index.d.ts.map +1 -0
  85. package/dist/components/SuperLogin/index.js +1 -0
  86. package/dist/components/Toggle.spec.js +21 -52
  87. package/dist/components/Toggle.svelte +11 -9
  88. package/dist/components/Toggle.svelte.d.ts +17 -30
  89. package/dist/components/Toggle.svelte.d.ts.map +1 -1
  90. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte +45 -32
  91. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +22 -36
  92. package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts.map +1 -1
  93. package/dist/components/pages/shows/TabNavigation.svelte +16 -8
  94. package/dist/components/pages/shows/TabNavigation.svelte.d.ts +20 -30
  95. package/dist/components/pages/shows/TabNavigation.svelte.d.ts.map +1 -1
  96. package/dist/constants/validation.d.ts +55 -0
  97. package/dist/constants/validation.d.ts.map +1 -0
  98. package/dist/constants/validation.js +91 -0
  99. package/dist/constants/validation.spec.d.ts +2 -0
  100. package/dist/constants/validation.spec.d.ts.map +1 -0
  101. package/dist/constants/validation.spec.js +64 -0
  102. package/dist/index.d.ts +2 -0
  103. package/dist/index.js +4 -0
  104. package/package.json +1 -1
@@ -1,23 +1,29 @@
1
1
  <script>
2
- import { createEventDispatcher } from "svelte";
3
2
  import ArrowRight from "../Icons/ArrowRight.svelte";
4
3
  import Home from "../Icons/Home.svelte";
5
4
 
6
- /** @type {Array<{name: string, href: string}>} */
7
- export let data = [];
8
- /** @type {string} Additional CSS classes */
9
- export let className = "";
10
- /** @type {boolean} Show built-in home icon for first item */
11
- export let showHomeIcon = true;
12
- /** @type {string} Page title displayed below breadcrumb */
13
- export let title = "";
14
- /** @type {string} Subtitle displayed below title */
15
- export let subtitle = "";
5
+ /**
6
+ * @typedef {Object} Props
7
+ * @property {Array<{name: string, href: string}>} [data] - Breadcrumb items
8
+ * @property {string} [className] - Additional CSS classes
9
+ * @property {boolean} [showHomeIcon] - Show built-in home icon for first item
10
+ * @property {string} [title] - Page title displayed below breadcrumb
11
+ * @property {string} [subtitle] - Subtitle displayed below title
12
+ * @property {Function} [onclick] - Click handler for breadcrumb items
13
+ */
16
14
 
17
- const dispatch = createEventDispatcher();
15
+ /** @type {Props} */
16
+ let {
17
+ data = [],
18
+ className = "",
19
+ showHomeIcon = true,
20
+ title = "",
21
+ subtitle = "",
22
+ onclick
23
+ } = $props();
18
24
 
19
25
  function handleClick(crumb) {
20
- dispatch("click", crumb);
26
+ onclick?.(crumb);
21
27
  }
22
28
  </script>
23
29
 
@@ -44,15 +50,15 @@
44
50
  {crumb.name}
45
51
  </span>
46
52
  {:else}
47
- <!-- svelte-ignore a11y-click-events-have-key-events -->
48
- <!-- svelte-ignore a11y-no-static-element-interactions -->
53
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
54
+ <!-- svelte-ignore a11y_no_static_element_interactions -->
49
55
  <span
50
56
  class="text-text-secondary no-underline cursor-pointer max-w-[200px] overflow-hidden text-ellipsis whitespace-nowrap"
51
57
  title={crumb.name}
52
58
  >
53
59
  <a
54
60
  href={crumb.href}
55
- on:click={() => handleClick(crumb)}
61
+ onclick={() => handleClick(crumb)}
56
62
  class="hover:no-underline"
57
63
  >
58
64
  {crumb.name}
@@ -1,45 +1,64 @@
1
1
  export default Breadcrumb;
2
- type Breadcrumb = SvelteComponent<{
3
- title?: string | undefined;
4
- className?: string | undefined;
2
+ type Breadcrumb = {
3
+ $on?(type: string, callback: (e: any) => void): () => void;
4
+ $set?(props: Partial<Props>): void;
5
+ };
6
+ declare const Breadcrumb: import("svelte").Component<{
7
+ /**
8
+ * - Breadcrumb items
9
+ */
5
10
  data?: {
6
11
  name: string;
7
12
  href: string;
8
13
  }[] | undefined;
14
+ /**
15
+ * - Additional CSS classes
16
+ */
17
+ className?: string | undefined;
18
+ /**
19
+ * - Show built-in home icon for first item
20
+ */
9
21
  showHomeIcon?: boolean | undefined;
10
- subtitle?: string | undefined;
11
- }, {
12
- click: CustomEvent<any>;
13
- } & {
14
- [evt: string]: CustomEvent<any>;
15
- }, {}> & {
16
- $$bindings?: string | undefined;
17
- };
18
- declare const Breadcrumb: $$__sveltets_2_IsomorphicComponent<{
22
+ /**
23
+ * - Page title displayed below breadcrumb
24
+ */
19
25
  title?: string | undefined;
20
- className?: string | undefined;
26
+ /**
27
+ * - Subtitle displayed below title
28
+ */
29
+ subtitle?: string | undefined;
30
+ /**
31
+ * - Click handler for breadcrumb items
32
+ */
33
+ onclick?: Function | undefined;
34
+ }, {}, "">;
35
+ type Props = {
36
+ /**
37
+ * - Breadcrumb items
38
+ */
21
39
  data?: {
22
40
  name: string;
23
41
  href: string;
24
42
  }[] | undefined;
43
+ /**
44
+ * - Additional CSS classes
45
+ */
46
+ className?: string | undefined;
47
+ /**
48
+ * - Show built-in home icon for first item
49
+ */
25
50
  showHomeIcon?: boolean | undefined;
51
+ /**
52
+ * - Page title displayed below breadcrumb
53
+ */
54
+ title?: string | undefined;
55
+ /**
56
+ * - Subtitle displayed below title
57
+ */
26
58
  subtitle?: string | undefined;
27
- }, {
28
- click: CustomEvent<any>;
29
- } & {
30
- [evt: string]: CustomEvent<any>;
31
- }, {}, {}, string>;
32
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
33
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
34
- $$bindings?: Bindings;
35
- } & Exports;
36
- (internal: unknown, props: Props & {
37
- $$events?: Events;
38
- $$slots?: Slots;
39
- }): Exports & {
40
- $set?: any;
41
- $on?: any;
42
- };
43
- z_$$bindings?: Bindings;
44
- }
59
+ /**
60
+ * - Click handler for breadcrumb items
61
+ */
62
+ onclick?: Function | undefined;
63
+ };
45
64
  //# sourceMappingURL=Breadcrumb.svelte.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Breadcrumb/Breadcrumb.svelte.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA6FA;;;;cAdwB,MAAM;cAAQ,MAAM;;;;;;;;mBAckI;6CATjI,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Breadcrumb.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/Breadcrumb/Breadcrumb.svelte.js"],"names":[],"mappings":";;;;;AAoFA;;;;;cAxE6B,MAAM;cAAQ,MAAM;;;;;;;;;;;;;;;;;;;;;;WAwEQ;;;;;;cAxE5B,MAAM;cAAQ,MAAM"}
@@ -1,4 +1,4 @@
1
- <script>
1
+ <script lang="ts">
2
2
  /**
3
3
  * Button Component with Optional Microinteractions
4
4
  *
@@ -9,190 +9,235 @@
9
9
  * Recommended for: Primary actions, CTAs, important interactive buttons
10
10
  * Skip for: Buttons in lists, text buttons, subtle inline actions
11
11
  */
12
- import { classNames } from "../../utils/utils.js";
13
-
14
- // New clean API
15
- export let variant = "blue-solid"; // blue-solid, blue-outline, gray-outline, red-solid, red-outline, red-text, gray-text, icon, toggle
16
- export let size = ""; // full, full-md-auto, lg, md, sm, xs, nav, half
17
- export let minWidth = ""; // sm (100px), action (150px), modal (130px)
18
- export let shape = ""; // circle (for toggle pills)
19
- export let disabled = false;
20
- export let loading = false;
21
- export let success = false;
22
- export let successText = ""; // Optional text to show with checkmark when success=true
23
- export let className = "";
24
- export let beforeIcon = null;
25
- export let afterIcon = null;
26
- export let responsive = false; // Enable lift/press microinteraction
27
- export let active = false; // For nav items and toggle buttons - shows selected/current page state
28
- export let href = null; // If provided, renders as <a> instead of <button>
29
- export let justify = ""; // between (for list-item style with icon on right)
12
+ import { classNames } from '../../utils/utils.js';
13
+ import type { Snippet } from 'svelte';
14
+ import type { HTMLButtonAttributes, HTMLAnchorAttributes } from 'svelte/elements';
15
+
16
+ type Variant = 'blue-solid' | 'blue-outline' | 'gray-outline' | 'red-solid' | 'red-outline' | 'red-text' | 'gray-text' | 'icon' | 'toggle';
17
+ type Size = '' | 'full' | 'full-md-auto' | 'lg' | 'md' | 'sm' | 'xs' | 'nav' | 'half';
18
+ type MinWidth = '' | 'sm' | 'action' | 'modal' | 'modal-responsive';
19
+ type Shape = '' | 'circle';
20
+ type Justify = '' | 'between';
21
+
22
+ interface Props {
23
+ variant?: Variant;
24
+ size?: Size;
25
+ minWidth?: MinWidth;
26
+ shape?: Shape;
27
+ disabled?: boolean;
28
+ loading?: boolean;
29
+ success?: boolean;
30
+ successText?: string;
31
+ className?: string;
32
+ beforeIcon?: string | null;
33
+ afterIcon?: string | null;
34
+ responsive?: boolean;
35
+ active?: boolean;
36
+ href?: string | null;
37
+ justify?: Justify;
38
+ /** Click event callback */
39
+ onclick?: (e: MouseEvent) => void;
40
+ /** Mouseover event callback */
41
+ onmouseover?: (e: MouseEvent) => void;
42
+ /** Mouseenter event callback */
43
+ onmouseenter?: (e: MouseEvent) => void;
44
+ /** Mouseleave event callback */
45
+ onmouseleave?: (e: MouseEvent) => void;
46
+ /** Slot content */
47
+ children?: Snippet;
48
+ /** Rest props for additional attributes */
49
+ [key: string]: unknown;
50
+ }
51
+
52
+ let {
53
+ variant = 'blue-solid',
54
+ size = '',
55
+ minWidth = '',
56
+ shape = '',
57
+ disabled = false,
58
+ loading = false,
59
+ success = false,
60
+ successText = '',
61
+ className = '',
62
+ beforeIcon = null,
63
+ afterIcon = null,
64
+ responsive = false,
65
+ active = false,
66
+ href = null,
67
+ justify = '',
68
+ onclick,
69
+ onmouseover,
70
+ onmouseenter,
71
+ onmouseleave,
72
+ children,
73
+ ...restProps
74
+ }: Props = $props();
30
75
 
31
76
  // Determine effective disabled state (disabled when loading or success)
32
- $: effectiveDisabled = disabled || loading || success;
77
+ let effectiveDisabled = $derived(disabled || loading || success);
33
78
 
34
79
  // Size classes
35
- $: sizeClass = (() => {
80
+ let sizeClass = $derived((() => {
36
81
  // Icon variant uses different sizing
37
- if (variant === "icon") {
82
+ if (variant === 'icon') {
38
83
  switch (size) {
39
- case "lg":
40
- return "p-3 min-h-0";
41
- case "md":
42
- return "p-2.5 min-h-0";
43
- case "sm":
44
- return "p-2 min-h-0";
45
- case "xs":
46
- return "p-1.5 min-h-0";
84
+ case 'lg':
85
+ return 'p-3 min-h-0';
86
+ case 'md':
87
+ return 'p-2.5 min-h-0';
88
+ case 'sm':
89
+ return 'p-2 min-h-0';
90
+ case 'xs':
91
+ return 'p-1.5 min-h-0';
47
92
  default:
48
- return "p-2 min-h-0"; // Default to sm for icon buttons
93
+ return 'p-2 min-h-0'; // Default to sm for icon buttons
49
94
  }
50
95
  }
51
96
 
52
97
  switch (size) {
53
- case "full":
54
- return "w-full";
55
- case "full-md-auto":
56
- return "w-full md:w-auto"; // Full on mobile, auto on desktop (use with minWidth)
57
- case "half":
58
- return "w-[48%] md:w-auto"; // For modal button pairs
59
- case "lg":
60
- return "px-6 py-3 text-base";
61
- case "md":
62
- return "px-3 sm:px-4 py-3 sm:py-3.5 text-lg";
63
- case "sm":
64
- return "px-2.5 sm:px-3 py-1 min-h-[40px] leading-4 rounded-md text-xs";
65
- case "xs":
66
- return "px-2.5 py-1.5 text-xs rounded";
67
- case "nav":
68
- return "!min-h-0 !px-3 !py-2.5 w-full !justify-start !text-base";
98
+ case 'full':
99
+ return 'w-full';
100
+ case 'full-md-auto':
101
+ return 'w-full md:w-auto'; // Full on mobile, auto on desktop (use with minWidth)
102
+ case 'half':
103
+ return 'w-[48%] md:w-auto'; // For modal button pairs
104
+ case 'lg':
105
+ return 'px-6 py-3 text-base';
106
+ case 'md':
107
+ return 'px-3 sm:px-4 py-3 sm:py-3.5 text-lg';
108
+ case 'sm':
109
+ return 'px-2.5 sm:px-3 py-1 min-h-[40px] leading-4 rounded-md text-xs';
110
+ case 'xs':
111
+ return 'px-2.5 py-1.5 text-xs rounded';
112
+ case 'nav':
113
+ return '!min-h-0 !px-3 !py-2.5 w-full !justify-start !text-base';
69
114
  default:
70
- return "";
115
+ return '';
71
116
  }
72
- })();
117
+ })());
73
118
 
74
119
  // Min width classes
75
- $: minWidthClass = (() => {
120
+ let minWidthClass = $derived((() => {
76
121
  switch (minWidth) {
77
- case "sm":
78
- return "min-w-[100px]"; // Small inline buttons (Update, Set up)
79
- case "action":
80
- return "min-w-[150px]"; // Form action buttons (Save, Cancel)
81
- case "modal":
82
- return "min-w-[130px] md:min-w-[130px]"; // Modal footer buttons
83
- case "modal-responsive":
84
- return "min-w-[155px] md:min-w-[130px]"; // Modal buttons with mobile sizing
122
+ case 'sm':
123
+ return 'min-w-[100px]'; // Small inline buttons (Update, Set up)
124
+ case 'action':
125
+ return 'min-w-[150px]'; // Form action buttons (Save, Cancel)
126
+ case 'modal':
127
+ return 'min-w-[130px] md:min-w-[130px]'; // Modal footer buttons
128
+ case 'modal-responsive':
129
+ return 'min-w-[155px] md:min-w-[130px]'; // Modal buttons with mobile sizing
85
130
  default:
86
- return "";
131
+ return '';
87
132
  }
88
- })();
133
+ })());
89
134
 
90
135
  // Shape classes
91
- $: shapeClass = (() => {
136
+ let shapeClass = $derived((() => {
92
137
  switch (shape) {
93
- case "circle":
94
- return "!rounded-full !w-8 !h-8 !min-h-[32px] !p-0";
138
+ case 'circle':
139
+ return '!rounded-full !w-8 !h-8 !min-h-[32px] !p-0';
95
140
  default:
96
- return "";
141
+ return '';
97
142
  }
98
- })();
143
+ })());
99
144
 
100
145
  // Variant classes with consistent hover/active states
101
- $: variantClass = (() => {
102
- if (success) return "btn-success";
146
+ let variantClass = $derived((() => {
147
+ if (success) return 'btn-success';
103
148
 
104
149
  switch (variant) {
105
- case "blue-solid":
106
- return "btn-blue-solid";
107
- case "blue-outline":
108
- return "btn-blue-outline";
109
- case "gray-outline":
110
- return "btn-gray-outline";
111
- case "red-solid":
112
- return "btn-red-solid";
113
- case "red-outline":
114
- return "btn-red-outline";
115
- case "red-text":
116
- return "btn-red-text";
117
- case "gray-text":
118
- return "btn-gray-text";
119
- case "icon":
120
- return "btn-icon";
121
- case "toggle":
122
- return "btn-toggle";
150
+ case 'blue-solid':
151
+ return 'btn-blue-solid';
152
+ case 'blue-outline':
153
+ return 'btn-blue-outline';
154
+ case 'gray-outline':
155
+ return 'btn-gray-outline';
156
+ case 'red-solid':
157
+ return 'btn-red-solid';
158
+ case 'red-outline':
159
+ return 'btn-red-outline';
160
+ case 'red-text':
161
+ return 'btn-red-text';
162
+ case 'gray-text':
163
+ return 'btn-gray-text';
164
+ case 'icon':
165
+ return 'btn-icon';
166
+ case 'toggle':
167
+ return 'btn-toggle';
123
168
  default:
124
- return "btn-blue-solid";
169
+ return 'btn-blue-solid';
125
170
  }
126
- })();
171
+ })());
127
172
 
128
173
  // Text color class
129
- $: textClass = (() => {
130
- if (success) return "text-white";
174
+ let textClass = $derived((() => {
175
+ if (success) return 'text-white';
131
176
 
132
177
  switch (variant) {
133
- case "blue-solid":
134
- case "red-solid":
135
- return "text-white";
136
- case "blue-outline":
137
- return "text-primary-700";
138
- case "gray-outline":
139
- return "text-gray-800";
140
- case "red-outline":
141
- case "red-text":
142
- return "text-red-600";
143
- case "gray-text":
144
- return "text-Text-Tartiary";
145
- case "icon":
146
- return ""; // Icon buttons inherit text color from className or use default gray
147
- case "toggle":
148
- return ""; // Handled by toggle variant states
178
+ case 'blue-solid':
179
+ case 'red-solid':
180
+ return 'text-white';
181
+ case 'blue-outline':
182
+ return 'text-primary-700';
183
+ case 'gray-outline':
184
+ return 'text-gray-800';
185
+ case 'red-outline':
186
+ case 'red-text':
187
+ return 'text-red-600';
188
+ case 'gray-text':
189
+ return 'text-Text-Tartiary';
190
+ case 'icon':
191
+ return ''; // Icon buttons inherit text color from className or use default gray
192
+ case 'toggle':
193
+ return ''; // Handled by toggle variant states
149
194
  default:
150
- return "text-white";
195
+ return 'text-white';
151
196
  }
152
- })();
197
+ })());
153
198
 
154
- $: disabledClass = disabled && !loading && !success ? "btn-disabled cursor-not-allowed" : "";
199
+ let disabledClass = $derived(disabled && !loading && !success ? 'btn-disabled cursor-not-allowed' : '');
155
200
 
156
201
  // Justify class for list-item style buttons
157
- $: justifyClass = justify === "between" ? "!justify-between" : "";
158
-
159
- $: buttonClasses = classNames(
160
- "cursor-pointer px-2.5 sm:px-3 py-3 min-h-[40px]",
161
- "inline-flex items-center justify-center",
162
- "rounded-lg",
163
- "focus:outline-none focus:ring-0",
164
- "font-medium text-sm leading-none",
165
- "btn-transition",
166
- href ? "no-underline hover:no-underline" : "",
202
+ let justifyClass = $derived(justify === 'between' ? '!justify-between' : '');
203
+
204
+ let buttonClasses = $derived(classNames(
205
+ 'cursor-pointer px-2.5 sm:px-3 py-3 min-h-[40px]',
206
+ 'inline-flex items-center justify-center',
207
+ 'rounded-lg',
208
+ 'focus:outline-none focus:ring-0',
209
+ 'font-medium text-sm leading-none',
210
+ 'btn-transition',
211
+ href ? 'no-underline hover:no-underline' : '',
167
212
  sizeClass,
168
213
  minWidthClass,
169
214
  shapeClass,
170
215
  variantClass,
171
216
  textClass,
172
217
  disabledClass,
173
- responsive && !disabled ? "btn-responsive" : "",
174
- active && (variant === "gray-text" || variant === "toggle") ? "btn-active" : "",
218
+ responsive && !disabled ? 'btn-responsive' : '',
219
+ active && (variant === 'gray-text' || variant === 'toggle') ? 'btn-active' : '',
175
220
  justifyClass,
176
221
  className
177
- );
222
+ ));
178
223
  </script>
179
224
 
180
- <!-- svelte-ignore a11y-mouse-events-have-key-events -->
225
+ <!-- svelte-ignore a11y_mouse_events_have_key_events -->
181
226
  {#if href}
182
227
  <a
183
228
  {href}
184
229
  class={buttonClasses}
185
- on:click
186
- on:mouseover
187
- on:mouseenter
188
- on:mouseleave
189
- {...$$restProps}
230
+ onclick={onclick}
231
+ onmouseover={onmouseover}
232
+ onmouseenter={onmouseenter}
233
+ onmouseleave={onmouseleave}
234
+ {...restProps}
190
235
  >
191
236
  <span class="btn-inner" class:btn-inner-hidden={loading || success}>
192
237
  {#if beforeIcon}
193
238
  <img src={beforeIcon} alt="" class="mr-2" />
194
239
  {/if}
195
- <span class="btn-content"><slot /></span>
240
+ <span class="btn-content">{#if children}{@render children()}{/if}</span>
196
241
  {#if afterIcon}
197
242
  <img src={afterIcon} alt="" class="ml-2" />
198
243
  {/if}
@@ -202,18 +247,18 @@
202
247
  <button
203
248
  class={buttonClasses}
204
249
  disabled={effectiveDisabled}
205
- on:click
206
- on:mouseover
207
- on:mouseenter
208
- on:mouseleave
209
- {...$$restProps}
250
+ onclick={onclick}
251
+ onmouseover={onmouseover}
252
+ onmouseenter={onmouseenter}
253
+ onmouseleave={onmouseleave}
254
+ {...restProps}
210
255
  >
211
256
  <!-- Container maintains button width -->
212
257
  <span class="btn-inner" class:btn-inner-hidden={loading || success}>
213
258
  {#if beforeIcon}
214
259
  <img src={beforeIcon} alt="" class="mr-2" />
215
260
  {/if}
216
- <span class="btn-content"><slot /></span>
261
+ <span class="btn-content">{#if children}{@render children()}{/if}</span>
217
262
  {#if afterIcon}
218
263
  <img src={afterIcon} alt="" class="ml-2" />
219
264
  {/if}