@getmicdrop/svelte-components 5.4.1 → 5.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +172 -172
  2. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +782 -782
  3. package/dist/calendar/FAQs/FAQs.svelte +75 -75
  4. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +126 -126
  5. package/dist/calendar/OrderSummary/OrderSummary.svelte +367 -367
  6. package/dist/calendar/PublicCard/PublicCard.svelte +146 -145
  7. package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  8. package/dist/calendar/ShowCard/ShowCard.svelte +157 -157
  9. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +61 -61
  10. package/dist/calendar/index.d.ts +9 -0
  11. package/dist/calendar/index.d.ts.map +1 -0
  12. package/dist/calendar/index.js +15 -0
  13. package/dist/components/Layout/Grid.spec.d.ts +2 -0
  14. package/dist/components/Layout/Grid.spec.d.ts.map +1 -0
  15. package/dist/components/Layout/Grid.spec.js +230 -0
  16. package/dist/components/Layout/Grid.svelte +101 -109
  17. package/dist/components/Layout/Grid.svelte.d.ts +16 -6
  18. package/dist/components/Layout/Grid.svelte.d.ts.map +1 -1
  19. package/dist/components/Layout/Section.svelte +80 -80
  20. package/dist/components/Layout/Sidebar.svelte +108 -108
  21. package/dist/components/Layout/Stack.spec.d.ts +2 -0
  22. package/dist/components/Layout/Stack.spec.d.ts.map +1 -0
  23. package/dist/components/Layout/Stack.spec.js +257 -0
  24. package/dist/components/Layout/Stack.svelte +52 -90
  25. package/dist/components/Layout/Stack.svelte.d.ts +4 -6
  26. package/dist/components/Layout/Stack.svelte.d.ts.map +1 -1
  27. package/dist/components/Layout/__tests__/Grid.test.d.ts +2 -0
  28. package/dist/components/Layout/__tests__/Grid.test.d.ts.map +1 -0
  29. package/dist/components/Layout/__tests__/Grid.test.js +246 -0
  30. package/dist/components/Layout/__tests__/Stack.test.d.ts +2 -0
  31. package/dist/components/Layout/__tests__/Stack.test.d.ts.map +1 -0
  32. package/dist/components/Layout/__tests__/Stack.test.js +267 -0
  33. package/dist/constants/formOptions.spec.d.ts.map +1 -1
  34. package/dist/constants/formOptions.spec.js +69 -82
  35. package/dist/constants/validation.js +91 -91
  36. package/dist/constants/validation.spec.js +64 -64
  37. package/dist/datetime/__tests__/format.test.js +81 -1
  38. package/dist/datetime/format.d.ts +74 -0
  39. package/dist/datetime/format.d.ts.map +1 -1
  40. package/dist/datetime/format.js +104 -0
  41. package/dist/datetime/index.d.ts +1 -1
  42. package/dist/datetime/index.d.ts.map +1 -1
  43. package/dist/datetime/index.js +1 -1
  44. package/dist/datetime/timezone.d.ts.map +1 -1
  45. package/dist/datetime/timezone.js +2 -0
  46. package/dist/datetime/types.d.ts +4 -0
  47. package/dist/datetime/types.d.ts.map +1 -1
  48. package/dist/forms/createFormStore.svelte.d.ts.map +1 -1
  49. package/dist/forms/createFormStore.svelte.js +3 -2
  50. package/dist/index.d.ts +4 -112
  51. package/dist/index.js +47 -223
  52. package/dist/index.spec.d.ts +2 -0
  53. package/dist/index.spec.d.ts.map +1 -0
  54. package/dist/index.spec.js +370 -0
  55. package/dist/patterns/data/DataGrid.svelte +45 -45
  56. package/dist/patterns/data/DataList.svelte +24 -24
  57. package/dist/patterns/data/DataTable.svelte +41 -41
  58. package/dist/patterns/data/index.d.ts +4 -0
  59. package/dist/patterns/data/index.d.ts.map +1 -0
  60. package/dist/patterns/data/index.js +4 -0
  61. package/dist/patterns/forms/FormActions.spec.js +88 -88
  62. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  63. package/dist/patterns/forms/FormActions.svelte +46 -46
  64. package/dist/patterns/forms/FormGrid.svelte +33 -33
  65. package/dist/patterns/forms/FormSection.svelte +32 -32
  66. package/dist/patterns/forms/FormValidationSummary.spec.d.ts.map +1 -1
  67. package/dist/patterns/forms/FormValidationSummary.spec.js +181 -203
  68. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  69. package/dist/patterns/forms/FormValidationSummary.svelte +74 -67
  70. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts +8 -16
  71. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts.map +1 -1
  72. package/dist/patterns/forms/index.d.ts +5 -0
  73. package/dist/patterns/forms/index.d.ts.map +1 -0
  74. package/dist/patterns/forms/index.js +5 -0
  75. package/dist/patterns/index.d.ts +6 -0
  76. package/dist/patterns/index.d.ts.map +1 -0
  77. package/dist/patterns/index.js +18 -0
  78. package/dist/patterns/layout/Sidebar.svelte +39 -39
  79. package/dist/patterns/layout/Stack.svelte +61 -45
  80. package/dist/patterns/layout/Stack.svelte.d.ts +35 -21
  81. package/dist/patterns/layout/Stack.svelte.d.ts.map +1 -1
  82. package/dist/patterns/layout/index.d.ts +5 -0
  83. package/dist/patterns/layout/index.d.ts.map +1 -0
  84. package/dist/patterns/layout/index.js +6 -0
  85. package/dist/patterns/navigation/BottomNav.spec.d.ts.map +1 -1
  86. package/dist/patterns/navigation/BottomNav.spec.js +104 -130
  87. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  88. package/dist/patterns/navigation/BottomNav.svelte +64 -54
  89. package/dist/patterns/navigation/BottomNav.svelte.d.ts +10 -10
  90. package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
  91. package/dist/patterns/navigation/Header.spec.d.ts.map +1 -1
  92. package/dist/patterns/navigation/Header.spec.js +161 -203
  93. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  94. package/dist/patterns/navigation/Header.svelte +255 -240
  95. package/dist/patterns/navigation/Header.svelte.d.ts +12 -19
  96. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  97. package/dist/patterns/navigation/index.d.ts +3 -0
  98. package/dist/patterns/navigation/index.d.ts.map +1 -0
  99. package/dist/patterns/navigation/index.js +3 -0
  100. package/dist/patterns/page/PageHeader.svelte +49 -36
  101. package/dist/patterns/page/PageHeader.svelte.d.ts +12 -18
  102. package/dist/patterns/page/PageHeader.svelte.d.ts.map +1 -1
  103. package/dist/patterns/page/PageLayout.svelte +40 -40
  104. package/dist/patterns/page/PageLoader.spec.js +54 -54
  105. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  106. package/dist/patterns/page/PageLoader.svelte +53 -41
  107. package/dist/patterns/page/PageLoader.svelte.d.ts +9 -20
  108. package/dist/patterns/page/PageLoader.svelte.d.ts.map +1 -1
  109. package/dist/patterns/page/SectionHeader.svelte +51 -41
  110. package/dist/patterns/page/SectionHeader.svelte.d.ts +8 -17
  111. package/dist/patterns/page/SectionHeader.svelte.d.ts.map +1 -1
  112. package/dist/patterns/page/index.d.ts +5 -0
  113. package/dist/patterns/page/index.d.ts.map +1 -0
  114. package/dist/patterns/page/index.js +5 -0
  115. package/dist/presets/badges.js +112 -112
  116. package/dist/presets/buttons.js +76 -76
  117. package/dist/presets/index.js +9 -9
  118. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  119. package/dist/primitives/Accordion/Accordion.svelte +62 -61
  120. package/dist/primitives/Accordion/Accordion.svelte.d.ts.map +1 -1
  121. package/dist/primitives/Accordion/AccordionItem.svelte +95 -95
  122. package/dist/primitives/Alert/Alert.spec.js +170 -170
  123. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  124. package/dist/primitives/Alert/Alert.svelte +64 -65
  125. package/dist/primitives/Alert/Alert.svelte.d.ts +2 -1
  126. package/dist/primitives/Alert/Alert.svelte.d.ts.map +1 -1
  127. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  128. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  129. package/dist/primitives/Badges/Badge.spec.js +103 -103
  130. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  131. package/dist/primitives/Badges/Badge.svelte +99 -142
  132. package/dist/primitives/Badges/Badge.svelte.d.ts +4 -2
  133. package/dist/primitives/Badges/Badge.svelte.d.ts.map +1 -1
  134. package/dist/primitives/BottomSheet/BottomSheet.spec.js +127 -127
  135. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  136. package/dist/primitives/BottomSheet/BottomSheet.svelte +100 -100
  137. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +120 -120
  138. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  139. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +89 -89
  140. package/dist/primitives/Button/Button.spec.js +211 -211
  141. package/dist/primitives/Button/Button.stories.svelte +76 -76
  142. package/dist/primitives/Button/Button.svelte +269 -301
  143. package/dist/primitives/Button/Button.svelte.d.ts +10 -26
  144. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  145. package/dist/primitives/Button/ButtonSaveDemo.spec.js +48 -48
  146. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  147. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  148. package/dist/primitives/Card.spec.js +49 -49
  149. package/dist/primitives/Card.stories.svelte +22 -22
  150. package/dist/primitives/Card.svelte +28 -28
  151. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  152. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  153. package/dist/primitives/DarkModeToggle.spec.js +357 -357
  154. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  155. package/dist/primitives/DarkModeToggle.svelte +136 -136
  156. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  157. package/dist/primitives/Drawer/Drawer.svelte +236 -214
  158. package/dist/primitives/Drawer/Drawer.svelte.d.ts +12 -31
  159. package/dist/primitives/Drawer/Drawer.svelte.d.ts.map +1 -1
  160. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  161. package/dist/primitives/Dropdown/Dropdown.svelte +160 -148
  162. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts +9 -18
  163. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  164. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  165. package/dist/primitives/Icons/ArrowLeft.svelte +21 -20
  166. package/dist/primitives/Icons/ArrowLeft.svelte.d.ts +2 -0
  167. package/dist/primitives/Icons/ArrowLeft.svelte.d.ts.map +1 -1
  168. package/dist/primitives/Icons/ArrowRight.svelte +21 -20
  169. package/dist/primitives/Icons/ArrowRight.svelte.d.ts +2 -0
  170. package/dist/primitives/Icons/ArrowRight.svelte.d.ts.map +1 -1
  171. package/dist/primitives/Icons/Availability.svelte +27 -26
  172. package/dist/primitives/Icons/Availability.svelte.d.ts +2 -0
  173. package/dist/primitives/Icons/Availability.svelte.d.ts.map +1 -1
  174. package/dist/primitives/Icons/Back.svelte +27 -26
  175. package/dist/primitives/Icons/Back.svelte.d.ts +2 -0
  176. package/dist/primitives/Icons/Back.svelte.d.ts.map +1 -1
  177. package/dist/primitives/Icons/CheckCircle.svelte +19 -18
  178. package/dist/primitives/Icons/CheckCircle.svelte.d.ts +2 -0
  179. package/dist/primitives/Icons/CheckCircle.svelte.d.ts.map +1 -1
  180. package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -27
  181. package/dist/primitives/Icons/CheckCircleOutline.svelte.d.ts +2 -0
  182. package/dist/primitives/Icons/CheckCircleOutline.svelte.d.ts.map +1 -1
  183. package/dist/primitives/Icons/CheckCircleSolid.svelte +12 -10
  184. package/dist/primitives/Icons/CheckCircleSolid.svelte.d.ts +4 -0
  185. package/dist/primitives/Icons/CheckCircleSolid.svelte.d.ts.map +1 -1
  186. package/dist/primitives/Icons/CheckOutline.svelte +15 -13
  187. package/dist/primitives/Icons/CheckOutline.svelte.d.ts +4 -0
  188. package/dist/primitives/Icons/CheckOutline.svelte.d.ts.map +1 -1
  189. package/dist/primitives/Icons/ChevronDownOutline.svelte +14 -12
  190. package/dist/primitives/Icons/ChevronDownOutline.svelte.d.ts +4 -0
  191. package/dist/primitives/Icons/ChevronDownOutline.svelte.d.ts.map +1 -1
  192. package/dist/primitives/Icons/ChevronLeft.svelte +17 -16
  193. package/dist/primitives/Icons/ChevronLeft.svelte.d.ts +2 -0
  194. package/dist/primitives/Icons/ChevronLeft.svelte.d.ts.map +1 -1
  195. package/dist/primitives/Icons/ChevronLeftOutline.svelte +14 -12
  196. package/dist/primitives/Icons/ChevronLeftOutline.svelte.d.ts +4 -0
  197. package/dist/primitives/Icons/ChevronLeftOutline.svelte.d.ts.map +1 -1
  198. package/dist/primitives/Icons/ChevronRight.svelte +17 -16
  199. package/dist/primitives/Icons/ChevronRight.svelte.d.ts +2 -0
  200. package/dist/primitives/Icons/ChevronRight.svelte.d.ts.map +1 -1
  201. package/dist/primitives/Icons/ChevronRightOutline.svelte +14 -12
  202. package/dist/primitives/Icons/ChevronRightOutline.svelte.d.ts +4 -0
  203. package/dist/primitives/Icons/ChevronRightOutline.svelte.d.ts.map +1 -1
  204. package/dist/primitives/Icons/ChevronUpOutline.svelte +14 -12
  205. package/dist/primitives/Icons/ChevronUpOutline.svelte.d.ts +4 -0
  206. package/dist/primitives/Icons/ChevronUpOutline.svelte.d.ts.map +1 -1
  207. package/dist/primitives/Icons/CloseCircleOutline.svelte +14 -12
  208. package/dist/primitives/Icons/CloseCircleOutline.svelte.d.ts +4 -0
  209. package/dist/primitives/Icons/CloseCircleOutline.svelte.d.ts.map +1 -1
  210. package/dist/primitives/Icons/CloseOutline.svelte +14 -12
  211. package/dist/primitives/Icons/CloseOutline.svelte.d.ts +4 -0
  212. package/dist/primitives/Icons/CloseOutline.svelte.d.ts.map +1 -1
  213. package/dist/primitives/Icons/Copy.svelte +28 -27
  214. package/dist/primitives/Icons/Copy.svelte.d.ts +2 -0
  215. package/dist/primitives/Icons/Copy.svelte.d.ts.map +1 -1
  216. package/dist/primitives/Icons/Cross.svelte +18 -17
  217. package/dist/primitives/Icons/Cross.svelte.d.ts +2 -0
  218. package/dist/primitives/Icons/Cross.svelte.d.ts.map +1 -1
  219. package/dist/primitives/Icons/DotsHorizontalOutline.svelte +12 -10
  220. package/dist/primitives/Icons/DotsHorizontalOutline.svelte.d.ts +4 -0
  221. package/dist/primitives/Icons/DotsHorizontalOutline.svelte.d.ts.map +1 -1
  222. package/dist/primitives/Icons/DownArrow.svelte +21 -20
  223. package/dist/primitives/Icons/DownArrow.svelte.d.ts +2 -0
  224. package/dist/primitives/Icons/DownArrow.svelte.d.ts.map +1 -1
  225. package/dist/primitives/Icons/ErrorCircle.svelte +19 -18
  226. package/dist/primitives/Icons/ErrorCircle.svelte.d.ts +2 -0
  227. package/dist/primitives/Icons/ErrorCircle.svelte.d.ts.map +1 -1
  228. package/dist/primitives/Icons/ExclamationCircleOutline.svelte +14 -12
  229. package/dist/primitives/Icons/ExclamationCircleOutline.svelte.d.ts +4 -0
  230. package/dist/primitives/Icons/ExclamationCircleOutline.svelte.d.ts.map +1 -1
  231. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte +14 -12
  232. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte.d.ts +4 -0
  233. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte.d.ts.map +1 -1
  234. package/dist/primitives/Icons/EyeOutline.svelte +14 -12
  235. package/dist/primitives/Icons/EyeOutline.svelte.d.ts +4 -0
  236. package/dist/primitives/Icons/EyeOutline.svelte.d.ts.map +1 -1
  237. package/dist/primitives/Icons/EyeSlashOutline.svelte +14 -12
  238. package/dist/primitives/Icons/EyeSlashOutline.svelte.d.ts +4 -0
  239. package/dist/primitives/Icons/EyeSlashOutline.svelte.d.ts.map +1 -1
  240. package/dist/primitives/Icons/FacebookIcon.svelte +15 -13
  241. package/dist/primitives/Icons/FacebookIcon.svelte.d.ts +2 -0
  242. package/dist/primitives/Icons/FacebookIcon.svelte.d.ts.map +1 -1
  243. package/dist/primitives/Icons/FileCopyOutline.svelte +14 -12
  244. package/dist/primitives/Icons/FileCopyOutline.svelte.d.ts +4 -0
  245. package/dist/primitives/Icons/FileCopyOutline.svelte.d.ts.map +1 -1
  246. package/dist/primitives/Icons/Home.svelte +28 -27
  247. package/dist/primitives/Icons/Home.svelte.d.ts +2 -0
  248. package/dist/primitives/Icons/Home.svelte.d.ts.map +1 -1
  249. package/dist/primitives/Icons/HomeSolid.svelte +12 -10
  250. package/dist/primitives/Icons/HomeSolid.svelte.d.ts +4 -0
  251. package/dist/primitives/Icons/HomeSolid.svelte.d.ts.map +1 -1
  252. package/dist/primitives/Icons/Icon.spec.js +175 -175
  253. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  254. package/dist/primitives/Icons/Icon.svelte +79 -63
  255. package/dist/primitives/Icons/Icon.svelte.d.ts +5 -3
  256. package/dist/primitives/Icons/Icon.svelte.d.ts.map +1 -1
  257. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  258. package/dist/primitives/Icons/Icons.spec.d.ts +8 -0
  259. package/dist/primitives/Icons/Icons.spec.d.ts.map +1 -0
  260. package/dist/primitives/Icons/Icons.spec.js +291 -0
  261. package/dist/primitives/Icons/ImageOutline.svelte +21 -19
  262. package/dist/primitives/Icons/ImageOutline.svelte.d.ts +6 -2
  263. package/dist/primitives/Icons/ImageOutline.svelte.d.ts.map +1 -1
  264. package/dist/primitives/Icons/Info.svelte +20 -19
  265. package/dist/primitives/Icons/Info.svelte.d.ts +2 -0
  266. package/dist/primitives/Icons/Info.svelte.d.ts.map +1 -1
  267. package/dist/primitives/Icons/InfoCircleOutline.svelte +14 -12
  268. package/dist/primitives/Icons/InfoCircleOutline.svelte.d.ts +4 -0
  269. package/dist/primitives/Icons/InfoCircleOutline.svelte.d.ts.map +1 -1
  270. package/dist/primitives/Icons/InstagramIcon.svelte +21 -19
  271. package/dist/primitives/Icons/InstagramIcon.svelte.d.ts +2 -0
  272. package/dist/primitives/Icons/InstagramIcon.svelte.d.ts.map +1 -1
  273. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  274. package/dist/primitives/Icons/LogoInstagram.svelte.d.ts +4 -2
  275. package/dist/primitives/Icons/LogoInstagram.svelte.d.ts.map +1 -1
  276. package/dist/primitives/Icons/Message.svelte +28 -27
  277. package/dist/primitives/Icons/Message.svelte.d.ts +2 -0
  278. package/dist/primitives/Icons/Message.svelte.d.ts.map +1 -1
  279. package/dist/primitives/Icons/MinusOutline.svelte +14 -12
  280. package/dist/primitives/Icons/MinusOutline.svelte.d.ts +4 -0
  281. package/dist/primitives/Icons/MinusOutline.svelte.d.ts.map +1 -1
  282. package/dist/primitives/Icons/MoonIcon.svelte +18 -16
  283. package/dist/primitives/Icons/MoonIcon.svelte.d.ts +2 -0
  284. package/dist/primitives/Icons/MoonIcon.svelte.d.ts.map +1 -1
  285. package/dist/primitives/Icons/More.svelte +34 -33
  286. package/dist/primitives/Icons/More.svelte.d.ts +2 -0
  287. package/dist/primitives/Icons/More.svelte.d.ts.map +1 -1
  288. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  289. package/dist/primitives/Icons/MoreHori.svelte +35 -34
  290. package/dist/primitives/Icons/MoreHori.svelte.d.ts +2 -0
  291. package/dist/primitives/Icons/MoreHori.svelte.d.ts.map +1 -1
  292. package/dist/primitives/Icons/Notification.svelte +27 -26
  293. package/dist/primitives/Icons/Notification.svelte.d.ts +2 -0
  294. package/dist/primitives/Icons/Notification.svelte.d.ts.map +1 -1
  295. package/dist/primitives/Icons/Payment.svelte +27 -26
  296. package/dist/primitives/Icons/Payment.svelte.d.ts +2 -0
  297. package/dist/primitives/Icons/Payment.svelte.d.ts.map +1 -1
  298. package/dist/primitives/Icons/PlusOutline.svelte +14 -12
  299. package/dist/primitives/Icons/PlusOutline.svelte.d.ts +4 -0
  300. package/dist/primitives/Icons/PlusOutline.svelte.d.ts.map +1 -1
  301. package/dist/primitives/Icons/Profile.svelte +34 -33
  302. package/dist/primitives/Icons/Profile.svelte.d.ts +2 -0
  303. package/dist/primitives/Icons/Profile.svelte.d.ts.map +1 -1
  304. package/dist/primitives/Icons/Reload.svelte +42 -41
  305. package/dist/primitives/Icons/Reload.svelte.d.ts +2 -0
  306. package/dist/primitives/Icons/Reload.svelte.d.ts.map +1 -1
  307. package/dist/primitives/Icons/SearchOutline.svelte +14 -12
  308. package/dist/primitives/Icons/SearchOutline.svelte.d.ts +4 -0
  309. package/dist/primitives/Icons/SearchOutline.svelte.d.ts.map +1 -1
  310. package/dist/primitives/Icons/ShareOutline.svelte +14 -12
  311. package/dist/primitives/Icons/ShareOutline.svelte.d.ts +4 -0
  312. package/dist/primitives/Icons/ShareOutline.svelte.d.ts.map +1 -1
  313. package/dist/primitives/Icons/Shows.svelte +34 -33
  314. package/dist/primitives/Icons/Shows.svelte.d.ts +2 -0
  315. package/dist/primitives/Icons/Shows.svelte.d.ts.map +1 -1
  316. package/dist/primitives/Icons/Signout.svelte +34 -33
  317. package/dist/primitives/Icons/Signout.svelte.d.ts +2 -0
  318. package/dist/primitives/Icons/Signout.svelte.d.ts.map +1 -1
  319. package/dist/primitives/Icons/SunIcon.svelte +21 -19
  320. package/dist/primitives/Icons/SunIcon.svelte.d.ts +2 -0
  321. package/dist/primitives/Icons/SunIcon.svelte.d.ts.map +1 -1
  322. package/dist/primitives/Icons/TiktokIcon.svelte +15 -13
  323. package/dist/primitives/Icons/TiktokIcon.svelte.d.ts +2 -0
  324. package/dist/primitives/Icons/TiktokIcon.svelte.d.ts.map +1 -1
  325. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -19
  326. package/dist/primitives/Icons/TrashBinOutline.svelte.d.ts +6 -2
  327. package/dist/primitives/Icons/TrashBinOutline.svelte.d.ts.map +1 -1
  328. package/dist/primitives/Icons/TwitterIcon.svelte +15 -13
  329. package/dist/primitives/Icons/TwitterIcon.svelte.d.ts +2 -0
  330. package/dist/primitives/Icons/TwitterIcon.svelte.d.ts.map +1 -1
  331. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  332. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  333. package/dist/primitives/Icons/WarningIcon.svelte.d.ts +6 -2
  334. package/dist/primitives/Icons/WarningIcon.svelte.d.ts.map +1 -1
  335. package/dist/primitives/Icons/iconTestUtils.d.ts +162 -0
  336. package/dist/primitives/Icons/iconTestUtils.d.ts.map +1 -0
  337. package/dist/primitives/Icons/iconTestUtils.js +160 -0
  338. package/dist/primitives/Icons/index.d.ts +56 -54
  339. package/dist/primitives/Icons/index.d.ts.map +1 -1
  340. package/dist/primitives/Icons/index.js +59 -61
  341. package/dist/primitives/Icons/types.d.ts +31 -0
  342. package/dist/primitives/Icons/types.d.ts.map +1 -0
  343. package/dist/primitives/Icons/types.js +8 -0
  344. package/dist/primitives/Input/Input.spec.js +573 -573
  345. package/dist/primitives/Input/Input.stories.svelte +139 -139
  346. package/dist/primitives/Input/Input.svelte +431 -444
  347. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  348. package/dist/primitives/Input/Select.spec.js +218 -218
  349. package/dist/primitives/Input/Select.stories.svelte +112 -112
  350. package/dist/primitives/Input/Select.svelte +249 -232
  351. package/dist/primitives/Input/Select.svelte.d.ts +16 -24
  352. package/dist/primitives/Input/Select.svelte.d.ts.map +1 -1
  353. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  354. package/dist/primitives/Input/Textarea.svelte +105 -79
  355. package/dist/primitives/Input/Textarea.svelte.d.ts +20 -39
  356. package/dist/primitives/Input/Textarea.svelte.d.ts.map +1 -1
  357. package/dist/primitives/Label/Label.svelte +37 -37
  358. package/dist/primitives/Modal/Modal.spec.js +95 -95
  359. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  360. package/dist/primitives/Modal/Modal.svelte +158 -158
  361. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  362. package/dist/primitives/Pagination/Pagination.svelte +261 -261
  363. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  364. package/dist/primitives/Radio/Radio.svelte +67 -67
  365. package/dist/primitives/Skeleton/CardPlaceholder.svelte +87 -87
  366. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +59 -59
  367. package/dist/primitives/Skeleton/ListPlaceholder.svelte +76 -76
  368. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  369. package/dist/primitives/Skeleton/Skeleton.svelte +46 -52
  370. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts +2 -1
  371. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts.map +1 -1
  372. package/dist/primitives/Spinner/Spinner.spec.js +75 -75
  373. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  374. package/dist/primitives/Spinner/Spinner.svelte +44 -57
  375. package/dist/primitives/Spinner/Spinner.svelte.d.ts +4 -2
  376. package/dist/primitives/Spinner/Spinner.svelte.d.ts.map +1 -1
  377. package/dist/primitives/Tabs/TabItem.svelte +52 -51
  378. package/dist/primitives/Tabs/TabItem.svelte.d.ts.map +1 -1
  379. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  380. package/dist/primitives/Tabs/Tabs.svelte +129 -128
  381. package/dist/primitives/Tabs/Tabs.svelte.d.ts.map +1 -1
  382. package/dist/primitives/Toggle.spec.js +127 -127
  383. package/dist/primitives/Toggle.stories.svelte +92 -92
  384. package/dist/primitives/Toggle.svelte +71 -71
  385. package/dist/primitives/Typography/Typography.svelte +53 -53
  386. package/dist/primitives/ValidationError.spec.js +103 -103
  387. package/dist/primitives/ValidationError.stories.svelte +112 -111
  388. package/dist/primitives/ValidationError.svelte +29 -29
  389. package/dist/primitives/index.d.ts +31 -0
  390. package/dist/primitives/index.d.ts.map +1 -0
  391. package/dist/primitives/index.js +81 -0
  392. package/dist/recipes/CropImage/CropImage.spec.js +216 -216
  393. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  394. package/dist/recipes/CropImage/CropImage.svelte +238 -238
  395. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  396. package/dist/recipes/ImageUploader/ImageUploader.svelte +959 -980
  397. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -1
  398. package/dist/recipes/SuperLogin/SuperLogin.svelte +18 -17
  399. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  400. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  401. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +66 -47
  402. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts +7 -1
  403. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
  404. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  405. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -112
  406. package/dist/recipes/feedback/ErrorDisplay.svelte +67 -38
  407. package/dist/recipes/feedback/ErrorDisplay.svelte.d.ts +7 -0
  408. package/dist/recipes/feedback/ErrorDisplay.svelte.d.ts.map +1 -1
  409. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +129 -129
  410. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -167
  411. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte.d.ts +2 -2
  412. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte.d.ts.map +1 -1
  413. package/dist/recipes/feedback/index.d.ts +4 -0
  414. package/dist/recipes/feedback/index.d.ts.map +1 -0
  415. package/dist/recipes/feedback/index.js +4 -0
  416. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  417. package/dist/recipes/fields/FormField.svelte +58 -58
  418. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  419. package/dist/recipes/fields/SelectField.svelte +82 -82
  420. package/dist/recipes/fields/SelectField.svelte.d.ts +4 -1
  421. package/dist/recipes/fields/SelectField.svelte.d.ts.map +1 -1
  422. package/dist/recipes/fields/TextareaField.svelte +101 -101
  423. package/dist/recipes/fields/TextareaField.svelte.d.ts +6 -2
  424. package/dist/recipes/fields/TextareaField.svelte.d.ts.map +1 -1
  425. package/dist/recipes/fields/ToggleField.svelte +60 -60
  426. package/dist/recipes/fields/index.js +7 -7
  427. package/dist/recipes/index.d.ts +8 -0
  428. package/dist/recipes/index.d.ts.map +1 -0
  429. package/dist/recipes/index.js +24 -0
  430. package/dist/recipes/inputs/MultiSelect.spec.js +257 -257
  431. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  432. package/dist/recipes/inputs/MultiSelect.svelte +276 -244
  433. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +17 -26
  434. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  435. package/dist/recipes/inputs/OTPInput.spec.js +238 -238
  436. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  437. package/dist/recipes/inputs/OTPInput.svelte +117 -102
  438. package/dist/recipes/inputs/OTPInput.svelte.d.ts +15 -20
  439. package/dist/recipes/inputs/OTPInput.svelte.d.ts.map +1 -1
  440. package/dist/recipes/inputs/PasswordInput.svelte +121 -100
  441. package/dist/recipes/inputs/PasswordInput.svelte.d.ts +27 -34
  442. package/dist/recipes/inputs/PasswordInput.svelte.d.ts.map +1 -1
  443. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.spec.js +173 -173
  444. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +117 -108
  445. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +8 -16
  446. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
  447. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.spec.js +300 -300
  448. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -165
  449. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte.d.ts.map +1 -1
  450. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +337 -337
  451. package/dist/recipes/inputs/Search.svelte +102 -85
  452. package/dist/recipes/inputs/Search.svelte.d.ts +16 -32
  453. package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
  454. package/dist/recipes/inputs/SelectDropdown.svelte +169 -161
  455. package/dist/recipes/inputs/SelectDropdown.svelte.d.ts +12 -18
  456. package/dist/recipes/inputs/SelectDropdown.svelte.d.ts.map +1 -1
  457. package/dist/recipes/inputs/index.d.ts +8 -0
  458. package/dist/recipes/inputs/index.d.ts.map +1 -0
  459. package/dist/recipes/inputs/index.js +8 -0
  460. package/dist/recipes/modals/AlertModal.svelte +130 -130
  461. package/dist/recipes/modals/ConfirmationModal.spec.js +191 -191
  462. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  463. package/dist/recipes/modals/ConfirmationModal.svelte +152 -152
  464. package/dist/recipes/modals/InputModal.svelte +182 -182
  465. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  466. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  467. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  468. package/dist/recipes/modals/StatusModal.svelte +206 -206
  469. package/dist/recipes/modals/index.d.ts +7 -0
  470. package/dist/recipes/modals/index.d.ts.map +1 -0
  471. package/dist/recipes/modals/index.js +7 -0
  472. package/dist/services/EventService.js +75 -75
  473. package/dist/services/EventService.spec.js +217 -217
  474. package/dist/services/ShowService.spec.js +342 -342
  475. package/dist/stores/auth.js +36 -36
  476. package/dist/stores/auth.spec.js +139 -139
  477. package/dist/stores/toaster.js +13 -13
  478. package/dist/stories/ButtonAuditDashboard.svelte +23 -18
  479. package/dist/stories/ButtonAuditDashboard.svelte.d.ts.map +1 -1
  480. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  481. package/dist/stories/ButtonAuditReview.svelte +427 -427
  482. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  483. package/dist/stories/PatternsGallery.svelte +399 -388
  484. package/dist/stories/PatternsGallery.svelte.d.ts.map +1 -1
  485. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  486. package/dist/stories/PrimitivesGallery.svelte +752 -752
  487. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  488. package/dist/stories/RecipesGallery.svelte +471 -441
  489. package/dist/stories/RecipesGallery.svelte.d.ts.map +1 -1
  490. package/dist/stories/button-audit-manifest.json +11186 -11186
  491. package/dist/tailwind/preset.cjs +82 -82
  492. package/dist/telemetry.d.ts.map +1 -1
  493. package/dist/telemetry.js +1 -0
  494. package/dist/telemetry.server.d.ts.map +1 -1
  495. package/dist/telemetry.server.js +1 -0
  496. package/dist/telemetry.server.spec.js +1 -0
  497. package/dist/telemetry.spec.js +1 -0
  498. package/dist/tokens/__tests__/sizing.test.d.ts +2 -0
  499. package/dist/tokens/__tests__/sizing.test.d.ts.map +1 -0
  500. package/dist/tokens/__tests__/sizing.test.js +307 -0
  501. package/dist/tokens/__tests__/spacing.test.d.ts +2 -0
  502. package/dist/tokens/__tests__/spacing.test.d.ts.map +1 -0
  503. package/dist/tokens/__tests__/spacing.test.js +178 -0
  504. package/dist/tokens/__tests__/variants.test.d.ts +2 -0
  505. package/dist/tokens/__tests__/variants.test.d.ts.map +1 -0
  506. package/dist/tokens/__tests__/variants.test.js +329 -0
  507. package/dist/tokens/index.d.ts +3 -0
  508. package/dist/tokens/index.d.ts.map +1 -1
  509. package/dist/tokens/index.js +16 -0
  510. package/dist/tokens/sizing.d.ts +118 -0
  511. package/dist/tokens/sizing.d.ts.map +1 -0
  512. package/dist/tokens/sizing.js +125 -0
  513. package/dist/tokens/spacing.d.ts +105 -0
  514. package/dist/tokens/spacing.d.ts.map +1 -1
  515. package/dist/tokens/spacing.js +76 -0
  516. package/dist/tokens/tokens.css +87 -87
  517. package/dist/tokens/variants.d.ts +78 -0
  518. package/dist/tokens/variants.d.ts.map +1 -0
  519. package/dist/tokens/variants.js +89 -0
  520. package/dist/utils/__tests__/auth.test.d.ts +2 -0
  521. package/dist/utils/__tests__/auth.test.d.ts.map +1 -0
  522. package/dist/utils/__tests__/auth.test.js +431 -0
  523. package/dist/utils/__tests__/formatters.test.d.ts +2 -0
  524. package/dist/utils/__tests__/formatters.test.d.ts.map +1 -0
  525. package/dist/utils/__tests__/formatters.test.js +73 -0
  526. package/dist/utils/auth.d.ts +46 -0
  527. package/dist/utils/auth.d.ts.map +1 -0
  528. package/dist/utils/auth.js +195 -0
  529. package/dist/utils/formatters.d.ts +13 -0
  530. package/dist/utils/formatters.d.ts.map +1 -0
  531. package/dist/utils/formatters.js +24 -0
  532. package/dist/utils/utils.js +354 -354
  533. package/package.json +286 -282
  534. package/dist/patterns/layout/Grid.svelte +0 -35
  535. package/dist/patterns/layout/Grid.svelte.d.ts +0 -18
  536. package/dist/patterns/layout/Grid.svelte.d.ts.map +0 -1
@@ -1,182 +1,182 @@
1
- <script>
2
- import { ExclamationTriangleOutline } from "../../primitives/Icons";
3
- import Button from "../../primitives/Button/Button.svelte";
4
- import Cancel from "../../assets/svg/cancel.svg";
5
- import Modal from "../../primitives/Modal/Modal.svelte";
6
- import { typography } from '../../tokens/typography';
7
-
8
- let {
9
- show = $bindable(false),
10
- size = "default", // "small" | "default" | "large"
11
- title = "",
12
- description = "",
13
- closeBtn = false, // To show close button
14
- persistent = false, // When true, prevents closing by clicking backdrop or pressing Escape
15
-
16
- // Input configuration
17
- inputLabel = "",
18
- inputPlaceholder = "",
19
- inputType = "text", // text | email | password | textarea
20
- inputValue = $bindable(""),
21
- inputRequired = false,
22
- inputRows = 4, // For textarea
23
- inputIcon = null, // SVG component for input prefix icon
24
- helpText = "", // Helper text below input
25
-
26
- // Validation
27
- errorMessage = "",
28
- showError = false,
29
- validateEmail = false, // Auto-validate email format
30
-
31
- // Buttons
32
- primaryButtonText = "Confirm",
33
- secondaryButtonText = "Cancel",
34
- primaryButtonVariant = "blue-solid", // blue-solid | red-solid
35
-
36
- // State
37
- disabled = false,
38
- loading = false,
39
-
40
- // Callbacks
41
- onconfirm,
42
- oncancel,
43
- onclose,
44
- } = $props();
45
-
46
- // Email validation
47
- const isValidEmail = (email) => {
48
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
49
- return emailRegex.test(email);
50
- };
51
-
52
- let emailError = $derived(validateEmail && inputValue && !isValidEmail(inputValue));
53
- let isEmpty = $derived(inputRequired && (!inputValue || inputValue.trim() === ""));
54
- let hasError = $derived(showError || emailError);
55
- let isDisabled = $derived(disabled || loading || isEmpty || emailError);
56
-
57
- const handlePrimaryAction = () => {
58
- if (!isDisabled) {
59
- onconfirm?.({ value: inputValue });
60
- }
61
- };
62
-
63
- const handleSecondaryAction = () => {
64
- if (!disabled && !loading) {
65
- oncancel?.();
66
- closeModal();
67
- }
68
- };
69
-
70
- const closeModal = () => {
71
- show = false;
72
- onclose?.();
73
- };
74
-
75
- const handleClose = () => {
76
- if (disabled || loading) return;
77
- closeModal();
78
- };
79
- </script>
80
-
81
- <Modal bind:show {size} {persistent}>
82
- {#snippet header()}
83
- <div class="text-left">
84
- {#if closeBtn}
85
- <div class="flex justify-end -mt-2 -mr-2 mb-2">
86
- <Button variant="icon" size="xs" onclick={handleClose} {disabled}>
87
- <img src={Cancel} alt="Close" class="w-5 h-5" />
88
- </Button>
89
- </div>
90
- {/if}
91
- {#if title}
92
- <h3 class={typography.h2}>{title}</h3>
93
- {/if}
94
- </div>
95
- {/snippet}
96
-
97
- {#snippet body()}
98
- <div class="text-left mt-4">
99
- {#if description}
100
- <p class={`${typography.smMuted} leading-relaxed mb-4`}>
101
- {description}
102
- </p>
103
- {/if}
104
-
105
- <div>
106
- {#if inputLabel}
107
- <label
108
- for="modal-input"
109
- class={`${typography.label} block mb-2`}
110
- >
111
- {inputLabel}
112
- </label>
113
- {/if}
114
-
115
- {#if inputType === "textarea"}
116
- <textarea
117
- id="modal-input"
118
- bind:value={inputValue}
119
- placeholder={inputPlaceholder}
120
- rows={inputRows}
121
- class="w-full px-3 py-2 border {hasError ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'} bg-gray-50 dark:bg-gray-700 {typography.body} rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none"
122
- disabled={disabled || loading}
123
- ></textarea>
124
- {:else}
125
- <div class="relative">
126
- {#if inputIcon}
127
- {@const InputIconComponent = inputIcon}
128
- <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
129
- <InputIconComponent class={`w-5 h-5 ${typography.iconMuted}`} />
130
- </div>
131
- {/if}
132
- <input
133
- id="modal-input"
134
- type={inputType}
135
- bind:value={inputValue}
136
- placeholder={inputPlaceholder}
137
- required={inputRequired}
138
- disabled={disabled || loading}
139
- class="w-full {inputIcon ? 'pl-10' : 'px-3'} py-2 border {hasError ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'} rounded-lg {typography.body} bg-white dark:bg-gray-700 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed"
140
- />
141
- </div>
142
- {/if}
143
-
144
- {#if hasError && (errorMessage || emailError)}
145
- <p class={`${typography.label} text-red-600 dark:text-red-400 mt-2 flex items-center gap-1`}>
146
- <ExclamationTriangleOutline class="w-4 h-4" />
147
- {emailError ? "Please enter a valid email address" : errorMessage}
148
- </p>
149
- {:else if helpText && !hasError}
150
- <p class={`${typography.xsMuted} pt-2`}>
151
- {helpText}
152
- </p>
153
- {/if}
154
- </div>
155
- </div>
156
- {/snippet}
157
-
158
- {#snippet footer()}
159
- <div class="flex gap-3">
160
- {#if secondaryButtonText}
161
- <Button
162
- size="full"
163
- variant="alternative"
164
- onclick={handleSecondaryAction}
165
- disabled={disabled || loading}
166
- >
167
- {secondaryButtonText}
168
- </Button>
169
- {/if}
170
-
171
- <Button
172
- size="full"
173
- variant={primaryButtonVariant}
174
- onclick={handlePrimaryAction}
175
- disabled={isDisabled}
176
- {loading}
177
- >
178
- {primaryButtonText}
179
- </Button>
180
- </div>
181
- {/snippet}
182
- </Modal>
1
+ <script>
2
+ import { ExclamationTriangleOutline } from "../../primitives/Icons";
3
+ import Button from "../../primitives/Button/Button.svelte";
4
+ import Cancel from "../../assets/svg/cancel.svg";
5
+ import Modal from "../../primitives/Modal/Modal.svelte";
6
+ import { typography } from '../../tokens/typography';
7
+
8
+ let {
9
+ show = $bindable(false),
10
+ size = "default", // "small" | "default" | "large"
11
+ title = "",
12
+ description = "",
13
+ closeBtn = false, // To show close button
14
+ persistent = false, // When true, prevents closing by clicking backdrop or pressing Escape
15
+
16
+ // Input configuration
17
+ inputLabel = "",
18
+ inputPlaceholder = "",
19
+ inputType = "text", // text | email | password | textarea
20
+ inputValue = $bindable(""),
21
+ inputRequired = false,
22
+ inputRows = 4, // For textarea
23
+ inputIcon = null, // SVG component for input prefix icon
24
+ helpText = "", // Helper text below input
25
+
26
+ // Validation
27
+ errorMessage = "",
28
+ showError = false,
29
+ validateEmail = false, // Auto-validate email format
30
+
31
+ // Buttons
32
+ primaryButtonText = "Confirm",
33
+ secondaryButtonText = "Cancel",
34
+ primaryButtonVariant = "blue-solid", // blue-solid | red-solid
35
+
36
+ // State
37
+ disabled = false,
38
+ loading = false,
39
+
40
+ // Callbacks
41
+ onconfirm,
42
+ oncancel,
43
+ onclose,
44
+ } = $props();
45
+
46
+ // Email validation
47
+ const isValidEmail = (email) => {
48
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
49
+ return emailRegex.test(email);
50
+ };
51
+
52
+ let emailError = $derived(validateEmail && inputValue && !isValidEmail(inputValue));
53
+ let isEmpty = $derived(inputRequired && (!inputValue || inputValue.trim() === ""));
54
+ let hasError = $derived(showError || emailError);
55
+ let isDisabled = $derived(disabled || loading || isEmpty || emailError);
56
+
57
+ const handlePrimaryAction = () => {
58
+ if (!isDisabled) {
59
+ onconfirm?.({ value: inputValue });
60
+ }
61
+ };
62
+
63
+ const handleSecondaryAction = () => {
64
+ if (!disabled && !loading) {
65
+ oncancel?.();
66
+ closeModal();
67
+ }
68
+ };
69
+
70
+ const closeModal = () => {
71
+ show = false;
72
+ onclose?.();
73
+ };
74
+
75
+ const handleClose = () => {
76
+ if (disabled || loading) return;
77
+ closeModal();
78
+ };
79
+ </script>
80
+
81
+ <Modal bind:show {size} {persistent}>
82
+ {#snippet header()}
83
+ <div class="text-left">
84
+ {#if closeBtn}
85
+ <div class="flex justify-end -mt-2 -mr-2 mb-2">
86
+ <Button variant="icon" size="xs" onclick={handleClose} {disabled}>
87
+ <img src={Cancel} alt="Close" class="w-5 h-5" />
88
+ </Button>
89
+ </div>
90
+ {/if}
91
+ {#if title}
92
+ <h3 class={typography.h2}>{title}</h3>
93
+ {/if}
94
+ </div>
95
+ {/snippet}
96
+
97
+ {#snippet body()}
98
+ <div class="text-left mt-4">
99
+ {#if description}
100
+ <p class={`${typography.smMuted} leading-relaxed mb-4`}>
101
+ {description}
102
+ </p>
103
+ {/if}
104
+
105
+ <div>
106
+ {#if inputLabel}
107
+ <label
108
+ for="modal-input"
109
+ class={`${typography.label} block mb-2`}
110
+ >
111
+ {inputLabel}
112
+ </label>
113
+ {/if}
114
+
115
+ {#if inputType === "textarea"}
116
+ <textarea
117
+ id="modal-input"
118
+ bind:value={inputValue}
119
+ placeholder={inputPlaceholder}
120
+ rows={inputRows}
121
+ class="w-full px-3 py-2 border {hasError ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'} bg-gray-50 dark:bg-gray-700 {typography.body} rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent resize-none"
122
+ disabled={disabled || loading}
123
+ ></textarea>
124
+ {:else}
125
+ <div class="relative">
126
+ {#if inputIcon}
127
+ {@const InputIconComponent = inputIcon}
128
+ <div class="absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none">
129
+ <InputIconComponent class={`w-5 h-5 ${typography.iconMuted}`} />
130
+ </div>
131
+ {/if}
132
+ <input
133
+ id="modal-input"
134
+ type={inputType}
135
+ bind:value={inputValue}
136
+ placeholder={inputPlaceholder}
137
+ required={inputRequired}
138
+ disabled={disabled || loading}
139
+ class="w-full {inputIcon ? 'pl-10' : 'px-3'} py-2 border {hasError ? 'border-red-500' : 'border-gray-300 dark:border-gray-600'} rounded-lg {typography.body} bg-white dark:bg-gray-700 focus:ring-2 focus:ring-blue-500 focus:border-transparent disabled:opacity-50 disabled:cursor-not-allowed"
140
+ />
141
+ </div>
142
+ {/if}
143
+
144
+ {#if hasError && (errorMessage || emailError)}
145
+ <p class={`${typography.label} text-red-600 dark:text-red-400 mt-2 flex items-center gap-1`}>
146
+ <ExclamationTriangleOutline class="w-4 h-4" />
147
+ {emailError ? "Please enter a valid email address" : errorMessage}
148
+ </p>
149
+ {:else if helpText && !hasError}
150
+ <p class={`${typography.xsMuted} pt-2`}>
151
+ {helpText}
152
+ </p>
153
+ {/if}
154
+ </div>
155
+ </div>
156
+ {/snippet}
157
+
158
+ {#snippet footer()}
159
+ <div class="flex gap-3">
160
+ {#if secondaryButtonText}
161
+ <Button
162
+ size="full"
163
+ variant="alternative"
164
+ onclick={handleSecondaryAction}
165
+ disabled={disabled || loading}
166
+ >
167
+ {secondaryButtonText}
168
+ </Button>
169
+ {/if}
170
+
171
+ <Button
172
+ size="full"
173
+ variant={primaryButtonVariant}
174
+ onclick={handlePrimaryAction}
175
+ disabled={isDisabled}
176
+ {loading}
177
+ >
178
+ {primaryButtonText}
179
+ </Button>
180
+ </div>
181
+ {/snippet}
182
+ </Modal>
@@ -1,100 +1,100 @@
1
- import { render, screen } from "@testing-library/svelte";
2
- import userEvent from "@testing-library/user-event";
3
- import { expect, describe, test, vi } from "vitest";
4
- import ModalStateManager from "./ModalStateManager.svelte";
5
-
6
- describe("ModalStateManager Component Tests", () => {
7
- test("Shows processing state when isProcessing is true", () => {
8
- render(ModalStateManager, {
9
- props: { isProcessing: true, isSuccess: false },
10
- });
11
- expect(screen.getByText("Processing your request")).toBeInTheDocument();
12
- });
13
-
14
- test("Shows custom processing message", () => {
15
- render(ModalStateManager, {
16
- props: {
17
- isProcessing: true,
18
- isSuccess: false,
19
- processingMessage: "Please wait...",
20
- },
21
- });
22
- expect(screen.getByText("Please wait...")).toBeInTheDocument();
23
- });
24
-
25
- test("Shows success state when isSuccess is true", () => {
26
- render(ModalStateManager, {
27
- props: { isProcessing: false, isSuccess: true, successTitle: "Done!" },
28
- });
29
- expect(screen.getByText("Done!")).toBeInTheDocument();
30
- });
31
-
32
- test("Shows success message when provided", () => {
33
- render(ModalStateManager, {
34
- props: {
35
- isProcessing: false,
36
- isSuccess: true,
37
- successTitle: "Success",
38
- successMessage: "Your action was completed.",
39
- },
40
- });
41
- expect(screen.getByText("Your action was completed.")).toBeInTheDocument();
42
- });
43
-
44
- test("Shows continue button in success state", () => {
45
- render(ModalStateManager, {
46
- props: { isProcessing: false, isSuccess: true },
47
- });
48
- expect(screen.getByText("Continue")).toBeInTheDocument();
49
- });
50
-
51
- test("Uses custom success button text", () => {
52
- render(ModalStateManager, {
53
- props: {
54
- isProcessing: false,
55
- isSuccess: true,
56
- successButtonText: "Close",
57
- },
58
- });
59
- expect(screen.getByText("Close")).toBeInTheDocument();
60
- });
61
-
62
- test("Calls onSuccessClose when success button clicked", async () => {
63
- const user = userEvent.setup();
64
- const onSuccessClose = vi.fn();
65
-
66
- render(ModalStateManager, {
67
- props: { isProcessing: false, isSuccess: true, onSuccessClose },
68
- });
69
-
70
- await user.click(screen.getByText("Continue"));
71
- expect(onSuccessClose).toHaveBeenCalledTimes(1);
72
- });
73
-
74
- test("Processing state shows spinner animation", () => {
75
- const { container } = render(ModalStateManager, {
76
- props: { isProcessing: true, isSuccess: false },
77
- });
78
- const spinner = container.querySelector(".animate-spin");
79
- expect(spinner).toBeInTheDocument();
80
- });
81
-
82
- test("Processing state has orange background", () => {
83
- const { container } = render(ModalStateManager, {
84
- props: { isProcessing: true, isSuccess: false },
85
- });
86
- const spinnerBg = container.querySelector(".bg-orange-300");
87
- expect(spinnerBg).toBeInTheDocument();
88
- });
89
-
90
- test("Success state priority over processing", () => {
91
- // When both are true, success should show
92
- render(ModalStateManager, {
93
- props: { isProcessing: true, isSuccess: true, successTitle: "Complete" },
94
- });
95
- expect(screen.getByText("Complete")).toBeInTheDocument();
96
- expect(
97
- screen.queryByText("Processing your request")
98
- ).not.toBeInTheDocument();
99
- });
100
- });
1
+ import { render, screen } from "@testing-library/svelte";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { expect, describe, test, vi } from "vitest";
4
+ import ModalStateManager from "./ModalStateManager.svelte";
5
+
6
+ describe("ModalStateManager Component Tests", () => {
7
+ test("Shows processing state when isProcessing is true", () => {
8
+ render(ModalStateManager, {
9
+ props: { isProcessing: true, isSuccess: false },
10
+ });
11
+ expect(screen.getByText("Processing your request")).toBeInTheDocument();
12
+ });
13
+
14
+ test("Shows custom processing message", () => {
15
+ render(ModalStateManager, {
16
+ props: {
17
+ isProcessing: true,
18
+ isSuccess: false,
19
+ processingMessage: "Please wait...",
20
+ },
21
+ });
22
+ expect(screen.getByText("Please wait...")).toBeInTheDocument();
23
+ });
24
+
25
+ test("Shows success state when isSuccess is true", () => {
26
+ render(ModalStateManager, {
27
+ props: { isProcessing: false, isSuccess: true, successTitle: "Done!" },
28
+ });
29
+ expect(screen.getByText("Done!")).toBeInTheDocument();
30
+ });
31
+
32
+ test("Shows success message when provided", () => {
33
+ render(ModalStateManager, {
34
+ props: {
35
+ isProcessing: false,
36
+ isSuccess: true,
37
+ successTitle: "Success",
38
+ successMessage: "Your action was completed.",
39
+ },
40
+ });
41
+ expect(screen.getByText("Your action was completed.")).toBeInTheDocument();
42
+ });
43
+
44
+ test("Shows continue button in success state", () => {
45
+ render(ModalStateManager, {
46
+ props: { isProcessing: false, isSuccess: true },
47
+ });
48
+ expect(screen.getByText("Continue")).toBeInTheDocument();
49
+ });
50
+
51
+ test("Uses custom success button text", () => {
52
+ render(ModalStateManager, {
53
+ props: {
54
+ isProcessing: false,
55
+ isSuccess: true,
56
+ successButtonText: "Close",
57
+ },
58
+ });
59
+ expect(screen.getByText("Close")).toBeInTheDocument();
60
+ });
61
+
62
+ test("Calls onSuccessClose when success button clicked", async () => {
63
+ const user = userEvent.setup();
64
+ const onSuccessClose = vi.fn();
65
+
66
+ render(ModalStateManager, {
67
+ props: { isProcessing: false, isSuccess: true, onSuccessClose },
68
+ });
69
+
70
+ await user.click(screen.getByText("Continue"));
71
+ expect(onSuccessClose).toHaveBeenCalledTimes(1);
72
+ });
73
+
74
+ test("Processing state shows spinner animation", () => {
75
+ const { container } = render(ModalStateManager, {
76
+ props: { isProcessing: true, isSuccess: false },
77
+ });
78
+ const spinner = container.querySelector(".animate-spin");
79
+ expect(spinner).toBeInTheDocument();
80
+ });
81
+
82
+ test("Processing state has orange background", () => {
83
+ const { container } = render(ModalStateManager, {
84
+ props: { isProcessing: true, isSuccess: false },
85
+ });
86
+ const spinnerBg = container.querySelector(".bg-orange-300");
87
+ expect(spinnerBg).toBeInTheDocument();
88
+ });
89
+
90
+ test("Success state priority over processing", () => {
91
+ // When both are true, success should show
92
+ render(ModalStateManager, {
93
+ props: { isProcessing: true, isSuccess: true, successTitle: "Complete" },
94
+ });
95
+ expect(screen.getByText("Complete")).toBeInTheDocument();
96
+ expect(
97
+ screen.queryByText("Processing your request")
98
+ ).not.toBeInTheDocument();
99
+ });
100
+ });