@getmicdrop/svelte-components 5.4.1 → 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/dist/calendar/PublicCard/PublicCard.svelte +12 -11
  2. package/dist/calendar/PublicCard/PublicCard.svelte.d.ts.map +1 -1
  3. package/dist/calendar/index.d.ts +9 -0
  4. package/dist/calendar/index.d.ts.map +1 -0
  5. package/dist/calendar/index.js +15 -0
  6. package/dist/components/Layout/Grid.spec.d.ts +2 -0
  7. package/dist/components/Layout/Grid.spec.d.ts.map +1 -0
  8. package/dist/components/Layout/Grid.spec.js +230 -0
  9. package/dist/components/Layout/Grid.svelte +97 -105
  10. package/dist/components/Layout/Grid.svelte.d.ts +16 -6
  11. package/dist/components/Layout/Grid.svelte.d.ts.map +1 -1
  12. package/dist/components/Layout/Stack.spec.d.ts +2 -0
  13. package/dist/components/Layout/Stack.spec.d.ts.map +1 -0
  14. package/dist/components/Layout/Stack.spec.js +257 -0
  15. package/dist/components/Layout/Stack.svelte +47 -85
  16. package/dist/components/Layout/Stack.svelte.d.ts +4 -6
  17. package/dist/components/Layout/Stack.svelte.d.ts.map +1 -1
  18. package/dist/components/Layout/__tests__/Grid.test.d.ts +2 -0
  19. package/dist/components/Layout/__tests__/Grid.test.d.ts.map +1 -0
  20. package/dist/components/Layout/__tests__/Grid.test.js +246 -0
  21. package/dist/components/Layout/__tests__/Stack.test.d.ts +2 -0
  22. package/dist/components/Layout/__tests__/Stack.test.d.ts.map +1 -0
  23. package/dist/components/Layout/__tests__/Stack.test.js +267 -0
  24. package/dist/constants/formOptions.spec.d.ts.map +1 -1
  25. package/dist/constants/formOptions.spec.js +69 -82
  26. package/dist/datetime/__tests__/format.test.js +81 -1
  27. package/dist/datetime/format.d.ts +74 -0
  28. package/dist/datetime/format.d.ts.map +1 -1
  29. package/dist/datetime/format.js +104 -0
  30. package/dist/datetime/index.d.ts +1 -1
  31. package/dist/datetime/index.d.ts.map +1 -1
  32. package/dist/datetime/index.js +1 -1
  33. package/dist/datetime/timezone.d.ts.map +1 -1
  34. package/dist/datetime/timezone.js +2 -0
  35. package/dist/datetime/types.d.ts +4 -0
  36. package/dist/datetime/types.d.ts.map +1 -1
  37. package/dist/forms/createFormStore.svelte.d.ts.map +1 -1
  38. package/dist/forms/createFormStore.svelte.js +3 -2
  39. package/dist/index.d.ts +1 -0
  40. package/dist/index.js +3 -0
  41. package/dist/index.spec.d.ts +2 -0
  42. package/dist/index.spec.d.ts.map +1 -0
  43. package/dist/index.spec.js +370 -0
  44. package/dist/patterns/data/DataTable.svelte +5 -5
  45. package/dist/patterns/data/index.d.ts +4 -0
  46. package/dist/patterns/data/index.d.ts.map +1 -0
  47. package/dist/patterns/data/index.js +4 -0
  48. package/dist/patterns/forms/FormValidationSummary.spec.d.ts.map +1 -1
  49. package/dist/patterns/forms/FormValidationSummary.spec.js +181 -203
  50. package/dist/patterns/forms/FormValidationSummary.stories.svelte +14 -14
  51. package/dist/patterns/forms/FormValidationSummary.svelte +43 -36
  52. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts +8 -16
  53. package/dist/patterns/forms/FormValidationSummary.svelte.d.ts.map +1 -1
  54. package/dist/patterns/forms/index.d.ts +5 -0
  55. package/dist/patterns/forms/index.d.ts.map +1 -0
  56. package/dist/patterns/forms/index.js +5 -0
  57. package/dist/patterns/index.d.ts +6 -0
  58. package/dist/patterns/index.d.ts.map +1 -0
  59. package/dist/patterns/index.js +18 -0
  60. package/dist/patterns/layout/Stack.svelte +61 -45
  61. package/dist/patterns/layout/Stack.svelte.d.ts +35 -21
  62. package/dist/patterns/layout/Stack.svelte.d.ts.map +1 -1
  63. package/dist/patterns/layout/index.d.ts +5 -0
  64. package/dist/patterns/layout/index.d.ts.map +1 -0
  65. package/dist/patterns/layout/index.js +6 -0
  66. package/dist/patterns/navigation/BottomNav.spec.d.ts.map +1 -1
  67. package/dist/patterns/navigation/BottomNav.spec.js +104 -130
  68. package/dist/patterns/navigation/BottomNav.svelte +44 -34
  69. package/dist/patterns/navigation/BottomNav.svelte.d.ts +10 -10
  70. package/dist/patterns/navigation/BottomNav.svelte.d.ts.map +1 -1
  71. package/dist/patterns/navigation/Header.spec.d.ts.map +1 -1
  72. package/dist/patterns/navigation/Header.spec.js +161 -203
  73. package/dist/patterns/navigation/Header.svelte +62 -47
  74. package/dist/patterns/navigation/Header.svelte.d.ts +12 -19
  75. package/dist/patterns/navigation/Header.svelte.d.ts.map +1 -1
  76. package/dist/patterns/navigation/index.d.ts +3 -0
  77. package/dist/patterns/navigation/index.d.ts.map +1 -0
  78. package/dist/patterns/navigation/index.js +3 -0
  79. package/dist/patterns/page/PageHeader.svelte +31 -18
  80. package/dist/patterns/page/PageHeader.svelte.d.ts +12 -18
  81. package/dist/patterns/page/PageHeader.svelte.d.ts.map +1 -1
  82. package/dist/patterns/page/PageLoader.svelte +29 -17
  83. package/dist/patterns/page/PageLoader.svelte.d.ts +9 -20
  84. package/dist/patterns/page/PageLoader.svelte.d.ts.map +1 -1
  85. package/dist/patterns/page/SectionHeader.svelte +22 -12
  86. package/dist/patterns/page/SectionHeader.svelte.d.ts +8 -17
  87. package/dist/patterns/page/SectionHeader.svelte.d.ts.map +1 -1
  88. package/dist/patterns/page/index.d.ts +5 -0
  89. package/dist/patterns/page/index.d.ts.map +1 -0
  90. package/dist/patterns/page/index.js +5 -0
  91. package/dist/primitives/Accordion/Accordion.svelte +20 -19
  92. package/dist/primitives/Accordion/Accordion.svelte.d.ts.map +1 -1
  93. package/dist/primitives/Alert/Alert.svelte +37 -38
  94. package/dist/primitives/Alert/Alert.svelte.d.ts +2 -1
  95. package/dist/primitives/Alert/Alert.svelte.d.ts.map +1 -1
  96. package/dist/primitives/Badges/Badge.svelte +20 -63
  97. package/dist/primitives/Badges/Badge.svelte.d.ts +4 -2
  98. package/dist/primitives/Badges/Badge.svelte.d.ts.map +1 -1
  99. package/dist/primitives/Button/Button.svelte +39 -70
  100. package/dist/primitives/Button/Button.svelte.d.ts +10 -26
  101. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  102. package/dist/primitives/Drawer/Drawer.stories.svelte +20 -20
  103. package/dist/primitives/Drawer/Drawer.svelte +116 -94
  104. package/dist/primitives/Drawer/Drawer.svelte.d.ts +12 -31
  105. package/dist/primitives/Drawer/Drawer.svelte.d.ts.map +1 -1
  106. package/dist/primitives/Dropdown/Dropdown.svelte +146 -134
  107. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts +9 -18
  108. package/dist/primitives/Dropdown/Dropdown.svelte.d.ts.map +1 -1
  109. package/dist/primitives/Icons/ArrowLeft.svelte +13 -12
  110. package/dist/primitives/Icons/ArrowLeft.svelte.d.ts +2 -0
  111. package/dist/primitives/Icons/ArrowLeft.svelte.d.ts.map +1 -1
  112. package/dist/primitives/Icons/ArrowRight.svelte +13 -12
  113. package/dist/primitives/Icons/ArrowRight.svelte.d.ts +2 -0
  114. package/dist/primitives/Icons/ArrowRight.svelte.d.ts.map +1 -1
  115. package/dist/primitives/Icons/Availability.svelte +13 -12
  116. package/dist/primitives/Icons/Availability.svelte.d.ts +2 -0
  117. package/dist/primitives/Icons/Availability.svelte.d.ts.map +1 -1
  118. package/dist/primitives/Icons/Back.svelte +13 -12
  119. package/dist/primitives/Icons/Back.svelte.d.ts +2 -0
  120. package/dist/primitives/Icons/Back.svelte.d.ts.map +1 -1
  121. package/dist/primitives/Icons/CheckCircle.svelte +13 -12
  122. package/dist/primitives/Icons/CheckCircle.svelte.d.ts +2 -0
  123. package/dist/primitives/Icons/CheckCircle.svelte.d.ts.map +1 -1
  124. package/dist/primitives/Icons/CheckCircleOutline.svelte +13 -12
  125. package/dist/primitives/Icons/CheckCircleOutline.svelte.d.ts +2 -0
  126. package/dist/primitives/Icons/CheckCircleOutline.svelte.d.ts.map +1 -1
  127. package/dist/primitives/Icons/CheckCircleSolid.svelte +12 -10
  128. package/dist/primitives/Icons/CheckCircleSolid.svelte.d.ts +4 -0
  129. package/dist/primitives/Icons/CheckCircleSolid.svelte.d.ts.map +1 -1
  130. package/dist/primitives/Icons/CheckOutline.svelte +15 -13
  131. package/dist/primitives/Icons/CheckOutline.svelte.d.ts +4 -0
  132. package/dist/primitives/Icons/CheckOutline.svelte.d.ts.map +1 -1
  133. package/dist/primitives/Icons/ChevronDownOutline.svelte +14 -12
  134. package/dist/primitives/Icons/ChevronDownOutline.svelte.d.ts +4 -0
  135. package/dist/primitives/Icons/ChevronDownOutline.svelte.d.ts.map +1 -1
  136. package/dist/primitives/Icons/ChevronLeft.svelte +13 -12
  137. package/dist/primitives/Icons/ChevronLeft.svelte.d.ts +2 -0
  138. package/dist/primitives/Icons/ChevronLeft.svelte.d.ts.map +1 -1
  139. package/dist/primitives/Icons/ChevronLeftOutline.svelte +14 -12
  140. package/dist/primitives/Icons/ChevronLeftOutline.svelte.d.ts +4 -0
  141. package/dist/primitives/Icons/ChevronLeftOutline.svelte.d.ts.map +1 -1
  142. package/dist/primitives/Icons/ChevronRight.svelte +13 -12
  143. package/dist/primitives/Icons/ChevronRight.svelte.d.ts +2 -0
  144. package/dist/primitives/Icons/ChevronRight.svelte.d.ts.map +1 -1
  145. package/dist/primitives/Icons/ChevronRightOutline.svelte +14 -12
  146. package/dist/primitives/Icons/ChevronRightOutline.svelte.d.ts +4 -0
  147. package/dist/primitives/Icons/ChevronRightOutline.svelte.d.ts.map +1 -1
  148. package/dist/primitives/Icons/ChevronUpOutline.svelte +14 -12
  149. package/dist/primitives/Icons/ChevronUpOutline.svelte.d.ts +4 -0
  150. package/dist/primitives/Icons/ChevronUpOutline.svelte.d.ts.map +1 -1
  151. package/dist/primitives/Icons/CloseCircleOutline.svelte +14 -12
  152. package/dist/primitives/Icons/CloseCircleOutline.svelte.d.ts +4 -0
  153. package/dist/primitives/Icons/CloseCircleOutline.svelte.d.ts.map +1 -1
  154. package/dist/primitives/Icons/CloseOutline.svelte +14 -12
  155. package/dist/primitives/Icons/CloseOutline.svelte.d.ts +4 -0
  156. package/dist/primitives/Icons/CloseOutline.svelte.d.ts.map +1 -1
  157. package/dist/primitives/Icons/Copy.svelte +13 -12
  158. package/dist/primitives/Icons/Copy.svelte.d.ts +2 -0
  159. package/dist/primitives/Icons/Copy.svelte.d.ts.map +1 -1
  160. package/dist/primitives/Icons/Cross.svelte +13 -12
  161. package/dist/primitives/Icons/Cross.svelte.d.ts +2 -0
  162. package/dist/primitives/Icons/Cross.svelte.d.ts.map +1 -1
  163. package/dist/primitives/Icons/DotsHorizontalOutline.svelte +12 -10
  164. package/dist/primitives/Icons/DotsHorizontalOutline.svelte.d.ts +4 -0
  165. package/dist/primitives/Icons/DotsHorizontalOutline.svelte.d.ts.map +1 -1
  166. package/dist/primitives/Icons/DownArrow.svelte +13 -12
  167. package/dist/primitives/Icons/DownArrow.svelte.d.ts +2 -0
  168. package/dist/primitives/Icons/DownArrow.svelte.d.ts.map +1 -1
  169. package/dist/primitives/Icons/ErrorCircle.svelte +13 -12
  170. package/dist/primitives/Icons/ErrorCircle.svelte.d.ts +2 -0
  171. package/dist/primitives/Icons/ErrorCircle.svelte.d.ts.map +1 -1
  172. package/dist/primitives/Icons/ExclamationCircleOutline.svelte +14 -12
  173. package/dist/primitives/Icons/ExclamationCircleOutline.svelte.d.ts +4 -0
  174. package/dist/primitives/Icons/ExclamationCircleOutline.svelte.d.ts.map +1 -1
  175. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte +14 -12
  176. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte.d.ts +4 -0
  177. package/dist/primitives/Icons/ExclamationTriangleOutline.svelte.d.ts.map +1 -1
  178. package/dist/primitives/Icons/EyeOutline.svelte +14 -12
  179. package/dist/primitives/Icons/EyeOutline.svelte.d.ts +4 -0
  180. package/dist/primitives/Icons/EyeOutline.svelte.d.ts.map +1 -1
  181. package/dist/primitives/Icons/EyeSlashOutline.svelte +14 -12
  182. package/dist/primitives/Icons/EyeSlashOutline.svelte.d.ts +4 -0
  183. package/dist/primitives/Icons/EyeSlashOutline.svelte.d.ts.map +1 -1
  184. package/dist/primitives/Icons/FacebookIcon.svelte +13 -11
  185. package/dist/primitives/Icons/FacebookIcon.svelte.d.ts +2 -0
  186. package/dist/primitives/Icons/FacebookIcon.svelte.d.ts.map +1 -1
  187. package/dist/primitives/Icons/FileCopyOutline.svelte +14 -12
  188. package/dist/primitives/Icons/FileCopyOutline.svelte.d.ts +4 -0
  189. package/dist/primitives/Icons/FileCopyOutline.svelte.d.ts.map +1 -1
  190. package/dist/primitives/Icons/Home.svelte +13 -12
  191. package/dist/primitives/Icons/Home.svelte.d.ts +2 -0
  192. package/dist/primitives/Icons/Home.svelte.d.ts.map +1 -1
  193. package/dist/primitives/Icons/HomeSolid.svelte +12 -10
  194. package/dist/primitives/Icons/HomeSolid.svelte.d.ts +4 -0
  195. package/dist/primitives/Icons/HomeSolid.svelte.d.ts.map +1 -1
  196. package/dist/primitives/Icons/Icon.spec.js +6 -6
  197. package/dist/primitives/Icons/Icon.svelte +27 -11
  198. package/dist/primitives/Icons/Icon.svelte.d.ts +5 -3
  199. package/dist/primitives/Icons/Icon.svelte.d.ts.map +1 -1
  200. package/dist/primitives/Icons/Icons.spec.d.ts +8 -0
  201. package/dist/primitives/Icons/Icons.spec.d.ts.map +1 -0
  202. package/dist/primitives/Icons/Icons.spec.js +291 -0
  203. package/dist/primitives/Icons/ImageOutline.svelte +21 -19
  204. package/dist/primitives/Icons/ImageOutline.svelte.d.ts +6 -2
  205. package/dist/primitives/Icons/ImageOutline.svelte.d.ts.map +1 -1
  206. package/dist/primitives/Icons/Info.svelte +13 -12
  207. package/dist/primitives/Icons/Info.svelte.d.ts +2 -0
  208. package/dist/primitives/Icons/Info.svelte.d.ts.map +1 -1
  209. package/dist/primitives/Icons/InfoCircleOutline.svelte +14 -12
  210. package/dist/primitives/Icons/InfoCircleOutline.svelte.d.ts +4 -0
  211. package/dist/primitives/Icons/InfoCircleOutline.svelte.d.ts.map +1 -1
  212. package/dist/primitives/Icons/InstagramIcon.svelte +17 -15
  213. package/dist/primitives/Icons/InstagramIcon.svelte.d.ts +2 -0
  214. package/dist/primitives/Icons/InstagramIcon.svelte.d.ts.map +1 -1
  215. package/dist/primitives/Icons/LogoInstagram.svelte +13 -13
  216. package/dist/primitives/Icons/LogoInstagram.svelte.d.ts +4 -2
  217. package/dist/primitives/Icons/LogoInstagram.svelte.d.ts.map +1 -1
  218. package/dist/primitives/Icons/Message.svelte +13 -12
  219. package/dist/primitives/Icons/Message.svelte.d.ts +2 -0
  220. package/dist/primitives/Icons/Message.svelte.d.ts.map +1 -1
  221. package/dist/primitives/Icons/MinusOutline.svelte +14 -12
  222. package/dist/primitives/Icons/MinusOutline.svelte.d.ts +4 -0
  223. package/dist/primitives/Icons/MinusOutline.svelte.d.ts.map +1 -1
  224. package/dist/primitives/Icons/MoonIcon.svelte +13 -11
  225. package/dist/primitives/Icons/MoonIcon.svelte.d.ts +2 -0
  226. package/dist/primitives/Icons/MoonIcon.svelte.d.ts.map +1 -1
  227. package/dist/primitives/Icons/More.svelte +13 -12
  228. package/dist/primitives/Icons/More.svelte.d.ts +2 -0
  229. package/dist/primitives/Icons/More.svelte.d.ts.map +1 -1
  230. package/dist/primitives/Icons/MoreHori.spec.js +6 -6
  231. package/dist/primitives/Icons/MoreHori.svelte +13 -12
  232. package/dist/primitives/Icons/MoreHori.svelte.d.ts +2 -0
  233. package/dist/primitives/Icons/MoreHori.svelte.d.ts.map +1 -1
  234. package/dist/primitives/Icons/Notification.svelte +13 -12
  235. package/dist/primitives/Icons/Notification.svelte.d.ts +2 -0
  236. package/dist/primitives/Icons/Notification.svelte.d.ts.map +1 -1
  237. package/dist/primitives/Icons/Payment.svelte +13 -12
  238. package/dist/primitives/Icons/Payment.svelte.d.ts +2 -0
  239. package/dist/primitives/Icons/Payment.svelte.d.ts.map +1 -1
  240. package/dist/primitives/Icons/PlusOutline.svelte +14 -12
  241. package/dist/primitives/Icons/PlusOutline.svelte.d.ts +4 -0
  242. package/dist/primitives/Icons/PlusOutline.svelte.d.ts.map +1 -1
  243. package/dist/primitives/Icons/Profile.svelte +13 -12
  244. package/dist/primitives/Icons/Profile.svelte.d.ts +2 -0
  245. package/dist/primitives/Icons/Profile.svelte.d.ts.map +1 -1
  246. package/dist/primitives/Icons/Reload.svelte +13 -12
  247. package/dist/primitives/Icons/Reload.svelte.d.ts +2 -0
  248. package/dist/primitives/Icons/Reload.svelte.d.ts.map +1 -1
  249. package/dist/primitives/Icons/SearchOutline.svelte +14 -12
  250. package/dist/primitives/Icons/SearchOutline.svelte.d.ts +4 -0
  251. package/dist/primitives/Icons/SearchOutline.svelte.d.ts.map +1 -1
  252. package/dist/primitives/Icons/ShareOutline.svelte +14 -12
  253. package/dist/primitives/Icons/ShareOutline.svelte.d.ts +4 -0
  254. package/dist/primitives/Icons/ShareOutline.svelte.d.ts.map +1 -1
  255. package/dist/primitives/Icons/Shows.svelte +13 -12
  256. package/dist/primitives/Icons/Shows.svelte.d.ts +2 -0
  257. package/dist/primitives/Icons/Shows.svelte.d.ts.map +1 -1
  258. package/dist/primitives/Icons/Signout.svelte +13 -12
  259. package/dist/primitives/Icons/Signout.svelte.d.ts +2 -0
  260. package/dist/primitives/Icons/Signout.svelte.d.ts.map +1 -1
  261. package/dist/primitives/Icons/SunIcon.svelte +13 -11
  262. package/dist/primitives/Icons/SunIcon.svelte.d.ts +2 -0
  263. package/dist/primitives/Icons/SunIcon.svelte.d.ts.map +1 -1
  264. package/dist/primitives/Icons/TiktokIcon.svelte +13 -11
  265. package/dist/primitives/Icons/TiktokIcon.svelte.d.ts +2 -0
  266. package/dist/primitives/Icons/TiktokIcon.svelte.d.ts.map +1 -1
  267. package/dist/primitives/Icons/TrashBinOutline.svelte +21 -19
  268. package/dist/primitives/Icons/TrashBinOutline.svelte.d.ts +6 -2
  269. package/dist/primitives/Icons/TrashBinOutline.svelte.d.ts.map +1 -1
  270. package/dist/primitives/Icons/TwitterIcon.svelte +13 -11
  271. package/dist/primitives/Icons/TwitterIcon.svelte.d.ts +2 -0
  272. package/dist/primitives/Icons/TwitterIcon.svelte.d.ts.map +1 -1
  273. package/dist/primitives/Icons/WarningIcon.spec.js +12 -12
  274. package/dist/primitives/Icons/WarningIcon.svelte +19 -19
  275. package/dist/primitives/Icons/WarningIcon.svelte.d.ts +6 -2
  276. package/dist/primitives/Icons/WarningIcon.svelte.d.ts.map +1 -1
  277. package/dist/primitives/Icons/iconTestUtils.d.ts +162 -0
  278. package/dist/primitives/Icons/iconTestUtils.d.ts.map +1 -0
  279. package/dist/primitives/Icons/iconTestUtils.js +160 -0
  280. package/dist/primitives/Icons/index.d.ts +56 -54
  281. package/dist/primitives/Icons/index.d.ts.map +1 -1
  282. package/dist/primitives/Icons/index.js +59 -61
  283. package/dist/primitives/Icons/types.d.ts +31 -0
  284. package/dist/primitives/Icons/types.d.ts.map +1 -0
  285. package/dist/primitives/Icons/types.js +8 -0
  286. package/dist/primitives/Input/Input.svelte +40 -53
  287. package/dist/primitives/Input/Input.svelte.d.ts.map +1 -1
  288. package/dist/primitives/Input/Select.svelte +121 -104
  289. package/dist/primitives/Input/Select.svelte.d.ts +16 -24
  290. package/dist/primitives/Input/Select.svelte.d.ts.map +1 -1
  291. package/dist/primitives/Input/Textarea.svelte +70 -44
  292. package/dist/primitives/Input/Textarea.svelte.d.ts +20 -39
  293. package/dist/primitives/Input/Textarea.svelte.d.ts.map +1 -1
  294. package/dist/primitives/NumberInput/NumberInput.svelte +106 -0
  295. package/dist/primitives/NumberInput/NumberInput.svelte.d.ts +23 -0
  296. package/dist/primitives/NumberInput/NumberInput.svelte.d.ts.map +1 -0
  297. package/dist/primitives/NumberInput/index.d.ts +2 -0
  298. package/dist/primitives/NumberInput/index.d.ts.map +1 -0
  299. package/dist/primitives/NumberInput/index.js +1 -0
  300. package/dist/primitives/Skeleton/Skeleton.svelte +21 -27
  301. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts +2 -1
  302. package/dist/primitives/Skeleton/Skeleton.svelte.d.ts.map +1 -1
  303. package/dist/primitives/Spinner/Spinner.svelte +24 -37
  304. package/dist/primitives/Spinner/Spinner.svelte.d.ts +4 -2
  305. package/dist/primitives/Spinner/Spinner.svelte.d.ts.map +1 -1
  306. package/dist/primitives/Tabs/TabItem.svelte +3 -2
  307. package/dist/primitives/Tabs/TabItem.svelte.d.ts.map +1 -1
  308. package/dist/primitives/Tabs/Tabs.svelte +6 -5
  309. package/dist/primitives/Tabs/Tabs.svelte.d.ts.map +1 -1
  310. package/dist/primitives/ValidationError.stories.svelte +43 -42
  311. package/dist/primitives/ValidationError.svelte +1 -1
  312. package/dist/primitives/index.d.ts +31 -0
  313. package/dist/primitives/index.d.ts.map +1 -0
  314. package/dist/primitives/index.js +81 -0
  315. package/dist/recipes/ImageUploader/ImageUploader.svelte +155 -176
  316. package/dist/recipes/ImageUploader/ImageUploader.svelte.d.ts.map +1 -1
  317. package/dist/recipes/SuperLogin/SuperLogin.svelte +18 -17
  318. package/dist/recipes/SuperLogin/SuperLogin.svelte.d.ts.map +1 -1
  319. package/dist/recipes/feedback/EmptyState/EmptyState.svelte +65 -46
  320. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts +7 -1
  321. package/dist/recipes/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -1
  322. package/dist/recipes/feedback/ErrorDisplay.stories.svelte +12 -11
  323. package/dist/recipes/feedback/ErrorDisplay.svelte +66 -37
  324. package/dist/recipes/feedback/ErrorDisplay.svelte.d.ts +7 -0
  325. package/dist/recipes/feedback/ErrorDisplay.svelte.d.ts.map +1 -1
  326. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte +22 -13
  327. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte.d.ts +2 -2
  328. package/dist/recipes/feedback/StatusIndicator/StatusIndicator.svelte.d.ts.map +1 -1
  329. package/dist/recipes/feedback/index.d.ts +4 -0
  330. package/dist/recipes/feedback/index.d.ts.map +1 -0
  331. package/dist/recipes/feedback/index.js +4 -0
  332. package/dist/recipes/fields/SelectField.svelte +2 -2
  333. package/dist/recipes/fields/SelectField.svelte.d.ts +4 -1
  334. package/dist/recipes/fields/SelectField.svelte.d.ts.map +1 -1
  335. package/dist/recipes/fields/TextareaField.svelte +4 -4
  336. package/dist/recipes/fields/TextareaField.svelte.d.ts +6 -2
  337. package/dist/recipes/fields/TextareaField.svelte.d.ts.map +1 -1
  338. package/dist/recipes/index.d.ts +8 -0
  339. package/dist/recipes/index.d.ts.map +1 -0
  340. package/dist/recipes/index.js +24 -0
  341. package/dist/recipes/inputs/MultiSelect.svelte +5 -0
  342. package/dist/recipes/inputs/MultiSelect.svelte.d.ts +2 -0
  343. package/dist/recipes/inputs/MultiSelect.svelte.d.ts.map +1 -1
  344. package/dist/recipes/inputs/OTPInput.svelte +89 -74
  345. package/dist/recipes/inputs/OTPInput.svelte.d.ts +15 -20
  346. package/dist/recipes/inputs/OTPInput.svelte.d.ts.map +1 -1
  347. package/dist/recipes/inputs/PasswordInput.svelte +99 -78
  348. package/dist/recipes/inputs/PasswordInput.svelte.d.ts +27 -34
  349. package/dist/recipes/inputs/PasswordInput.svelte.d.ts.map +1 -1
  350. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte +75 -66
  351. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts +8 -16
  352. package/dist/recipes/inputs/PasswordStrengthIndicator/PasswordStrengthIndicator.svelte.d.ts.map +1 -1
  353. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte +47 -42
  354. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.stories.svelte.d.ts.map +1 -1
  355. package/dist/recipes/inputs/PlaceAutocomplete/PlaceAutocomplete.svelte +12 -12
  356. package/dist/recipes/inputs/Search.svelte +65 -48
  357. package/dist/recipes/inputs/Search.svelte.d.ts +16 -32
  358. package/dist/recipes/inputs/Search.svelte.d.ts.map +1 -1
  359. package/dist/recipes/inputs/SelectDropdown.svelte +112 -104
  360. package/dist/recipes/inputs/SelectDropdown.svelte.d.ts +12 -18
  361. package/dist/recipes/inputs/SelectDropdown.svelte.d.ts.map +1 -1
  362. package/dist/recipes/inputs/index.d.ts +8 -0
  363. package/dist/recipes/inputs/index.d.ts.map +1 -0
  364. package/dist/recipes/inputs/index.js +8 -0
  365. package/dist/recipes/modals/index.d.ts +7 -0
  366. package/dist/recipes/modals/index.d.ts.map +1 -0
  367. package/dist/recipes/modals/index.js +7 -0
  368. package/dist/stories/ButtonAuditDashboard.svelte +23 -18
  369. package/dist/stories/ButtonAuditDashboard.svelte.d.ts.map +1 -1
  370. package/dist/stories/PatternsGallery.svelte +199 -188
  371. package/dist/stories/PatternsGallery.svelte.d.ts.map +1 -1
  372. package/dist/stories/PrimitivesGallery.svelte +27 -27
  373. package/dist/stories/RecipesGallery.svelte +200 -170
  374. package/dist/stories/RecipesGallery.svelte.d.ts.map +1 -1
  375. package/dist/telemetry.d.ts.map +1 -1
  376. package/dist/telemetry.js +1 -0
  377. package/dist/telemetry.server.d.ts.map +1 -1
  378. package/dist/telemetry.server.js +1 -0
  379. package/dist/telemetry.server.spec.js +1 -0
  380. package/dist/telemetry.spec.js +1 -0
  381. package/dist/tokens/__tests__/sizing.test.d.ts +2 -0
  382. package/dist/tokens/__tests__/sizing.test.d.ts.map +1 -0
  383. package/dist/tokens/__tests__/sizing.test.js +307 -0
  384. package/dist/tokens/__tests__/spacing.test.d.ts +2 -0
  385. package/dist/tokens/__tests__/spacing.test.d.ts.map +1 -0
  386. package/dist/tokens/__tests__/spacing.test.js +178 -0
  387. package/dist/tokens/__tests__/variants.test.d.ts +2 -0
  388. package/dist/tokens/__tests__/variants.test.d.ts.map +1 -0
  389. package/dist/tokens/__tests__/variants.test.js +329 -0
  390. package/dist/tokens/index.d.ts +3 -0
  391. package/dist/tokens/index.d.ts.map +1 -1
  392. package/dist/tokens/index.js +16 -0
  393. package/dist/tokens/sizing.d.ts +118 -0
  394. package/dist/tokens/sizing.d.ts.map +1 -0
  395. package/dist/tokens/sizing.js +125 -0
  396. package/dist/tokens/spacing.d.ts +105 -0
  397. package/dist/tokens/spacing.d.ts.map +1 -1
  398. package/dist/tokens/spacing.js +76 -0
  399. package/dist/tokens/variants.d.ts +78 -0
  400. package/dist/tokens/variants.d.ts.map +1 -0
  401. package/dist/tokens/variants.js +89 -0
  402. package/dist/utils/__tests__/auth.test.d.ts +2 -0
  403. package/dist/utils/__tests__/auth.test.d.ts.map +1 -0
  404. package/dist/utils/__tests__/auth.test.js +431 -0
  405. package/dist/utils/__tests__/formatters.test.d.ts +2 -0
  406. package/dist/utils/__tests__/formatters.test.d.ts.map +1 -0
  407. package/dist/utils/__tests__/formatters.test.js +73 -0
  408. package/dist/utils/auth.d.ts +46 -0
  409. package/dist/utils/auth.d.ts.map +1 -0
  410. package/dist/utils/auth.js +195 -0
  411. package/dist/utils/formatters.d.ts +13 -0
  412. package/dist/utils/formatters.d.ts.map +1 -0
  413. package/dist/utils/formatters.js +24 -0
  414. package/package.json +9 -5
  415. package/dist/patterns/layout/Grid.svelte +0 -35
  416. package/dist/patterns/layout/Grid.svelte.d.ts +0 -18
  417. package/dist/patterns/layout/Grid.svelte.d.ts.map +0 -1
@@ -1,88 +1,75 @@
1
1
  import { describe, it, expect } from 'vitest';
2
2
  import { GENDER_OPTIONS, ETHNICITY_OPTIONS } from './formOptions.js';
3
-
4
3
  describe('formOptions', () => {
5
- describe('GENDER_OPTIONS', () => {
6
- it('exports gender options array', () => {
7
- expect(GENDER_OPTIONS).toBeDefined();
8
- expect(Array.isArray(GENDER_OPTIONS)).toBe(true);
4
+ describe('GENDER_OPTIONS', () => {
5
+ it('exports gender options array', () => {
6
+ expect(GENDER_OPTIONS).toBeDefined();
7
+ expect(Array.isArray(GENDER_OPTIONS)).toBe(true);
8
+ });
9
+ it('has three options', () => {
10
+ expect(GENDER_OPTIONS.length).toBe(3);
11
+ });
12
+ it('contains Male option with value 1', () => {
13
+ const male = GENDER_OPTIONS.find(opt => opt.name === 'Male');
14
+ expect(male).toBeDefined();
15
+ expect(male.value).toBe(1);
16
+ });
17
+ it('contains Female option with value 2', () => {
18
+ const female = GENDER_OPTIONS.find(opt => opt.name === 'Female');
19
+ expect(female).toBeDefined();
20
+ expect(female.value).toBe(2);
21
+ });
22
+ it('contains Non-Binary option with value 3', () => {
23
+ const nonBinary = GENDER_OPTIONS.find(opt => opt.name === 'Non-Binary');
24
+ expect(nonBinary).toBeDefined();
25
+ expect(nonBinary.value).toBe(3);
26
+ });
27
+ it('each option has name and value properties', () => {
28
+ GENDER_OPTIONS.forEach(option => {
29
+ expect(option).toHaveProperty('name');
30
+ expect(option).toHaveProperty('value');
31
+ expect(typeof option.name).toBe('string');
32
+ expect(typeof option.value).toBe('number');
33
+ });
34
+ });
9
35
  });
10
-
11
- it('has three options', () => {
12
- expect(GENDER_OPTIONS.length).toBe(3);
36
+ describe('ETHNICITY_OPTIONS', () => {
37
+ it('exports ethnicity options array', () => {
38
+ expect(ETHNICITY_OPTIONS).toBeDefined();
39
+ expect(Array.isArray(ETHNICITY_OPTIONS)).toBe(true);
40
+ });
41
+ it('has seven options', () => {
42
+ expect(ETHNICITY_OPTIONS.length).toBe(7);
43
+ });
44
+ it('contains all expected ethnicities', () => {
45
+ const names = ETHNICITY_OPTIONS.map(opt => opt.name);
46
+ expect(names).toContain('American Indian or Alaska Native');
47
+ expect(names).toContain('Asian');
48
+ expect(names).toContain('Black or African American');
49
+ expect(names).toContain('Hispanic or Latino');
50
+ expect(names).toContain('Middle Eastern or North African');
51
+ expect(names).toContain('Native Hawaiian or Pacific Islander');
52
+ expect(names).toContain('White');
53
+ });
54
+ it('has values 0 through 6', () => {
55
+ const values = ETHNICITY_OPTIONS.map(opt => opt.value).sort((a, b) => a - b);
56
+ expect(values).toEqual([0, 1, 2, 3, 4, 5, 6]);
57
+ });
58
+ it('each option has name and value properties', () => {
59
+ ETHNICITY_OPTIONS.forEach(option => {
60
+ expect(option).toHaveProperty('name');
61
+ expect(option).toHaveProperty('value');
62
+ expect(typeof option.name).toBe('string');
63
+ expect(typeof option.value).toBe('number');
64
+ });
65
+ });
66
+ it('American Indian or Alaska Native has value 0', () => {
67
+ const option = ETHNICITY_OPTIONS.find(opt => opt.name === 'American Indian or Alaska Native');
68
+ expect(option.value).toBe(0);
69
+ });
70
+ it('White has value 6', () => {
71
+ const option = ETHNICITY_OPTIONS.find(opt => opt.name === 'White');
72
+ expect(option.value).toBe(6);
73
+ });
13
74
  });
14
-
15
- it('contains Male option with value 1', () => {
16
- const male = GENDER_OPTIONS.find(opt => opt.name === 'Male');
17
- expect(male).toBeDefined();
18
- expect(male.value).toBe(1);
19
- });
20
-
21
- it('contains Female option with value 2', () => {
22
- const female = GENDER_OPTIONS.find(opt => opt.name === 'Female');
23
- expect(female).toBeDefined();
24
- expect(female.value).toBe(2);
25
- });
26
-
27
- it('contains Non-Binary option with value 3', () => {
28
- const nonBinary = GENDER_OPTIONS.find(opt => opt.name === 'Non-Binary');
29
- expect(nonBinary).toBeDefined();
30
- expect(nonBinary.value).toBe(3);
31
- });
32
-
33
- it('each option has name and value properties', () => {
34
- GENDER_OPTIONS.forEach(option => {
35
- expect(option).toHaveProperty('name');
36
- expect(option).toHaveProperty('value');
37
- expect(typeof option.name).toBe('string');
38
- expect(typeof option.value).toBe('number');
39
- });
40
- });
41
- });
42
-
43
- describe('ETHNICITY_OPTIONS', () => {
44
- it('exports ethnicity options array', () => {
45
- expect(ETHNICITY_OPTIONS).toBeDefined();
46
- expect(Array.isArray(ETHNICITY_OPTIONS)).toBe(true);
47
- });
48
-
49
- it('has seven options', () => {
50
- expect(ETHNICITY_OPTIONS.length).toBe(7);
51
- });
52
-
53
- it('contains all expected ethnicities', () => {
54
- const names = ETHNICITY_OPTIONS.map(opt => opt.name);
55
- expect(names).toContain('American Indian or Alaska Native');
56
- expect(names).toContain('Asian');
57
- expect(names).toContain('Black or African American');
58
- expect(names).toContain('Hispanic or Latino');
59
- expect(names).toContain('Middle Eastern or North African');
60
- expect(names).toContain('Native Hawaiian or Pacific Islander');
61
- expect(names).toContain('White');
62
- });
63
-
64
- it('has values 0 through 6', () => {
65
- const values = ETHNICITY_OPTIONS.map(opt => opt.value).sort((a, b) => a - b);
66
- expect(values).toEqual([0, 1, 2, 3, 4, 5, 6]);
67
- });
68
-
69
- it('each option has name and value properties', () => {
70
- ETHNICITY_OPTIONS.forEach(option => {
71
- expect(option).toHaveProperty('name');
72
- expect(option).toHaveProperty('value');
73
- expect(typeof option.name).toBe('string');
74
- expect(typeof option.value).toBe('number');
75
- });
76
- });
77
-
78
- it('American Indian or Alaska Native has value 0', () => {
79
- const option = ETHNICITY_OPTIONS.find(opt => opt.name === 'American Indian or Alaska Native');
80
- expect(option.value).toBe(0);
81
- });
82
-
83
- it('White has value 6', () => {
84
- const option = ETHNICITY_OPTIONS.find(opt => opt.name === 'White');
85
- expect(option.value).toBe(6);
86
- });
87
- });
88
75
  });
@@ -1,5 +1,5 @@
1
1
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
2
- import { formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, } from '../format';
2
+ import { formatCleanTimeRange, formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatHour, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, isToday, } from '../format';
3
3
  import { DateTimeError, DateTimeErrorCode } from '../types';
4
4
  describe('format utilities', () => {
5
5
  describe('formatEventTime', () => {
@@ -265,4 +265,84 @@ describe('format utilities', () => {
265
265
  expect(getDateInTimezone(utc, 'America/Los_Angeles')).toBe('2023-12-24');
266
266
  });
267
267
  });
268
+ describe('formatHour', () => {
269
+ it('formats morning hours correctly', () => {
270
+ expect(formatHour(8)).toBe('8 AM');
271
+ expect(formatHour(11)).toBe('11 AM');
272
+ });
273
+ it('formats afternoon hours correctly', () => {
274
+ expect(formatHour(13)).toBe('1 PM');
275
+ expect(formatHour(20)).toBe('8 PM');
276
+ expect(formatHour(23)).toBe('11 PM');
277
+ });
278
+ it('formats midnight correctly', () => {
279
+ expect(formatHour(0)).toBe('12 AM');
280
+ });
281
+ it('formats noon correctly', () => {
282
+ expect(formatHour(12)).toBe('12 PM');
283
+ });
284
+ it('handles edge case of 24', () => {
285
+ // 24 % 12 = 0, and 24 >= 12, so it shows 12 PM
286
+ // This is technically valid behavior - callers should normalize to 0-23
287
+ expect(formatHour(24)).toBe('12 PM');
288
+ });
289
+ });
290
+ describe('isToday', () => {
291
+ beforeEach(() => {
292
+ vi.useFakeTimers();
293
+ vi.setSystemTime(new Date('2023-12-25T12:00:00Z'));
294
+ });
295
+ afterEach(() => {
296
+ vi.useRealTimers();
297
+ });
298
+ it('returns true for today in the specified timezone', () => {
299
+ // Current time is Dec 25, 12:00 UTC = Dec 25, 4:00 AM in LA
300
+ const todayInLA = '2023-12-25T20:00:00Z'; // Dec 25, 12:00 PM in LA
301
+ expect(isToday(todayInLA, 'America/Los_Angeles')).toBe(true);
302
+ });
303
+ it('returns false for yesterday', () => {
304
+ const yesterday = '2023-12-24T12:00:00Z';
305
+ expect(isToday(yesterday, 'America/Los_Angeles')).toBe(false);
306
+ });
307
+ it('returns false for tomorrow', () => {
308
+ const tomorrow = '2023-12-26T12:00:00Z';
309
+ expect(isToday(tomorrow, 'America/Los_Angeles')).toBe(false);
310
+ });
311
+ it('handles timezone boundary correctly', () => {
312
+ // 3 AM UTC on Dec 25 = 7 PM Dec 24 in LA
313
+ // Current "now" is Dec 25, 12:00 UTC = Dec 25, 4:00 AM in LA
314
+ const utc = '2023-12-25T03:00:00Z';
315
+ expect(isToday(utc, 'America/Los_Angeles')).toBe(false); // It's Dec 24 in LA
316
+ });
317
+ it('throws on invalid timezone', () => {
318
+ expect(() => isToday('2023-12-25T12:00:00Z', 'Invalid/Zone')).toThrow();
319
+ });
320
+ });
321
+ describe('formatCleanTimeRange', () => {
322
+ it('omits minutes when times are on the hour', () => {
323
+ // 3 AM UTC = 7 PM in LA, 6 AM UTC = 10 PM in LA
324
+ const start = '2023-12-25T03:00:00Z';
325
+ const end = '2023-12-25T06:00:00Z';
326
+ expect(formatCleanTimeRange(start, end, 'America/Los_Angeles')).toBe('7 PM - 10 PM');
327
+ });
328
+ it('includes minutes when not on the hour', () => {
329
+ const start = '2023-12-25T03:30:00Z';
330
+ const end = '2023-12-25T06:00:00Z';
331
+ expect(formatCleanTimeRange(start, end, 'America/Los_Angeles')).toBe('7:30 PM - 10 PM');
332
+ });
333
+ it('handles both times with minutes', () => {
334
+ const start = '2023-12-25T03:15:00Z';
335
+ const end = '2023-12-25T06:45:00Z';
336
+ expect(formatCleanTimeRange(start, end, 'America/Los_Angeles')).toBe('7:15 PM - 10:45 PM');
337
+ });
338
+ it('handles midnight correctly', () => {
339
+ // 8 AM UTC = midnight in LA
340
+ const start = '2023-12-25T08:00:00Z';
341
+ const end = '2023-12-25T10:00:00Z';
342
+ expect(formatCleanTimeRange(start, end, 'America/Los_Angeles')).toBe('12 AM - 2 AM');
343
+ });
344
+ it('throws on invalid inputs', () => {
345
+ expect(() => formatCleanTimeRange('invalid', '2023-12-25T06:00:00Z', 'America/Los_Angeles')).toThrow();
346
+ });
347
+ });
268
348
  });
@@ -155,4 +155,78 @@ export declare function getHourInTimezone(utcIso: ISODateString, timezone: Timez
155
155
  * @returns Date string in YYYY-MM-DD format
156
156
  */
157
157
  export declare function getDateInTimezone(utcIso: ISODateString, timezone: TimezoneId): string;
158
+ /**
159
+ * Formats an hour number (0-23) to a display string with AM/PM.
160
+ * This is a simple utility that doesn't require timezone since it works
161
+ * with a raw hour number, not a datetime.
162
+ *
163
+ * @param hour - Hour number (0-23)
164
+ * @returns Formatted hour string (e.g., "8 PM", "12 AM")
165
+ *
166
+ * @example
167
+ * formatHour(8) // "8 AM"
168
+ * formatHour(20) // "8 PM"
169
+ * formatHour(0) // "12 AM"
170
+ * formatHour(12) // "12 PM"
171
+ */
172
+ export declare function formatHour(hour: number): string;
173
+ /**
174
+ * Checks if a UTC datetime represents today in the specified timezone.
175
+ *
176
+ * @param utcIso - UTC ISO datetime string
177
+ * @param timezone - IANA timezone ID
178
+ * @returns True if the date is today in the given timezone
179
+ * @throws {DateTimeError} If timezone or ISO string is invalid
180
+ *
181
+ * @example
182
+ * isToday('2025-01-04T19:00:00Z', 'America/Los_Angeles')
183
+ * // true (if today is Jan 4, 2025 in LA)
184
+ */
185
+ export declare function isToday(utcIso: ISODateString, timezone: TimezoneId): boolean;
186
+ /**
187
+ * Formats a date for simple display (e.g., lists, dropdowns).
188
+ * Format: "Jan 15, 2024"
189
+ *
190
+ * This is a convenience function that defaults to UTC when no timezone is provided.
191
+ * For timezone-aware formatting, use formatEventDate instead.
192
+ *
193
+ * @param utcIso - UTC ISO datetime string
194
+ * @param timezone - Optional IANA timezone ID (defaults to 'UTC')
195
+ * @returns Formatted date string (e.g., "Jan 15, 2024")
196
+ * @throws {DateTimeError} If ISO string is invalid
197
+ *
198
+ * @example
199
+ * formatShortDate('2024-01-15T20:30:00Z')
200
+ * // "Jan 15, 2024" (in UTC)
201
+ *
202
+ * formatShortDate('2024-01-15T20:30:00Z', 'America/Los_Angeles')
203
+ * // "Jan 15, 2024" (in LA timezone)
204
+ */
205
+ export declare function formatShortDate(utcIso: ISODateString, timezone?: TimezoneId): string;
206
+ /**
207
+ * Formats a time range with clean formatting (omits :00 minutes).
208
+ * More compact display for times on the hour.
209
+ *
210
+ * @param startUtc - Start time as UTC ISO string
211
+ * @param endUtc - End time as UTC ISO string
212
+ * @param timezone - IANA timezone ID
213
+ * @returns Formatted time range (e.g., "8 PM - 11 PM" or "8:30 PM - 11 PM")
214
+ * @throws {DateTimeError} If timezone or ISO strings are invalid
215
+ *
216
+ * @example
217
+ * formatCleanTimeRange(
218
+ * '2023-12-25T03:00:00Z',
219
+ * '2023-12-25T06:00:00Z',
220
+ * 'America/Los_Angeles'
221
+ * )
222
+ * // "7 PM - 10 PM" (times are on the hour, so no :00)
223
+ *
224
+ * formatCleanTimeRange(
225
+ * '2023-12-25T03:30:00Z',
226
+ * '2023-12-25T06:00:00Z',
227
+ * 'America/Los_Angeles'
228
+ * )
229
+ * // "7:30 PM - 10 PM"
230
+ */
231
+ export declare function formatCleanTimeRange(startUtc: ISODateString, endUtc: ISODateString, timezone: TimezoneId): string;
158
232
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,SAAS,CAAC;AA4CjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAMR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAOR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAIR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CA4BR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAoDR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,SAAS,CASX;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,KAAK,GAAE,OAAc,GACpB,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,KAAK,GAAE,OAAc,GACpB,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAGR"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/format.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,SAAS,CAAC;AA4CjB;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAMR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAOR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAiBR;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAIR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CA4BR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAoDR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,SAAS,CASX;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAkBR;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,KAAK,GAAE,OAAc,GACpB,MAAM,CAMR;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,EACpB,KAAK,GAAE,OAAc,GACpB,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAGR;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAGR;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAST;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,QAAQ,GAAE,UAAkB,GAC3B,MAAM,CAGR;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,UAAU,GACnB,MAAM,CAgBR"}
@@ -313,3 +313,107 @@ export function getDateInTimezone(utcIso, timezone) {
313
313
  const zonedDate = getZonedDate(utcIso, timezone);
314
314
  return format(zonedDate, DATE_FORMATS.API_DATE);
315
315
  }
316
+ // ============================================================================
317
+ // Additional Formatting Functions
318
+ // ============================================================================
319
+ /**
320
+ * Formats an hour number (0-23) to a display string with AM/PM.
321
+ * This is a simple utility that doesn't require timezone since it works
322
+ * with a raw hour number, not a datetime.
323
+ *
324
+ * @param hour - Hour number (0-23)
325
+ * @returns Formatted hour string (e.g., "8 PM", "12 AM")
326
+ *
327
+ * @example
328
+ * formatHour(8) // "8 AM"
329
+ * formatHour(20) // "8 PM"
330
+ * formatHour(0) // "12 AM"
331
+ * formatHour(12) // "12 PM"
332
+ */
333
+ export function formatHour(hour) {
334
+ const suffix = hour >= 12 ? 'PM' : 'AM';
335
+ const displayHour = hour % 12 || 12;
336
+ return `${displayHour} ${suffix}`;
337
+ }
338
+ /**
339
+ * Checks if a UTC datetime represents today in the specified timezone.
340
+ *
341
+ * @param utcIso - UTC ISO datetime string
342
+ * @param timezone - IANA timezone ID
343
+ * @returns True if the date is today in the given timezone
344
+ * @throws {DateTimeError} If timezone or ISO string is invalid
345
+ *
346
+ * @example
347
+ * isToday('2025-01-04T19:00:00Z', 'America/Los_Angeles')
348
+ * // true (if today is Jan 4, 2025 in LA)
349
+ */
350
+ export function isToday(utcIso, timezone) {
351
+ const zonedDate = getZonedDate(utcIso, timezone);
352
+ const nowZoned = toZonedTime(new Date(), timezone);
353
+ return (zonedDate.getDate() === nowZoned.getDate() &&
354
+ zonedDate.getMonth() === nowZoned.getMonth() &&
355
+ zonedDate.getFullYear() === nowZoned.getFullYear());
356
+ }
357
+ /**
358
+ * Formats a date for simple display (e.g., lists, dropdowns).
359
+ * Format: "Jan 15, 2024"
360
+ *
361
+ * This is a convenience function that defaults to UTC when no timezone is provided.
362
+ * For timezone-aware formatting, use formatEventDate instead.
363
+ *
364
+ * @param utcIso - UTC ISO datetime string
365
+ * @param timezone - Optional IANA timezone ID (defaults to 'UTC')
366
+ * @returns Formatted date string (e.g., "Jan 15, 2024")
367
+ * @throws {DateTimeError} If ISO string is invalid
368
+ *
369
+ * @example
370
+ * formatShortDate('2024-01-15T20:30:00Z')
371
+ * // "Jan 15, 2024" (in UTC)
372
+ *
373
+ * formatShortDate('2024-01-15T20:30:00Z', 'America/Los_Angeles')
374
+ * // "Jan 15, 2024" (in LA timezone)
375
+ */
376
+ export function formatShortDate(utcIso, timezone = 'UTC') {
377
+ const zonedDate = getZonedDate(utcIso, timezone);
378
+ return format(zonedDate, DATE_FORMATS.DISPLAY_DATE);
379
+ }
380
+ /**
381
+ * Formats a time range with clean formatting (omits :00 minutes).
382
+ * More compact display for times on the hour.
383
+ *
384
+ * @param startUtc - Start time as UTC ISO string
385
+ * @param endUtc - End time as UTC ISO string
386
+ * @param timezone - IANA timezone ID
387
+ * @returns Formatted time range (e.g., "8 PM - 11 PM" or "8:30 PM - 11 PM")
388
+ * @throws {DateTimeError} If timezone or ISO strings are invalid
389
+ *
390
+ * @example
391
+ * formatCleanTimeRange(
392
+ * '2023-12-25T03:00:00Z',
393
+ * '2023-12-25T06:00:00Z',
394
+ * 'America/Los_Angeles'
395
+ * )
396
+ * // "7 PM - 10 PM" (times are on the hour, so no :00)
397
+ *
398
+ * formatCleanTimeRange(
399
+ * '2023-12-25T03:30:00Z',
400
+ * '2023-12-25T06:00:00Z',
401
+ * 'America/Los_Angeles'
402
+ * )
403
+ * // "7:30 PM - 10 PM"
404
+ */
405
+ export function formatCleanTimeRange(startUtc, endUtc, timezone) {
406
+ const formatCleanTime = (utcIso) => {
407
+ const zonedDate = getZonedDate(utcIso, timezone);
408
+ const minutes = zonedDate.getMinutes();
409
+ if (minutes === 0) {
410
+ // Omit minutes if on the hour: "8 PM"
411
+ return format(zonedDate, 'h a');
412
+ }
413
+ // Include minutes: "8:30 PM"
414
+ return format(zonedDate, DATE_FORMATS.DISPLAY_TIME);
415
+ };
416
+ const startTime = formatCleanTime(startUtc);
417
+ const endTime = formatCleanTime(endUtc);
418
+ return `${startTime} - ${endTime}`;
419
+ }
@@ -38,6 +38,6 @@ export { DateTimeError, DateTimeErrorCode } from './types';
38
38
  export { COMMON_US_TIMEZONES, DATE_FORMATS, DEFAULT_TIMEZONE, DURATIONS, DURATIONS_MINUTES, EVENT_DEFAULTS, LEGACY_TIMEZONE_MAP, RELATIVE_TIME_THRESHOLDS, } from './constants';
39
39
  export { formatTimezoneForDisplay, getAllTimezones, getCommonUSTimezoneOptions, getIANATimezone, getTimezoneDisplayName, getTimezoneOffset, getTimezoneOptions, getUserTimezone, getVenueTimezone, isDST, isValidIANATimezone, isValidTimezone, normalizeTimezone, } from './timezone';
40
40
  export type { TimezoneOption } from './timezone';
41
- export { formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, } from './format';
41
+ export { formatCleanTimeRange, formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatHour, formatMonth, formatNotificationTime, formatRelativeTime, formatShortDate, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, isToday, } from './format';
42
42
  export { combineDateAndTime, formatDateTimeForAPI, isNextDayTime, minutesToTimeString, parseDateTimeFromAPI, parseEndOfDay, parseLocalToUTC, parseStartOfDay, parseTimeToMinutes, parseUTCToLocal, stripNextDayPrefix, } from './parse';
43
43
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,YAAY,EACV,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG3D,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,KAAK,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,YAAY,EACV,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAG3D,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,KAAK,EACL,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,OAAO,GACR,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -39,6 +39,6 @@ export { COMMON_US_TIMEZONES, DATE_FORMATS, DEFAULT_TIMEZONE, DURATIONS, DURATIO
39
39
  // Timezone utilities
40
40
  export { formatTimezoneForDisplay, getAllTimezones, getCommonUSTimezoneOptions, getIANATimezone, getTimezoneDisplayName, getTimezoneOffset, getTimezoneOptions, getUserTimezone, getVenueTimezone, isDST, isValidIANATimezone, isValidTimezone, normalizeTimezone, } from './timezone';
41
41
  // Format functions
42
- export { formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatMonth, formatNotificationTime, formatRelativeTime, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, } from './format';
42
+ export { formatCleanTimeRange, formatDateRange, formatDayOfWeek, formatEventDate, formatEventDateTime, formatEventTime, formatHour, formatMonth, formatNotificationTime, formatRelativeTime, formatShortDate, formatTimeRange, getDateInTimezone, getDateParts, getHourInTimezone, isToday, } from './format';
43
43
  // Parse functions
44
44
  export { combineDateAndTime, formatDateTimeForAPI, isNextDayTime, minutesToTimeString, parseDateTimeFromAPI, parseEndOfDay, parseLocalToUTC, parseStartOfDay, parseTimeToMinutes, parseUTCToLocal, stripNextDayPrefix, } from './parse';
@@ -1 +1 @@
1
- {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE7D,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAiCD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0BzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAoBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,UAAU,EACpB,IAAI,GAAE,IAAiB,GACtB,MAAM,CA2BR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAiBnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CA+C9D;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,GAAE,IAAiB,GAAG,OAAO,CA0B5E;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAuB/E;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wBAAkB,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA0BjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAOrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,EAAE,CAe7D"}
1
+ {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE7D,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAiCD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0BzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,CAoBrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,UAAU,EACpB,IAAI,GAAE,IAAiB,GACtB,MAAM,CA2BR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAiBnE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CA+C9D;AAED;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,GAAE,IAAiB,GAAG,OAAO,CA0B5E;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,CAuB/E;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,wBAAkB,CAAC;AAEnD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAI1C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA0BjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAOrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,IAAI,cAAc,EAAE,CAe7D"}
@@ -298,6 +298,8 @@ export const isValidIANATimezone = isValidTimezone;
298
298
  * // ['Africa/Abidjan', 'Africa/Accra', ..., 'Pacific/Wallis']
299
299
  */
300
300
  export function getAllTimezones() {
301
+ // Cast to any to support Intl.supportedValuesOf which is ES2023+
302
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
301
303
  return Intl.supportedValuesOf('timeZone');
302
304
  }
303
305
  /**
@@ -74,6 +74,10 @@ export interface FormatOptions {
74
74
  includeYear?: boolean;
75
75
  /** Use short month names (default: true) */
76
76
  shortMonth?: boolean;
77
+ /** Include date in the output (default: true) */
78
+ includeDate?: boolean;
79
+ /** Include time in the output (default: true) */
80
+ includeTime?: boolean;
77
81
  }
78
82
  /**
79
83
  * Venue object with timezone information.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,GAAG,EAAE,aAAa,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/datetime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,KAAK,EAAE,aAAa,CAAC;IACrB,iCAAiC;IACjC,GAAG,EAAE,aAAa,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,IAAI,EAAE,iBAAiB;aACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,iBAAiB,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED;;GAEG;AACH,oBAAY,iBAAiB;IAC3B,gBAAgB,qBAAqB;IACrC,kBAAkB,uBAAuB;IACzC,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,gBAAgB,qBAAqB;IACrC,WAAW,gBAAgB;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"createFormStore.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/forms/createFormStore.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1D,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAGzC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAG1B,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACtD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,IAAI,CAAC;IAG5B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CAC3D;AAMD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,WAAW,EAAE,CAAC,EACd,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAChC,SAAS,CAAC,CAAC,CAAC,CAyOd"}
1
+ {"version":3,"file":"createFormStore.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/forms/createFormStore.svelte.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEvC;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1D,IAAI,EAAE,CAAC,CAAC;IACR,YAAY,EAAE,CAAC,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAGzC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IAGpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAG1B,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACtD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACnD,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IAC7C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,eAAe,EAAE,MAAM,IAAI,CAAC;IAG5B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CAC3D;AAMD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EACtB,WAAW,EAAE,CAAC,EACd,OAAO,GAAE,gBAAgB,CAAC,CAAC,CAAM,GAChC,SAAS,CAAC,CAAC,CAAC,CA0Od"}
@@ -111,11 +111,12 @@ export function createFormStore(schema, initialData, options = {}) {
111
111
  }
112
112
  function isSectionDirty(sectionName) {
113
113
  const sectionFields = sections[sectionName];
114
- if (!sectionFields || !originalData)
114
+ const original = originalData;
115
+ if (!sectionFields || !original)
115
116
  return false;
116
117
  return sectionFields.some(field => {
117
118
  const currentVal = JSON.stringify(data[field]);
118
- const originalVal = JSON.stringify(originalData[field]);
119
+ const originalVal = JSON.stringify(original[field]);
119
120
  return currentVal !== originalVal;
120
121
  });
121
122
  }
package/dist/index.d.ts CHANGED
@@ -48,6 +48,7 @@ export { default as Input } from "./primitives/Input/Input.svelte";
48
48
  export { default as Select } from "./primitives/Input/Select.svelte";
49
49
  export { default as Textarea } from "./primitives/Input/Textarea.svelte";
50
50
  export { default as Label } from "./primitives/Label/Label.svelte";
51
+ export { default as NumberInput } from "./primitives/NumberInput/NumberInput.svelte";
51
52
  export { default as Modal } from "./primitives/Modal/Modal.svelte";
52
53
  export { default as Pagination } from "./primitives/Pagination/Pagination.svelte";
53
54
  export { default as Radio } from "./primitives/Radio/Radio.svelte";
package/dist/index.js CHANGED
@@ -82,6 +82,9 @@ export { default as Textarea } from './primitives/Input/Textarea.svelte';
82
82
  // Label
83
83
  export { default as Label } from './primitives/Label/Label.svelte';
84
84
 
85
+ // NumberInput
86
+ export { default as NumberInput } from './primitives/NumberInput/NumberInput.svelte';
87
+
85
88
  // Modal (base only - composite modals are in recipes/modals)
86
89
  export { default as Modal } from './primitives/Modal/Modal.svelte';
87
90
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.d.ts","sourceRoot":"","sources":["../src/lib/index.spec.js"],"names":[],"mappings":""}