@getmicdrop/svelte-components 5.5.4 → 5.6.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 (512) hide show
  1. package/dist/calendar/AboutShow/AboutShow.spec.d.ts +2 -0
  2. package/dist/calendar/AboutShow/AboutShow.spec.d.ts.map +1 -0
  3. package/dist/calendar/AboutShow/AboutShow.spec.js +791 -0
  4. package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
  5. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts +2 -0
  6. package/dist/calendar/Calendar/MiniMonthCalendar.spec.d.ts.map +1 -0
  7. package/dist/calendar/Calendar/MiniMonthCalendar.spec.js +1191 -0
  8. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  9. package/dist/calendar/FAQs/FAQs.spec.d.ts +2 -0
  10. package/dist/calendar/FAQs/FAQs.spec.d.ts.map +1 -0
  11. package/dist/calendar/FAQs/FAQs.spec.js +238 -0
  12. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  13. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts +2 -0
  14. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.d.ts.map +1 -0
  15. package/dist/calendar/MonthSwitcher/MonthSwitcher.spec.js +420 -0
  16. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  17. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts +2 -0
  18. package/dist/calendar/OrderSummary/OrderSummary.spec.d.ts.map +1 -0
  19. package/dist/calendar/OrderSummary/OrderSummary.spec.js +808 -0
  20. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  21. package/dist/calendar/PublicCard/PublicCard.spec.d.ts +2 -0
  22. package/dist/calendar/PublicCard/PublicCard.spec.d.ts.map +1 -0
  23. package/dist/calendar/PublicCard/PublicCard.spec.js +301 -0
  24. package/dist/calendar/PublicCard/PublicCard.svelte +134 -134
  25. package/dist/calendar/ShowCard/ShowCard.spec.d.ts +2 -0
  26. package/dist/calendar/ShowCard/ShowCard.spec.d.ts.map +1 -0
  27. package/dist/calendar/ShowCard/ShowCard.spec.js +714 -0
  28. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  29. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts +2 -0
  30. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.d.ts.map +1 -0
  31. package/dist/calendar/ShowTimeCard/ShowTimeCard.spec.js +241 -0
  32. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  33. package/dist/components/Layout/AppShell.svelte +104 -0
  34. package/dist/components/Layout/AppShell.svelte.d.ts +26 -0
  35. package/dist/components/Layout/AppShell.svelte.d.ts.map +1 -0
  36. package/dist/components/Layout/ContentSection.svelte +80 -0
  37. package/dist/components/Layout/ContentSection.svelte.d.ts +23 -0
  38. package/dist/components/Layout/ContentSection.svelte.d.ts.map +1 -0
  39. package/dist/components/Layout/Grid.svelte +4 -4
  40. package/dist/components/Layout/Heading.svelte +81 -0
  41. package/dist/components/Layout/Heading.svelte.d.ts +24 -0
  42. package/dist/components/Layout/Heading.svelte.d.ts.map +1 -0
  43. package/dist/components/Layout/PageContainer.svelte +69 -0
  44. package/dist/components/Layout/PageContainer.svelte.d.ts +23 -0
  45. package/dist/components/Layout/PageContainer.svelte.d.ts.map +1 -0
  46. package/dist/components/Layout/Responsive.svelte +75 -0
  47. package/dist/components/Layout/Responsive.svelte.d.ts +19 -0
  48. package/dist/components/Layout/Responsive.svelte.d.ts.map +1 -0
  49. package/dist/components/Layout/Section.spec.d.ts +2 -0
  50. package/dist/components/Layout/Section.spec.d.ts.map +1 -0
  51. package/dist/components/Layout/Section.spec.js +149 -0
  52. package/dist/components/Layout/Section.svelte +80 -80
  53. package/dist/components/Layout/ShowOnDesktop.svelte +37 -0
  54. package/dist/components/Layout/ShowOnDesktop.svelte.d.ts +16 -0
  55. package/dist/components/Layout/ShowOnDesktop.svelte.d.ts.map +1 -0
  56. package/dist/components/Layout/ShowOnMobile.svelte +37 -0
  57. package/dist/components/Layout/ShowOnMobile.svelte.d.ts +16 -0
  58. package/dist/components/Layout/ShowOnMobile.svelte.d.ts.map +1 -0
  59. package/dist/components/Layout/Sidebar.spec.d.ts +2 -0
  60. package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
  61. package/dist/components/Layout/Sidebar.spec.js +186 -0
  62. package/dist/components/Layout/Sidebar.svelte +108 -108
  63. package/dist/components/Layout/Stack.spec.js +2 -2
  64. package/dist/components/Layout/Stack.svelte +6 -6
  65. package/dist/components/Layout/Text.svelte +87 -0
  66. package/dist/components/Layout/Text.svelte.d.ts +28 -0
  67. package/dist/components/Layout/Text.svelte.d.ts.map +1 -0
  68. package/dist/components/Layout/TwoColumn.svelte +108 -0
  69. package/dist/components/Layout/TwoColumn.svelte.d.ts +28 -0
  70. package/dist/components/Layout/TwoColumn.svelte.d.ts.map +1 -0
  71. package/dist/components/Layout/__tests__/Heading.test.d.ts +2 -0
  72. package/dist/components/Layout/__tests__/Heading.test.d.ts.map +1 -0
  73. package/dist/components/Layout/__tests__/Heading.test.js +123 -0
  74. package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts +2 -0
  75. package/dist/components/Layout/__tests__/ShowOnDesktop.test.d.ts.map +1 -0
  76. package/dist/components/Layout/__tests__/ShowOnDesktop.test.js +84 -0
  77. package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts +2 -0
  78. package/dist/components/Layout/__tests__/ShowOnMobile.test.d.ts.map +1 -0
  79. package/dist/components/Layout/__tests__/ShowOnMobile.test.js +80 -0
  80. package/dist/components/Layout/__tests__/Text.test.d.ts +2 -0
  81. package/dist/components/Layout/__tests__/Text.test.d.ts.map +1 -0
  82. package/dist/components/Layout/__tests__/Text.test.js +146 -0
  83. package/dist/components/Layout/__tests__/TwoColumn.test.d.ts +2 -0
  84. package/dist/components/Layout/__tests__/TwoColumn.test.d.ts.map +1 -0
  85. package/dist/components/Layout/__tests__/TwoColumn.test.js +129 -0
  86. package/dist/constants/formOptions.spec.js +9 -5
  87. package/dist/constants/validation.js +91 -91
  88. package/dist/constants/validation.spec.js +64 -64
  89. package/dist/datetime/__tests__/timezone.test.js +123 -1
  90. package/dist/forms/createFieldTracker.spec.d.ts +2 -0
  91. package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
  92. package/dist/forms/createFieldTracker.spec.js +343 -0
  93. package/dist/forms/createFormStore.spec.d.ts +2 -0
  94. package/dist/forms/createFormStore.spec.d.ts.map +1 -0
  95. package/dist/forms/createFormStore.spec.js +689 -0
  96. package/dist/index.d.ts +4 -112
  97. package/dist/index.js +40 -226
  98. package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
  99. package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
  100. package/dist/patterns/data/DataGrid.spec.js +159 -0
  101. package/dist/patterns/data/DataGrid.svelte +45 -45
  102. package/dist/patterns/data/DataList.spec.d.ts +2 -0
  103. package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
  104. package/dist/patterns/data/DataList.spec.js +158 -0
  105. package/dist/patterns/data/DataList.svelte +24 -24
  106. package/dist/patterns/data/DataTable.spec.d.ts +2 -0
  107. package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
  108. package/dist/patterns/data/DataTable.spec.js +196 -0
  109. package/dist/patterns/data/DataTable.svelte +36 -36
  110. package/dist/patterns/forms/FormActions.spec.js +95 -88
  111. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  112. package/dist/patterns/forms/FormActions.svelte +46 -46
  113. package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
  114. package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
  115. package/dist/patterns/forms/FormGrid.spec.js +125 -0
  116. package/dist/patterns/forms/FormGrid.svelte +33 -33
  117. package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
  118. package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
  119. package/dist/patterns/forms/FormSection.spec.js +153 -0
  120. package/dist/patterns/forms/FormSection.svelte +32 -32
  121. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  122. package/dist/patterns/forms/FormValidationSummary.svelte +74 -74
  123. package/dist/patterns/layout/Sidebar.spec.d.ts +2 -0
  124. package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
  125. package/dist/patterns/layout/Sidebar.spec.js +159 -0
  126. package/dist/patterns/layout/Sidebar.svelte +39 -39
  127. package/dist/patterns/layout/index.d.ts +9 -0
  128. package/dist/patterns/layout/index.js +22 -0
  129. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  130. package/dist/patterns/navigation/BottomNav.svelte +64 -64
  131. package/dist/patterns/navigation/Header.spec.js +33 -24
  132. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  133. package/dist/patterns/navigation/Header.svelte +193 -193
  134. package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
  135. package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
  136. package/dist/patterns/page/PageHeader.spec.js +167 -0
  137. package/dist/patterns/page/PageHeader.svelte +18 -18
  138. package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
  139. package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
  140. package/dist/patterns/page/PageLayout.spec.js +145 -0
  141. package/dist/patterns/page/PageLayout.svelte +40 -40
  142. package/dist/patterns/page/PageLoader.spec.js +57 -54
  143. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  144. package/dist/patterns/page/PageLoader.svelte +24 -24
  145. package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
  146. package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
  147. package/dist/patterns/page/SectionHeader.spec.js +197 -0
  148. package/dist/patterns/page/SectionHeader.svelte +29 -29
  149. package/dist/presets/badges.js +112 -112
  150. package/dist/presets/badges.spec.d.ts +2 -0
  151. package/dist/presets/badges.spec.d.ts.map +1 -0
  152. package/dist/presets/badges.spec.js +172 -0
  153. package/dist/presets/buttons.js +76 -76
  154. package/dist/presets/buttons.spec.d.ts +2 -0
  155. package/dist/presets/buttons.spec.d.ts.map +1 -0
  156. package/dist/presets/buttons.spec.js +135 -0
  157. package/dist/presets/index.js +9 -9
  158. package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
  159. package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
  160. package/dist/primitives/Accordion/Accordion.spec.js +83 -0
  161. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  162. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  163. package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
  164. package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
  165. package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
  166. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  167. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
  168. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
  169. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
  170. package/dist/primitives/Alert/Alert.spec.js +173 -170
  171. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  172. package/dist/primitives/Alert/Alert.svelte +27 -27
  173. package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
  174. package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
  175. package/dist/primitives/Avatar/Avatar.spec.js +211 -0
  176. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  177. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  178. package/dist/primitives/Badges/Badge.spec.js +144 -103
  179. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  180. package/dist/primitives/Badges/Badge.svelte +79 -79
  181. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -127
  182. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  183. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  184. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
  185. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
  186. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
  187. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -120
  188. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  189. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  190. package/dist/primitives/Button/Button.spec.js +223 -211
  191. package/dist/primitives/Button/Button.stories.svelte +76 -76
  192. package/dist/primitives/Button/Button.svelte +270 -270
  193. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -48
  194. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  195. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
  196. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
  197. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
  198. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  199. package/dist/primitives/Card.spec.js +49 -49
  200. package/dist/primitives/Card.stories.svelte +22 -22
  201. package/dist/primitives/Card.svelte +28 -28
  202. package/dist/primitives/Checkbox/Checkbox.spec.d.ts +2 -0
  203. package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
  204. package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
  205. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  206. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  207. package/dist/primitives/DarkModeToggle.spec.js +390 -357
  208. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  209. package/dist/primitives/DarkModeToggle.svelte +136 -136
  210. package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
  211. package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
  212. package/dist/primitives/Drawer/Drawer.spec.js +212 -0
  213. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  214. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  215. package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
  216. package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
  217. package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
  218. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  219. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  220. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
  221. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
  222. package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
  223. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  224. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  225. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  226. package/dist/primitives/Icons/Availability.svelte +14 -14
  227. package/dist/primitives/Icons/Back.svelte +14 -14
  228. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  229. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  230. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  231. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  232. package/dist/primitives/Icons/Copy.svelte +15 -15
  233. package/dist/primitives/Icons/Cross.svelte +5 -5
  234. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  235. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  236. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  237. package/dist/primitives/Icons/Home.svelte +15 -15
  238. package/dist/primitives/Icons/Icon.spec.js +169 -169
  239. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  240. package/dist/primitives/Icons/Icon.svelte +52 -52
  241. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  242. package/dist/primitives/Icons/Info.svelte +7 -7
  243. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  244. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  245. package/dist/primitives/Icons/Message.svelte +15 -15
  246. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  247. package/dist/primitives/Icons/More.svelte +21 -21
  248. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  249. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  250. package/dist/primitives/Icons/Notification.svelte +14 -14
  251. package/dist/primitives/Icons/Payment.svelte +14 -14
  252. package/dist/primitives/Icons/Profile.svelte +21 -21
  253. package/dist/primitives/Icons/Reload.svelte +29 -29
  254. package/dist/primitives/Icons/Shows.svelte +21 -21
  255. package/dist/primitives/Icons/Signout.svelte +21 -21
  256. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  257. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  258. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  259. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  260. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  261. package/dist/primitives/Icons/iconTestUtils.spec.d.ts +2 -0
  262. package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
  263. package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
  264. package/dist/primitives/Input/Input.spec.js +573 -573
  265. package/dist/primitives/Input/Input.stories.svelte +139 -139
  266. package/dist/primitives/Input/Input.svelte +418 -431
  267. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  268. package/dist/primitives/Input/Select.spec.js +212 -218
  269. package/dist/primitives/Input/Select.stories.svelte +112 -112
  270. package/dist/primitives/Input/Select.svelte +128 -128
  271. package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
  272. package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
  273. package/dist/primitives/Input/Textarea.spec.js +255 -0
  274. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  275. package/dist/primitives/Input/Textarea.svelte +35 -35
  276. package/dist/primitives/Label/Label.spec.d.ts +2 -0
  277. package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
  278. package/dist/primitives/Label/Label.spec.js +157 -0
  279. package/dist/primitives/Label/Label.svelte +37 -37
  280. package/dist/primitives/Modal/Modal.spec.js +99 -95
  281. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  282. package/dist/primitives/Modal/Modal.svelte +158 -158
  283. package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
  284. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
  285. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
  286. package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
  287. package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
  288. package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
  289. package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
  290. package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
  291. package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
  292. package/dist/primitives/Pagination/Pagination.spec.js +266 -0
  293. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  294. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  295. package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
  296. package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
  297. package/dist/primitives/Radio/Radio.spec.js +206 -0
  298. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  299. package/dist/primitives/Radio/Radio.svelte +67 -67
  300. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
  301. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
  302. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
  303. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  304. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
  305. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
  306. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
  307. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  308. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
  309. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
  310. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
  311. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  312. package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
  313. package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
  314. package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
  315. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  316. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  317. package/dist/primitives/Spinner/Spinner.spec.js +71 -75
  318. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  319. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  320. package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
  321. package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
  322. package/dist/primitives/Tabs/TabItem.spec.js +130 -0
  323. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  324. package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
  325. package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
  326. package/dist/primitives/Tabs/Tabs.spec.js +295 -0
  327. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  328. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  329. package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
  330. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
  331. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
  332. package/dist/primitives/Toggle.spec.js +143 -127
  333. package/dist/primitives/Toggle.stories.svelte +92 -92
  334. package/dist/primitives/Toggle.svelte +71 -71
  335. package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
  336. package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
  337. package/dist/primitives/Typography/Typography.spec.js +183 -0
  338. package/dist/primitives/Typography/Typography.svelte +53 -53
  339. package/dist/primitives/ValidationError.spec.js +103 -103
  340. package/dist/primitives/ValidationError.stories.svelte +69 -69
  341. package/dist/primitives/ValidationError.svelte +29 -29
  342. package/dist/primitives/index.d.ts +1 -0
  343. package/dist/primitives/index.js +84 -81
  344. package/dist/recipes/CropImage/CropImage.spec.js +208 -216
  345. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  346. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  347. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
  348. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
  349. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
  350. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  351. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  352. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
  353. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
  354. package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
  355. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  356. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
  357. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
  358. package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
  359. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  360. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  361. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  362. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  363. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -129
  364. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  365. package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
  366. package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
  367. package/dist/recipes/fields/CheckboxField.spec.js +135 -0
  368. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  369. package/dist/recipes/fields/FormField.spec.d.ts +2 -0
  370. package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
  371. package/dist/recipes/fields/FormField.spec.js +159 -0
  372. package/dist/recipes/fields/FormField.svelte +58 -58
  373. package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
  374. package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
  375. package/dist/recipes/fields/RadioGroup.spec.js +199 -0
  376. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  377. package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
  378. package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
  379. package/dist/recipes/fields/SelectField.spec.js +188 -0
  380. package/dist/recipes/fields/SelectField.svelte +80 -80
  381. package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
  382. package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
  383. package/dist/recipes/fields/TextareaField.spec.js +205 -0
  384. package/dist/recipes/fields/TextareaField.svelte +97 -97
  385. package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
  386. package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
  387. package/dist/recipes/fields/ToggleField.spec.js +153 -0
  388. package/dist/recipes/fields/ToggleField.svelte +60 -60
  389. package/dist/recipes/fields/index.js +7 -7
  390. package/dist/recipes/inputs/MultiSelect.spec.js +258 -257
  391. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  392. package/dist/recipes/inputs/MultiSelect.svelte +256 -249
  393. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
  394. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  395. package/dist/recipes/inputs/OTPInput.spec.js +251 -238
  396. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  397. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  398. package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
  399. package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
  400. package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
  401. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  402. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +253 -173
  403. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -117
  404. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
  405. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
  406. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
  407. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1246 -300
  408. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  409. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +326 -326
  410. package/dist/recipes/inputs/Search.spec.d.ts +2 -0
  411. package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
  412. package/dist/recipes/inputs/Search.spec.js +177 -0
  413. package/dist/recipes/inputs/Search.svelte +37 -37
  414. package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
  415. package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
  416. package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
  417. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  418. package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
  419. package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
  420. package/dist/recipes/modals/AlertModal.spec.js +432 -0
  421. package/dist/recipes/modals/AlertModal.svelte +130 -130
  422. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -191
  423. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  424. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  425. package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
  426. package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
  427. package/dist/recipes/modals/InputModal.spec.js +872 -0
  428. package/dist/recipes/modals/InputModal.svelte +182 -182
  429. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  430. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  431. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts +2 -0
  432. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
  433. package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
  434. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  435. package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
  436. package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
  437. package/dist/recipes/modals/StatusModal.spec.js +599 -0
  438. package/dist/recipes/modals/StatusModal.svelte +206 -206
  439. package/dist/services/EventService.js +75 -75
  440. package/dist/services/EventService.spec.js +217 -217
  441. package/dist/services/ShowService.spec.js +345 -342
  442. package/dist/stores/auth.js +36 -36
  443. package/dist/stores/auth.spec.js +139 -139
  444. package/dist/stores/toaster.js +13 -13
  445. package/dist/stories/ButtonAuditDashboard.spec.d.ts +2 -0
  446. package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
  447. package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
  448. package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
  449. package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
  450. package/dist/stories/ButtonAuditReview.spec.js +422 -0
  451. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  452. package/dist/stories/ButtonAuditReview.svelte +427 -427
  453. package/dist/stories/ButtonGridView.spec.d.ts +2 -0
  454. package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
  455. package/dist/stories/ButtonGridView.spec.js +667 -0
  456. package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
  457. package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
  458. package/dist/stories/ButtonShowcase.spec.js +499 -0
  459. package/dist/stories/PatternsGallery.spec.d.ts +2 -0
  460. package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
  461. package/dist/stories/PatternsGallery.spec.js +514 -0
  462. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  463. package/dist/stories/PatternsGallery.svelte +206 -206
  464. package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
  465. package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
  466. package/dist/stories/PrimitivesGallery.spec.js +813 -0
  467. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  468. package/dist/stories/PrimitivesGallery.svelte +725 -725
  469. package/dist/stories/RecipesGallery.spec.d.ts +2 -0
  470. package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
  471. package/dist/stories/RecipesGallery.spec.js +299 -0
  472. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  473. package/dist/stories/RecipesGallery.svelte +271 -271
  474. package/dist/stories/button-audit-manifest.json +11186 -11186
  475. package/dist/stripe/useStripeTheme.spec.d.ts +2 -0
  476. package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
  477. package/dist/stripe/useStripeTheme.spec.js +793 -0
  478. package/dist/tailwind/preset.cjs +82 -82
  479. package/dist/telemetry.d.ts.map +1 -1
  480. package/dist/telemetry.js +405 -404
  481. package/dist/telemetry.spec.js +1144 -661
  482. package/dist/tokens/__tests__/colors.test.d.ts +2 -0
  483. package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
  484. package/dist/tokens/__tests__/colors.test.js +152 -0
  485. package/dist/tokens/__tests__/radius.test.d.ts +2 -0
  486. package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
  487. package/dist/tokens/__tests__/radius.test.js +118 -0
  488. package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
  489. package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
  490. package/dist/tokens/__tests__/shadows.test.js +105 -0
  491. package/dist/tokens/__tests__/spacing.test.js +11 -8
  492. package/dist/tokens/__tests__/typography-base.test.d.ts +2 -0
  493. package/dist/tokens/__tests__/typography-base.test.d.ts.map +1 -0
  494. package/dist/tokens/__tests__/typography-base.test.js +138 -0
  495. package/dist/tokens/__tests__/typography.test.d.ts +2 -0
  496. package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
  497. package/dist/tokens/__tests__/typography.test.js +156 -0
  498. package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
  499. package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
  500. package/dist/tokens/__tests__/z-index.test.js +121 -0
  501. package/dist/tokens/tokens.css +87 -87
  502. package/dist/tokens/typography-base.css +163 -0
  503. package/dist/utils/apiConfig.spec.js +219 -118
  504. package/dist/utils/formatters.spec.d.ts +2 -0
  505. package/dist/utils/formatters.spec.d.ts.map +1 -0
  506. package/dist/utils/formatters.spec.js +82 -0
  507. package/dist/utils/transitions.js +62 -62
  508. package/dist/utils/transitions.spec.d.ts +2 -0
  509. package/dist/utils/transitions.spec.d.ts.map +1 -0
  510. package/dist/utils/transitions.spec.js +130 -0
  511. package/dist/utils/utils.js +354 -354
  512. package/package.json +292 -286
@@ -0,0 +1,432 @@
1
+ import { render, screen, waitFor } from "@testing-library/svelte";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { expect, describe, test, vi, beforeEach, afterEach } from "vitest";
4
+ import AlertModal from "./AlertModal.svelte";
5
+
6
+ function setupTest(args = {}) {
7
+ const user = userEvent.setup();
8
+ const { component } = render(AlertModal, {
9
+ props: {
10
+ show: true,
11
+ title: "Test Alert",
12
+ message: "This is a test message",
13
+ ...args,
14
+ },
15
+ });
16
+ return { user, component };
17
+ }
18
+
19
+ describe("AlertModal Component Tests", () => {
20
+ afterEach(() => {
21
+ vi.restoreAllMocks();
22
+ });
23
+
24
+ // Note: Modal renders both mobile sheet and desktop centered versions
25
+ // CSS hides one based on viewport, but in tests both are in DOM
26
+ // Use getAllByText/queryAllByText and check length or first element
27
+
28
+ test("Does not render when show is false", () => {
29
+ render(AlertModal, { props: { show: false } });
30
+ expect(screen.queryByText("Test Alert")).not.toBeInTheDocument();
31
+ });
32
+
33
+ test("Renders when show is true", () => {
34
+ setupTest();
35
+ // Modal renders both mobile and desktop versions
36
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
37
+ });
38
+
39
+ test("Displays title", () => {
40
+ setupTest({ title: "Success!" });
41
+ expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
42
+ });
43
+
44
+ test("Displays message", () => {
45
+ setupTest({ message: "Operation completed successfully" });
46
+ expect(
47
+ screen.getAllByText("Operation completed successfully").length
48
+ ).toBeGreaterThan(0);
49
+ });
50
+
51
+ test("Hides title when not provided", () => {
52
+ setupTest({ title: "" });
53
+ const headings = screen.queryAllByRole("heading", { level: 2 });
54
+ expect(headings.length).toBe(0);
55
+ });
56
+
57
+ test("Hides message when not provided", () => {
58
+ setupTest({ message: "" });
59
+ // When message is empty, there should be no paragraph with message content
60
+ const paragraphs = document.querySelectorAll("p");
61
+ expect(paragraphs.length).toBe(0);
62
+ });
63
+
64
+ test("Displays custom button text", () => {
65
+ setupTest({ buttonText: "Got it" });
66
+ expect(screen.getAllByText("Got it").length).toBeGreaterThan(0);
67
+ });
68
+
69
+ test("Displays default button text", () => {
70
+ setupTest();
71
+ expect(screen.getAllByText("OK").length).toBeGreaterThan(0);
72
+ });
73
+
74
+ test("Calls onconfirm when button is clicked", async () => {
75
+ const onconfirm = vi.fn();
76
+ const { user } = setupTest({ onconfirm, autoClose: 0 });
77
+
78
+ const button = screen.getAllByText("OK")[0];
79
+ await user.click(button);
80
+
81
+ await waitFor(() => {
82
+ expect(onconfirm).toHaveBeenCalledOnce();
83
+ });
84
+ });
85
+
86
+ test("Calls onclose when button is clicked", async () => {
87
+ const onclose = vi.fn();
88
+ const { user } = setupTest({ onclose, autoClose: 0 });
89
+
90
+ const button = screen.getAllByText("OK")[0];
91
+ await user.click(button);
92
+
93
+ await waitFor(() => {
94
+ expect(onclose).toHaveBeenCalledOnce();
95
+ });
96
+ });
97
+
98
+ test("Calls both onconfirm and onclose when button is clicked", async () => {
99
+ const onconfirm = vi.fn();
100
+ const onclose = vi.fn();
101
+ const { user } = setupTest({ onconfirm, onclose, autoClose: 0 });
102
+
103
+ const button = screen.getAllByText("OK")[0];
104
+ await user.click(button);
105
+
106
+ await waitFor(() => {
107
+ expect(onconfirm).toHaveBeenCalledOnce();
108
+ expect(onclose).toHaveBeenCalledOnce();
109
+ });
110
+ });
111
+
112
+ test("Closes modal when button is clicked", async () => {
113
+ const onclose = vi.fn();
114
+ const { user } = setupTest({ autoClose: 0, onclose });
115
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
116
+
117
+ const button = screen.getAllByText("OK")[0];
118
+ await user.click(button);
119
+
120
+ // Verify close was called (actual DOM removal is tested in Modal component)
121
+ await waitFor(() => {
122
+ expect(onclose).toHaveBeenCalledOnce();
123
+ });
124
+ });
125
+
126
+ // Variant tests - Success
127
+ test("Renders success variant with correct icon", () => {
128
+ setupTest({ variant: "success" });
129
+ // CheckOutline icon should be present
130
+ const iconContainer = document.querySelector(".bg-green-100");
131
+ expect(iconContainer).toBeInTheDocument();
132
+ const icon = iconContainer?.querySelector(".text-green-600");
133
+ expect(icon).toBeInTheDocument();
134
+ });
135
+
136
+ test("Success variant has green styling", () => {
137
+ setupTest({ variant: "success" });
138
+ const iconContainer = document.querySelector(".bg-green-100");
139
+ expect(iconContainer).toHaveClass("bg-green-100");
140
+ });
141
+
142
+ test("Success variant button uses default variant", () => {
143
+ setupTest({ variant: "success" });
144
+ const button = screen.getAllByText("OK")[0].closest("button");
145
+ // Default variant has primary/blue styling
146
+ expect(button).toHaveClass("bg-blue-700");
147
+ });
148
+
149
+ // Variant tests - Error
150
+ test("Renders error variant with correct icon", () => {
151
+ setupTest({ variant: "error" });
152
+ // CloseOutline icon should be present
153
+ const iconContainer = document.querySelector(".bg-red-100");
154
+ expect(iconContainer).toBeInTheDocument();
155
+ const icon = iconContainer?.querySelector(".text-red-600");
156
+ expect(icon).toBeInTheDocument();
157
+ });
158
+
159
+ test("Error variant has red styling", () => {
160
+ setupTest({ variant: "error" });
161
+ const iconContainer = document.querySelector(".bg-red-100");
162
+ expect(iconContainer).toHaveClass("bg-red-100");
163
+ });
164
+
165
+ test("Error variant button uses red variant", () => {
166
+ setupTest({ variant: "error" });
167
+ const button = screen.getAllByText("OK")[0].closest("button");
168
+ // Red variant has red styling
169
+ expect(button).toHaveClass("bg-red-700");
170
+ });
171
+
172
+ // Variant tests - Warning
173
+ test("Renders warning variant with correct icon", () => {
174
+ setupTest({ variant: "warning" });
175
+ // ExclamationTriangleOutline icon should be present
176
+ const iconContainer = document.querySelector(".bg-amber-100");
177
+ expect(iconContainer).toBeInTheDocument();
178
+ const icon = iconContainer?.querySelector(".text-amber-600");
179
+ expect(icon).toBeInTheDocument();
180
+ });
181
+
182
+ test("Warning variant has amber styling", () => {
183
+ setupTest({ variant: "warning" });
184
+ const iconContainer = document.querySelector(".bg-amber-100");
185
+ expect(iconContainer).toHaveClass("bg-amber-100");
186
+ });
187
+
188
+ test("Warning variant button uses default variant", () => {
189
+ setupTest({ variant: "warning" });
190
+ const button = screen.getAllByText("OK")[0].closest("button");
191
+ // Default variant has primary/blue styling
192
+ expect(button).toHaveClass("bg-blue-700");
193
+ });
194
+
195
+ // Variant tests - Info
196
+ test("Renders info variant with correct icon", () => {
197
+ setupTest({ variant: "info" });
198
+ // InfoCircleOutline icon should be present
199
+ const iconContainer = document.querySelector(".bg-blue-100");
200
+ expect(iconContainer).toBeInTheDocument();
201
+ const icon = iconContainer?.querySelector(".text-blue-600");
202
+ expect(icon).toBeInTheDocument();
203
+ });
204
+
205
+ test("Info variant has blue styling", () => {
206
+ setupTest({ variant: "info" });
207
+ const iconContainer = document.querySelector(".bg-blue-100");
208
+ expect(iconContainer).toHaveClass("bg-blue-100");
209
+ });
210
+
211
+ test("Info variant button uses default variant", () => {
212
+ setupTest({ variant: "info" });
213
+ const button = screen.getAllByText("OK")[0].closest("button");
214
+ // Default variant has primary/blue styling
215
+ expect(button).toHaveClass("bg-blue-700");
216
+ });
217
+
218
+ test("Defaults to info variant when invalid variant provided", () => {
219
+ setupTest({ variant: "invalid" });
220
+ // Should fall back to info variant
221
+ const iconContainer = document.querySelector(".bg-blue-100");
222
+ expect(iconContainer).toBeInTheDocument();
223
+ });
224
+
225
+ // Auto-close tests
226
+ test("Does not auto-close when autoClose is 0", async () => {
227
+ vi.useFakeTimers();
228
+ try {
229
+ setupTest({ autoClose: 0 });
230
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
231
+
232
+ // Advance time significantly
233
+ await vi.advanceTimersByTimeAsync(5000);
234
+
235
+ // Modal should still be visible
236
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
237
+ } finally {
238
+ vi.useRealTimers();
239
+ }
240
+ });
241
+
242
+ test("Auto-closes after specified delay", async () => {
243
+ vi.useFakeTimers();
244
+ try {
245
+ const onclose = vi.fn();
246
+ setupTest({ autoClose: 3000, onclose });
247
+
248
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
249
+
250
+ // Advance time by the auto-close delay
251
+ await vi.advanceTimersByTimeAsync(3000);
252
+
253
+ // Wait for onclose to be called
254
+ await waitFor(() => {
255
+ expect(onclose).toHaveBeenCalledOnce();
256
+ });
257
+ } finally {
258
+ vi.useRealTimers();
259
+ }
260
+ });
261
+
262
+ test("Auto-close timer is cleared when modal closes manually", async () => {
263
+ // This test verifies that manually closing the modal clears the auto-close timer
264
+ // We test this by ensuring the close callback is only called once, not twice
265
+ const onclose = vi.fn();
266
+ const { user } = setupTest({ autoClose: 10000, onclose });
267
+
268
+ // Click button immediately to close before auto-close triggers
269
+ const button = screen.getAllByText("OK")[0];
270
+ await user.click(button);
271
+
272
+ await waitFor(() => {
273
+ expect(onclose).toHaveBeenCalledOnce();
274
+ });
275
+
276
+ // If timer wasn't cleared, it would call onclose again after 10 seconds
277
+ // Since we can't easily test this with real timers in a fast test,
278
+ // we verify the timer cleanup exists in the component (lines 84-85)
279
+ // and that onclose was only called once
280
+ });
281
+
282
+ // Size prop test
283
+ test("Passes size prop to Modal", () => {
284
+ setupTest({ size: "medium" });
285
+ // Modal component receives the size prop
286
+ // We can't easily test this without mocking Modal, but we can verify it doesn't error
287
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
288
+ });
289
+
290
+ test("Uses default small size", () => {
291
+ setupTest();
292
+ // Default size is small
293
+ expect(screen.getAllByText("Test Alert").length).toBeGreaterThan(0);
294
+ });
295
+
296
+ // Layout and styling tests
297
+ test("Icon container is centered", () => {
298
+ setupTest();
299
+ const iconWrapper = document.querySelector(".flex.justify-center.items-center");
300
+ expect(iconWrapper).toBeInTheDocument();
301
+ });
302
+
303
+ test("Icon container has proper dimensions", () => {
304
+ setupTest();
305
+ const iconContainer = document.querySelector(".w-14.h-14.rounded-full");
306
+ expect(iconContainer).toBeInTheDocument();
307
+ expect(iconContainer).toHaveClass("w-14");
308
+ expect(iconContainer).toHaveClass("h-14");
309
+ expect(iconContainer).toHaveClass("rounded-full");
310
+ });
311
+
312
+ test("Title has proper styling", () => {
313
+ setupTest({ title: "Alert Title" });
314
+ const title = screen.getAllByText("Alert Title")[0];
315
+ expect(title.tagName).toBe("H2");
316
+ expect(title).toHaveClass("mt-4");
317
+ });
318
+
319
+ test("Message has proper styling", () => {
320
+ setupTest({ message: "Alert message" });
321
+ const message = screen.getAllByText("Alert message")[0];
322
+ expect(message.tagName).toBe("P");
323
+ expect(message).toHaveClass("leading-relaxed");
324
+ });
325
+
326
+ test("Button has full width", () => {
327
+ setupTest();
328
+ const button = screen.getAllByText("OK")[0].closest("button");
329
+ // Button should be in a container with w-full
330
+ const buttonContainer = button?.parentElement;
331
+ expect(buttonContainer).toHaveClass("w-full");
332
+ });
333
+
334
+ test("Content is centered", () => {
335
+ setupTest();
336
+ const header = document.querySelector(".text-center");
337
+ expect(header).toBeInTheDocument();
338
+ });
339
+
340
+ // Dark mode styling tests
341
+ test("Success variant has dark mode classes", () => {
342
+ setupTest({ variant: "success" });
343
+ const iconContainer = document.querySelector(".bg-green-100");
344
+ expect(iconContainer).toHaveClass("dark:bg-green-900/30");
345
+ });
346
+
347
+ test("Error variant has dark mode classes", () => {
348
+ setupTest({ variant: "error" });
349
+ const iconContainer = document.querySelector(".bg-red-100");
350
+ expect(iconContainer).toHaveClass("dark:bg-red-900/30");
351
+ });
352
+
353
+ test("Warning variant has dark mode classes", () => {
354
+ setupTest({ variant: "warning" });
355
+ const iconContainer = document.querySelector(".bg-amber-100");
356
+ expect(iconContainer).toHaveClass("dark:bg-amber-900/30");
357
+ });
358
+
359
+ test("Info variant has dark mode classes", () => {
360
+ setupTest({ variant: "info" });
361
+ const iconContainer = document.querySelector(".bg-blue-100");
362
+ expect(iconContainer).toHaveClass("dark:bg-blue-900/30");
363
+ });
364
+
365
+ // Integration tests
366
+ test("Full success flow", async () => {
367
+ const onconfirm = vi.fn();
368
+ const onclose = vi.fn();
369
+ const { user } = setupTest({
370
+ variant: "success",
371
+ title: "Success!",
372
+ message: "Your changes have been saved.",
373
+ buttonText: "Great",
374
+ onconfirm,
375
+ onclose,
376
+ autoClose: 0,
377
+ });
378
+
379
+ // Verify content
380
+ expect(screen.getAllByText("Success!").length).toBeGreaterThan(0);
381
+ expect(
382
+ screen.getAllByText("Your changes have been saved.").length
383
+ ).toBeGreaterThan(0);
384
+ expect(screen.getAllByText("Great").length).toBeGreaterThan(0);
385
+
386
+ // Verify success styling
387
+ expect(document.querySelector(".bg-green-100")).toBeInTheDocument();
388
+
389
+ // Click button
390
+ const button = screen.getAllByText("Great")[0];
391
+ await user.click(button);
392
+
393
+ // Verify callbacks were called
394
+ await waitFor(() => {
395
+ expect(onconfirm).toHaveBeenCalledOnce();
396
+ expect(onclose).toHaveBeenCalledOnce();
397
+ });
398
+ });
399
+
400
+ test("Full error flow with auto-close", async () => {
401
+ vi.useFakeTimers();
402
+ try {
403
+ const onclose = vi.fn();
404
+ setupTest({
405
+ variant: "error",
406
+ title: "Error",
407
+ message: "Something went wrong.",
408
+ autoClose: 2000,
409
+ onclose,
410
+ });
411
+
412
+ // Verify content
413
+ expect(screen.getAllByText("Error").length).toBeGreaterThan(0);
414
+ expect(
415
+ screen.getAllByText("Something went wrong.").length
416
+ ).toBeGreaterThan(0);
417
+
418
+ // Verify error styling
419
+ expect(document.querySelector(".bg-red-100")).toBeInTheDocument();
420
+
421
+ // Advance time to trigger auto-close
422
+ await vi.advanceTimersByTimeAsync(2000);
423
+
424
+ // Verify onclose was called
425
+ await vi.waitFor(() => {
426
+ expect(onclose).toHaveBeenCalledOnce();
427
+ });
428
+ } finally {
429
+ vi.useRealTimers();
430
+ }
431
+ });
432
+ });
@@ -1,130 +1,130 @@
1
- <script>
2
- /**
3
- * AlertModal - Simple alert with single action and optional auto-close
4
- *
5
- * A lighter alternative to StatusModal for simple notifications.
6
- * Supports auto-close after a delay.
7
- *
8
- * @example
9
- * <AlertModal
10
- * bind:show={showAlert}
11
- * variant="success"
12
- * title="Changes saved"
13
- * message="Your changes have been saved successfully."
14
- * autoClose={3000}
15
- * />
16
- */
17
- import Modal from '../../primitives/Modal/Modal.svelte';
18
- import Button from '../../primitives/Button/Button.svelte';
19
- import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from '../../primitives/Icons';
20
- import { typography } from '../../tokens/typography';
21
-
22
- let {
23
- /** Whether the modal is visible */
24
- show = $bindable(false),
25
- /** Alert variant */
26
- variant = 'info',
27
- /** Alert title */
28
- title = '',
29
- /** Alert message */
30
- message = '',
31
- /** Button text */
32
- buttonText = 'OK',
33
- /** Auto-close delay in milliseconds (0 to disable) */
34
- autoClose = 0,
35
- /** Modal size */
36
- size = 'small',
37
- /** Callbacks */
38
- onclose,
39
- onconfirm,
40
- } = $props();
41
-
42
- // Variant styles
43
- const variantStyles = {
44
- success: {
45
- bg: 'bg-green-100 dark:bg-green-900/30',
46
- icon: 'text-green-600 dark:text-green-400',
47
- button: 'default'
48
- },
49
- error: {
50
- bg: 'bg-red-100 dark:bg-red-900/30',
51
- icon: 'text-red-600 dark:text-red-400',
52
- button: 'red'
53
- },
54
- warning: {
55
- bg: 'bg-amber-100 dark:bg-amber-900/30',
56
- icon: 'text-amber-600 dark:text-amber-400',
57
- button: 'default'
58
- },
59
- info: {
60
- bg: 'bg-blue-100 dark:bg-blue-900/30',
61
- icon: 'text-blue-600 dark:text-blue-400',
62
- button: 'default'
63
- }
64
- };
65
-
66
- let styles = $derived(variantStyles[variant] || variantStyles.info);
67
-
68
- function closeModal() {
69
- show = false;
70
- onclose?.();
71
- }
72
-
73
- function handleConfirm() {
74
- onconfirm?.();
75
- closeModal();
76
- }
77
-
78
- // Start auto-close timer when modal opens
79
- $effect(() => {
80
- if (show && autoClose > 0) {
81
- const timer = setTimeout(() => {
82
- closeModal();
83
- }, autoClose);
84
- return () => clearTimeout(timer);
85
- }
86
- });
87
- </script>
88
-
89
- <Modal bind:show {size}>
90
- {#snippet header()}
91
- <div class="text-center">
92
- <div class="flex justify-center items-center">
93
- <div class="w-14 h-14 rounded-full {styles.bg} flex items-center justify-center">
94
- {#if variant === 'success'}
95
- <CheckOutline class="w-7 h-7 {styles.icon}" />
96
- {:else if variant === 'error'}
97
- <CloseOutline class="w-7 h-7 {styles.icon}" />
98
- {:else if variant === 'warning'}
99
- <ExclamationTriangleOutline class="w-7 h-7 {styles.icon}" />
100
- {:else}
101
- <InfoCircleOutline class="w-7 h-7 {styles.icon}" />
102
- {/if}
103
- </div>
104
- </div>
105
- {#if title}
106
- <h2 class={`${typography.h2} mt-4`}>{title}</h2>
107
- {/if}
108
- </div>
109
- {/snippet}
110
-
111
- {#snippet body()}
112
- <div class="text-center mt-4">
113
- {#if message}
114
- <p class={`${typography.smMuted} leading-relaxed`}>{message}</p>
115
- {/if}
116
- </div>
117
- {/snippet}
118
-
119
- {#snippet footer()}
120
- <div class="w-full">
121
- <Button
122
- size="full"
123
- variant={styles.button}
124
- onclick={handleConfirm}
125
- >
126
- {buttonText}
127
- </Button>
128
- </div>
129
- {/snippet}
130
- </Modal>
1
+ <script>
2
+ /**
3
+ * AlertModal - Simple alert with single action and optional auto-close
4
+ *
5
+ * A lighter alternative to StatusModal for simple notifications.
6
+ * Supports auto-close after a delay.
7
+ *
8
+ * @example
9
+ * <AlertModal
10
+ * bind:show={showAlert}
11
+ * variant="success"
12
+ * title="Changes saved"
13
+ * message="Your changes have been saved successfully."
14
+ * autoClose={3000}
15
+ * />
16
+ */
17
+ import Modal from '../../primitives/Modal/Modal.svelte';
18
+ import Button from '../../primitives/Button/Button.svelte';
19
+ import { CheckOutline, CloseOutline, ExclamationTriangleOutline, InfoCircleOutline } from '../../primitives/Icons';
20
+ import { typography } from '../../tokens/typography';
21
+
22
+ let {
23
+ /** Whether the modal is visible */
24
+ show = $bindable(false),
25
+ /** Alert variant */
26
+ variant = 'info',
27
+ /** Alert title */
28
+ title = '',
29
+ /** Alert message */
30
+ message = '',
31
+ /** Button text */
32
+ buttonText = 'OK',
33
+ /** Auto-close delay in milliseconds (0 to disable) */
34
+ autoClose = 0,
35
+ /** Modal size */
36
+ size = 'small',
37
+ /** Callbacks */
38
+ onclose,
39
+ onconfirm,
40
+ } = $props();
41
+
42
+ // Variant styles
43
+ const variantStyles = {
44
+ success: {
45
+ bg: 'bg-green-100 dark:bg-green-900/30',
46
+ icon: 'text-green-600 dark:text-green-400',
47
+ button: 'default'
48
+ },
49
+ error: {
50
+ bg: 'bg-red-100 dark:bg-red-900/30',
51
+ icon: 'text-red-600 dark:text-red-400',
52
+ button: 'red'
53
+ },
54
+ warning: {
55
+ bg: 'bg-amber-100 dark:bg-amber-900/30',
56
+ icon: 'text-amber-600 dark:text-amber-400',
57
+ button: 'default'
58
+ },
59
+ info: {
60
+ bg: 'bg-blue-100 dark:bg-blue-900/30',
61
+ icon: 'text-blue-600 dark:text-blue-400',
62
+ button: 'default'
63
+ }
64
+ };
65
+
66
+ let styles = $derived(variantStyles[variant] || variantStyles.info);
67
+
68
+ function closeModal() {
69
+ show = false;
70
+ onclose?.();
71
+ }
72
+
73
+ function handleConfirm() {
74
+ onconfirm?.();
75
+ closeModal();
76
+ }
77
+
78
+ // Start auto-close timer when modal opens
79
+ $effect(() => {
80
+ if (show && autoClose > 0) {
81
+ const timer = setTimeout(() => {
82
+ closeModal();
83
+ }, autoClose);
84
+ return () => clearTimeout(timer);
85
+ }
86
+ });
87
+ </script>
88
+
89
+ <Modal bind:show {size}>
90
+ {#snippet header()}
91
+ <div class="text-center">
92
+ <div class="flex justify-center items-center">
93
+ <div class="w-14 h-14 rounded-full {styles.bg} flex items-center justify-center">
94
+ {#if variant === 'success'}
95
+ <CheckOutline class="w-7 h-7 {styles.icon}" />
96
+ {:else if variant === 'error'}
97
+ <CloseOutline class="w-7 h-7 {styles.icon}" />
98
+ {:else if variant === 'warning'}
99
+ <ExclamationTriangleOutline class="w-7 h-7 {styles.icon}" />
100
+ {:else}
101
+ <InfoCircleOutline class="w-7 h-7 {styles.icon}" />
102
+ {/if}
103
+ </div>
104
+ </div>
105
+ {#if title}
106
+ <h2 class={`${typography.h2} mt-4`}>{title}</h2>
107
+ {/if}
108
+ </div>
109
+ {/snippet}
110
+
111
+ {#snippet body()}
112
+ <div class="text-center mt-4">
113
+ {#if message}
114
+ <p class={`${typography.smMuted} leading-relaxed`}>{message}</p>
115
+ {/if}
116
+ </div>
117
+ {/snippet}
118
+
119
+ {#snippet footer()}
120
+ <div class="w-full">
121
+ <Button
122
+ size="full"
123
+ variant={styles.button}
124
+ onclick={handleConfirm}
125
+ >
126
+ {buttonText}
127
+ </Button>
128
+ </div>
129
+ {/snippet}
130
+ </Modal>