@getmicdrop/svelte-components 5.6.1 → 5.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/Heading.svelte +57 -0
- package/dist/components/Heading.svelte.d.ts +12 -0
- package/dist/components/Heading.svelte.d.ts.map +1 -0
- package/dist/components/Layout/AppShell.svelte +104 -104
- package/dist/components/Layout/ContentSection.svelte +80 -80
- package/dist/components/Layout/Grid.svelte +4 -4
- package/dist/components/Layout/Heading.svelte +81 -81
- package/dist/components/Layout/PageContainer.svelte +69 -69
- package/dist/components/Layout/Responsive.svelte +75 -75
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
- package/dist/components/Layout/ShowOnMobile.svelte +37 -37
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.spec.js +1 -1
- package/dist/components/Layout/Stack.svelte +6 -6
- package/dist/components/Layout/Text.svelte +87 -87
- package/dist/components/Layout/TwoColumn.svelte +108 -108
- package/dist/components/Layout/index.d.ts +11 -0
- package/dist/components/Layout/index.d.ts.map +1 -0
- package/dist/components/Layout/index.js +14 -0
- package/dist/components/Text.svelte +40 -0
- package/dist/components/Text.svelte.d.ts +11 -0
- package/dist/components/Text.svelte.d.ts.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +12 -0
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/__tests__/format.test.js +1 -1
- package/dist/datetime/__tests__/parse.test.js +1 -1
- package/dist/datetime/__tests__/timezone.test.js +1 -1
- package/dist/datetime/parse.js +1 -1
- package/dist/forms/createFormStore.svelte.js +0 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +10 -1
- 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 +95 -95
- 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 +74 -74
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +74 -74
- 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 +57 -57
- 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 +173 -173
- 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 +144 -144
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +79 -79
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
- package/dist/primitives/Button/Button.spec.js +223 -223
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +270 -270
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
- 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 +390 -390
- 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/DropdownDivider.svelte +9 -9
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Helper/Helper.svelte +33 -33
- 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/Select.spec.js +212 -212
- 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 +99 -99
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- 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 +71 -71
- 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 +143 -143
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
- 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/primitives/index.js +91 -91
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- 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/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 +133 -133
- 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 +258 -258
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- 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.svelte +117 -117
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- 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 +206 -206
- 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 +345 -345
- package/dist/stores/auth.js +36 -44
- package/dist/stores/auth.spec.js +139 -139
- package/dist/stores/formDataStore.d.ts.map +1 -1
- package/dist/stores/formDataStore.js +0 -8
- package/dist/stores/formSave.d.ts.map +1 -1
- package/dist/stores/formSave.js +0 -8
- package/dist/stores/navigation.d.ts.map +1 -1
- package/dist/stores/navigation.js +0 -8
- 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/telemetry.js +405 -405
- package/dist/telemetry.spec.js +1169 -1169
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/transitions.js +62 -62
- package/dist/utils/utils.js +354 -354
- package/package.json +1 -1
- package/dist/stores/auth.svelte.d.ts +0 -39
- package/dist/stores/auth.svelte.d.ts.map +0 -1
- package/dist/stores/auth.svelte.js +0 -60
- package/dist/stores/formDataStore.svelte.d.ts +0 -47
- package/dist/stores/formDataStore.svelte.d.ts.map +0 -1
- package/dist/stores/formDataStore.svelte.js +0 -84
- package/dist/stores/formSave.svelte.d.ts +0 -33
- package/dist/stores/formSave.svelte.d.ts.map +0 -1
- package/dist/stores/formSave.svelte.js +0 -113
- package/dist/stores/navigation.svelte.d.ts +0 -35
- package/dist/stores/navigation.svelte.d.ts.map +0 -1
- package/dist/stores/navigation.svelte.js +0 -69
|
@@ -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 icon = container.querySelector("svg");
|
|
26
|
-
expect(icon).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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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 icon = container.querySelector("svg");
|
|
26
|
+
expect(icon).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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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.querySelector("div.flex");
|
|
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}"
|