@getmicdrop/svelte-components 5.3.15 → 5.4.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.
Files changed (225) 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 +145 -145
  7. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  9. package/dist/components/Layout/Grid.svelte +109 -109
  10. package/dist/components/Layout/Section.svelte +80 -80
  11. package/dist/components/Layout/Sidebar.svelte +108 -108
  12. package/dist/components/Layout/Stack.svelte +90 -90
  13. package/dist/constants/validation.js +91 -91
  14. package/dist/constants/validation.spec.js +64 -64
  15. package/dist/datetime/constants.d.ts +7 -0
  16. package/dist/datetime/constants.d.ts.map +1 -1
  17. package/dist/datetime/constants.js +26 -0
  18. package/dist/datetime/index.d.ts +3 -2
  19. package/dist/datetime/index.d.ts.map +1 -1
  20. package/dist/datetime/index.js +2 -2
  21. package/dist/datetime/timezone.d.ts +72 -0
  22. package/dist/datetime/timezone.d.ts.map +1 -1
  23. package/dist/datetime/timezone.js +138 -0
  24. package/dist/forms/createFieldTracker.svelte.d.ts.map +1 -1
  25. package/dist/forms/createFieldTracker.svelte.js +3 -6
  26. package/dist/index.js +223 -223
  27. package/dist/patterns/data/DataGrid.svelte +45 -45
  28. package/dist/patterns/data/DataList.svelte +24 -24
  29. package/dist/patterns/data/DataTable.svelte +40 -40
  30. package/dist/patterns/forms/FormActions.spec.js +88 -88
  31. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  32. package/dist/patterns/forms/FormActions.svelte +46 -46
  33. package/dist/patterns/forms/FormGrid.svelte +33 -33
  34. package/dist/patterns/forms/FormSection.svelte +32 -32
  35. package/dist/patterns/forms/FormValidationSummary.spec.js +203 -203
  36. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  37. package/dist/patterns/forms/FormValidationSummary.svelte +67 -67
  38. package/dist/patterns/layout/Grid.svelte +35 -35
  39. package/dist/patterns/layout/Sidebar.svelte +39 -39
  40. package/dist/patterns/layout/Stack.svelte +45 -45
  41. package/dist/patterns/navigation/BottomNav.spec.js +130 -130
  42. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  43. package/dist/patterns/navigation/BottomNav.svelte +54 -54
  44. package/dist/patterns/navigation/Header.spec.js +203 -203
  45. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  46. package/dist/patterns/navigation/Header.svelte +240 -240
  47. package/dist/patterns/page/PageHeader.svelte +36 -36
  48. package/dist/patterns/page/PageLayout.svelte +40 -40
  49. package/dist/patterns/page/PageLoader.spec.js +54 -54
  50. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  51. package/dist/patterns/page/PageLoader.svelte +41 -41
  52. package/dist/patterns/page/SectionHeader.svelte +41 -41
  53. package/dist/presets/badges.js +112 -112
  54. package/dist/presets/buttons.js +76 -76
  55. package/dist/presets/index.js +9 -9
  56. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  57. package/dist/primitives/Accordion/Accordion.svelte +61 -61
  58. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  59. package/dist/primitives/Alert/Alert.spec.js +170 -170
  60. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  61. package/dist/primitives/Alert/Alert.svelte +65 -65
  62. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  63. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  64. package/dist/primitives/Badges/Badge.spec.js +103 -103
  65. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  66. package/dist/primitives/Badges/Badge.svelte +142 -142
  67. package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
  68. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  69. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  70. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
  71. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  72. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  73. package/dist/primitives/Button/Button.spec.js +211 -211
  74. package/dist/primitives/Button/Button.stories.svelte +76 -76
  75. package/dist/primitives/Button/Button.svelte +301 -301
  76. package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
  77. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  78. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  79. package/dist/primitives/Card.spec.js +49 -49
  80. package/dist/primitives/Card.stories.svelte +22 -22
  81. package/dist/primitives/Card.svelte +28 -28
  82. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  83. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  84. package/dist/primitives/DarkModeToggle.spec.js +357 -357
  85. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  86. package/dist/primitives/DarkModeToggle.svelte +136 -136
  87. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  88. package/dist/primitives/Drawer/Drawer.svelte +214 -214
  89. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  90. package/dist/primitives/Dropdown/Dropdown.svelte +148 -148
  91. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  92. package/dist/primitives/Icons/ArrowLeft.svelte +20 -20
  93. package/dist/primitives/Icons/ArrowRight.svelte +20 -20
  94. package/dist/primitives/Icons/Availability.svelte +26 -26
  95. package/dist/primitives/Icons/Back.svelte +26 -26
  96. package/dist/primitives/Icons/CheckCircle.svelte +18 -18
  97. package/dist/primitives/Icons/CheckCircleOutline.svelte +27 -27
  98. package/dist/primitives/Icons/ChevronLeft.svelte +16 -16
  99. package/dist/primitives/Icons/ChevronRight.svelte +16 -16
  100. package/dist/primitives/Icons/Copy.svelte +27 -27
  101. package/dist/primitives/Icons/Cross.svelte +17 -17
  102. package/dist/primitives/Icons/DownArrow.svelte +20 -20
  103. package/dist/primitives/Icons/ErrorCircle.svelte +18 -18
  104. package/dist/primitives/Icons/FacebookIcon.svelte +13 -13
  105. package/dist/primitives/Icons/Home.svelte +27 -27
  106. package/dist/primitives/Icons/Icon.spec.js +175 -175
  107. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  108. package/dist/primitives/Icons/Icon.svelte +63 -63
  109. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  110. package/dist/primitives/Icons/ImageOutline.svelte +19 -19
  111. package/dist/primitives/Icons/Info.svelte +19 -19
  112. package/dist/primitives/Icons/InstagramIcon.svelte +19 -19
  113. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  114. package/dist/primitives/Icons/Message.svelte +27 -27
  115. package/dist/primitives/Icons/MoonIcon.svelte +16 -16
  116. package/dist/primitives/Icons/More.svelte +33 -33
  117. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  118. package/dist/primitives/Icons/MoreHori.svelte +34 -34
  119. package/dist/primitives/Icons/Notification.svelte +26 -26
  120. package/dist/primitives/Icons/Payment.svelte +26 -26
  121. package/dist/primitives/Icons/Profile.svelte +33 -33
  122. package/dist/primitives/Icons/Reload.svelte +41 -41
  123. package/dist/primitives/Icons/Shows.svelte +33 -33
  124. package/dist/primitives/Icons/Signout.svelte +33 -33
  125. package/dist/primitives/Icons/SunIcon.svelte +19 -19
  126. package/dist/primitives/Icons/TiktokIcon.svelte +13 -13
  127. package/dist/primitives/Icons/TrashBinOutline.svelte +19 -19
  128. package/dist/primitives/Icons/TwitterIcon.svelte +13 -13
  129. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  130. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  131. package/dist/primitives/Input/Input.spec.js +573 -573
  132. package/dist/primitives/Input/Input.stories.svelte +139 -139
  133. package/dist/primitives/Input/Input.svelte +444 -444
  134. package/dist/primitives/Input/Select.spec.js +218 -218
  135. package/dist/primitives/Input/Select.stories.svelte +112 -112
  136. package/dist/primitives/Input/Select.svelte +232 -232
  137. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  138. package/dist/primitives/Input/Textarea.svelte +79 -79
  139. package/dist/primitives/Label/Label.svelte +37 -37
  140. package/dist/primitives/Modal/Modal.spec.js +95 -95
  141. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  142. package/dist/primitives/Modal/Modal.svelte +158 -158
  143. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  144. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  145. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  146. package/dist/primitives/Radio/Radio.svelte +67 -67
  147. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  148. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  149. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  150. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  151. package/dist/primitives/Skeleton/Skeleton.svelte +52 -52
  152. package/dist/primitives/Spinner/Spinner.spec.js +75 -75
  153. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  154. package/dist/primitives/Spinner/Spinner.svelte +57 -57
  155. package/dist/primitives/Tabs/TabItem.svelte +51 -51
  156. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  157. package/dist/primitives/Tabs/Tabs.svelte +128 -128
  158. package/dist/primitives/Toggle.spec.js +127 -127
  159. package/dist/primitives/Toggle.stories.svelte +92 -92
  160. package/dist/primitives/Toggle.svelte +71 -71
  161. package/dist/primitives/Typography/Typography.svelte +53 -53
  162. package/dist/primitives/ValidationError.spec.js +103 -103
  163. package/dist/primitives/ValidationError.stories.svelte +111 -111
  164. package/dist/primitives/ValidationError.svelte +29 -29
  165. package/dist/recipes/CropImage/CropImage.spec.js +216 -216
  166. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  167. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  168. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  169. package/dist/recipes/ImageUploader/ImageUploader.svelte +980 -980
  170. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  171. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +47 -47
  172. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  173. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +112 -112
  174. package/dist/recipes/feedback/ErrorDisplay.svelte +38 -38
  175. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
  176. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +167 -167
  177. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  178. package/dist/recipes/fields/FormField.svelte +58 -58
  179. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  180. package/dist/recipes/fields/SelectField.svelte +82 -82
  181. package/dist/recipes/fields/TextareaField.svelte +101 -101
  182. package/dist/recipes/fields/ToggleField.svelte +60 -60
  183. package/dist/recipes/fields/index.js +7 -7
  184. package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
  185. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  186. package/dist/recipes/inputs/MultiSelect.svelte +244 -244
  187. package/dist/recipes/inputs/OTPInput.spec.js +238 -238
  188. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  189. package/dist/recipes/inputs/OTPInput.svelte +102 -102
  190. package/dist/recipes/inputs/PasswordInput.svelte +100 -100
  191. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
  192. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +108 -108
  193. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
  194. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +165 -165
  195. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +337 -337
  196. package/dist/recipes/inputs/Search.svelte +85 -85
  197. package/dist/recipes/inputs/SelectDropdown.svelte +161 -161
  198. package/dist/recipes/modals/AlertModal.svelte +130 -130
  199. package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
  200. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  201. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  202. package/dist/recipes/modals/InputModal.svelte +182 -182
  203. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  204. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  205. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  206. package/dist/recipes/modals/StatusModal.svelte +206 -206
  207. package/dist/services/EventService.js +75 -75
  208. package/dist/services/EventService.spec.js +217 -217
  209. package/dist/services/ShowService.spec.js +342 -342
  210. package/dist/stores/auth.js +36 -36
  211. package/dist/stores/auth.spec.js +139 -139
  212. package/dist/stores/toaster.js +13 -13
  213. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  214. package/dist/stories/ButtonAuditReview.svelte +427 -427
  215. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  216. package/dist/stories/PatternsGallery.svelte +388 -388
  217. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  218. package/dist/stories/PrimitivesGallery.svelte +752 -752
  219. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  220. package/dist/stories/RecipesGallery.svelte +441 -441
  221. package/dist/stories/button-audit-manifest.json +11186 -11186
  222. package/dist/tailwind/preset.cjs +82 -82
  223. package/dist/tokens/tokens.css +87 -87
  224. package/dist/utils/utils.js +354 -354
  225. package/package.json +274 -274
@@ -1,62 +1,62 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
-
4
- import { Toaster } from "svelte-sonner";
5
- import { showToast } from "../../stores/toaster";
6
-
7
- const { Story } = defineMeta({
8
- title: "Components/Toaster",
9
- });
10
-
11
- function showSuccessToast() {
12
- showToast("Action completed successfully!", "success");
13
- }
14
-
15
- function showErrorToast() {
16
- showToast("An error occurred. Please try again.", "error");
17
- }
18
- </script>
19
-
20
- <Story name="Trigger Success Toast">
21
- <div class="p-8">
22
- <Toaster
23
- position="bottom-right"
24
- toastOptions={{
25
- class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
26
- classes: {
27
- error: "text-red-600 dark:text-red-400",
28
- success: "text-green-600 dark:text-green-400",
29
- },
30
- }}
31
- />
32
- <button
33
- onclick={showSuccessToast}
34
- class="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700"
35
- >
36
- Show Success Toast
37
- </button>
38
- <p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see a success toast notification</p>
39
- </div>
40
- </Story>
41
-
42
- <Story name="Trigger Error Toast">
43
- <div class="p-8">
44
- <Toaster
45
- position="bottom-right"
46
- toastOptions={{
47
- class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
48
- classes: {
49
- error: "text-red-600 dark:text-red-400",
50
- success: "text-green-600 dark:text-green-400",
51
- },
52
- }}
53
- />
54
- <button
55
- onclick={showErrorToast}
56
- class="px-4 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700"
57
- >
58
- Show Error Toast
59
- </button>
60
- <p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see an error toast notification</p>
61
- </div>
62
- </Story>
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+
4
+ import { Toaster } from "svelte-sonner";
5
+ import { showToast } from "../../stores/toaster";
6
+
7
+ const { Story } = defineMeta({
8
+ title: "Components/Toaster",
9
+ });
10
+
11
+ function showSuccessToast() {
12
+ showToast("Action completed successfully!", "success");
13
+ }
14
+
15
+ function showErrorToast() {
16
+ showToast("An error occurred. Please try again.", "error");
17
+ }
18
+ </script>
19
+
20
+ <Story name="Trigger Success Toast">
21
+ <div class="p-8">
22
+ <Toaster
23
+ position="bottom-right"
24
+ toastOptions={{
25
+ class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
26
+ classes: {
27
+ error: "text-red-600 dark:text-red-400",
28
+ success: "text-green-600 dark:text-green-400",
29
+ },
30
+ }}
31
+ />
32
+ <button
33
+ onclick={showSuccessToast}
34
+ class="px-4 py-2 bg-green-600 text-white rounded-lg hover:bg-green-700"
35
+ >
36
+ Show Success Toast
37
+ </button>
38
+ <p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see a success toast notification</p>
39
+ </div>
40
+ </Story>
41
+
42
+ <Story name="Trigger Error Toast">
43
+ <div class="p-8">
44
+ <Toaster
45
+ position="bottom-right"
46
+ toastOptions={{
47
+ class: "text-sm bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700",
48
+ classes: {
49
+ error: "text-red-600 dark:text-red-400",
50
+ success: "text-green-600 dark:text-green-400",
51
+ },
52
+ }}
53
+ />
54
+ <button
55
+ onclick={showErrorToast}
56
+ class="px-4 py-2 bg-red-600 text-white rounded-lg hover:bg-red-700"
57
+ >
58
+ Show Error Toast
59
+ </button>
60
+ <p class="mt-4 text-sm text-gray-500 dark:text-gray-400">Click the button to see an error toast notification</p>
61
+ </div>
62
+ </Story>
@@ -1,47 +1,47 @@
1
- <script lang="ts">
2
- import type { Component } from 'svelte';
3
- import { typography } from '../../../tokens/typography';
4
-
5
- interface Props {
6
- /** Main message to display */
7
- message?: string;
8
- /** Secondary descriptive text */
9
- subtext?: string;
10
- /** Icon component (when iconType='component') */
11
- icon?: Component<any> | null;
12
- /** Image path (when iconType='image') */
13
- imageSrc?: string;
14
- /** Type of icon provided */
15
- iconType?: 'component' | 'image';
16
- /** Size classes for the icon */
17
- iconSize?: string;
18
- /** Additional CSS classes */
19
- class?: string;
20
- }
21
-
22
- let {
23
- message = 'No results found',
24
- subtext = '',
25
- icon = null,
26
- imageSrc = '',
27
- iconType = 'component',
28
- iconSize = 'w-20 h-20',
29
- class: className = ''
30
- }: Props = $props();
31
- </script>
32
-
33
- <div class="flex flex-col items-center justify-center px-6 py-10 text-center {className}">
34
- {#if icon || imageSrc}
35
- {#if iconType === 'component' && icon}
36
- {@const IconComponent = icon}
37
- <IconComponent class="mb-3 text-gray-400 dark:text-gray-500 {iconSize}" />
38
- {:else if iconType === 'image' && imageSrc}
39
- <img src={imageSrc} alt="" class="mb-3 {iconSize}" />
40
- {/if}
41
- {/if}
42
-
43
- <h3 class={typography.h3}>{message}</h3>
44
- {#if subtext}
45
- <p class={`${typography.smMuted} mt-1`}>{subtext}</p>
46
- {/if}
47
- </div>
1
+ <script lang="ts">
2
+ import type { Component } from 'svelte';
3
+ import { typography } from '../../../tokens/typography';
4
+
5
+ interface Props {
6
+ /** Main message to display */
7
+ message?: string;
8
+ /** Secondary descriptive text */
9
+ subtext?: string;
10
+ /** Icon component (when iconType='component') */
11
+ icon?: Component<any> | null;
12
+ /** Image path (when iconType='image') */
13
+ imageSrc?: string;
14
+ /** Type of icon provided */
15
+ iconType?: 'component' | 'image';
16
+ /** Size classes for the icon */
17
+ iconSize?: string;
18
+ /** Additional CSS classes */
19
+ class?: string;
20
+ }
21
+
22
+ let {
23
+ message = 'No results found',
24
+ subtext = '',
25
+ icon = null,
26
+ imageSrc = '',
27
+ iconType = 'component',
28
+ iconSize = 'w-20 h-20',
29
+ class: className = ''
30
+ }: Props = $props();
31
+ </script>
32
+
33
+ <div class="flex flex-col items-center justify-center px-6 py-10 text-center {className}">
34
+ {#if icon || imageSrc}
35
+ {#if iconType === 'component' && icon}
36
+ {@const IconComponent = icon}
37
+ <IconComponent class="mb-3 text-gray-400 dark:text-gray-500 {iconSize}" />
38
+ {:else if iconType === 'image' && imageSrc}
39
+ <img src={imageSrc} alt="" class="mb-3 {iconSize}" />
40
+ {/if}
41
+ {/if}
42
+
43
+ <h3 class={typography.h3}>{message}</h3>
44
+ {#if subtext}
45
+ <p class={`${typography.smMuted} mt-1`}>{subtext}</p>
46
+ {/if}
47
+ </div>
@@ -1,69 +1,69 @@
1
- import { render, screen } from "@testing-library/svelte";
2
- import { expect, describe, test } from "vitest";
3
- import ErrorDisplay from "./ErrorDisplay.svelte";
4
-
5
- describe("ErrorDisplay Component Tests", () => {
6
- test("Shows error message when error and show are true", () => {
7
- render(ErrorDisplay, { props: { error: "Invalid input", show: true } });
8
- expect(screen.getByText("Invalid input")).toBeInTheDocument();
9
- });
10
-
11
- test("Does not show when error is empty", () => {
12
- render(ErrorDisplay, { props: { error: "", show: true } });
13
- expect(screen.queryByText("Invalid input")).not.toBeInTheDocument();
14
- });
15
-
16
- test("Does not show when show is false", () => {
17
- render(ErrorDisplay, { props: { error: "Error message", show: false } });
18
- expect(screen.queryByText("Error message")).not.toBeInTheDocument();
19
- });
20
-
21
- test("Has error text color", () => {
22
- const { container } = render(ErrorDisplay, {
23
- props: { error: "Error", show: true },
24
- });
25
- const wrapper = container.firstChild;
26
- expect(wrapper).toHaveClass("text-red-600");
27
- });
28
-
29
- test("Has shake class when shake is true", () => {
30
- const { container } = render(ErrorDisplay, {
31
- props: { error: "Error", show: true, shake: true },
32
- });
33
- const wrapper = container.firstChild;
34
- expect(wrapper).toHaveClass("animate-shake");
35
- });
36
-
37
- test("Does not have shake class when shake is false", () => {
38
- const { container } = render(ErrorDisplay, {
39
- props: { error: "Error", show: true, shake: false },
40
- });
41
- const wrapper = container.firstChild;
42
- expect(wrapper).not.toHaveClass("animate-shake");
43
- });
44
-
45
- test("Contains icon element", () => {
46
- const { container } = render(ErrorDisplay, {
47
- props: { error: "Error", show: true },
48
- });
49
- const svg = container.querySelector("svg");
50
- expect(svg).toBeInTheDocument();
51
- });
52
-
53
- test("Has flex layout", () => {
54
- const { container } = render(ErrorDisplay, {
55
- props: { error: "Error", show: true },
56
- });
57
- const wrapper = container.firstChild;
58
- expect(wrapper).toHaveClass("flex");
59
- expect(wrapper).toHaveClass("items-center");
60
- });
61
-
62
- test("Applies custom className", () => {
63
- const { container } = render(ErrorDisplay, {
64
- props: { error: "Error", show: true, className: "mt-2" },
65
- });
66
- const wrapper = container.firstChild;
67
- expect(wrapper).toHaveClass("mt-2");
68
- });
69
- });
1
+ import { render, screen } from "@testing-library/svelte";
2
+ import { expect, describe, test } from "vitest";
3
+ import ErrorDisplay from "./ErrorDisplay.svelte";
4
+
5
+ describe("ErrorDisplay Component Tests", () => {
6
+ test("Shows error message when error and show are true", () => {
7
+ render(ErrorDisplay, { props: { error: "Invalid input", show: true } });
8
+ expect(screen.getByText("Invalid input")).toBeInTheDocument();
9
+ });
10
+
11
+ test("Does not show when error is empty", () => {
12
+ render(ErrorDisplay, { props: { error: "", show: true } });
13
+ expect(screen.queryByText("Invalid input")).not.toBeInTheDocument();
14
+ });
15
+
16
+ test("Does not show when show is false", () => {
17
+ render(ErrorDisplay, { props: { error: "Error message", show: false } });
18
+ expect(screen.queryByText("Error message")).not.toBeInTheDocument();
19
+ });
20
+
21
+ test("Has error text color", () => {
22
+ const { container } = render(ErrorDisplay, {
23
+ props: { error: "Error", show: true },
24
+ });
25
+ const wrapper = container.firstChild;
26
+ expect(wrapper).toHaveClass("text-red-600");
27
+ });
28
+
29
+ test("Has shake class when shake is true", () => {
30
+ const { container } = render(ErrorDisplay, {
31
+ props: { error: "Error", show: true, shake: true },
32
+ });
33
+ const wrapper = container.firstChild;
34
+ expect(wrapper).toHaveClass("animate-shake");
35
+ });
36
+
37
+ test("Does not have shake class when shake is false", () => {
38
+ const { container } = render(ErrorDisplay, {
39
+ props: { error: "Error", show: true, shake: false },
40
+ });
41
+ const wrapper = container.firstChild;
42
+ expect(wrapper).not.toHaveClass("animate-shake");
43
+ });
44
+
45
+ test("Contains icon element", () => {
46
+ const { container } = render(ErrorDisplay, {
47
+ props: { error: "Error", show: true },
48
+ });
49
+ const svg = container.querySelector("svg");
50
+ expect(svg).toBeInTheDocument();
51
+ });
52
+
53
+ test("Has flex layout", () => {
54
+ const { container } = render(ErrorDisplay, {
55
+ props: { error: "Error", show: true },
56
+ });
57
+ const wrapper = container.firstChild;
58
+ expect(wrapper).toHaveClass("flex");
59
+ expect(wrapper).toHaveClass("items-center");
60
+ });
61
+
62
+ test("Applies custom className", () => {
63
+ const { container } = render(ErrorDisplay, {
64
+ props: { error: "Error", show: true, className: "mt-2" },
65
+ });
66
+ const wrapper = container.firstChild;
67
+ expect(wrapper).toHaveClass("mt-2");
68
+ });
69
+ });
@@ -1,112 +1,112 @@
1
- <script module>
2
- import { defineMeta } from "@storybook/addon-svelte-csf";
3
-
4
- import ErrorDisplay from './ErrorDisplay.svelte';
5
-
6
- const { Story } = defineMeta({
7
- title: 'Components/ErrorDisplay',
8
- component: ErrorDisplay,
9
- tags: ['autodocs'],
10
- argTypes: {
11
- error: {
12
- control: 'text',
13
- description: 'Error message to display',
14
- },
15
- show: {
16
- control: 'boolean',
17
- description: 'Controls visibility',
18
- },
19
- shake: {
20
- control: 'boolean',
21
- description: 'Enable shake animation',
22
- },
23
- icon: {
24
- control: 'text',
25
- description: 'Icon name from Icon component',
26
- },
27
- iconSize: {
28
- control: 'text',
29
- description: 'Size of the icon',
30
- },
31
- },
32
- });
33
- </script>
34
-
35
- <script>
36
- let showShakeDemo = $state(false);
37
- function triggerShake() {
38
- showShakeDemo = false;
39
- setTimeout(() => {
40
- showShakeDemo = true;
41
- }, 10);
42
- }
43
- </script>
44
-
45
-
46
- <Story
47
- name="Default"
48
- args={{
49
- error: 'This is an error message',
50
- show: true,
51
- shake: false,
52
- }}
53
- />
54
-
55
- <Story
56
- name="With Shake Animation"
57
- args={{
58
- error: 'Invalid input detected',
59
- show: true,
60
- shake: true,
61
- }}
62
- />
63
-
64
- <Story name="Interactive Shake">
65
- <div class="space-y-4">
66
- <button
67
- class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-primary"
68
- onclick={triggerShake}
69
- >
70
- Trigger Error Shake
71
- </button>
72
- <ErrorDisplay
73
- error="Form validation failed"
74
- show={showShakeDemo}
75
- shake={showShakeDemo}
76
- />
77
- </div>
78
- </Story>
79
-
80
- <Story
81
- name="Different Icons"
82
- >
83
- <div class="space-y-4">
84
- <ErrorDisplay error="Error with default icon" />
85
- <ErrorDisplay error="Warning message" icon="Warning" />
86
- <ErrorDisplay error="Info message" icon="Info" />
87
- </div>
88
- </Story>
89
-
90
- <Story
91
- name="In Form Context"
92
- >
93
- <div class="max-w-md">
94
- <label class="block text-sm font-medium mb-1">Email</label>
95
- <input
96
- type="email"
97
- class="w-full px-3 py-2 border border-red-500 rounded"
98
- value="invalid-email"
99
- />
100
- <div class="mt-1">
101
- <ErrorDisplay error="Please enter a valid email address" shake={true} />
102
- </div>
103
- </div>
104
- </Story>
105
-
106
- <Story
107
- name="Hidden State"
108
- args={{
109
- error: 'This error is hidden',
110
- show: false,
111
- }}
112
- />
1
+ <script module>
2
+ import { defineMeta } from "@storybook/addon-svelte-csf";
3
+
4
+ import ErrorDisplay from './ErrorDisplay.svelte';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Components/ErrorDisplay',
8
+ component: ErrorDisplay,
9
+ tags: ['autodocs'],
10
+ argTypes: {
11
+ error: {
12
+ control: 'text',
13
+ description: 'Error message to display',
14
+ },
15
+ show: {
16
+ control: 'boolean',
17
+ description: 'Controls visibility',
18
+ },
19
+ shake: {
20
+ control: 'boolean',
21
+ description: 'Enable shake animation',
22
+ },
23
+ icon: {
24
+ control: 'text',
25
+ description: 'Icon name from Icon component',
26
+ },
27
+ iconSize: {
28
+ control: 'text',
29
+ description: 'Size of the icon',
30
+ },
31
+ },
32
+ });
33
+ </script>
34
+
35
+ <script>
36
+ let showShakeDemo = $state(false);
37
+ function triggerShake() {
38
+ showShakeDemo = false;
39
+ setTimeout(() => {
40
+ showShakeDemo = true;
41
+ }, 10);
42
+ }
43
+ </script>
44
+
45
+
46
+ <Story
47
+ name="Default"
48
+ args={{
49
+ error: 'This is an error message',
50
+ show: true,
51
+ shake: false,
52
+ }}
53
+ />
54
+
55
+ <Story
56
+ name="With Shake Animation"
57
+ args={{
58
+ error: 'Invalid input detected',
59
+ show: true,
60
+ shake: true,
61
+ }}
62
+ />
63
+
64
+ <Story name="Interactive Shake">
65
+ <div class="space-y-4">
66
+ <button
67
+ class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-primary"
68
+ onclick={triggerShake}
69
+ >
70
+ Trigger Error Shake
71
+ </button>
72
+ <ErrorDisplay
73
+ error="Form validation failed"
74
+ show={showShakeDemo}
75
+ shake={showShakeDemo}
76
+ />
77
+ </div>
78
+ </Story>
79
+
80
+ <Story
81
+ name="Different Icons"
82
+ >
83
+ <div class="space-y-4">
84
+ <ErrorDisplay error="Error with default icon" />
85
+ <ErrorDisplay error="Warning message" icon="Warning" />
86
+ <ErrorDisplay error="Info message" icon="Info" />
87
+ </div>
88
+ </Story>
89
+
90
+ <Story
91
+ name="In Form Context"
92
+ >
93
+ <div class="max-w-md">
94
+ <label class="block text-sm font-medium mb-1">Email</label>
95
+ <input
96
+ type="email"
97
+ class="w-full px-3 py-2 border border-red-500 rounded"
98
+ value="invalid-email"
99
+ />
100
+ <div class="mt-1">
101
+ <ErrorDisplay error="Please enter a valid email address" shake={true} />
102
+ </div>
103
+ </div>
104
+ </Story>
105
+
106
+ <Story
107
+ name="Hidden State"
108
+ args={{
109
+ error: 'This error is hidden',
110
+ show: false,
111
+ }}
112
+ />
@@ -1,38 +1,38 @@
1
- <script lang="ts">
2
- import Icon from "../../primitives/Icons/Icon.svelte";
3
-
4
- type IconName = "Home" | "Shows" | "Availability" | "Profile" | "Payment" | "Notification" | "More" | "MoreHori" | "Info" | "ChevronLeft" | "ChevronRight" | "Signout" | "CheckCircle" | "CheckCircleOutline" | "ErrorCircle" | "ArrowLeft" | "ArrowRight" | "Back" | "DownArrow" | "Message" | "Reload" | "Copy" | "Cross";
5
-
6
- interface Props {
7
- /** Error message to display */
8
- error?: string;
9
- /** Whether to show the error */
10
- show?: boolean;
11
- /** Whether to apply shake animation */
12
- shake?: boolean;
13
- /** Icon to display (from Icon component) */
14
- icon?: IconName;
15
- /** Size of the icon */
16
- iconSize?: string;
17
- /** Additional class for the container */
18
- className?: string;
19
- }
20
-
21
- let {
22
- error = '',
23
- show = true,
24
- shake = false,
25
- icon = 'ErrorCircle',
26
- iconSize = '16',
27
- className = ''
28
- }: Props = $props();
29
- </script>
30
-
31
- {#if error && show}
32
- <div
33
- class="flex items-center gap-1.5 text-red-600 dark:text-red-500 {shake ? 'animate-shake' : ''} {className}"
34
- >
35
- <Icon name={icon} size={iconSize} />
36
- <p class="text-sm font-medium">{error}</p>
37
- </div>
38
- {/if}
1
+ <script lang="ts">
2
+ import Icon from "../../primitives/Icons/Icon.svelte";
3
+
4
+ type IconName = "Home" | "Shows" | "Availability" | "Profile" | "Payment" | "Notification" | "More" | "MoreHori" | "Info" | "ChevronLeft" | "ChevronRight" | "Signout" | "CheckCircle" | "CheckCircleOutline" | "ErrorCircle" | "ArrowLeft" | "ArrowRight" | "Back" | "DownArrow" | "Message" | "Reload" | "Copy" | "Cross";
5
+
6
+ interface Props {
7
+ /** Error message to display */
8
+ error?: string;
9
+ /** Whether to show the error */
10
+ show?: boolean;
11
+ /** Whether to apply shake animation */
12
+ shake?: boolean;
13
+ /** Icon to display (from Icon component) */
14
+ icon?: IconName;
15
+ /** Size of the icon */
16
+ iconSize?: string;
17
+ /** Additional class for the container */
18
+ className?: string;
19
+ }
20
+
21
+ let {
22
+ error = '',
23
+ show = true,
24
+ shake = false,
25
+ icon = 'ErrorCircle',
26
+ iconSize = '16',
27
+ className = ''
28
+ }: Props = $props();
29
+ </script>
30
+
31
+ {#if error && show}
32
+ <div
33
+ class="flex items-center gap-1.5 text-red-600 dark:text-red-500 {shake ? 'animate-shake' : ''} {className}"
34
+ >
35
+ <Icon name={icon} size={iconSize} />
36
+ <p class="text-sm font-medium">{error}</p>
37
+ </div>
38
+ {/if}