@getmicdrop/svelte-components 5.5.0 → 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 -1
- package/dist/index.js +226 -226
- 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,6 +1,7 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { onMount } from "svelte";
|
|
3
|
-
import { fade
|
|
3
|
+
import { fade } from "svelte/transition";
|
|
4
|
+
import { safeSlide } from "../../utils/transitions.js";
|
|
4
5
|
import { cubicOut } from "svelte/easing";
|
|
5
6
|
import WarningIcon from "../../primitives/Icons/WarningIcon.svelte";
|
|
6
7
|
import DarkModeToggle from "../../primitives/DarkModeToggle.svelte";
|
|
@@ -676,7 +677,7 @@
|
|
|
676
677
|
<div class="error-slot">
|
|
677
678
|
{#if errors.email && showErrors}
|
|
678
679
|
<div
|
|
679
|
-
transition:
|
|
680
|
+
transition:safeSlide={{ duration: 300, easing: cubicOut }}
|
|
680
681
|
class="flex items-center gap-1.5 text-red-500"
|
|
681
682
|
role="alert"
|
|
682
683
|
>
|
|
@@ -717,7 +718,7 @@
|
|
|
717
718
|
<div class="error-slot">
|
|
718
719
|
{#if errors.password && showErrors}
|
|
719
720
|
<div
|
|
720
|
-
transition:
|
|
721
|
+
transition:safeSlide={{ duration: 300, easing: cubicOut }}
|
|
721
722
|
class="flex items-center gap-1.5 text-red-500"
|
|
722
723
|
role="alert"
|
|
723
724
|
>
|
|
@@ -895,7 +896,7 @@
|
|
|
895
896
|
>
|
|
896
897
|
{#if errors.password && showErrors}
|
|
897
898
|
<div
|
|
898
|
-
transition:
|
|
899
|
+
transition:safeSlide={{ duration: 600, easing: cubicOut }}
|
|
899
900
|
class="flex items-start gap-1.5 text-red-500"
|
|
900
901
|
role="alert"
|
|
901
902
|
>
|
|
@@ -966,7 +967,7 @@
|
|
|
966
967
|
<div class="error-slot">
|
|
967
968
|
{#if errors.email && showErrors}
|
|
968
969
|
<div
|
|
969
|
-
transition:
|
|
970
|
+
transition:safeSlide={{ duration: 300, easing: cubicOut }}
|
|
970
971
|
class="flex items-center gap-1.5 text-red-500"
|
|
971
972
|
role="alert"
|
|
972
973
|
>
|
|
@@ -1031,7 +1032,7 @@
|
|
|
1031
1032
|
<div class="error-slot">
|
|
1032
1033
|
{#if errors.email && showErrors}
|
|
1033
1034
|
<div
|
|
1034
|
-
transition:
|
|
1035
|
+
transition:safeSlide={{ duration: 300, easing: cubicOut }}
|
|
1035
1036
|
class="flex items-center gap-1.5 text-red-500"
|
|
1036
1037
|
role="alert"
|
|
1037
1038
|
>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperLogin.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/SuperLogin/SuperLogin.svelte.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"SuperLogin.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/SuperLogin/SuperLogin.svelte.js"],"names":[],"mappings":";;;;;AAi+BA;iBAj7BkC,MAAM;cAAY,MAAM;cAAY,MAAM;kBAAgB,MAAM;kBAAgB,OAAO;gBAAc,MAAM;gBAAc,MAAM;iBAAe,MAAM;0BAAwB,MAAM;wBAAsB,MAAM;aAAW,MAAM;;;;;yBAAoI,OAAO;mBAAiB,MAAM;WAi7B1W;wBAj7BtC;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,WAAW;IAAC,eAAe,CAAC,WAAW;IAAC,UAAU,CAAC,WAAW;IAAC,kBAAkB,CAAC,WAAW;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE"}
|
|
@@ -1,62 +1,62 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
|
|
4
|
-
import { Toaster } from "svelte-sonner";
|
|
5
|
-
import { showToast } from "../../stores/toaster";
|
|
6
|
-
|
|
7
|
-
const { Story } = defineMeta({
|
|
8
|
-
title: "Components/Toaster",
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
function showSuccessToast() {
|
|
12
|
-
showToast("Action completed successfully!", "success");
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
function showErrorToast() {
|
|
16
|
-
showToast("An error occurred. Please try again.", "error");
|
|
17
|
-
}
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<Story name="Trigger Success Toast">
|
|
21
|
-
<div class="p-8">
|
|
22
|
-
<Toaster
|
|
23
|
-
position="bottom-right"
|
|
24
|
-
toastOptions={{
|
|
25
|
-
class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
|
|
26
|
-
classes: {
|
|
27
|
-
error: "text-red-600 dark:text-red-400",
|
|
28
|
-
success: "text-green-600 dark:text-green-400",
|
|
29
|
-
},
|
|
30
|
-
}}
|
|
31
|
-
/>
|
|
32
|
-
<button
|
|
33
|
-
onclick={showSuccessToast}
|
|
34
|
-
class="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700"
|
|
35
|
-
>
|
|
36
|
-
Show Success Toast
|
|
37
|
-
</button>
|
|
38
|
-
<p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see a success toast notification</p>
|
|
39
|
-
</div>
|
|
40
|
-
</Story>
|
|
41
|
-
|
|
42
|
-
<Story name="Trigger Error Toast">
|
|
43
|
-
<div class="p-8">
|
|
44
|
-
<Toaster
|
|
45
|
-
position="bottom-right"
|
|
46
|
-
toastOptions={{
|
|
47
|
-
class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
|
|
48
|
-
classes: {
|
|
49
|
-
error: "text-red-600 dark:text-red-400",
|
|
50
|
-
success: "text-green-600 dark:text-green-400",
|
|
51
|
-
},
|
|
52
|
-
}}
|
|
53
|
-
/>
|
|
54
|
-
<button
|
|
55
|
-
onclick={showErrorToast}
|
|
56
|
-
class="px-4 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700"
|
|
57
|
-
>
|
|
58
|
-
Show Error Toast
|
|
59
|
-
</button>
|
|
60
|
-
<p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see an error toast notification</p>
|
|
61
|
-
</div>
|
|
62
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
|
|
4
|
+
import { Toaster } from "svelte-sonner";
|
|
5
|
+
import { showToast } from "../../stores/toaster";
|
|
6
|
+
|
|
7
|
+
const { Story } = defineMeta({
|
|
8
|
+
title: "Components/Toaster",
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
function showSuccessToast() {
|
|
12
|
+
showToast("Action completed successfully!", "success");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function showErrorToast() {
|
|
16
|
+
showToast("An error occurred. Please try again.", "error");
|
|
17
|
+
}
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<Story name="Trigger Success Toast">
|
|
21
|
+
<div class="p-8">
|
|
22
|
+
<Toaster
|
|
23
|
+
position="bottom-right"
|
|
24
|
+
toastOptions={{
|
|
25
|
+
class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
|
|
26
|
+
classes: {
|
|
27
|
+
error: "text-red-600 dark:text-red-400",
|
|
28
|
+
success: "text-green-600 dark:text-green-400",
|
|
29
|
+
},
|
|
30
|
+
}}
|
|
31
|
+
/>
|
|
32
|
+
<button
|
|
33
|
+
onclick={showSuccessToast}
|
|
34
|
+
class="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700"
|
|
35
|
+
>
|
|
36
|
+
Show Success Toast
|
|
37
|
+
</button>
|
|
38
|
+
<p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see a success toast notification</p>
|
|
39
|
+
</div>
|
|
40
|
+
</Story>
|
|
41
|
+
|
|
42
|
+
<Story name="Trigger Error Toast">
|
|
43
|
+
<div class="p-8">
|
|
44
|
+
<Toaster
|
|
45
|
+
position="bottom-right"
|
|
46
|
+
toastOptions={{
|
|
47
|
+
class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
|
|
48
|
+
classes: {
|
|
49
|
+
error: "text-red-600 dark:text-red-400",
|
|
50
|
+
success: "text-green-600 dark:text-green-400",
|
|
51
|
+
},
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
<button
|
|
55
|
+
onclick={showErrorToast}
|
|
56
|
+
class="px-4 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700"
|
|
57
|
+
>
|
|
58
|
+
Show Error Toast
|
|
59
|
+
</button>
|
|
60
|
+
<p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see an error toast notification</p>
|
|
61
|
+
</div>
|
|
62
|
+
</Story>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
let displayTitle = $derived(title || message || 'No results found');
|
|
43
43
|
let displaySubtext = $derived(description || subtext);
|
|
44
44
|
</script>
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
<div class="flex flex-col items-center justify-center px-6 py-10 text-center {className}">
|
|
47
47
|
{#if icon || imageSrc}
|
|
48
48
|
{#if iconType === 'component' && icon}
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
import { render, screen } from "@testing-library/svelte";
|
|
2
|
-
import { expect, describe, test } from "vitest";
|
|
3
|
-
import ErrorDisplay from "./ErrorDisplay.svelte";
|
|
4
|
-
|
|
5
|
-
describe("ErrorDisplay Component Tests", () => {
|
|
6
|
-
test("Shows error message when error and show are true", () => {
|
|
7
|
-
render(ErrorDisplay, { props: { error: "Invalid input", show: true } });
|
|
8
|
-
expect(screen.getByText("Invalid input")).toBeInTheDocument();
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
test("Does not show when error is empty", () => {
|
|
12
|
-
render(ErrorDisplay, { props: { error: "", show: true } });
|
|
13
|
-
expect(screen.queryByText("Invalid input")).not.toBeInTheDocument();
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
test("Does not show when show is false", () => {
|
|
17
|
-
render(ErrorDisplay, { props: { error: "Error message", show: false } });
|
|
18
|
-
expect(screen.queryByText("Error message")).not.toBeInTheDocument();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test("Has error text color", () => {
|
|
22
|
-
const { container } = render(ErrorDisplay, {
|
|
23
|
-
props: { error: "Error", show: true },
|
|
24
|
-
});
|
|
25
|
-
const wrapper = container.firstChild;
|
|
26
|
-
expect(wrapper).toHaveClass("text-red-600");
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test("Has shake class when shake is true", () => {
|
|
30
|
-
const { container } = render(ErrorDisplay, {
|
|
31
|
-
props: { error: "Error", show: true, shake: true },
|
|
32
|
-
});
|
|
33
|
-
const wrapper = container.firstChild;
|
|
34
|
-
expect(wrapper).toHaveClass("animate-shake");
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test("Does not have shake class when shake is false", () => {
|
|
38
|
-
const { container } = render(ErrorDisplay, {
|
|
39
|
-
props: { error: "Error", show: true, shake: false },
|
|
40
|
-
});
|
|
41
|
-
const wrapper = container.firstChild;
|
|
42
|
-
expect(wrapper).not.toHaveClass("animate-shake");
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test("Contains icon element", () => {
|
|
46
|
-
const { container } = render(ErrorDisplay, {
|
|
47
|
-
props: { error: "Error", show: true },
|
|
48
|
-
});
|
|
49
|
-
const svg = container.querySelector("svg");
|
|
50
|
-
expect(svg).toBeInTheDocument();
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test("Has flex layout", () => {
|
|
54
|
-
const { container } = render(ErrorDisplay, {
|
|
55
|
-
props: { error: "Error", show: true },
|
|
56
|
-
});
|
|
57
|
-
const wrapper = container.firstChild;
|
|
58
|
-
expect(wrapper).toHaveClass("flex");
|
|
59
|
-
expect(wrapper).toHaveClass("items-center");
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test("Applies custom className", () => {
|
|
63
|
-
const { container } = render(ErrorDisplay, {
|
|
64
|
-
props: { error: "Error", show: true, className: "mt-2" },
|
|
65
|
-
});
|
|
66
|
-
const wrapper = container.firstChild;
|
|
67
|
-
expect(wrapper).toHaveClass("mt-2");
|
|
68
|
-
});
|
|
69
|
-
});
|
|
1
|
+
import { render, screen } from "@testing-library/svelte";
|
|
2
|
+
import { expect, describe, test } from "vitest";
|
|
3
|
+
import ErrorDisplay from "./ErrorDisplay.svelte";
|
|
4
|
+
|
|
5
|
+
describe("ErrorDisplay Component Tests", () => {
|
|
6
|
+
test("Shows error message when error and show are true", () => {
|
|
7
|
+
render(ErrorDisplay, { props: { error: "Invalid input", show: true } });
|
|
8
|
+
expect(screen.getByText("Invalid input")).toBeInTheDocument();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test("Does not show when error is empty", () => {
|
|
12
|
+
render(ErrorDisplay, { props: { error: "", show: true } });
|
|
13
|
+
expect(screen.queryByText("Invalid input")).not.toBeInTheDocument();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test("Does not show when show is false", () => {
|
|
17
|
+
render(ErrorDisplay, { props: { error: "Error message", show: false } });
|
|
18
|
+
expect(screen.queryByText("Error message")).not.toBeInTheDocument();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test("Has error text color", () => {
|
|
22
|
+
const { container } = render(ErrorDisplay, {
|
|
23
|
+
props: { error: "Error", show: true },
|
|
24
|
+
});
|
|
25
|
+
const wrapper = container.firstChild;
|
|
26
|
+
expect(wrapper).toHaveClass("text-red-600");
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("Has shake class when shake is true", () => {
|
|
30
|
+
const { container } = render(ErrorDisplay, {
|
|
31
|
+
props: { error: "Error", show: true, shake: true },
|
|
32
|
+
});
|
|
33
|
+
const wrapper = container.firstChild;
|
|
34
|
+
expect(wrapper).toHaveClass("animate-shake");
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test("Does not have shake class when shake is false", () => {
|
|
38
|
+
const { container } = render(ErrorDisplay, {
|
|
39
|
+
props: { error: "Error", show: true, shake: false },
|
|
40
|
+
});
|
|
41
|
+
const wrapper = container.firstChild;
|
|
42
|
+
expect(wrapper).not.toHaveClass("animate-shake");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("Contains icon element", () => {
|
|
46
|
+
const { container } = render(ErrorDisplay, {
|
|
47
|
+
props: { error: "Error", show: true },
|
|
48
|
+
});
|
|
49
|
+
const svg = container.querySelector("svg");
|
|
50
|
+
expect(svg).toBeInTheDocument();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
test("Has flex layout", () => {
|
|
54
|
+
const { container } = render(ErrorDisplay, {
|
|
55
|
+
props: { error: "Error", show: true },
|
|
56
|
+
});
|
|
57
|
+
const wrapper = container.firstChild;
|
|
58
|
+
expect(wrapper).toHaveClass("flex");
|
|
59
|
+
expect(wrapper).toHaveClass("items-center");
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("Applies custom className", () => {
|
|
63
|
+
const { container } = render(ErrorDisplay, {
|
|
64
|
+
props: { error: "Error", show: true, className: "mt-2" },
|
|
65
|
+
});
|
|
66
|
+
const wrapper = container.firstChild;
|
|
67
|
+
expect(wrapper).toHaveClass("mt-2");
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -1,95 +1,95 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
|
|
4
|
-
import ErrorDisplay from './ErrorDisplay.svelte';
|
|
5
|
-
|
|
6
|
-
const { Story } = defineMeta({
|
|
7
|
-
title: 'Components/ErrorDisplay',
|
|
8
|
-
component: ErrorDisplay,
|
|
9
|
-
tags: ['autodocs'],
|
|
10
|
-
argTypes: {
|
|
11
|
-
error: {
|
|
12
|
-
control: 'text',
|
|
13
|
-
description: 'Error message to display',
|
|
14
|
-
},
|
|
15
|
-
show: {
|
|
16
|
-
control: 'boolean',
|
|
17
|
-
description: 'Controls visibility',
|
|
18
|
-
},
|
|
19
|
-
shake: {
|
|
20
|
-
control: 'boolean',
|
|
21
|
-
description: 'Enable shake animation',
|
|
22
|
-
},
|
|
23
|
-
icon: {
|
|
24
|
-
control: 'text',
|
|
25
|
-
description: 'Icon name from Icon component',
|
|
26
|
-
},
|
|
27
|
-
iconSize: {
|
|
28
|
-
control: 'text',
|
|
29
|
-
description: 'Size of the icon',
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
</script>
|
|
34
|
-
|
|
35
|
-
<script>
|
|
36
|
-
let showShakeDemo = $state(false);
|
|
37
|
-
function triggerShake() {
|
|
38
|
-
showShakeDemo = false;
|
|
39
|
-
setTimeout(() => {
|
|
40
|
-
showShakeDemo = true;
|
|
41
|
-
}, 10);
|
|
42
|
-
}
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<Story
|
|
47
|
-
name="Default"
|
|
48
|
-
args={{
|
|
49
|
-
error: 'This is an error message',
|
|
50
|
-
show: true,
|
|
51
|
-
shake: false,
|
|
52
|
-
}}
|
|
53
|
-
/>
|
|
54
|
-
|
|
55
|
-
<Story
|
|
56
|
-
name="With Shake Animation"
|
|
57
|
-
args={{
|
|
58
|
-
error: 'Invalid input detected',
|
|
59
|
-
show: true,
|
|
60
|
-
shake: true,
|
|
61
|
-
}}
|
|
62
|
-
/>
|
|
63
|
-
|
|
64
|
-
<Story name="Interactive Shake">
|
|
65
|
-
<div class="space-y-4">
|
|
66
|
-
<button
|
|
67
|
-
class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-primary"
|
|
68
|
-
onclick={triggerShake}
|
|
69
|
-
>
|
|
70
|
-
Trigger Error Shake
|
|
71
|
-
</button>
|
|
72
|
-
<ErrorDisplay
|
|
73
|
-
error="Form validation failed"
|
|
74
|
-
show={showShakeDemo}
|
|
75
|
-
shake={showShakeDemo}
|
|
76
|
-
/>
|
|
77
|
-
</div>
|
|
78
|
-
</Story>
|
|
79
|
-
|
|
80
|
-
<Story
|
|
81
|
-
name="Different Icons"
|
|
82
|
-
>
|
|
83
|
-
<div class="space-y-4">
|
|
84
|
-
<ErrorDisplay error="Error with default icon" />
|
|
85
|
-
<ErrorDisplay error="Warning message" icon="Warning" />
|
|
86
|
-
<ErrorDisplay error="Info message" icon="Info" />
|
|
87
|
-
</div>
|
|
88
|
-
</Story>
|
|
89
|
-
|
|
90
|
-
<Story
|
|
91
|
-
name="In Form Context"
|
|
92
|
-
>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
|
|
4
|
+
import ErrorDisplay from './ErrorDisplay.svelte';
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: 'Components/ErrorDisplay',
|
|
8
|
+
component: ErrorDisplay,
|
|
9
|
+
tags: ['autodocs'],
|
|
10
|
+
argTypes: {
|
|
11
|
+
error: {
|
|
12
|
+
control: 'text',
|
|
13
|
+
description: 'Error message to display',
|
|
14
|
+
},
|
|
15
|
+
show: {
|
|
16
|
+
control: 'boolean',
|
|
17
|
+
description: 'Controls visibility',
|
|
18
|
+
},
|
|
19
|
+
shake: {
|
|
20
|
+
control: 'boolean',
|
|
21
|
+
description: 'Enable shake animation',
|
|
22
|
+
},
|
|
23
|
+
icon: {
|
|
24
|
+
control: 'text',
|
|
25
|
+
description: 'Icon name from Icon component',
|
|
26
|
+
},
|
|
27
|
+
iconSize: {
|
|
28
|
+
control: 'text',
|
|
29
|
+
description: 'Size of the icon',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<script>
|
|
36
|
+
let showShakeDemo = $state(false);
|
|
37
|
+
function triggerShake() {
|
|
38
|
+
showShakeDemo = false;
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
showShakeDemo = true;
|
|
41
|
+
}, 10);
|
|
42
|
+
}
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<Story
|
|
47
|
+
name="Default"
|
|
48
|
+
args={{
|
|
49
|
+
error: 'This is an error message',
|
|
50
|
+
show: true,
|
|
51
|
+
shake: false,
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
|
|
55
|
+
<Story
|
|
56
|
+
name="With Shake Animation"
|
|
57
|
+
args={{
|
|
58
|
+
error: 'Invalid input detected',
|
|
59
|
+
show: true,
|
|
60
|
+
shake: true,
|
|
61
|
+
}}
|
|
62
|
+
/>
|
|
63
|
+
|
|
64
|
+
<Story name="Interactive Shake">
|
|
65
|
+
<div class="space-y-4">
|
|
66
|
+
<button
|
|
67
|
+
class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-primary"
|
|
68
|
+
onclick={triggerShake}
|
|
69
|
+
>
|
|
70
|
+
Trigger Error Shake
|
|
71
|
+
</button>
|
|
72
|
+
<ErrorDisplay
|
|
73
|
+
error="Form validation failed"
|
|
74
|
+
show={showShakeDemo}
|
|
75
|
+
shake={showShakeDemo}
|
|
76
|
+
/>
|
|
77
|
+
</div>
|
|
78
|
+
</Story>
|
|
79
|
+
|
|
80
|
+
<Story
|
|
81
|
+
name="Different Icons"
|
|
82
|
+
>
|
|
83
|
+
<div class="space-y-4">
|
|
84
|
+
<ErrorDisplay error="Error with default icon" />
|
|
85
|
+
<ErrorDisplay error="Warning message" icon="Warning" />
|
|
86
|
+
<ErrorDisplay error="Info message" icon="Info" />
|
|
87
|
+
</div>
|
|
88
|
+
</Story>
|
|
89
|
+
|
|
90
|
+
<Story
|
|
91
|
+
name="In Form Context"
|
|
92
|
+
>
|
|
93
93
|
<div class="max-w-md">
|
|
94
94
|
<label for="error-display-email" class="block text-sm font-medium mb-1">Email</label>
|
|
95
95
|
<input
|
|
@@ -102,12 +102,12 @@
|
|
|
102
102
|
<ErrorDisplay error="Please enter a valid email address" shake={true} />
|
|
103
103
|
</div>
|
|
104
104
|
</div>
|
|
105
|
-
</Story>
|
|
106
|
-
|
|
107
|
-
<Story
|
|
108
|
-
name="Hidden State"
|
|
109
|
-
args={{
|
|
110
|
-
error: 'This error is hidden',
|
|
111
|
-
show: false,
|
|
112
|
-
}}
|
|
113
|
-
/>
|
|
105
|
+
</Story>
|
|
106
|
+
|
|
107
|
+
<Story
|
|
108
|
+
name="Hidden State"
|
|
109
|
+
args={{
|
|
110
|
+
error: 'This error is hidden',
|
|
111
|
+
show: false,
|
|
112
|
+
}}
|
|
113
|
+
/>
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
// Support both naming conventions
|
|
42
42
|
let displayMessage = $derived(error || message);
|
|
43
43
|
</script>
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
{#if (displayMessage || title) && show}
|
|
46
46
|
<div
|
|
47
47
|
class="flex flex-col items-center justify-center px-6 py-10 text-center {shake ? 'animate-shake' : ''} {className}"
|