@getmicdrop/svelte-components 5.6.1 → 5.7.2

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.
Files changed (257) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
  2. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  3. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  4. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  5. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  6. package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/components/Heading.svelte +58 -0
  10. package/dist/components/Heading.svelte.d.ts +12 -0
  11. package/dist/components/Heading.svelte.d.ts.map +1 -0
  12. package/dist/components/Layout/AppShell.svelte +104 -104
  13. package/dist/components/Layout/ContentSection.svelte +80 -80
  14. package/dist/components/Layout/Grid.svelte +4 -4
  15. package/dist/components/Layout/Heading.svelte +81 -81
  16. package/dist/components/Layout/PageContainer.svelte +69 -69
  17. package/dist/components/Layout/Responsive.svelte +75 -75
  18. package/dist/components/Layout/Section.svelte +80 -80
  19. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  20. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  21. package/dist/components/Layout/Sidebar.svelte +108 -108
  22. package/dist/components/Layout/Stack.spec.js +1 -1
  23. package/dist/components/Layout/Stack.svelte +6 -6
  24. package/dist/components/Layout/Text.svelte +87 -87
  25. package/dist/components/Layout/TwoColumn.svelte +108 -108
  26. package/dist/components/Layout/index.d.ts +10 -0
  27. package/dist/components/Layout/index.d.ts.map +1 -0
  28. package/dist/components/Layout/index.js +14 -0
  29. package/dist/components/Text.svelte +53 -0
  30. package/dist/components/Text.svelte.d.ts +12 -0
  31. package/dist/components/Text.svelte.d.ts.map +1 -0
  32. package/dist/components/index.d.ts +4 -0
  33. package/dist/components/index.d.ts.map +1 -0
  34. package/dist/components/index.js +12 -0
  35. package/dist/constants/validation.js +91 -91
  36. package/dist/constants/validation.spec.js +64 -64
  37. package/dist/datetime/__tests__/format.test.js +1 -1
  38. package/dist/datetime/__tests__/parse.test.js +1 -1
  39. package/dist/datetime/__tests__/timezone.test.js +1 -1
  40. package/dist/datetime/parse.js +1 -1
  41. package/dist/forms/createFormStore.svelte.js +0 -1
  42. package/dist/index.d.ts +1 -1
  43. package/dist/index.js +10 -1
  44. package/dist/patterns/data/DataGrid.svelte +45 -45
  45. package/dist/patterns/data/DataList.svelte +24 -24
  46. package/dist/patterns/data/DataTable.svelte +36 -36
  47. package/dist/patterns/forms/FormActions.spec.js +95 -95
  48. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  49. package/dist/patterns/forms/FormActions.svelte +46 -46
  50. package/dist/patterns/forms/FormGrid.svelte +33 -33
  51. package/dist/patterns/forms/FormSection.svelte +32 -32
  52. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  53. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  54. package/dist/patterns/layout/Sidebar.svelte +39 -39
  55. package/dist/patterns/layout/index.d.ts +0 -2
  56. package/dist/patterns/layout/index.js +3 -2
  57. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  58. package/dist/patterns/navigation/BottomNav.svelte +74 -74
  59. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  60. package/dist/patterns/navigation/Header.svelte +193 -193
  61. package/dist/patterns/page/PageHeader.svelte +18 -18
  62. package/dist/patterns/page/PageLayout.svelte +40 -40
  63. package/dist/patterns/page/PageLoader.spec.js +57 -57
  64. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  65. package/dist/patterns/page/PageLoader.svelte +24 -24
  66. package/dist/patterns/page/SectionHeader.svelte +29 -29
  67. package/dist/presets/badges.js +112 -112
  68. package/dist/presets/buttons.js +76 -76
  69. package/dist/presets/index.js +9 -9
  70. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  71. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  72. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  73. package/dist/primitives/Alert/Alert.spec.js +173 -173
  74. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  75. package/dist/primitives/Alert/Alert.svelte +27 -27
  76. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  77. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  78. package/dist/primitives/Badges/Badge.spec.js +144 -144
  79. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  80. package/dist/primitives/Badges/Badge.svelte +79 -79
  81. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -136
  82. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  83. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  84. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -122
  85. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  86. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  87. package/dist/primitives/Button/Button.spec.js +223 -223
  88. package/dist/primitives/Button/Button.stories.svelte +76 -76
  89. package/dist/primitives/Button/Button.svelte +270 -270
  90. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  91. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  92. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  93. package/dist/primitives/Card.spec.js +49 -49
  94. package/dist/primitives/Card.stories.svelte +22 -22
  95. package/dist/primitives/Card.svelte +28 -28
  96. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  97. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  98. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  99. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  100. package/dist/primitives/DarkModeToggle.svelte +136 -136
  101. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  102. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  103. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  104. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  105. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  106. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  107. package/dist/primitives/Helper/Helper.svelte +33 -33
  108. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  109. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  110. package/dist/primitives/Icons/Availability.svelte +14 -14
  111. package/dist/primitives/Icons/Back.svelte +14 -14
  112. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  113. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  114. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  115. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  116. package/dist/primitives/Icons/Copy.svelte +15 -15
  117. package/dist/primitives/Icons/Cross.svelte +5 -5
  118. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  119. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  120. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  121. package/dist/primitives/Icons/Home.svelte +15 -15
  122. package/dist/primitives/Icons/Icon.spec.js +169 -169
  123. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  124. package/dist/primitives/Icons/Icon.svelte +52 -52
  125. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  126. package/dist/primitives/Icons/Info.svelte +7 -7
  127. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  128. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  129. package/dist/primitives/Icons/Message.svelte +15 -15
  130. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  131. package/dist/primitives/Icons/More.svelte +21 -21
  132. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  133. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  134. package/dist/primitives/Icons/Notification.svelte +14 -14
  135. package/dist/primitives/Icons/Payment.svelte +14 -14
  136. package/dist/primitives/Icons/Profile.svelte +21 -21
  137. package/dist/primitives/Icons/Reload.svelte +29 -29
  138. package/dist/primitives/Icons/Shows.svelte +21 -21
  139. package/dist/primitives/Icons/Signout.svelte +21 -21
  140. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  141. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  142. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  143. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  144. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  145. package/dist/primitives/Input/Input.spec.js +573 -573
  146. package/dist/primitives/Input/Input.stories.svelte +139 -139
  147. package/dist/primitives/Input/Select.spec.js +212 -212
  148. package/dist/primitives/Input/Select.stories.svelte +112 -112
  149. package/dist/primitives/Input/Select.svelte +128 -128
  150. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  151. package/dist/primitives/Input/Textarea.svelte +35 -35
  152. package/dist/primitives/Label/Label.svelte +37 -37
  153. package/dist/primitives/Modal/Modal.spec.js +99 -99
  154. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  155. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  156. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  157. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  158. package/dist/primitives/Radio/Radio.svelte +67 -67
  159. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  160. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  161. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  162. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  163. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  164. package/dist/primitives/Spinner/Spinner.spec.js +71 -71
  165. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  166. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  167. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  168. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  169. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  170. package/dist/primitives/Toggle.spec.js +143 -143
  171. package/dist/primitives/Toggle.stories.svelte +92 -92
  172. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  173. package/dist/primitives/Typography/Typography.svelte +53 -53
  174. package/dist/primitives/ValidationError.spec.js +103 -103
  175. package/dist/primitives/ValidationError.stories.svelte +69 -69
  176. package/dist/primitives/ValidationError.svelte +29 -29
  177. package/dist/primitives/index.js +91 -91
  178. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  179. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  180. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  181. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  182. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  183. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  184. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  185. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  186. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  187. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  188. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  189. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  190. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  191. package/dist/recipes/fields/FormField.svelte +58 -58
  192. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  193. package/dist/recipes/fields/SelectField.svelte +80 -80
  194. package/dist/recipes/fields/TextareaField.svelte +97 -97
  195. package/dist/recipes/fields/ToggleField.svelte +60 -60
  196. package/dist/recipes/fields/index.js +7 -7
  197. package/dist/recipes/inputs/MultiSelect.spec.js +258 -258
  198. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  199. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  200. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  201. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  202. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  203. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  204. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  205. package/dist/recipes/inputs/Search.svelte +37 -37
  206. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  207. package/dist/recipes/modals/AlertModal.svelte +130 -130
  208. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -206
  209. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  210. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  211. package/dist/recipes/modals/InputModal.svelte +182 -182
  212. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  213. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  214. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  215. package/dist/recipes/modals/StatusModal.svelte +206 -206
  216. package/dist/services/EventService.js +75 -75
  217. package/dist/services/EventService.spec.js +217 -217
  218. package/dist/services/ShowService.spec.js +345 -345
  219. package/dist/stores/auth.js +36 -44
  220. package/dist/stores/auth.spec.js +139 -139
  221. package/dist/stores/formDataStore.d.ts.map +1 -1
  222. package/dist/stores/formDataStore.js +0 -8
  223. package/dist/stores/formSave.d.ts.map +1 -1
  224. package/dist/stores/formSave.js +0 -8
  225. package/dist/stores/navigation.d.ts.map +1 -1
  226. package/dist/stores/navigation.js +0 -8
  227. package/dist/stores/toaster.js +13 -13
  228. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  229. package/dist/stories/ButtonAuditReview.svelte +427 -427
  230. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  231. package/dist/stories/PatternsGallery.svelte +206 -206
  232. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  233. package/dist/stories/PrimitivesGallery.svelte +725 -725
  234. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  235. package/dist/stories/RecipesGallery.svelte +271 -271
  236. package/dist/stories/button-audit-manifest.json +11186 -11186
  237. package/dist/tailwind/preset.cjs +82 -82
  238. package/dist/telemetry.js +405 -405
  239. package/dist/telemetry.spec.js +1169 -1169
  240. package/dist/tokens/tokens.css +87 -87
  241. package/dist/tokens/typography-base.css +163 -163
  242. package/dist/utils/apiConfig.spec.js +219 -219
  243. package/dist/utils/transitions.js +62 -62
  244. package/dist/utils/utils.js +354 -354
  245. package/package.json +1 -1
  246. package/dist/stores/auth.svelte.d.ts +0 -39
  247. package/dist/stores/auth.svelte.d.ts.map +0 -1
  248. package/dist/stores/auth.svelte.js +0 -60
  249. package/dist/stores/formDataStore.svelte.d.ts +0 -47
  250. package/dist/stores/formDataStore.svelte.d.ts.map +0 -1
  251. package/dist/stores/formDataStore.svelte.js +0 -84
  252. package/dist/stores/formSave.svelte.d.ts +0 -33
  253. package/dist/stores/formSave.svelte.d.ts.map +0 -1
  254. package/dist/stores/formSave.svelte.js +0 -113
  255. package/dist/stores/navigation.svelte.d.ts +0 -35
  256. package/dist/stores/navigation.svelte.d.ts.map +0 -1
  257. package/dist/stores/navigation.svelte.js +0 -69
@@ -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,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>
@@ -1,88 +1,88 @@
1
- <script lang="ts">
2
- import type { Snippet } from 'svelte';
3
-
4
- interface Props {
5
- checked?: boolean;
6
- value?: string;
7
- name?: string;
8
- disabled?: boolean;
9
- color?: 'blue' | 'red' | 'green' | 'purple' | 'orange' | 'yellow';
10
- class?: string;
11
- onchange?: (detail: { checked: boolean; value: string }) => void;
12
- onclick?: () => void;
13
- onfocus?: () => void;
14
- onblur?: () => void;
15
- onkeydown?: (e: KeyboardEvent) => void;
16
- onkeyup?: (e: KeyboardEvent) => void;
17
- children?: Snippet;
18
- [key: string]: unknown;
19
- }
20
-
21
- let {
22
- checked = $bindable(false),
23
- value = "",
24
- name = "",
25
- disabled = false,
26
- color = "blue",
27
- class: className = "",
28
- onchange,
29
- onclick,
30
- onfocus,
31
- onblur,
32
- onkeydown,
33
- onkeyup,
34
- children,
35
- ...restProps
36
- }: Props = $props();
37
-
38
- function handleChange() {
39
- // Note: checked is already updated by bind:checked before this handler runs
40
- // We just need to call the onchange callback with the current values
41
- onchange?.({ checked, value });
42
- }
43
-
44
- const colorClasses = {
45
- blue: "text-blue-600",
46
- red: "text-red-600",
47
- green: "text-green-600",
48
- purple: "text-purple-600",
49
- orange: "text-orange-500",
50
- yellow: "text-yellow-400"
51
- };
52
-
53
- let colorClass = $derived(colorClasses[color] || colorClasses.blue);
54
-
55
- let inputClasses = $derived([
56
- "w-4 h-4 rounded",
57
- "bg-gray-100 border-gray-300",
58
- "dark:bg-gray-700 dark:border-gray-600",
59
- "focus:outline-none",
60
- colorClass,
61
- disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"
62
- ].join(" "));
63
- </script>
64
-
65
- <label
66
- class="inline-flex items-center gap-2 {disabled ? 'cursor-not-allowed' : 'cursor-pointer'} select-none {className}"
67
- {...restProps}
68
- >
69
- <input
70
- type="checkbox"
71
- {name}
72
- {value}
73
- {disabled}
74
- bind:checked
75
- onchange={handleChange}
76
- {onclick}
77
- {onfocus}
78
- {onblur}
79
- {onkeydown}
80
- {onkeyup}
81
- class={inputClasses}
82
- />
83
- {#if children}
84
- <span class="text-sm font-medium text-gray-900 dark:text-gray-300">
85
- {@render children()}
86
- </span>
87
- {/if}
88
- </label>
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ checked?: boolean;
6
+ value?: string;
7
+ name?: string;
8
+ disabled?: boolean;
9
+ color?: 'blue' | 'red' | 'green' | 'purple' | 'orange' | 'yellow';
10
+ class?: string;
11
+ onchange?: (detail: { checked: boolean; value: string }) => void;
12
+ onclick?: () => void;
13
+ onfocus?: () => void;
14
+ onblur?: () => void;
15
+ onkeydown?: (e: KeyboardEvent) => void;
16
+ onkeyup?: (e: KeyboardEvent) => void;
17
+ children?: Snippet;
18
+ [key: string]: unknown;
19
+ }
20
+
21
+ let {
22
+ checked = $bindable(false),
23
+ value = "",
24
+ name = "",
25
+ disabled = false,
26
+ color = "blue",
27
+ class: className = "",
28
+ onchange,
29
+ onclick,
30
+ onfocus,
31
+ onblur,
32
+ onkeydown,
33
+ onkeyup,
34
+ children,
35
+ ...restProps
36
+ }: Props = $props();
37
+
38
+ function handleChange(event: Event) {
39
+ const target = event.target as HTMLInputElement;
40
+ checked = target.checked;
41
+ onchange?.({ checked, value });
42
+ }
43
+
44
+ const colorClasses = {
45
+ blue: "text-blue-600",
46
+ red: "text-red-600",
47
+ green: "text-green-600",
48
+ purple: "text-purple-600",
49
+ orange: "text-orange-500",
50
+ yellow: "text-yellow-400"
51
+ };
52
+
53
+ let colorClass = $derived(colorClasses[color] || colorClasses.blue);
54
+
55
+ let inputClasses = $derived([
56
+ "w-4 h-4 rounded",
57
+ "bg-gray-100 border-gray-300",
58
+ "dark:bg-gray-700 dark:border-gray-600",
59
+ "focus:outline-none",
60
+ colorClass,
61
+ disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"
62
+ ].join(" "));
63
+ </script>
64
+
65
+ <label
66
+ class="inline-flex items-center gap-2 {disabled ? 'cursor-not-allowed' : 'cursor-pointer'} select-none {className}"
67
+ {...restProps}
68
+ >
69
+ <input
70
+ type="checkbox"
71
+ {name}
72
+ {value}
73
+ {disabled}
74
+ bind:checked
75
+ onchange={handleChange}
76
+ {onclick}
77
+ {onfocus}
78
+ {onblur}
79
+ {onkeydown}
80
+ {onkeyup}
81
+ class={inputClasses}
82
+ />
83
+ {#if children}
84
+ <span class="text-sm font-medium text-gray-900 dark:text-gray-300">
85
+ {@render children()}
86
+ </span>
87
+ {/if}
88
+ </label>