@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
|
@@ -69,40 +69,44 @@ describe("DarkModeToggle Component Tests", () => {
|
|
|
69
69
|
|
|
70
70
|
test("Contains sun icon SVG", () => {
|
|
71
71
|
const { container } = setupTest();
|
|
72
|
-
const sunIcon = container.querySelector(
|
|
72
|
+
const sunIcon = container.querySelector('span.text-amber-500 svg');
|
|
73
73
|
expect(sunIcon).toBeInTheDocument();
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
test("Contains moon icon SVG", () => {
|
|
77
77
|
const { container } = setupTest();
|
|
78
|
-
const moonIcon = container.querySelector(
|
|
78
|
+
const moonIcon = container.querySelector('span:not(.text-amber-500) svg');
|
|
79
79
|
expect(moonIcon).toBeInTheDocument();
|
|
80
80
|
});
|
|
81
81
|
|
|
82
|
-
test("Contains auto icon
|
|
82
|
+
test("Contains auto mode split icon", () => {
|
|
83
83
|
const { container } = setupTest();
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
// In auto mode, there should be a div with absolute positioning containing the split icon
|
|
85
|
+
const autoDiv = container.querySelector('div.absolute.inset-0');
|
|
86
|
+
expect(autoDiv).toBeInTheDocument();
|
|
86
87
|
});
|
|
87
88
|
|
|
88
89
|
test("Auto icon is visible in auto mode (default)", () => {
|
|
89
90
|
const { container } = setupTest();
|
|
90
|
-
const
|
|
91
|
-
expect(
|
|
91
|
+
const autoDiv = container.querySelector('div.absolute.inset-0');
|
|
92
|
+
expect(autoDiv).toBeInTheDocument();
|
|
92
93
|
});
|
|
93
94
|
|
|
94
|
-
test("Sun and moon icons
|
|
95
|
+
test("Sun and moon single icons have hidden classes in auto mode", () => {
|
|
95
96
|
const { container } = setupTest();
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
expect(
|
|
97
|
+
// In auto mode, the main sun/moon icons should have opacity-0 and scale-0 classes
|
|
98
|
+
const sunIcon = container.querySelector('span.text-amber-500');
|
|
99
|
+
const moonIcon = container.querySelectorAll('span')[1]; // Second span is moon
|
|
100
|
+
expect(sunIcon).toHaveClass('opacity-0');
|
|
101
|
+
expect(sunIcon).toHaveClass('scale-0');
|
|
102
|
+
expect(moonIcon).toHaveClass('opacity-0');
|
|
103
|
+
expect(moonIcon).toHaveClass('scale-0');
|
|
100
104
|
});
|
|
101
105
|
|
|
102
|
-
test("Button has
|
|
106
|
+
test("Button has relative class for positioning", () => {
|
|
103
107
|
setupTest();
|
|
104
108
|
const button = screen.getByRole("button");
|
|
105
|
-
expect(button).toHaveClass("
|
|
109
|
+
expect(button).toHaveClass("relative");
|
|
106
110
|
});
|
|
107
111
|
|
|
108
112
|
test("Button has focus outline removed", () => {
|
|
@@ -111,44 +115,47 @@ describe("DarkModeToggle Component Tests", () => {
|
|
|
111
115
|
expect(button).toHaveClass("focus:outline-none");
|
|
112
116
|
});
|
|
113
117
|
|
|
114
|
-
test("Button
|
|
115
|
-
setupTest();
|
|
118
|
+
test("Button click handler is called on interaction", async () => {
|
|
119
|
+
const { user } = setupTest();
|
|
116
120
|
const button = screen.getByRole("button");
|
|
117
121
|
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
fireEvent.touchEnd(button);
|
|
122
|
+
// Verify button is interactive
|
|
123
|
+
await user.click(button);
|
|
121
124
|
|
|
122
|
-
|
|
125
|
+
// After click, localStorage should be updated (auto -> light)
|
|
126
|
+
expect(localStorageMock.setItem).toHaveBeenCalled();
|
|
123
127
|
});
|
|
124
128
|
|
|
125
129
|
test("SVG icons have correct dimensions", () => {
|
|
126
130
|
const { container } = setupTest();
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
const svgs = container.querySelectorAll('svg');
|
|
132
|
+
// All SVGs should have width and height of either 20 (main icons) or 12 (auto mode icons)
|
|
133
|
+
expect(svgs.length).toBeGreaterThan(0);
|
|
134
|
+
svgs.forEach(svg => {
|
|
135
|
+
const width = svg.getAttribute('width');
|
|
136
|
+
const height = svg.getAttribute('height');
|
|
137
|
+
expect(['20', '12']).toContain(width);
|
|
138
|
+
expect(['20', '12']).toContain(height);
|
|
139
|
+
});
|
|
134
140
|
});
|
|
135
141
|
|
|
136
|
-
test("Sun icon has correct class
|
|
142
|
+
test("Sun icon has correct color class", () => {
|
|
137
143
|
const { container } = setupTest();
|
|
138
|
-
const sunIcon = container.querySelector(
|
|
139
|
-
expect(sunIcon).toHaveClass("
|
|
144
|
+
const sunIcon = container.querySelector('span.text-amber-500');
|
|
145
|
+
expect(sunIcon).toHaveClass("text-amber-500");
|
|
140
146
|
});
|
|
141
147
|
|
|
142
|
-
test("
|
|
143
|
-
|
|
144
|
-
const
|
|
145
|
-
expect(
|
|
148
|
+
test("Button has overflow hidden for auto icon", () => {
|
|
149
|
+
setupTest();
|
|
150
|
+
const button = screen.getByRole("button");
|
|
151
|
+
expect(button).toHaveClass("overflow-hidden");
|
|
146
152
|
});
|
|
147
153
|
|
|
148
|
-
test("Auto
|
|
154
|
+
test("Auto mode div has absolute positioning", () => {
|
|
149
155
|
const { container } = setupTest();
|
|
150
|
-
const
|
|
151
|
-
expect(
|
|
156
|
+
const autoDiv = container.querySelector('div.absolute.inset-0');
|
|
157
|
+
expect(autoDiv).toHaveClass("absolute");
|
|
158
|
+
expect(autoDiv).toHaveClass("inset-0");
|
|
152
159
|
});
|
|
153
160
|
});
|
|
154
161
|
|
|
@@ -203,23 +210,32 @@ describe("DarkModeToggle 3-State Cycle", () => {
|
|
|
203
210
|
const { user, container } = setupTest();
|
|
204
211
|
const button = screen.getByRole("button");
|
|
205
212
|
|
|
206
|
-
// Initially auto - auto
|
|
207
|
-
expect(container.querySelector(".
|
|
213
|
+
// Initially auto - auto div should exist
|
|
214
|
+
expect(container.querySelector("div.absolute.inset-0")).toBeInTheDocument();
|
|
208
215
|
|
|
209
216
|
// Click 1: auto -> light
|
|
210
217
|
await user.click(button);
|
|
211
|
-
|
|
212
|
-
|
|
218
|
+
const sunSpan = container.querySelector('span.text-amber-500');
|
|
219
|
+
// In light mode, sun should be visible (no opacity-0 class)
|
|
220
|
+
expect(sunSpan.classList.contains("opacity-0")).toBe(false);
|
|
221
|
+
expect(container.querySelector("div.absolute.inset-0")).not.toBeInTheDocument();
|
|
213
222
|
|
|
214
223
|
// Click 2: light -> dark
|
|
215
224
|
await user.click(button);
|
|
216
|
-
|
|
217
|
-
|
|
225
|
+
// Find the direct child spans of the button (not nested spans)
|
|
226
|
+
const buttonSpans = Array.from(button.querySelectorAll(':scope > span'));
|
|
227
|
+
const moonSpan = buttonSpans.find(
|
|
228
|
+
span => !span.classList.contains('text-amber-500')
|
|
229
|
+
);
|
|
230
|
+
// In dark mode, moon should be visible (no opacity-0)
|
|
231
|
+
expect(moonSpan.classList.contains("opacity-0")).toBe(false);
|
|
232
|
+
expect(sunSpan.classList.contains("opacity-0")).toBe(true);
|
|
218
233
|
|
|
219
234
|
// Click 3: dark -> auto
|
|
220
235
|
await user.click(button);
|
|
221
|
-
expect(container.querySelector(".
|
|
222
|
-
|
|
236
|
+
expect(container.querySelector("div.absolute.inset-0")).toBeInTheDocument();
|
|
237
|
+
// After returning to auto, both icons should be hidden
|
|
238
|
+
expect(sunSpan.classList.contains("opacity-0")).toBe(true);
|
|
223
239
|
});
|
|
224
240
|
|
|
225
241
|
test("Dark class applied when switching to dark mode", async () => {
|
|
@@ -264,22 +280,39 @@ describe("DarkModeToggle Initial State", () => {
|
|
|
264
280
|
|
|
265
281
|
test("Initializes to auto mode when no localStorage value", () => {
|
|
266
282
|
const { container } = setupTest();
|
|
267
|
-
const
|
|
268
|
-
expect(
|
|
283
|
+
const autoDiv = container.querySelector("div.absolute.inset-0");
|
|
284
|
+
expect(autoDiv).toBeInTheDocument();
|
|
269
285
|
});
|
|
270
286
|
|
|
271
287
|
test("Initializes to dark mode when localStorage has 'dark'", () => {
|
|
272
288
|
localStorageMock.store.theme = "dark";
|
|
273
289
|
const { container } = setupTest();
|
|
274
|
-
const
|
|
275
|
-
|
|
290
|
+
const button = screen.getByRole("button");
|
|
291
|
+
const buttonSpans = Array.from(button.querySelectorAll(':scope > span'));
|
|
292
|
+
const moonSpan = buttonSpans.find(
|
|
293
|
+
span => !span.classList.contains('text-amber-500')
|
|
294
|
+
);
|
|
295
|
+
// In dark mode, moon should be visible (no opacity-0)
|
|
296
|
+
expect(moonSpan.classList.contains("opacity-0")).toBe(false);
|
|
297
|
+
// Sun should be hidden
|
|
298
|
+
const sunSpan = container.querySelector('span.text-amber-500');
|
|
299
|
+
expect(sunSpan.classList.contains("opacity-0")).toBe(true);
|
|
276
300
|
});
|
|
277
301
|
|
|
278
302
|
test("Initializes to light mode when localStorage has 'light'", () => {
|
|
279
303
|
localStorageMock.store.theme = "light";
|
|
280
304
|
const { container } = setupTest();
|
|
281
|
-
const
|
|
282
|
-
|
|
305
|
+
const button = screen.getByRole("button");
|
|
306
|
+
const sunSpan = container.querySelector('span.text-amber-500');
|
|
307
|
+
// In light mode, sun should be visible (no opacity-0)
|
|
308
|
+
expect(sunSpan.classList.contains("opacity-0")).toBe(false);
|
|
309
|
+
// Moon should be hidden - need to check all spans that have transition-all
|
|
310
|
+
const allSpansWithTransition = Array.from(button.querySelectorAll('span.transition-all'));
|
|
311
|
+
const moonSpan = allSpansWithTransition.find(
|
|
312
|
+
span => !span.classList.contains('text-amber-500')
|
|
313
|
+
);
|
|
314
|
+
expect(moonSpan).toBeDefined();
|
|
315
|
+
expect(moonSpan.classList.contains("opacity-0")).toBe(true);
|
|
283
316
|
});
|
|
284
317
|
|
|
285
318
|
test("Reads from localStorage on mount", () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Drawer.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Drawer/Drawer.spec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,212 @@
|
|
|
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 Drawer from './Drawer.svelte';
|
|
5
|
+
|
|
6
|
+
describe('Drawer Component', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
// Reset body overflow before each test
|
|
9
|
+
document.body.style.overflow = '';
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
// Clean up body overflow after each test
|
|
14
|
+
document.body.style.overflow = '';
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('does not render when show is false and hidden is true', () => {
|
|
18
|
+
const { container } = render(Drawer, { props: { show: false, hidden: true } });
|
|
19
|
+
expect(container.querySelector('[role="dialog"]')).not.toBeInTheDocument();
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
test('renders when show is true', () => {
|
|
23
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
24
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('renders when hidden is false', () => {
|
|
28
|
+
const { container } = render(Drawer, { props: { hidden: false } });
|
|
29
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test('has role="dialog" and aria-modal="true"', () => {
|
|
33
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
34
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
35
|
+
expect(dialog).toHaveAttribute('aria-modal', 'true');
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
test('renders title when provided', () => {
|
|
39
|
+
render(Drawer, { props: { show: true, title: 'Test Drawer', id: 'test-drawer' } });
|
|
40
|
+
expect(screen.getByText('Test Drawer')).toBeInTheDocument();
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
test('applies custom className', () => {
|
|
44
|
+
const { container } = render(Drawer, { props: { show: true, class: 'custom-drawer' } });
|
|
45
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
46
|
+
expect(dialog).toHaveClass('custom-drawer');
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('renders backdrop by default when visible', () => {
|
|
50
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
51
|
+
const backdrop = container.querySelector('[role="presentation"]');
|
|
52
|
+
expect(backdrop).toBeInTheDocument();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
test('does not render backdrop when backdrop is false', () => {
|
|
56
|
+
const { container } = render(Drawer, { props: { show: true, backdrop: false } });
|
|
57
|
+
const backdrop = container.querySelector('[role="presentation"]');
|
|
58
|
+
expect(backdrop).not.toBeInTheDocument();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test('passes through id prop', () => {
|
|
62
|
+
const { container } = render(Drawer, { props: { show: true, id: 'my-drawer' } });
|
|
63
|
+
const dialog = container.querySelector('#my-drawer');
|
|
64
|
+
expect(dialog).toBeInTheDocument();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
describe('Drawer Placements', () => {
|
|
69
|
+
test('left placement has left-0 class', () => {
|
|
70
|
+
const { container } = render(Drawer, { props: { show: true, placement: 'left' } });
|
|
71
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
72
|
+
expect(dialog).toHaveClass('left-0');
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test('right placement has right-0 class', () => {
|
|
76
|
+
const { container } = render(Drawer, { props: { show: true, placement: 'right' } });
|
|
77
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
78
|
+
expect(dialog).toHaveClass('right-0');
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('top placement has top-0 class', () => {
|
|
82
|
+
const { container } = render(Drawer, { props: { show: true, placement: 'top' } });
|
|
83
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
84
|
+
expect(dialog).toHaveClass('top-0');
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test('bottom placement has bottom-0 class', () => {
|
|
88
|
+
const { container } = render(Drawer, { props: { show: true, placement: 'bottom' } });
|
|
89
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
90
|
+
expect(dialog).toHaveClass('bottom-0');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
describe('Drawer Widths', () => {
|
|
95
|
+
test('sm width applies w-64', () => {
|
|
96
|
+
const { container } = render(Drawer, { props: { show: true, width: 'sm' } });
|
|
97
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
98
|
+
expect(dialog).toHaveClass('w-64');
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
test('md width applies w-80 (default)', () => {
|
|
102
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
103
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
104
|
+
expect(dialog).toHaveClass('w-80');
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test('lg width applies w-96', () => {
|
|
108
|
+
const { container } = render(Drawer, { props: { show: true, width: 'lg' } });
|
|
109
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
110
|
+
expect(dialog).toHaveClass('w-96');
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
test('full width applies w-full', () => {
|
|
114
|
+
const { container } = render(Drawer, { props: { show: true, width: 'full' } });
|
|
115
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
116
|
+
expect(dialog).toHaveClass('w-full');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
describe('Drawer Accessibility', () => {
|
|
121
|
+
test('has tabindex="-1" for focus management', () => {
|
|
122
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
123
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
124
|
+
expect(dialog).toHaveAttribute('tabindex', '-1');
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
test('has aria-labelledby when title and id are provided', () => {
|
|
128
|
+
const { container } = render(Drawer, { props: { show: true, title: 'Test', id: 'test-drawer' } });
|
|
129
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
130
|
+
expect(dialog).toHaveAttribute('aria-labelledby', 'test-drawer-label');
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
describe('Drawer Styling', () => {
|
|
135
|
+
test('has fixed positioning', () => {
|
|
136
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
137
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
138
|
+
expect(dialog).toHaveClass('fixed');
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
test('has z-40 for stacking', () => {
|
|
142
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
143
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
144
|
+
expect(dialog).toHaveClass('z-40');
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test('has flex flex-col layout', () => {
|
|
148
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
149
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
150
|
+
expect(dialog).toHaveClass('flex');
|
|
151
|
+
expect(dialog).toHaveClass('flex-col');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
test('has bg-white background', () => {
|
|
155
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
156
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
157
|
+
expect(dialog).toHaveClass('bg-white');
|
|
158
|
+
});
|
|
159
|
+
|
|
160
|
+
test('has dark mode background', () => {
|
|
161
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
162
|
+
const dialog = container.querySelector('[role="dialog"]');
|
|
163
|
+
expect(dialog).toHaveClass('dark:bg-gray-800');
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
describe('Drawer Edge Mode', () => {
|
|
168
|
+
test('shows edge trigger when edge=true, placement=bottom, and not visible', () => {
|
|
169
|
+
const { container } = render(Drawer, { props: { edge: true, placement: 'bottom', show: false, hidden: true } });
|
|
170
|
+
const edgeTrigger = container.querySelector('.cursor-pointer');
|
|
171
|
+
expect(edgeTrigger).toBeInTheDocument();
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
test('hides edge trigger when drawer is visible', () => {
|
|
175
|
+
const { container } = render(Drawer, { props: { edge: true, placement: 'bottom', show: true } });
|
|
176
|
+
// Edge trigger should not be visible when drawer is open
|
|
177
|
+
const edgeTriggers = container.querySelectorAll('.cursor-pointer.fixed');
|
|
178
|
+
// The drawer itself might have cursor classes, so check for the specific edge trigger pattern
|
|
179
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
describe('Drawer Callbacks', () => {
|
|
184
|
+
test('onclose prop is accepted', () => {
|
|
185
|
+
const onclose = vi.fn();
|
|
186
|
+
const { container } = render(Drawer, {
|
|
187
|
+
props: { show: true, closeOnBackdropClick: true, onclose }
|
|
188
|
+
});
|
|
189
|
+
// Verify drawer renders with onclose callback
|
|
190
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
test('closeOnBackdropClick prop defaults to true', () => {
|
|
194
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
195
|
+
// Drawer renders with default closeOnBackdropClick behavior
|
|
196
|
+
expect(container.querySelector('[role="presentation"]')).toBeInTheDocument();
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
test('closeOnEscape prop defaults to true', () => {
|
|
200
|
+
const { container } = render(Drawer, { props: { show: true } });
|
|
201
|
+
// Drawer accepts closeOnEscape prop
|
|
202
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test('onopen prop is accepted', () => {
|
|
206
|
+
const onopen = vi.fn();
|
|
207
|
+
const { container } = render(Drawer, {
|
|
208
|
+
props: { show: true, onopen }
|
|
209
|
+
});
|
|
210
|
+
expect(container.querySelector('[role="dialog"]')).toBeInTheDocument();
|
|
211
|
+
});
|
|
212
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/primitives/Dropdown/Dropdown.spec.js"],"names":[],"mappings":""}
|