@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,420 @@
1
+ import { render, screen, fireEvent } from '@testing-library/svelte';
2
+ import { expect, describe, test, vi, beforeEach } from 'vitest';
3
+ import MonthSwitcher from './MonthSwitcher.svelte';
4
+
5
+ describe('MonthSwitcher Component', () => {
6
+ test('renders a header element', () => {
7
+ const { container } = render(MonthSwitcher);
8
+ expect(container.querySelector('header')).toBeInTheDocument();
9
+ });
10
+
11
+ test('renders the month name', () => {
12
+ const { container } = render(MonthSwitcher, {
13
+ props: { currentMonth: 0, currentYear: 2024 }
14
+ });
15
+ expect(screen.getByText('January')).toBeInTheDocument();
16
+ });
17
+
18
+ test('renders three navigation buttons', () => {
19
+ const { container } = render(MonthSwitcher);
20
+ const buttons = container.querySelectorAll('button');
21
+ expect(buttons.length).toBe(3);
22
+ });
23
+
24
+ test('has Today button', () => {
25
+ render(MonthSwitcher);
26
+ expect(screen.getByText('Today')).toBeInTheDocument();
27
+ });
28
+ });
29
+
30
+ describe('MonthSwitcher Accessibility', () => {
31
+ test('prev button has aria-label', () => {
32
+ const { container } = render(MonthSwitcher);
33
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
34
+ expect(prevButton).toBeInTheDocument();
35
+ });
36
+
37
+ test('next button has aria-label', () => {
38
+ const { container } = render(MonthSwitcher);
39
+ const nextButton = container.querySelector('[aria-label="Next month"]');
40
+ expect(nextButton).toBeInTheDocument();
41
+ });
42
+
43
+ test('today button has aria-label', () => {
44
+ const { container } = render(MonthSwitcher);
45
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
46
+ expect(todayButton).toBeInTheDocument();
47
+ });
48
+ });
49
+
50
+ describe('MonthSwitcher Month Display', () => {
51
+ test('displays February correctly', () => {
52
+ render(MonthSwitcher, {
53
+ props: { currentMonth: 1, currentYear: 2024 }
54
+ });
55
+ expect(screen.getByText('February')).toBeInTheDocument();
56
+ });
57
+
58
+ test('displays December correctly', () => {
59
+ render(MonthSwitcher, {
60
+ props: { currentMonth: 11, currentYear: 2024 }
61
+ });
62
+ expect(screen.getByText('December')).toBeInTheDocument();
63
+ });
64
+
65
+ test('displays June correctly', () => {
66
+ render(MonthSwitcher, {
67
+ props: { currentMonth: 5, currentYear: 2024 }
68
+ });
69
+ expect(screen.getByText('June')).toBeInTheDocument();
70
+ });
71
+ });
72
+
73
+ describe('MonthSwitcher Navigation Callbacks', () => {
74
+ test('calls handleNext when next button clicked', async () => {
75
+ const handleNext = vi.fn();
76
+ const { container } = render(MonthSwitcher, {
77
+ props: { handleNext }
78
+ });
79
+ const nextButton = container.querySelector('[aria-label="Next month"]');
80
+ await fireEvent.click(nextButton);
81
+ expect(handleNext).toHaveBeenCalled();
82
+ });
83
+
84
+ test('calls handlePrev when prev button clicked', async () => {
85
+ const handlePrev = vi.fn();
86
+ const { container } = render(MonthSwitcher, {
87
+ props: {
88
+ handlePrev,
89
+ disablePastNavigation: false
90
+ }
91
+ });
92
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
93
+ await fireEvent.click(prevButton);
94
+ expect(handlePrev).toHaveBeenCalled();
95
+ });
96
+
97
+ test('calls handleToday when today button clicked', async () => {
98
+ const handleToday = vi.fn();
99
+ const { container } = render(MonthSwitcher, {
100
+ props: {
101
+ handleToday,
102
+ currentMonth: 0,
103
+ currentYear: 2020
104
+ }
105
+ });
106
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
107
+ await fireEvent.click(todayButton);
108
+ expect(handleToday).toHaveBeenCalled();
109
+ });
110
+ });
111
+
112
+ describe('MonthSwitcher Disable Past Navigation', () => {
113
+ test('prev button disabled at current month by default', () => {
114
+ const today = new Date();
115
+ const { container } = render(MonthSwitcher, {
116
+ props: {
117
+ currentMonth: today.getMonth(),
118
+ currentYear: today.getFullYear(),
119
+ disablePastNavigation: true
120
+ }
121
+ });
122
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
123
+ expect(prevButton).toBeDisabled();
124
+ });
125
+
126
+ test('prev button enabled when not at current month', () => {
127
+ const today = new Date();
128
+ const futureMonth = (today.getMonth() + 3) % 12;
129
+ const futureYear = today.getMonth() + 3 > 11 ? today.getFullYear() + 1 : today.getFullYear();
130
+ const { container } = render(MonthSwitcher, {
131
+ props: {
132
+ currentMonth: futureMonth,
133
+ currentYear: futureYear,
134
+ disablePastNavigation: true
135
+ }
136
+ });
137
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
138
+ expect(prevButton).not.toBeDisabled();
139
+ });
140
+
141
+ test('prev button enabled when disablePastNavigation is false', () => {
142
+ const today = new Date();
143
+ const { container } = render(MonthSwitcher, {
144
+ props: {
145
+ currentMonth: today.getMonth(),
146
+ currentYear: today.getFullYear(),
147
+ disablePastNavigation: false
148
+ }
149
+ });
150
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
151
+ expect(prevButton).not.toBeDisabled();
152
+ });
153
+
154
+ test('does not call handlePrev when disabled', async () => {
155
+ const handlePrev = vi.fn();
156
+ const today = new Date();
157
+ const { container } = render(MonthSwitcher, {
158
+ props: {
159
+ handlePrev,
160
+ currentMonth: today.getMonth(),
161
+ currentYear: today.getFullYear(),
162
+ disablePastNavigation: true
163
+ }
164
+ });
165
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
166
+ await fireEvent.click(prevButton);
167
+ expect(handlePrev).not.toHaveBeenCalled();
168
+ });
169
+ });
170
+
171
+ describe('MonthSwitcher Today Button State', () => {
172
+ test('today button disabled at current month', () => {
173
+ const today = new Date();
174
+ const { container } = render(MonthSwitcher, {
175
+ props: {
176
+ currentMonth: today.getMonth(),
177
+ currentYear: today.getFullYear()
178
+ }
179
+ });
180
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
181
+ expect(todayButton).toBeDisabled();
182
+ });
183
+
184
+ test('today button enabled when not at current month', () => {
185
+ const { container } = render(MonthSwitcher, {
186
+ props: {
187
+ currentMonth: 0,
188
+ currentYear: 2020
189
+ }
190
+ });
191
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
192
+ expect(todayButton).not.toBeDisabled();
193
+ });
194
+ });
195
+
196
+ describe('MonthSwitcher Styling', () => {
197
+ test('header has flex layout', () => {
198
+ const { container } = render(MonthSwitcher);
199
+ const header = container.querySelector('header');
200
+ expect(header).toHaveClass('flex');
201
+ expect(header).toHaveClass('items-center');
202
+ expect(header).toHaveClass('justify-between');
203
+ });
204
+
205
+ test('navigation buttons container has flex and gap', () => {
206
+ const { container } = render(MonthSwitcher);
207
+ const buttonContainer = container.querySelector('.flex.items-center.gap-2');
208
+ expect(buttonContainer).toBeInTheDocument();
209
+ });
210
+ });
211
+
212
+ describe('MonthSwitcher Mouse Events', () => {
213
+ test('prev button responds to mousedown', async () => {
214
+ const { container } = render(MonthSwitcher, {
215
+ props: { disablePastNavigation: false }
216
+ });
217
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
218
+ await fireEvent.mouseDown(prevButton);
219
+ // Button should have scale-90 class when pressed
220
+ expect(prevButton.className).toContain('scale-90');
221
+ });
222
+
223
+ test('prev button responds to mouseup', async () => {
224
+ const { container } = render(MonthSwitcher, {
225
+ props: { disablePastNavigation: false }
226
+ });
227
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
228
+ await fireEvent.mouseDown(prevButton);
229
+ await fireEvent.mouseUp(prevButton);
230
+ // Button should not have scale-90 class after mouseup
231
+ expect(prevButton.className).not.toContain('scale-90');
232
+ });
233
+
234
+ test('prev button responds to mouseleave', async () => {
235
+ const { container } = render(MonthSwitcher, {
236
+ props: { disablePastNavigation: false }
237
+ });
238
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
239
+ await fireEvent.mouseDown(prevButton);
240
+ await fireEvent.mouseLeave(prevButton);
241
+ expect(prevButton.className).not.toContain('scale-90');
242
+ });
243
+
244
+ test('next button responds to mousedown', async () => {
245
+ const { container } = render(MonthSwitcher);
246
+ const nextButton = container.querySelector('[aria-label="Next month"]');
247
+ await fireEvent.mouseDown(nextButton);
248
+ expect(nextButton.className).toContain('scale-90');
249
+ });
250
+
251
+ test('next button responds to mouseup', async () => {
252
+ const { container } = render(MonthSwitcher);
253
+ const nextButton = container.querySelector('[aria-label="Next month"]');
254
+ await fireEvent.mouseDown(nextButton);
255
+ await fireEvent.mouseUp(nextButton);
256
+ expect(nextButton.className).not.toContain('scale-90');
257
+ });
258
+
259
+ test('next button responds to mouseleave', async () => {
260
+ const { container } = render(MonthSwitcher);
261
+ const nextButton = container.querySelector('[aria-label="Next month"]');
262
+ await fireEvent.mouseDown(nextButton);
263
+ await fireEvent.mouseLeave(nextButton);
264
+ expect(nextButton.className).not.toContain('scale-90');
265
+ });
266
+
267
+ test('today button responds to mousedown', async () => {
268
+ const { container } = render(MonthSwitcher, {
269
+ props: { currentMonth: 0, currentYear: 2020 }
270
+ });
271
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
272
+ await fireEvent.mouseDown(todayButton);
273
+ expect(todayButton.className).toContain('scale-95');
274
+ });
275
+
276
+ test('today button responds to mouseup', async () => {
277
+ const { container } = render(MonthSwitcher, {
278
+ props: { currentMonth: 0, currentYear: 2020 }
279
+ });
280
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
281
+ await fireEvent.mouseDown(todayButton);
282
+ await fireEvent.mouseUp(todayButton);
283
+ expect(todayButton.className).not.toContain('scale-95');
284
+ });
285
+
286
+ test('today button responds to mouseleave', async () => {
287
+ const { container } = render(MonthSwitcher, {
288
+ props: { currentMonth: 0, currentYear: 2020 }
289
+ });
290
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
291
+ await fireEvent.mouseDown(todayButton);
292
+ await fireEvent.mouseLeave(todayButton);
293
+ expect(todayButton.className).not.toContain('scale-95');
294
+ });
295
+ });
296
+
297
+ describe('MonthSwitcher Touch Events', () => {
298
+ test('prev button responds to touchstart', async () => {
299
+ const { container } = render(MonthSwitcher, {
300
+ props: { disablePastNavigation: false }
301
+ });
302
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
303
+ await fireEvent.touchStart(prevButton);
304
+ expect(prevButton.className).toContain('scale-90');
305
+ });
306
+
307
+ test('prev button responds to touchend', async () => {
308
+ const { container } = render(MonthSwitcher, {
309
+ props: { disablePastNavigation: false }
310
+ });
311
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
312
+ await fireEvent.touchStart(prevButton);
313
+ await fireEvent.touchEnd(prevButton);
314
+ expect(prevButton.className).not.toContain('scale-90');
315
+ });
316
+
317
+ test('prev button responds to touchcancel', async () => {
318
+ const { container } = render(MonthSwitcher, {
319
+ props: { disablePastNavigation: false }
320
+ });
321
+ const prevButton = container.querySelector('[aria-label="Previous month"]');
322
+ await fireEvent.touchStart(prevButton);
323
+ await fireEvent.touchCancel(prevButton);
324
+ expect(prevButton.className).not.toContain('scale-90');
325
+ });
326
+
327
+ test('next button responds to touchstart', async () => {
328
+ const { container } = render(MonthSwitcher);
329
+ const nextButton = container.querySelector('[aria-label="Next month"]');
330
+ await fireEvent.touchStart(nextButton);
331
+ expect(nextButton.className).toContain('scale-90');
332
+ });
333
+
334
+ test('next button responds to touchend', async () => {
335
+ const { container } = render(MonthSwitcher);
336
+ const nextButton = container.querySelector('[aria-label="Next month"]');
337
+ await fireEvent.touchStart(nextButton);
338
+ await fireEvent.touchEnd(nextButton);
339
+ expect(nextButton.className).not.toContain('scale-90');
340
+ });
341
+
342
+ test('next button responds to touchcancel', async () => {
343
+ const { container } = render(MonthSwitcher);
344
+ const nextButton = container.querySelector('[aria-label="Next month"]');
345
+ await fireEvent.touchStart(nextButton);
346
+ await fireEvent.touchCancel(nextButton);
347
+ expect(nextButton.className).not.toContain('scale-90');
348
+ });
349
+
350
+ test('today button responds to touchstart', async () => {
351
+ const { container } = render(MonthSwitcher, {
352
+ props: { currentMonth: 0, currentYear: 2020 }
353
+ });
354
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
355
+ await fireEvent.touchStart(todayButton);
356
+ expect(todayButton.className).toContain('scale-95');
357
+ });
358
+
359
+ test('today button responds to touchend', async () => {
360
+ const { container } = render(MonthSwitcher, {
361
+ props: { currentMonth: 0, currentYear: 2020 }
362
+ });
363
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
364
+ await fireEvent.touchStart(todayButton);
365
+ await fireEvent.touchEnd(todayButton);
366
+ expect(todayButton.className).not.toContain('scale-95');
367
+ });
368
+
369
+ test('today button responds to touchcancel', async () => {
370
+ const { container } = render(MonthSwitcher, {
371
+ props: { currentMonth: 0, currentYear: 2020 }
372
+ });
373
+ const todayButton = container.querySelector('[aria-label="Go to current month"]');
374
+ await fireEvent.touchStart(todayButton);
375
+ await fireEvent.touchCancel(todayButton);
376
+ expect(todayButton.className).not.toContain('scale-95');
377
+ });
378
+ });
379
+
380
+ describe('MonthSwitcher Haptic Feedback', () => {
381
+ beforeEach(() => {
382
+ // Clean up window mocks
383
+ delete window.webkit;
384
+ delete window.TapticEngine;
385
+ if (navigator.vibrate) {
386
+ vi.spyOn(navigator, 'vibrate').mockImplementation(() => true);
387
+ }
388
+ });
389
+
390
+ test('triggers webkit haptic when available', async () => {
391
+ const postMessage = vi.fn();
392
+ window.webkit = {
393
+ messageHandlers: {
394
+ haptic: { postMessage }
395
+ }
396
+ };
397
+ const { container } = render(MonthSwitcher);
398
+ const nextButton = container.querySelector('[aria-label="Next month"]');
399
+ await fireEvent.click(nextButton);
400
+ expect(postMessage).toHaveBeenCalledWith('light');
401
+ });
402
+
403
+ test('triggers TapticEngine when available', async () => {
404
+ const impact = vi.fn();
405
+ window.TapticEngine = { impact };
406
+ const { container } = render(MonthSwitcher);
407
+ const nextButton = container.querySelector('[aria-label="Next month"]');
408
+ await fireEvent.click(nextButton);
409
+ expect(impact).toHaveBeenCalledWith({ style: 'light' });
410
+ });
411
+
412
+ test('triggers navigator.vibrate as fallback', async () => {
413
+ // Add vibrate to navigator if it doesn't exist
414
+ navigator.vibrate = vi.fn().mockReturnValue(true);
415
+ const { container } = render(MonthSwitcher);
416
+ const nextButton = container.querySelector('[aria-label="Next month"]');
417
+ await fireEvent.click(nextButton);
418
+ expect(navigator.vibrate).toHaveBeenCalledWith(10);
419
+ });
420
+ });
@@ -1,126 +1,126 @@
1
- <script>
2
- import { ChevronLeftOutline, ChevronRightOutline } from '../../primitives/Icons';
3
- import { typography } from '../../tokens/typography';
4
-
5
- const today = new Date();
6
- const todayLocalMonth = today.getMonth();
7
- const todayLocalYear = today.getFullYear();
8
-
9
- let {
10
- currentYear = todayLocalYear,
11
- currentMonth = todayLocalMonth,
12
- handleNext = () => {},
13
- handlePrev = () => {},
14
- handleToday = () => {},
15
- disablePastNavigation = true,
16
- } = $props();
17
-
18
- let isAtCurrentMonth = $derived(
19
- currentYear === todayLocalYear && currentMonth === todayLocalMonth
20
- );
21
-
22
- let canGoPrev = $derived(!disablePastNavigation || !isAtCurrentMonth);
23
-
24
- let prevPressed = $state(false);
25
- let nextPressed = $state(false);
26
- let todayPressed = $state(false);
27
-
28
- function triggerHaptic(style = 'light') {
29
- if (typeof window === 'undefined') return;
30
-
31
- if (window.webkit?.messageHandlers?.haptic) {
32
- window.webkit.messageHandlers.haptic.postMessage(style);
33
- return;
34
- }
35
-
36
- if (window.TapticEngine) {
37
- window.TapticEngine.impact({ style });
38
- return;
39
- }
40
-
41
- if (navigator.vibrate) {
42
- navigator.vibrate(style === 'light' ? 10 : 20);
43
- }
44
- }
45
-
46
- function handlePrevClick() {
47
- if (canGoPrev) {
48
- triggerHaptic('light');
49
- handlePrev();
50
- }
51
- }
52
-
53
- function handleNextClick() {
54
- triggerHaptic('light');
55
- handleNext();
56
- }
57
-
58
- function handleTodayClick() {
59
- triggerHaptic('light');
60
- handleToday();
61
- }
62
- </script>
63
-
64
- <header class="w-full flex items-center justify-between select-none">
65
- <h2 class="{typography.h1} text-3xl">
66
- {new Intl.DateTimeFormat("en", {
67
- month: "long",
68
- }).format(new Date(currentYear, currentMonth, 1))}
69
- </h2>
70
- <div class="flex items-center gap-2">
71
- <button
72
- class="p-3 -m-1.5 flex items-center justify-center border-0 rounded-full bg-transparent text-gray-500 dark:text-gray-400 cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"
73
- class:scale-90={prevPressed}
74
- class:bg-gray-100={prevPressed}
75
- class:dark:bg-gray-700={prevPressed}
76
- class:text-gray-900={prevPressed}
77
- class:dark:text-white={prevPressed}
78
- onclick={handlePrevClick}
79
- ontouchstart={() => prevPressed = true}
80
- ontouchend={() => prevPressed = false}
81
- ontouchcancel={() => prevPressed = false}
82
- onmousedown={() => prevPressed = true}
83
- onmouseup={() => prevPressed = false}
84
- onmouseleave={() => prevPressed = false}
85
- disabled={!canGoPrev}
86
- aria-label="Previous month"
87
- >
88
- <ChevronLeftOutline class="w-5 h-5" />
89
- </button>
90
- <button
91
- class="{`${typography.label} px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-lg bg-transparent cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-blue-700 hover:text-white hover:border-blue-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 disabled:opacity-40 disabled:cursor-not-allowed disabled:text-gray-500 dark:disabled:text-gray-400`}"
92
- class:scale-95={todayPressed}
93
- class:bg-blue-700={todayPressed}
94
- class:text-white={todayPressed}
95
- onclick={handleTodayClick}
96
- ontouchstart={() => todayPressed = true}
97
- ontouchend={() => todayPressed = false}
98
- ontouchcancel={() => todayPressed = false}
99
- onmousedown={() => todayPressed = true}
100
- onmouseup={() => todayPressed = false}
101
- onmouseleave={() => todayPressed = false}
102
- disabled={isAtCurrentMonth}
103
- aria-label="Go to current month"
104
- >
105
- Today
106
- </button>
107
- <button
108
- class="p-3 -m-1.5 flex items-center justify-center border-0 rounded-full bg-transparent text-gray-500 dark:text-gray-400 cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2"
109
- class:scale-90={nextPressed}
110
- class:bg-gray-100={nextPressed}
111
- class:dark:bg-gray-700={nextPressed}
112
- class:text-gray-900={nextPressed}
113
- class:dark:text-white={nextPressed}
114
- onclick={handleNextClick}
115
- ontouchstart={() => nextPressed = true}
116
- ontouchend={() => nextPressed = false}
117
- ontouchcancel={() => nextPressed = false}
118
- onmousedown={() => nextPressed = true}
119
- onmouseup={() => nextPressed = false}
120
- onmouseleave={() => nextPressed = false}
121
- aria-label="Next month"
122
- >
123
- <ChevronRightOutline class="w-5 h-5" />
124
- </button>
125
- </div>
126
- </header>
1
+ <script>
2
+ import { ChevronLeftOutline, ChevronRightOutline } from '../../primitives/Icons';
3
+ import { typography } from '../../tokens/typography';
4
+
5
+ const today = new Date();
6
+ const todayLocalMonth = today.getMonth();
7
+ const todayLocalYear = today.getFullYear();
8
+
9
+ let {
10
+ currentYear = todayLocalYear,
11
+ currentMonth = todayLocalMonth,
12
+ handleNext = () => {},
13
+ handlePrev = () => {},
14
+ handleToday = () => {},
15
+ disablePastNavigation = true,
16
+ } = $props();
17
+
18
+ let isAtCurrentMonth = $derived(
19
+ currentYear === todayLocalYear && currentMonth === todayLocalMonth
20
+ );
21
+
22
+ let canGoPrev = $derived(!disablePastNavigation || !isAtCurrentMonth);
23
+
24
+ let prevPressed = $state(false);
25
+ let nextPressed = $state(false);
26
+ let todayPressed = $state(false);
27
+
28
+ function triggerHaptic(style = 'light') {
29
+ if (typeof window === 'undefined') return;
30
+
31
+ if (window.webkit?.messageHandlers?.haptic) {
32
+ window.webkit.messageHandlers.haptic.postMessage(style);
33
+ return;
34
+ }
35
+
36
+ if (window.TapticEngine) {
37
+ window.TapticEngine.impact({ style });
38
+ return;
39
+ }
40
+
41
+ if (navigator.vibrate) {
42
+ navigator.vibrate(style === 'light' ? 10 : 20);
43
+ }
44
+ }
45
+
46
+ function handlePrevClick() {
47
+ if (canGoPrev) {
48
+ triggerHaptic('light');
49
+ handlePrev();
50
+ }
51
+ }
52
+
53
+ function handleNextClick() {
54
+ triggerHaptic('light');
55
+ handleNext();
56
+ }
57
+
58
+ function handleTodayClick() {
59
+ triggerHaptic('light');
60
+ handleToday();
61
+ }
62
+ </script>
63
+
64
+ <header class="w-full flex items-center justify-between select-none">
65
+ <h2 class="{typography.h1} text-3xl">
66
+ {new Intl.DateTimeFormat("en", {
67
+ month: "long",
68
+ }).format(new Date(currentYear, currentMonth, 1))}
69
+ </h2>
70
+ <div class="flex items-center gap-2">
71
+ <button
72
+ class="p-3 -m-1.5 flex items-center justify-center border-0 rounded-full bg-transparent text-gray-500 dark:text-gray-400 cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"
73
+ class:scale-90={prevPressed}
74
+ class:bg-gray-100={prevPressed}
75
+ class:dark:bg-gray-700={prevPressed}
76
+ class:text-gray-900={prevPressed}
77
+ class:dark:text-white={prevPressed}
78
+ onclick={handlePrevClick}
79
+ ontouchstart={() => prevPressed = true}
80
+ ontouchend={() => prevPressed = false}
81
+ ontouchcancel={() => prevPressed = false}
82
+ onmousedown={() => prevPressed = true}
83
+ onmouseup={() => prevPressed = false}
84
+ onmouseleave={() => prevPressed = false}
85
+ disabled={!canGoPrev}
86
+ aria-label="Previous month"
87
+ >
88
+ <ChevronLeftOutline class="w-5 h-5" />
89
+ </button>
90
+ <button
91
+ class="{`${typography.label} px-3 py-1 border border-gray-300 dark:border-gray-600 rounded-lg bg-transparent cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-blue-700 hover:text-white hover:border-blue-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2 disabled:opacity-40 disabled:cursor-not-allowed disabled:text-gray-500 dark:disabled:text-gray-400`}"
92
+ class:scale-95={todayPressed}
93
+ class:bg-blue-700={todayPressed}
94
+ class:text-white={todayPressed}
95
+ onclick={handleTodayClick}
96
+ ontouchstart={() => todayPressed = true}
97
+ ontouchend={() => todayPressed = false}
98
+ ontouchcancel={() => todayPressed = false}
99
+ onmousedown={() => todayPressed = true}
100
+ onmouseup={() => todayPressed = false}
101
+ onmouseleave={() => todayPressed = false}
102
+ disabled={isAtCurrentMonth}
103
+ aria-label="Go to current month"
104
+ >
105
+ Today
106
+ </button>
107
+ <button
108
+ class="p-3 -m-1.5 flex items-center justify-center border-0 rounded-full bg-transparent text-gray-500 dark:text-gray-400 cursor-pointer select-none transition-transform duration-100 ease-out hover:bg-gray-100 dark:hover:bg-gray-700 hover:text-gray-900 dark:hover:text-white focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 focus-visible:ring-offset-2"
109
+ class:scale-90={nextPressed}
110
+ class:bg-gray-100={nextPressed}
111
+ class:dark:bg-gray-700={nextPressed}
112
+ class:text-gray-900={nextPressed}
113
+ class:dark:text-white={nextPressed}
114
+ onclick={handleNextClick}
115
+ ontouchstart={() => nextPressed = true}
116
+ ontouchend={() => nextPressed = false}
117
+ ontouchcancel={() => nextPressed = false}
118
+ onmousedown={() => nextPressed = true}
119
+ onmouseup={() => nextPressed = false}
120
+ onmouseleave={() => nextPressed = false}
121
+ aria-label="Next month"
122
+ >
123
+ <ChevronRightOutline class="w-5 h-5" />
124
+ </button>
125
+ </div>
126
+ </header>
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=OrderSummary.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderSummary.spec.d.ts","sourceRoot":"","sources":["../../../src/lib/calendar/OrderSummary/OrderSummary.spec.js"],"names":[],"mappings":""}