@getmicdrop/svelte-components 5.20.0 → 5.20.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 (343) hide show
  1. package/dist/calendar/AboutShow/AboutShow.svelte +191 -191
  2. package/dist/calendar/Calendar/MiniMonthCalendar.svelte +803 -803
  3. package/dist/calendar/FAQs/FAQs.svelte +88 -88
  4. package/dist/calendar/MonthSwitcher/MonthSwitcher.svelte +140 -140
  5. package/dist/calendar/OrderSummary/OrderSummary.svelte +461 -461
  6. package/dist/calendar/PublicCard/PublicCard.svelte +164 -164
  7. package/dist/calendar/ShowCard/ShowCard.svelte +180 -180
  8. package/dist/calendar/ShowTimeCard/ShowTimeCard.svelte +80 -80
  9. package/dist/calendar/index.js +15 -15
  10. package/dist/components/Heading.spec.js +89 -89
  11. package/dist/components/Heading.svelte +66 -66
  12. package/dist/components/Layout/AppShell.svelte +104 -104
  13. package/dist/components/Layout/ContentSection.svelte +80 -80
  14. package/dist/components/Layout/Grid.svelte +101 -101
  15. package/dist/components/Layout/Heading.svelte +81 -81
  16. package/dist/components/Layout/PageContainer.svelte +69 -69
  17. package/dist/components/Layout/Responsive.svelte +75 -75
  18. package/dist/components/Layout/Section.svelte +80 -80
  19. package/dist/components/Layout/ShowOnDesktop.svelte +37 -37
  20. package/dist/components/Layout/ShowOnMobile.svelte +37 -37
  21. package/dist/components/Layout/Sidebar.svelte +108 -108
  22. package/dist/components/Layout/Stack.spec.js +1 -1
  23. package/dist/components/Layout/Stack.svelte +52 -52
  24. package/dist/components/Layout/Text.svelte +87 -87
  25. package/dist/components/Layout/TwoColumn.svelte +108 -108
  26. package/dist/components/Text.spec.js +89 -89
  27. package/dist/components/Text.svelte +64 -64
  28. package/dist/config.d.ts +13 -2
  29. package/dist/config.d.ts.map +1 -1
  30. package/dist/config.js +160 -151
  31. package/dist/config.spec.js +29 -29
  32. package/dist/constants/formOptions.js +48 -48
  33. package/dist/constants/validation.js +91 -91
  34. package/dist/constants/validation.spec.js +64 -64
  35. package/dist/datetime/README.md +323 -323
  36. package/dist/datetime/__tests__/format.test.js +1 -1
  37. package/dist/datetime/__tests__/parse.test.js +1 -1
  38. package/dist/datetime/__tests__/timezone.test.js +1 -1
  39. package/dist/datetime/parse.js +1 -1
  40. package/dist/forms/createFormStore.svelte.js +1 -0
  41. package/dist/forms/createFormStore.svelte.spec.js +1 -0
  42. package/dist/index.js +85 -85
  43. package/dist/index.spec.js +369 -369
  44. package/dist/patterns/chat/ChatActivityNotice.spec.js +59 -59
  45. package/dist/patterns/chat/ChatActivityNotice.svelte +41 -41
  46. package/dist/patterns/chat/ChatBubble.spec.js +91 -91
  47. package/dist/patterns/chat/ChatBubble.svelte +103 -103
  48. package/dist/patterns/chat/ChatContainer.spec.js +30 -30
  49. package/dist/patterns/chat/ChatContainer.svelte +46 -46
  50. package/dist/patterns/chat/ChatDateDivider.spec.js +30 -30
  51. package/dist/patterns/chat/ChatDateDivider.svelte +27 -27
  52. package/dist/patterns/chat/ChatInvitationBubble.spec.js +46 -46
  53. package/dist/patterns/chat/ChatInvitationBubble.svelte +46 -46
  54. package/dist/patterns/chat/ChatInvitationNotice.spec.js +32 -32
  55. package/dist/patterns/chat/ChatInvitationNotice.svelte +36 -36
  56. package/dist/patterns/chat/ChatMessageGroup.spec.js +58 -58
  57. package/dist/patterns/chat/ChatMessageGroup.svelte +57 -57
  58. package/dist/patterns/chat/ChatSlotUpdate.spec.js +65 -65
  59. package/dist/patterns/chat/ChatSlotUpdate.svelte +46 -46
  60. package/dist/patterns/chat/ChatStatusBadge.spec.js +79 -79
  61. package/dist/patterns/chat/ChatStatusBadge.svelte +91 -91
  62. package/dist/patterns/chat/ChatStatusTransition.spec.js +81 -81
  63. package/dist/patterns/chat/ChatStatusTransition.svelte +64 -64
  64. package/dist/patterns/chat/ChatTextBubble.spec.js +35 -35
  65. package/dist/patterns/chat/ChatTextBubble.svelte +41 -41
  66. package/dist/patterns/chat/index.js +22 -22
  67. package/dist/patterns/data/DataGrid.svelte +45 -45
  68. package/dist/patterns/data/DataList.svelte +24 -24
  69. package/dist/patterns/data/DataTable.svelte +45 -45
  70. package/dist/patterns/data/index.js +4 -4
  71. package/dist/patterns/forms/FormActions.spec.js +95 -95
  72. package/dist/patterns/forms/FormActions.stories.svelte +97 -97
  73. package/dist/patterns/forms/FormActions.svelte +46 -46
  74. package/dist/patterns/forms/FormGrid.svelte +33 -33
  75. package/dist/patterns/forms/FormSection.svelte +33 -33
  76. package/dist/patterns/forms/FormValidationSummary.stories.svelte +97 -97
  77. package/dist/patterns/forms/FormValidationSummary.svelte +82 -82
  78. package/dist/patterns/forms/index.js +5 -5
  79. package/dist/patterns/index.js +21 -21
  80. package/dist/patterns/layout/Sidebar.svelte +39 -39
  81. package/dist/patterns/layout/SidebarTestWrapper.svelte +34 -34
  82. package/dist/patterns/layout/Stack.svelte +61 -61
  83. package/dist/patterns/layout/index.js +29 -29
  84. package/dist/patterns/navigation/BottomNav.stories.svelte +117 -117
  85. package/dist/patterns/navigation/BottomNav.svelte +82 -82
  86. package/dist/patterns/navigation/Header.stories.svelte +77 -77
  87. package/dist/patterns/navigation/Header.svelte +263 -263
  88. package/dist/patterns/navigation/index.js +3 -3
  89. package/dist/patterns/page/PageHeader.svelte +49 -49
  90. package/dist/patterns/page/PageLayout.svelte +40 -40
  91. package/dist/patterns/page/PageLoader.spec.js +57 -57
  92. package/dist/patterns/page/PageLoader.stories.svelte +137 -137
  93. package/dist/patterns/page/PageLoader.svelte +62 -62
  94. package/dist/patterns/page/SectionHeader.svelte +51 -51
  95. package/dist/patterns/page/index.js +5 -5
  96. package/dist/presets/badges.js +112 -112
  97. package/dist/presets/buttons.js +76 -76
  98. package/dist/presets/index.js +9 -9
  99. package/dist/primitives/Accordion/Accordion.stories.svelte +75 -75
  100. package/dist/primitives/Accordion/Accordion.svelte +62 -62
  101. package/dist/primitives/Accordion/AccordionItem.svelte +103 -103
  102. package/dist/primitives/Accordion/AccordionItemWrapper.test.svelte +107 -107
  103. package/dist/primitives/Accordion/AccordionToggleWrapper.test.svelte +28 -28
  104. package/dist/primitives/Alert/Alert.spec.js +173 -173
  105. package/dist/primitives/Alert/Alert.stories.svelte +88 -88
  106. package/dist/primitives/Alert/Alert.svelte +72 -72
  107. package/dist/primitives/Avatar/Avatar.stories.svelte +94 -94
  108. package/dist/primitives/Avatar/Avatar.svelte +66 -66
  109. package/dist/primitives/AvatarButton/AvatarButton.svelte +57 -57
  110. package/dist/primitives/Badges/Badge.spec.js +144 -144
  111. package/dist/primitives/Badges/Badge.stories.svelte +86 -86
  112. package/dist/primitives/Badges/Badge.svelte +99 -99
  113. package/dist/primitives/BottomSheet/BottomSheet.spec.js +238 -238
  114. package/dist/primitives/BottomSheet/BottomSheet.stories.svelte +83 -83
  115. package/dist/primitives/BottomSheet/BottomSheet.svelte +115 -115
  116. package/dist/primitives/BottomSheet/BottomSheetWithActions.test.svelte +20 -20
  117. package/dist/primitives/Breadcrumb/Breadcrumb.spec.js +123 -123
  118. package/dist/primitives/Breadcrumb/Breadcrumb.stories.svelte +23 -23
  119. package/dist/primitives/Breadcrumb/Breadcrumb.svelte +107 -107
  120. package/dist/primitives/Button/Button.spec.js +225 -225
  121. package/dist/primitives/Button/Button.stories.svelte +76 -76
  122. package/dist/primitives/Button/Button.svelte +278 -278
  123. package/dist/primitives/Button/ButtonGroup.spec.js +44 -44
  124. package/dist/primitives/Button/ButtonGroup.svelte +50 -50
  125. package/dist/primitives/Button/ButtonSaveDemo.spec.js +146 -146
  126. package/dist/primitives/Button/ButtonSaveDemo.svelte +25 -25
  127. package/dist/primitives/Button/ButtonVariantShowcase.svelte +129 -129
  128. package/dist/primitives/Card.spec.js +49 -49
  129. package/dist/primitives/Card.stories.svelte +22 -22
  130. package/dist/primitives/Card.svelte +28 -28
  131. package/dist/primitives/CardAction/CardAction.svelte +68 -68
  132. package/dist/primitives/Checkbox/Checkbox.stories.svelte +84 -84
  133. package/dist/primitives/Checkbox/Checkbox.svelte +88 -88
  134. package/dist/primitives/DarkModeToggle.spec.js +390 -390
  135. package/dist/primitives/DarkModeToggle.stories.svelte +57 -57
  136. package/dist/primitives/DarkModeToggle.svelte +147 -147
  137. package/dist/primitives/Drawer/Drawer.stories.svelte +100 -100
  138. package/dist/primitives/Drawer/Drawer.svelte +224 -224
  139. package/dist/primitives/Drawer/DrawerTestWrapper.svelte +86 -86
  140. package/dist/primitives/Dropdown/Dropdown.stories.svelte +137 -137
  141. package/dist/primitives/Dropdown/Dropdown.svelte +179 -179
  142. package/dist/primitives/Dropdown/DropdownDivider.spec.js +30 -30
  143. package/dist/primitives/Dropdown/DropdownDivider.svelte +9 -9
  144. package/dist/primitives/Dropdown/DropdownItem.svelte +80 -80
  145. package/dist/primitives/Dropdown/DropdownItemTestWrapper.svelte +43 -43
  146. package/dist/primitives/Helper/Helper.spec.js +57 -57
  147. package/dist/primitives/Helper/Helper.svelte +33 -33
  148. package/dist/primitives/Icons/ArrowLeft.svelte +21 -21
  149. package/dist/primitives/Icons/ArrowRight.svelte +21 -21
  150. package/dist/primitives/Icons/Availability.svelte +27 -27
  151. package/dist/primitives/Icons/Back.svelte +27 -27
  152. package/dist/primitives/Icons/CheckCircle.svelte +19 -19
  153. package/dist/primitives/Icons/CheckCircleOutline.svelte +28 -28
  154. package/dist/primitives/Icons/ChevronLeft.svelte +17 -17
  155. package/dist/primitives/Icons/ChevronRight.svelte +17 -17
  156. package/dist/primitives/Icons/Copy.svelte +28 -28
  157. package/dist/primitives/Icons/Cross.svelte +18 -18
  158. package/dist/primitives/Icons/DownArrow.svelte +21 -21
  159. package/dist/primitives/Icons/ErrorCircle.svelte +19 -19
  160. package/dist/primitives/Icons/FacebookIcon.svelte +15 -15
  161. package/dist/primitives/Icons/Home.svelte +28 -28
  162. package/dist/primitives/Icons/Icon.spec.js +175 -175
  163. package/dist/primitives/Icons/Icon.stories.svelte +100 -100
  164. package/dist/primitives/Icons/Icon.svelte +79 -79
  165. package/dist/primitives/Icons/IconGallery.stories.svelte +235 -235
  166. package/dist/primitives/Icons/ImageOutline.svelte +21 -21
  167. package/dist/primitives/Icons/Info.svelte +20 -20
  168. package/dist/primitives/Icons/InstagramIcon.svelte +21 -21
  169. package/dist/primitives/Icons/LogoInstagram.svelte +15 -15
  170. package/dist/primitives/Icons/Message.svelte +28 -28
  171. package/dist/primitives/Icons/MoonIcon.svelte +18 -18
  172. package/dist/primitives/Icons/More.svelte +34 -34
  173. package/dist/primitives/Icons/MoreHori.spec.js +67 -67
  174. package/dist/primitives/Icons/MoreHori.svelte +35 -35
  175. package/dist/primitives/Icons/Notification.svelte +27 -27
  176. package/dist/primitives/Icons/Payment.svelte +27 -27
  177. package/dist/primitives/Icons/Profile.svelte +34 -34
  178. package/dist/primitives/Icons/Reload.svelte +42 -42
  179. package/dist/primitives/Icons/Shows.svelte +34 -34
  180. package/dist/primitives/Icons/Signout.svelte +34 -34
  181. package/dist/primitives/Icons/SunIcon.svelte +21 -21
  182. package/dist/primitives/Icons/TiktokIcon.svelte +15 -15
  183. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -21
  184. package/dist/primitives/Icons/TwitterIcon.svelte +15 -15
  185. package/dist/primitives/Icons/WarningIcon.spec.js +30 -30
  186. package/dist/primitives/Icons/WarningIcon.svelte +24 -24
  187. package/dist/primitives/Input/Input.spec.js +1237 -1237
  188. package/dist/primitives/Input/Input.stories.svelte +139 -139
  189. package/dist/primitives/Input/Input.svelte +444 -444
  190. package/dist/primitives/Input/Select.spec.js +632 -632
  191. package/dist/primitives/Input/Select.stories.svelte +112 -112
  192. package/dist/primitives/Input/Select.svelte +252 -252
  193. package/dist/primitives/Input/Textarea.stories.svelte +137 -137
  194. package/dist/primitives/Input/Textarea.svelte +105 -105
  195. package/dist/primitives/Label/Label.svelte +37 -37
  196. package/dist/primitives/LandingButton/LandingButton.spec.js +61 -61
  197. package/dist/primitives/LandingButton/LandingButton.svelte +92 -92
  198. package/dist/primitives/MenuItem/MenuItem.spec.js +130 -130
  199. package/dist/primitives/MenuItem/MenuItem.svelte +85 -85
  200. package/dist/primitives/Modal/Modal.spec.js +314 -314
  201. package/dist/primitives/Modal/Modal.stories.svelte +86 -86
  202. package/dist/primitives/Modal/Modal.svelte +181 -181
  203. package/dist/primitives/NavItem/NavItem.spec.js +97 -97
  204. package/dist/primitives/NavItem/NavItem.svelte +75 -75
  205. package/dist/primitives/NumberInput/NumberInput.svelte +113 -113
  206. package/dist/primitives/Pagination/DotIndicator.svelte +66 -66
  207. package/dist/primitives/Pagination/Pagination.stories.svelte +76 -76
  208. package/dist/primitives/Pagination/Pagination.svelte +275 -275
  209. package/dist/primitives/Radio/Radio.stories.svelte +80 -80
  210. package/dist/primitives/Radio/Radio.svelte +67 -67
  211. package/dist/primitives/SearchResultItem/SearchResultItem.spec.js +78 -78
  212. package/dist/primitives/SearchResultItem/SearchResultItem.svelte +109 -109
  213. package/dist/primitives/SidebarToggle/SidebarToggle.spec.js +61 -61
  214. package/dist/primitives/SidebarToggle/SidebarToggle.svelte +55 -55
  215. package/dist/primitives/Skeleton/CardPlaceholder.svelte +96 -96
  216. package/dist/primitives/Skeleton/ImagePlaceholder.svelte +68 -68
  217. package/dist/primitives/Skeleton/ListPlaceholder.svelte +85 -85
  218. package/dist/primitives/Skeleton/Skeleton.stories.svelte +151 -151
  219. package/dist/primitives/Skeleton/Skeleton.svelte +55 -55
  220. package/dist/primitives/Spinner/Spinner.spec.js +84 -84
  221. package/dist/primitives/Spinner/Spinner.stories.svelte +29 -29
  222. package/dist/primitives/Spinner/Spinner.svelte +52 -52
  223. package/dist/primitives/Tabs/TabItem.svelte +52 -52
  224. package/dist/primitives/Tabs/Tabs.stories.svelte +112 -112
  225. package/dist/primitives/Tabs/Tabs.svelte +137 -137
  226. package/dist/primitives/Toggle.spec.js +221 -221
  227. package/dist/primitives/Toggle.stories.svelte +92 -92
  228. package/dist/primitives/Toggle.svelte +141 -141
  229. package/dist/primitives/ToggleTestWrapper.svelte +30 -30
  230. package/dist/primitives/Tooltip/Tooltip.spec.js +126 -126
  231. package/dist/primitives/Tooltip/Tooltip.svelte +83 -83
  232. package/dist/primitives/Typography/Typography.svelte +53 -53
  233. package/dist/primitives/ValidationError.spec.js +103 -103
  234. package/dist/primitives/ValidationError.stories.svelte +112 -112
  235. package/dist/primitives/ValidationError.svelte +29 -29
  236. package/dist/primitives/index.js +114 -114
  237. package/dist/recipes/CropImage/CropImage.spec.js +208 -208
  238. package/dist/recipes/CropImage/CropImage.stories.svelte +104 -104
  239. package/dist/recipes/CropImage/CropImage.svelte +241 -241
  240. package/dist/recipes/ImageUploader/ImageUploader.stories.svelte +125 -125
  241. package/dist/recipes/ImageUploader/ImageUploader.svelte +994 -994
  242. package/dist/recipes/SuperLogin/SuperLogin.svelte +5 -4
  243. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  244. package/dist/recipes/Toaster/Toaster.stories.svelte +62 -62
  245. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +75 -75
  246. package/dist/recipes/feedback/ErrorDisplay.spec.js +69 -69
  247. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +113 -113
  248. package/dist/recipes/feedback/ErrorDisplay.svelte +67 -67
  249. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.spec.js +133 -133
  250. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +176 -176
  251. package/dist/recipes/feedback/index.js +4 -4
  252. package/dist/recipes/fields/CheckboxField.svelte +85 -85
  253. package/dist/recipes/fields/FormField.svelte +58 -58
  254. package/dist/recipes/fields/RadioGroup.svelte +95 -95
  255. package/dist/recipes/fields/SelectField.svelte +82 -82
  256. package/dist/recipes/fields/TextareaField.svelte +101 -101
  257. package/dist/recipes/fields/ToggleField.svelte +60 -60
  258. package/dist/recipes/fields/index.js +7 -7
  259. package/dist/recipes/index.js +24 -24
  260. package/dist/recipes/inputs/MultiSelect.spec.js +263 -263
  261. package/dist/recipes/inputs/MultiSelect.stories.svelte +133 -133
  262. package/dist/recipes/inputs/MultiSelect.svelte +291 -291
  263. package/dist/recipes/inputs/OTPInput.spec.js +251 -251
  264. package/dist/recipes/inputs/OTPInput.stories.svelte +162 -162
  265. package/dist/recipes/inputs/OTPInput.svelte +128 -128
  266. package/dist/recipes/inputs/PasswordInput.svelte +130 -130
  267. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +142 -142
  268. package/dist/recipes/inputs/PhoneInput.svelte +254 -254
  269. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +170 -170
  270. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +349 -349
  271. package/dist/recipes/inputs/Search.svelte +110 -110
  272. package/dist/recipes/inputs/index.js +8 -8
  273. package/dist/recipes/inputs/phoneInput/CountrySelector.svelte +240 -240
  274. package/dist/recipes/modals/AlertModal.svelte +139 -139
  275. package/dist/recipes/modals/ConfirmationModal.spec.js +396 -396
  276. package/dist/recipes/modals/ConfirmationModal.stories.svelte +119 -119
  277. package/dist/recipes/modals/ConfirmationModal.svelte +169 -169
  278. package/dist/recipes/modals/FeedbackModal.svelte +205 -205
  279. package/dist/recipes/modals/InputModal.svelte +194 -194
  280. package/dist/recipes/modals/ModalStateManager.spec.js +100 -100
  281. package/dist/recipes/modals/ModalStateManager.svelte +77 -77
  282. package/dist/recipes/modals/ModalTestWrapper.svelte +65 -65
  283. package/dist/recipes/modals/StatusModal.svelte +216 -216
  284. package/dist/recipes/modals/index.js +8 -8
  285. package/dist/schemas/common.js +1 -1
  286. package/dist/schemas/event.js +1 -1
  287. package/dist/schemas/order.js +1 -0
  288. package/dist/schemas/performer.js +1 -1
  289. package/dist/schemas/promo.js +2 -2
  290. package/dist/schemas/ticket.js +1 -1
  291. package/dist/schemas/user.js +2 -1
  292. package/dist/services/show.service.d.ts +46 -46
  293. package/dist/stores/auth.d.ts +8 -8
  294. package/dist/stores/auth.svelte.spec.js +1 -1
  295. package/dist/stores/index.js +9 -9
  296. package/dist/stores/toaster.d.ts +3 -3
  297. package/dist/stores/toaster.js +13 -13
  298. package/dist/stores/toaster.spec.js +59 -59
  299. package/dist/stories/ButtonAuditReview.stories.svelte +14 -14
  300. package/dist/stories/ButtonAuditReview.svelte +427 -427
  301. package/dist/stories/PatternsGallery.stories.svelte +19 -19
  302. package/dist/stories/PatternsGallery.svelte +399 -399
  303. package/dist/stories/PrimitivesGallery.stories.svelte +19 -19
  304. package/dist/stories/PrimitivesGallery.svelte +756 -756
  305. package/dist/stories/RecipesGallery.stories.svelte +19 -19
  306. package/dist/stories/RecipesGallery.svelte +454 -454
  307. package/dist/stories/button-audit-manifest.json +11186 -11186
  308. package/dist/tailwind/preset.cjs +87 -87
  309. package/dist/telemetry.d.ts +5 -5
  310. package/dist/telemetry.d.ts.map +1 -1
  311. package/dist/telemetry.js +401 -402
  312. package/dist/telemetry.server.js +212 -212
  313. package/dist/telemetry.server.spec.js +437 -437
  314. package/dist/telemetry.spec.js +1273 -1173
  315. package/dist/tokens/tokens.css +87 -87
  316. package/dist/tokens/typography-base.css +163 -163
  317. package/dist/tokens/utilities.css +430 -430
  318. package/dist/utils/__tests__/auth.test.js +431 -431
  319. package/dist/utils/apiConfig.d.ts +29 -29
  320. package/dist/utils/apiConfig.js +142 -117
  321. package/dist/utils/auth.d.ts +46 -46
  322. package/dist/utils/auth.js +195 -195
  323. package/dist/utils/greetings.js +187 -187
  324. package/dist/utils/greetings.spec.js +337 -337
  325. package/dist/utils/haptic.spec.js +1 -1
  326. package/dist/utils/imageValidation.js +121 -121
  327. package/dist/utils/imageValidation.spec.js +223 -223
  328. package/dist/utils/logger.d.ts.map +1 -1
  329. package/dist/utils/logger.js +2 -1
  330. package/dist/utils/portal.d.ts +11 -11
  331. package/dist/utils/portal.js +25 -25
  332. package/dist/utils/portal.spec.js +143 -143
  333. package/dist/utils/transitions.js +16 -16
  334. package/dist/utils/utils/utils.d.ts +2 -2
  335. package/dist/utils/utils/utils.js +3 -3
  336. package/dist/utils/utils/utils.spec.js +698 -698
  337. package/dist/utils/utils.d.ts +41 -41
  338. package/dist/utils/utils.js +59 -59
  339. package/dist/utils/utils.spec.js +643 -643
  340. package/package.json +306 -310
  341. package/dist/utils/apiConfig.spec.d.ts +0 -2
  342. package/dist/utils/apiConfig.spec.d.ts.map +0 -1
  343. package/dist/utils/apiConfig.spec.js +0 -226
@@ -1,323 +1,323 @@
1
- # DateTime Module
2
-
3
- Centralized date/time handling for the MicDrop platform. This module eliminates timezone bugs by enforcing consistent patterns across the application.
4
-
5
- ## Golden Rules
6
-
7
- 1. **Backend is King** - All API requests send/receive UTC ISO strings (`2023-12-25T20:00:00Z`)
8
- 2. **Display is Local** - All UI components receive UTC strings + Timezone ID
9
- 3. **No `new Date()` in components** - Use these helpers instead
10
- 4. **Timezone is always required** - Every function requires explicit timezone parameter
11
-
12
- ## Quick Start
13
-
14
- ```typescript
15
- import * as datetime from '$lib/datetime';
16
-
17
- // Get timezone from venue (throws if missing)
18
- const tz = datetime.getVenueTimezone(venue);
19
-
20
- // Format for display
21
- const time = datetime.formatEventTime(event.startTime, tz); // "7:00 PM"
22
- const date = datetime.formatEventDate(event.startTime, tz); // "Dec 25, 2023"
23
- const full = datetime.formatEventDateTime(event.startTime, tz); // "Dec 25, 2023 at 7:00 PM"
24
-
25
- // Parse form input to UTC for API
26
- const utc = datetime.combineDateAndTime('2023-12-25', '19:00', tz);
27
-
28
- // Parse API response for form
29
- const { date, time } = datetime.parseDateTimeFromAPI(event.startTime, tz);
30
- ```
31
-
32
- ## Module Structure
33
-
34
- ```
35
- src/lib/datetime/
36
- ├── index.ts # Clean exports
37
- ├── types.ts # Type definitions
38
- ├── constants.ts # Duration constants, format strings
39
- ├── timezone.ts # Timezone utilities
40
- ├── format.ts # Formatting functions
41
- ├── parse.ts # Parsing functions
42
- ├── __tests__/ # Comprehensive tests
43
- │ ├── timezone.test.ts
44
- │ ├── format.test.ts
45
- │ ├── parse.test.ts
46
- │ └── integration.test.ts
47
- └── README.md # This file
48
- ```
49
-
50
- ## API Reference
51
-
52
- ### Timezone Utilities
53
-
54
- ```typescript
55
- // Validate timezone
56
- isValidTimezone('America/Los_Angeles'); // true
57
- isValidTimezone('PST'); // false (abbreviations not valid)
58
-
59
- // Get venue timezone (throws if missing)
60
- const tz = getVenueTimezone(venue);
61
-
62
- // Get user's browser timezone
63
- const userTz = getUserTimezone();
64
-
65
- // Get timezone offset string
66
- getTimezoneOffset('America/Los_Angeles'); // "PST (UTC-8)"
67
-
68
- // Normalize legacy timezone abbreviations
69
- normalizeTimezone('PST'); // "America/Los_Angeles"
70
-
71
- // Check if DST is active
72
- isDST('America/Los_Angeles', new Date()); // true/false
73
- ```
74
-
75
- ### Format Functions
76
-
77
- All format functions require timezone - no defaults!
78
-
79
- ```typescript
80
- // Time only
81
- formatEventTime('2023-12-26T03:00:00Z', 'America/Los_Angeles');
82
- // "7:00 PM"
83
-
84
- // Date only
85
- formatEventDate('2023-12-26T03:00:00Z', 'America/Los_Angeles');
86
- // "Dec 25, 2023"
87
-
88
- // Full datetime
89
- formatEventDateTime('2023-12-26T03:00:00Z', 'America/Los_Angeles');
90
- // "Dec 25, 2023 at 7:00 PM"
91
-
92
- // Time range
93
- formatTimeRange(startUtc, endUtc, 'America/Los_Angeles');
94
- // "7:00 PM - 10:00 PM"
95
-
96
- // Date range
97
- formatDateRange(startUtc, endUtc, 'America/Los_Angeles');
98
- // "Dec 25 - 27, 2023"
99
-
100
- // Relative time
101
- formatRelativeTime(utcIso, 'America/Los_Angeles');
102
- // "2 hours ago" or "in 3 days"
103
-
104
- // Date parts
105
- getDateParts('2023-12-25T20:00:00Z', 'America/Los_Angeles');
106
- // { day: 'Mon', month: 'Dec', date: 25, year: 2023 }
107
-
108
- // Get hour (0-23)
109
- getHourInTimezone('2023-12-25T20:00:00Z', 'America/Los_Angeles');
110
- // 12
111
-
112
- // Get date string
113
- getDateInTimezone('2023-12-25T20:00:00Z', 'America/Los_Angeles');
114
- // "2023-12-25"
115
- ```
116
-
117
- ### Parse Functions
118
-
119
- ```typescript
120
- // Local datetime to UTC
121
- parseLocalToUTC('2023-12-25T19:00:00', 'America/Los_Angeles');
122
- // "2023-12-26T03:00:00.000Z"
123
-
124
- // UTC to local datetime
125
- parseUTCToLocal('2023-12-26T03:00:00Z', 'America/Los_Angeles');
126
- // "2023-12-25T19:00:00"
127
-
128
- // Combine date and time
129
- combineDateAndTime('2023-12-25', '19:00', 'America/Los_Angeles');
130
- // "2023-12-26T03:00:00.000Z"
131
-
132
- // Parse API response for form
133
- parseDateTimeFromAPI('2023-12-26T03:00:00Z', 'America/Los_Angeles');
134
- // { date: '2023-12-25', time: '19:00' }
135
-
136
- // Start of day in UTC
137
- parseStartOfDay('2023-12-25', 'America/Los_Angeles');
138
- // "2023-12-25T08:00:00.000Z"
139
-
140
- // End of day in UTC
141
- parseEndOfDay('2023-12-25', 'America/Los_Angeles');
142
- // "2023-12-26T07:59:59.000Z"
143
- ```
144
-
145
- ### Next-Day Time Handling
146
-
147
- For overnight events (e.g., 10 PM - 2 AM):
148
-
149
- ```typescript
150
- // Check for next-day prefix
151
- isNextDayTime('+1_02:00'); // true
152
- isNextDayTime('14:00'); // false
153
-
154
- // Strip prefix
155
- stripNextDayPrefix('+1_02:00'); // '02:00'
156
-
157
- // Convert to minutes
158
- parseTimeToMinutes('22:00'); // 1320
159
- parseTimeToMinutes('+1_02:00'); // 1560 (26 hours)
160
-
161
- // Convert back
162
- minutesToTimeString(1320); // '22:00'
163
- minutesToTimeString(1560, true); // '+1_02:00'
164
- ```
165
-
166
- ### Constants
167
-
168
- ```typescript
169
- import {
170
- DURATIONS,
171
- DATE_FORMATS,
172
- EVENT_DEFAULTS,
173
- COMMON_US_TIMEZONES,
174
- } from '$lib/datetime';
175
-
176
- // Durations in milliseconds
177
- DURATIONS.MINUTE; // 60000
178
- DURATIONS.HOUR; // 3600000
179
- DURATIONS.DAY; // 86400000
180
-
181
- // Event defaults
182
- EVENT_DEFAULTS.DEFAULT_DURATION_MINUTES; // 120
183
- EVENT_DEFAULTS.MIN_DURATION_MINUTES; // 15
184
- EVENT_DEFAULTS.DEFAULT_DOORS_BEFORE_MINUTES; // 30
185
-
186
- // Common US timezones for selects
187
- COMMON_US_TIMEZONES;
188
- // [{ id: 'America/Los_Angeles', label: 'Pacific Time (PT)', abbr: 'PT' }, ...]
189
- ```
190
-
191
- ## Common Patterns
192
-
193
- ### Event Form
194
-
195
- ```typescript
196
- // Populating form from API response
197
- function populateForm(event: Event) {
198
- const tz = datetime.getVenueTimezone(event.venue);
199
- const start = datetime.parseDateTimeFromAPI(event.startTime, tz);
200
- const end = datetime.parseDateTimeFromAPI(event.endTime, tz);
201
-
202
- return {
203
- date: start.date,
204
- startTime: start.time,
205
- endTime: end.time,
206
- };
207
- }
208
-
209
- // Submitting form to API
210
- function submitForm(form: FormData, venue: Venue) {
211
- const tz = datetime.getVenueTimezone(venue);
212
-
213
- return {
214
- startTime: datetime.combineDateAndTime(form.date, form.startTime, tz),
215
- endTime: datetime.combineDateAndTime(form.date, form.endTime, tz),
216
- };
217
- }
218
- ```
219
-
220
- ### Calendar Display
221
-
222
- ```typescript
223
- // Display events in venue timezone
224
- function renderEvent(event: Event, venue: Venue) {
225
- const tz = datetime.getVenueTimezone(venue);
226
-
227
- return {
228
- time: datetime.formatEventTime(event.startTime, tz),
229
- date: datetime.formatEventDate(event.startTime, tz),
230
- dateRange: datetime.formatTimeRange(event.startTime, event.endTime, tz),
231
- dateParts: datetime.getDateParts(event.startTime, tz),
232
- };
233
- }
234
- ```
235
-
236
- ### Grouping Events by Date
237
-
238
- ```typescript
239
- function groupByDate(events: Event[], timezone: TimezoneId) {
240
- const groups: Record<string, Event[]> = {};
241
-
242
- for (const event of events) {
243
- const dateKey = datetime.getDateInTimezone(event.startTime, timezone);
244
- groups[dateKey] = groups[dateKey] || [];
245
- groups[dateKey].push(event);
246
- }
247
-
248
- return groups;
249
- }
250
- ```
251
-
252
- ## Error Handling
253
-
254
- All functions throw `DateTimeError` for invalid inputs:
255
-
256
- ```typescript
257
- import { DateTimeError, DateTimeErrorCode } from '$lib/datetime';
258
-
259
- try {
260
- const tz = datetime.getVenueTimezone(venue);
261
- } catch (e) {
262
- if (e instanceof DateTimeError) {
263
- console.error(e.code); // DateTimeErrorCode.MISSING_TIMEZONE
264
- console.error(e.message); // "Venue timezone is required"
265
- console.error(e.details); // { venue: {...} }
266
- }
267
- }
268
- ```
269
-
270
- Error codes:
271
-
272
- - `INVALID_TIMEZONE` - Timezone string is not a valid IANA identifier
273
- - `INVALID_ISO_STRING` - ISO date string is malformed
274
- - `INVALID_DATE` - Date string is invalid
275
- - `INVALID_TIME` - Time string is invalid
276
- - `MISSING_TIMEZONE` - Required timezone is missing
277
- - `PARSE_ERROR` - General parsing error
278
-
279
- ## Migration from Legacy Code
280
-
281
- ### From `src/lib/utils/timezone.js`
282
-
283
- ```typescript
284
- // Before
285
- import { localToUTC, utcToLocal, formatForDisplay } from '$lib/utils/timezone';
286
-
287
- // After
288
- import {
289
- parseLocalToUTC,
290
- parseUTCToLocal,
291
- formatEventDateTime,
292
- } from '$lib/datetime';
293
- ```
294
-
295
- ### From `src/lib/utils/utils.js`
296
-
297
- ```typescript
298
- // Before
299
- import { formatDateTime, formatTimeRange, getDay } from '$lib/utils/utils';
300
-
301
- // After
302
- import {
303
- formatEventDateTime,
304
- formatTimeRange,
305
- formatDayOfWeek,
306
- } from '$lib/datetime';
307
- ```
308
-
309
- ## Testing
310
-
311
- Run tests:
312
-
313
- ```bash
314
- npm run test -- src/lib/datetime
315
- ```
316
-
317
- Run with coverage:
318
-
319
- ```bash
320
- npm run test:coverage -- src/lib/datetime
321
- ```
322
-
323
- Target: 100% coverage for this critical module.
1
+ # DateTime Module
2
+
3
+ Centralized date/time handling for the MicDrop platform. This module eliminates timezone bugs by enforcing consistent patterns across the application.
4
+
5
+ ## Golden Rules
6
+
7
+ 1. **Backend is King** - All API requests send/receive UTC ISO strings (`2023-12-25T20:00:00Z`)
8
+ 2. **Display is Local** - All UI components receive UTC strings + Timezone ID
9
+ 3. **No `new Date()` in components** - Use these helpers instead
10
+ 4. **Timezone is always required** - Every function requires explicit timezone parameter
11
+
12
+ ## Quick Start
13
+
14
+ ```typescript
15
+ import * as datetime from '$lib/datetime';
16
+
17
+ // Get timezone from venue (throws if missing)
18
+ const tz = datetime.getVenueTimezone(venue);
19
+
20
+ // Format for display
21
+ const time = datetime.formatEventTime(event.startTime, tz); // "7:00 PM"
22
+ const date = datetime.formatEventDate(event.startTime, tz); // "Dec 25, 2023"
23
+ const full = datetime.formatEventDateTime(event.startTime, tz); // "Dec 25, 2023 at 7:00 PM"
24
+
25
+ // Parse form input to UTC for API
26
+ const utc = datetime.combineDateAndTime('2023-12-25', '19:00', tz);
27
+
28
+ // Parse API response for form
29
+ const { date, time } = datetime.parseDateTimeFromAPI(event.startTime, tz);
30
+ ```
31
+
32
+ ## Module Structure
33
+
34
+ ```
35
+ src/lib/datetime/
36
+ ├── index.ts # Clean exports
37
+ ├── types.ts # Type definitions
38
+ ├── constants.ts # Duration constants, format strings
39
+ ├── timezone.ts # Timezone utilities
40
+ ├── format.ts # Formatting functions
41
+ ├── parse.ts # Parsing functions
42
+ ├── __tests__/ # Comprehensive tests
43
+ │ ├── timezone.test.ts
44
+ │ ├── format.test.ts
45
+ │ ├── parse.test.ts
46
+ │ └── integration.test.ts
47
+ └── README.md # This file
48
+ ```
49
+
50
+ ## API Reference
51
+
52
+ ### Timezone Utilities
53
+
54
+ ```typescript
55
+ // Validate timezone
56
+ isValidTimezone('America/Los_Angeles'); // true
57
+ isValidTimezone('PST'); // false (abbreviations not valid)
58
+
59
+ // Get venue timezone (throws if missing)
60
+ const tz = getVenueTimezone(venue);
61
+
62
+ // Get user's browser timezone
63
+ const userTz = getUserTimezone();
64
+
65
+ // Get timezone offset string
66
+ getTimezoneOffset('America/Los_Angeles'); // "PST (UTC-8)"
67
+
68
+ // Normalize legacy timezone abbreviations
69
+ normalizeTimezone('PST'); // "America/Los_Angeles"
70
+
71
+ // Check if DST is active
72
+ isDST('America/Los_Angeles', new Date()); // true/false
73
+ ```
74
+
75
+ ### Format Functions
76
+
77
+ All format functions require timezone - no defaults!
78
+
79
+ ```typescript
80
+ // Time only
81
+ formatEventTime('2023-12-26T03:00:00Z', 'America/Los_Angeles');
82
+ // "7:00 PM"
83
+
84
+ // Date only
85
+ formatEventDate('2023-12-26T03:00:00Z', 'America/Los_Angeles');
86
+ // "Dec 25, 2023"
87
+
88
+ // Full datetime
89
+ formatEventDateTime('2023-12-26T03:00:00Z', 'America/Los_Angeles');
90
+ // "Dec 25, 2023 at 7:00 PM"
91
+
92
+ // Time range
93
+ formatTimeRange(startUtc, endUtc, 'America/Los_Angeles');
94
+ // "7:00 PM - 10:00 PM"
95
+
96
+ // Date range
97
+ formatDateRange(startUtc, endUtc, 'America/Los_Angeles');
98
+ // "Dec 25 - 27, 2023"
99
+
100
+ // Relative time
101
+ formatRelativeTime(utcIso, 'America/Los_Angeles');
102
+ // "2 hours ago" or "in 3 days"
103
+
104
+ // Date parts
105
+ getDateParts('2023-12-25T20:00:00Z', 'America/Los_Angeles');
106
+ // { day: 'Mon', month: 'Dec', date: 25, year: 2023 }
107
+
108
+ // Get hour (0-23)
109
+ getHourInTimezone('2023-12-25T20:00:00Z', 'America/Los_Angeles');
110
+ // 12
111
+
112
+ // Get date string
113
+ getDateInTimezone('2023-12-25T20:00:00Z', 'America/Los_Angeles');
114
+ // "2023-12-25"
115
+ ```
116
+
117
+ ### Parse Functions
118
+
119
+ ```typescript
120
+ // Local datetime to UTC
121
+ parseLocalToUTC('2023-12-25T19:00:00', 'America/Los_Angeles');
122
+ // "2023-12-26T03:00:00.000Z"
123
+
124
+ // UTC to local datetime
125
+ parseUTCToLocal('2023-12-26T03:00:00Z', 'America/Los_Angeles');
126
+ // "2023-12-25T19:00:00"
127
+
128
+ // Combine date and time
129
+ combineDateAndTime('2023-12-25', '19:00', 'America/Los_Angeles');
130
+ // "2023-12-26T03:00:00.000Z"
131
+
132
+ // Parse API response for form
133
+ parseDateTimeFromAPI('2023-12-26T03:00:00Z', 'America/Los_Angeles');
134
+ // { date: '2023-12-25', time: '19:00' }
135
+
136
+ // Start of day in UTC
137
+ parseStartOfDay('2023-12-25', 'America/Los_Angeles');
138
+ // "2023-12-25T08:00:00.000Z"
139
+
140
+ // End of day in UTC
141
+ parseEndOfDay('2023-12-25', 'America/Los_Angeles');
142
+ // "2023-12-26T07:59:59.000Z"
143
+ ```
144
+
145
+ ### Next-Day Time Handling
146
+
147
+ For overnight events (e.g., 10 PM - 2 AM):
148
+
149
+ ```typescript
150
+ // Check for next-day prefix
151
+ isNextDayTime('+1_02:00'); // true
152
+ isNextDayTime('14:00'); // false
153
+
154
+ // Strip prefix
155
+ stripNextDayPrefix('+1_02:00'); // '02:00'
156
+
157
+ // Convert to minutes
158
+ parseTimeToMinutes('22:00'); // 1320
159
+ parseTimeToMinutes('+1_02:00'); // 1560 (26 hours)
160
+
161
+ // Convert back
162
+ minutesToTimeString(1320); // '22:00'
163
+ minutesToTimeString(1560, true); // '+1_02:00'
164
+ ```
165
+
166
+ ### Constants
167
+
168
+ ```typescript
169
+ import {
170
+ DURATIONS,
171
+ DATE_FORMATS,
172
+ EVENT_DEFAULTS,
173
+ COMMON_US_TIMEZONES,
174
+ } from '$lib/datetime';
175
+
176
+ // Durations in milliseconds
177
+ DURATIONS.MINUTE; // 60000
178
+ DURATIONS.HOUR; // 3600000
179
+ DURATIONS.DAY; // 86400000
180
+
181
+ // Event defaults
182
+ EVENT_DEFAULTS.DEFAULT_DURATION_MINUTES; // 120
183
+ EVENT_DEFAULTS.MIN_DURATION_MINUTES; // 15
184
+ EVENT_DEFAULTS.DEFAULT_DOORS_BEFORE_MINUTES; // 30
185
+
186
+ // Common US timezones for selects
187
+ COMMON_US_TIMEZONES;
188
+ // [{ id: 'America/Los_Angeles', label: 'Pacific Time (PT)', abbr: 'PT' }, ...]
189
+ ```
190
+
191
+ ## Common Patterns
192
+
193
+ ### Event Form
194
+
195
+ ```typescript
196
+ // Populating form from API response
197
+ function populateForm(event: Event) {
198
+ const tz = datetime.getVenueTimezone(event.venue);
199
+ const start = datetime.parseDateTimeFromAPI(event.startTime, tz);
200
+ const end = datetime.parseDateTimeFromAPI(event.endTime, tz);
201
+
202
+ return {
203
+ date: start.date,
204
+ startTime: start.time,
205
+ endTime: end.time,
206
+ };
207
+ }
208
+
209
+ // Submitting form to API
210
+ function submitForm(form: FormData, venue: Venue) {
211
+ const tz = datetime.getVenueTimezone(venue);
212
+
213
+ return {
214
+ startTime: datetime.combineDateAndTime(form.date, form.startTime, tz),
215
+ endTime: datetime.combineDateAndTime(form.date, form.endTime, tz),
216
+ };
217
+ }
218
+ ```
219
+
220
+ ### Calendar Display
221
+
222
+ ```typescript
223
+ // Display events in venue timezone
224
+ function renderEvent(event: Event, venue: Venue) {
225
+ const tz = datetime.getVenueTimezone(venue);
226
+
227
+ return {
228
+ time: datetime.formatEventTime(event.startTime, tz),
229
+ date: datetime.formatEventDate(event.startTime, tz),
230
+ dateRange: datetime.formatTimeRange(event.startTime, event.endTime, tz),
231
+ dateParts: datetime.getDateParts(event.startTime, tz),
232
+ };
233
+ }
234
+ ```
235
+
236
+ ### Grouping Events by Date
237
+
238
+ ```typescript
239
+ function groupByDate(events: Event[], timezone: TimezoneId) {
240
+ const groups: Record<string, Event[]> = {};
241
+
242
+ for (const event of events) {
243
+ const dateKey = datetime.getDateInTimezone(event.startTime, timezone);
244
+ groups[dateKey] = groups[dateKey] || [];
245
+ groups[dateKey].push(event);
246
+ }
247
+
248
+ return groups;
249
+ }
250
+ ```
251
+
252
+ ## Error Handling
253
+
254
+ All functions throw `DateTimeError` for invalid inputs:
255
+
256
+ ```typescript
257
+ import { DateTimeError, DateTimeErrorCode } from '$lib/datetime';
258
+
259
+ try {
260
+ const tz = datetime.getVenueTimezone(venue);
261
+ } catch (e) {
262
+ if (e instanceof DateTimeError) {
263
+ console.error(e.code); // DateTimeErrorCode.MISSING_TIMEZONE
264
+ console.error(e.message); // "Venue timezone is required"
265
+ console.error(e.details); // { venue: {...} }
266
+ }
267
+ }
268
+ ```
269
+
270
+ Error codes:
271
+
272
+ - `INVALID_TIMEZONE` - Timezone string is not a valid IANA identifier
273
+ - `INVALID_ISO_STRING` - ISO date string is malformed
274
+ - `INVALID_DATE` - Date string is invalid
275
+ - `INVALID_TIME` - Time string is invalid
276
+ - `MISSING_TIMEZONE` - Required timezone is missing
277
+ - `PARSE_ERROR` - General parsing error
278
+
279
+ ## Migration from Legacy Code
280
+
281
+ ### From `src/lib/utils/timezone.js`
282
+
283
+ ```typescript
284
+ // Before
285
+ import { localToUTC, utcToLocal, formatForDisplay } from '$lib/utils/timezone';
286
+
287
+ // After
288
+ import {
289
+ parseLocalToUTC,
290
+ parseUTCToLocal,
291
+ formatEventDateTime,
292
+ } from '$lib/datetime';
293
+ ```
294
+
295
+ ### From `src/lib/utils/utils.js`
296
+
297
+ ```typescript
298
+ // Before
299
+ import { formatDateTime, formatTimeRange, getDay } from '$lib/utils/utils';
300
+
301
+ // After
302
+ import {
303
+ formatEventDateTime,
304
+ formatTimeRange,
305
+ formatDayOfWeek,
306
+ } from '$lib/datetime';
307
+ ```
308
+
309
+ ## Testing
310
+
311
+ Run tests:
312
+
313
+ ```bash
314
+ npm run test -- src/lib/datetime
315
+ ```
316
+
317
+ Run with coverage:
318
+
319
+ ```bash
320
+ npm run test:coverage -- src/lib/datetime
321
+ ```
322
+
323
+ Target: 100% coverage for this critical module.
@@ -1,6 +1,6 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { formatCleanTimeRange, formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatHour, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, isToday, } from '../format';
3
- import { DateTimeError } from '../types';
3
+ import { DateTimeError, DateTimeErrorCode } from '../types';
4
4
  describe('format utilities', () => {
5
5
  describe('formatEventTime', () => {
6
6
  it('formats time in specified timezone', () => {
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from 'vitest';
2
2
  import { combineDateAndTime, formatDateTimeForAPI, isNextDayTime, minutesToTimeString, parseDateTimeFromAPI, parseEndOfDay, parseLocalToUTC, parseStartOfDay, parseTimeToMinutes, parseUTCToLocal, stripNextDayPrefix, } from '../parse';
3
- import { DateTimeError } from '../types';
3
+ import { DateTimeError, DateTimeErrorCode } from '../types';
4
4
  describe('parse utilities', () => {
5
5
  describe('parseLocalToUTC', () => {
6
6
  it('converts local datetime to UTC', () => {
@@ -1,4 +1,4 @@
1
- import { describe, expect, it } from 'vitest';
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
2
  import { getTimezoneDisplayName, getTimezoneOffset, getUserTimezone, getVenueTimezone, isDST, isValidTimezone, normalizeTimezone, getIANATimezone, isValidIANATimezone, getAllTimezones, formatTimezoneForDisplay, getTimezoneOptions, getCommonUSTimezoneOptions, } from '../timezone';
3
3
  import { DateTimeError, DateTimeErrorCode } from '../types';
4
4
  describe('timezone utilities', () => {