@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,153 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/svelte';
|
|
2
|
+
import { expect, describe, test } from 'vitest';
|
|
3
|
+
import ToggleField from './ToggleField.svelte';
|
|
4
|
+
|
|
5
|
+
describe('ToggleField Component', () => {
|
|
6
|
+
test('renders a wrapper div', () => {
|
|
7
|
+
const { container } = render(ToggleField);
|
|
8
|
+
expect(container.querySelector('div')).toBeInTheDocument();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('applies custom className', () => {
|
|
12
|
+
const { container } = render(ToggleField, { props: { class: 'custom-toggle-field' } });
|
|
13
|
+
const wrapper = container.firstElementChild;
|
|
14
|
+
expect(wrapper).toHaveClass('custom-toggle-field');
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('renders a toggle switch', () => {
|
|
18
|
+
const { container } = render(ToggleField);
|
|
19
|
+
const toggle = container.querySelector('[role="switch"]');
|
|
20
|
+
expect(toggle).toBeInTheDocument();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
describe('ToggleField Label', () => {
|
|
25
|
+
test('no label renders no label text', () => {
|
|
26
|
+
render(ToggleField);
|
|
27
|
+
expect(screen.queryByText(/test/i)).not.toBeInTheDocument();
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test('label prop displays label text', () => {
|
|
31
|
+
render(ToggleField, { props: { label: 'Enable notifications' } });
|
|
32
|
+
expect(screen.getByText('Enable notifications')).toBeInTheDocument();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
test('error state applies error styling to label', () => {
|
|
36
|
+
const { container } = render(ToggleField, { props: { label: 'Test', error: 'Required' } });
|
|
37
|
+
const labelSpan = container.querySelector('span');
|
|
38
|
+
expect(labelSpan).toHaveClass('text-red-500');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
describe('ToggleField Description', () => {
|
|
43
|
+
test('no description renders no description text', () => {
|
|
44
|
+
const { container } = render(ToggleField, { props: { label: 'Test' } });
|
|
45
|
+
const spans = container.querySelectorAll('span');
|
|
46
|
+
expect(spans.length).toBe(1); // Just the label
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
test('description prop displays description text', () => {
|
|
50
|
+
render(ToggleField, { props: { description: 'Get daily updates' } });
|
|
51
|
+
expect(screen.getByText('Get daily updates')).toBeInTheDocument();
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('label and description together', () => {
|
|
55
|
+
render(ToggleField, { props: { label: 'Notifications', description: 'Stay informed' } });
|
|
56
|
+
expect(screen.getByText('Notifications')).toBeInTheDocument();
|
|
57
|
+
expect(screen.getByText('Stay informed')).toBeInTheDocument();
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('ToggleField Error', () => {
|
|
62
|
+
test('no error shows no validation message', () => {
|
|
63
|
+
const { container } = render(ToggleField);
|
|
64
|
+
const errorDiv = container.querySelector('.text-red-600');
|
|
65
|
+
expect(errorDiv).not.toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('error prop shows validation message', () => {
|
|
69
|
+
render(ToggleField, { props: { error: 'Please enable this option' } });
|
|
70
|
+
expect(screen.getByText('Please enable this option')).toBeInTheDocument();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe('ToggleField Disabled', () => {
|
|
75
|
+
test('disabled prop disables toggle', () => {
|
|
76
|
+
const { container } = render(ToggleField, { props: { disabled: true } });
|
|
77
|
+
const input = container.querySelector('input[type="checkbox"]');
|
|
78
|
+
expect(input).toBeDisabled();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test('not disabled by default', () => {
|
|
82
|
+
const { container } = render(ToggleField);
|
|
83
|
+
const input = container.querySelector('input[type="checkbox"]');
|
|
84
|
+
expect(input).not.toBeDisabled();
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
describe('ToggleField Size', () => {
|
|
89
|
+
test('default size is md', () => {
|
|
90
|
+
const { container } = render(ToggleField);
|
|
91
|
+
expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('size sm works', () => {
|
|
95
|
+
const { container } = render(ToggleField, { props: { size: 'sm' } });
|
|
96
|
+
expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('size lg works', () => {
|
|
100
|
+
const { container } = render(ToggleField, { props: { size: 'lg' } });
|
|
101
|
+
expect(container.querySelector('[role="switch"]')).toBeInTheDocument();
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
describe('ToggleField Layout', () => {
|
|
106
|
+
test('has flex container for label and toggle', () => {
|
|
107
|
+
const { container } = render(ToggleField, { props: { label: 'Test' } });
|
|
108
|
+
const flexDiv = container.querySelector('.flex.items-start');
|
|
109
|
+
expect(flexDiv).toBeInTheDocument();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
test('has justify-between', () => {
|
|
113
|
+
const { container } = render(ToggleField, { props: { label: 'Test' } });
|
|
114
|
+
const flexDiv = container.querySelector('.flex.items-start');
|
|
115
|
+
expect(flexDiv).toHaveClass('justify-between');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
test('has gap-4', () => {
|
|
119
|
+
const { container } = render(ToggleField, { props: { label: 'Test' } });
|
|
120
|
+
const flexDiv = container.querySelector('.flex.items-start');
|
|
121
|
+
expect(flexDiv).toHaveClass('gap-4');
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('ToggleField Combinations', () => {
|
|
126
|
+
test('label and description with toggle', () => {
|
|
127
|
+
render(ToggleField, {
|
|
128
|
+
props: { label: 'Dark mode', description: 'Use dark color scheme' }
|
|
129
|
+
});
|
|
130
|
+
expect(screen.getByText('Dark mode')).toBeInTheDocument();
|
|
131
|
+
expect(screen.getByText('Use dark color scheme')).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
test('all props together', () => {
|
|
135
|
+
const { container } = render(ToggleField, {
|
|
136
|
+
props: {
|
|
137
|
+
label: 'Settings',
|
|
138
|
+
description: 'Configure options',
|
|
139
|
+
error: 'Please select',
|
|
140
|
+
disabled: true,
|
|
141
|
+
size: 'lg',
|
|
142
|
+
class: 'custom-class'
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
const wrapper = container.firstElementChild;
|
|
146
|
+
expect(wrapper).toHaveClass('custom-class');
|
|
147
|
+
expect(screen.getByText('Settings')).toBeInTheDocument();
|
|
148
|
+
expect(screen.getByText('Configure options')).toBeInTheDocument();
|
|
149
|
+
expect(screen.getByText('Please select')).toBeInTheDocument();
|
|
150
|
+
const input = container.querySelector('input[type="checkbox"]');
|
|
151
|
+
expect(input).toBeDisabled();
|
|
152
|
+
});
|
|
153
|
+
});
|
|
@@ -117,16 +117,17 @@ describe("MultiSelect Component Tests", () => {
|
|
|
117
117
|
});
|
|
118
118
|
|
|
119
119
|
test("Dispatches change event on selection", async () => {
|
|
120
|
-
const { user, component } = setupTest();
|
|
121
120
|
const changeSpy = vi.fn();
|
|
122
|
-
|
|
121
|
+
const { user } = setupTest({
|
|
122
|
+
onchange: changeSpy,
|
|
123
|
+
});
|
|
123
124
|
|
|
124
125
|
const trigger = screen.getByRole("button", { name: /select options/i });
|
|
125
126
|
await user.click(trigger);
|
|
126
127
|
await user.click(screen.getByText("Option 2"));
|
|
127
128
|
|
|
128
129
|
expect(changeSpy).toHaveBeenCalled();
|
|
129
|
-
expect(changeSpy.mock.calls[0][0].
|
|
130
|
+
expect(changeSpy.mock.calls[0][0].value).toContain("opt2");
|
|
130
131
|
});
|
|
131
132
|
|
|
132
133
|
test("Shows required indicator when required", () => {
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
id = "",
|
|
19
19
|
/** @type {'sm' | 'md' | 'lg'} */
|
|
20
20
|
size = "md",
|
|
21
|
+
animateFocus = true, // Show focus animation
|
|
21
22
|
// Callbacks
|
|
22
23
|
onchange,
|
|
23
24
|
} = $props();
|
|
@@ -27,7 +28,12 @@
|
|
|
27
28
|
let dropdownElement = $state();
|
|
28
29
|
let focusedIndex = $state(-1);
|
|
29
30
|
|
|
30
|
-
// Ensure value is always an array
|
|
31
|
+
// Ensure value is always an array (initialize immediately)
|
|
32
|
+
if (!Array.isArray(value)) {
|
|
33
|
+
value = [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Keep value as array
|
|
31
37
|
$effect(() => {
|
|
32
38
|
if (!Array.isArray(value)) {
|
|
33
39
|
value = [];
|
|
@@ -159,7 +165,8 @@
|
|
|
159
165
|
{name}
|
|
160
166
|
class="flex items-center justify-between gap-2 w-full {sizeClass} bg-gray-50 dark:bg-gray-800 border rounded-lg cursor-pointer text-left transition-all focus:outline-none focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800
|
|
161
167
|
{error ? 'border-red-500 dark:border-red-500' : 'border-gray-300 dark:border-gray-600 hover:border-blue-500 dark:hover:border-blue-500 focus:border-blue-500 dark:focus:border-blue-500'}
|
|
162
|
-
{disabled ? 'opacity-50 cursor-not-allowed' : ''}
|
|
168
|
+
{disabled ? 'opacity-50 cursor-not-allowed' : ''}
|
|
169
|
+
{animateFocus ? 'multiselect-animate-focus' : ''}"
|
|
163
170
|
{disabled}
|
|
164
171
|
aria-haspopup="listbox"
|
|
165
172
|
aria-expanded={isOpen}
|
|
@@ -231,7 +238,7 @@
|
|
|
231
238
|
<input
|
|
232
239
|
type="checkbox"
|
|
233
240
|
checked={value.includes(item.value)}
|
|
234
|
-
class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-700 dark:focus:ring-offset-gray-700 focus:ring-2 dark:bg-gray-600 dark:border-gray-500"
|
|
241
|
+
class="multiselect-checkbox w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-700 dark:focus:ring-offset-gray-700 focus:ring-2 dark:bg-gray-600 dark:border-gray-500 {value.includes(item.value) ? 'multiselect-checkbox-checked' : ''}"
|
|
235
242
|
tabindex="-1"
|
|
236
243
|
onclick={(e) => { e.stopPropagation(); toggleItem(item); }}
|
|
237
244
|
/>
|
|
@@ -17,6 +17,7 @@ declare const MultiSelect: import("svelte").Component<{
|
|
|
17
17
|
name?: string;
|
|
18
18
|
id?: string;
|
|
19
19
|
size?: string;
|
|
20
|
+
animateFocus?: boolean;
|
|
20
21
|
onchange: any;
|
|
21
22
|
}, {}, "value">;
|
|
22
23
|
type $$ComponentProps = {
|
|
@@ -33,6 +34,7 @@ type $$ComponentProps = {
|
|
|
33
34
|
name?: string;
|
|
34
35
|
id?: string;
|
|
35
36
|
size?: string;
|
|
37
|
+
animateFocus?: boolean;
|
|
36
38
|
onchange: any;
|
|
37
39
|
};
|
|
38
40
|
//# sourceMappingURL=MultiSelect.svelte.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelect.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/MultiSelect.svelte.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"MultiSelect.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/MultiSelect.svelte.js"],"names":[],"mappings":";;;;;AA+NA;YApN6B,GAAG,EAAE;YAAU,GAAG,EAAE;kBAAgB,MAAM;YAAU,MAAM;eAAa,OAAO;eAAa,OAAO;YAAU,MAAM;gBAAc,OAAO;qBAAmB,OAAO;mBAAiB,OAAO;WAAS,MAAM;SAAO,MAAM;WAAS,MAAM;mBAAiB,OAAO;cAAY,GAAG;gBAoN9O;wBApNvC;IAAE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE"}
|
|
@@ -50,33 +50,37 @@ describe('OTPInput Component', () => {
|
|
|
50
50
|
});
|
|
51
51
|
|
|
52
52
|
it('accepts digit input', async () => {
|
|
53
|
-
const { container, component } = render(OTPInput);
|
|
54
|
-
const inputs = container.querySelectorAll('input');
|
|
55
|
-
|
|
56
53
|
let changeEvent = null;
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
const { container } = render(OTPInput, {
|
|
55
|
+
props: {
|
|
56
|
+
onchange: (e) => {
|
|
57
|
+
changeEvent = e;
|
|
58
|
+
},
|
|
59
|
+
},
|
|
59
60
|
});
|
|
61
|
+
const inputs = container.querySelectorAll('input');
|
|
60
62
|
|
|
61
63
|
await fireEvent.input(inputs[0], { target: { value: '5' } });
|
|
62
64
|
|
|
63
65
|
expect(changeEvent).toBeTruthy();
|
|
64
|
-
expect(changeEvent.
|
|
66
|
+
expect(changeEvent.value[0]).toBe('5');
|
|
65
67
|
});
|
|
66
68
|
|
|
67
69
|
it('rejects non-digit input', async () => {
|
|
68
|
-
const { container, component } = render(OTPInput);
|
|
69
|
-
const inputs = container.querySelectorAll('input');
|
|
70
|
-
|
|
71
70
|
let changeEvent = null;
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
const { container } = render(OTPInput, {
|
|
72
|
+
props: {
|
|
73
|
+
onchange: (e) => {
|
|
74
|
+
changeEvent = e;
|
|
75
|
+
},
|
|
76
|
+
},
|
|
74
77
|
});
|
|
78
|
+
const inputs = container.querySelectorAll('input');
|
|
75
79
|
|
|
76
80
|
await fireEvent.input(inputs[0], { target: { value: 'a' } });
|
|
77
81
|
|
|
78
82
|
// Change event should not include the non-digit
|
|
79
|
-
expect(changeEvent?.
|
|
83
|
+
expect(changeEvent?.value[0] || '').toBe('');
|
|
80
84
|
});
|
|
81
85
|
|
|
82
86
|
it('auto-advances to next input on valid digit', async () => {
|
|
@@ -91,13 +95,15 @@ describe('OTPInput Component', () => {
|
|
|
91
95
|
});
|
|
92
96
|
|
|
93
97
|
it('dispatches complete event when all digits entered', async () => {
|
|
94
|
-
const { container, component } = render(OTPInput);
|
|
95
|
-
const inputs = container.querySelectorAll('input');
|
|
96
|
-
|
|
97
98
|
let completeEvent = null;
|
|
98
|
-
|
|
99
|
-
|
|
99
|
+
const { container } = render(OTPInput, {
|
|
100
|
+
props: {
|
|
101
|
+
oncomplete: (e) => {
|
|
102
|
+
completeEvent = e;
|
|
103
|
+
},
|
|
104
|
+
},
|
|
100
105
|
});
|
|
106
|
+
const inputs = container.querySelectorAll('input');
|
|
101
107
|
|
|
102
108
|
// Fill all inputs
|
|
103
109
|
for (let i = 0; i < 6; i++) {
|
|
@@ -105,7 +111,7 @@ describe('OTPInput Component', () => {
|
|
|
105
111
|
}
|
|
106
112
|
|
|
107
113
|
expect(completeEvent).toBeTruthy();
|
|
108
|
-
expect(completeEvent.
|
|
114
|
+
expect(completeEvent.code).toBe('123456');
|
|
109
115
|
});
|
|
110
116
|
|
|
111
117
|
it('moves focus back on backspace when current input is empty', async () => {
|
|
@@ -139,13 +145,15 @@ describe('OTPInput Component', () => {
|
|
|
139
145
|
|
|
140
146
|
it('handles paste of complete code', async () => {
|
|
141
147
|
vi.useFakeTimers();
|
|
142
|
-
const { container, component } = render(OTPInput);
|
|
143
|
-
const inputs = container.querySelectorAll('input');
|
|
144
|
-
|
|
145
148
|
let completeEvent = null;
|
|
146
|
-
|
|
147
|
-
|
|
149
|
+
const { container } = render(OTPInput, {
|
|
150
|
+
props: {
|
|
151
|
+
oncomplete: (e) => {
|
|
152
|
+
completeEvent = e;
|
|
153
|
+
},
|
|
154
|
+
},
|
|
148
155
|
});
|
|
156
|
+
const inputs = container.querySelectorAll('input');
|
|
149
157
|
|
|
150
158
|
await fireEvent.paste(inputs[0], {
|
|
151
159
|
clipboardData: { getData: () => '123456' },
|
|
@@ -154,18 +162,20 @@ describe('OTPInput Component', () => {
|
|
|
154
162
|
vi.advanceTimersByTime(150);
|
|
155
163
|
|
|
156
164
|
expect(completeEvent).toBeTruthy();
|
|
157
|
-
expect(completeEvent.
|
|
165
|
+
expect(completeEvent.code).toBe('123456');
|
|
158
166
|
vi.useRealTimers();
|
|
159
167
|
});
|
|
160
168
|
|
|
161
169
|
it('ignores paste if code length does not match', async () => {
|
|
162
|
-
const { container, component } = render(OTPInput);
|
|
163
|
-
const inputs = container.querySelectorAll('input');
|
|
164
|
-
|
|
165
170
|
let completeEvent = null;
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
const { container } = render(OTPInput, {
|
|
172
|
+
props: {
|
|
173
|
+
oncomplete: (e) => {
|
|
174
|
+
completeEvent = e;
|
|
175
|
+
},
|
|
176
|
+
},
|
|
168
177
|
});
|
|
178
|
+
const inputs = container.querySelectorAll('input');
|
|
169
179
|
|
|
170
180
|
await fireEvent.paste(inputs[0], {
|
|
171
181
|
clipboardData: { getData: () => '12345' }, // Only 5 digits
|
|
@@ -176,13 +186,15 @@ describe('OTPInput Component', () => {
|
|
|
176
186
|
|
|
177
187
|
it('strips non-digits from pasted content', async () => {
|
|
178
188
|
vi.useFakeTimers();
|
|
179
|
-
const { container, component } = render(OTPInput);
|
|
180
|
-
const inputs = container.querySelectorAll('input');
|
|
181
|
-
|
|
182
189
|
let completeEvent = null;
|
|
183
|
-
|
|
184
|
-
|
|
190
|
+
const { container } = render(OTPInput, {
|
|
191
|
+
props: {
|
|
192
|
+
oncomplete: (e) => {
|
|
193
|
+
completeEvent = e;
|
|
194
|
+
},
|
|
195
|
+
},
|
|
185
196
|
});
|
|
197
|
+
const inputs = container.querySelectorAll('input');
|
|
186
198
|
|
|
187
199
|
await fireEvent.paste(inputs[0], {
|
|
188
200
|
clipboardData: { getData: () => '1-2-3-4-5-6' }, // Code with dashes
|
|
@@ -191,7 +203,7 @@ describe('OTPInput Component', () => {
|
|
|
191
203
|
vi.advanceTimersByTime(150);
|
|
192
204
|
|
|
193
205
|
expect(completeEvent).toBeTruthy();
|
|
194
|
-
expect(completeEvent.
|
|
206
|
+
expect(completeEvent.code).toBe('123456');
|
|
195
207
|
vi.useRealTimers();
|
|
196
208
|
});
|
|
197
209
|
|
|
@@ -217,13 +229,14 @@ describe('OTPInput Component', () => {
|
|
|
217
229
|
expect(instructions.classList.contains('sr-only')).toBe(true);
|
|
218
230
|
});
|
|
219
231
|
|
|
220
|
-
it('initializes value array when length changes', () => {
|
|
221
|
-
const { container,
|
|
232
|
+
it('initializes value array when length changes', async () => {
|
|
233
|
+
const { container, rerender } = render(OTPInput, { props: { length: 4 } });
|
|
222
234
|
let inputs = container.querySelectorAll('input');
|
|
223
235
|
expect(inputs.length).toBe(4);
|
|
224
236
|
|
|
225
|
-
|
|
226
|
-
|
|
237
|
+
await rerender({ length: 8 });
|
|
238
|
+
inputs = container.querySelectorAll('input');
|
|
239
|
+
expect(inputs.length).toBe(8);
|
|
227
240
|
});
|
|
228
241
|
|
|
229
242
|
it('exposes focus method', () => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasswordInput.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/recipes/inputs/PasswordInput.spec.js"],"names":[],"mappings":""}
|