@getmicdrop/svelte-components 5.5.4 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/calendar/AboutShow/AboutShow.spec.d.ts +2 -0
- package/dist/calendar/AboutShow/AboutShow.spec.d.ts.map +1 -0
- package/dist/calendar/AboutShow/AboutShow.spec.js +791 -0
- package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts +2 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts.map +1 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +1191 -0
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
- package/dist/calendar/FAQs/FAQs.spec.d.ts +2 -0
- package/dist/calendar/FAQs/FAQs.spec.d.ts.map +1 -0
- package/dist/calendar/FAQs/FAQs.spec.js +238 -0
- package/dist/calendar/FAQs/FAQs.svelte +75 -75
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts +2 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts.map +1 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.js +420 -0
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
- package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts +2 -0
- package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts.map +1 -0
- package/dist/calendar/OrderSummary/OrderSummary.spec.js +808 -0
- package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
- package/dist/calendar/PublicCard/PublicCard.spec.d.ts +2 -0
- package/dist/calendar/PublicCard/PublicCard.spec.d.ts.map +1 -0
- package/dist/calendar/PublicCard/PublicCard.spec.js +301 -0
- package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
- package/dist/calendar/ShowCard/ShowCard.spec.d.ts +2 -0
- package/dist/calendar/ShowCard/ShowCard.spec.d.ts.map +1 -0
- package/dist/calendar/ShowCard/ShowCard.spec.js +714 -0
- package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts +2 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts.map +1 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +241 -0
- 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.spec.d.ts +2 -0
- package/dist/components/Layout/Section.spec.d.ts.map +1 -0
- package/dist/components/Layout/Section.spec.js +149 -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.spec.d.ts +2 -0
- package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
- package/dist/components/Layout/Sidebar.spec.js +186 -0
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.spec.js +2 -2
- 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__/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__/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/formOptions.spec.js +9 -5
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/__tests__/timezone.test.js +123 -1
- package/dist/forms/createFieldTracker.spec.d.ts +2 -0
- package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
- package/dist/forms/createFieldTracker.spec.js +343 -0
- package/dist/forms/createFormStore.spec.d.ts +2 -0
- package/dist/forms/createFormStore.spec.d.ts.map +1 -0
- package/dist/forms/createFormStore.spec.js +689 -0
- package/dist/index.d.ts +4 -112
- package/dist/index.js +40 -226
- package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
- package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataGrid.spec.js +159 -0
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.spec.d.ts +2 -0
- package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataList.spec.js +158 -0
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.spec.d.ts +2 -0
- package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
- package/dist/patterns/data/DataTable.spec.js +196 -0
- package/dist/patterns/data/DataTable.svelte +36 -36
- package/dist/patterns/forms/FormActions.spec.js +95 -88
- package/dist/patterns/forms/FormActions.stories.svelte +97 -97
- package/dist/patterns/forms/FormActions.svelte +46 -46
- package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
- package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
- package/dist/patterns/forms/FormGrid.spec.js +125 -0
- package/dist/patterns/forms/FormGrid.svelte +33 -33
- package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
- package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
- package/dist/patterns/forms/FormSection.spec.js +153 -0
- 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.spec.d.ts +2 -0
- package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
- package/dist/patterns/layout/Sidebar.spec.js +159 -0
- 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 +64 -64
- package/dist/patterns/navigation/Header.spec.js +33 -24
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +193 -193
- package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
- package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
- package/dist/patterns/page/PageHeader.spec.js +167 -0
- package/dist/patterns/page/PageHeader.svelte +18 -18
- package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
- package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
- package/dist/patterns/page/PageLayout.spec.js +145 -0
- package/dist/patterns/page/PageLayout.svelte +40 -40
- package/dist/patterns/page/PageLoader.spec.js +57 -54
- package/dist/patterns/page/PageLoader.stories.svelte +137 -137
- package/dist/patterns/page/PageLoader.svelte +24 -24
- package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
- package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
- package/dist/patterns/page/SectionHeader.spec.js +197 -0
- package/dist/patterns/page/SectionHeader.svelte +29 -29
- package/dist/presets/badges.js +112 -112
- package/dist/presets/badges.spec.d.ts +2 -0
- package/dist/presets/badges.spec.d.ts.map +1 -0
- package/dist/presets/badges.spec.js +172 -0
- package/dist/presets/buttons.js +76 -76
- package/dist/presets/buttons.spec.d.ts +2 -0
- package/dist/presets/buttons.spec.d.ts.map +1 -0
- package/dist/presets/buttons.spec.js +135 -0
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
- package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
- package/dist/primitives/Accordion/Accordion.spec.js +83 -0
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +42 -42
- package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
- package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
- package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
- package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
- package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Alert/Alert.spec.js +173 -170
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +27 -27
- package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
- package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
- package/dist/primitives/Avatar/Avatar.spec.js +211 -0
- 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 -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 +136 -127
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
- package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -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 +223 -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 +146 -48
- package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
- package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
- package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
- package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
- 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.spec.d.ts +2 -0
- package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
- package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
- package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
- package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
- package/dist/primitives/DarkModeToggle.spec.js +390 -357
- package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
- package/dist/primitives/DarkModeToggle.svelte +136 -136
- package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
- package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
- package/dist/primitives/Drawer/Drawer.spec.js +212 -0
- package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
- package/dist/primitives/Drawer/Drawer.svelte +120 -120
- package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
- package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
- package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
- package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
- package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
- package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
- 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/Icons/iconTestUtils.spec.d.ts +2 -0
- package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
- package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
- package/dist/primitives/Input/Input.spec.js +573 -573
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +418 -431
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +212 -218
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +128 -128
- package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
- package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
- package/dist/primitives/Input/Textarea.spec.js +255 -0
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +35 -35
- package/dist/primitives/Label/Label.spec.d.ts +2 -0
- package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
- package/dist/primitives/Label/Label.spec.js +157 -0
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/Modal/Modal.spec.js +99 -95
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +158 -158
- package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
- package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
- package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
- package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
- package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
- package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
- package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
- package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
- package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
- package/dist/primitives/Pagination/Pagination.spec.js +266 -0
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +261 -261
- package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
- package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
- package/dist/primitives/Radio/Radio.spec.js +206 -0
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
- package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
- package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
- package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
- package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
- 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 -75
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +20 -20
- package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
- package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
- package/dist/primitives/Tabs/TabItem.spec.js +130 -0
- package/dist/primitives/Tabs/TabItem.svelte +49 -49
- package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
- package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
- package/dist/primitives/Tabs/Tabs.spec.js +295 -0
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +123 -123
- package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
- package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
- package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
- package/dist/primitives/Toggle.spec.js +143 -127
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +71 -71
- package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
- package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
- package/dist/primitives/Typography/Typography.spec.js +183 -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 +1 -0
- package/dist/primitives/index.js +84 -81
- package/dist/recipes/CropImage/CropImage.spec.js +208 -216
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +238 -238
- package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
- package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
- package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
- package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
- package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
- package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
- package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
- 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 -129
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
- package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
- package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/CheckboxField.spec.js +135 -0
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.spec.d.ts +2 -0
- package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/FormField.spec.js +159 -0
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
- package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
- package/dist/recipes/fields/RadioGroup.spec.js +199 -0
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
- package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/SelectField.spec.js +188 -0
- package/dist/recipes/fields/SelectField.svelte +80 -80
- package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
- package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/TextareaField.spec.js +205 -0
- package/dist/recipes/fields/TextareaField.svelte +97 -97
- package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
- package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
- package/dist/recipes/fields/ToggleField.spec.js +153 -0
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/inputs/MultiSelect.spec.js +258 -257
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +256 -249
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
- package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
- package/dist/recipes/inputs/OTPInput.spec.js +251 -238
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +29 -29
- package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
- package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
- package/dist/recipes/inputs/PasswordInput.svelte +22 -22
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
- package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1246 -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.spec.d.ts +2 -0
- package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/Search.spec.js +177 -0
- package/dist/recipes/inputs/Search.svelte +37 -37
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
- package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
- package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
- package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
- package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
- package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/AlertModal.spec.js +432 -0
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/ConfirmationModal.spec.js +206 -191
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
- package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
- package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/InputModal.spec.js +872 -0
- 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.spec.d.ts +2 -0
- package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
- package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
- package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
- package/dist/recipes/modals/StatusModal.spec.js +599 -0
- 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 -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/ButtonAuditDashboard.spec.d.ts +2 -0
- package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
- package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
- package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
- package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
- package/dist/stories/ButtonAuditReview.spec.js +422 -0
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/ButtonGridView.spec.d.ts +2 -0
- package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
- package/dist/stories/ButtonGridView.spec.js +667 -0
- package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
- package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
- package/dist/stories/ButtonShowcase.spec.js +499 -0
- package/dist/stories/PatternsGallery.spec.d.ts +2 -0
- package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
- package/dist/stories/PatternsGallery.spec.js +514 -0
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +206 -206
- package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
- package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
- package/dist/stories/PrimitivesGallery.spec.js +813 -0
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +725 -725
- package/dist/stories/RecipesGallery.spec.d.ts +2 -0
- package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
- package/dist/stories/RecipesGallery.spec.js +299 -0
- 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/stripe/useStripeTheme.spec.d.ts +2 -0
- package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
- package/dist/stripe/useStripeTheme.spec.js +793 -0
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +405 -404
- package/dist/telemetry.spec.js +1144 -661
- package/dist/tokens/__tests__/colors.test.d.ts +2 -0
- package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/colors.test.js +152 -0
- package/dist/tokens/__tests__/radius.test.d.ts +2 -0
- package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/radius.test.js +118 -0
- package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
- package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/shadows.test.js +105 -0
- package/dist/tokens/__tests__/spacing.test.js +11 -8
- 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/__tests__/typography.test.d.ts +2 -0
- package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/typography.test.js +156 -0
- package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
- package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/z-index.test.js +121 -0
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -0
- package/dist/utils/apiConfig.spec.js +219 -118
- package/dist/utils/formatters.spec.d.ts +2 -0
- package/dist/utils/formatters.spec.d.ts.map +1 -0
- package/dist/utils/formatters.spec.js +82 -0
- package/dist/utils/transitions.js +62 -62
- package/dist/utils/transitions.spec.d.ts +2 -0
- package/dist/utils/transitions.spec.d.ts.map +1 -0
- package/dist/utils/transitions.spec.js +130 -0
- package/dist/utils/utils.js +354 -354
- package/package.json +292 -286
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
import { render, screen, waitFor } from "@testing-library/svelte";
|
|
2
|
+
import userEvent from "@testing-library/user-event";
|
|
3
|
+
import { expect, describe, test, vi, beforeEach, afterEach } from "vitest";
|
|
4
|
+
import AlertModal from "./AlertModal.svelte";
|
|
5
|
+
|
|
6
|
+
function setupTest(args = {}) {
|
|
7
|
+
const user = userEvent.setup();
|
|
8
|
+
const { component } = render(AlertModal, {
|
|
9
|
+
props: {
|
|
10
|
+
show: true,
|
|
11
|
+
title: "Test Alert",
|
|
12
|
+
message: "This is a test message",
|
|
13
|
+
...args,
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
return { user, component };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
describe("AlertModal Component Tests", () => {
|
|
20
|
+
afterEach(() => {
|
|
21
|
+
vi.restoreAllMocks();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
// Note: Modal renders both mobile sheet and desktop centered versions
|
|
25
|
+
// CSS hides one based on viewport, but in tests both are in DOM
|
|
26
|
+
// Use getAllByText/queryAllByText and check length or first element
|
|
27
|
+
|
|
28
|
+
test("Does not render when show is false", () => {
|
|
29
|
+
render(AlertModal, { props: { show: false } });
|
|
30
|
+
expect(screen.queryByText("Test Alert")).not.toBeInTheDocument();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("Renders when show is true", () => {
|
|
34
|
+
setupTest();
|
|
35
|
+
// Modal renders both mobile and desktop versions
|
|
36
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("Displays title", () => {
|
|
40
|
+
setupTest({ title: "Success!" });
|
|
41
|
+
expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
test("Displays message", () => {
|
|
45
|
+
setupTest({ message: "Operation completed successfully" });
|
|
46
|
+
expect(
|
|
47
|
+
screen.getAllByText("Operation completed successfully").length
|
|
48
|
+
).toBeGreaterThan(0);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
test("Hides title when not provided", () => {
|
|
52
|
+
setupTest({ title: "" });
|
|
53
|
+
const headings = screen.queryAllByRole("heading", { level: 2 });
|
|
54
|
+
expect(headings.length).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test("Hides message when not provided", () => {
|
|
58
|
+
setupTest({ message: "" });
|
|
59
|
+
// When message is empty, there should be no paragraph with message content
|
|
60
|
+
const paragraphs = document.querySelectorAll("p");
|
|
61
|
+
expect(paragraphs.length).toBe(0);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
test("Displays custom button text", () => {
|
|
65
|
+
setupTest({ buttonText: "Got it" });
|
|
66
|
+
expect(screen.getAllByText("Got it").length).toBeGreaterThan(0);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
test("Displays default button text", () => {
|
|
70
|
+
setupTest();
|
|
71
|
+
expect(screen.getAllByText("OK").length).toBeGreaterThan(0);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("Calls onconfirm when button is clicked", async () => {
|
|
75
|
+
const onconfirm = vi.fn();
|
|
76
|
+
const { user } = setupTest({ onconfirm, autoClose: 0 });
|
|
77
|
+
|
|
78
|
+
const button = screen.getAllByText("OK")[0];
|
|
79
|
+
await user.click(button);
|
|
80
|
+
|
|
81
|
+
await waitFor(() => {
|
|
82
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
test("Calls onclose when button is clicked", async () => {
|
|
87
|
+
const onclose = vi.fn();
|
|
88
|
+
const { user } = setupTest({ onclose, autoClose: 0 });
|
|
89
|
+
|
|
90
|
+
const button = screen.getAllByText("OK")[0];
|
|
91
|
+
await user.click(button);
|
|
92
|
+
|
|
93
|
+
await waitFor(() => {
|
|
94
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
test("Calls both onconfirm and onclose when button is clicked", async () => {
|
|
99
|
+
const onconfirm = vi.fn();
|
|
100
|
+
const onclose = vi.fn();
|
|
101
|
+
const { user } = setupTest({ onconfirm, onclose, autoClose: 0 });
|
|
102
|
+
|
|
103
|
+
const button = screen.getAllByText("OK")[0];
|
|
104
|
+
await user.click(button);
|
|
105
|
+
|
|
106
|
+
await waitFor(() => {
|
|
107
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
108
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test("Closes modal when button is clicked", async () => {
|
|
113
|
+
const onclose = vi.fn();
|
|
114
|
+
const { user } = setupTest({ autoClose: 0, onclose });
|
|
115
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
116
|
+
|
|
117
|
+
const button = screen.getAllByText("OK")[0];
|
|
118
|
+
await user.click(button);
|
|
119
|
+
|
|
120
|
+
// Verify close was called (actual DOM removal is tested in Modal component)
|
|
121
|
+
await waitFor(() => {
|
|
122
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// Variant tests - Success
|
|
127
|
+
test("Renders success variant with correct icon", () => {
|
|
128
|
+
setupTest({ variant: "success" });
|
|
129
|
+
// CheckOutline icon should be present
|
|
130
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
131
|
+
expect(iconContainer).toBeInTheDocument();
|
|
132
|
+
const icon = iconContainer?.querySelector(".text-green-600");
|
|
133
|
+
expect(icon).toBeInTheDocument();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
test("Success variant has green styling", () => {
|
|
137
|
+
setupTest({ variant: "success" });
|
|
138
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
139
|
+
expect(iconContainer).toHaveClass("bg-green-100");
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
test("Success variant button uses default variant", () => {
|
|
143
|
+
setupTest({ variant: "success" });
|
|
144
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
145
|
+
// Default variant has primary/blue styling
|
|
146
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
// Variant tests - Error
|
|
150
|
+
test("Renders error variant with correct icon", () => {
|
|
151
|
+
setupTest({ variant: "error" });
|
|
152
|
+
// CloseOutline icon should be present
|
|
153
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
154
|
+
expect(iconContainer).toBeInTheDocument();
|
|
155
|
+
const icon = iconContainer?.querySelector(".text-red-600");
|
|
156
|
+
expect(icon).toBeInTheDocument();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
test("Error variant has red styling", () => {
|
|
160
|
+
setupTest({ variant: "error" });
|
|
161
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
162
|
+
expect(iconContainer).toHaveClass("bg-red-100");
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
test("Error variant button uses red variant", () => {
|
|
166
|
+
setupTest({ variant: "error" });
|
|
167
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
168
|
+
// Red variant has red styling
|
|
169
|
+
expect(button).toHaveClass("bg-red-700");
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Variant tests - Warning
|
|
173
|
+
test("Renders warning variant with correct icon", () => {
|
|
174
|
+
setupTest({ variant: "warning" });
|
|
175
|
+
// ExclamationTriangleOutline icon should be present
|
|
176
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
177
|
+
expect(iconContainer).toBeInTheDocument();
|
|
178
|
+
const icon = iconContainer?.querySelector(".text-amber-600");
|
|
179
|
+
expect(icon).toBeInTheDocument();
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
test("Warning variant has amber styling", () => {
|
|
183
|
+
setupTest({ variant: "warning" });
|
|
184
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
185
|
+
expect(iconContainer).toHaveClass("bg-amber-100");
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
test("Warning variant button uses default variant", () => {
|
|
189
|
+
setupTest({ variant: "warning" });
|
|
190
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
191
|
+
// Default variant has primary/blue styling
|
|
192
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
// Variant tests - Info
|
|
196
|
+
test("Renders info variant with correct icon", () => {
|
|
197
|
+
setupTest({ variant: "info" });
|
|
198
|
+
// InfoCircleOutline icon should be present
|
|
199
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
200
|
+
expect(iconContainer).toBeInTheDocument();
|
|
201
|
+
const icon = iconContainer?.querySelector(".text-blue-600");
|
|
202
|
+
expect(icon).toBeInTheDocument();
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test("Info variant has blue styling", () => {
|
|
206
|
+
setupTest({ variant: "info" });
|
|
207
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
208
|
+
expect(iconContainer).toHaveClass("bg-blue-100");
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test("Info variant button uses default variant", () => {
|
|
212
|
+
setupTest({ variant: "info" });
|
|
213
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
214
|
+
// Default variant has primary/blue styling
|
|
215
|
+
expect(button).toHaveClass("bg-blue-700");
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test("Defaults to info variant when invalid variant provided", () => {
|
|
219
|
+
setupTest({ variant: "invalid" });
|
|
220
|
+
// Should fall back to info variant
|
|
221
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
222
|
+
expect(iconContainer).toBeInTheDocument();
|
|
223
|
+
});
|
|
224
|
+
|
|
225
|
+
// Auto-close tests
|
|
226
|
+
test("Does not auto-close when autoClose is 0", async () => {
|
|
227
|
+
vi.useFakeTimers();
|
|
228
|
+
try {
|
|
229
|
+
setupTest({ autoClose: 0 });
|
|
230
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
231
|
+
|
|
232
|
+
// Advance time significantly
|
|
233
|
+
await vi.advanceTimersByTimeAsync(5000);
|
|
234
|
+
|
|
235
|
+
// Modal should still be visible
|
|
236
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
237
|
+
} finally {
|
|
238
|
+
vi.useRealTimers();
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
test("Auto-closes after specified delay", async () => {
|
|
243
|
+
vi.useFakeTimers();
|
|
244
|
+
try {
|
|
245
|
+
const onclose = vi.fn();
|
|
246
|
+
setupTest({ autoClose: 3000, onclose });
|
|
247
|
+
|
|
248
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
249
|
+
|
|
250
|
+
// Advance time by the auto-close delay
|
|
251
|
+
await vi.advanceTimersByTimeAsync(3000);
|
|
252
|
+
|
|
253
|
+
// Wait for onclose to be called
|
|
254
|
+
await waitFor(() => {
|
|
255
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
256
|
+
});
|
|
257
|
+
} finally {
|
|
258
|
+
vi.useRealTimers();
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test("Auto-close timer is cleared when modal closes manually", async () => {
|
|
263
|
+
// This test verifies that manually closing the modal clears the auto-close timer
|
|
264
|
+
// We test this by ensuring the close callback is only called once, not twice
|
|
265
|
+
const onclose = vi.fn();
|
|
266
|
+
const { user } = setupTest({ autoClose: 10000, onclose });
|
|
267
|
+
|
|
268
|
+
// Click button immediately to close before auto-close triggers
|
|
269
|
+
const button = screen.getAllByText("OK")[0];
|
|
270
|
+
await user.click(button);
|
|
271
|
+
|
|
272
|
+
await waitFor(() => {
|
|
273
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// If timer wasn't cleared, it would call onclose again after 10 seconds
|
|
277
|
+
// Since we can't easily test this with real timers in a fast test,
|
|
278
|
+
// we verify the timer cleanup exists in the component (lines 84-85)
|
|
279
|
+
// and that onclose was only called once
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// Size prop test
|
|
283
|
+
test("Passes size prop to Modal", () => {
|
|
284
|
+
setupTest({ size: "medium" });
|
|
285
|
+
// Modal component receives the size prop
|
|
286
|
+
// We can't easily test this without mocking Modal, but we can verify it doesn't error
|
|
287
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
test("Uses default small size", () => {
|
|
291
|
+
setupTest();
|
|
292
|
+
// Default size is small
|
|
293
|
+
expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
// Layout and styling tests
|
|
297
|
+
test("Icon container is centered", () => {
|
|
298
|
+
setupTest();
|
|
299
|
+
const iconWrapper = document.querySelector(".flex.justify-center.items-center");
|
|
300
|
+
expect(iconWrapper).toBeInTheDocument();
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
test("Icon container has proper dimensions", () => {
|
|
304
|
+
setupTest();
|
|
305
|
+
const iconContainer = document.querySelector(".w-14.h-14.rounded-full");
|
|
306
|
+
expect(iconContainer).toBeInTheDocument();
|
|
307
|
+
expect(iconContainer).toHaveClass("w-14");
|
|
308
|
+
expect(iconContainer).toHaveClass("h-14");
|
|
309
|
+
expect(iconContainer).toHaveClass("rounded-full");
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
test("Title has proper styling", () => {
|
|
313
|
+
setupTest({ title: "Alert Title" });
|
|
314
|
+
const title = screen.getAllByText("Alert Title")[0];
|
|
315
|
+
expect(title.tagName).toBe("H2");
|
|
316
|
+
expect(title).toHaveClass("mt-4");
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
test("Message has proper styling", () => {
|
|
320
|
+
setupTest({ message: "Alert message" });
|
|
321
|
+
const message = screen.getAllByText("Alert message")[0];
|
|
322
|
+
expect(message.tagName).toBe("P");
|
|
323
|
+
expect(message).toHaveClass("leading-relaxed");
|
|
324
|
+
});
|
|
325
|
+
|
|
326
|
+
test("Button has full width", () => {
|
|
327
|
+
setupTest();
|
|
328
|
+
const button = screen.getAllByText("OK")[0].closest("button");
|
|
329
|
+
// Button should be in a container with w-full
|
|
330
|
+
const buttonContainer = button?.parentElement;
|
|
331
|
+
expect(buttonContainer).toHaveClass("w-full");
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
test("Content is centered", () => {
|
|
335
|
+
setupTest();
|
|
336
|
+
const header = document.querySelector(".text-center");
|
|
337
|
+
expect(header).toBeInTheDocument();
|
|
338
|
+
});
|
|
339
|
+
|
|
340
|
+
// Dark mode styling tests
|
|
341
|
+
test("Success variant has dark mode classes", () => {
|
|
342
|
+
setupTest({ variant: "success" });
|
|
343
|
+
const iconContainer = document.querySelector(".bg-green-100");
|
|
344
|
+
expect(iconContainer).toHaveClass("dark:bg-green-900/30");
|
|
345
|
+
});
|
|
346
|
+
|
|
347
|
+
test("Error variant has dark mode classes", () => {
|
|
348
|
+
setupTest({ variant: "error" });
|
|
349
|
+
const iconContainer = document.querySelector(".bg-red-100");
|
|
350
|
+
expect(iconContainer).toHaveClass("dark:bg-red-900/30");
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
test("Warning variant has dark mode classes", () => {
|
|
354
|
+
setupTest({ variant: "warning" });
|
|
355
|
+
const iconContainer = document.querySelector(".bg-amber-100");
|
|
356
|
+
expect(iconContainer).toHaveClass("dark:bg-amber-900/30");
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
test("Info variant has dark mode classes", () => {
|
|
360
|
+
setupTest({ variant: "info" });
|
|
361
|
+
const iconContainer = document.querySelector(".bg-blue-100");
|
|
362
|
+
expect(iconContainer).toHaveClass("dark:bg-blue-900/30");
|
|
363
|
+
});
|
|
364
|
+
|
|
365
|
+
// Integration tests
|
|
366
|
+
test("Full success flow", async () => {
|
|
367
|
+
const onconfirm = vi.fn();
|
|
368
|
+
const onclose = vi.fn();
|
|
369
|
+
const { user } = setupTest({
|
|
370
|
+
variant: "success",
|
|
371
|
+
title: "Success!",
|
|
372
|
+
message: "Your changes have been saved.",
|
|
373
|
+
buttonText: "Great",
|
|
374
|
+
onconfirm,
|
|
375
|
+
onclose,
|
|
376
|
+
autoClose: 0,
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
// Verify content
|
|
380
|
+
expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
|
|
381
|
+
expect(
|
|
382
|
+
screen.getAllByText("Your changes have been saved.").length
|
|
383
|
+
).toBeGreaterThan(0);
|
|
384
|
+
expect(screen.getAllByText("Great").length).toBeGreaterThan(0);
|
|
385
|
+
|
|
386
|
+
// Verify success styling
|
|
387
|
+
expect(document.querySelector(".bg-green-100")).toBeInTheDocument();
|
|
388
|
+
|
|
389
|
+
// Click button
|
|
390
|
+
const button = screen.getAllByText("Great")[0];
|
|
391
|
+
await user.click(button);
|
|
392
|
+
|
|
393
|
+
// Verify callbacks were called
|
|
394
|
+
await waitFor(() => {
|
|
395
|
+
expect(onconfirm).toHaveBeenCalledOnce();
|
|
396
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
397
|
+
});
|
|
398
|
+
});
|
|
399
|
+
|
|
400
|
+
test("Full error flow with auto-close", async () => {
|
|
401
|
+
vi.useFakeTimers();
|
|
402
|
+
try {
|
|
403
|
+
const onclose = vi.fn();
|
|
404
|
+
setupTest({
|
|
405
|
+
variant: "error",
|
|
406
|
+
title: "Error",
|
|
407
|
+
message: "Something went wrong.",
|
|
408
|
+
autoClose: 2000,
|
|
409
|
+
onclose,
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
// Verify content
|
|
413
|
+
expect(screen.getAllByText("Error").length).toBeGreaterThan(0);
|
|
414
|
+
expect(
|
|
415
|
+
screen.getAllByText("Something went wrong.").length
|
|
416
|
+
).toBeGreaterThan(0);
|
|
417
|
+
|
|
418
|
+
// Verify error styling
|
|
419
|
+
expect(document.querySelector(".bg-red-100")).toBeInTheDocument();
|
|
420
|
+
|
|
421
|
+
// Advance time to trigger auto-close
|
|
422
|
+
await vi.advanceTimersByTimeAsync(2000);
|
|
423
|
+
|
|
424
|
+
// Verify onclose was called
|
|
425
|
+
await vi.waitFor(() => {
|
|
426
|
+
expect(onclose).toHaveBeenCalledOnce();
|
|
427
|
+
});
|
|
428
|
+
} finally {
|
|
429
|
+
vi.useRealTimers();
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
});
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
/**
|
|
3
|
-
* AlertModal - Simple alert with single action and optional auto-close
|
|
4
|
-
*
|
|
5
|
-
* A lighter alternative to StatusModal for simple notifications.
|
|
6
|
-
* Supports auto-close after a delay.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* <AlertModal
|
|
10
|
-
* bind:show={showAlert}
|
|
11
|
-
* variant="success"
|
|
12
|
-
* title="Changes saved"
|
|
13
|
-
* message="Your changes have been saved successfully."
|
|
14
|
-
* autoClose={3000}
|
|
15
|
-
* />
|
|
16
|
-
*/
|
|
17
|
-
import Modal from '../../primitives/Modal/Modal.svelte';
|
|
18
|
-
import Button from '../../primitives/Button/Button.svelte';
|
|
19
|
-
import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from '../../primitives/Icons';
|
|
20
|
-
import { typography } from '../../tokens/typography';
|
|
21
|
-
|
|
22
|
-
let {
|
|
23
|
-
/** Whether the modal is visible */
|
|
24
|
-
show = $bindable(false),
|
|
25
|
-
/** Alert variant */
|
|
26
|
-
variant = 'info',
|
|
27
|
-
/** Alert title */
|
|
28
|
-
title = '',
|
|
29
|
-
/** Alert message */
|
|
30
|
-
message = '',
|
|
31
|
-
/** Button text */
|
|
32
|
-
buttonText = 'OK',
|
|
33
|
-
/** Auto-close delay in milliseconds (0 to disable) */
|
|
34
|
-
autoClose = 0,
|
|
35
|
-
/** Modal size */
|
|
36
|
-
size = 'small',
|
|
37
|
-
/** Callbacks */
|
|
38
|
-
onclose,
|
|
39
|
-
onconfirm,
|
|
40
|
-
} = $props();
|
|
41
|
-
|
|
42
|
-
// Variant styles
|
|
43
|
-
const variantStyles = {
|
|
44
|
-
success: {
|
|
45
|
-
bg: 'bg-green-100 dark:bg-green-900/30',
|
|
46
|
-
icon: 'text-green-600 dark:text-green-400',
|
|
47
|
-
button: 'default'
|
|
48
|
-
},
|
|
49
|
-
error: {
|
|
50
|
-
bg: 'bg-red-100 dark:bg-red-900/30',
|
|
51
|
-
icon: 'text-red-600 dark:text-red-400',
|
|
52
|
-
button: 'red'
|
|
53
|
-
},
|
|
54
|
-
warning: {
|
|
55
|
-
bg: 'bg-amber-100 dark:bg-amber-900/30',
|
|
56
|
-
icon: 'text-amber-600 dark:text-amber-400',
|
|
57
|
-
button: 'default'
|
|
58
|
-
},
|
|
59
|
-
info: {
|
|
60
|
-
bg: 'bg-blue-100 dark:bg-blue-900/30',
|
|
61
|
-
icon: 'text-blue-600 dark:text-blue-400',
|
|
62
|
-
button: 'default'
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
let styles = $derived(variantStyles[variant] || variantStyles.info);
|
|
67
|
-
|
|
68
|
-
function closeModal() {
|
|
69
|
-
show = false;
|
|
70
|
-
onclose?.();
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function handleConfirm() {
|
|
74
|
-
onconfirm?.();
|
|
75
|
-
closeModal();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Start auto-close timer when modal opens
|
|
79
|
-
$effect(() => {
|
|
80
|
-
if (show && autoClose > 0) {
|
|
81
|
-
const timer = setTimeout(() => {
|
|
82
|
-
closeModal();
|
|
83
|
-
}, autoClose);
|
|
84
|
-
return () => clearTimeout(timer);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
</script>
|
|
88
|
-
|
|
89
|
-
<Modal bind:show {size}>
|
|
90
|
-
{#snippet header()}
|
|
91
|
-
<div class="text-center">
|
|
92
|
-
<div class="flex justify-center items-center">
|
|
93
|
-
<div class="w-14 h-14 rounded-full {styles.bg} flex items-center justify-center">
|
|
94
|
-
{#if variant === 'success'}
|
|
95
|
-
<CheckOutline class="w-7 h-7 {styles.icon}" />
|
|
96
|
-
{:else if variant === 'error'}
|
|
97
|
-
<CloseOutline class="w-7 h-7 {styles.icon}" />
|
|
98
|
-
{:else if variant === 'warning'}
|
|
99
|
-
<ExclamationTriangleOutline class="w-7 h-7 {styles.icon}" />
|
|
100
|
-
{:else}
|
|
101
|
-
<InfoCircleOutline class="w-7 h-7 {styles.icon}" />
|
|
102
|
-
{/if}
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
105
|
-
{#if title}
|
|
106
|
-
<h2 class={`${typography.h2} mt-4`}>{title}</h2>
|
|
107
|
-
{/if}
|
|
108
|
-
</div>
|
|
109
|
-
{/snippet}
|
|
110
|
-
|
|
111
|
-
{#snippet body()}
|
|
112
|
-
<div class="text-center mt-4">
|
|
113
|
-
{#if message}
|
|
114
|
-
<p class={`${typography.smMuted} leading-relaxed`}>{message}</p>
|
|
115
|
-
{/if}
|
|
116
|
-
</div>
|
|
117
|
-
{/snippet}
|
|
118
|
-
|
|
119
|
-
{#snippet footer()}
|
|
120
|
-
<div class="w-full">
|
|
121
|
-
<Button
|
|
122
|
-
size="full"
|
|
123
|
-
variant={styles.button}
|
|
124
|
-
onclick={handleConfirm}
|
|
125
|
-
>
|
|
126
|
-
{buttonText}
|
|
127
|
-
</Button>
|
|
128
|
-
</div>
|
|
129
|
-
{/snippet}
|
|
130
|
-
</Modal>
|
|
1
|
+
<script>
|
|
2
|
+
/**
|
|
3
|
+
* AlertModal - Simple alert with single action and optional auto-close
|
|
4
|
+
*
|
|
5
|
+
* A lighter alternative to StatusModal for simple notifications.
|
|
6
|
+
* Supports auto-close after a delay.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* <AlertModal
|
|
10
|
+
* bind:show={showAlert}
|
|
11
|
+
* variant="success"
|
|
12
|
+
* title="Changes saved"
|
|
13
|
+
* message="Your changes have been saved successfully."
|
|
14
|
+
* autoClose={3000}
|
|
15
|
+
* />
|
|
16
|
+
*/
|
|
17
|
+
import Modal from '../../primitives/Modal/Modal.svelte';
|
|
18
|
+
import Button from '../../primitives/Button/Button.svelte';
|
|
19
|
+
import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from '../../primitives/Icons';
|
|
20
|
+
import { typography } from '../../tokens/typography';
|
|
21
|
+
|
|
22
|
+
let {
|
|
23
|
+
/** Whether the modal is visible */
|
|
24
|
+
show = $bindable(false),
|
|
25
|
+
/** Alert variant */
|
|
26
|
+
variant = 'info',
|
|
27
|
+
/** Alert title */
|
|
28
|
+
title = '',
|
|
29
|
+
/** Alert message */
|
|
30
|
+
message = '',
|
|
31
|
+
/** Button text */
|
|
32
|
+
buttonText = 'OK',
|
|
33
|
+
/** Auto-close delay in milliseconds (0 to disable) */
|
|
34
|
+
autoClose = 0,
|
|
35
|
+
/** Modal size */
|
|
36
|
+
size = 'small',
|
|
37
|
+
/** Callbacks */
|
|
38
|
+
onclose,
|
|
39
|
+
onconfirm,
|
|
40
|
+
} = $props();
|
|
41
|
+
|
|
42
|
+
// Variant styles
|
|
43
|
+
const variantStyles = {
|
|
44
|
+
success: {
|
|
45
|
+
bg: 'bg-green-100 dark:bg-green-900/30',
|
|
46
|
+
icon: 'text-green-600 dark:text-green-400',
|
|
47
|
+
button: 'default'
|
|
48
|
+
},
|
|
49
|
+
error: {
|
|
50
|
+
bg: 'bg-red-100 dark:bg-red-900/30',
|
|
51
|
+
icon: 'text-red-600 dark:text-red-400',
|
|
52
|
+
button: 'red'
|
|
53
|
+
},
|
|
54
|
+
warning: {
|
|
55
|
+
bg: 'bg-amber-100 dark:bg-amber-900/30',
|
|
56
|
+
icon: 'text-amber-600 dark:text-amber-400',
|
|
57
|
+
button: 'default'
|
|
58
|
+
},
|
|
59
|
+
info: {
|
|
60
|
+
bg: 'bg-blue-100 dark:bg-blue-900/30',
|
|
61
|
+
icon: 'text-blue-600 dark:text-blue-400',
|
|
62
|
+
button: 'default'
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
let styles = $derived(variantStyles[variant] || variantStyles.info);
|
|
67
|
+
|
|
68
|
+
function closeModal() {
|
|
69
|
+
show = false;
|
|
70
|
+
onclose?.();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function handleConfirm() {
|
|
74
|
+
onconfirm?.();
|
|
75
|
+
closeModal();
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Start auto-close timer when modal opens
|
|
79
|
+
$effect(() => {
|
|
80
|
+
if (show && autoClose > 0) {
|
|
81
|
+
const timer = setTimeout(() => {
|
|
82
|
+
closeModal();
|
|
83
|
+
}, autoClose);
|
|
84
|
+
return () => clearTimeout(timer);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
</script>
|
|
88
|
+
|
|
89
|
+
<Modal bind:show {size}>
|
|
90
|
+
{#snippet header()}
|
|
91
|
+
<div class="text-center">
|
|
92
|
+
<div class="flex justify-center items-center">
|
|
93
|
+
<div class="w-14 h-14 rounded-full {styles.bg} flex items-center justify-center">
|
|
94
|
+
{#if variant === 'success'}
|
|
95
|
+
<CheckOutline class="w-7 h-7 {styles.icon}" />
|
|
96
|
+
{:else if variant === 'error'}
|
|
97
|
+
<CloseOutline class="w-7 h-7 {styles.icon}" />
|
|
98
|
+
{:else if variant === 'warning'}
|
|
99
|
+
<ExclamationTriangleOutline class="w-7 h-7 {styles.icon}" />
|
|
100
|
+
{:else}
|
|
101
|
+
<InfoCircleOutline class="w-7 h-7 {styles.icon}" />
|
|
102
|
+
{/if}
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
{#if title}
|
|
106
|
+
<h2 class={`${typography.h2} mt-4`}>{title}</h2>
|
|
107
|
+
{/if}
|
|
108
|
+
</div>
|
|
109
|
+
{/snippet}
|
|
110
|
+
|
|
111
|
+
{#snippet body()}
|
|
112
|
+
<div class="text-center mt-4">
|
|
113
|
+
{#if message}
|
|
114
|
+
<p class={`${typography.smMuted} leading-relaxed`}>{message}</p>
|
|
115
|
+
{/if}
|
|
116
|
+
</div>
|
|
117
|
+
{/snippet}
|
|
118
|
+
|
|
119
|
+
{#snippet footer()}
|
|
120
|
+
<div class="w-full">
|
|
121
|
+
<Button
|
|
122
|
+
size="full"
|
|
123
|
+
variant={styles.button}
|
|
124
|
+
onclick={handleConfirm}
|
|
125
|
+
>
|
|
126
|
+
{buttonText}
|
|
127
|
+
</Button>
|
|
128
|
+
</div>
|
|
129
|
+
{/snippet}
|
|
130
|
+
</Modal>
|