@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.
- package/dist/components/Alert/Alert.svelte +24 -12
- package/dist/components/Alert/Alert.svelte.d.ts +15 -45
- package/dist/components/Alert/Alert.svelte.d.ts.map +1 -1
- package/dist/components/Badges/Badge.svelte +53 -37
- package/dist/components/Badges/Badge.svelte.d.ts +60 -48
- package/dist/components/Badges/Badge.svelte.d.ts.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.svelte +37 -20
- package/dist/components/BottomSheet/BottomSheet.svelte.d.ts +45 -47
- package/dist/components/BottomSheet/BottomSheet.svelte.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.svelte +22 -16
- package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts +50 -31
- package/dist/components/Breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
- package/dist/components/Button/Button.svelte +179 -134
- package/dist/components/Button/Button.svelte.d.ts +37 -78
- package/dist/components/Button/Button.svelte.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.svelte +71 -41
- package/dist/components/Checkbox/Checkbox.svelte.d.ts +34 -62
- package/dist/components/Checkbox/Checkbox.svelte.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.svelte +63 -46
- package/dist/components/Drawer/Drawer.svelte.d.ts +110 -54
- package/dist/components/Drawer/Drawer.svelte.d.ts.map +1 -1
- package/dist/components/Dropdown/Dropdown.svelte +203 -193
- package/dist/components/Dropdown/Dropdown.svelte.d.ts +44 -42
- package/dist/components/Dropdown/Dropdown.svelte.d.ts.map +1 -1
- package/dist/components/Dropdown/DropdownItem.svelte +124 -111
- package/dist/components/Dropdown/DropdownItem.svelte.d.ts +39 -43
- package/dist/components/Dropdown/DropdownItem.svelte.d.ts.map +1 -1
- package/dist/components/Dropdown/SelectDropdown.svelte +31 -25
- package/dist/components/Dropdown/SelectDropdown.svelte.d.ts +48 -29
- package/dist/components/Dropdown/SelectDropdown.svelte.d.ts.map +1 -1
- package/dist/components/Input/Input.svelte +141 -98
- package/dist/components/Input/Input.svelte.d.ts +94 -110
- package/dist/components/Input/Input.svelte.d.ts.map +1 -1
- package/dist/components/Input/MultiSelect.svelte +58 -39
- package/dist/components/Input/MultiSelect.svelte.d.ts +101 -40
- package/dist/components/Input/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/components/Input/OTPInput.svelte +30 -17
- package/dist/components/Input/OTPInput.svelte.d.ts +45 -36
- package/dist/components/Input/OTPInput.svelte.d.ts.map +1 -1
- package/dist/components/Input/Search.svelte +196 -173
- package/dist/components/Input/Search.svelte.d.ts +36 -65
- package/dist/components/Input/Search.svelte.d.ts.map +1 -1
- package/dist/components/Input/Select.svelte +49 -35
- package/dist/components/Input/Select.svelte.d.ts +44 -46
- package/dist/components/Input/Select.svelte.d.ts.map +1 -1
- package/dist/components/Input/Textarea.svelte +187 -160
- package/dist/components/Input/Textarea.svelte.d.ts +56 -66
- package/dist/components/Input/Textarea.svelte.d.ts.map +1 -1
- package/dist/components/Modal/ConfirmationModal.svelte +103 -78
- package/dist/components/Modal/ConfirmationModal.svelte.d.ts +132 -47
- package/dist/components/Modal/ConfirmationModal.svelte.d.ts.map +1 -1
- package/dist/components/Modal/InputModal.svelte +157 -132
- package/dist/components/Modal/InputModal.svelte.d.ts +181 -48
- package/dist/components/Modal/InputModal.svelte.d.ts.map +1 -1
- package/dist/components/Modal/Modal.svelte +83 -45
- package/dist/components/Modal/Modal.svelte.d.ts +56 -41
- package/dist/components/Modal/Modal.svelte.d.ts.map +1 -1
- package/dist/components/Modal/ModalTestWrapper.svelte.d.ts +2 -2
- package/dist/components/Modal/StatusModal.svelte +149 -122
- package/dist/components/Modal/StatusModal.svelte.d.ts +126 -47
- package/dist/components/Modal/StatusModal.svelte.d.ts.map +1 -1
- package/dist/components/OrderSummary/OrderSummary.svelte +68 -59
- package/dist/components/OrderSummary/OrderSummary.svelte.d.ts +72 -60
- package/dist/components/OrderSummary/OrderSummary.svelte.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.svelte +49 -39
- package/dist/components/Pagination/Pagination.svelte.d.ts +89 -36
- package/dist/components/Pagination/Pagination.svelte.d.ts.map +1 -1
- package/dist/components/PublicCard/PublicCard.svelte +22 -12
- package/dist/components/PublicCard/PublicCard.svelte.d.ts +14 -32
- package/dist/components/PublicCard/PublicCard.svelte.d.ts.map +1 -1
- package/dist/components/Radio/Radio.svelte +35 -21
- package/dist/components/Radio/Radio.svelte.d.ts +22 -51
- package/dist/components/Radio/Radio.svelte.d.ts.map +1 -1
- package/dist/components/ShowCard/ShowCard.svelte +47 -40
- package/dist/components/ShowCard/ShowCard.svelte.d.ts +30 -36
- package/dist/components/ShowCard/ShowCard.svelte.d.ts.map +1 -1
- package/dist/components/ShowTimeCard/ShowTimeCard.svelte +23 -14
- package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts +20 -34
- package/dist/components/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
- package/dist/components/SuperLogin/SuperLogin.svelte +1282 -0
- package/dist/components/SuperLogin/SuperLogin.svelte.d.ts +44 -0
- package/dist/components/SuperLogin/SuperLogin.svelte.d.ts.map +1 -0
- package/dist/components/SuperLogin/index.d.ts +2 -0
- package/dist/components/SuperLogin/index.d.ts.map +1 -0
- package/dist/components/SuperLogin/index.js +1 -0
- package/dist/components/Toggle.spec.js +21 -52
- package/dist/components/Toggle.svelte +11 -9
- package/dist/components/Toggle.svelte.d.ts +17 -30
- package/dist/components/Toggle.svelte.d.ts.map +1 -1
- package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte +45 -32
- package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts +22 -36
- package/dist/components/pages/settings/tabs/CustomImageDropzone.svelte.d.ts.map +1 -1
- package/dist/components/pages/shows/TabNavigation.svelte +16 -8
- package/dist/components/pages/shows/TabNavigation.svelte.d.ts +20 -30
- package/dist/components/pages/shows/TabNavigation.svelte.d.ts.map +1 -1
- package/dist/constants/validation.d.ts +55 -0
- package/dist/constants/validation.d.ts.map +1 -0
- package/dist/constants/validation.js +91 -0
- package/dist/constants/validation.spec.d.ts +2 -0
- package/dist/constants/validation.spec.d.ts.map +1 -0
- package/dist/constants/validation.spec.js +64 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- 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
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
48
|
-
<!-- svelte-ignore
|
|
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
|
-
|
|
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 =
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
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":"
|
|
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
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
77
|
+
let effectiveDisabled = $derived(disabled || loading || success);
|
|
33
78
|
|
|
34
79
|
// Size classes
|
|
35
|
-
|
|
80
|
+
let sizeClass = $derived((() => {
|
|
36
81
|
// Icon variant uses different sizing
|
|
37
|
-
if (variant ===
|
|
82
|
+
if (variant === 'icon') {
|
|
38
83
|
switch (size) {
|
|
39
|
-
case
|
|
40
|
-
return
|
|
41
|
-
case
|
|
42
|
-
return
|
|
43
|
-
case
|
|
44
|
-
return
|
|
45
|
-
case
|
|
46
|
-
return
|
|
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
|
|
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
|
|
54
|
-
return
|
|
55
|
-
case
|
|
56
|
-
return
|
|
57
|
-
case
|
|
58
|
-
return
|
|
59
|
-
case
|
|
60
|
-
return
|
|
61
|
-
case
|
|
62
|
-
return
|
|
63
|
-
case
|
|
64
|
-
return
|
|
65
|
-
case
|
|
66
|
-
return
|
|
67
|
-
case
|
|
68
|
-
return
|
|
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
|
-
|
|
120
|
+
let minWidthClass = $derived((() => {
|
|
76
121
|
switch (minWidth) {
|
|
77
|
-
case
|
|
78
|
-
return
|
|
79
|
-
case
|
|
80
|
-
return
|
|
81
|
-
case
|
|
82
|
-
return
|
|
83
|
-
case
|
|
84
|
-
return
|
|
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
|
-
|
|
136
|
+
let shapeClass = $derived((() => {
|
|
92
137
|
switch (shape) {
|
|
93
|
-
case
|
|
94
|
-
return
|
|
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
|
-
|
|
102
|
-
if (success) return
|
|
146
|
+
let variantClass = $derived((() => {
|
|
147
|
+
if (success) return 'btn-success';
|
|
103
148
|
|
|
104
149
|
switch (variant) {
|
|
105
|
-
case
|
|
106
|
-
return
|
|
107
|
-
case
|
|
108
|
-
return
|
|
109
|
-
case
|
|
110
|
-
return
|
|
111
|
-
case
|
|
112
|
-
return
|
|
113
|
-
case
|
|
114
|
-
return
|
|
115
|
-
case
|
|
116
|
-
return
|
|
117
|
-
case
|
|
118
|
-
return
|
|
119
|
-
case
|
|
120
|
-
return
|
|
121
|
-
case
|
|
122
|
-
return
|
|
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
|
|
169
|
+
return 'btn-blue-solid';
|
|
125
170
|
}
|
|
126
|
-
})();
|
|
171
|
+
})());
|
|
127
172
|
|
|
128
173
|
// Text color class
|
|
129
|
-
|
|
130
|
-
if (success) return
|
|
174
|
+
let textClass = $derived((() => {
|
|
175
|
+
if (success) return 'text-white';
|
|
131
176
|
|
|
132
177
|
switch (variant) {
|
|
133
|
-
case
|
|
134
|
-
case
|
|
135
|
-
return
|
|
136
|
-
case
|
|
137
|
-
return
|
|
138
|
-
case
|
|
139
|
-
return
|
|
140
|
-
case
|
|
141
|
-
case
|
|
142
|
-
return
|
|
143
|
-
case
|
|
144
|
-
return
|
|
145
|
-
case
|
|
146
|
-
return
|
|
147
|
-
case
|
|
148
|
-
return
|
|
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
|
|
195
|
+
return 'text-white';
|
|
151
196
|
}
|
|
152
|
-
})();
|
|
197
|
+
})());
|
|
153
198
|
|
|
154
|
-
|
|
199
|
+
let disabledClass = $derived(disabled && !loading && !success ? 'btn-disabled cursor-not-allowed' : '');
|
|
155
200
|
|
|
156
201
|
// Justify class for list-item style buttons
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
href ?
|
|
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 ?
|
|
174
|
-
active && (variant ===
|
|
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
|
|
225
|
+
<!-- svelte-ignore a11y_mouse_events_have_key_events -->
|
|
181
226
|
{#if href}
|
|
182
227
|
<a
|
|
183
228
|
{href}
|
|
184
229
|
class={buttonClasses}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
{
|
|
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"
|
|
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
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
{
|
|
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"
|
|
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}
|