@getmicdrop/svelte-components 5.5.1 → 5.5.5

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 (472) 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/Grid.svelte +4 -4
  34. package/dist/components/Layout/Section.spec.d.ts +2 -0
  35. package/dist/components/Layout/Section.spec.d.ts.map +1 -0
  36. package/dist/components/Layout/Section.spec.js +149 -0
  37. package/dist/components/Layout/Section.svelte +80 -80
  38. package/dist/components/Layout/Sidebar.spec.d.ts +2 -0
  39. package/dist/components/Layout/Sidebar.spec.d.ts.map +1 -0
  40. package/dist/components/Layout/Sidebar.spec.js +186 -0
  41. package/dist/components/Layout/Sidebar.svelte +108 -108
  42. package/dist/components/Layout/Stack.spec.js +3 -3
  43. package/dist/components/Layout/Stack.svelte +6 -6
  44. package/dist/constants/formOptions.spec.js +9 -5
  45. package/dist/constants/validation.js +91 -91
  46. package/dist/constants/validation.spec.js +64 -64
  47. package/dist/datetime/__tests__/format.test.js +1 -1
  48. package/dist/datetime/__tests__/parse.test.js +1 -1
  49. package/dist/datetime/__tests__/timezone.test.js +124 -2
  50. package/dist/datetime/parse.js +1 -1
  51. package/dist/forms/createFieldTracker.spec.d.ts +2 -0
  52. package/dist/forms/createFieldTracker.spec.d.ts.map +1 -0
  53. package/dist/forms/createFieldTracker.spec.js +343 -0
  54. package/dist/forms/createFormStore.spec.d.ts +2 -0
  55. package/dist/forms/createFormStore.spec.d.ts.map +1 -0
  56. package/dist/forms/createFormStore.spec.js +689 -0
  57. package/dist/forms/createFormStore.svelte.js +0 -1
  58. package/dist/index.d.ts +5 -112
  59. package/dist/index.js +40 -225
  60. package/dist/patterns/data/DataGrid.spec.d.ts +2 -0
  61. package/dist/patterns/data/DataGrid.spec.d.ts.map +1 -0
  62. package/dist/patterns/data/DataGrid.spec.js +159 -0
  63. package/dist/patterns/data/DataGrid.svelte +45 -45
  64. package/dist/patterns/data/DataList.spec.d.ts +2 -0
  65. package/dist/patterns/data/DataList.spec.d.ts.map +1 -0
  66. package/dist/patterns/data/DataList.spec.js +158 -0
  67. package/dist/patterns/data/DataList.svelte +24 -24
  68. package/dist/patterns/data/DataTable.spec.d.ts +2 -0
  69. package/dist/patterns/data/DataTable.spec.d.ts.map +1 -0
  70. package/dist/patterns/data/DataTable.spec.js +196 -0
  71. package/dist/patterns/data/DataTable.svelte +36 -36
  72. package/dist/patterns/forms/FormActions.spec.js +95 -88
  73. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  74. package/dist/patterns/forms/FormActions.svelte +46 -46
  75. package/dist/patterns/forms/FormGrid.spec.d.ts +2 -0
  76. package/dist/patterns/forms/FormGrid.spec.d.ts.map +1 -0
  77. package/dist/patterns/forms/FormGrid.spec.js +125 -0
  78. package/dist/patterns/forms/FormGrid.svelte +33 -33
  79. package/dist/patterns/forms/FormSection.spec.d.ts +2 -0
  80. package/dist/patterns/forms/FormSection.spec.d.ts.map +1 -0
  81. package/dist/patterns/forms/FormSection.spec.js +153 -0
  82. package/dist/patterns/forms/FormSection.svelte +32 -32
  83. package/dist/patterns/forms/FormValidationSummary.stories.svelte +83 -83
  84. package/dist/patterns/forms/FormValidationSummary.svelte +33 -33
  85. package/dist/patterns/layout/Sidebar.spec.d.ts +2 -0
  86. package/dist/patterns/layout/Sidebar.spec.d.ts.map +1 -0
  87. package/dist/patterns/layout/Sidebar.spec.js +159 -0
  88. package/dist/patterns/layout/Sidebar.svelte +39 -39
  89. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  90. package/dist/patterns/navigation/BottomNav.svelte +20 -20
  91. package/dist/patterns/navigation/Header.spec.js +33 -24
  92. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  93. package/dist/patterns/navigation/Header.svelte +193 -193
  94. package/dist/patterns/page/PageHeader.spec.d.ts +2 -0
  95. package/dist/patterns/page/PageHeader.spec.d.ts.map +1 -0
  96. package/dist/patterns/page/PageHeader.spec.js +167 -0
  97. package/dist/patterns/page/PageHeader.svelte +18 -18
  98. package/dist/patterns/page/PageLayout.spec.d.ts +2 -0
  99. package/dist/patterns/page/PageLayout.spec.d.ts.map +1 -0
  100. package/dist/patterns/page/PageLayout.spec.js +145 -0
  101. package/dist/patterns/page/PageLayout.svelte +40 -40
  102. package/dist/patterns/page/PageLoader.spec.js +57 -54
  103. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  104. package/dist/patterns/page/PageLoader.svelte +24 -24
  105. package/dist/patterns/page/SectionHeader.spec.d.ts +2 -0
  106. package/dist/patterns/page/SectionHeader.spec.d.ts.map +1 -0
  107. package/dist/patterns/page/SectionHeader.spec.js +197 -0
  108. package/dist/patterns/page/SectionHeader.svelte +29 -29
  109. package/dist/presets/badges.js +112 -112
  110. package/dist/presets/badges.spec.d.ts +2 -0
  111. package/dist/presets/badges.spec.d.ts.map +1 -0
  112. package/dist/presets/badges.spec.js +172 -0
  113. package/dist/presets/buttons.js +76 -76
  114. package/dist/presets/buttons.spec.d.ts +2 -0
  115. package/dist/presets/buttons.spec.d.ts.map +1 -0
  116. package/dist/presets/buttons.spec.js +135 -0
  117. package/dist/presets/index.js +9 -9
  118. package/dist/primitives/Accordion/Accordion.spec.d.ts +2 -0
  119. package/dist/primitives/Accordion/Accordion.spec.d.ts.map +1 -0
  120. package/dist/primitives/Accordion/Accordion.spec.js +83 -0
  121. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  122. package/dist/primitives/Accordion/Accordion.svelte +42 -42
  123. package/dist/primitives/Accordion/AccordionItem.spec.d.ts +2 -0
  124. package/dist/primitives/Accordion/AccordionItem.spec.d.ts.map +1 -0
  125. package/dist/primitives/Accordion/AccordionItem.spec.js +661 -0
  126. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  127. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -0
  128. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts +35 -0
  129. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte.d.ts.map +1 -0
  130. package/dist/primitives/Alert/Alert.spec.js +173 -170
  131. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  132. package/dist/primitives/Alert/Alert.svelte +27 -27
  133. package/dist/primitives/Avatar/Avatar.spec.d.ts +2 -0
  134. package/dist/primitives/Avatar/Avatar.spec.d.ts.map +1 -0
  135. package/dist/primitives/Avatar/Avatar.spec.js +211 -0
  136. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  137. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  138. package/dist/primitives/Badges/Badge.spec.js +144 -103
  139. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  140. package/dist/primitives/Badges/Badge.svelte +79 -79
  141. package/dist/primitives/BottomSheet/BottomSheet.spec.js +136 -127
  142. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  143. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  144. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte +13 -0
  145. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts +7 -0
  146. package/dist/primitives/BottomSheet/BottomSheetWrapper.test.svelte.d.ts.map +1 -0
  147. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +122 -120
  148. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  149. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  150. package/dist/primitives/Button/Button.spec.js +223 -211
  151. package/dist/primitives/Button/Button.stories.svelte +76 -76
  152. package/dist/primitives/Button/Button.svelte +270 -270
  153. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -48
  154. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  155. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts +2 -0
  156. package/dist/primitives/Button/ButtonVariantShowcase.spec.d.ts.map +1 -0
  157. package/dist/primitives/Button/ButtonVariantShowcase.spec.js +202 -0
  158. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  159. package/dist/primitives/Card.spec.js +49 -49
  160. package/dist/primitives/Card.stories.svelte +22 -22
  161. package/dist/primitives/Card.svelte +28 -28
  162. package/dist/primitives/Checkbox/Checkbox.spec.d.ts +2 -0
  163. package/dist/primitives/Checkbox/Checkbox.spec.d.ts.map +1 -0
  164. package/dist/primitives/Checkbox/Checkbox.spec.js +252 -0
  165. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  166. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  167. package/dist/primitives/DarkModeToggle.spec.js +390 -357
  168. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  169. package/dist/primitives/DarkModeToggle.svelte +136 -136
  170. package/dist/primitives/Drawer/Drawer.spec.d.ts +2 -0
  171. package/dist/primitives/Drawer/Drawer.spec.d.ts.map +1 -0
  172. package/dist/primitives/Drawer/Drawer.spec.js +212 -0
  173. package/dist/primitives/Drawer/Drawer.stories.svelte +80 -80
  174. package/dist/primitives/Drawer/Drawer.svelte +120 -120
  175. package/dist/primitives/Dropdown/Dropdown.spec.d.ts +2 -0
  176. package/dist/primitives/Dropdown/Dropdown.spec.d.ts.map +1 -0
  177. package/dist/primitives/Dropdown/Dropdown.spec.js +366 -0
  178. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  179. package/dist/primitives/Dropdown/Dropdown.svelte +14 -14
  180. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts +2 -0
  181. package/dist/primitives/Dropdown/DropdownItem.spec.d.ts.map +1 -0
  182. package/dist/primitives/Dropdown/DropdownItem.spec.js +182 -0
  183. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  184. package/dist/primitives/Icons/ArrowLeft.svelte +8 -8
  185. package/dist/primitives/Icons/ArrowRight.svelte +8 -8
  186. package/dist/primitives/Icons/Availability.svelte +14 -14
  187. package/dist/primitives/Icons/Back.svelte +14 -14
  188. package/dist/primitives/Icons/CheckCircle.svelte +6 -6
  189. package/dist/primitives/Icons/CheckCircleOutline.svelte +15 -15
  190. package/dist/primitives/Icons/ChevronLeft.svelte +4 -4
  191. package/dist/primitives/Icons/ChevronRight.svelte +4 -4
  192. package/dist/primitives/Icons/Copy.svelte +15 -15
  193. package/dist/primitives/Icons/Cross.svelte +5 -5
  194. package/dist/primitives/Icons/DownArrow.svelte +8 -8
  195. package/dist/primitives/Icons/ErrorCircle.svelte +6 -6
  196. package/dist/primitives/Icons/FacebookIcon.svelte +2 -2
  197. package/dist/primitives/Icons/Home.svelte +15 -15
  198. package/dist/primitives/Icons/Icon.spec.js +169 -169
  199. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  200. package/dist/primitives/Icons/Icon.svelte +52 -52
  201. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  202. package/dist/primitives/Icons/Info.svelte +7 -7
  203. package/dist/primitives/Icons/InstagramIcon.svelte +4 -4
  204. package/dist/primitives/Icons/LogoInstagram.svelte +2 -2
  205. package/dist/primitives/Icons/Message.svelte +15 -15
  206. package/dist/primitives/Icons/MoonIcon.svelte +5 -5
  207. package/dist/primitives/Icons/More.svelte +21 -21
  208. package/dist/primitives/Icons/MoreHori.spec.js +61 -61
  209. package/dist/primitives/Icons/MoreHori.svelte +22 -22
  210. package/dist/primitives/Icons/Notification.svelte +14 -14
  211. package/dist/primitives/Icons/Payment.svelte +14 -14
  212. package/dist/primitives/Icons/Profile.svelte +21 -21
  213. package/dist/primitives/Icons/Reload.svelte +29 -29
  214. package/dist/primitives/Icons/Shows.svelte +21 -21
  215. package/dist/primitives/Icons/Signout.svelte +21 -21
  216. package/dist/primitives/Icons/SunIcon.svelte +8 -8
  217. package/dist/primitives/Icons/TiktokIcon.svelte +2 -2
  218. package/dist/primitives/Icons/TwitterIcon.svelte +2 -2
  219. package/dist/primitives/Icons/WarningIcon.spec.js +18 -18
  220. package/dist/primitives/Icons/WarningIcon.svelte +5 -5
  221. package/dist/primitives/Icons/iconTestUtils.spec.d.ts +2 -0
  222. package/dist/primitives/Icons/iconTestUtils.spec.d.ts.map +1 -0
  223. package/dist/primitives/Icons/iconTestUtils.spec.js +235 -0
  224. package/dist/primitives/Input/Input.spec.js +573 -573
  225. package/dist/primitives/Input/Input.stories.svelte +139 -139
  226. package/dist/primitives/Input/Input.svelte +384 -397
  227. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  228. package/dist/primitives/Input/Select.spec.js +212 -218
  229. package/dist/primitives/Input/Select.stories.svelte +112 -112
  230. package/dist/primitives/Input/Select.svelte +128 -128
  231. package/dist/primitives/Input/Textarea.spec.d.ts +2 -0
  232. package/dist/primitives/Input/Textarea.spec.d.ts.map +1 -0
  233. package/dist/primitives/Input/Textarea.spec.js +255 -0
  234. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  235. package/dist/primitives/Input/Textarea.svelte +35 -35
  236. package/dist/primitives/Label/Label.spec.d.ts +2 -0
  237. package/dist/primitives/Label/Label.spec.d.ts.map +1 -0
  238. package/dist/primitives/Label/Label.spec.js +157 -0
  239. package/dist/primitives/Label/Label.svelte +37 -37
  240. package/dist/primitives/Modal/Modal.spec.js +99 -95
  241. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  242. package/dist/primitives/Modal/Modal.svelte +158 -158
  243. package/dist/primitives/Modal/ModalTestWrapper.svelte +65 -0
  244. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts +23 -0
  245. package/dist/primitives/Modal/ModalTestWrapper.svelte.d.ts.map +1 -0
  246. package/dist/primitives/NumberInput/NumberInput.spec.d.ts +2 -0
  247. package/dist/primitives/NumberInput/NumberInput.spec.d.ts.map +1 -0
  248. package/dist/primitives/NumberInput/NumberInput.spec.js +235 -0
  249. package/dist/primitives/NumberInput/NumberInput.svelte +106 -106
  250. package/dist/primitives/Pagination/Pagination.spec.d.ts +2 -0
  251. package/dist/primitives/Pagination/Pagination.spec.d.ts.map +1 -0
  252. package/dist/primitives/Pagination/Pagination.spec.js +266 -0
  253. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  254. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  255. package/dist/primitives/Radio/Radio.spec.d.ts +2 -0
  256. package/dist/primitives/Radio/Radio.spec.d.ts.map +1 -0
  257. package/dist/primitives/Radio/Radio.spec.js +206 -0
  258. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  259. package/dist/primitives/Radio/Radio.svelte +67 -67
  260. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts +2 -0
  261. package/dist/primitives/Skeleton/CardPlaceholder.spec.d.ts.map +1 -0
  262. package/dist/primitives/Skeleton/CardPlaceholder.spec.js +156 -0
  263. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  264. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts +2 -0
  265. package/dist/primitives/Skeleton/ImagePlaceholder.spec.d.ts.map +1 -0
  266. package/dist/primitives/Skeleton/ImagePlaceholder.spec.js +120 -0
  267. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  268. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts +2 -0
  269. package/dist/primitives/Skeleton/ListPlaceholder.spec.d.ts.map +1 -0
  270. package/dist/primitives/Skeleton/ListPlaceholder.spec.js +220 -0
  271. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  272. package/dist/primitives/Skeleton/Skeleton.spec.d.ts +2 -0
  273. package/dist/primitives/Skeleton/Skeleton.spec.d.ts.map +1 -0
  274. package/dist/primitives/Skeleton/Skeleton.spec.js +173 -0
  275. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  276. package/dist/primitives/Skeleton/Skeleton.svelte +26 -26
  277. package/dist/primitives/Spinner/Spinner.spec.js +71 -75
  278. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  279. package/dist/primitives/Spinner/Spinner.svelte +20 -20
  280. package/dist/primitives/Tabs/TabItem.spec.d.ts +2 -0
  281. package/dist/primitives/Tabs/TabItem.spec.d.ts.map +1 -0
  282. package/dist/primitives/Tabs/TabItem.spec.js +130 -0
  283. package/dist/primitives/Tabs/TabItem.svelte +49 -49
  284. package/dist/primitives/Tabs/Tabs.spec.d.ts +2 -0
  285. package/dist/primitives/Tabs/Tabs.spec.d.ts.map +1 -0
  286. package/dist/primitives/Tabs/Tabs.spec.js +295 -0
  287. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  288. package/dist/primitives/Tabs/Tabs.svelte +123 -123
  289. package/dist/primitives/Tabs/TabsWithItems.test.svelte +18 -0
  290. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts +16 -0
  291. package/dist/primitives/Tabs/TabsWithItems.test.svelte.d.ts.map +1 -0
  292. package/dist/primitives/Toggle.spec.js +143 -127
  293. package/dist/primitives/Toggle.stories.svelte +92 -92
  294. package/dist/primitives/Toggle.svelte +71 -71
  295. package/dist/primitives/Typography/Typography.spec.d.ts +2 -0
  296. package/dist/primitives/Typography/Typography.spec.d.ts.map +1 -0
  297. package/dist/primitives/Typography/Typography.spec.js +183 -0
  298. package/dist/primitives/Typography/Typography.svelte +53 -53
  299. package/dist/primitives/ValidationError.spec.js +103 -103
  300. package/dist/primitives/ValidationError.stories.svelte +69 -69
  301. package/dist/primitives/ValidationError.svelte +29 -29
  302. package/dist/primitives/index.d.ts +1 -0
  303. package/dist/primitives/index.js +3 -0
  304. package/dist/recipes/CropImage/CropImage.spec.js +208 -216
  305. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  306. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  307. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts +2 -0
  308. package/dist/recipes/ImageUploader/ImageUploader.spec.d.ts.map +1 -0
  309. package/dist/recipes/ImageUploader/ImageUploader.spec.js +1351 -0
  310. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  311. package/dist/recipes/ImageUploader/ImageUploader.svelte +804 -804
  312. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts +2 -0
  313. package/dist/recipes/SuperLogin/SuperLogin.spec.d.ts.map +1 -0
  314. package/dist/recipes/SuperLogin/SuperLogin.spec.js +1436 -0
  315. package/dist/recipes/SuperLogin/SuperLogin.svelte +7 -6
  316. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  317. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  318. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts +2 -0
  319. package/dist/recipes/feedback/EmptyState/EmptyState.spec.d.ts.map +1 -0
  320. package/dist/recipes/feedback/EmptyState/EmptyState.spec.js +202 -0
  321. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +1 -1
  322. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  323. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +101 -101
  324. package/dist/recipes/feedback/ErrorDisplay.svelte +1 -1
  325. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -129
  326. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +157 -157
  327. package/dist/recipes/fields/CheckboxField.spec.d.ts +2 -0
  328. package/dist/recipes/fields/CheckboxField.spec.d.ts.map +1 -0
  329. package/dist/recipes/fields/CheckboxField.spec.js +135 -0
  330. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  331. package/dist/recipes/fields/FormField.spec.d.ts +2 -0
  332. package/dist/recipes/fields/FormField.spec.d.ts.map +1 -0
  333. package/dist/recipes/fields/FormField.spec.js +159 -0
  334. package/dist/recipes/fields/FormField.svelte +58 -58
  335. package/dist/recipes/fields/RadioGroup.spec.d.ts +2 -0
  336. package/dist/recipes/fields/RadioGroup.spec.d.ts.map +1 -0
  337. package/dist/recipes/fields/RadioGroup.spec.js +199 -0
  338. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  339. package/dist/recipes/fields/SelectField.spec.d.ts +2 -0
  340. package/dist/recipes/fields/SelectField.spec.d.ts.map +1 -0
  341. package/dist/recipes/fields/SelectField.spec.js +188 -0
  342. package/dist/recipes/fields/SelectField.svelte +80 -80
  343. package/dist/recipes/fields/TextareaField.spec.d.ts +2 -0
  344. package/dist/recipes/fields/TextareaField.spec.d.ts.map +1 -0
  345. package/dist/recipes/fields/TextareaField.spec.js +205 -0
  346. package/dist/recipes/fields/TextareaField.svelte +97 -97
  347. package/dist/recipes/fields/ToggleField.spec.d.ts +2 -0
  348. package/dist/recipes/fields/ToggleField.spec.d.ts.map +1 -0
  349. package/dist/recipes/fields/ToggleField.spec.js +153 -0
  350. package/dist/recipes/fields/ToggleField.svelte +60 -60
  351. package/dist/recipes/fields/index.js +7 -7
  352. package/dist/recipes/inputs/MultiSelect.spec.js +258 -257
  353. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  354. package/dist/recipes/inputs/MultiSelect.svelte +256 -249
  355. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
  356. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  357. package/dist/recipes/inputs/OTPInput.spec.js +251 -238
  358. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  359. package/dist/recipes/inputs/OTPInput.svelte +29 -29
  360. package/dist/recipes/inputs/PasswordInput.spec.d.ts +2 -0
  361. package/dist/recipes/inputs/PasswordInput.spec.d.ts.map +1 -0
  362. package/dist/recipes/inputs/PasswordInput.spec.js +410 -0
  363. package/dist/recipes/inputs/PasswordInput.svelte +22 -22
  364. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +245 -165
  365. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +43 -43
  366. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte +71 -0
  367. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts +9 -0
  368. package/dist/recipes/inputs/PasswordStrengthIndicator/TestWrapper.svelte.d.ts.map +1 -0
  369. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +1139 -193
  370. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +123 -123
  371. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +326 -326
  372. package/dist/recipes/inputs/Search.spec.d.ts +2 -0
  373. package/dist/recipes/inputs/Search.spec.d.ts.map +1 -0
  374. package/dist/recipes/inputs/Search.spec.js +177 -0
  375. package/dist/recipes/inputs/Search.svelte +37 -37
  376. package/dist/recipes/inputs/SelectDropdown.spec.d.ts +2 -0
  377. package/dist/recipes/inputs/SelectDropdown.spec.d.ts.map +1 -0
  378. package/dist/recipes/inputs/SelectDropdown.spec.js +512 -0
  379. package/dist/recipes/inputs/SelectDropdown.svelte +57 -57
  380. package/dist/recipes/modals/AlertModal.spec.d.ts +2 -0
  381. package/dist/recipes/modals/AlertModal.spec.d.ts.map +1 -0
  382. package/dist/recipes/modals/AlertModal.spec.js +432 -0
  383. package/dist/recipes/modals/AlertModal.svelte +130 -130
  384. package/dist/recipes/modals/ConfirmationModal.spec.js +206 -191
  385. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  386. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  387. package/dist/recipes/modals/InputModal.spec.d.ts +2 -0
  388. package/dist/recipes/modals/InputModal.spec.d.ts.map +1 -0
  389. package/dist/recipes/modals/InputModal.spec.js +872 -0
  390. package/dist/recipes/modals/InputModal.svelte +182 -182
  391. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  392. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  393. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts +2 -0
  394. package/dist/recipes/modals/ModalTestWrapper.spec.d.ts.map +1 -0
  395. package/dist/recipes/modals/ModalTestWrapper.spec.js +502 -0
  396. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  397. package/dist/recipes/modals/StatusModal.spec.d.ts +2 -0
  398. package/dist/recipes/modals/StatusModal.spec.d.ts.map +1 -0
  399. package/dist/recipes/modals/StatusModal.spec.js +599 -0
  400. package/dist/recipes/modals/StatusModal.svelte +206 -206
  401. package/dist/services/EventService.js +75 -75
  402. package/dist/services/EventService.spec.js +217 -217
  403. package/dist/services/ShowService.spec.js +345 -342
  404. package/dist/stores/auth.js +36 -36
  405. package/dist/stores/auth.spec.js +139 -139
  406. package/dist/stores/toaster.js +13 -13
  407. package/dist/stories/ButtonAuditDashboard.spec.d.ts +2 -0
  408. package/dist/stories/ButtonAuditDashboard.spec.d.ts.map +1 -0
  409. package/dist/stories/ButtonAuditDashboard.spec.js +913 -0
  410. package/dist/stories/ButtonAuditReview.spec.d.ts +2 -0
  411. package/dist/stories/ButtonAuditReview.spec.d.ts.map +1 -0
  412. package/dist/stories/ButtonAuditReview.spec.js +422 -0
  413. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  414. package/dist/stories/ButtonAuditReview.svelte +427 -427
  415. package/dist/stories/ButtonGridView.spec.d.ts +2 -0
  416. package/dist/stories/ButtonGridView.spec.d.ts.map +1 -0
  417. package/dist/stories/ButtonGridView.spec.js +667 -0
  418. package/dist/stories/ButtonShowcase.spec.d.ts +2 -0
  419. package/dist/stories/ButtonShowcase.spec.d.ts.map +1 -0
  420. package/dist/stories/ButtonShowcase.spec.js +499 -0
  421. package/dist/stories/PatternsGallery.spec.d.ts +2 -0
  422. package/dist/stories/PatternsGallery.spec.d.ts.map +1 -0
  423. package/dist/stories/PatternsGallery.spec.js +514 -0
  424. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  425. package/dist/stories/PatternsGallery.svelte +206 -206
  426. package/dist/stories/PrimitivesGallery.spec.d.ts +2 -0
  427. package/dist/stories/PrimitivesGallery.spec.d.ts.map +1 -0
  428. package/dist/stories/PrimitivesGallery.spec.js +813 -0
  429. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  430. package/dist/stories/PrimitivesGallery.svelte +725 -725
  431. package/dist/stories/RecipesGallery.spec.d.ts +2 -0
  432. package/dist/stories/RecipesGallery.spec.d.ts.map +1 -0
  433. package/dist/stories/RecipesGallery.spec.js +299 -0
  434. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  435. package/dist/stories/RecipesGallery.svelte +271 -271
  436. package/dist/stories/button-audit-manifest.json +11186 -11186
  437. package/dist/stripe/useStripeTheme.spec.d.ts +2 -0
  438. package/dist/stripe/useStripeTheme.spec.d.ts.map +1 -0
  439. package/dist/stripe/useStripeTheme.spec.js +793 -0
  440. package/dist/tailwind/preset.cjs +82 -82
  441. package/dist/telemetry.d.ts.map +1 -1
  442. package/dist/telemetry.js +6 -5
  443. package/dist/telemetry.spec.js +495 -12
  444. package/dist/tokens/__tests__/colors.test.d.ts +2 -0
  445. package/dist/tokens/__tests__/colors.test.d.ts.map +1 -0
  446. package/dist/tokens/__tests__/colors.test.js +152 -0
  447. package/dist/tokens/__tests__/radius.test.d.ts +2 -0
  448. package/dist/tokens/__tests__/radius.test.d.ts.map +1 -0
  449. package/dist/tokens/__tests__/radius.test.js +118 -0
  450. package/dist/tokens/__tests__/shadows.test.d.ts +2 -0
  451. package/dist/tokens/__tests__/shadows.test.d.ts.map +1 -0
  452. package/dist/tokens/__tests__/shadows.test.js +105 -0
  453. package/dist/tokens/__tests__/spacing.test.js +11 -8
  454. package/dist/tokens/__tests__/typography.test.d.ts +2 -0
  455. package/dist/tokens/__tests__/typography.test.d.ts.map +1 -0
  456. package/dist/tokens/__tests__/typography.test.js +156 -0
  457. package/dist/tokens/__tests__/z-index.test.d.ts +2 -0
  458. package/dist/tokens/__tests__/z-index.test.d.ts.map +1 -0
  459. package/dist/tokens/__tests__/z-index.test.js +121 -0
  460. package/dist/tokens/tokens.css +87 -87
  461. package/dist/utils/apiConfig.spec.js +102 -1
  462. package/dist/utils/formatters.spec.d.ts +2 -0
  463. package/dist/utils/formatters.spec.d.ts.map +1 -0
  464. package/dist/utils/formatters.spec.js +82 -0
  465. package/dist/utils/transitions.d.ts +24 -0
  466. package/dist/utils/transitions.d.ts.map +1 -0
  467. package/dist/utils/transitions.js +62 -0
  468. package/dist/utils/transitions.spec.d.ts +2 -0
  469. package/dist/utils/transitions.spec.d.ts.map +1 -0
  470. package/dist/utils/transitions.spec.js +130 -0
  471. package/dist/utils/utils.js +354 -354
  472. package/package.json +288 -283
@@ -0,0 +1,599 @@
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 StatusModal from "./StatusModal.svelte";
5
+
6
+ function setupTest(args = {}) {
7
+ const user = userEvent.setup();
8
+ const { component } = render(StatusModal, {
9
+ props: {
10
+ show: true,
11
+ title: "Test Status",
12
+ description: "This is a test description",
13
+ ...args,
14
+ },
15
+ });
16
+ return { user, component };
17
+ }
18
+
19
+ describe("StatusModal 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
+ describe("Basic Rendering", () => {
29
+ test("Does not render when show is false", () => {
30
+ render(StatusModal, { props: { show: false } });
31
+ expect(screen.queryByText("Test Status")).not.toBeInTheDocument();
32
+ });
33
+
34
+ test("Renders when show is true", () => {
35
+ setupTest();
36
+ expect(screen.getAllByText("Test Status").length).toBeGreaterThan(0);
37
+ });
38
+
39
+ test("Displays title", () => {
40
+ setupTest({ title: "Operation Complete" });
41
+ expect(screen.getAllByText("Operation Complete").length).toBeGreaterThan(0);
42
+ });
43
+
44
+ test("Displays description", () => {
45
+ setupTest({ description: "Your changes have been saved" });
46
+ expect(screen.getAllByText("Your changes have been saved").length).toBeGreaterThan(0);
47
+ });
48
+
49
+ test("Hides title when not provided", () => {
50
+ setupTest({ title: "" });
51
+ const headings = screen.queryAllByRole("heading", { level: 2 });
52
+ expect(headings.length).toBe(0);
53
+ });
54
+
55
+ test("Hides description when not provided", () => {
56
+ setupTest({ description: "" });
57
+ const paragraphs = document.querySelectorAll("p");
58
+ expect(paragraphs.length).toBe(0);
59
+ });
60
+
61
+ test("Displays subtitle in profile mode", () => {
62
+ setupTest({
63
+ subtitle: "Test Subtitle",
64
+ image: "https://example.com/image.jpg"
65
+ });
66
+ expect(screen.getAllByText("Test Subtitle").length).toBeGreaterThan(0);
67
+ });
68
+ });
69
+
70
+ describe("Icon Types", () => {
71
+ test("Renders success icon by default", () => {
72
+ setupTest();
73
+ // Success icon should be present
74
+ const container = document.querySelector(".bg-green-100");
75
+ expect(container).toBeInTheDocument();
76
+ });
77
+
78
+ test("Renders success icon when iconType is success", () => {
79
+ setupTest({ iconType: "success" });
80
+ const container = document.querySelector(".bg-green-100");
81
+ expect(container).toBeInTheDocument();
82
+ });
83
+
84
+ test("Renders error icon when iconType is error", () => {
85
+ setupTest({ iconType: "error" });
86
+ const container = document.querySelector(".bg-red-100");
87
+ expect(container).toBeInTheDocument();
88
+ });
89
+
90
+ test("Renders warning icon when iconType is warning", () => {
91
+ setupTest({ iconType: "warning" });
92
+ const container = document.querySelector(".bg-amber-100");
93
+ expect(container).toBeInTheDocument();
94
+ });
95
+
96
+ test("Renders info icon when iconType is info", () => {
97
+ setupTest({ iconType: "info" });
98
+ const container = document.querySelector(".bg-blue-100");
99
+ expect(container).toBeInTheDocument();
100
+ });
101
+
102
+ test("Renders custom icon when provided", () => {
103
+ setupTest({ customIcon: "https://example.com/icon.svg" });
104
+ const icon = screen.getAllByAltText("Status icon")[0];
105
+ expect(icon).toBeInTheDocument();
106
+ expect(icon.src).toContain("icon.svg");
107
+ });
108
+ });
109
+
110
+ describe("Profile Mode", () => {
111
+ test("Enables profile mode when image is provided", () => {
112
+ setupTest({
113
+ image: "https://example.com/profile.jpg",
114
+ title: "Profile Test"
115
+ });
116
+ const profileImage = screen.getAllByAltText("Profile Test")[0];
117
+ expect(profileImage).toBeInTheDocument();
118
+ expect(profileImage.src).toContain("profile.jpg");
119
+ });
120
+
121
+ test("Disables profile mode when image is not provided", () => {
122
+ setupTest({ title: "Standard Test" });
123
+ expect(screen.queryByAltText("Standard Test")).not.toBeInTheDocument();
124
+ });
125
+ });
126
+
127
+ describe("Button Behavior", () => {
128
+ test("Displays custom button text", () => {
129
+ setupTest({ buttonText: "Continue" });
130
+ expect(screen.getAllByText("Continue").length).toBeGreaterThan(0);
131
+ });
132
+
133
+ test("Displays default button text", () => {
134
+ setupTest();
135
+ expect(screen.getAllByText("Ok").length).toBeGreaterThan(0);
136
+ });
137
+
138
+ test("Calls onconfirm when button is clicked", async () => {
139
+ const onconfirm = vi.fn();
140
+ const { user } = setupTest({ onconfirm });
141
+
142
+ const button = screen.getAllByText("Ok")[0];
143
+ await user.click(button);
144
+
145
+ await waitFor(() => {
146
+ expect(onconfirm).toHaveBeenCalledOnce();
147
+ });
148
+ });
149
+
150
+ test("Calls onclose when button is clicked", async () => {
151
+ const onclose = vi.fn();
152
+ const { user } = setupTest({ onclose });
153
+
154
+ const button = screen.getAllByText("Ok")[0];
155
+ await user.click(button);
156
+
157
+ await waitFor(() => {
158
+ expect(onclose).toHaveBeenCalledOnce();
159
+ });
160
+ });
161
+
162
+ test("Calls both onconfirm and onclose when button is clicked", async () => {
163
+ const onconfirm = vi.fn();
164
+ const onclose = vi.fn();
165
+ const { user } = setupTest({ onconfirm, onclose });
166
+
167
+ const button = screen.getAllByText("Ok")[0];
168
+ await user.click(button);
169
+
170
+ await waitFor(() => {
171
+ expect(onconfirm).toHaveBeenCalledOnce();
172
+ expect(onclose).toHaveBeenCalledOnce();
173
+ });
174
+ });
175
+
176
+ test("Does not call callbacks when disabled", async () => {
177
+ const onconfirm = vi.fn();
178
+ const { user } = setupTest({ onconfirm, disabled: true });
179
+
180
+ const button = screen.getAllByText("Ok")[0];
181
+ await user.click(button);
182
+
183
+ await waitFor(() => {
184
+ expect(onconfirm).not.toHaveBeenCalled();
185
+ });
186
+ });
187
+
188
+ test("Does not call callbacks when loading", async () => {
189
+ const onconfirm = vi.fn();
190
+ const { user } = setupTest({ onconfirm, loading: true });
191
+
192
+ const button = screen.getAllByText("Ok")[0];
193
+ await user.click(button);
194
+
195
+ await waitFor(() => {
196
+ expect(onconfirm).not.toHaveBeenCalled();
197
+ });
198
+ });
199
+
200
+ test("Sets correct button variant for error type", () => {
201
+ setupTest({ iconType: "error", buttonText: "Retry" });
202
+ const buttons = screen.getAllByText("Retry");
203
+ expect(buttons.length).toBeGreaterThan(0);
204
+ });
205
+
206
+ test("Sets correct button variant for warning type", () => {
207
+ setupTest({ iconType: "warning", buttonText: "Proceed" });
208
+ const buttons = screen.getAllByText("Proceed");
209
+ expect(buttons.length).toBeGreaterThan(0);
210
+ });
211
+
212
+ test("Sets correct button variant for success type", () => {
213
+ setupTest({ iconType: "success", buttonText: "Done" });
214
+ const buttons = screen.getAllByText("Done");
215
+ expect(buttons.length).toBeGreaterThan(0);
216
+ });
217
+ });
218
+
219
+ describe("Close Button", () => {
220
+ test("Does not render close button by default", () => {
221
+ setupTest();
222
+ const closeButtons = screen.queryAllByAltText("Close");
223
+ expect(closeButtons.length).toBe(0);
224
+ });
225
+
226
+ test("Renders close button when closeBtn is true", () => {
227
+ setupTest({ closeBtn: true });
228
+ const closeButtons = screen.getAllByAltText("Close");
229
+ expect(closeButtons.length).toBeGreaterThan(0);
230
+ });
231
+
232
+ test("Calls onclose when close button is clicked", async () => {
233
+ const onclose = vi.fn();
234
+ const { user } = setupTest({ closeBtn: true, onclose });
235
+
236
+ const closeButton = screen.getAllByAltText("Close")[0];
237
+ await user.click(closeButton);
238
+
239
+ await waitFor(() => {
240
+ expect(onclose).toHaveBeenCalledOnce();
241
+ });
242
+ });
243
+
244
+ test("Does not call onclose when disabled and close button clicked", async () => {
245
+ const onclose = vi.fn();
246
+ const { user } = setupTest({ closeBtn: true, onclose, disabled: true });
247
+
248
+ const closeButton = screen.getAllByAltText("Close")[0];
249
+ await user.click(closeButton);
250
+
251
+ await waitFor(() => {
252
+ expect(onclose).not.toHaveBeenCalled();
253
+ });
254
+ });
255
+ });
256
+
257
+ describe("Custom Actions", () => {
258
+ test("Renders custom actions when provided", () => {
259
+ setupTest({
260
+ actions: [
261
+ { label: "Cancel", onClick: vi.fn() },
262
+ { label: "Confirm", onClick: vi.fn() }
263
+ ]
264
+ });
265
+
266
+ expect(screen.getAllByText("Cancel").length).toBeGreaterThan(0);
267
+ expect(screen.getAllByText("Confirm").length).toBeGreaterThan(0);
268
+ });
269
+
270
+ test("Calls action onClick when action button is clicked", async () => {
271
+ const onClick = vi.fn();
272
+ const { user } = setupTest({
273
+ actions: [
274
+ { label: "Action", onClick }
275
+ ]
276
+ });
277
+
278
+ const button = screen.getAllByText("Action")[0];
279
+ await user.click(button);
280
+
281
+ await waitFor(() => {
282
+ expect(onClick).toHaveBeenCalledOnce();
283
+ });
284
+ });
285
+
286
+ test("Closes modal after action unless keepOpen is true", async () => {
287
+ const onclose = vi.fn();
288
+ const { user } = setupTest({
289
+ actions: [
290
+ { label: "Action", onClick: vi.fn() }
291
+ ],
292
+ onclose
293
+ });
294
+
295
+ const button = screen.getAllByText("Action")[0];
296
+ await user.click(button);
297
+
298
+ await waitFor(() => {
299
+ expect(onclose).toHaveBeenCalledOnce();
300
+ });
301
+ });
302
+
303
+ test("Does not close modal when keepOpen is true", async () => {
304
+ const onclose = vi.fn();
305
+ const { user } = setupTest({
306
+ actions: [
307
+ { label: "Action", onClick: vi.fn(), keepOpen: true }
308
+ ],
309
+ onclose
310
+ });
311
+
312
+ const button = screen.getAllByText("Action")[0];
313
+ await user.click(button);
314
+
315
+ await waitFor(() => {
316
+ expect(onclose).not.toHaveBeenCalled();
317
+ });
318
+ });
319
+
320
+ test("Applies red variant to delete actions", () => {
321
+ setupTest({
322
+ actions: [
323
+ { label: "Delete Item", onClick: vi.fn() }
324
+ ]
325
+ });
326
+
327
+ const button = screen.getAllByText("Delete Item")[0];
328
+ expect(button).toBeInTheDocument();
329
+ });
330
+
331
+ test("Applies red variant to archive actions", () => {
332
+ setupTest({
333
+ actions: [
334
+ { label: "Archive Item", onClick: vi.fn() }
335
+ ]
336
+ });
337
+
338
+ const button = screen.getAllByText("Archive Item")[0];
339
+ expect(button).toBeInTheDocument();
340
+ });
341
+
342
+ test("Applies red variant when danger flag is true", () => {
343
+ setupTest({
344
+ actions: [
345
+ { label: "Dangerous Action", onClick: vi.fn(), danger: true }
346
+ ]
347
+ });
348
+
349
+ const button = screen.getAllByText("Dangerous Action")[0];
350
+ expect(button).toBeInTheDocument();
351
+ });
352
+
353
+ test("Applies default variant to continue actions", () => {
354
+ setupTest({
355
+ actions: [
356
+ { label: "Continue", onClick: vi.fn() }
357
+ ]
358
+ });
359
+
360
+ const button = screen.getAllByText("Continue")[0];
361
+ expect(button).toBeInTheDocument();
362
+ });
363
+
364
+ test("Applies default variant to finish actions", () => {
365
+ setupTest({
366
+ actions: [
367
+ { label: "Finish", onClick: vi.fn() }
368
+ ]
369
+ });
370
+
371
+ const button = screen.getAllByText("Finish")[0];
372
+ expect(button).toBeInTheDocument();
373
+ });
374
+
375
+ test("Applies default variant to done actions", () => {
376
+ setupTest({
377
+ actions: [
378
+ { label: "Done", onClick: vi.fn() }
379
+ ]
380
+ });
381
+
382
+ const button = screen.getAllByText("Done")[0];
383
+ expect(button).toBeInTheDocument();
384
+ });
385
+
386
+ test("Applies alternative variant to other actions", () => {
387
+ setupTest({
388
+ actions: [
389
+ { label: "Other Action", onClick: vi.fn() }
390
+ ]
391
+ });
392
+
393
+ const button = screen.getAllByText("Other Action")[0];
394
+ expect(button).toBeInTheDocument();
395
+ });
396
+
397
+ test("Respects custom variant on actions", () => {
398
+ setupTest({
399
+ actions: [
400
+ { label: "Custom", onClick: vi.fn(), variant: "default" }
401
+ ]
402
+ });
403
+
404
+ const button = screen.getAllByText("Custom")[0];
405
+ expect(button).toBeInTheDocument();
406
+ });
407
+
408
+ test("Disables action button when action.disabled is true", async () => {
409
+ const onClick = vi.fn();
410
+ const { user } = setupTest({
411
+ actions: [
412
+ { label: "Disabled Action", onClick, disabled: true }
413
+ ]
414
+ });
415
+
416
+ const button = screen.getAllByText("Disabled Action")[0].closest('button');
417
+ expect(button).toBeDisabled();
418
+ });
419
+
420
+ test("Disables action button when modal is disabled", () => {
421
+ setupTest({
422
+ actions: [
423
+ { label: "Action", onClick: vi.fn() }
424
+ ],
425
+ disabled: true
426
+ });
427
+
428
+ const button = screen.getAllByText("Action")[0].closest('button');
429
+ expect(button).toBeDisabled();
430
+ });
431
+
432
+ test("Shows loading on primary action when modal is loading", () => {
433
+ setupTest({
434
+ actions: [
435
+ { label: "Primary", onClick: vi.fn(), primary: true }
436
+ ],
437
+ loading: true
438
+ });
439
+
440
+ const button = screen.getAllByText("Primary")[0];
441
+ expect(button).toBeInTheDocument();
442
+ });
443
+
444
+ test("Shows loading on action when action.loading is true", () => {
445
+ setupTest({
446
+ actions: [
447
+ { label: "Loading Action", onClick: vi.fn(), loading: true }
448
+ ]
449
+ });
450
+
451
+ const button = screen.getAllByText("Loading Action")[0];
452
+ expect(button).toBeInTheDocument();
453
+ });
454
+
455
+ test("Does not call action onClick when disabled", async () => {
456
+ const onClick = vi.fn();
457
+ const { user } = setupTest({
458
+ actions: [
459
+ { label: "Action", onClick }
460
+ ],
461
+ disabled: true
462
+ });
463
+
464
+ const button = screen.getAllByText("Action")[0];
465
+ await user.click(button);
466
+
467
+ await waitFor(() => {
468
+ expect(onClick).not.toHaveBeenCalled();
469
+ });
470
+ });
471
+
472
+ test("Does not call action onClick when loading", async () => {
473
+ const onClick = vi.fn();
474
+ const { user } = setupTest({
475
+ actions: [
476
+ { label: "Action", onClick }
477
+ ],
478
+ loading: true
479
+ });
480
+
481
+ const button = screen.getAllByText("Action")[0];
482
+ await user.click(button);
483
+
484
+ await waitFor(() => {
485
+ expect(onClick).not.toHaveBeenCalled();
486
+ });
487
+ });
488
+ });
489
+
490
+ describe("Size Prop", () => {
491
+ test("Accepts small size prop", () => {
492
+ setupTest({ size: "small" });
493
+ expect(screen.getAllByText("Test Status").length).toBeGreaterThan(0);
494
+ });
495
+
496
+ test("Accepts medium size prop", () => {
497
+ setupTest({ size: "medium" });
498
+ expect(screen.getAllByText("Test Status").length).toBeGreaterThan(0);
499
+ });
500
+
501
+ test("Accepts large size prop", () => {
502
+ setupTest({ size: "large" });
503
+ expect(screen.getAllByText("Test Status").length).toBeGreaterThan(0);
504
+ });
505
+ });
506
+
507
+ describe("Variant Override", () => {
508
+ test("Uses variant prop over iconType when both provided", () => {
509
+ setupTest({ iconType: "success", variant: "error" });
510
+ const container = document.querySelector(".bg-red-100");
511
+ expect(container).toBeInTheDocument();
512
+ });
513
+
514
+ test("Falls back to iconType when variant not provided", () => {
515
+ setupTest({ iconType: "warning" });
516
+ const container = document.querySelector(".bg-amber-100");
517
+ expect(container).toBeInTheDocument();
518
+ });
519
+ });
520
+
521
+ describe("Modal Close Behavior", () => {
522
+ test("Closes modal when backdrop is clicked", async () => {
523
+ const onclose = vi.fn();
524
+ const { user } = setupTest({ onclose });
525
+
526
+ // Find backdrop and click it
527
+ const backdrop = document.querySelector('[data-testid="modal-backdrop"]');
528
+ if (backdrop) {
529
+ await user.click(backdrop);
530
+ await waitFor(() => {
531
+ expect(onclose).toHaveBeenCalled();
532
+ });
533
+ }
534
+ });
535
+
536
+ test("Does not close when disabled and backdrop clicked", async () => {
537
+ const onclose = vi.fn();
538
+ const { user } = setupTest({ onclose, disabled: true });
539
+
540
+ const backdrop = document.querySelector('[data-testid="modal-backdrop"]');
541
+ if (backdrop) {
542
+ await user.click(backdrop);
543
+ await waitFor(() => {
544
+ expect(onclose).not.toHaveBeenCalled();
545
+ });
546
+ }
547
+ });
548
+ });
549
+
550
+ describe("Edge Cases", () => {
551
+ test("Handles undefined callbacks gracefully", async () => {
552
+ const { user } = setupTest({ onconfirm: undefined, onclose: undefined });
553
+
554
+ const button = screen.getAllByText("Ok")[0];
555
+ await user.click(button);
556
+
557
+ // Should not throw error
558
+ expect(button).toBeInTheDocument();
559
+ });
560
+
561
+ test("Handles empty actions array", () => {
562
+ setupTest({ actions: [] });
563
+ // Should render default button
564
+ expect(screen.getAllByText("Ok").length).toBeGreaterThan(0);
565
+ });
566
+
567
+ test("Handles all props together", () => {
568
+ setupTest({
569
+ title: "Complete Title",
570
+ subtitle: "Complete Subtitle",
571
+ description: "Complete Description",
572
+ buttonText: "Complete Button",
573
+ iconType: "success",
574
+ image: "https://example.com/image.jpg",
575
+ closeBtn: true,
576
+ disabled: false,
577
+ loading: false,
578
+ size: "large"
579
+ });
580
+
581
+ expect(screen.getAllByText("Complete Title").length).toBeGreaterThan(0);
582
+ expect(screen.getAllByText("Complete Subtitle").length).toBeGreaterThan(0);
583
+ expect(screen.getAllByText("Complete Description").length).toBeGreaterThan(0);
584
+ });
585
+
586
+ test("Handles empty strings for all text props", () => {
587
+ setupTest({
588
+ title: "",
589
+ subtitle: "",
590
+ description: "",
591
+ buttonText: ""
592
+ });
593
+
594
+ // Should still render with empty button text
595
+ const buttons = document.querySelectorAll("button");
596
+ expect(buttons.length).toBeGreaterThan(0);
597
+ });
598
+ });
599
+ });