sveltacular 0.0.76 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +142 -15
- package/dist/forms/base-input-wrapper.svelte +99 -0
- package/dist/forms/base-input-wrapper.svelte.d.ts +15 -0
- package/dist/forms/bool-box/bool-box.svelte +30 -17
- package/dist/forms/bool-box/bool-box.svelte.d.ts +9 -21
- package/dist/forms/button/button.svelte +153 -89
- package/dist/forms/button/button.svelte.d.ts +25 -29
- package/dist/forms/check-box/check-box-group.svelte +63 -29
- package/dist/forms/check-box/check-box-group.svelte.d.ts +11 -27
- package/dist/forms/check-box/check-box.svelte +57 -33
- package/dist/forms/check-box/check-box.svelte.d.ts +15 -25
- package/dist/forms/check-box/index.d.ts +2 -0
- package/dist/forms/check-box/index.js +2 -0
- package/dist/forms/combo/new-or-existing-combo.svelte +37 -18
- package/dist/forms/combo/new-or-existing-combo.svelte.d.ts +15 -25
- package/dist/forms/combo-box/combo-box.svelte +655 -0
- package/dist/forms/combo-box/combo-box.svelte.d.ts +62 -0
- package/dist/forms/combo-box/index.d.ts +1 -0
- package/dist/forms/combo-box/index.js +1 -0
- package/dist/forms/date-box/date-box.svelte +80 -54
- package/dist/forms/date-box/date-box.svelte.d.ts +21 -32
- package/dist/forms/file-area/file-area.svelte +109 -68
- package/dist/forms/file-area/file-area.svelte.d.ts +12 -22
- package/dist/forms/file-box/file-box.svelte +40 -21
- package/dist/forms/file-box/file-box.svelte.d.ts +14 -25
- package/dist/forms/form-field.svelte +18 -15
- package/dist/forms/form-field.svelte.d.ts +8 -18
- package/dist/forms/form-footer.svelte +6 -3
- package/dist/forms/form-footer.svelte.d.ts +6 -26
- package/dist/forms/form-header.svelte +15 -4
- package/dist/forms/form-header.svelte.d.ts +8 -18
- package/dist/forms/form-label.svelte +15 -6
- package/dist/forms/form-label.svelte.d.ts +8 -19
- package/dist/forms/form-section.svelte +15 -4
- package/dist/forms/form-section.svelte.d.ts +8 -18
- package/dist/forms/form.svelte +30 -13
- package/dist/forms/form.svelte.d.ts +11 -22
- package/dist/forms/index.d.ts +26 -0
- package/dist/forms/index.js +31 -0
- package/dist/forms/info-box/info-box.svelte +19 -8
- package/dist/forms/info-box/info-box.svelte.d.ts +8 -19
- package/dist/forms/list-box/index.d.ts +2 -0
- package/dist/forms/list-box/index.js +1 -0
- package/dist/forms/list-box/list-box.svelte +190 -118
- package/dist/forms/list-box/list-box.svelte.d.ts +16 -26
- package/dist/forms/money-box/money-box.svelte +223 -190
- package/dist/forms/money-box/money-box.svelte.d.ts +16 -28
- package/dist/forms/number-box/number-box.svelte +84 -67
- package/dist/forms/number-box/number-box.svelte.d.ts +17 -28
- package/dist/forms/phone-box/index.d.ts +1 -0
- package/dist/forms/phone-box/index.js +1 -0
- package/dist/forms/phone-box/phone-box.svelte +152 -122
- package/dist/forms/phone-box/phone-box.svelte.d.ts +8 -20
- package/dist/forms/radio-group/index.d.ts +2 -0
- package/dist/forms/radio-group/index.js +2 -0
- package/dist/forms/radio-group/radio-box.svelte +23 -8
- package/dist/forms/radio-group/radio-box.svelte.d.ts +10 -19
- package/dist/forms/radio-group/radio-group.svelte +27 -13
- package/dist/forms/radio-group/radio-group.svelte.d.ts +10 -21
- package/dist/forms/slider/slider.svelte +210 -0
- package/dist/forms/slider/slider.svelte.d.ts +17 -0
- package/dist/forms/switch-box/switch-box.svelte +35 -21
- package/dist/forms/switch-box/switch-box.svelte.d.ts +9 -20
- package/dist/forms/text-area/text-area.svelte +89 -15
- package/dist/forms/text-area/text-area.svelte.d.ts +15 -23
- package/dist/forms/text-box/text-box.svelte +253 -75
- package/dist/forms/text-box/text-box.svelte.d.ts +28 -36
- package/dist/forms/time-box/time-box.svelte +67 -0
- package/dist/forms/time-box/time-box.svelte.d.ts +12 -0
- package/dist/forms/url-box/url-box.svelte +32 -18
- package/dist/forms/url-box/url-box.svelte.d.ts +9 -20
- package/dist/forms/validation.d.ts +60 -0
- package/dist/forms/validation.js +123 -0
- package/dist/generic/address/address.svelte +22 -13
- package/dist/generic/address/address.svelte.d.ts +9 -19
- package/dist/generic/avatar/avatar.svelte +86 -0
- package/dist/generic/avatar/avatar.svelte.d.ts +10 -0
- package/dist/generic/badge/badge.svelte +82 -0
- package/dist/generic/badge/badge.svelte.d.ts +11 -0
- package/dist/generic/card/card-container.svelte +41 -13
- package/dist/generic/card/card-container.svelte.d.ts +8 -18
- package/dist/generic/card/card.svelte +47 -29
- package/dist/generic/card/card.svelte.d.ts +9 -19
- package/dist/generic/card/index.d.ts +3 -0
- package/dist/generic/card/index.js +2 -0
- package/dist/generic/chip/chip.svelte +90 -0
- package/dist/generic/chip/chip.svelte.d.ts +11 -0
- package/dist/generic/date/date-time.svelte +86 -64
- package/dist/generic/date/date-time.svelte.d.ts +10 -20
- package/dist/generic/divider/divider.svelte.d.ts +22 -19
- package/dist/generic/dot/dot.svelte +13 -4
- package/dist/generic/dot/dot.svelte.d.ts +7 -17
- package/dist/generic/dropdown-item/dropdown-item.svelte +24 -12
- package/dist/generic/dropdown-item/dropdown-item.svelte.d.ts +10 -21
- package/dist/generic/email/email.svelte +6 -4
- package/dist/generic/email/email.svelte.d.ts +5 -15
- package/dist/generic/empty/empty.svelte +57 -26
- package/dist/generic/empty/empty.svelte.d.ts +11 -21
- package/dist/generic/header/header.svelte +26 -10
- package/dist/generic/header/header.svelte.d.ts +10 -20
- package/dist/generic/index.d.ts +28 -0
- package/dist/generic/index.js +31 -0
- package/dist/generic/link/link.svelte +20 -7
- package/dist/generic/link/link.svelte.d.ts +11 -21
- package/dist/generic/list/index.d.ts +4 -0
- package/dist/generic/list/index.js +3 -0
- package/dist/generic/list/list-item.svelte +17 -13
- package/dist/generic/list/list-item.svelte.d.ts +6 -15
- package/dist/generic/list/list.d.ts +2 -2
- package/dist/generic/list/list.svelte +28 -15
- package/dist/generic/list/list.svelte.d.ts +9 -19
- package/dist/generic/menu/menu.svelte +163 -57
- package/dist/generic/menu/menu.svelte.d.ts +16 -24
- package/dist/generic/notice/notice.svelte +119 -81
- package/dist/generic/notice/notice.svelte.d.ts +17 -26
- package/dist/generic/overlay.svelte +40 -14
- package/dist/generic/overlay.svelte.d.ts +9 -19
- package/dist/generic/panel/panel.svelte +16 -6
- package/dist/generic/panel/panel.svelte.d.ts +8 -18
- package/dist/generic/phone/phone.svelte +30 -24
- package/dist/generic/phone/phone.svelte.d.ts +6 -16
- package/dist/generic/pill/pill.svelte +47 -33
- package/dist/generic/pill/pill.svelte.d.ts +10 -21
- package/dist/generic/popover/popover.svelte +226 -0
- package/dist/generic/popover/popover.svelte.d.ts +15 -0
- package/dist/generic/rating/rating.svelte +85 -0
- package/dist/generic/rating/rating.svelte.d.ts +11 -0
- package/dist/generic/scorecard/scorecard.svelte +34 -21
- package/dist/generic/scorecard/scorecard.svelte.d.ts +9 -19
- package/dist/generic/section/section.svelte +28 -9
- package/dist/generic/section/section.svelte.d.ts +11 -21
- package/dist/generic/spinner/spinner.svelte +64 -0
- package/dist/generic/spinner/spinner.svelte.d.ts +8 -0
- package/dist/generic/theme-provider/index.d.ts +1 -0
- package/dist/generic/theme-provider/index.js +1 -0
- package/dist/generic/theme-provider/theme-provider-demo.svelte +182 -0
- package/dist/generic/theme-provider/theme-provider-demo.svelte.d.ts +3 -0
- package/dist/generic/theme-provider/theme-provider.svelte +83 -0
- package/dist/generic/theme-provider/theme-provider.svelte.d.ts +44 -0
- package/dist/generic/toaster/toaster.svelte +31 -6
- package/dist/generic/toaster/toaster.svelte.d.ts +7 -15
- package/dist/generic/tooltip/tooltip.svelte +389 -0
- package/dist/generic/tooltip/tooltip.svelte.d.ts +21 -0
- package/dist/helpers/ago.d.ts +7 -1
- package/dist/helpers/ago.js +6 -0
- package/dist/helpers/animation-actions.d.ts +124 -0
- package/dist/helpers/animation-actions.js +299 -0
- package/dist/helpers/animations.d.ts +198 -0
- package/dist/helpers/animations.js +280 -0
- package/dist/helpers/announcer.d.ts +118 -0
- package/dist/helpers/announcer.js +250 -0
- package/dist/helpers/copy-to-clipboard.svelte.d.ts +5 -0
- package/dist/helpers/copy-to-clipboard.svelte.js +28 -0
- package/dist/helpers/debounce.d.ts +7 -0
- package/dist/helpers/debounce.js +7 -0
- package/dist/helpers/focus.d.ts +123 -0
- package/dist/helpers/focus.js +335 -0
- package/dist/helpers/fuzzy-search.d.ts +41 -0
- package/dist/helpers/fuzzy-search.js +114 -0
- package/dist/helpers/index.d.ts +24 -0
- package/dist/helpers/index.js +24 -0
- package/dist/helpers/navigate-to.d.ts +4 -0
- package/dist/helpers/navigate-to.js +4 -0
- package/dist/helpers/positioning.d.ts +97 -0
- package/dist/helpers/positioning.js +230 -0
- package/dist/helpers/round-to-decimals.d.ts +7 -5
- package/dist/helpers/round-to-decimals.js +7 -5
- package/dist/helpers/spring.svelte.d.ts +97 -0
- package/dist/helpers/spring.svelte.js +216 -0
- package/dist/helpers/subscribable.d.ts +1 -2
- package/dist/helpers/theme.svelte.d.ts +63 -0
- package/dist/helpers/theme.svelte.js +123 -0
- package/dist/helpers/unique-id.d.ts +4 -0
- package/dist/helpers/unique-id.js +4 -0
- package/dist/helpers/use-position.svelte.d.ts +96 -0
- package/dist/helpers/use-position.svelte.js +189 -0
- package/dist/helpers/use-virtual-list.svelte.d.ts +121 -0
- package/dist/helpers/use-virtual-list.svelte.js +239 -0
- package/dist/icons/angle-right-icon.svelte +2 -1
- package/dist/icons/angle-right-icon.svelte.d.ts +16 -12
- package/dist/icons/angle-up-icon.svelte.d.ts +22 -19
- package/dist/icons/check-icon.svelte.d.ts +22 -19
- package/dist/icons/copy-icon.svelte +46 -0
- package/dist/icons/copy-icon.svelte.d.ts +6 -0
- package/dist/icons/envelope-icon.svelte.d.ts +22 -19
- package/dist/icons/folder-open-icon.svelte.d.ts +22 -19
- package/dist/icons/hamburger-icon.svelte.d.ts +22 -19
- package/dist/icons/home-icon.svelte +2 -1
- package/dist/icons/home-icon.svelte.d.ts +16 -12
- package/dist/icons/index.d.ts +13 -0
- package/dist/icons/index.js +13 -0
- package/dist/icons/link-icon.svelte.d.ts +22 -19
- package/dist/icons/mobile-phone-icon.svelte.d.ts +22 -19
- package/dist/icons/phone-icon.svelte.d.ts +22 -19
- package/dist/icons/svg-icon.svelte +46 -12
- package/dist/icons/svg-icon.svelte.d.ts +13 -23
- package/dist/icons/upload-icon.svelte.d.ts +22 -19
- package/dist/images/icon.svelte +9 -3
- package/dist/images/icon.svelte.d.ts +6 -16
- package/dist/images/image.svelte +28 -10
- package/dist/images/image.svelte.d.ts +14 -26
- package/dist/images/index.d.ts +2 -0
- package/dist/images/index.js +2 -0
- package/dist/index.d.ts +13 -122
- package/dist/index.js +27 -135
- package/dist/layout/flex-col.svelte +65 -22
- package/dist/layout/flex-col.svelte.d.ts +12 -22
- package/dist/layout/flex-item.svelte +13 -3
- package/dist/layout/flex-item.svelte.d.ts +8 -18
- package/dist/layout/flex-row.svelte +70 -21
- package/dist/layout/flex-row.svelte.d.ts +14 -24
- package/dist/layout/grid.svelte +7 -1
- package/dist/layout/grid.svelte.d.ts +6 -26
- package/dist/layout/index.d.ts +4 -0
- package/dist/layout/index.js +4 -0
- package/dist/modals/alert.svelte +42 -28
- package/dist/modals/alert.svelte.d.ts +13 -24
- package/dist/modals/confirm.svelte +54 -37
- package/dist/modals/confirm.svelte.d.ts +16 -27
- package/dist/modals/dialog-body.svelte +10 -4
- package/dist/modals/dialog-body.svelte.d.ts +6 -26
- package/dist/modals/dialog-close-button.svelte +15 -9
- package/dist/modals/dialog-close-button.svelte.d.ts +6 -17
- package/dist/modals/dialog-footer.svelte +6 -3
- package/dist/modals/dialog-footer.svelte.d.ts +6 -26
- package/dist/modals/dialog-header.svelte +13 -1
- package/dist/modals/dialog-header.svelte.d.ts +7 -26
- package/dist/modals/dialog-window.svelte +42 -14
- package/dist/modals/dialog-window.svelte.d.ts +9 -17
- package/dist/modals/index.d.ts +9 -0
- package/dist/modals/index.js +9 -0
- package/dist/modals/modal.svelte +88 -25
- package/dist/modals/modal.svelte.d.ts +14 -22
- package/dist/modals/prompt.svelte +71 -50
- package/dist/modals/prompt.svelte.d.ts +19 -30
- package/dist/navigation/accordion/accordion.svelte +104 -0
- package/dist/navigation/accordion/accordion.svelte.d.ts +9 -0
- package/dist/navigation/app-bar/app-bar.svelte +26 -20
- package/dist/navigation/app-bar/app-bar.svelte.d.ts +10 -20
- package/dist/navigation/app-bar/app-branding.svelte +10 -5
- package/dist/navigation/app-bar/app-branding.svelte.d.ts +6 -15
- package/dist/navigation/app-bar/app-logo.svelte +20 -5
- package/dist/navigation/app-bar/app-logo.svelte.d.ts +9 -19
- package/dist/navigation/app-bar/app-nav-item.svelte +26 -14
- package/dist/navigation/app-bar/app-nav-item.svelte.d.ts +9 -20
- package/dist/navigation/app-bar/app-nav.svelte +39 -12
- package/dist/navigation/app-bar/app-nav.svelte.d.ts +8 -18
- package/dist/navigation/app-bar/index.d.ts +5 -0
- package/dist/navigation/app-bar/index.js +5 -0
- package/dist/navigation/breadcrumbs/breadcrumbs.svelte +54 -28
- package/dist/navigation/breadcrumbs/breadcrumbs.svelte.d.ts +12 -21
- package/dist/navigation/command-palette/command-palette.svelte +758 -0
- package/dist/navigation/command-palette/command-palette.svelte.d.ts +65 -0
- package/dist/navigation/command-palette/index.d.ts +2 -0
- package/dist/navigation/command-palette/index.js +1 -0
- package/dist/navigation/context-menu/README.md +146 -0
- package/dist/navigation/context-menu/context-menu-divider.svelte +21 -0
- package/dist/navigation/context-menu/context-menu-divider.svelte.d.ts +18 -0
- package/dist/navigation/context-menu/context-menu-item.svelte +268 -0
- package/dist/navigation/context-menu/context-menu-item.svelte.d.ts +19 -0
- package/dist/navigation/context-menu/context-menu.svelte +226 -0
- package/dist/navigation/context-menu/context-menu.svelte.d.ts +38 -0
- package/dist/navigation/context-menu/index.d.ts +3 -0
- package/dist/navigation/context-menu/index.js +3 -0
- package/dist/navigation/drawer/drawer.svelte +137 -0
- package/dist/navigation/drawer/drawer.svelte.d.ts +11 -0
- package/dist/navigation/dropdown-button/dropdown-button.svelte +58 -20
- package/dist/navigation/dropdown-button/dropdown-button.svelte.d.ts +10 -20
- package/dist/navigation/index.d.ts +11 -0
- package/dist/navigation/index.js +14 -0
- package/dist/navigation/pagination/pagination.svelte +55 -42
- package/dist/navigation/pagination/pagination.svelte.d.ts +10 -21
- package/dist/navigation/side-bar/side-bar.svelte +18 -9
- package/dist/navigation/side-bar/side-bar.svelte.d.ts +7 -17
- package/dist/navigation/tabs/index.d.ts +4 -0
- package/dist/navigation/tabs/index.js +3 -0
- package/dist/navigation/tabs/tab-context.d.ts +12 -6
- package/dist/navigation/tabs/tab-group.svelte +268 -55
- package/dist/navigation/tabs/tab-group.svelte.d.ts +9 -20
- package/dist/navigation/tabs/tab.svelte +64 -34
- package/dist/navigation/tabs/tab.svelte.d.ts +11 -22
- package/dist/navigation/wizard/index.d.ts +3 -0
- package/dist/navigation/wizard/index.js +2 -0
- package/dist/navigation/wizard/wizard-context.d.ts +13 -8
- package/dist/navigation/wizard/wizard-step.svelte +38 -15
- package/dist/navigation/wizard/wizard-step.svelte.d.ts +8 -18
- package/dist/navigation/wizard/wizard.svelte +123 -89
- package/dist/navigation/wizard/wizard.svelte.d.ts +15 -26
- package/dist/placeholders/index.d.ts +6 -0
- package/dist/placeholders/index.js +6 -0
- package/dist/placeholders/loading.svelte +39 -23
- package/dist/placeholders/loading.svelte.d.ts +10 -17
- package/dist/placeholders/progress.svelte +7 -6
- package/dist/placeholders/progress.svelte.d.ts +5 -15
- package/dist/placeholders/skeleton-input.svelte +66 -38
- package/dist/placeholders/skeleton-input.svelte.d.ts +5 -15
- package/dist/placeholders/skeleton-paragraph.svelte +25 -0
- package/dist/placeholders/skeleton-paragraph.svelte.d.ts +8 -0
- package/dist/placeholders/skeleton-table.svelte +75 -0
- package/dist/placeholders/skeleton-table.svelte.d.ts +8 -0
- package/dist/placeholders/skeleton-text.svelte +46 -16
- package/dist/placeholders/skeleton-text.svelte.d.ts +7 -17
- package/dist/tables/cell-renderers.d.ts +24 -0
- package/dist/tables/cell-renderers.js +228 -0
- package/dist/tables/data-grid.svelte +332 -135
- package/dist/tables/data-grid.svelte.d.ts +34 -33
- package/dist/tables/index.d.ts +10 -0
- package/dist/tables/index.js +12 -0
- package/dist/tables/table-caption.svelte +13 -4
- package/dist/tables/table-caption.svelte.d.ts +8 -18
- package/dist/tables/table-cell.svelte +45 -15
- package/dist/tables/table-cell.svelte.d.ts +10 -19
- package/dist/tables/table-context.svelte.d.ts +32 -0
- package/dist/tables/table-context.svelte.js +160 -0
- package/dist/tables/table-header-cell.svelte +158 -19
- package/dist/tables/table-header-cell.svelte.d.ts +15 -19
- package/dist/tables/table-header.svelte +31 -6
- package/dist/tables/table-header.svelte.d.ts +7 -26
- package/dist/tables/table-row.svelte +87 -7
- package/dist/tables/table-row.svelte.d.ts +10 -26
- package/dist/tables/table.svelte +61 -2
- package/dist/tables/table.svelte.d.ts +13 -26
- package/dist/test-utils/accessibility-helpers.d.ts +80 -0
- package/dist/test-utils/accessibility-helpers.js +220 -0
- package/dist/test-utils/index.d.ts +8 -0
- package/dist/test-utils/index.js +8 -0
- package/dist/test-utils/mock-helpers.d.ts +68 -0
- package/dist/test-utils/mock-helpers.js +165 -0
- package/dist/test-utils/render-helpers.d.ts +55 -0
- package/dist/test-utils/render-helpers.js +114 -0
- package/dist/test-utils/setup.d.ts +5 -0
- package/dist/test-utils/setup.js +91 -0
- package/dist/test-utils/test-data.d.ts +102 -0
- package/dist/test-utils/test-data.js +99 -0
- package/dist/timeline/index.d.ts +2 -0
- package/dist/timeline/index.js +2 -0
- package/dist/timeline/timeline-item.svelte +26 -9
- package/dist/timeline/timeline-item.svelte.d.ts +13 -23
- package/dist/timeline/timeline.svelte +12 -6
- package/dist/timeline/timeline.svelte.d.ts +6 -26
- package/dist/types/data.d.ts +61 -0
- package/dist/types/date.d.ts +1 -1
- package/dist/types/form.d.ts +20 -2
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/dist/types/size.d.ts +22 -0
- package/dist/types/size.js +22 -0
- package/dist/typography/code-block.svelte +89 -10
- package/dist/typography/code-block.svelte.d.ts +7 -17
- package/dist/typography/code.svelte +89 -0
- package/dist/typography/code.svelte.d.ts +7 -0
- package/dist/typography/headline.svelte +29 -9
- package/dist/typography/headline.svelte.d.ts +8 -18
- package/dist/typography/index.d.ts +6 -0
- package/dist/typography/index.js +6 -0
- package/dist/typography/paragraph.svelte +18 -10
- package/dist/typography/paragraph.svelte.d.ts +6 -26
- package/dist/typography/subtitle.svelte +18 -4
- package/dist/typography/subtitle.svelte.d.ts +8 -18
- package/dist/typography/text.svelte +20 -5
- package/dist/typography/text.svelte.d.ts +9 -19
- package/package.json +46 -36
- package/dist/navigation/accordian/accordian.svelte +0 -62
- package/dist/navigation/accordian/accordian.svelte.d.ts +0 -19
- package/dist/tables/table-body.svelte +0 -3
- package/dist/tables/table-body.svelte.d.ts +0 -27
- package/dist/tables/table-footer-cell.svelte +0 -22
- package/dist/tables/table-footer-cell.svelte.d.ts +0 -18
- package/dist/tables/table-footer-row.svelte +0 -3
- package/dist/tables/table-footer-row.svelte.d.ts +0 -27
- package/dist/tables/table-footer.svelte +0 -13
- package/dist/tables/table-footer.svelte.d.ts +0 -27
- package/dist/tables/table-header-row.svelte +0 -4
- package/dist/tables/table-header-row.svelte.d.ts +0 -27
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock helpers for testing
|
|
3
|
+
*/
|
|
4
|
+
import { vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
/**
|
|
6
|
+
* Mock a function with optional implementation
|
|
7
|
+
*/
|
|
8
|
+
export function mockFunction(implementation) {
|
|
9
|
+
return implementation ? vi.fn(implementation) : vi.fn();
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Mock console methods to suppress output during tests
|
|
13
|
+
*/
|
|
14
|
+
export function mockConsole() {
|
|
15
|
+
const originalConsole = { ...console };
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
console.log = vi.fn();
|
|
18
|
+
console.warn = vi.fn();
|
|
19
|
+
console.error = vi.fn();
|
|
20
|
+
console.info = vi.fn();
|
|
21
|
+
});
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
Object.assign(console, originalConsole);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Mock fetch API
|
|
28
|
+
*/
|
|
29
|
+
export function mockFetch(response, options) {
|
|
30
|
+
const mockResponse = {
|
|
31
|
+
ok: options?.ok ?? true,
|
|
32
|
+
status: options?.status ?? 200,
|
|
33
|
+
json: async () => response,
|
|
34
|
+
text: async () => JSON.stringify(response),
|
|
35
|
+
blob: async () => new Blob([JSON.stringify(response)]),
|
|
36
|
+
arrayBuffer: async () => new ArrayBuffer(0)
|
|
37
|
+
};
|
|
38
|
+
global.fetch = vi.fn().mockResolvedValue(mockResponse);
|
|
39
|
+
return global.fetch;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Mock setTimeout/setInterval for testing
|
|
43
|
+
*/
|
|
44
|
+
export function mockTimers() {
|
|
45
|
+
beforeEach(() => {
|
|
46
|
+
vi.useFakeTimers();
|
|
47
|
+
});
|
|
48
|
+
afterEach(() => {
|
|
49
|
+
vi.useRealTimers();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Mock Date.now() for consistent timestamps
|
|
54
|
+
*/
|
|
55
|
+
export function mockDateNow(timestamp = 1609459200000) {
|
|
56
|
+
const originalDateNow = Date.now;
|
|
57
|
+
beforeEach(() => {
|
|
58
|
+
Date.now = vi.fn(() => timestamp);
|
|
59
|
+
});
|
|
60
|
+
afterEach(() => {
|
|
61
|
+
Date.now = originalDateNow;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Mock window.location
|
|
66
|
+
*/
|
|
67
|
+
export function mockLocation(url = 'http://localhost:3000') {
|
|
68
|
+
delete window.location;
|
|
69
|
+
window.location = new URL(url);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Mock clipboard API
|
|
73
|
+
*/
|
|
74
|
+
export function mockClipboard() {
|
|
75
|
+
const mockClipboard = {
|
|
76
|
+
writeText: vi.fn().mockResolvedValue(undefined),
|
|
77
|
+
readText: vi.fn().mockResolvedValue(''),
|
|
78
|
+
write: vi.fn().mockResolvedValue(undefined),
|
|
79
|
+
read: vi.fn().mockResolvedValue([])
|
|
80
|
+
};
|
|
81
|
+
Object.defineProperty(navigator, 'clipboard', {
|
|
82
|
+
value: mockClipboard,
|
|
83
|
+
writable: true
|
|
84
|
+
});
|
|
85
|
+
return mockClipboard;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Mock getBoundingClientRect for positioning tests
|
|
89
|
+
*/
|
|
90
|
+
export function mockGetBoundingClientRect(element, rect) {
|
|
91
|
+
const defaultRect = {
|
|
92
|
+
x: 0,
|
|
93
|
+
y: 0,
|
|
94
|
+
width: 100,
|
|
95
|
+
height: 50,
|
|
96
|
+
top: 0,
|
|
97
|
+
right: 100,
|
|
98
|
+
bottom: 50,
|
|
99
|
+
left: 0,
|
|
100
|
+
toJSON: () => ({})
|
|
101
|
+
};
|
|
102
|
+
element.getBoundingClientRect = vi.fn(() => ({ ...defaultRect, ...rect }));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Mock viewport size
|
|
106
|
+
*/
|
|
107
|
+
export function mockViewport(width = 1024, height = 768) {
|
|
108
|
+
Object.defineProperty(window, 'innerWidth', {
|
|
109
|
+
writable: true,
|
|
110
|
+
configurable: true,
|
|
111
|
+
value: width
|
|
112
|
+
});
|
|
113
|
+
Object.defineProperty(window, 'innerHeight', {
|
|
114
|
+
writable: true,
|
|
115
|
+
configurable: true,
|
|
116
|
+
value: height
|
|
117
|
+
});
|
|
118
|
+
// Trigger resize event
|
|
119
|
+
window.dispatchEvent(new Event('resize'));
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Mock media query
|
|
123
|
+
*/
|
|
124
|
+
export function mockMediaQuery(query, matches = true) {
|
|
125
|
+
const mockMatchMedia = vi.fn().mockImplementation((q) => ({
|
|
126
|
+
matches: q === query ? matches : false,
|
|
127
|
+
media: q,
|
|
128
|
+
onchange: null,
|
|
129
|
+
addListener: vi.fn(),
|
|
130
|
+
removeListener: vi.fn(),
|
|
131
|
+
addEventListener: vi.fn(),
|
|
132
|
+
removeEventListener: vi.fn(),
|
|
133
|
+
dispatchEvent: vi.fn()
|
|
134
|
+
}));
|
|
135
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
136
|
+
writable: true,
|
|
137
|
+
value: mockMatchMedia
|
|
138
|
+
});
|
|
139
|
+
return mockMatchMedia;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Mock prefers-reduced-motion
|
|
143
|
+
*/
|
|
144
|
+
export function mockPrefersReducedMotion(enabled = true) {
|
|
145
|
+
mockMediaQuery('(prefers-reduced-motion: reduce)', enabled);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Mock prefers-color-scheme
|
|
149
|
+
*/
|
|
150
|
+
export function mockPrefersColorScheme(scheme = 'light') {
|
|
151
|
+
mockMediaQuery(`(prefers-color-scheme: ${scheme})`, true);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a mock file for file input testing
|
|
155
|
+
*/
|
|
156
|
+
export function createMockFile(name = 'test.txt', content = 'test content', type = 'text/plain') {
|
|
157
|
+
const blob = new Blob([content], { type });
|
|
158
|
+
return new File([blob], name, { type });
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create multiple mock files
|
|
162
|
+
*/
|
|
163
|
+
export function createMockFiles(count = 3) {
|
|
164
|
+
return Array.from({ length: count }, (_, i) => createMockFile(`file${i + 1}.txt`, `Content ${i + 1}`));
|
|
165
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render helpers for testing Svelte components
|
|
3
|
+
*/
|
|
4
|
+
import { type RenderResult } from '@testing-library/svelte';
|
|
5
|
+
import type { ComponentProps, Component } from 'svelte';
|
|
6
|
+
/**
|
|
7
|
+
* Enhanced render function with common test setup
|
|
8
|
+
*/
|
|
9
|
+
export declare function render<T extends Component>(component: T, options?: ComponentProps<T> & {
|
|
10
|
+
props?: ComponentProps<T>;
|
|
11
|
+
}): RenderResult<T>;
|
|
12
|
+
/**
|
|
13
|
+
* Wait for Svelte to update the DOM
|
|
14
|
+
*/
|
|
15
|
+
export declare function waitForSvelte(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Wait for multiple ticks (useful for animations or complex updates)
|
|
18
|
+
*/
|
|
19
|
+
export declare function waitForTicks(count?: number): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Wait for an element to appear in the DOM
|
|
22
|
+
*/
|
|
23
|
+
export declare function waitForElement(selector: string, timeout?: number): Promise<Element>;
|
|
24
|
+
/**
|
|
25
|
+
* Wait for an element to disappear from the DOM
|
|
26
|
+
*/
|
|
27
|
+
export declare function waitForElementToBeRemoved(selector: string, timeout?: number): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Simulate keyboard event
|
|
30
|
+
*/
|
|
31
|
+
export declare function createKeyboardEvent(type: 'keydown' | 'keyup' | 'keypress', key: string, options?: KeyboardEventInit): KeyboardEvent;
|
|
32
|
+
/**
|
|
33
|
+
* Simulate mouse event
|
|
34
|
+
*/
|
|
35
|
+
export declare function createMouseEvent(type: string, options?: MouseEventInit): MouseEvent;
|
|
36
|
+
/**
|
|
37
|
+
* Simulate focus event
|
|
38
|
+
*/
|
|
39
|
+
export declare function createFocusEvent(type: 'focus' | 'blur' | 'focusin' | 'focusout', options?: FocusEventInit): FocusEvent;
|
|
40
|
+
/**
|
|
41
|
+
* Get computed styles for an element
|
|
42
|
+
*/
|
|
43
|
+
export declare function getComputedStyle(element: Element): CSSStyleDeclaration;
|
|
44
|
+
/**
|
|
45
|
+
* Check if element has class
|
|
46
|
+
*/
|
|
47
|
+
export declare function hasClass(element: Element, className: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Check if element is visible
|
|
50
|
+
*/
|
|
51
|
+
export declare function isVisible(element: HTMLElement): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Check if element is disabled
|
|
54
|
+
*/
|
|
55
|
+
export declare function isDisabled(element: HTMLElement): boolean;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render helpers for testing Svelte components
|
|
3
|
+
*/
|
|
4
|
+
import { render as testingLibraryRender } from '@testing-library/svelte';
|
|
5
|
+
import { tick } from 'svelte';
|
|
6
|
+
/**
|
|
7
|
+
* Enhanced render function with common test setup
|
|
8
|
+
*/
|
|
9
|
+
export function render(component, options) {
|
|
10
|
+
const { props, ...rest } = options || {};
|
|
11
|
+
// @ts-expect-error - Testing library types are complex
|
|
12
|
+
return testingLibraryRender(component, { props: props || rest });
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Wait for Svelte to update the DOM
|
|
16
|
+
*/
|
|
17
|
+
export async function waitForSvelte() {
|
|
18
|
+
await tick();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wait for multiple ticks (useful for animations or complex updates)
|
|
22
|
+
*/
|
|
23
|
+
export async function waitForTicks(count = 2) {
|
|
24
|
+
for (let i = 0; i < count; i++) {
|
|
25
|
+
await tick();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Wait for an element to appear in the DOM
|
|
30
|
+
*/
|
|
31
|
+
export async function waitForElement(selector, timeout = 1000) {
|
|
32
|
+
const startTime = Date.now();
|
|
33
|
+
while (Date.now() - startTime < timeout) {
|
|
34
|
+
const element = document.querySelector(selector);
|
|
35
|
+
if (element) {
|
|
36
|
+
return element;
|
|
37
|
+
}
|
|
38
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Element "${selector}" not found within ${timeout}ms`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Wait for an element to disappear from the DOM
|
|
44
|
+
*/
|
|
45
|
+
export async function waitForElementToBeRemoved(selector, timeout = 1000) {
|
|
46
|
+
const startTime = Date.now();
|
|
47
|
+
while (Date.now() - startTime < timeout) {
|
|
48
|
+
const element = document.querySelector(selector);
|
|
49
|
+
if (!element) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`Element "${selector}" still present after ${timeout}ms`);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Simulate keyboard event
|
|
58
|
+
*/
|
|
59
|
+
export function createKeyboardEvent(type, key, options) {
|
|
60
|
+
return new KeyboardEvent(type, {
|
|
61
|
+
key,
|
|
62
|
+
bubbles: true,
|
|
63
|
+
cancelable: true,
|
|
64
|
+
...options
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Simulate mouse event
|
|
69
|
+
*/
|
|
70
|
+
export function createMouseEvent(type, options) {
|
|
71
|
+
return new MouseEvent(type, {
|
|
72
|
+
bubbles: true,
|
|
73
|
+
cancelable: true,
|
|
74
|
+
...options
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Simulate focus event
|
|
79
|
+
*/
|
|
80
|
+
export function createFocusEvent(type, options) {
|
|
81
|
+
return new FocusEvent(type, {
|
|
82
|
+
bubbles: true,
|
|
83
|
+
cancelable: true,
|
|
84
|
+
...options
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get computed styles for an element
|
|
89
|
+
*/
|
|
90
|
+
export function getComputedStyle(element) {
|
|
91
|
+
return window.getComputedStyle(element);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if element has class
|
|
95
|
+
*/
|
|
96
|
+
export function hasClass(element, className) {
|
|
97
|
+
return element.classList.contains(className);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if element is visible
|
|
101
|
+
*/
|
|
102
|
+
export function isVisible(element) {
|
|
103
|
+
const style = window.getComputedStyle(element);
|
|
104
|
+
return (style.display !== 'none' &&
|
|
105
|
+
style.visibility !== 'hidden' &&
|
|
106
|
+
style.opacity !== '0');
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Check if element is disabled
|
|
110
|
+
*/
|
|
111
|
+
export function isDisabled(element) {
|
|
112
|
+
return (element.hasAttribute('disabled') ||
|
|
113
|
+
element.getAttribute('aria-disabled') === 'true');
|
|
114
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest setup file
|
|
3
|
+
* Runs before all test files
|
|
4
|
+
*/
|
|
5
|
+
import '@testing-library/jest-dom';
|
|
6
|
+
import { vi } from 'vitest';
|
|
7
|
+
// Mock window.matchMedia
|
|
8
|
+
Object.defineProperty(window, 'matchMedia', {
|
|
9
|
+
writable: true,
|
|
10
|
+
value: vi.fn().mockImplementation((query) => ({
|
|
11
|
+
matches: false,
|
|
12
|
+
media: query,
|
|
13
|
+
onchange: null,
|
|
14
|
+
addListener: vi.fn(), // deprecated
|
|
15
|
+
removeListener: vi.fn(), // deprecated
|
|
16
|
+
addEventListener: vi.fn(),
|
|
17
|
+
removeEventListener: vi.fn(),
|
|
18
|
+
dispatchEvent: vi.fn()
|
|
19
|
+
}))
|
|
20
|
+
});
|
|
21
|
+
// Mock IntersectionObserver
|
|
22
|
+
global.IntersectionObserver = class IntersectionObserver {
|
|
23
|
+
constructor() { }
|
|
24
|
+
disconnect() { }
|
|
25
|
+
observe() { }
|
|
26
|
+
takeRecords() {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
unobserve() { }
|
|
30
|
+
};
|
|
31
|
+
// Mock ResizeObserver
|
|
32
|
+
global.ResizeObserver = class ResizeObserver {
|
|
33
|
+
constructor() { }
|
|
34
|
+
disconnect() { }
|
|
35
|
+
observe() { }
|
|
36
|
+
unobserve() { }
|
|
37
|
+
};
|
|
38
|
+
// Mock requestAnimationFrame
|
|
39
|
+
global.requestAnimationFrame = (cb) => {
|
|
40
|
+
return setTimeout(cb, 0);
|
|
41
|
+
};
|
|
42
|
+
global.cancelAnimationFrame = (id) => {
|
|
43
|
+
clearTimeout(id);
|
|
44
|
+
};
|
|
45
|
+
// Mock scrollTo
|
|
46
|
+
window.scrollTo = vi.fn();
|
|
47
|
+
// Mock localStorage
|
|
48
|
+
const localStorageMock = (() => {
|
|
49
|
+
let store = {};
|
|
50
|
+
return {
|
|
51
|
+
getItem: (key) => store[key] || null,
|
|
52
|
+
setItem: (key, value) => {
|
|
53
|
+
store[key] = value.toString();
|
|
54
|
+
},
|
|
55
|
+
removeItem: (key) => {
|
|
56
|
+
delete store[key];
|
|
57
|
+
},
|
|
58
|
+
clear: () => {
|
|
59
|
+
store = {};
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
})();
|
|
63
|
+
Object.defineProperty(window, 'localStorage', {
|
|
64
|
+
value: localStorageMock
|
|
65
|
+
});
|
|
66
|
+
// Mock sessionStorage
|
|
67
|
+
const sessionStorageMock = (() => {
|
|
68
|
+
let store = {};
|
|
69
|
+
return {
|
|
70
|
+
getItem: (key) => store[key] || null,
|
|
71
|
+
setItem: (key, value) => {
|
|
72
|
+
store[key] = value.toString();
|
|
73
|
+
},
|
|
74
|
+
removeItem: (key) => {
|
|
75
|
+
delete store[key];
|
|
76
|
+
},
|
|
77
|
+
clear: () => {
|
|
78
|
+
store = {};
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
})();
|
|
82
|
+
Object.defineProperty(window, 'sessionStorage', {
|
|
83
|
+
value: sessionStorageMock
|
|
84
|
+
});
|
|
85
|
+
// Reset mocks after each test
|
|
86
|
+
import { afterEach } from 'vitest';
|
|
87
|
+
afterEach(() => {
|
|
88
|
+
vi.clearAllMocks();
|
|
89
|
+
localStorageMock.clear();
|
|
90
|
+
sessionStorageMock.clear();
|
|
91
|
+
});
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test data fixtures for component testing
|
|
3
|
+
*/
|
|
4
|
+
import type { MenuOption } from '../types/form.js';
|
|
5
|
+
type MenuItem = MenuOption;
|
|
6
|
+
type ListItem = {
|
|
7
|
+
id: string;
|
|
8
|
+
label: string;
|
|
9
|
+
value: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Sample menu items for testing
|
|
13
|
+
*/
|
|
14
|
+
export declare const mockMenuItems: MenuItem[];
|
|
15
|
+
/**
|
|
16
|
+
* Sample list items for testing
|
|
17
|
+
*/
|
|
18
|
+
export declare const mockListItems: ListItem[];
|
|
19
|
+
/**
|
|
20
|
+
* Large dataset for virtual scrolling tests
|
|
21
|
+
*/
|
|
22
|
+
export declare function generateLargeDataset(count?: number): ListItem[];
|
|
23
|
+
/**
|
|
24
|
+
* Sample form data for testing
|
|
25
|
+
*/
|
|
26
|
+
export declare const mockFormData: {
|
|
27
|
+
text: string;
|
|
28
|
+
email: string;
|
|
29
|
+
number: number;
|
|
30
|
+
date: string;
|
|
31
|
+
checkbox: boolean;
|
|
32
|
+
radio: string;
|
|
33
|
+
select: string;
|
|
34
|
+
textarea: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Sample user data for testing
|
|
38
|
+
*/
|
|
39
|
+
export declare const mockUsers: {
|
|
40
|
+
id: number;
|
|
41
|
+
name: string;
|
|
42
|
+
email: string;
|
|
43
|
+
role: string;
|
|
44
|
+
}[];
|
|
45
|
+
/**
|
|
46
|
+
* Sample table data for testing
|
|
47
|
+
*/
|
|
48
|
+
export declare const mockTableData: {
|
|
49
|
+
columns: {
|
|
50
|
+
id: string;
|
|
51
|
+
label: string;
|
|
52
|
+
sortable: boolean;
|
|
53
|
+
}[];
|
|
54
|
+
rows: {
|
|
55
|
+
id: number;
|
|
56
|
+
name: string;
|
|
57
|
+
email: string;
|
|
58
|
+
role: string;
|
|
59
|
+
}[];
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Sample navigation items for testing
|
|
63
|
+
*/
|
|
64
|
+
export declare const mockNavItems: {
|
|
65
|
+
id: string;
|
|
66
|
+
label: string;
|
|
67
|
+
href: string;
|
|
68
|
+
icon: string;
|
|
69
|
+
}[];
|
|
70
|
+
/**
|
|
71
|
+
* Sample breadcrumb items for testing
|
|
72
|
+
*/
|
|
73
|
+
export declare const mockBreadcrumbs: ({
|
|
74
|
+
label: string;
|
|
75
|
+
href: string;
|
|
76
|
+
} | {
|
|
77
|
+
label: string;
|
|
78
|
+
href?: undefined;
|
|
79
|
+
})[];
|
|
80
|
+
/**
|
|
81
|
+
* Sample tab items for testing
|
|
82
|
+
*/
|
|
83
|
+
export declare const mockTabs: ({
|
|
84
|
+
id: string;
|
|
85
|
+
label: string;
|
|
86
|
+
content: string;
|
|
87
|
+
disabled?: undefined;
|
|
88
|
+
} | {
|
|
89
|
+
id: string;
|
|
90
|
+
label: string;
|
|
91
|
+
content: string;
|
|
92
|
+
disabled: boolean;
|
|
93
|
+
})[];
|
|
94
|
+
/**
|
|
95
|
+
* Sample color options for testing
|
|
96
|
+
*/
|
|
97
|
+
export declare const mockColors: {
|
|
98
|
+
id: string;
|
|
99
|
+
label: string;
|
|
100
|
+
value: string;
|
|
101
|
+
}[];
|
|
102
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test data fixtures for component testing
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Sample menu items for testing
|
|
6
|
+
*/
|
|
7
|
+
export const mockMenuItems = [
|
|
8
|
+
{ id: '1', label: 'Option 1', name: 'Option 1', value: 'option1' },
|
|
9
|
+
{ id: '2', label: 'Option 2', name: 'Option 2', value: 'option2' },
|
|
10
|
+
{ id: '3', label: 'Option 3', name: 'Option 3', value: 'option3', disabled: true },
|
|
11
|
+
{ id: '4', label: 'Option 4', name: 'Option 4', value: 'option4' }
|
|
12
|
+
];
|
|
13
|
+
/**
|
|
14
|
+
* Sample list items for testing
|
|
15
|
+
*/
|
|
16
|
+
export const mockListItems = [
|
|
17
|
+
{ id: '1', label: 'Item 1', value: 'item1' },
|
|
18
|
+
{ id: '2', label: 'Item 2', value: 'item2' },
|
|
19
|
+
{ id: '3', label: 'Item 3', value: 'item3' },
|
|
20
|
+
{ id: '4', label: 'Item 4', value: 'item4' },
|
|
21
|
+
{ id: '5', label: 'Item 5', value: 'item5' }
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Large dataset for virtual scrolling tests
|
|
25
|
+
*/
|
|
26
|
+
export function generateLargeDataset(count = 1000) {
|
|
27
|
+
return Array.from({ length: count }, (_, i) => ({
|
|
28
|
+
id: `item-${i}`,
|
|
29
|
+
label: `Item ${i + 1}`,
|
|
30
|
+
value: `item${i + 1}`
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sample form data for testing
|
|
35
|
+
*/
|
|
36
|
+
export const mockFormData = {
|
|
37
|
+
text: 'Sample text',
|
|
38
|
+
email: 'test@example.com',
|
|
39
|
+
number: 42,
|
|
40
|
+
date: '2024-01-01',
|
|
41
|
+
checkbox: true,
|
|
42
|
+
radio: 'option1',
|
|
43
|
+
select: 'option2',
|
|
44
|
+
textarea: 'Multi-line\ntext content'
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Sample user data for testing
|
|
48
|
+
*/
|
|
49
|
+
export const mockUsers = [
|
|
50
|
+
{ id: 1, name: 'John Doe', email: 'john@example.com', role: 'admin' },
|
|
51
|
+
{ id: 2, name: 'Jane Smith', email: 'jane@example.com', role: 'user' },
|
|
52
|
+
{ id: 3, name: 'Bob Johnson', email: 'bob@example.com', role: 'user' }
|
|
53
|
+
];
|
|
54
|
+
/**
|
|
55
|
+
* Sample table data for testing
|
|
56
|
+
*/
|
|
57
|
+
export const mockTableData = {
|
|
58
|
+
columns: [
|
|
59
|
+
{ id: 'id', label: 'ID', sortable: true },
|
|
60
|
+
{ id: 'name', label: 'Name', sortable: true },
|
|
61
|
+
{ id: 'email', label: 'Email', sortable: true },
|
|
62
|
+
{ id: 'role', label: 'Role', sortable: false }
|
|
63
|
+
],
|
|
64
|
+
rows: mockUsers
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Sample navigation items for testing
|
|
68
|
+
*/
|
|
69
|
+
export const mockNavItems = [
|
|
70
|
+
{ id: 'home', label: 'Home', href: '/', icon: 'home' },
|
|
71
|
+
{ id: 'about', label: 'About', href: '/about', icon: 'info' },
|
|
72
|
+
{ id: 'contact', label: 'Contact', href: '/contact', icon: 'envelope' }
|
|
73
|
+
];
|
|
74
|
+
/**
|
|
75
|
+
* Sample breadcrumb items for testing
|
|
76
|
+
*/
|
|
77
|
+
export const mockBreadcrumbs = [
|
|
78
|
+
{ label: 'Home', href: '/' },
|
|
79
|
+
{ label: 'Products', href: '/products' },
|
|
80
|
+
{ label: 'Electronics', href: '/products/electronics' },
|
|
81
|
+
{ label: 'Laptops' }
|
|
82
|
+
];
|
|
83
|
+
/**
|
|
84
|
+
* Sample tab items for testing
|
|
85
|
+
*/
|
|
86
|
+
export const mockTabs = [
|
|
87
|
+
{ id: 'tab1', label: 'Tab 1', content: 'Content 1' },
|
|
88
|
+
{ id: 'tab2', label: 'Tab 2', content: 'Content 2' },
|
|
89
|
+
{ id: 'tab3', label: 'Tab 3', content: 'Content 3', disabled: true }
|
|
90
|
+
];
|
|
91
|
+
/**
|
|
92
|
+
* Sample color options for testing
|
|
93
|
+
*/
|
|
94
|
+
export const mockColors = [
|
|
95
|
+
{ id: 'red', label: 'Red', value: '#ff0000' },
|
|
96
|
+
{ id: 'green', label: 'Green', value: '#00ff00' },
|
|
97
|
+
{ id: 'blue', label: 'Blue', value: '#0000ff' },
|
|
98
|
+
{ id: 'yellow', label: 'Yellow', value: '#ffff00' }
|
|
99
|
+
];
|
|
@@ -1,20 +1,37 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import DateTime from '../generic/date/date-time.svelte';
|
|
4
|
+
import type { DateTimeVariant, DateType } from '../types/date.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
dateType = 'datetime' as DateType,
|
|
8
|
+
dateStyle = 'medium' as DateTimeVariant,
|
|
9
|
+
iconSize = 'md' as 'sm' | 'md' | 'lg',
|
|
10
|
+
date = undefined,
|
|
11
|
+
title = undefined,
|
|
12
|
+
summary = undefined,
|
|
13
|
+
icon = undefined
|
|
14
|
+
}: {
|
|
15
|
+
dateType?: DateType;
|
|
16
|
+
dateStyle?: DateTimeVariant;
|
|
17
|
+
iconSize?: 'sm' | 'md' | 'lg';
|
|
18
|
+
date?: string | number | Date;
|
|
19
|
+
title?: string;
|
|
20
|
+
summary?: string;
|
|
21
|
+
icon?: Snippet;
|
|
22
|
+
} = $props();
|
|
8
23
|
</script>
|
|
9
24
|
|
|
10
25
|
<li class="icon-{iconSize}">
|
|
11
26
|
<div class="timeline-icon">
|
|
12
|
-
|
|
27
|
+
{#if icon}
|
|
28
|
+
{@render icon?.()}
|
|
29
|
+
{/if}
|
|
13
30
|
</div>
|
|
14
31
|
<div class="content">
|
|
15
32
|
{#if date}
|
|
16
33
|
<div class="date">
|
|
17
|
-
<DateTime value={date} type={dateType}
|
|
34
|
+
<DateTime value={date} type={dateType} variant={dateStyle} />
|
|
18
35
|
</div>
|
|
19
36
|
{/if}
|
|
20
37
|
{#if title}
|