@getmicdrop/svelte-components 5.17.3 → 5.17.4
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.svelte +187 -187
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte +780 -782
- package/dist/calendar/Calendar/MiniMonthCalendar.svelte.d.ts.map +1 -1
- package/dist/calendar/FAQs/FAQs.svelte +77 -77
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +125 -126
- package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte.d.ts.map +1 -1
- package/dist/calendar/OrderSummary/OrderSummary.svelte +457 -457
- package/dist/calendar/PublicCard/PublicCard.svelte +155 -146
- package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
- package/dist/calendar/ShowCard/ShowCard.spec.js +1 -7
- package/dist/calendar/ShowCard/ShowCard.svelte +166 -157
- package/dist/calendar/ShowCard/ShowCard.svelte.d.ts.map +1 -1
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +72 -61
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts +2 -0
- package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte.d.ts.map +1 -1
- package/dist/components/Heading.svelte +60 -60
- package/dist/components/Layout/AppShell.svelte +104 -104
- package/dist/components/Layout/ContentSection.svelte +80 -80
- package/dist/components/Layout/Grid.svelte +4 -4
- package/dist/components/Layout/Heading.svelte +81 -81
- package/dist/components/Layout/PageContainer.svelte +69 -69
- package/dist/components/Layout/Responsive.svelte +75 -75
- package/dist/components/Layout/Section.svelte +80 -80
- package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
- package/dist/components/Layout/ShowOnMobile.svelte +37 -37
- package/dist/components/Layout/Sidebar.svelte +108 -108
- package/dist/components/Layout/Stack.spec.js +1 -1
- package/dist/components/Layout/Stack.svelte +6 -6
- package/dist/components/Layout/Text.svelte +87 -87
- package/dist/components/Layout/TwoColumn.svelte +108 -108
- package/dist/components/Text.svelte +53 -53
- package/dist/config.d.ts +102 -0
- package/dist/config.js +147 -1
- package/dist/constants/validation.js +91 -91
- package/dist/constants/validation.spec.js +64 -64
- package/dist/datetime/README.md +323 -0
- 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 +1 -1
- package/dist/datetime/parse.js +1 -1
- package/dist/forms/createFormStore.svelte.js +0 -1
- package/dist/forms/createFormStore.svelte.spec.js +0 -1
- package/dist/index.js +57 -57
- package/dist/index.spec.js +369 -369
- package/dist/messages.d.ts +43 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +57 -0
- package/dist/patterns/chat/ChatActivityNotice.svelte +41 -41
- package/dist/patterns/chat/ChatBubble.svelte +95 -95
- package/dist/patterns/chat/ChatContainer.svelte +46 -46
- package/dist/patterns/chat/ChatDateDivider.svelte +27 -27
- package/dist/patterns/chat/ChatInvitationBubble.svelte +37 -37
- package/dist/patterns/chat/ChatInvitationNotice.svelte +27 -27
- package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
- package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
- package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
- package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
- package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
- package/dist/patterns/chat/index.js +22 -22
- package/dist/patterns/data/DataGrid.svelte +45 -45
- package/dist/patterns/data/DataList.svelte +24 -24
- package/dist/patterns/data/DataTable.svelte +36 -36
- package/dist/patterns/forms/FormActions.spec.js +95 -95
- package/dist/patterns/forms/FormActions.stories.svelte +97 -97
- package/dist/patterns/forms/FormActions.svelte +46 -46
- package/dist/patterns/forms/FormGrid.svelte +33 -33
- package/dist/patterns/forms/FormSection.svelte +32 -32
- package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
- package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
- package/dist/patterns/index.js +21 -21
- package/dist/patterns/layout/Sidebar.svelte +39 -39
- package/dist/patterns/layout/index.js +29 -29
- package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
- package/dist/patterns/navigation/BottomNav.svelte +74 -74
- package/dist/patterns/navigation/Header.stories.svelte +77 -77
- package/dist/patterns/navigation/Header.svelte +251 -251
- package/dist/patterns/page/PageHeader.svelte +18 -18
- package/dist/patterns/page/PageLayout.svelte +40 -40
- package/dist/patterns/page/PageLoader.spec.js +57 -57
- package/dist/patterns/page/PageLoader.stories.svelte +137 -137
- package/dist/patterns/page/PageLoader.svelte +24 -24
- package/dist/patterns/page/SectionHeader.svelte +29 -29
- package/dist/presets/badges.js +112 -112
- package/dist/presets/buttons.js +76 -76
- package/dist/presets/index.js +9 -9
- package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
- package/dist/primitives/Accordion/Accordion.svelte +42 -42
- package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
- package/dist/primitives/Alert/Alert.spec.js +173 -173
- package/dist/primitives/Alert/Alert.stories.svelte +88 -88
- package/dist/primitives/Alert/Alert.svelte +27 -27
- package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
- package/dist/primitives/Avatar/Avatar.svelte +66 -66
- package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
- package/dist/primitives/Badges/Badge.spec.js +144 -144
- package/dist/primitives/Badges/Badge.stories.svelte +86 -86
- package/dist/primitives/Badges/Badge.svelte +99 -99
- package/dist/primitives/BottomSheet/BottomSheet.spec.js +238 -238
- package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
- package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
- package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -123
- package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
- package/dist/primitives/Breadcrumb/Breadcrumb.svelte +99 -99
- package/dist/primitives/Button/Button.spec.js +225 -225
- package/dist/primitives/Button/Button.stories.svelte +76 -76
- package/dist/primitives/Button/Button.svelte +278 -278
- package/dist/primitives/Button/ButtonGroup.svelte +50 -50
- package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
- package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
- package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
- package/dist/primitives/Card.spec.js +49 -49
- package/dist/primitives/Card.stories.svelte +22 -22
- package/dist/primitives/Card.svelte +28 -28
- package/dist/primitives/CardAction/CardAction.svelte +68 -68
- package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
- package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
- package/dist/primitives/DarkModeToggle.spec.js +390 -390
- package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
- package/dist/primitives/DarkModeToggle.svelte +136 -136
- package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
- package/dist/primitives/Drawer/Drawer.svelte +224 -224
- package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
- package/dist/primitives/Dropdown/Dropdown.svelte +170 -170
- package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
- package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
- package/dist/primitives/Helper/Helper.svelte +33 -33
- package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
- package/dist/primitives/Icons/ArrowRight.svelte +8 -8
- package/dist/primitives/Icons/Availability.svelte +14 -14
- package/dist/primitives/Icons/Back.svelte +14 -14
- package/dist/primitives/Icons/CheckCircle.svelte +6 -6
- package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
- package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
- package/dist/primitives/Icons/ChevronRight.svelte +4 -4
- package/dist/primitives/Icons/Copy.svelte +15 -15
- package/dist/primitives/Icons/Cross.svelte +5 -5
- package/dist/primitives/Icons/DownArrow.svelte +8 -8
- package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
- package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
- package/dist/primitives/Icons/Home.svelte +15 -15
- package/dist/primitives/Icons/Icon.spec.js +169 -169
- package/dist/primitives/Icons/Icon.stories.svelte +100 -100
- package/dist/primitives/Icons/Icon.svelte +52 -52
- package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
- package/dist/primitives/Icons/Info.svelte +7 -7
- package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
- package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
- package/dist/primitives/Icons/Message.svelte +15 -15
- package/dist/primitives/Icons/MoonIcon.svelte +5 -5
- package/dist/primitives/Icons/More.svelte +21 -21
- package/dist/primitives/Icons/MoreHori.spec.js +61 -61
- package/dist/primitives/Icons/MoreHori.svelte +22 -22
- package/dist/primitives/Icons/Notification.svelte +14 -14
- package/dist/primitives/Icons/Payment.svelte +14 -14
- package/dist/primitives/Icons/Profile.svelte +21 -21
- package/dist/primitives/Icons/Reload.svelte +29 -29
- package/dist/primitives/Icons/Shows.svelte +21 -21
- package/dist/primitives/Icons/Signout.svelte +21 -21
- package/dist/primitives/Icons/SunIcon.svelte +8 -8
- package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
- package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
- package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
- package/dist/primitives/Icons/WarningIcon.svelte +5 -5
- package/dist/primitives/Input/Input.spec.js +1237 -1235
- package/dist/primitives/Input/Input.stories.svelte +139 -139
- package/dist/primitives/Input/Input.svelte +431 -423
- package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
- package/dist/primitives/Input/Select.spec.js +632 -632
- package/dist/primitives/Input/Select.stories.svelte +112 -112
- package/dist/primitives/Input/Select.svelte +252 -252
- package/dist/primitives/Input/Textarea.stories.svelte +137 -137
- package/dist/primitives/Input/Textarea.svelte +105 -105
- package/dist/primitives/Label/Label.svelte +37 -37
- package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
- package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
- package/dist/primitives/Modal/Modal.spec.js +314 -314
- package/dist/primitives/Modal/Modal.stories.svelte +86 -86
- package/dist/primitives/Modal/Modal.svelte +181 -181
- package/dist/primitives/NavItem/NavItem.svelte +75 -75
- package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
- package/dist/primitives/Pagination/Pagination.svelte +261 -261
- package/dist/primitives/Radio/Radio.stories.svelte +80 -80
- package/dist/primitives/Radio/Radio.svelte +67 -67
- package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
- package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
- package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
- package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
- package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
- package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
- package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
- package/dist/primitives/Spinner/Spinner.spec.js +84 -84
- package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
- package/dist/primitives/Spinner/Spinner.svelte +20 -20
- package/dist/primitives/Tabs/TabItem.svelte +49 -49
- package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
- package/dist/primitives/Tabs/Tabs.svelte +137 -137
- package/dist/primitives/Toggle.spec.js +221 -221
- package/dist/primitives/Toggle.stories.svelte +92 -92
- package/dist/primitives/Toggle.svelte +141 -141
- package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
- package/dist/primitives/Typography/Typography.svelte +53 -53
- package/dist/primitives/ValidationError.spec.js +103 -103
- package/dist/primitives/ValidationError.stories.svelte +69 -69
- package/dist/primitives/ValidationError.svelte +29 -29
- package/dist/primitives/index.js +113 -113
- package/dist/recipes/CropImage/CropImage.spec.js +208 -208
- package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
- package/dist/recipes/CropImage/CropImage.svelte +241 -241
- package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
- package/dist/recipes/ImageUploader/ImageUploader.svelte +992 -992
- package/dist/recipes/SuperLogin/SuperLogin.spec.js +2 -2
- package/dist/recipes/SuperLogin/SuperLogin.svelte +1 -1
- package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
- package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
- package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
- package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
- package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
- package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
- package/dist/recipes/fields/CheckboxField.svelte +85 -85
- package/dist/recipes/fields/FormField.svelte +58 -58
- package/dist/recipes/fields/RadioGroup.svelte +95 -95
- package/dist/recipes/fields/SelectField.svelte +82 -82
- package/dist/recipes/fields/TextareaField.svelte +97 -97
- package/dist/recipes/fields/ToggleField.svelte +60 -60
- package/dist/recipes/fields/index.js +7 -7
- package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
- package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
- package/dist/recipes/inputs/MultiSelect.svelte +283 -283
- package/dist/recipes/inputs/OTPInput.spec.js +251 -251
- package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
- package/dist/recipes/inputs/OTPInput.svelte +117 -117
- package/dist/recipes/inputs/PasswordInput.svelte +22 -22
- package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +131 -131
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
- package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +336 -336
- package/dist/recipes/inputs/Search.svelte +102 -102
- package/dist/recipes/inputs/index.js +7 -7
- package/dist/recipes/modals/AlertModal.svelte +130 -130
- package/dist/recipes/modals/ConfirmationModal.spec.js +396 -396
- package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
- package/dist/recipes/modals/ConfirmationModal.svelte +162 -162
- package/dist/recipes/modals/InputModal.svelte +182 -182
- package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
- package/dist/recipes/modals/ModalStateManager.svelte +77 -77
- package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
- package/dist/recipes/modals/StatusModal.svelte +206 -206
- package/dist/schemas/__tests__/auth.test.d.ts +2 -0
- package/dist/schemas/__tests__/auth.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/auth.test.js +210 -0
- package/dist/schemas/__tests__/common.test.d.ts +2 -0
- package/dist/schemas/__tests__/common.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/common.test.js +340 -0
- package/dist/schemas/__tests__/domain.test.d.ts +2 -0
- package/dist/schemas/__tests__/domain.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/domain.test.js +293 -0
- package/dist/schemas/__tests__/order.test.d.ts +2 -0
- package/dist/schemas/__tests__/order.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/order.test.js +349 -0
- package/dist/schemas/__tests__/user.test.d.ts +2 -0
- package/dist/schemas/__tests__/user.test.d.ts.map +1 -0
- package/dist/schemas/__tests__/user.test.js +325 -0
- package/dist/schemas/auth.d.ts +41 -0
- package/dist/schemas/auth.d.ts.map +1 -0
- package/dist/schemas/auth.js +69 -0
- package/dist/schemas/common.d.ts +43 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +157 -0
- package/dist/schemas/event.d.ts +82 -0
- package/dist/schemas/event.d.ts.map +1 -0
- package/dist/schemas/event.js +58 -0
- package/dist/schemas/index.d.ts +10 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +9 -0
- package/dist/schemas/order.d.ts +111 -0
- package/dist/schemas/order.d.ts.map +1 -0
- package/dist/schemas/order.js +73 -0
- package/dist/schemas/performer.d.ts +133 -0
- package/dist/schemas/performer.d.ts.map +1 -0
- package/dist/schemas/performer.js +73 -0
- package/dist/schemas/promo.d.ts +87 -0
- package/dist/schemas/promo.d.ts.map +1 -0
- package/dist/schemas/promo.js +98 -0
- package/dist/schemas/ticket.d.ts +104 -0
- package/dist/schemas/ticket.d.ts.map +1 -0
- package/dist/schemas/ticket.js +82 -0
- package/dist/schemas/user.d.ts +92 -0
- package/dist/schemas/user.d.ts.map +1 -0
- package/dist/schemas/user.js +53 -0
- package/dist/schemas/venue.d.ts +95 -0
- package/dist/schemas/venue.d.ts.map +1 -0
- package/dist/schemas/venue.js +52 -0
- package/dist/services/EventService.js +79 -79
- package/dist/services/EventService.spec.js +217 -217
- package/dist/services/ShowService.js +144 -144
- package/dist/services/ShowService.spec.js +345 -345
- package/dist/stores/auth.svelte.spec.js +1 -1
- package/dist/stores/toaster.js +13 -13
- package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
- package/dist/stories/ButtonAuditReview.svelte +427 -427
- package/dist/stories/PatternsGallery.stories.svelte +19 -19
- package/dist/stories/PatternsGallery.svelte +206 -206
- package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
- package/dist/stories/PrimitivesGallery.svelte +756 -756
- package/dist/stories/RecipesGallery.stories.svelte +19 -19
- package/dist/stories/RecipesGallery.svelte +454 -454
- package/dist/stories/button-audit-manifest.json +11186 -11186
- package/dist/tailwind/preset.cjs +82 -82
- package/dist/telemetry.js +402 -402
- package/dist/telemetry.server.js +212 -212
- package/dist/telemetry.server.spec.js +437 -437
- package/dist/telemetry.spec.js +1173 -1168
- package/dist/tokens/__tests__/sizing.test.js +2 -2
- package/dist/tokens/sizing.d.ts +5 -0
- package/dist/tokens/sizing.d.ts.map +1 -1
- package/dist/tokens/sizing.js +6 -0
- package/dist/tokens/tokens.css +87 -87
- package/dist/tokens/typography-base.css +163 -163
- package/dist/tokens/utilities.css +353 -353
- package/dist/utils/apiConfig.js +117 -117
- package/dist/utils/apiConfig.spec.js +219 -219
- package/dist/utils/greetings.js +187 -187
- package/dist/utils/haptic.spec.js +1 -1
- package/dist/utils/imageValidation.js +121 -121
- package/dist/utils/transitions.js +4 -4
- package/dist/utils/utils.js +693 -693
- package/package.json +292 -292
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { render, screen } from "@testing-library/svelte";
|
|
2
|
-
import { expect, describe, test } from "vitest";
|
|
3
|
-
import Card from "./Card.svelte";
|
|
4
|
-
|
|
5
|
-
describe("Card Component Tests", () => {
|
|
6
|
-
test("Renders card div element", () => {
|
|
7
|
-
const { container } = render(Card, { props: {} });
|
|
8
|
-
const card = container.querySelector("div");
|
|
9
|
-
expect(card).toBeInTheDocument();
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
test("Applies base classes", () => {
|
|
13
|
-
const { container } = render(Card, { props: {} });
|
|
14
|
-
const card = container.querySelector("div");
|
|
15
|
-
expect(card).toHaveClass("bg-white");
|
|
16
|
-
expect(card).toHaveClass("rounded-lg");
|
|
17
|
-
expect(card).toHaveClass("shadow-md");
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test("Applies custom className", () => {
|
|
21
|
-
const { container } = render(Card, { props: { class: "custom-class mt-4" } });
|
|
22
|
-
const card = container.querySelector("div");
|
|
23
|
-
expect(card).toHaveClass("custom-class");
|
|
24
|
-
expect(card).toHaveClass("mt-4");
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
test("Has padding by default", () => {
|
|
28
|
-
const { container } = render(Card, { props: {} });
|
|
29
|
-
const card = container.querySelector("div");
|
|
30
|
-
expect(card).toHaveClass("p-6");
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test("No padding when padding=false", () => {
|
|
34
|
-
const { container } = render(Card, { props: { padding: false } });
|
|
35
|
-
const card = container.querySelector("div");
|
|
36
|
-
expect(card).not.toHaveClass("p-6");
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
test("Has border when border=true", () => {
|
|
40
|
-
const { container } = render(Card, { props: { border: true } });
|
|
41
|
-
const card = container.querySelector("div");
|
|
42
|
-
expect(card).toHaveClass("border");
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test("Renders slot content", () => {
|
|
46
|
-
const { container } = render(Card, { props: {} });
|
|
47
|
-
expect(container.querySelector("div")).toBeInTheDocument();
|
|
48
|
-
});
|
|
49
|
-
});
|
|
1
|
+
import { render, screen } from "@testing-library/svelte";
|
|
2
|
+
import { expect, describe, test } from "vitest";
|
|
3
|
+
import Card from "./Card.svelte";
|
|
4
|
+
|
|
5
|
+
describe("Card Component Tests", () => {
|
|
6
|
+
test("Renders card div element", () => {
|
|
7
|
+
const { container } = render(Card, { props: {} });
|
|
8
|
+
const card = container.querySelector("div");
|
|
9
|
+
expect(card).toBeInTheDocument();
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
test("Applies base classes", () => {
|
|
13
|
+
const { container } = render(Card, { props: {} });
|
|
14
|
+
const card = container.querySelector("div");
|
|
15
|
+
expect(card).toHaveClass("bg-white");
|
|
16
|
+
expect(card).toHaveClass("rounded-lg");
|
|
17
|
+
expect(card).toHaveClass("shadow-md");
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("Applies custom className", () => {
|
|
21
|
+
const { container } = render(Card, { props: { class: "custom-class mt-4" } });
|
|
22
|
+
const card = container.querySelector("div");
|
|
23
|
+
expect(card).toHaveClass("custom-class");
|
|
24
|
+
expect(card).toHaveClass("mt-4");
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test("Has padding by default", () => {
|
|
28
|
+
const { container } = render(Card, { props: {} });
|
|
29
|
+
const card = container.querySelector("div");
|
|
30
|
+
expect(card).toHaveClass("p-6");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("No padding when padding=false", () => {
|
|
34
|
+
const { container } = render(Card, { props: { padding: false } });
|
|
35
|
+
const card = container.querySelector("div");
|
|
36
|
+
expect(card).not.toHaveClass("p-6");
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("Has border when border=true", () => {
|
|
40
|
+
const { container } = render(Card, { props: { border: true } });
|
|
41
|
+
const card = container.querySelector("div");
|
|
42
|
+
expect(card).toHaveClass("border");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("Renders slot content", () => {
|
|
46
|
+
const { container } = render(Card, { props: {} });
|
|
47
|
+
expect(container.querySelector("div")).toBeInTheDocument();
|
|
48
|
+
});
|
|
49
|
+
});
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
-
|
|
4
|
-
import Card from "./Card.svelte";
|
|
5
|
-
|
|
6
|
-
const { Story } = defineMeta({
|
|
7
|
-
title: "Components/Card",
|
|
8
|
-
component: Card,
|
|
9
|
-
argTypes: {
|
|
10
|
-
className: { control: "text" },
|
|
11
|
-
},
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<Story name="Default Card">
|
|
18
|
-
<Card>
|
|
19
|
-
<h3 class="text-lg font-semibold mb-2">Default Card</h3>
|
|
20
|
-
<p class="text-gray-600">A default card with standard styling. Use className prop to customize.</p>
|
|
21
|
-
</Card>
|
|
22
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from "@storybook/addon-svelte-csf";
|
|
3
|
+
|
|
4
|
+
import Card from "./Card.svelte";
|
|
5
|
+
|
|
6
|
+
const { Story } = defineMeta({
|
|
7
|
+
title: "Components/Card",
|
|
8
|
+
component: Card,
|
|
9
|
+
argTypes: {
|
|
10
|
+
className: { control: "text" },
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
<Story name="Default Card">
|
|
18
|
+
<Card>
|
|
19
|
+
<h3 class="text-lg font-semibold mb-2">Default Card</h3>
|
|
20
|
+
<p class="text-gray-600">A default card with standard styling. Use className prop to customize.</p>
|
|
21
|
+
</Card>
|
|
22
|
+
</Story>
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { Snippet } from 'svelte';
|
|
3
|
-
|
|
4
|
-
interface Props {
|
|
5
|
-
padding?: boolean;
|
|
6
|
-
border?: boolean;
|
|
7
|
-
horizontal?: boolean;
|
|
8
|
-
class?: string;
|
|
9
|
-
children?: Snippet;
|
|
10
|
-
[key: string]: unknown;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
let {
|
|
14
|
-
padding = true,
|
|
15
|
-
border = false,
|
|
16
|
-
horizontal = false,
|
|
17
|
-
class: className = '',
|
|
18
|
-
children,
|
|
19
|
-
...restProps
|
|
20
|
-
}: Props = $props();
|
|
21
|
-
</script>
|
|
22
|
-
|
|
23
|
-
<div
|
|
24
|
-
class="bg-white dark:bg-gray-900 rounded-lg shadow-md {border ? 'border border-gray-200 dark:border-gray-700' : ''} {padding ? 'p-6' : ''} {horizontal ? 'flex flex-row' : ''} {className}"
|
|
25
|
-
{...restProps}
|
|
26
|
-
>
|
|
27
|
-
{#if children}{@render children()}{/if}
|
|
28
|
-
</div>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
|
|
4
|
+
interface Props {
|
|
5
|
+
padding?: boolean;
|
|
6
|
+
border?: boolean;
|
|
7
|
+
horizontal?: boolean;
|
|
8
|
+
class?: string;
|
|
9
|
+
children?: Snippet;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
padding = true,
|
|
15
|
+
border = false,
|
|
16
|
+
horizontal = false,
|
|
17
|
+
class: className = '',
|
|
18
|
+
children,
|
|
19
|
+
...restProps
|
|
20
|
+
}: Props = $props();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<div
|
|
24
|
+
class="bg-white dark:bg-gray-900 rounded-lg shadow-md {border ? 'border border-gray-200 dark:border-gray-700' : ''} {padding ? 'p-6' : ''} {horizontal ? 'flex flex-row' : ''} {className}"
|
|
25
|
+
{...restProps}
|
|
26
|
+
>
|
|
27
|
+
{#if children}{@render children()}{/if}
|
|
28
|
+
</div>
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
/**
|
|
3
|
-
* CardAction Component
|
|
4
|
-
* Selectable card-like button for list selections.
|
|
5
|
-
*
|
|
6
|
-
* Replaces: Button variant="card"
|
|
7
|
-
*/
|
|
8
|
-
import { twMerge } from 'tailwind-merge';
|
|
9
|
-
import type { Snippet } from 'svelte';
|
|
10
|
-
import { buttonCardSizes } from '../../tokens/sizing.js';
|
|
11
|
-
|
|
12
|
-
interface Props {
|
|
13
|
-
/** Size variant */
|
|
14
|
-
size?: 'sm' | 'md' | 'lg';
|
|
15
|
-
/** Disabled state */
|
|
16
|
-
disabled?: boolean;
|
|
17
|
-
/** Selected/active state */
|
|
18
|
-
selected?: boolean;
|
|
19
|
-
/** Content */
|
|
20
|
-
children?: Snippet;
|
|
21
|
-
/** Additional classes */
|
|
22
|
-
class?: string;
|
|
23
|
-
/** Click handler */
|
|
24
|
-
onclick?: (e: MouseEvent) => void;
|
|
25
|
-
[key: string]: unknown;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
let {
|
|
29
|
-
size = 'md',
|
|
30
|
-
disabled = false,
|
|
31
|
-
selected = false,
|
|
32
|
-
children,
|
|
33
|
-
class: className = '',
|
|
34
|
-
onclick,
|
|
35
|
-
...restProps
|
|
36
|
-
}: Props = $props();
|
|
37
|
-
|
|
38
|
-
const baseClasses = 'w-full text-left rounded-lg font-medium leading-none focus:outline-hidden transition-all duration-150 ease-out select-none flex items-center justify-start';
|
|
39
|
-
const defaultClasses = 'text-gray-900 bg-white border border-gray-300 hover:bg-gray-50 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700';
|
|
40
|
-
const selectedClasses = 'text-gray-900 bg-blue-50 border border-blue-500 dark:bg-blue-900/20 dark:text-white dark:border-blue-500';
|
|
41
|
-
const disabledClasses = 'bg-gray-100 border-gray-200 text-gray-400 cursor-not-allowed dark:bg-gray-700 dark:border-gray-700 dark:text-gray-500';
|
|
42
|
-
|
|
43
|
-
let sizeClass = $derived(buttonCardSizes[size] || buttonCardSizes.md);
|
|
44
|
-
|
|
45
|
-
let variantClass = $derived(() => {
|
|
46
|
-
if (disabled) return disabledClasses;
|
|
47
|
-
if (selected) return selectedClasses;
|
|
48
|
-
return defaultClasses;
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
let classes = $derived(twMerge(
|
|
52
|
-
baseClasses,
|
|
53
|
-
sizeClass,
|
|
54
|
-
variantClass(),
|
|
55
|
-
disabled ? 'cursor-not-allowed' : 'cursor-pointer active:scale-[0.99] active:opacity-90',
|
|
56
|
-
className
|
|
57
|
-
));
|
|
58
|
-
</script>
|
|
59
|
-
|
|
60
|
-
<button
|
|
61
|
-
type="button"
|
|
62
|
-
class={classes}
|
|
63
|
-
{disabled}
|
|
64
|
-
{onclick}
|
|
65
|
-
{...restProps}
|
|
66
|
-
>
|
|
67
|
-
{#if typeof children === 'function'}{@render children()}{:else if children}{children}{/if}
|
|
68
|
-
</button>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* CardAction Component
|
|
4
|
+
* Selectable card-like button for list selections.
|
|
5
|
+
*
|
|
6
|
+
* Replaces: Button variant="card"
|
|
7
|
+
*/
|
|
8
|
+
import { twMerge } from 'tailwind-merge';
|
|
9
|
+
import type { Snippet } from 'svelte';
|
|
10
|
+
import { buttonCardSizes } from '../../tokens/sizing.js';
|
|
11
|
+
|
|
12
|
+
interface Props {
|
|
13
|
+
/** Size variant */
|
|
14
|
+
size?: 'sm' | 'md' | 'lg';
|
|
15
|
+
/** Disabled state */
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
/** Selected/active state */
|
|
18
|
+
selected?: boolean;
|
|
19
|
+
/** Content */
|
|
20
|
+
children?: Snippet;
|
|
21
|
+
/** Additional classes */
|
|
22
|
+
class?: string;
|
|
23
|
+
/** Click handler */
|
|
24
|
+
onclick?: (e: MouseEvent) => void;
|
|
25
|
+
[key: string]: unknown;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
size = 'md',
|
|
30
|
+
disabled = false,
|
|
31
|
+
selected = false,
|
|
32
|
+
children,
|
|
33
|
+
class: className = '',
|
|
34
|
+
onclick,
|
|
35
|
+
...restProps
|
|
36
|
+
}: Props = $props();
|
|
37
|
+
|
|
38
|
+
const baseClasses = 'w-full text-left rounded-lg font-medium leading-none focus:outline-hidden transition-all duration-150 ease-out select-none flex items-center justify-start';
|
|
39
|
+
const defaultClasses = 'text-gray-900 bg-white border border-gray-300 hover:bg-gray-50 dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700';
|
|
40
|
+
const selectedClasses = 'text-gray-900 bg-blue-50 border border-blue-500 dark:bg-blue-900/20 dark:text-white dark:border-blue-500';
|
|
41
|
+
const disabledClasses = 'bg-gray-100 border-gray-200 text-gray-400 cursor-not-allowed dark:bg-gray-700 dark:border-gray-700 dark:text-gray-500';
|
|
42
|
+
|
|
43
|
+
let sizeClass = $derived(buttonCardSizes[size] || buttonCardSizes.md);
|
|
44
|
+
|
|
45
|
+
let variantClass = $derived(() => {
|
|
46
|
+
if (disabled) return disabledClasses;
|
|
47
|
+
if (selected) return selectedClasses;
|
|
48
|
+
return defaultClasses;
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
let classes = $derived(twMerge(
|
|
52
|
+
baseClasses,
|
|
53
|
+
sizeClass,
|
|
54
|
+
variantClass(),
|
|
55
|
+
disabled ? 'cursor-not-allowed' : 'cursor-pointer active:scale-[0.99] active:opacity-90',
|
|
56
|
+
className
|
|
57
|
+
));
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<button
|
|
61
|
+
type="button"
|
|
62
|
+
class={classes}
|
|
63
|
+
{disabled}
|
|
64
|
+
{onclick}
|
|
65
|
+
{...restProps}
|
|
66
|
+
>
|
|
67
|
+
{#if typeof children === 'function'}{@render children()}{:else if children}{children}{/if}
|
|
68
|
+
</button>
|
|
@@ -1,84 +1,84 @@
|
|
|
1
|
-
<script module>
|
|
2
|
-
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
-
import Checkbox from './Checkbox.svelte';
|
|
4
|
-
|
|
5
|
-
const { Story } = defineMeta({
|
|
6
|
-
title: 'Primitives/Checkbox',
|
|
7
|
-
component: Checkbox,
|
|
8
|
-
tags: ['autodocs'],
|
|
9
|
-
argTypes: {
|
|
10
|
-
label: { control: 'text' },
|
|
11
|
-
checked: { control: 'boolean' },
|
|
12
|
-
disabled: { control: 'boolean' },
|
|
13
|
-
required: { control: 'boolean' },
|
|
14
|
-
},
|
|
15
|
-
parameters: {
|
|
16
|
-
docs: {
|
|
17
|
-
description: {
|
|
18
|
-
component: 'Checkbox input component for boolean selections.',
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
let checked = $state(false);
|
|
25
|
-
let checkedItems = $state({ terms: false, updates: true, marketing: false });
|
|
26
|
-
</script>
|
|
27
|
-
|
|
28
|
-
<Story name="Default" args={{ label: 'Accept terms' }}>
|
|
29
|
-
{#snippet template(args)}
|
|
30
|
-
<Checkbox {...args} />
|
|
31
|
-
{/snippet}
|
|
32
|
-
</Story>
|
|
33
|
-
|
|
34
|
-
<Story name="Checked" args={{ label: 'Already checked', checked: true }}>
|
|
35
|
-
{#snippet template(args)}
|
|
36
|
-
<Checkbox {...args} />
|
|
37
|
-
{/snippet}
|
|
38
|
-
</Story>
|
|
39
|
-
|
|
40
|
-
<Story name="Disabled" args={{ label: 'Disabled checkbox', disabled: true }}>
|
|
41
|
-
{#snippet template(args)}
|
|
42
|
-
<Checkbox {...args} />
|
|
43
|
-
{/snippet}
|
|
44
|
-
</Story>
|
|
45
|
-
|
|
46
|
-
<Story name="Disabled Checked" args={{ label: 'Disabled and checked', disabled: true, checked: true }}>
|
|
47
|
-
{#snippet template(args)}
|
|
48
|
-
<Checkbox {...args} />
|
|
49
|
-
{/snippet}
|
|
50
|
-
</Story>
|
|
51
|
-
|
|
52
|
-
<Story name="Interactive">
|
|
53
|
-
{#snippet template()}
|
|
54
|
-
<div class="space-y-4">
|
|
55
|
-
<Checkbox label="Click to toggle" bind:checked={checked} />
|
|
56
|
-
<p class="text-sm text-gray-500">Checked: {checked ? 'Yes' : 'No'}</p>
|
|
57
|
-
</div>
|
|
58
|
-
{/snippet}
|
|
59
|
-
</Story>
|
|
60
|
-
|
|
61
|
-
<Story name="Group">
|
|
62
|
-
{#snippet template()}
|
|
63
|
-
<div class="space-y-3">
|
|
64
|
-
<p class="text-sm font-medium text-gray-700">Notification preferences:</p>
|
|
65
|
-
<Checkbox label="I accept the terms and conditions" bind:checked={checkedItems.terms} />
|
|
66
|
-
<Checkbox label="Send me product updates" bind:checked={checkedItems.updates} />
|
|
67
|
-
<Checkbox label="Send me marketing emails" bind:checked={checkedItems.marketing} />
|
|
68
|
-
<p class="text-xs text-gray-500 mt-2">
|
|
69
|
-
Selected: {Object.entries(checkedItems).filter(([_, v]) => v).map(([k]) => k).join(', ') || 'none'}
|
|
70
|
-
</p>
|
|
71
|
-
</div>
|
|
72
|
-
{/snippet}
|
|
73
|
-
</Story>
|
|
74
|
-
|
|
75
|
-
<Story name="All States">
|
|
76
|
-
{#snippet template()}
|
|
77
|
-
<div class="space-y-4">
|
|
78
|
-
<Checkbox label="Unchecked" />
|
|
79
|
-
<Checkbox label="Checked" checked={true} />
|
|
80
|
-
<Checkbox label="Disabled unchecked" disabled />
|
|
81
|
-
<Checkbox label="Disabled checked" disabled checked={true} />
|
|
82
|
-
</div>
|
|
83
|
-
{/snippet}
|
|
84
|
-
</Story>
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Checkbox from './Checkbox.svelte';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: 'Primitives/Checkbox',
|
|
7
|
+
component: Checkbox,
|
|
8
|
+
tags: ['autodocs'],
|
|
9
|
+
argTypes: {
|
|
10
|
+
label: { control: 'text' },
|
|
11
|
+
checked: { control: 'boolean' },
|
|
12
|
+
disabled: { control: 'boolean' },
|
|
13
|
+
required: { control: 'boolean' },
|
|
14
|
+
},
|
|
15
|
+
parameters: {
|
|
16
|
+
docs: {
|
|
17
|
+
description: {
|
|
18
|
+
component: 'Checkbox input component for boolean selections.',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
let checked = $state(false);
|
|
25
|
+
let checkedItems = $state({ terms: false, updates: true, marketing: false });
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Story name="Default" args={{ label: 'Accept terms' }}>
|
|
29
|
+
{#snippet template(args)}
|
|
30
|
+
<Checkbox {...args} />
|
|
31
|
+
{/snippet}
|
|
32
|
+
</Story>
|
|
33
|
+
|
|
34
|
+
<Story name="Checked" args={{ label: 'Already checked', checked: true }}>
|
|
35
|
+
{#snippet template(args)}
|
|
36
|
+
<Checkbox {...args} />
|
|
37
|
+
{/snippet}
|
|
38
|
+
</Story>
|
|
39
|
+
|
|
40
|
+
<Story name="Disabled" args={{ label: 'Disabled checkbox', disabled: true }}>
|
|
41
|
+
{#snippet template(args)}
|
|
42
|
+
<Checkbox {...args} />
|
|
43
|
+
{/snippet}
|
|
44
|
+
</Story>
|
|
45
|
+
|
|
46
|
+
<Story name="Disabled Checked" args={{ label: 'Disabled and checked', disabled: true, checked: true }}>
|
|
47
|
+
{#snippet template(args)}
|
|
48
|
+
<Checkbox {...args} />
|
|
49
|
+
{/snippet}
|
|
50
|
+
</Story>
|
|
51
|
+
|
|
52
|
+
<Story name="Interactive">
|
|
53
|
+
{#snippet template()}
|
|
54
|
+
<div class="space-y-4">
|
|
55
|
+
<Checkbox label="Click to toggle" bind:checked={checked} />
|
|
56
|
+
<p class="text-sm text-gray-500">Checked: {checked ? 'Yes' : 'No'}</p>
|
|
57
|
+
</div>
|
|
58
|
+
{/snippet}
|
|
59
|
+
</Story>
|
|
60
|
+
|
|
61
|
+
<Story name="Group">
|
|
62
|
+
{#snippet template()}
|
|
63
|
+
<div class="space-y-3">
|
|
64
|
+
<p class="text-sm font-medium text-gray-700">Notification preferences:</p>
|
|
65
|
+
<Checkbox label="I accept the terms and conditions" bind:checked={checkedItems.terms} />
|
|
66
|
+
<Checkbox label="Send me product updates" bind:checked={checkedItems.updates} />
|
|
67
|
+
<Checkbox label="Send me marketing emails" bind:checked={checkedItems.marketing} />
|
|
68
|
+
<p class="text-xs text-gray-500 mt-2">
|
|
69
|
+
Selected: {Object.entries(checkedItems).filter(([_, v]) => v).map(([k]) => k).join(', ') || 'none'}
|
|
70
|
+
</p>
|
|
71
|
+
</div>
|
|
72
|
+
{/snippet}
|
|
73
|
+
</Story>
|
|
74
|
+
|
|
75
|
+
<Story name="All States">
|
|
76
|
+
{#snippet template()}
|
|
77
|
+
<div class="space-y-4">
|
|
78
|
+
<Checkbox label="Unchecked" />
|
|
79
|
+
<Checkbox label="Checked" checked={true} />
|
|
80
|
+
<Checkbox label="Disabled unchecked" disabled />
|
|
81
|
+
<Checkbox label="Disabled checked" disabled checked={true} />
|
|
82
|
+
</div>
|
|
83
|
+
{/snippet}
|
|
84
|
+
</Story>
|