@getmicdrop/svelte-components 5.5.1 → 5.5.4
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/calendar/AboutShow/AboutShow.svelte +172 -172
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
- package/dist/calendar/FAQs/FAQs.svelte +75 -75
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
- package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
- package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
- package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
- package/dist/components/Layout/Grid.svelte +4 -4
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.svelte +6 -6
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/index.d.ts +1 -0
- package/dist/index.js +223 -222
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +36 -36
- package/dist/patterns/forms/FormActions.spec.js +88 -88
- package/dist/patterns/forms/FormActions.stories.svelte +97 -97
- package/dist/patterns/forms/FormActions.svelte +46 -46
- package/dist/patterns/forms/FormGrid.svelte +33 -33
- package/dist/patterns/forms/FormSection.svelte +32 -32
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
- package/dist/patterns/forms/FormValidationSummary.svelte +33 -33
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +20 -20
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +193 -193
- package/dist/patterns/page/PageHeader.svelte +18 -18
- package/dist/patterns/page/PageLayout.svelte +40 -40
- package/dist/patterns/page/PageLoader.spec.js +54 -54
- package/dist/patterns/page/PageLoader.stories.svelte +137 -137
- package/dist/patterns/page/PageLoader.svelte +24 -24
- package/dist/patterns/page/SectionHeader.svelte +29 -29
- package/dist/presets/badges.js +112 -112
- package/dist/presets/buttons.js +76 -76
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +42 -42
- package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
- package/dist/primitives/Alert/Alert.spec.js +170 -170
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +27 -27
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/Badges/Badge.spec.js +103 -103
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +79 -79
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
- package/dist/primitives/Button/Button.spec.js +211 -211
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +270 -270
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
- package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
- package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
- package/dist/primitives/Card.spec.js +49 -49
- package/dist/primitives/Card.stories.svelte +22 -22
- package/dist/primitives/Card.svelte +28 -28
- package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
- package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
- package/dist/primitives/DarkModeToggle.spec.js +357 -357
- package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
- package/dist/primitives/DarkModeToggle.svelte +136 -136
- package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
- package/dist/primitives/Drawer/Drawer.svelte +120 -120
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
- package/dist/primitives/Icons/ArrowRight.svelte +8 -8
- package/dist/primitives/Icons/Availability.svelte +14 -14
- package/dist/primitives/Icons/Back.svelte +14 -14
- package/dist/primitives/Icons/CheckCircle.svelte +6 -6
- package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
- package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
- package/dist/primitives/Icons/ChevronRight.svelte +4 -4
- package/dist/primitives/Icons/Copy.svelte +15 -15
- package/dist/primitives/Icons/Cross.svelte +5 -5
- package/dist/primitives/Icons/DownArrow.svelte +8 -8
- package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
- package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
- package/dist/primitives/Icons/Home.svelte +15 -15
- package/dist/primitives/Icons/Icon.spec.js +169 -169
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +52 -52
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/Info.svelte +7 -7
- package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
- package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
- package/dist/primitives/Icons/Message.svelte +15 -15
- package/dist/primitives/Icons/MoonIcon.svelte +5 -5
- package/dist/primitives/Icons/More.svelte +21 -21
- package/dist/primitives/Icons/MoreHori.spec.js +61 -61
- package/dist/primitives/Icons/MoreHori.svelte +22 -22
- package/dist/primitives/Icons/Notification.svelte +14 -14
- package/dist/primitives/Icons/Payment.svelte +14 -14
- package/dist/primitives/Icons/Profile.svelte +21 -21
- package/dist/primitives/Icons/Reload.svelte +29 -29
- package/dist/primitives/Icons/Shows.svelte +21 -21
- package/dist/primitives/Icons/Signout.svelte +21 -21
- package/dist/primitives/Icons/SunIcon.svelte +8 -8
- package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
- package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
- package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
- package/dist/primitives/Icons/WarningIcon.svelte +5 -5
- package/dist/primitives/Input/Input.spec.js +573 -573
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +392 -392
- package/dist/primitives/Input/Select.spec.js +218 -218
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +128 -128
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +35 -35
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/Modal/Modal.spec.js +95 -95
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +158 -158
- package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +261 -261
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
- package/dist/primitives/Spinner/Spinner.spec.js +75 -75
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +20 -20
- package/dist/primitives/Tabs/TabItem.svelte +49 -49
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +123 -123
- package/dist/primitives/Toggle.spec.js +127 -127
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +71 -71
- package/dist/primitives/Typography/Typography.svelte +53 -53
- package/dist/primitives/ValidationError.spec.js +103 -103
- package/dist/primitives/ValidationError.stories.svelte +69 -69
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/recipes/CropImage/CropImage.spec.js +216 -216
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +238 -238
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
- package/dist/recipes/SuperLogin/SuperLogin.svelte +7 -6
- package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
- package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.svelte +80 -80
- package/dist/recipes/fields/TextareaField.svelte +97 -97
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +249 -249
- package/dist/recipes/inputs/OTPInput.spec.js +238 -238
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +29 -29
- package/dist/recipes/inputs/PasswordInput.svelte +22 -22
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +43 -43
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +326 -326
- package/dist/recipes/inputs/Search.svelte +37 -37
- package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
- package/dist/recipes/modals/InputModal.svelte +182 -182
- package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
- package/dist/recipes/modals/ModalStateManager.svelte +77 -77
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/StatusModal.svelte +206 -206
- package/dist/services/EventService.js +75 -75
- package/dist/services/EventService.spec.js +217 -217
- package/dist/services/ShowService.spec.js +342 -342
- package/dist/stores/auth.js +36 -36
- package/dist/stores/auth.spec.js +139 -139
- package/dist/stores/toaster.js +13 -13
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +206 -206
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +725 -725
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +271 -271
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/tokens/tokens.css +87 -87
- package/dist/utils/transitions.d.ts +24 -0
- package/dist/utils/transitions.d.ts.map +1 -0
- package/dist/utils/transitions.js +62 -0
- package/dist/utils/utils.js +354 -354
- package/package.json +283 -283
|
@@ -1,206 +1,206 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from "../../primitives/Icons";
|
|
3
|
-
import Button from "../../primitives/Button/Button.svelte";
|
|
4
|
-
import Cancel from "../../assets/svg/cancel.svg";
|
|
5
|
-
import Modal from "../../primitives/Modal/Modal.svelte";
|
|
6
|
-
import { typography } from '../../tokens/typography';
|
|
7
|
-
|
|
8
|
-
let {
|
|
9
|
-
show = $bindable(false),
|
|
10
|
-
size = "small",
|
|
11
|
-
title = "",
|
|
12
|
-
subtitle = "",
|
|
13
|
-
description = "",
|
|
14
|
-
buttonText = "Ok",
|
|
15
|
-
iconType = "success",
|
|
16
|
-
customIcon = null,
|
|
17
|
-
image = null,
|
|
18
|
-
disabled = false,
|
|
19
|
-
loading = false,
|
|
20
|
-
variant = null,
|
|
21
|
-
actions = [],
|
|
22
|
-
closeBtn = false,
|
|
23
|
-
onconfirm,
|
|
24
|
-
onclose,
|
|
25
|
-
...restProps
|
|
26
|
-
} = $props();
|
|
27
|
-
|
|
28
|
-
let effectiveVariant = $derived(variant || iconType);
|
|
29
|
-
let isProfileMode = $derived(!!image);
|
|
30
|
-
|
|
31
|
-
const handleButtonClick = () => {
|
|
32
|
-
if (!disabled && !loading) {
|
|
33
|
-
onconfirm?.();
|
|
34
|
-
closeModal();
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const handleAction = (action) => {
|
|
39
|
-
if (!disabled && !loading) {
|
|
40
|
-
action.onClick?.();
|
|
41
|
-
if (!action.keepOpen) {
|
|
42
|
-
closeModal();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const closeModal = () => {
|
|
48
|
-
show = false;
|
|
49
|
-
onclose?.();
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const handleClose = () => {
|
|
53
|
-
if (disabled || loading) return;
|
|
54
|
-
closeModal();
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
const getActionVariant = (action) => {
|
|
58
|
-
if (action.variant) return action.variant;
|
|
59
|
-
const label = action.label.toLowerCase();
|
|
60
|
-
if (label.startsWith('delete') || label.startsWith('archive') || action.danger) {
|
|
61
|
-
return 'red';
|
|
62
|
-
}
|
|
63
|
-
if (label === 'continue' || label === 'finish' || label === 'done' || label === 'save & notify') {
|
|
64
|
-
return 'default';
|
|
65
|
-
}
|
|
66
|
-
return 'alternative';
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const getIconColors = (type) => {
|
|
70
|
-
switch (type) {
|
|
71
|
-
case "success":
|
|
72
|
-
return {
|
|
73
|
-
bg: "bg-green-100 dark:bg-green-900/30",
|
|
74
|
-
icon: "text-green-600 dark:text-green-400",
|
|
75
|
-
};
|
|
76
|
-
case "error":
|
|
77
|
-
return {
|
|
78
|
-
bg: "bg-red-100 dark:bg-red-900/30",
|
|
79
|
-
icon: "text-red-600 dark:text-red-400",
|
|
80
|
-
};
|
|
81
|
-
case "warning":
|
|
82
|
-
return {
|
|
83
|
-
bg: "bg-amber-100 dark:bg-amber-900/30",
|
|
84
|
-
icon: "text-amber-600 dark:text-amber-400",
|
|
85
|
-
};
|
|
86
|
-
case "info":
|
|
87
|
-
return {
|
|
88
|
-
bg: "bg-blue-100 dark:bg-blue-900/30",
|
|
89
|
-
icon: "text-blue-600 dark:text-blue-400",
|
|
90
|
-
};
|
|
91
|
-
default:
|
|
92
|
-
return {
|
|
93
|
-
bg: "bg-green-100 dark:bg-green-900/30",
|
|
94
|
-
icon: "text-green-600 dark:text-green-400",
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
const getButtonVariant = (type) => {
|
|
100
|
-
switch (type) {
|
|
101
|
-
case "error":
|
|
102
|
-
return "red";
|
|
103
|
-
case "warning":
|
|
104
|
-
return "default";
|
|
105
|
-
default:
|
|
106
|
-
return "default";
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
let colors = $derived(getIconColors(effectiveVariant));
|
|
111
|
-
let buttonVariant = $derived(getButtonVariant(effectiveVariant));
|
|
112
|
-
</script>
|
|
113
|
-
|
|
114
|
-
<Modal bind:show {size} oncancel={handleClose} {...restProps}>
|
|
115
|
-
{#snippet header()}
|
|
116
|
-
<div class="text-center">
|
|
117
|
-
{#if closeBtn}
|
|
118
|
-
<div class="flex justify-end -mt-2 -mr-2 mb-2">
|
|
119
|
-
<Button variant="icon" size="xs" onclick={handleClose} {disabled}>
|
|
120
|
-
<img src={Cancel} alt="Close" class="w-5 h-5" />
|
|
121
|
-
</Button>
|
|
122
|
-
</div>
|
|
123
|
-
{/if}
|
|
124
|
-
{#if isProfileMode}
|
|
125
|
-
<div class="flex justify-center">
|
|
126
|
-
<img
|
|
127
|
-
src={image}
|
|
128
|
-
alt={title}
|
|
129
|
-
class="w-16 h-16 rounded-lg object-cover"
|
|
130
|
-
/>
|
|
131
|
-
</div>
|
|
132
|
-
<div class="mt-4">
|
|
133
|
-
{#if title}
|
|
134
|
-
<h2 class={typography.h2}>{title}</h2>
|
|
135
|
-
{/if}
|
|
136
|
-
{#if subtitle}
|
|
137
|
-
<p class={`${typography.smMuted} mt-1`}>{subtitle}</p>
|
|
138
|
-
{/if}
|
|
139
|
-
</div>
|
|
140
|
-
{:else}
|
|
141
|
-
<div class="flex justify-center items-center">
|
|
142
|
-
{#if customIcon}
|
|
143
|
-
<div class="w-14 h-14 rounded-full {colors.bg} flex items-center justify-center">
|
|
144
|
-
<img src={customIcon} alt="Status icon" class="w-8 h-8" />
|
|
145
|
-
</div>
|
|
146
|
-
{:else}
|
|
147
|
-
<div class="w-14 h-14 rounded-full {colors.bg} flex items-center justify-center">
|
|
148
|
-
{#if effectiveVariant === "success"}
|
|
149
|
-
<CheckOutline class="w-7 h-7 {colors.icon}" />
|
|
150
|
-
{:else if effectiveVariant === "error"}
|
|
151
|
-
<CloseOutline class="w-7 h-7 {colors.icon}" />
|
|
152
|
-
{:else if effectiveVariant === "warning"}
|
|
153
|
-
<ExclamationTriangleOutline class="w-7 h-7 {colors.icon}" />
|
|
154
|
-
{:else if effectiveVariant === "info"}
|
|
155
|
-
<InfoCircleOutline class="w-7 h-7 {colors.icon}" />
|
|
156
|
-
{/if}
|
|
157
|
-
</div>
|
|
158
|
-
{/if}
|
|
159
|
-
</div>
|
|
160
|
-
{#if title}
|
|
161
|
-
<h2 class={`${typography.h2} mt-4`}>{title}</h2>
|
|
162
|
-
{/if}
|
|
163
|
-
{/if}
|
|
164
|
-
</div>
|
|
165
|
-
{/snippet}
|
|
166
|
-
|
|
167
|
-
{#snippet body()}
|
|
168
|
-
<div class="text-center mt-4">
|
|
169
|
-
{#if description}
|
|
170
|
-
<p class={`leading-relaxed ${isProfileMode ? `${typography.label}` : `${typography.smMuted}`}`}>
|
|
171
|
-
{description}
|
|
172
|
-
</p>
|
|
173
|
-
{/if}
|
|
174
|
-
</div>
|
|
175
|
-
{/snippet}
|
|
176
|
-
|
|
177
|
-
{#snippet footer()}
|
|
178
|
-
<div class="w-full">
|
|
179
|
-
{#if actions.length > 0}
|
|
180
|
-
<div class="flex gap-3">
|
|
181
|
-
{#each actions as action}
|
|
182
|
-
<Button
|
|
183
|
-
size="full"
|
|
184
|
-
variant={getActionVariant(action)}
|
|
185
|
-
disabled={action.disabled || disabled}
|
|
186
|
-
loading={action.loading || (loading && action.primary)}
|
|
187
|
-
onclick={() => handleAction(action)}
|
|
188
|
-
>
|
|
189
|
-
{action.label}
|
|
190
|
-
</Button>
|
|
191
|
-
{/each}
|
|
192
|
-
</div>
|
|
193
|
-
{:else}
|
|
194
|
-
<Button
|
|
195
|
-
size="full"
|
|
196
|
-
variant={buttonVariant}
|
|
197
|
-
{disabled}
|
|
198
|
-
{loading}
|
|
199
|
-
onclick={handleButtonClick}
|
|
200
|
-
>
|
|
201
|
-
{buttonText}
|
|
202
|
-
</Button>
|
|
203
|
-
{/if}
|
|
204
|
-
</div>
|
|
205
|
-
{/snippet}
|
|
206
|
-
</Modal>
|
|
1
|
+
<script>
|
|
2
|
+
import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from "../../primitives/Icons";
|
|
3
|
+
import Button from "../../primitives/Button/Button.svelte";
|
|
4
|
+
import Cancel from "../../assets/svg/cancel.svg";
|
|
5
|
+
import Modal from "../../primitives/Modal/Modal.svelte";
|
|
6
|
+
import { typography } from '../../tokens/typography';
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
show = $bindable(false),
|
|
10
|
+
size = "small",
|
|
11
|
+
title = "",
|
|
12
|
+
subtitle = "",
|
|
13
|
+
description = "",
|
|
14
|
+
buttonText = "Ok",
|
|
15
|
+
iconType = "success",
|
|
16
|
+
customIcon = null,
|
|
17
|
+
image = null,
|
|
18
|
+
disabled = false,
|
|
19
|
+
loading = false,
|
|
20
|
+
variant = null,
|
|
21
|
+
actions = [],
|
|
22
|
+
closeBtn = false,
|
|
23
|
+
onconfirm,
|
|
24
|
+
onclose,
|
|
25
|
+
...restProps
|
|
26
|
+
} = $props();
|
|
27
|
+
|
|
28
|
+
let effectiveVariant = $derived(variant || iconType);
|
|
29
|
+
let isProfileMode = $derived(!!image);
|
|
30
|
+
|
|
31
|
+
const handleButtonClick = () => {
|
|
32
|
+
if (!disabled && !loading) {
|
|
33
|
+
onconfirm?.();
|
|
34
|
+
closeModal();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const handleAction = (action) => {
|
|
39
|
+
if (!disabled && !loading) {
|
|
40
|
+
action.onClick?.();
|
|
41
|
+
if (!action.keepOpen) {
|
|
42
|
+
closeModal();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const closeModal = () => {
|
|
48
|
+
show = false;
|
|
49
|
+
onclose?.();
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const handleClose = () => {
|
|
53
|
+
if (disabled || loading) return;
|
|
54
|
+
closeModal();
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const getActionVariant = (action) => {
|
|
58
|
+
if (action.variant) return action.variant;
|
|
59
|
+
const label = action.label.toLowerCase();
|
|
60
|
+
if (label.startsWith('delete') || label.startsWith('archive') || action.danger) {
|
|
61
|
+
return 'red';
|
|
62
|
+
}
|
|
63
|
+
if (label === 'continue' || label === 'finish' || label === 'done' || label === 'save & notify') {
|
|
64
|
+
return 'default';
|
|
65
|
+
}
|
|
66
|
+
return 'alternative';
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const getIconColors = (type) => {
|
|
70
|
+
switch (type) {
|
|
71
|
+
case "success":
|
|
72
|
+
return {
|
|
73
|
+
bg: "bg-green-100 dark:bg-green-900/30",
|
|
74
|
+
icon: "text-green-600 dark:text-green-400",
|
|
75
|
+
};
|
|
76
|
+
case "error":
|
|
77
|
+
return {
|
|
78
|
+
bg: "bg-red-100 dark:bg-red-900/30",
|
|
79
|
+
icon: "text-red-600 dark:text-red-400",
|
|
80
|
+
};
|
|
81
|
+
case "warning":
|
|
82
|
+
return {
|
|
83
|
+
bg: "bg-amber-100 dark:bg-amber-900/30",
|
|
84
|
+
icon: "text-amber-600 dark:text-amber-400",
|
|
85
|
+
};
|
|
86
|
+
case "info":
|
|
87
|
+
return {
|
|
88
|
+
bg: "bg-blue-100 dark:bg-blue-900/30",
|
|
89
|
+
icon: "text-blue-600 dark:text-blue-400",
|
|
90
|
+
};
|
|
91
|
+
default:
|
|
92
|
+
return {
|
|
93
|
+
bg: "bg-green-100 dark:bg-green-900/30",
|
|
94
|
+
icon: "text-green-600 dark:text-green-400",
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
const getButtonVariant = (type) => {
|
|
100
|
+
switch (type) {
|
|
101
|
+
case "error":
|
|
102
|
+
return "red";
|
|
103
|
+
case "warning":
|
|
104
|
+
return "default";
|
|
105
|
+
default:
|
|
106
|
+
return "default";
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
let colors = $derived(getIconColors(effectiveVariant));
|
|
111
|
+
let buttonVariant = $derived(getButtonVariant(effectiveVariant));
|
|
112
|
+
</script>
|
|
113
|
+
|
|
114
|
+
<Modal bind:show {size} oncancel={handleClose} {...restProps}>
|
|
115
|
+
{#snippet header()}
|
|
116
|
+
<div class="text-center">
|
|
117
|
+
{#if closeBtn}
|
|
118
|
+
<div class="flex justify-end -mt-2 -mr-2 mb-2">
|
|
119
|
+
<Button variant="icon" size="xs" onclick={handleClose} {disabled}>
|
|
120
|
+
<img src={Cancel} alt="Close" class="w-5 h-5" />
|
|
121
|
+
</Button>
|
|
122
|
+
</div>
|
|
123
|
+
{/if}
|
|
124
|
+
{#if isProfileMode}
|
|
125
|
+
<div class="flex justify-center">
|
|
126
|
+
<img
|
|
127
|
+
src={image}
|
|
128
|
+
alt={title}
|
|
129
|
+
class="w-16 h-16 rounded-lg object-cover"
|
|
130
|
+
/>
|
|
131
|
+
</div>
|
|
132
|
+
<div class="mt-4">
|
|
133
|
+
{#if title}
|
|
134
|
+
<h2 class={typography.h2}>{title}</h2>
|
|
135
|
+
{/if}
|
|
136
|
+
{#if subtitle}
|
|
137
|
+
<p class={`${typography.smMuted} mt-1`}>{subtitle}</p>
|
|
138
|
+
{/if}
|
|
139
|
+
</div>
|
|
140
|
+
{:else}
|
|
141
|
+
<div class="flex justify-center items-center">
|
|
142
|
+
{#if customIcon}
|
|
143
|
+
<div class="w-14 h-14 rounded-full {colors.bg} flex items-center justify-center">
|
|
144
|
+
<img src={customIcon} alt="Status icon" class="w-8 h-8" />
|
|
145
|
+
</div>
|
|
146
|
+
{:else}
|
|
147
|
+
<div class="w-14 h-14 rounded-full {colors.bg} flex items-center justify-center">
|
|
148
|
+
{#if effectiveVariant === "success"}
|
|
149
|
+
<CheckOutline class="w-7 h-7 {colors.icon}" />
|
|
150
|
+
{:else if effectiveVariant === "error"}
|
|
151
|
+
<CloseOutline class="w-7 h-7 {colors.icon}" />
|
|
152
|
+
{:else if effectiveVariant === "warning"}
|
|
153
|
+
<ExclamationTriangleOutline class="w-7 h-7 {colors.icon}" />
|
|
154
|
+
{:else if effectiveVariant === "info"}
|
|
155
|
+
<InfoCircleOutline class="w-7 h-7 {colors.icon}" />
|
|
156
|
+
{/if}
|
|
157
|
+
</div>
|
|
158
|
+
{/if}
|
|
159
|
+
</div>
|
|
160
|
+
{#if title}
|
|
161
|
+
<h2 class={`${typography.h2} mt-4`}>{title}</h2>
|
|
162
|
+
{/if}
|
|
163
|
+
{/if}
|
|
164
|
+
</div>
|
|
165
|
+
{/snippet}
|
|
166
|
+
|
|
167
|
+
{#snippet body()}
|
|
168
|
+
<div class="text-center mt-4">
|
|
169
|
+
{#if description}
|
|
170
|
+
<p class={`leading-relaxed ${isProfileMode ? `${typography.label}` : `${typography.smMuted}`}`}>
|
|
171
|
+
{description}
|
|
172
|
+
</p>
|
|
173
|
+
{/if}
|
|
174
|
+
</div>
|
|
175
|
+
{/snippet}
|
|
176
|
+
|
|
177
|
+
{#snippet footer()}
|
|
178
|
+
<div class="w-full">
|
|
179
|
+
{#if actions.length > 0}
|
|
180
|
+
<div class="flex gap-3">
|
|
181
|
+
{#each actions as action}
|
|
182
|
+
<Button
|
|
183
|
+
size="full"
|
|
184
|
+
variant={getActionVariant(action)}
|
|
185
|
+
disabled={action.disabled || disabled}
|
|
186
|
+
loading={action.loading || (loading && action.primary)}
|
|
187
|
+
onclick={() => handleAction(action)}
|
|
188
|
+
>
|
|
189
|
+
{action.label}
|
|
190
|
+
</Button>
|
|
191
|
+
{/each}
|
|
192
|
+
</div>
|
|
193
|
+
{:else}
|
|
194
|
+
<Button
|
|
195
|
+
size="full"
|
|
196
|
+
variant={buttonVariant}
|
|
197
|
+
{disabled}
|
|
198
|
+
{loading}
|
|
199
|
+
onclick={handleButtonClick}
|
|
200
|
+
>
|
|
201
|
+
{buttonText}
|
|
202
|
+
</Button>
|
|
203
|
+
{/if}
|
|
204
|
+
</div>
|
|
205
|
+
{/snippet}
|
|
206
|
+
</Modal>
|
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { addDays, startOfWeek } from "date-fns";
|
|
2
|
-
|
|
3
|
-
let mockEvents = [];
|
|
4
|
-
|
|
5
|
-
export async function fetchEventsFromAPI() {
|
|
6
|
-
try {
|
|
7
|
-
const response = await fetch("https://get-micdrop.com/api/public/getEventsForVenue");
|
|
8
|
-
if (response.ok) {
|
|
9
|
-
const events = await response.json();
|
|
10
|
-
return events.map((event) => ({
|
|
11
|
-
id: event.ID,
|
|
12
|
-
date: event.startDateTime,
|
|
13
|
-
title: event.title,
|
|
14
|
-
}));
|
|
15
|
-
} else {
|
|
16
|
-
console.error("Failed to load events:", response.status);
|
|
17
|
-
return [];
|
|
18
|
-
}
|
|
19
|
-
} catch (error) {
|
|
20
|
-
console.error("Error fetching events:", error);
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export async function fetchEventsForMonth(year, month) {
|
|
26
|
-
mockEvents = await fetchEventsFromAPI();
|
|
27
|
-
|
|
28
|
-
return new Promise((resolve) => {
|
|
29
|
-
setTimeout(() => {
|
|
30
|
-
resolve(
|
|
31
|
-
mockEvents.filter((event) =>
|
|
32
|
-
event.date.startsWith(`${year}-${String(month).padStart(2, "0")}`)
|
|
33
|
-
)
|
|
34
|
-
);
|
|
35
|
-
}, 500);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export async function fetchEventsForWeek(date) {
|
|
40
|
-
mockEvents = await fetchEventsFromAPI();
|
|
41
|
-
|
|
42
|
-
const startOfWeekDate = startOfWeek(date, { weekStartsOn: 1 });
|
|
43
|
-
const endOfWeekDate = addDays(startOfWeekDate, 6);
|
|
44
|
-
|
|
45
|
-
return new Promise((resolve) => {
|
|
46
|
-
setTimeout(() => {
|
|
47
|
-
const filteredEvents = mockEvents.filter((event) => {
|
|
48
|
-
const eventDate = new Date(event.date).getTime();
|
|
49
|
-
return (
|
|
50
|
-
eventDate >= startOfWeekDate.getTime() &&
|
|
51
|
-
eventDate <= endOfWeekDate.getTime()
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
resolve(filteredEvents);
|
|
55
|
-
}, 500);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export async function fetchEventsForDay(date) {
|
|
60
|
-
mockEvents = await fetchEventsFromAPI();
|
|
61
|
-
|
|
62
|
-
return new Promise((resolve) => {
|
|
63
|
-
setTimeout(() => {
|
|
64
|
-
const filteredEvents = mockEvents.filter((event) => {
|
|
65
|
-
const eventDate = new Date(event.date);
|
|
66
|
-
return (
|
|
67
|
-
eventDate.getUTCDate() === date.getUTCDate() &&
|
|
68
|
-
eventDate.getUTCMonth() === date.getUTCMonth() &&
|
|
69
|
-
eventDate.getUTCFullYear() === date.getUTCFullYear()
|
|
70
|
-
);
|
|
71
|
-
});
|
|
72
|
-
resolve(filteredEvents);
|
|
73
|
-
}, 500);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
1
|
+
import { addDays, startOfWeek } from "date-fns";
|
|
2
|
+
|
|
3
|
+
let mockEvents = [];
|
|
4
|
+
|
|
5
|
+
export async function fetchEventsFromAPI() {
|
|
6
|
+
try {
|
|
7
|
+
const response = await fetch("https://get-micdrop.com/api/public/getEventsForVenue");
|
|
8
|
+
if (response.ok) {
|
|
9
|
+
const events = await response.json();
|
|
10
|
+
return events.map((event) => ({
|
|
11
|
+
id: event.ID,
|
|
12
|
+
date: event.startDateTime,
|
|
13
|
+
title: event.title,
|
|
14
|
+
}));
|
|
15
|
+
} else {
|
|
16
|
+
console.error("Failed to load events:", response.status);
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
} catch (error) {
|
|
20
|
+
console.error("Error fetching events:", error);
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export async function fetchEventsForMonth(year, month) {
|
|
26
|
+
mockEvents = await fetchEventsFromAPI();
|
|
27
|
+
|
|
28
|
+
return new Promise((resolve) => {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
resolve(
|
|
31
|
+
mockEvents.filter((event) =>
|
|
32
|
+
event.date.startsWith(`${year}-${String(month).padStart(2, "0")}`)
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
}, 500);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export async function fetchEventsForWeek(date) {
|
|
40
|
+
mockEvents = await fetchEventsFromAPI();
|
|
41
|
+
|
|
42
|
+
const startOfWeekDate = startOfWeek(date, { weekStartsOn: 1 });
|
|
43
|
+
const endOfWeekDate = addDays(startOfWeekDate, 6);
|
|
44
|
+
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
setTimeout(() => {
|
|
47
|
+
const filteredEvents = mockEvents.filter((event) => {
|
|
48
|
+
const eventDate = new Date(event.date).getTime();
|
|
49
|
+
return (
|
|
50
|
+
eventDate >= startOfWeekDate.getTime() &&
|
|
51
|
+
eventDate <= endOfWeekDate.getTime()
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
resolve(filteredEvents);
|
|
55
|
+
}, 500);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export async function fetchEventsForDay(date) {
|
|
60
|
+
mockEvents = await fetchEventsFromAPI();
|
|
61
|
+
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
const filteredEvents = mockEvents.filter((event) => {
|
|
65
|
+
const eventDate = new Date(event.date);
|
|
66
|
+
return (
|
|
67
|
+
eventDate.getUTCDate() === date.getUTCDate() &&
|
|
68
|
+
eventDate.getUTCMonth() === date.getUTCMonth() &&
|
|
69
|
+
eventDate.getUTCFullYear() === date.getUTCFullYear()
|
|
70
|
+
);
|
|
71
|
+
});
|
|
72
|
+
resolve(filteredEvents);
|
|
73
|
+
}, 500);
|
|
74
|
+
});
|
|
75
|
+
}
|