@getmicdrop/svelte-components 5.5.4 → 5.5.5
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/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/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/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/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/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/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/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/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/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/Stack.spec.js +3 -3
- package/dist/constants/formOptions.spec.js +9 -5
- 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 +124 -2
- package/dist/datetime/parse.js +1 -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/forms/createFormStore.svelte.js +0 -1
- package/dist/index.d.ts +4 -112
- package/dist/index.js +4 -190
- 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/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/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/forms/FormActions.spec.js +10 -3
- 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/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/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/navigation/BottomNav.svelte +4 -4
- package/dist/patterns/navigation/Header.spec.js +33 -24
- 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/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/PageLoader.spec.js +5 -2
- 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/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.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/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/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/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 +5 -2
- 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/Badges/Badge.spec.js +109 -68
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +36 -27
- 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 +15 -13
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +5 -5
- package/dist/primitives/Button/Button.spec.js +83 -71
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +100 -2
- 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/Card.spec.js +1 -1
- 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/DarkModeToggle.spec.js +84 -51
- 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/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/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/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 +14 -14
- package/dist/primitives/Input/Input.svelte +1 -14
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +11 -17
- 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/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/Modal/Modal.spec.js +29 -25
- 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/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/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/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/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/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/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/Spinner/Spinner.spec.js +25 -29
- 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/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/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 +93 -77
- 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/ValidationError.spec.js +1 -1
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.js +3 -0
- package/dist/recipes/CropImage/CropImage.spec.js +1 -9
- 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/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/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/ErrorDisplay.spec.js +6 -6
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +21 -17
- 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/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/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/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/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/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/inputs/MultiSelect.spec.js +4 -3
- package/dist/recipes/inputs/MultiSelect.svelte +10 -3
- 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 +52 -39
- 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/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
- 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/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/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/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/ConfirmationModal.spec.js +36 -21
- 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/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/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/services/ShowService.spec.js +18 -15
- 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/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/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/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/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/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +6 -5
- package/dist/telemetry.spec.js +495 -12
- 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.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/utils/apiConfig.spec.js +102 -1
- 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.spec.d.ts +2 -0
- package/dist/utils/transitions.spec.d.ts.map +1 -0
- package/dist/utils/transitions.spec.js +130 -0
- package/package.json +8 -3
|
@@ -0,0 +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?: any;
|
|
30
|
+
/** Expose the toggle function for testing */
|
|
31
|
+
toggleFn?: any;
|
|
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>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test wrapper for AccordionItem
|
|
3
|
+
* Provides the necessary accordion context that AccordionItem expects
|
|
4
|
+
*/
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
|
+
interface Props {
|
|
7
|
+
/** Allow multiple items open at once */
|
|
8
|
+
multiple?: boolean;
|
|
9
|
+
/** Remove outer border/radius (Flowbite flush variant) */
|
|
10
|
+
flush?: boolean;
|
|
11
|
+
/** Initial open state of the item */
|
|
12
|
+
open?: boolean;
|
|
13
|
+
/** Show bottom border */
|
|
14
|
+
border?: boolean;
|
|
15
|
+
/** Additional classes when open */
|
|
16
|
+
borderOpenClass?: string;
|
|
17
|
+
/** Custom class for the item */
|
|
18
|
+
class?: string;
|
|
19
|
+
/** Header snippet */
|
|
20
|
+
header?: Snippet;
|
|
21
|
+
/** Children snippet */
|
|
22
|
+
children?: Snippet;
|
|
23
|
+
/** Expose the openItems store for testing */
|
|
24
|
+
openItems?: any;
|
|
25
|
+
/** Expose the toggle function for testing */
|
|
26
|
+
toggleFn?: any;
|
|
27
|
+
/** Data attributes for testing */
|
|
28
|
+
'data-testid'?: string;
|
|
29
|
+
'data-custom'?: string;
|
|
30
|
+
[key: string]: unknown;
|
|
31
|
+
}
|
|
32
|
+
declare const AccordionItemWrapper: import("svelte").Component<Props, {}, "openItems" | "toggleFn">;
|
|
33
|
+
type AccordionItemWrapper = ReturnType<typeof AccordionItemWrapper>;
|
|
34
|
+
export default AccordionItemWrapper;
|
|
35
|
+
//# sourceMappingURL=AccordionItemWrapper.test.svelte.d.ts.map
|
|
@@ -0,0 +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;IAChB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,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"}
|
|
@@ -126,12 +126,15 @@ describe("Alert Component Tests", () => {
|
|
|
126
126
|
expect(dismissButton).toBeInTheDocument();
|
|
127
127
|
});
|
|
128
128
|
|
|
129
|
-
test("Has
|
|
129
|
+
test("Has proper alert styling classes", () => {
|
|
130
130
|
setupTest({
|
|
131
131
|
title: "Styled Alert",
|
|
132
132
|
});
|
|
133
133
|
const alertElement = screen.getByRole("alert");
|
|
134
|
-
expect(alertElement).toHaveClass("
|
|
134
|
+
expect(alertElement).toHaveClass("flex");
|
|
135
|
+
expect(alertElement).toHaveClass("items-center");
|
|
136
|
+
expect(alertElement).toHaveClass("p-4");
|
|
137
|
+
expect(alertElement).toHaveClass("rounded-lg");
|
|
135
138
|
});
|
|
136
139
|
|
|
137
140
|
test("Renders without title when only message is provided", () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Avatar.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Avatar/Avatar.spec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/svelte';
|
|
2
|
+
import { expect, describe, test } from 'vitest';
|
|
3
|
+
import Avatar from './Avatar.svelte';
|
|
4
|
+
|
|
5
|
+
describe('Avatar Component', () => {
|
|
6
|
+
test('renders a div by default (no src)', () => {
|
|
7
|
+
const { container } = render(Avatar);
|
|
8
|
+
expect(container.querySelector('div')).toBeInTheDocument();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('renders an img when src is provided', () => {
|
|
12
|
+
const { container } = render(Avatar, { props: { src: '/user.jpg' } });
|
|
13
|
+
expect(container.querySelector('img')).toBeInTheDocument();
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
test('applies custom className', () => {
|
|
17
|
+
const { container } = render(Avatar, { props: { class: 'custom-avatar' } });
|
|
18
|
+
const div = container.querySelector('div');
|
|
19
|
+
expect(div).toHaveClass('custom-avatar');
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe('Avatar with Image', () => {
|
|
24
|
+
test('sets src attribute on img', () => {
|
|
25
|
+
const { container } = render(Avatar, { props: { src: '/profile.png' } });
|
|
26
|
+
const img = container.querySelector('img');
|
|
27
|
+
expect(img).toHaveAttribute('src', '/profile.png');
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('sets alt attribute on img', () => {
|
|
31
|
+
const { container } = render(Avatar, { props: { src: '/user.jpg', alt: 'User profile' } });
|
|
32
|
+
const img = container.querySelector('img');
|
|
33
|
+
expect(img).toHaveAttribute('alt', 'User profile');
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test('img has object-cover class', () => {
|
|
37
|
+
const { container } = render(Avatar, { props: { src: '/user.jpg' } });
|
|
38
|
+
const img = container.querySelector('img');
|
|
39
|
+
expect(img).toHaveClass('object-cover');
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
describe('Avatar with Initials', () => {
|
|
44
|
+
test('renders initials when no src', () => {
|
|
45
|
+
render(Avatar, { props: { initials: 'JD' } });
|
|
46
|
+
expect(screen.getByText('JD')).toBeInTheDocument();
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('initials container has flex classes', () => {
|
|
50
|
+
const { container } = render(Avatar, { props: { initials: 'AB' } });
|
|
51
|
+
const div = container.querySelector('div');
|
|
52
|
+
expect(div).toHaveClass('flex');
|
|
53
|
+
expect(div).toHaveClass('items-center');
|
|
54
|
+
expect(div).toHaveClass('justify-center');
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
test('initials container has font-medium', () => {
|
|
58
|
+
const { container } = render(Avatar, { props: { initials: 'CD' } });
|
|
59
|
+
const div = container.querySelector('div');
|
|
60
|
+
expect(div).toHaveClass('font-medium');
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
test('initials container has gray colors', () => {
|
|
64
|
+
const { container } = render(Avatar, { props: { initials: 'EF' } });
|
|
65
|
+
const div = container.querySelector('div');
|
|
66
|
+
expect(div).toHaveClass('text-gray-600');
|
|
67
|
+
expect(div).toHaveClass('bg-gray-200');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('initials container has dark mode colors', () => {
|
|
71
|
+
const { container } = render(Avatar, { props: { initials: 'GH' } });
|
|
72
|
+
const div = container.querySelector('div');
|
|
73
|
+
expect(div).toHaveClass('dark:bg-gray-700');
|
|
74
|
+
expect(div).toHaveClass('dark:text-gray-300');
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
describe('Avatar Default Placeholder', () => {
|
|
79
|
+
test('renders placeholder svg when no src or initials', () => {
|
|
80
|
+
const { container } = render(Avatar);
|
|
81
|
+
expect(container.querySelector('svg')).toBeInTheDocument();
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
test('placeholder container has bg-gray-200', () => {
|
|
85
|
+
const { container } = render(Avatar);
|
|
86
|
+
const div = container.querySelector('div');
|
|
87
|
+
expect(div).toHaveClass('bg-gray-200');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test('placeholder container has dark mode bg', () => {
|
|
91
|
+
const { container } = render(Avatar);
|
|
92
|
+
const div = container.querySelector('div');
|
|
93
|
+
expect(div).toHaveClass('dark:bg-gray-700');
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test('svg has correct sizing classes', () => {
|
|
97
|
+
const { container } = render(Avatar);
|
|
98
|
+
const svg = container.querySelector('svg');
|
|
99
|
+
expect(svg).toHaveClass('w-1/2');
|
|
100
|
+
expect(svg).toHaveClass('h-1/2');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
test('svg has text-gray-400 color', () => {
|
|
104
|
+
const { container } = render(Avatar);
|
|
105
|
+
const svg = container.querySelector('svg');
|
|
106
|
+
expect(svg).toHaveClass('text-gray-400');
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
describe('Avatar Sizes', () => {
|
|
111
|
+
test('xs size applies w-6 h-6', () => {
|
|
112
|
+
const { container } = render(Avatar, { props: { size: 'xs' } });
|
|
113
|
+
const div = container.querySelector('div');
|
|
114
|
+
expect(div).toHaveClass('w-6');
|
|
115
|
+
expect(div).toHaveClass('h-6');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test('sm size applies w-8 h-8', () => {
|
|
119
|
+
const { container } = render(Avatar, { props: { size: 'sm' } });
|
|
120
|
+
const div = container.querySelector('div');
|
|
121
|
+
expect(div).toHaveClass('w-8');
|
|
122
|
+
expect(div).toHaveClass('h-8');
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
test('md size applies w-10 h-10', () => {
|
|
126
|
+
const { container } = render(Avatar, { props: { size: 'md' } });
|
|
127
|
+
const div = container.querySelector('div');
|
|
128
|
+
expect(div).toHaveClass('w-10');
|
|
129
|
+
expect(div).toHaveClass('h-10');
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test('lg size applies w-14 h-14', () => {
|
|
133
|
+
const { container } = render(Avatar, { props: { size: 'lg' } });
|
|
134
|
+
const div = container.querySelector('div');
|
|
135
|
+
expect(div).toHaveClass('w-14');
|
|
136
|
+
expect(div).toHaveClass('h-14');
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test('xl size applies w-20 h-20', () => {
|
|
140
|
+
const { container } = render(Avatar, { props: { size: 'xl' } });
|
|
141
|
+
const div = container.querySelector('div');
|
|
142
|
+
expect(div).toHaveClass('w-20');
|
|
143
|
+
expect(div).toHaveClass('h-20');
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('default size is md', () => {
|
|
147
|
+
const { container } = render(Avatar);
|
|
148
|
+
const div = container.querySelector('div');
|
|
149
|
+
expect(div).toHaveClass('w-10');
|
|
150
|
+
expect(div).toHaveClass('h-10');
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
describe('Avatar Size Text Classes', () => {
|
|
155
|
+
test('xs size has text-xs', () => {
|
|
156
|
+
const { container } = render(Avatar, { props: { size: 'xs', initials: 'XS' } });
|
|
157
|
+
const div = container.querySelector('div');
|
|
158
|
+
expect(div).toHaveClass('text-xs');
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
test('sm size has text-xs', () => {
|
|
162
|
+
const { container } = render(Avatar, { props: { size: 'sm', initials: 'SM' } });
|
|
163
|
+
const div = container.querySelector('div');
|
|
164
|
+
expect(div).toHaveClass('text-xs');
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
test('md size has text-sm', () => {
|
|
168
|
+
const { container } = render(Avatar, { props: { size: 'md', initials: 'MD' } });
|
|
169
|
+
const div = container.querySelector('div');
|
|
170
|
+
expect(div).toHaveClass('text-sm');
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
test('lg size has text-base', () => {
|
|
174
|
+
const { container } = render(Avatar, { props: { size: 'lg', initials: 'LG' } });
|
|
175
|
+
const div = container.querySelector('div');
|
|
176
|
+
expect(div).toHaveClass('text-base');
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
test('xl size has text-lg', () => {
|
|
180
|
+
const { container } = render(Avatar, { props: { size: 'xl', initials: 'XL' } });
|
|
181
|
+
const div = container.querySelector('div');
|
|
182
|
+
expect(div).toHaveClass('text-lg');
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
describe('Avatar Rounded', () => {
|
|
187
|
+
test('default rounded is false (uses rounded class)', () => {
|
|
188
|
+
const { container } = render(Avatar);
|
|
189
|
+
const div = container.querySelector('div');
|
|
190
|
+
expect(div).toHaveClass('rounded');
|
|
191
|
+
expect(div).not.toHaveClass('rounded-full');
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('rounded=true applies rounded-full', () => {
|
|
195
|
+
const { container } = render(Avatar, { props: { rounded: true } });
|
|
196
|
+
const div = container.querySelector('div');
|
|
197
|
+
expect(div).toHaveClass('rounded-full');
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test('rounded=false applies rounded', () => {
|
|
201
|
+
const { container } = render(Avatar, { props: { rounded: false } });
|
|
202
|
+
const div = container.querySelector('div');
|
|
203
|
+
expect(div).toHaveClass('rounded');
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
test('img respects rounded prop', () => {
|
|
207
|
+
const { container } = render(Avatar, { props: { src: '/user.jpg', rounded: true } });
|
|
208
|
+
const img = container.querySelector('img');
|
|
209
|
+
expect(img).toHaveClass('rounded-full');
|
|
210
|
+
});
|
|
211
|
+
});
|
|
@@ -3,101 +3,142 @@ import userEvent from '@testing-library/user-event';
|
|
|
3
3
|
import { describe, test, expect, vi } from 'vitest';
|
|
4
4
|
import Badge from './Badge.svelte';
|
|
5
5
|
|
|
6
|
-
function setupTest(args = {}) {
|
|
7
|
-
const user = userEvent.setup();
|
|
8
|
-
const onClick = vi.fn();
|
|
9
|
-
const { component, container } = render(Badge, { props: { ...args } });
|
|
10
|
-
component.$on('click', onClick);
|
|
11
|
-
const badge = container.querySelector('div');
|
|
12
|
-
return {
|
|
13
|
-
user,
|
|
14
|
-
badge,
|
|
15
|
-
onClick,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
6
|
describe('Badge Component Tests', () => {
|
|
20
7
|
test('Renders with default props', () => {
|
|
21
|
-
const {
|
|
8
|
+
const { container } = render(Badge);
|
|
9
|
+
const badge = container.querySelector('div');
|
|
22
10
|
expect(badge).toBeInTheDocument();
|
|
23
|
-
expect(badge).toHaveClass('
|
|
11
|
+
expect(badge).toHaveClass('inline-flex');
|
|
12
|
+
expect(badge).toHaveClass('items-center');
|
|
24
13
|
});
|
|
25
14
|
|
|
26
|
-
test('Renders with
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
expect(mediumBadge).toHaveClass('badge-md');
|
|
32
|
-
|
|
33
|
-
const { badge: largeBadge } = setupTest({ size: 'large' });
|
|
34
|
-
expect(largeBadge).toHaveClass('badge-lg');
|
|
15
|
+
test('Renders with size prop', () => {
|
|
16
|
+
// Default md size renders with text classes
|
|
17
|
+
const { container: mdContainer } = render(Badge, { size: 'md' });
|
|
18
|
+
const mdBadge = mdContainer.querySelector('div');
|
|
19
|
+
expect(mdBadge).toHaveClass('font-medium');
|
|
35
20
|
});
|
|
36
21
|
|
|
37
|
-
test('
|
|
38
|
-
|
|
39
|
-
expect(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
expect(
|
|
43
|
-
|
|
44
|
-
const { badge: featureBadge } = setupTest({ variant: 'feature' });
|
|
45
|
-
expect(featureBadge).toHaveClass('badge-feature');
|
|
46
|
-
|
|
47
|
-
const { badge: specialGuestBadge } = setupTest({ variant: 'special-guest' });
|
|
48
|
-
expect(specialGuestBadge).toHaveClass('badge-special-guest');
|
|
22
|
+
test('Accepts size prop without error', () => {
|
|
23
|
+
// Test that various sizes render without errors
|
|
24
|
+
expect(() => render(Badge, { size: 'xs' })).not.toThrow();
|
|
25
|
+
expect(() => render(Badge, { size: 'sm' })).not.toThrow();
|
|
26
|
+
expect(() => render(Badge, { size: 'md' })).not.toThrow();
|
|
27
|
+
expect(() => render(Badge, { size: 'lg' })).not.toThrow();
|
|
28
|
+
});
|
|
49
29
|
|
|
50
|
-
|
|
51
|
-
expect(
|
|
30
|
+
test('Accepts large prop without error', () => {
|
|
31
|
+
expect(() => render(Badge, { large: true })).not.toThrow();
|
|
32
|
+
});
|
|
52
33
|
|
|
53
|
-
|
|
54
|
-
|
|
34
|
+
test('Handles variant props for colors', () => {
|
|
35
|
+
// neutral variant (default)
|
|
36
|
+
const { container: neutralContainer } = render(Badge, { variant: 'neutral' });
|
|
37
|
+
const neutralBadge = neutralContainer.querySelector('div');
|
|
38
|
+
expect(neutralBadge).toHaveClass('bg-gray-100');
|
|
39
|
+
|
|
40
|
+
// success variant
|
|
41
|
+
const { container: successContainer } = render(Badge, { variant: 'success' });
|
|
42
|
+
const successBadge = successContainer.querySelector('div');
|
|
43
|
+
expect(successBadge).toHaveClass('bg-green-100');
|
|
44
|
+
|
|
45
|
+
// warning variant
|
|
46
|
+
const { container: warningContainer } = render(Badge, { variant: 'warning' });
|
|
47
|
+
const warningBadge = warningContainer.querySelector('div');
|
|
48
|
+
expect(warningBadge).toHaveClass('bg-yellow-100');
|
|
49
|
+
|
|
50
|
+
// error variant
|
|
51
|
+
const { container: errorContainer } = render(Badge, { variant: 'error' });
|
|
52
|
+
const errorBadge = errorContainer.querySelector('div');
|
|
53
|
+
expect(errorBadge).toHaveClass('bg-red-100');
|
|
54
|
+
|
|
55
|
+
// info variant
|
|
56
|
+
const { container: infoContainer } = render(Badge, { variant: 'info' });
|
|
57
|
+
const infoBadge = infoContainer.querySelector('div');
|
|
58
|
+
expect(infoBadge).toHaveClass('bg-blue-100');
|
|
59
|
+
});
|
|
55
60
|
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
test('Handles case-insensitive variants', () => {
|
|
62
|
+
const { container: upperContainer } = render(Badge, { variant: 'SUCCESS' });
|
|
63
|
+
const upperBadge = upperContainer.querySelector('div');
|
|
64
|
+
expect(upperBadge).toHaveClass('bg-green-100');
|
|
58
65
|
|
|
59
|
-
const {
|
|
60
|
-
|
|
66
|
+
const { container: mixedContainer } = render(Badge, { variant: 'Warning' });
|
|
67
|
+
const mixedBadge = mixedContainer.querySelector('div');
|
|
68
|
+
expect(mixedBadge).toHaveClass('bg-yellow-100');
|
|
61
69
|
});
|
|
62
70
|
|
|
63
|
-
test('
|
|
64
|
-
const {
|
|
65
|
-
|
|
71
|
+
test('Falls back to neutral variant for unknown variants', () => {
|
|
72
|
+
const { container } = render(Badge, { variant: 'unknown' });
|
|
73
|
+
const badge = container.querySelector('div');
|
|
74
|
+
expect(badge).toHaveClass('bg-gray-100');
|
|
75
|
+
});
|
|
66
76
|
|
|
67
|
-
|
|
68
|
-
|
|
77
|
+
test('Shows status dot when showDot is true', () => {
|
|
78
|
+
const { container } = render(Badge, { showDot: true });
|
|
79
|
+
const dot = container.querySelector('span.rounded-full');
|
|
80
|
+
expect(dot).toBeInTheDocument();
|
|
81
|
+
expect(dot).toHaveClass('w-1.5');
|
|
82
|
+
expect(dot).toHaveClass('h-1.5');
|
|
83
|
+
});
|
|
69
84
|
|
|
70
|
-
|
|
71
|
-
|
|
85
|
+
test('Does not show status dot by default', () => {
|
|
86
|
+
const { container } = render(Badge, { showDot: false });
|
|
87
|
+
const dot = container.querySelector('span.rounded-full');
|
|
88
|
+
expect(dot).not.toBeInTheDocument();
|
|
89
|
+
});
|
|
72
90
|
|
|
73
|
-
|
|
74
|
-
|
|
91
|
+
test('Renders as pill shape', () => {
|
|
92
|
+
const { container } = render(Badge, { pill: true });
|
|
93
|
+
const badge = container.querySelector('div');
|
|
94
|
+
expect(badge).toHaveClass('rounded-full');
|
|
95
|
+
expect(badge).toHaveClass('min-w-5');
|
|
96
|
+
});
|
|
75
97
|
|
|
76
|
-
|
|
77
|
-
|
|
98
|
+
test('Renders with rounded shape by default', () => {
|
|
99
|
+
const { container } = render(Badge, { shape: 'rounded' });
|
|
100
|
+
const badge = container.querySelector('div');
|
|
101
|
+
expect(badge).toHaveClass('rounded');
|
|
78
102
|
});
|
|
79
103
|
|
|
80
|
-
test('
|
|
81
|
-
const {
|
|
82
|
-
|
|
104
|
+
test('Renders with pill shape option', () => {
|
|
105
|
+
const { container } = render(Badge, { shape: 'pill' });
|
|
106
|
+
const badge = container.querySelector('div');
|
|
107
|
+
expect(badge).toHaveClass('rounded-full');
|
|
83
108
|
});
|
|
84
109
|
|
|
85
|
-
test('
|
|
86
|
-
const {
|
|
87
|
-
|
|
110
|
+
test('Applies custom className', () => {
|
|
111
|
+
const { container } = render(Badge, { className: 'custom-class' });
|
|
112
|
+
const badge = container.querySelector('div');
|
|
113
|
+
expect(badge).toHaveClass('custom-class');
|
|
114
|
+
});
|
|
88
115
|
|
|
89
|
-
|
|
90
|
-
|
|
116
|
+
test('Applies custom text color', () => {
|
|
117
|
+
const { container } = render(Badge, { textColor: '#ff0000' });
|
|
118
|
+
const badge = container.querySelector('div');
|
|
119
|
+
// Browser may convert hex to rgb
|
|
120
|
+
expect(badge.style.color).toBeTruthy();
|
|
91
121
|
});
|
|
92
122
|
|
|
93
|
-
test('
|
|
94
|
-
const {
|
|
95
|
-
|
|
123
|
+
test('Applies custom background color', () => {
|
|
124
|
+
const { container } = render(Badge, { bgColor: '#00ff00' });
|
|
125
|
+
const badge = container.querySelector('div');
|
|
126
|
+
// Browser may convert hex to rgb
|
|
127
|
+
expect(badge.style.backgroundColor).toBeTruthy();
|
|
96
128
|
});
|
|
97
129
|
|
|
98
130
|
test('Dispatches click event', async () => {
|
|
99
|
-
const
|
|
131
|
+
const user = userEvent.setup();
|
|
132
|
+
const onClickMock = vi.fn();
|
|
133
|
+
const { container } = render(Badge, { onclick: onClickMock });
|
|
134
|
+
const badge = container.querySelector('div');
|
|
100
135
|
await user.click(badge);
|
|
101
|
-
expect(
|
|
136
|
+
expect(onClickMock).toHaveBeenCalledOnce();
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test('Gap class is present for icon spacing', () => {
|
|
140
|
+
const { container } = render(Badge);
|
|
141
|
+
const badge = container.querySelector('div');
|
|
142
|
+
expect(badge).toHaveClass('gap-1.5');
|
|
102
143
|
});
|
|
103
144
|
});
|