@getmicdrop/svelte-components 5.5.5 → 5.6.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/Layout/AppShell.svelte +104 -0
- package/dist/components/Layout/AppShell.svelte.d.ts +26 -0
- package/dist/components/Layout/AppShell.svelte.d.ts.map +1 -0
- package/dist/components/Layout/ContentSection.svelte +80 -0
- package/dist/components/Layout/ContentSection.svelte.d.ts +23 -0
- package/dist/components/Layout/ContentSection.svelte.d.ts.map +1 -0
- package/dist/components/Layout/Grid.svelte +4 -4
- package/dist/components/Layout/Heading.svelte +81 -0
- package/dist/components/Layout/Heading.svelte.d.ts +24 -0
- package/dist/components/Layout/Heading.svelte.d.ts.map +1 -0
- package/dist/components/Layout/PageContainer.svelte +69 -0
- package/dist/components/Layout/PageContainer.svelte.d.ts +23 -0
- package/dist/components/Layout/PageContainer.svelte.d.ts.map +1 -0
- package/dist/components/Layout/Responsive.svelte +75 -0
- package/dist/components/Layout/Responsive.svelte.d.ts +19 -0
- package/dist/components/Layout/Responsive.svelte.d.ts.map +1 -0
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/ShowOnDesktop.svelte +37 -0
- package/dist/components/Layout/ShowOnDesktop.svelte.d.ts +16 -0
- package/dist/components/Layout/ShowOnDesktop.svelte.d.ts.map +1 -0
- package/dist/components/Layout/ShowOnMobile.svelte +37 -0
- package/dist/components/Layout/ShowOnMobile.svelte.d.ts +16 -0
- package/dist/components/Layout/ShowOnMobile.svelte.d.ts.map +1 -0
- 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 -0
- package/dist/components/Layout/Text.svelte.d.ts +28 -0
- package/dist/components/Layout/Text.svelte.d.ts.map +1 -0
- package/dist/components/Layout/TwoColumn.svelte +108 -0
- package/dist/components/Layout/TwoColumn.svelte.d.ts +28 -0
- package/dist/components/Layout/TwoColumn.svelte.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/AppShell.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/AppShell.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/AppShell.test.js +95 -0
- package/dist/components/Layout/__tests__/ContentSection.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/ContentSection.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/ContentSection.test.js +112 -0
- package/dist/components/Layout/__tests__/Heading.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/Heading.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/Heading.test.js +123 -0
- package/dist/components/Layout/__tests__/PageContainer.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/PageContainer.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/PageContainer.test.js +133 -0
- package/dist/components/Layout/__tests__/Responsive.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/Responsive.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/Responsive.test.js +123 -0
- package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/ShowOnDesktop.test.js +84 -0
- package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/ShowOnMobile.test.js +80 -0
- package/dist/components/Layout/__tests__/Text.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/Text.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/Text.test.js +146 -0
- package/dist/components/Layout/__tests__/TwoColumn.test.d.ts +2 -0
- package/dist/components/Layout/__tests__/TwoColumn.test.d.ts.map +1 -0
- package/dist/components/Layout/__tests__/TwoColumn.test.js +129 -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 +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- 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/layout/index.d.ts +9 -0
- package/dist/patterns/layout/index.js +22 -0
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +74 -64
- package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
- 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/Accordion/AccordionItemWrapper.test.svelte +107 -107
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +2 -2
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -1
- 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 -0
- package/dist/primitives/Dropdown/DropdownDivider.svelte.d.ts +7 -0
- package/dist/primitives/Dropdown/DropdownDivider.svelte.d.ts.map +1 -0
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Helper/Helper.svelte +33 -0
- package/dist/primitives/Helper/Helper.svelte.d.ts +18 -0
- package/dist/primitives/Helper/Helper.svelte.d.ts.map +1 -0
- 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 +1 -2
- package/dist/primitives/Input/Input.svelte.d.ts +2 -4
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- 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/Modal/Modal.svelte +3 -4
- package/dist/primitives/Modal/Modal.svelte.d.ts +6 -8
- package/dist/primitives/Modal/Modal.svelte.d.ts.map +1 -1
- package/dist/primitives/NumberInput/NumberInput.svelte +0 -1
- package/dist/primitives/NumberInput/NumberInput.svelte.d.ts +0 -2
- package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -1
- 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/Toggle.svelte +1 -2
- package/dist/primitives/Toggle.svelte.d.ts +2 -4
- package/dist/primitives/Toggle.svelte.d.ts.map +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +15 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
- 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.d.ts +3 -0
- package/dist/primitives/index.js +91 -84
- 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.spec.js +6 -5
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
- package/dist/recipes/SuperLogin/SuperLogin.spec.js +17 -17
- 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/MultiSelect.svelte +29 -8
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts +54 -21
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
- 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.spec.js +9 -4
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +30 -25
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts +12 -1
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte.d.ts.map +1 -1
- 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 +44 -36
- package/dist/stores/auth.spec.js +139 -139
- package/dist/stores/auth.svelte.d.ts +39 -0
- package/dist/stores/auth.svelte.d.ts.map +1 -0
- package/dist/stores/auth.svelte.js +60 -0
- package/dist/stores/formDataStore.d.ts.map +1 -1
- package/dist/stores/formDataStore.js +8 -0
- package/dist/stores/formDataStore.svelte.d.ts +47 -0
- package/dist/stores/formDataStore.svelte.d.ts.map +1 -0
- package/dist/stores/formDataStore.svelte.js +84 -0
- package/dist/stores/formSave.d.ts.map +1 -1
- package/dist/stores/formSave.js +8 -0
- package/dist/stores/formSave.svelte.d.ts +33 -0
- package/dist/stores/formSave.svelte.d.ts.map +1 -0
- package/dist/stores/formSave.svelte.js +113 -0
- package/dist/stores/navigation.d.ts.map +1 -1
- package/dist/stores/navigation.js +8 -0
- package/dist/stores/navigation.svelte.d.ts +35 -0
- package/dist/stores/navigation.svelte.d.ts.map +1 -0
- package/dist/stores/navigation.svelte.js +69 -0
- 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.server.spec.js +11 -8
- package/dist/telemetry.spec.js +1169 -1144
- package/dist/tokens/__tests__/typography-base.test.d.ts +2 -0
- package/dist/tokens/__tests__/typography-base.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/typography-base.test.js +138 -0
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -0
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/imageValidation.spec.js +62 -59
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +47 -0
- package/dist/utils/transitions.js +62 -62
- package/dist/utils/utils.js +354 -354
- package/package.json +21 -16
|
@@ -1,107 +1,107 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* Test wrapper for AccordionItem
|
|
4
|
-
* Provides the necessary accordion context that AccordionItem expects
|
|
5
|
-
*/
|
|
6
|
-
import type { Snippet } from 'svelte';
|
|
7
|
-
import { setContext } from 'svelte';
|
|
8
|
-
import { writable } from 'svelte/store';
|
|
9
|
-
import AccordionItem from './AccordionItem.svelte';
|
|
10
|
-
|
|
11
|
-
interface Props {
|
|
12
|
-
/** Allow multiple items open at once */
|
|
13
|
-
multiple?: boolean;
|
|
14
|
-
/** Remove outer border/radius (Flowbite flush variant) */
|
|
15
|
-
flush?: boolean;
|
|
16
|
-
/** Initial open state of the item */
|
|
17
|
-
open?: boolean;
|
|
18
|
-
/** Show bottom border */
|
|
19
|
-
border?: boolean;
|
|
20
|
-
/** Additional classes when open */
|
|
21
|
-
borderOpenClass?: string;
|
|
22
|
-
/** Custom class for the item */
|
|
23
|
-
class?: string;
|
|
24
|
-
/** Header snippet */
|
|
25
|
-
header?: Snippet;
|
|
26
|
-
/** Children snippet */
|
|
27
|
-
children?: Snippet;
|
|
28
|
-
/** Expose the openItems store for testing */
|
|
29
|
-
openItems?:
|
|
30
|
-
/** Expose the toggle function for testing */
|
|
31
|
-
toggleFn?:
|
|
32
|
-
/** Data attributes for testing */
|
|
33
|
-
'data-testid'?: string;
|
|
34
|
-
'data-custom'?: string;
|
|
35
|
-
[key: string]: unknown;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
let {
|
|
39
|
-
multiple = false,
|
|
40
|
-
flush = false,
|
|
41
|
-
open = false,
|
|
42
|
-
border = true,
|
|
43
|
-
borderOpenClass = '',
|
|
44
|
-
class: className = '',
|
|
45
|
-
header,
|
|
46
|
-
children,
|
|
47
|
-
openItems: exposedOpenItems = $bindable(null),
|
|
48
|
-
toggleFn: exposedToggleFn = $bindable(null),
|
|
49
|
-
'data-testid': dataTestId,
|
|
50
|
-
'data-custom': dataCustom,
|
|
51
|
-
...restProps
|
|
52
|
-
}: Props = $props();
|
|
53
|
-
|
|
54
|
-
// Create the accordion context
|
|
55
|
-
const openItems = writable(new Set<string>());
|
|
56
|
-
|
|
57
|
-
// Expose openItems to parent for testing
|
|
58
|
-
exposedOpenItems = openItems;
|
|
59
|
-
|
|
60
|
-
const toggle = (id: string) => {
|
|
61
|
-
openItems.update((items) => {
|
|
62
|
-
if (items.has(id)) {
|
|
63
|
-
items.delete(id);
|
|
64
|
-
} else {
|
|
65
|
-
if (!multiple) {
|
|
66
|
-
items.clear();
|
|
67
|
-
}
|
|
68
|
-
items.add(id);
|
|
69
|
-
}
|
|
70
|
-
return new Set(items);
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
// Expose toggle function to parent for testing
|
|
75
|
-
exposedToggleFn = toggle;
|
|
76
|
-
|
|
77
|
-
setContext("accordion", {
|
|
78
|
-
openItems,
|
|
79
|
-
toggle,
|
|
80
|
-
get flush() { return flush; }
|
|
81
|
-
});
|
|
82
|
-
</script>
|
|
83
|
-
|
|
84
|
-
<AccordionItem
|
|
85
|
-
{open}
|
|
86
|
-
{border}
|
|
87
|
-
{borderOpenClass}
|
|
88
|
-
class={className}
|
|
89
|
-
data-testid={dataTestId}
|
|
90
|
-
data-custom={dataCustom}
|
|
91
|
-
{...restProps}
|
|
92
|
-
>
|
|
93
|
-
{#snippet header()}
|
|
94
|
-
{#if header}
|
|
95
|
-
{@render header()}
|
|
96
|
-
{:else}
|
|
97
|
-
Test Header
|
|
98
|
-
{/if}
|
|
99
|
-
{/snippet}
|
|
100
|
-
{#snippet children()}
|
|
101
|
-
{#if children}
|
|
102
|
-
{@render children()}
|
|
103
|
-
{:else}
|
|
104
|
-
Test Content
|
|
105
|
-
{/if}
|
|
106
|
-
{/snippet}
|
|
107
|
-
</AccordionItem>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Test wrapper for AccordionItem
|
|
4
|
+
* Provides the necessary accordion context that AccordionItem expects
|
|
5
|
+
*/
|
|
6
|
+
import type { Snippet } from 'svelte';
|
|
7
|
+
import { setContext } from 'svelte';
|
|
8
|
+
import { writable } from 'svelte/store';
|
|
9
|
+
import AccordionItem from './AccordionItem.svelte';
|
|
10
|
+
|
|
11
|
+
interface Props {
|
|
12
|
+
/** Allow multiple items open at once */
|
|
13
|
+
multiple?: boolean;
|
|
14
|
+
/** Remove outer border/radius (Flowbite flush variant) */
|
|
15
|
+
flush?: boolean;
|
|
16
|
+
/** Initial open state of the item */
|
|
17
|
+
open?: boolean;
|
|
18
|
+
/** Show bottom border */
|
|
19
|
+
border?: boolean;
|
|
20
|
+
/** Additional classes when open */
|
|
21
|
+
borderOpenClass?: string;
|
|
22
|
+
/** Custom class for the item */
|
|
23
|
+
class?: string;
|
|
24
|
+
/** Header snippet */
|
|
25
|
+
header?: Snippet;
|
|
26
|
+
/** Children snippet */
|
|
27
|
+
children?: Snippet;
|
|
28
|
+
/** Expose the openItems store for testing */
|
|
29
|
+
openItems?: import('svelte/store').Writable<Set<string>> | null;
|
|
30
|
+
/** Expose the toggle function for testing */
|
|
31
|
+
toggleFn?: ((id: string) => void) | null;
|
|
32
|
+
/** Data attributes for testing */
|
|
33
|
+
'data-testid'?: string;
|
|
34
|
+
'data-custom'?: string;
|
|
35
|
+
[key: string]: unknown;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
let {
|
|
39
|
+
multiple = false,
|
|
40
|
+
flush = false,
|
|
41
|
+
open = false,
|
|
42
|
+
border = true,
|
|
43
|
+
borderOpenClass = '',
|
|
44
|
+
class: className = '',
|
|
45
|
+
header,
|
|
46
|
+
children,
|
|
47
|
+
openItems: exposedOpenItems = $bindable(null),
|
|
48
|
+
toggleFn: exposedToggleFn = $bindable(null),
|
|
49
|
+
'data-testid': dataTestId,
|
|
50
|
+
'data-custom': dataCustom,
|
|
51
|
+
...restProps
|
|
52
|
+
}: Props = $props();
|
|
53
|
+
|
|
54
|
+
// Create the accordion context
|
|
55
|
+
const openItems = writable(new Set<string>());
|
|
56
|
+
|
|
57
|
+
// Expose openItems to parent for testing
|
|
58
|
+
exposedOpenItems = openItems;
|
|
59
|
+
|
|
60
|
+
const toggle = (id: string) => {
|
|
61
|
+
openItems.update((items) => {
|
|
62
|
+
if (items.has(id)) {
|
|
63
|
+
items.delete(id);
|
|
64
|
+
} else {
|
|
65
|
+
if (!multiple) {
|
|
66
|
+
items.clear();
|
|
67
|
+
}
|
|
68
|
+
items.add(id);
|
|
69
|
+
}
|
|
70
|
+
return new Set(items);
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Expose toggle function to parent for testing
|
|
75
|
+
exposedToggleFn = toggle;
|
|
76
|
+
|
|
77
|
+
setContext("accordion", {
|
|
78
|
+
openItems,
|
|
79
|
+
toggle,
|
|
80
|
+
get flush() { return flush; }
|
|
81
|
+
});
|
|
82
|
+
</script>
|
|
83
|
+
|
|
84
|
+
<AccordionItem
|
|
85
|
+
{open}
|
|
86
|
+
{border}
|
|
87
|
+
{borderOpenClass}
|
|
88
|
+
class={className}
|
|
89
|
+
data-testid={dataTestId}
|
|
90
|
+
data-custom={dataCustom}
|
|
91
|
+
{...restProps}
|
|
92
|
+
>
|
|
93
|
+
{#snippet header()}
|
|
94
|
+
{#if header}
|
|
95
|
+
{@render header()}
|
|
96
|
+
{:else}
|
|
97
|
+
Test Header
|
|
98
|
+
{/if}
|
|
99
|
+
{/snippet}
|
|
100
|
+
{#snippet children()}
|
|
101
|
+
{#if children}
|
|
102
|
+
{@render children()}
|
|
103
|
+
{:else}
|
|
104
|
+
Test Content
|
|
105
|
+
{/if}
|
|
106
|
+
{/snippet}
|
|
107
|
+
</AccordionItem>
|
|
@@ -21,9 +21,9 @@ interface Props {
|
|
|
21
21
|
/** Children snippet */
|
|
22
22
|
children?: Snippet;
|
|
23
23
|
/** Expose the openItems store for testing */
|
|
24
|
-
openItems?:
|
|
24
|
+
openItems?: import('svelte/store').Writable<Set<string>> | null;
|
|
25
25
|
/** Expose the toggle function for testing */
|
|
26
|
-
toggleFn?:
|
|
26
|
+
toggleFn?: ((id: string) => void) | null;
|
|
27
27
|
/** Data attributes for testing */
|
|
28
28
|
'data-testid'?: string;
|
|
29
29
|
'data-custom'?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccordionItemWrapper.test.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/AccordionItemWrapper.test.svelte.ts"],"names":[],"mappings":"AAGA;;;KAGK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAMpC,UAAU,KAAK;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"AccordionItemWrapper.test.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Accordion/AccordionItemWrapper.test.svelte.ts"],"names":[],"mappings":"AAGA;;;KAGK;AACL,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAMpC,UAAU,KAAK;IACb,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,yBAAyB;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mCAAmC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,OAAO,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAChE,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACzC,kCAAkC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAsEH,QAAA,MAAM,oBAAoB,iEAAwC,CAAC;AACnE,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACpE,eAAe,oBAAoB,CAAC"}
|
|
@@ -1,173 +1,173 @@
|
|
|
1
|
-
import { render, screen, fireEvent } from "@testing-library/svelte";
|
|
2
|
-
import userEvent from "@testing-library/user-event";
|
|
3
|
-
import { expect, describe, test, vi } from "vitest";
|
|
4
|
-
import Alert from "./Alert.svelte";
|
|
5
|
-
|
|
6
|
-
function setupTest(args = {}) {
|
|
7
|
-
const user = userEvent.setup();
|
|
8
|
-
const { component } = render(Alert, {
|
|
9
|
-
props: { ...args },
|
|
10
|
-
});
|
|
11
|
-
return { user, component };
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
describe("Alert Component Tests", () => {
|
|
15
|
-
test("Renders alert with title", () => {
|
|
16
|
-
setupTest({
|
|
17
|
-
title: "Alert Title",
|
|
18
|
-
});
|
|
19
|
-
expect(screen.getByText("Alert Title")).toBeInTheDocument();
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
test("Renders alert with message", () => {
|
|
23
|
-
setupTest({
|
|
24
|
-
message: "This is an alert message",
|
|
25
|
-
});
|
|
26
|
-
expect(screen.getByText("This is an alert message")).toBeInTheDocument();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test("Renders alert with both title and message", () => {
|
|
30
|
-
setupTest({
|
|
31
|
-
title: "Warning",
|
|
32
|
-
message: "Something needs your attention",
|
|
33
|
-
});
|
|
34
|
-
expect(screen.getByText("Warning")).toBeInTheDocument();
|
|
35
|
-
expect(screen.getByText("Something needs your attention")).toBeInTheDocument();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
test("Maps info type to blue color", () => {
|
|
39
|
-
const { component } = setupTest({
|
|
40
|
-
title: "Info Alert",
|
|
41
|
-
type: "info",
|
|
42
|
-
});
|
|
43
|
-
// The Alert component should have the correct Flowbite color prop
|
|
44
|
-
const alertElement = screen.getByRole("alert");
|
|
45
|
-
expect(alertElement).toBeInTheDocument();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test("Maps success type to green color", () => {
|
|
49
|
-
setupTest({
|
|
50
|
-
title: "Success Alert",
|
|
51
|
-
type: "success",
|
|
52
|
-
});
|
|
53
|
-
const alertElement = screen.getByRole("alert");
|
|
54
|
-
expect(alertElement).toBeInTheDocument();
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test("Maps warning type to yellow color", () => {
|
|
58
|
-
setupTest({
|
|
59
|
-
title: "Warning Alert",
|
|
60
|
-
type: "warning",
|
|
61
|
-
});
|
|
62
|
-
const alertElement = screen.getByRole("alert");
|
|
63
|
-
expect(alertElement).toBeInTheDocument();
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
test("Maps danger type to red color", () => {
|
|
67
|
-
setupTest({
|
|
68
|
-
title: "Danger Alert",
|
|
69
|
-
type: "danger",
|
|
70
|
-
});
|
|
71
|
-
const alertElement = screen.getByRole("alert");
|
|
72
|
-
expect(alertElement).toBeInTheDocument();
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test("Defaults to info type when type is invalid", () => {
|
|
76
|
-
setupTest({
|
|
77
|
-
title: "Default Alert",
|
|
78
|
-
type: "invalid-type",
|
|
79
|
-
});
|
|
80
|
-
const alertElement = screen.getByRole("alert");
|
|
81
|
-
expect(alertElement).toBeInTheDocument();
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test("Shows dismiss button when onClose is provided", () => {
|
|
85
|
-
const onCloseMock = vi.fn();
|
|
86
|
-
setupTest({
|
|
87
|
-
title: "Dismissable Alert",
|
|
88
|
-
onClose: onCloseMock,
|
|
89
|
-
});
|
|
90
|
-
// Flowbite Alert shows dismiss button when dismissable
|
|
91
|
-
const dismissButton = screen.queryByRole("button");
|
|
92
|
-
expect(dismissButton).toBeInTheDocument();
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test("Does not show dismiss button when onClose is not provided", () => {
|
|
96
|
-
setupTest({
|
|
97
|
-
title: "Non-dismissable Alert",
|
|
98
|
-
});
|
|
99
|
-
// Without onClose, there should be no dismiss button
|
|
100
|
-
const dismissButton = screen.queryByRole("button");
|
|
101
|
-
expect(dismissButton).not.toBeInTheDocument();
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
test("Calls onClose when dismiss button is clicked", async () => {
|
|
105
|
-
const onCloseMock = vi.fn();
|
|
106
|
-
const { user } = setupTest({
|
|
107
|
-
title: "Dismissable Alert",
|
|
108
|
-
onClose: onCloseMock,
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
const dismissButton = screen.getByRole("button");
|
|
112
|
-
await user.click(dismissButton);
|
|
113
|
-
|
|
114
|
-
// Note: Flowbite Alert may handle close differently - check if button exists
|
|
115
|
-
expect(dismissButton).toBeInTheDocument();
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
test("Renders with close button when onClose provided", async () => {
|
|
119
|
-
const onCloseMock = vi.fn();
|
|
120
|
-
setupTest({
|
|
121
|
-
title: "Dismissable Alert",
|
|
122
|
-
onClose: onCloseMock,
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const dismissButton = screen.getByRole("button");
|
|
126
|
-
expect(dismissButton).toBeInTheDocument();
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
test("Has proper alert styling classes", () => {
|
|
130
|
-
setupTest({
|
|
131
|
-
title: "Styled Alert",
|
|
132
|
-
});
|
|
133
|
-
const alertElement = screen.getByRole("alert");
|
|
134
|
-
expect(alertElement).toHaveClass("flex");
|
|
135
|
-
expect(alertElement).toHaveClass("items-center");
|
|
136
|
-
expect(alertElement).toHaveClass("p-4");
|
|
137
|
-
expect(alertElement).toHaveClass("rounded-lg");
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
test("Renders without title when only message is provided", () => {
|
|
141
|
-
setupTest({
|
|
142
|
-
message: "Message only alert",
|
|
143
|
-
});
|
|
144
|
-
expect(screen.getByText("Message only alert")).toBeInTheDocument();
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
test("Renders empty alert when no props provided", () => {
|
|
148
|
-
setupTest({});
|
|
149
|
-
const alertElement = screen.getByRole("alert");
|
|
150
|
-
expect(alertElement).toBeInTheDocument();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
describe("Alert Type Color Mapping", () => {
|
|
155
|
-
const typeColorMap = [
|
|
156
|
-
{ type: "info", expectedColor: "blue" },
|
|
157
|
-
{ type: "success", expectedColor: "green" },
|
|
158
|
-
{ type: "warning", expectedColor: "yellow" },
|
|
159
|
-
{ type: "danger", expectedColor: "red" },
|
|
160
|
-
];
|
|
161
|
-
|
|
162
|
-
typeColorMap.forEach(({ type, expectedColor }) => {
|
|
163
|
-
test(`Type "${type}" maps to "${expectedColor}" color`, () => {
|
|
164
|
-
setupTest({
|
|
165
|
-
title: `${type} Alert`,
|
|
166
|
-
type,
|
|
167
|
-
});
|
|
168
|
-
// Alert renders successfully with correct type
|
|
169
|
-
const alertElement = screen.getByRole("alert");
|
|
170
|
-
expect(alertElement).toBeInTheDocument();
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
});
|
|
1
|
+
import { render, screen, fireEvent } from "@testing-library/svelte";
|
|
2
|
+
import userEvent from "@testing-library/user-event";
|
|
3
|
+
import { expect, describe, test, vi } from "vitest";
|
|
4
|
+
import Alert from "./Alert.svelte";
|
|
5
|
+
|
|
6
|
+
function setupTest(args = {}) {
|
|
7
|
+
const user = userEvent.setup();
|
|
8
|
+
const { component } = render(Alert, {
|
|
9
|
+
props: { ...args },
|
|
10
|
+
});
|
|
11
|
+
return { user, component };
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
describe("Alert Component Tests", () => {
|
|
15
|
+
test("Renders alert with title", () => {
|
|
16
|
+
setupTest({
|
|
17
|
+
title: "Alert Title",
|
|
18
|
+
});
|
|
19
|
+
expect(screen.getByText("Alert Title")).toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test("Renders alert with message", () => {
|
|
23
|
+
setupTest({
|
|
24
|
+
message: "This is an alert message",
|
|
25
|
+
});
|
|
26
|
+
expect(screen.getByText("This is an alert message")).toBeInTheDocument();
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
test("Renders alert with both title and message", () => {
|
|
30
|
+
setupTest({
|
|
31
|
+
title: "Warning",
|
|
32
|
+
message: "Something needs your attention",
|
|
33
|
+
});
|
|
34
|
+
expect(screen.getByText("Warning")).toBeInTheDocument();
|
|
35
|
+
expect(screen.getByText("Something needs your attention")).toBeInTheDocument();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test("Maps info type to blue color", () => {
|
|
39
|
+
const { component } = setupTest({
|
|
40
|
+
title: "Info Alert",
|
|
41
|
+
type: "info",
|
|
42
|
+
});
|
|
43
|
+
// The Alert component should have the correct Flowbite color prop
|
|
44
|
+
const alertElement = screen.getByRole("alert");
|
|
45
|
+
expect(alertElement).toBeInTheDocument();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
test("Maps success type to green color", () => {
|
|
49
|
+
setupTest({
|
|
50
|
+
title: "Success Alert",
|
|
51
|
+
type: "success",
|
|
52
|
+
});
|
|
53
|
+
const alertElement = screen.getByRole("alert");
|
|
54
|
+
expect(alertElement).toBeInTheDocument();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("Maps warning type to yellow color", () => {
|
|
58
|
+
setupTest({
|
|
59
|
+
title: "Warning Alert",
|
|
60
|
+
type: "warning",
|
|
61
|
+
});
|
|
62
|
+
const alertElement = screen.getByRole("alert");
|
|
63
|
+
expect(alertElement).toBeInTheDocument();
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
test("Maps danger type to red color", () => {
|
|
67
|
+
setupTest({
|
|
68
|
+
title: "Danger Alert",
|
|
69
|
+
type: "danger",
|
|
70
|
+
});
|
|
71
|
+
const alertElement = screen.getByRole("alert");
|
|
72
|
+
expect(alertElement).toBeInTheDocument();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test("Defaults to info type when type is invalid", () => {
|
|
76
|
+
setupTest({
|
|
77
|
+
title: "Default Alert",
|
|
78
|
+
type: "invalid-type",
|
|
79
|
+
});
|
|
80
|
+
const alertElement = screen.getByRole("alert");
|
|
81
|
+
expect(alertElement).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test("Shows dismiss button when onClose is provided", () => {
|
|
85
|
+
const onCloseMock = vi.fn();
|
|
86
|
+
setupTest({
|
|
87
|
+
title: "Dismissable Alert",
|
|
88
|
+
onClose: onCloseMock,
|
|
89
|
+
});
|
|
90
|
+
// Flowbite Alert shows dismiss button when dismissable
|
|
91
|
+
const dismissButton = screen.queryByRole("button");
|
|
92
|
+
expect(dismissButton).toBeInTheDocument();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
test("Does not show dismiss button when onClose is not provided", () => {
|
|
96
|
+
setupTest({
|
|
97
|
+
title: "Non-dismissable Alert",
|
|
98
|
+
});
|
|
99
|
+
// Without onClose, there should be no dismiss button
|
|
100
|
+
const dismissButton = screen.queryByRole("button");
|
|
101
|
+
expect(dismissButton).not.toBeInTheDocument();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test("Calls onClose when dismiss button is clicked", async () => {
|
|
105
|
+
const onCloseMock = vi.fn();
|
|
106
|
+
const { user } = setupTest({
|
|
107
|
+
title: "Dismissable Alert",
|
|
108
|
+
onClose: onCloseMock,
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
const dismissButton = screen.getByRole("button");
|
|
112
|
+
await user.click(dismissButton);
|
|
113
|
+
|
|
114
|
+
// Note: Flowbite Alert may handle close differently - check if button exists
|
|
115
|
+
expect(dismissButton).toBeInTheDocument();
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test("Renders with close button when onClose provided", async () => {
|
|
119
|
+
const onCloseMock = vi.fn();
|
|
120
|
+
setupTest({
|
|
121
|
+
title: "Dismissable Alert",
|
|
122
|
+
onClose: onCloseMock,
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const dismissButton = screen.getByRole("button");
|
|
126
|
+
expect(dismissButton).toBeInTheDocument();
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
test("Has proper alert styling classes", () => {
|
|
130
|
+
setupTest({
|
|
131
|
+
title: "Styled Alert",
|
|
132
|
+
});
|
|
133
|
+
const alertElement = screen.getByRole("alert");
|
|
134
|
+
expect(alertElement).toHaveClass("flex");
|
|
135
|
+
expect(alertElement).toHaveClass("items-center");
|
|
136
|
+
expect(alertElement).toHaveClass("p-4");
|
|
137
|
+
expect(alertElement).toHaveClass("rounded-lg");
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test("Renders without title when only message is provided", () => {
|
|
141
|
+
setupTest({
|
|
142
|
+
message: "Message only alert",
|
|
143
|
+
});
|
|
144
|
+
expect(screen.getByText("Message only alert")).toBeInTheDocument();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("Renders empty alert when no props provided", () => {
|
|
148
|
+
setupTest({});
|
|
149
|
+
const alertElement = screen.getByRole("alert");
|
|
150
|
+
expect(alertElement).toBeInTheDocument();
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe("Alert Type Color Mapping", () => {
|
|
155
|
+
const typeColorMap = [
|
|
156
|
+
{ type: "info", expectedColor: "blue" },
|
|
157
|
+
{ type: "success", expectedColor: "green" },
|
|
158
|
+
{ type: "warning", expectedColor: "yellow" },
|
|
159
|
+
{ type: "danger", expectedColor: "red" },
|
|
160
|
+
];
|
|
161
|
+
|
|
162
|
+
typeColorMap.forEach(({ type, expectedColor }) => {
|
|
163
|
+
test(`Type "${type}" maps to "${expectedColor}" color`, () => {
|
|
164
|
+
setupTest({
|
|
165
|
+
title: `${type} Alert`,
|
|
166
|
+
type,
|
|
167
|
+
});
|
|
168
|
+
// Alert renders successfully with correct type
|
|
169
|
+
const alertElement = screen.getByRole("alert");
|
|
170
|
+
expect(alertElement).toBeInTheDocument();
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
});
|