@datum-cloud/datum-ui 0.8.1 → 0.10.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 (252) hide show
  1. package/dist/{adapter-context-NyGTDZYq.mjs → adapter-context-DemTWhel.mjs} +3 -3
  2. package/dist/alert/index.mjs +1 -1
  3. package/dist/{alert-BDj6od5I.mjs → alert-Cz56SqdN.mjs} +2 -2
  4. package/dist/app-navigation/index.mjs +2 -2
  5. package/dist/{app-navigation-rSOfo1KV.mjs → app-navigation-CG0A8Qjz.mjs} +12 -6
  6. package/dist/autocomplete/index.mjs +1 -1
  7. package/dist/{autocomplete-DdbTQe6u.mjs → autocomplete-ChuPNldi.mjs} +6 -6
  8. package/dist/autosearch/index.mjs +12 -12
  9. package/dist/avatar-stack/index.mjs +1 -1
  10. package/dist/{avatar-stack-CDhlA1Nm.mjs → avatar-stack-WqoQ3l06.mjs} +1 -1
  11. package/dist/{button-D3RrsMfQ.mjs → button-Rw1xI-k9.mjs} +2 -2
  12. package/dist/calendar/index.mjs +1 -1
  13. package/dist/calendar-D_DriVHT.mjs +77 -0
  14. package/dist/{calendar-C-Hbf74r.mjs → calendar-Dwvq3Vu_.mjs} +6 -6
  15. package/dist/calendar-date-picker-CchHKodM.mjs +52 -0
  16. package/dist/chart/index.mjs +1 -1
  17. package/dist/{chart-CUa21ynK.mjs → chart-DgcOwkOh.mjs} +5 -5
  18. package/dist/code-editor/index.mjs +1 -1
  19. package/dist/{col-DISdGlqY.mjs → col-Q6yazFwL.mjs} +2 -1
  20. package/dist/components/base/button/button.d.ts.map +1 -1
  21. package/dist/components/features/app-navigation/app-navigation.d.ts +5 -1
  22. package/dist/components/features/app-navigation/app-navigation.d.ts.map +1 -1
  23. package/dist/components/features/app-navigation/nav-menu.d.ts +4 -1
  24. package/dist/components/features/app-navigation/nav-menu.d.ts.map +1 -1
  25. package/dist/components/features/calendar-date-picker/calendar-date-picker.d.ts +6 -5
  26. package/dist/components/features/calendar-date-picker/calendar-date-picker.d.ts.map +1 -1
  27. package/dist/components/features/calendar-date-picker/types.d.ts +19 -0
  28. package/dist/components/features/calendar-date-picker/types.d.ts.map +1 -1
  29. package/dist/components/features/code-editor/code-editor.d.ts +1 -1
  30. package/dist/components/features/code-editor/code-editor.d.ts.map +1 -1
  31. package/dist/components/features/code-editor/index.d.ts +1 -1
  32. package/dist/components/features/code-editor/index.d.ts.map +1 -1
  33. package/dist/components/features/code-editor/types.d.ts +25 -2
  34. package/dist/components/features/code-editor/types.d.ts.map +1 -1
  35. package/dist/components/features/data-table/core/client-provider.d.ts.map +1 -1
  36. package/dist/components/features/date-time-picker/date-time-picker.d.ts +12 -4
  37. package/dist/components/features/date-time-picker/date-time-picker.d.ts.map +1 -1
  38. package/dist/components/features/date-time-picker/types.d.ts +9 -0
  39. package/dist/components/features/date-time-picker/types.d.ts.map +1 -1
  40. package/dist/components/features/grid/components/col.d.ts +1 -1
  41. package/dist/components/features/grid/components/col.d.ts.map +1 -1
  42. package/dist/components/features/grid/components/row.d.ts +1 -1
  43. package/dist/components/features/grid/components/row.d.ts.map +1 -1
  44. package/dist/components/features/index.d.ts +1 -0
  45. package/dist/components/features/index.d.ts.map +1 -1
  46. package/dist/components/features/logo/index.d.ts +7 -0
  47. package/dist/components/features/logo/index.d.ts.map +1 -0
  48. package/dist/components/features/logo/logo-flat.d.ts +28 -0
  49. package/dist/components/features/logo/logo-flat.d.ts.map +1 -0
  50. package/dist/components/features/logo/logo-icon.d.ts +27 -0
  51. package/dist/components/features/logo/logo-icon.d.ts.map +1 -0
  52. package/dist/components/features/logo/logo-stacked.d.ts +24 -0
  53. package/dist/components/features/logo/logo-stacked.d.ts.map +1 -0
  54. package/dist/components/features/logo/logo-text.d.ts +27 -0
  55. package/dist/components/features/logo/logo-text.d.ts.map +1 -0
  56. package/dist/components/features/logo/logo.d.ts +24 -0
  57. package/dist/components/features/logo/logo.d.ts.map +1 -0
  58. package/dist/components/features/logo/logo.styles.d.ts +28 -0
  59. package/dist/components/features/logo/logo.styles.d.ts.map +1 -0
  60. package/dist/components/features/logo/themed/index.d.ts +2 -0
  61. package/dist/components/features/logo/themed/index.d.ts.map +1 -0
  62. package/dist/components/features/logo/themed/logo-themed.d.ts +54 -0
  63. package/dist/components/features/logo/themed/logo-themed.d.ts.map +1 -0
  64. package/dist/components/features/picker/components/calendar.d.ts +14 -0
  65. package/dist/components/features/picker/components/calendar.d.ts.map +1 -0
  66. package/dist/components/features/picker/components/content.d.ts +18 -0
  67. package/dist/components/features/picker/components/content.d.ts.map +1 -0
  68. package/dist/components/features/picker/components/context.d.ts +57 -0
  69. package/dist/components/features/picker/components/context.d.ts.map +1 -0
  70. package/dist/components/features/picker/components/footer.d.ts +35 -0
  71. package/dist/components/features/picker/components/footer.d.ts.map +1 -0
  72. package/dist/components/features/picker/components/index.d.ts +36 -0
  73. package/dist/components/features/picker/components/index.d.ts.map +1 -0
  74. package/dist/components/features/picker/components/presets.d.ts +9 -0
  75. package/dist/components/features/picker/components/presets.d.ts.map +1 -0
  76. package/dist/components/features/picker/components/root.d.ts +40 -0
  77. package/dist/components/features/picker/components/root.d.ts.map +1 -0
  78. package/dist/components/features/picker/components/time-input-field.d.ts +13 -0
  79. package/dist/components/features/picker/components/time-input-field.d.ts.map +1 -0
  80. package/dist/components/features/picker/components/time-input.d.ts +13 -0
  81. package/dist/components/features/picker/components/time-input.d.ts.map +1 -0
  82. package/dist/components/features/picker/components/timezone-indicator.d.ts +14 -0
  83. package/dist/components/features/picker/components/timezone-indicator.d.ts.map +1 -0
  84. package/dist/components/features/picker/components/timezone-select.d.ts +16 -0
  85. package/dist/components/features/picker/components/timezone-select.d.ts.map +1 -0
  86. package/dist/components/features/picker/components/trigger.d.ts +23 -0
  87. package/dist/components/features/picker/components/trigger.d.ts.map +1 -0
  88. package/dist/components/features/picker/hooks/index.d.ts +5 -0
  89. package/dist/components/features/picker/hooks/index.d.ts.map +1 -0
  90. package/dist/components/features/picker/hooks/use-keyboard-shortcuts.d.ts +25 -0
  91. package/dist/components/features/picker/hooks/use-keyboard-shortcuts.d.ts.map +1 -0
  92. package/dist/components/features/picker/hooks/use-picker-state.d.ts +51 -0
  93. package/dist/components/features/picker/hooks/use-picker-state.d.ts.map +1 -0
  94. package/dist/components/features/picker/hooks/use-presets.d.ts +24 -0
  95. package/dist/components/features/picker/hooks/use-presets.d.ts.map +1 -0
  96. package/dist/components/features/picker/hooks/use-time-slots.d.ts +21 -0
  97. package/dist/components/features/picker/hooks/use-time-slots.d.ts.map +1 -0
  98. package/dist/components/features/picker/index.d.ts +8 -0
  99. package/dist/components/features/picker/index.d.ts.map +1 -0
  100. package/dist/components/features/picker/internal/use-deprecation-warning.d.ts +9 -0
  101. package/dist/components/features/picker/internal/use-deprecation-warning.d.ts.map +1 -0
  102. package/dist/components/features/picker/presets/defaults.d.ts +16 -0
  103. package/dist/components/features/picker/presets/defaults.d.ts.map +1 -0
  104. package/dist/components/features/picker/presets/index.d.ts +2 -0
  105. package/dist/components/features/picker/presets/index.d.ts.map +1 -0
  106. package/dist/components/features/picker/types.d.ts +70 -0
  107. package/dist/components/features/picker/types.d.ts.map +1 -0
  108. package/dist/components/features/picker/utils/commit.d.ts +16 -0
  109. package/dist/components/features/picker/utils/commit.d.ts.map +1 -0
  110. package/dist/components/features/picker/utils/compare.d.ts +12 -0
  111. package/dist/components/features/picker/utils/compare.d.ts.map +1 -0
  112. package/dist/components/features/picker/utils/format-value.d.ts +25 -0
  113. package/dist/components/features/picker/utils/format-value.d.ts.map +1 -0
  114. package/dist/components/features/picker/utils/format.d.ts +38 -0
  115. package/dist/components/features/picker/utils/format.d.ts.map +1 -0
  116. package/dist/components/features/picker/utils/index.d.ts +7 -0
  117. package/dist/components/features/picker/utils/index.d.ts.map +1 -0
  118. package/dist/components/features/picker/utils/range.d.ts +26 -0
  119. package/dist/components/features/picker/utils/range.d.ts.map +1 -0
  120. package/dist/components/features/picker/utils/timezone.d.ts +38 -0
  121. package/dist/components/features/picker/utils/timezone.d.ts.map +1 -0
  122. package/dist/components/features/picker/wrappers/date-picker.d.ts +10 -0
  123. package/dist/components/features/picker/wrappers/date-picker.d.ts.map +1 -0
  124. package/dist/components/features/picker/wrappers/date-range-picker.d.ts +16 -0
  125. package/dist/components/features/picker/wrappers/date-range-picker.d.ts.map +1 -0
  126. package/dist/components/features/picker/wrappers/date-range-time-picker.d.ts +16 -0
  127. package/dist/components/features/picker/wrappers/date-range-time-picker.d.ts.map +1 -0
  128. package/dist/components/features/picker/wrappers/date-time-picker.d.ts +20 -0
  129. package/dist/components/features/picker/wrappers/date-time-picker.d.ts.map +1 -0
  130. package/dist/components/features/picker/wrappers/date-time-range-picker.d.ts +16 -0
  131. package/dist/components/features/picker/wrappers/date-time-range-picker.d.ts.map +1 -0
  132. package/dist/components/features/picker/wrappers/index.d.ts +16 -0
  133. package/dist/components/features/picker/wrappers/index.d.ts.map +1 -0
  134. package/dist/components/features/picker/wrappers/internal/default-footer.d.ts +7 -0
  135. package/dist/components/features/picker/wrappers/internal/default-footer.d.ts.map +1 -0
  136. package/dist/components/features/picker/wrappers/time-picker.d.ts +14 -0
  137. package/dist/components/features/picker/wrappers/time-picker.d.ts.map +1 -0
  138. package/dist/components/features/picker/wrappers/time-range-picker.d.ts +16 -0
  139. package/dist/components/features/picker/wrappers/time-range-picker.d.ts.map +1 -0
  140. package/dist/components/features/picker/wrappers/types.d.ts +118 -0
  141. package/dist/components/features/picker/wrappers/types.d.ts.map +1 -0
  142. package/dist/components/features/tag-input/tag-input.d.ts +1 -1
  143. package/dist/components/features/tag-input/tag-input.d.ts.map +1 -1
  144. package/dist/components/features/time-picker/time-picker.d.ts +5 -0
  145. package/dist/components/features/time-picker/time-picker.d.ts.map +1 -1
  146. package/dist/components/features/time-picker/types.d.ts +5 -0
  147. package/dist/components/features/time-picker/types.d.ts.map +1 -1
  148. package/dist/components/features/time-range-picker/index.d.ts +5 -0
  149. package/dist/components/features/time-range-picker/index.d.ts.map +1 -1
  150. package/dist/components/features/time-range-picker/time-range-picker.d.ts +19 -14
  151. package/dist/components/features/time-range-picker/time-range-picker.d.ts.map +1 -1
  152. package/dist/components/features/time-range-picker/types.d.ts +20 -0
  153. package/dist/components/features/time-range-picker/types.d.ts.map +1 -1
  154. package/dist/data-table/index.mjs +22 -15
  155. package/dist/date-picker/index.mjs +2 -2
  156. package/dist/date-range-picker-DNZh06zo.mjs +77 -0
  157. package/dist/date-time-picker/index.mjs +1 -1
  158. package/dist/date-time-picker-BiobghTJ.mjs +43 -0
  159. package/dist/date-time-picker-C0fF7s_e.mjs +109 -0
  160. package/dist/date-time-range-picker-BAsH_Wv9.mjs +82 -0
  161. package/dist/default-footer-DbpemJVl.mjs +1037 -0
  162. package/dist/dropzone/index.mjs +1 -1
  163. package/dist/{dropzone-Bt0plEuw.mjs → dropzone-DXH0xHso.mjs} +1 -1
  164. package/dist/empty-content/index.mjs +1 -1
  165. package/dist/form/adapters/conform/index.mjs +19 -19
  166. package/dist/form/adapters/rhf/index.mjs +18 -18
  167. package/dist/form/index.mjs +2 -2
  168. package/dist/form/stepper/index.mjs +25 -23
  169. package/dist/{form-CCNN9VtJ.mjs → form-DvgKb4s4.mjs} +49 -42
  170. package/dist/{form-context-CeKyvO-A.mjs → form-context-0usxTumz.mjs} +3 -3
  171. package/dist/grid/index.mjs +1 -1
  172. package/dist/hooks/index.mjs +2 -2
  173. package/dist/index.mjs +44 -42
  174. package/dist/input-group/index.mjs +1 -1
  175. package/dist/{input-group-DDtz-RT7.mjs → input-group-CeMsDhOk.mjs} +1 -1
  176. package/dist/input-number/index.mjs +1 -1
  177. package/dist/{input-number-Diu-C6d5.mjs → input-number-BU4nno8J.mjs} +1 -1
  178. package/dist/loader-overlay/index.mjs +1 -1
  179. package/dist/logo/index.mjs +3 -0
  180. package/dist/logo/themed/index.mjs +106 -0
  181. package/dist/logo-BQVyMDDx.mjs +23 -0
  182. package/dist/logo-text-BW31T2dS.mjs +227 -0
  183. package/dist/map/index.mjs +1 -1
  184. package/dist/{map-qo7bY_g_.mjs → map-t6n7VaX1.mjs} +24 -27
  185. package/dist/more-actions/index.mjs +2 -2
  186. package/dist/{more-actions-Ca5qqd0H.mjs → more-actions-Bp0b_jek.mjs} +2 -2
  187. package/dist/multi-select/index.mjs +1 -1
  188. package/dist/{multi-select-DM_dxnSV.mjs → multi-select-7jly2Hcd.mjs} +6 -6
  189. package/dist/page-title/index.mjs +1 -1
  190. package/dist/picker/index.mjs +273 -0
  191. package/dist/rich-text-editor/index.mjs +1 -1
  192. package/dist/{rich-text-editor-CQH_U4T5.mjs → rich-text-editor-Ddqx_EiO.mjs} +1 -1
  193. package/dist/select/index.mjs +1 -1
  194. package/dist/select-By1ZqPgr.mjs +94 -0
  195. package/dist/select-Ck0szhAH.mjs +73 -0
  196. package/dist/sidebar/index.mjs +1 -1
  197. package/dist/{sidebar-B8LQJiNI.mjs → sidebar-CUnFkH7o.mjs} +32 -32
  198. package/dist/skeleton/index.mjs +1 -1
  199. package/dist/{skeleton-D4HOEiOZ.mjs → skeleton-CxAhQT6T.mjs} +1 -1
  200. package/dist/stepper/index.mjs +1 -1
  201. package/dist/{stepper-Beb-zbdL.mjs → stepper-BMC_QbJK.mjs} +7 -7
  202. package/dist/styles/root.css +4 -2
  203. package/dist/styles/shadcn/shadcn.css +212 -213
  204. package/dist/switch/index.mjs +1 -1
  205. package/dist/table/index.mjs +1 -1
  206. package/dist/tag-input/index.mjs +1 -1
  207. package/dist/{tag-input-Bf4GMptp.mjs → tag-input-CV1JbKTm.mjs} +1 -1
  208. package/dist/task-queue/index.mjs +1 -1
  209. package/dist/{task-queue-dropdown-D-LncEWm.mjs → task-queue-dropdown-J1FuQOSr.mjs} +3 -3
  210. package/dist/textarea/index.mjs +1 -1
  211. package/dist/theme/index.mjs +1 -1
  212. package/dist/{themes-CAiN4b6G.mjs → themes-08-znmBI.mjs} +16 -16
  213. package/dist/time-input-9LdNL0Us.mjs +196 -0
  214. package/dist/time-picker/index.mjs +1 -1
  215. package/dist/time-picker-B-vpUClR.mjs +45 -0
  216. package/dist/time-picker-C840fLl6.mjs +49 -0
  217. package/dist/timezone-indicator-COoeMKKs.mjs +27 -0
  218. package/dist/{to-api-format-CgKcC9SK.mjs → to-api-format-CmXTvYka.mjs} +58 -243
  219. package/dist/toast/index.mjs +2 -2
  220. package/dist/{toast-DDdLgY53.mjs → toast-Bd5Kk7BB.mjs} +1 -1
  221. package/dist/tooltip/index.mjs +1 -1
  222. package/dist/transfer/index.mjs +1 -1
  223. package/dist/{transfer-CoGPwOc6.mjs → transfer-CuJGL420.mjs} +6 -6
  224. package/dist/{types-CKIe2WlV.mjs → types-DvMIxilw.mjs} +9 -3
  225. package/dist/typography/index.mjs +1 -1
  226. package/dist/{typography-TRKP_CLT.mjs → typography-CBwfg-vz.mjs} +5 -5
  227. package/dist/{use-copy-to-clipboard-D7KyLIAt.mjs → use-copy-to-clipboard-ZHDvfV3W.mjs} +1 -1
  228. package/dist/use-deprecation-warning-Dy_DOyLu.mjs +20 -0
  229. package/dist/{use-display-touched-C-afz17j.mjs → use-display-touched-CiY6ajpy.mjs} +5 -5
  230. package/dist/{use-option-picker-BXQOfyrK.mjs → use-option-picker-DV5O68eV.mjs} +1 -1
  231. package/dist/utils/index.mjs +1 -1
  232. package/dist/visually-hidden/index.mjs +1 -1
  233. package/package.json +40 -25
  234. package/dist/calendar-date-picker-BaykEs6j.mjs +0 -749
  235. package/dist/date-time-picker-DKOxrhmc.mjs +0 -193
  236. package/dist/select-zxwykvQn.mjs +0 -163
  237. package/dist/time-picker-BZF5jbF6.mjs +0 -99
  238. package/dist/use-date-constraints-R3H4lIoT.mjs +0 -41
  239. /package/dist/{action-row-DnhBhMtt.mjs → action-row-DXw4UnHU.mjs} +0 -0
  240. /package/dist/{empty-content-CBh5bbtJ.mjs → empty-content-DTk_lwnh.mjs} +0 -0
  241. /package/dist/{hooks-DQXVwbrs.mjs → hooks-BPxgIHKV.mjs} +0 -0
  242. /package/dist/{loader-overlay-C2WDla6V.mjs → loader-overlay-B3YEoOFJ.mjs} +0 -0
  243. /package/dist/{map-leaflet-imports-yWwH4CHB.mjs → map-leaflet-imports-C8l0RTTP.mjs} +0 -0
  244. /package/dist/{page-title-ChLiv6gB.mjs → page-title-CGW3f4qH.mjs} +0 -0
  245. /package/dist/{skeleton-D2xuJdE1.mjs → skeleton-B1NOdZGM.mjs} +0 -0
  246. /package/dist/{switch-DcSF42Kc.mjs → switch-BcQaR1Bp.mjs} +0 -0
  247. /package/dist/{table-DWGT4cqh.mjs → table-ouGk4Vxe.mjs} +0 -0
  248. /package/dist/{textarea-BoChBcFz.mjs → textarea-q-k7DYwi.mjs} +0 -0
  249. /package/dist/{toast-D5XD7goD.mjs → toast-BWol1pyV.mjs} +0 -0
  250. /package/dist/{tooltip-a7NTDCWw.mjs → tooltip-CHuzXR_O.mjs} +0 -0
  251. /package/dist/{utils-BwB1mIdZ.mjs → utils-C07H7h7q.mjs} +0 -0
  252. /package/dist/{visuallyhidden-BHOPczmW.mjs → visuallyhidden-CoIJOJ9z.mjs} +0 -0
@@ -1,749 +0,0 @@
1
- import { t as cn } from "./cn-D2KYQ917.mjs";
2
- import { t as Button } from "./button-D3RrsMfQ.mjs";
3
- import { t as Calendar$1 } from "./calendar-C-Hbf74r.mjs";
4
- import { t as ResponsivePopover } from "./responsive-popover-D-t9bxSN.mjs";
5
- import { i as SelectItem, l as SelectTrigger, n as SelectContent, t as Select, u as SelectValue } from "./select-zxwykvQn.mjs";
6
- import { t as useDateConstraints } from "./use-date-constraints-R3H4lIoT.mjs";
7
- import { cva } from "class-variance-authority";
8
- import { CalendarIcon, X } from "lucide-react";
9
- import * as React$1 from "react";
10
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
- import { endOfDay, endOfMonth, endOfWeek, endOfYear, startOfDay, startOfMonth, startOfWeek, startOfYear, subDays } from "date-fns";
12
- import { formatInTimeZone, toDate } from "date-fns-tz";
13
- //#region src/components/features/calendar-date-picker/types.ts
14
- const months = [
15
- "January",
16
- "February",
17
- "March",
18
- "April",
19
- "May",
20
- "June",
21
- "July",
22
- "August",
23
- "September",
24
- "October",
25
- "November",
26
- "December"
27
- ];
28
- const multiSelectVariants = cva("flex font-normal shadow-none items-center justify-center whitespace-nowrap rounded-md text-sm text-foreground ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", {
29
- variants: { variant: {
30
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
31
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
32
- outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
33
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
34
- ghost: "hover:bg-accent hover:text-accent-foreground text-background",
35
- link: "text-primary underline-offset-4 hover:underline text-background"
36
- } },
37
- defaultVariants: { variant: "default" }
38
- });
39
- //#endregion
40
- //#region src/components/features/calendar-date-picker/calendar-header.tsx
41
- function CalendarHeader({ monthFrom, yearFrom, monthTo, yearTo, years, numberOfMonths, onMonthChange, onYearChange }) {
42
- return /* @__PURE__ */ jsxs("div", {
43
- className: "flex items-center gap-4 px-3 py-2 sm:px-4 sm:py-3",
44
- children: [/* @__PURE__ */ jsxs("div", {
45
- className: "flex gap-2",
46
- children: [/* @__PURE__ */ jsxs(Select, {
47
- onValueChange: (value) => {
48
- onMonthChange(months.indexOf(value), "from");
49
- },
50
- value: monthFrom ? months[monthFrom.getMonth()] : void 0,
51
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
52
- className: "hover:bg-accent hover:text-accent-foreground hidden w-[122px] font-medium focus:ring-0 focus:ring-offset-0 sm:flex",
53
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Month" })
54
- }), /* @__PURE__ */ jsx(SelectContent, { children: months.map((month, idx) => /* @__PURE__ */ jsx(SelectItem, {
55
- value: month,
56
- children: month
57
- }, idx)) })]
58
- }), /* @__PURE__ */ jsxs(Select, {
59
- onValueChange: (value) => {
60
- onYearChange(Number(value), "from");
61
- },
62
- value: yearFrom ? yearFrom.toString() : void 0,
63
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
64
- className: "hover:bg-accent hover:text-accent-foreground hidden w-[122px] font-medium focus:ring-0 focus:ring-offset-0 sm:flex",
65
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Year" })
66
- }), /* @__PURE__ */ jsx(SelectContent, { children: years.map((year, idx) => /* @__PURE__ */ jsx(SelectItem, {
67
- value: year.toString(),
68
- children: year
69
- }, idx)) })]
70
- })]
71
- }), numberOfMonths === 2 && /* @__PURE__ */ jsxs("div", {
72
- className: "flex gap-2",
73
- children: [/* @__PURE__ */ jsxs(Select, {
74
- onValueChange: (value) => {
75
- onMonthChange(months.indexOf(value), "to");
76
- },
77
- value: monthTo ? months[monthTo.getMonth()] : void 0,
78
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
79
- className: "hover:bg-accent hover:text-accent-foreground hidden w-[122px] font-medium focus:ring-0 focus:ring-offset-0 sm:flex",
80
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Month" })
81
- }), /* @__PURE__ */ jsx(SelectContent, { children: months.map((month, idx) => /* @__PURE__ */ jsx(SelectItem, {
82
- value: month,
83
- children: month
84
- }, idx)) })]
85
- }), /* @__PURE__ */ jsxs(Select, {
86
- onValueChange: (value) => {
87
- onYearChange(Number(value), "to");
88
- },
89
- value: yearTo ? yearTo.toString() : void 0,
90
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
91
- className: "hover:bg-accent hover:text-accent-foreground hidden w-[122px] font-medium focus:ring-0 focus:ring-offset-0 sm:flex",
92
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Year" })
93
- }), /* @__PURE__ */ jsx(SelectContent, { children: years.map((year, idx) => /* @__PURE__ */ jsx(SelectItem, {
94
- value: year.toString(),
95
- children: year
96
- }, idx)) })]
97
- })]
98
- })]
99
- });
100
- }
101
- //#endregion
102
- //#region src/components/features/calendar-date-picker/calendar-presets.tsx
103
- function CalendarPresets({ dateRanges, selectedRange, onSelect }) {
104
- return /* @__PURE__ */ jsx("div", {
105
- className: "border-foreground/10 hidden flex-col gap-1 border-r pr-4 text-left md:flex",
106
- children: dateRanges.map(({ key, label, start, end }) => /* @__PURE__ */ jsx(Button, {
107
- variant: "ghost",
108
- size: "sm",
109
- className: cn("hover:bg-primary/90 hover:text-background justify-start", selectedRange === label && "bg-primary text-background hover:bg-primary/90 hover:text-background"),
110
- onClick: () => onSelect(start, end, label),
111
- children: label
112
- }, key))
113
- });
114
- }
115
- //#endregion
116
- //#region src/components/features/calendar-date-picker/date-trigger.tsx
117
- function DateTrigger({ ref, id, date, placeholder, disabled, numberOfMonths, highlightedPart, handleMouseOver, handleMouseLeave, handleClear, handleTogglePopover, formatWithTz, variant, className, triggerClassName, ...props }) {
118
- return /* @__PURE__ */ jsx(Button, {
119
- id: "date",
120
- ref,
121
- ...props,
122
- disabled,
123
- className: cn("w-full", triggerClassName, multiSelectVariants({
124
- variant,
125
- className
126
- })),
127
- onClick: handleTogglePopover,
128
- suppressHydrationWarning: true,
129
- children: /* @__PURE__ */ jsxs("div", {
130
- className: "flex w-full items-center justify-between gap-2",
131
- children: [/* @__PURE__ */ jsxs("div", {
132
- className: "flex items-center gap-2",
133
- children: [/* @__PURE__ */ jsx(CalendarIcon, { className: "text-muted-foreground h-4 w-4" }), /* @__PURE__ */ jsx("span", { children: date?.from ? date.to ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
134
- /* @__PURE__ */ jsx("span", {
135
- id: `firstDay-${id}`,
136
- className: cn("date-part", highlightedPart === "firstDay" && "font-bold underline"),
137
- onMouseOver: () => handleMouseOver("firstDay"),
138
- onMouseLeave: handleMouseLeave,
139
- children: formatWithTz(date.from, "dd")
140
- }),
141
- " ",
142
- /* @__PURE__ */ jsx("span", {
143
- id: `firstMonth-${id}`,
144
- className: cn("date-part", highlightedPart === "firstMonth" && "font-bold underline"),
145
- onMouseOver: () => handleMouseOver("firstMonth"),
146
- onMouseLeave: handleMouseLeave,
147
- children: formatWithTz(date.from, "LLL")
148
- }),
149
- ",",
150
- " ",
151
- /* @__PURE__ */ jsx("span", {
152
- id: `firstYear-${id}`,
153
- className: cn("date-part", highlightedPart === "firstYear" && "font-bold underline"),
154
- onMouseOver: () => handleMouseOver("firstYear"),
155
- onMouseLeave: handleMouseLeave,
156
- children: formatWithTz(date.from, "y")
157
- }),
158
- numberOfMonths === 2 && /* @__PURE__ */ jsxs(Fragment$1, { children: [
159
- " - ",
160
- /* @__PURE__ */ jsx("span", {
161
- id: `secondDay-${id}`,
162
- className: cn("date-part", highlightedPart === "secondDay" && "font-bold underline"),
163
- onMouseOver: () => handleMouseOver("secondDay"),
164
- onMouseLeave: handleMouseLeave,
165
- children: formatWithTz(date.to, "dd")
166
- }),
167
- " ",
168
- /* @__PURE__ */ jsx("span", {
169
- id: `secondMonth-${id}`,
170
- className: cn("date-part", highlightedPart === "secondMonth" && "font-bold underline"),
171
- onMouseOver: () => handleMouseOver("secondMonth"),
172
- onMouseLeave: handleMouseLeave,
173
- children: formatWithTz(date.to, "LLL")
174
- }),
175
- ",",
176
- " ",
177
- /* @__PURE__ */ jsx("span", {
178
- id: `secondYear-${id}`,
179
- className: cn("date-part", highlightedPart === "secondYear" && "font-bold underline"),
180
- onMouseOver: () => handleMouseOver("secondYear"),
181
- onMouseLeave: handleMouseLeave,
182
- children: formatWithTz(date.to, "y")
183
- })
184
- ] })
185
- ] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
186
- /* @__PURE__ */ jsx("span", {
187
- id: "day",
188
- className: cn("date-part", highlightedPart === "day" && "font-bold underline"),
189
- onMouseOver: () => handleMouseOver("day"),
190
- onMouseLeave: handleMouseLeave,
191
- children: formatWithTz(date.from, "dd")
192
- }),
193
- " ",
194
- /* @__PURE__ */ jsx("span", {
195
- id: "month",
196
- className: cn("date-part", highlightedPart === "month" && "font-bold underline"),
197
- onMouseOver: () => handleMouseOver("month"),
198
- onMouseLeave: handleMouseLeave,
199
- children: formatWithTz(date.from, "LLL")
200
- }),
201
- ",",
202
- " ",
203
- /* @__PURE__ */ jsx("span", {
204
- id: "year",
205
- className: cn("date-part", highlightedPart === "year" && "font-bold underline"),
206
- onMouseOver: () => handleMouseOver("year"),
207
- onMouseLeave: handleMouseLeave,
208
- children: formatWithTz(date.from, "y")
209
- })
210
- ] }) : /* @__PURE__ */ jsx("span", {
211
- className: "text-muted-foreground",
212
- children: placeholder || "Pick a date"
213
- }) })]
214
- }), date?.from && /* @__PURE__ */ jsxs("div", {
215
- onClick: handleClear,
216
- className: "text-muted-foreground hover:text-primary size-4 p-0 hover:bg-transparent",
217
- children: [/* @__PURE__ */ jsx(X, { size: 14 }), /* @__PURE__ */ jsx("span", {
218
- className: "sr-only",
219
- children: "Clear date"
220
- })]
221
- })]
222
- })
223
- });
224
- }
225
- //#endregion
226
- //#region src/components/features/calendar-date-picker/use-calendar-date-picker.ts
227
- function useCalendarDatePicker(props) {
228
- const { id = "calendar-date-picker", date, closeOnSelect = false, numberOfMonths = 2, yearsRange = 10, onDateSelect, excludePresets, customPresets, minDate, maxDate, disableFuture = false, disablePast = false, maxRange } = props;
229
- const [isPopoverOpen, setIsPopoverOpen] = React$1.useState(false);
230
- const [selectedRange, setSelectedRange] = React$1.useState(numberOfMonths === 2 ? "This Year" : "Today");
231
- const [monthFrom, setMonthFrom] = React$1.useState(date?.from);
232
- const [yearFrom, setYearFrom] = React$1.useState(date?.from?.getFullYear());
233
- const [monthTo, setMonthTo] = React$1.useState(numberOfMonths === 2 ? date?.to : date?.from);
234
- const [yearTo, setYearTo] = React$1.useState(numberOfMonths === 2 ? date?.to?.getFullYear() : date?.from?.getFullYear());
235
- const [highlightedPart, setHighlightedPart] = React$1.useState(null);
236
- const [pendingDate, setPendingDate] = React$1.useState(date);
237
- const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
238
- const today = /* @__PURE__ */ new Date();
239
- const { effectiveMinDate, effectiveMaxDate, isDateDisabled } = useDateConstraints({
240
- minDate,
241
- maxDate,
242
- disablePast,
243
- disableFuture
244
- });
245
- const getDaysDifference = React$1.useCallback((from, to) => {
246
- const timeDiff = Math.abs(to.getTime() - from.getTime());
247
- return Math.ceil(timeDiff / (1e3 * 60 * 60 * 24));
248
- }, []);
249
- const isRangeValid = React$1.useCallback((from, to) => {
250
- if (!maxRange) return true;
251
- if (numberOfMonths === 1) return true;
252
- return getDaysDifference(from, to) <= maxRange;
253
- }, [
254
- maxRange,
255
- numberOfMonths,
256
- getDaysDifference
257
- ]);
258
- const adjustRangeToMaxRange = React$1.useCallback((from, to) => {
259
- if (!maxRange || numberOfMonths === 1) return {
260
- from,
261
- to
262
- };
263
- if (getDaysDifference(from, to) <= maxRange) return {
264
- from,
265
- to
266
- };
267
- const adjustedTo = new Date(from.getTime() + maxRange * 24 * 60 * 60 * 1e3);
268
- if (effectiveMaxDate && adjustedTo > effectiveMaxDate) {
269
- const adjustedFrom = /* @__PURE__ */ new Date(to.getTime() - maxRange * 24 * 60 * 60 * 1e3);
270
- if (effectiveMinDate && adjustedFrom < effectiveMinDate) return {
271
- from,
272
- to
273
- };
274
- return {
275
- from: adjustedFrom,
276
- to
277
- };
278
- }
279
- return {
280
- from,
281
- to: adjustedTo
282
- };
283
- }, [
284
- maxRange,
285
- numberOfMonths,
286
- getDaysDifference,
287
- effectiveMinDate,
288
- effectiveMaxDate
289
- ]);
290
- React$1.useEffect(() => {
291
- setPendingDate(date);
292
- }, [date]);
293
- const handleTogglePopover = () => setIsPopoverOpen((prev) => !prev);
294
- const handleClear = (e) => {
295
- e.stopPropagation();
296
- onDateSelect(void 0);
297
- setPendingDate({
298
- from: void 0,
299
- to: void 0
300
- });
301
- setSelectedRange(null);
302
- };
303
- const handleApply = () => {
304
- if (pendingDate?.from) onDateSelect({
305
- from: pendingDate.from,
306
- to: pendingDate.to || pendingDate.from
307
- });
308
- setIsPopoverOpen(false);
309
- };
310
- const handleReset = () => {
311
- setPendingDate(date);
312
- setMonthFrom(date?.from);
313
- setYearFrom(date?.from?.getFullYear());
314
- setMonthTo(numberOfMonths === 2 ? date?.to : date?.from);
315
- setYearTo(numberOfMonths === 2 ? date?.to?.getFullYear() : date?.from?.getFullYear());
316
- setSelectedRange(null);
317
- };
318
- const selectDateRange = (from, to, range) => {
319
- const startDate = startOfDay(toDate(from, { timeZone }));
320
- const endDate = numberOfMonths === 2 ? endOfDay(toDate(to, { timeZone })) : startDate;
321
- if (isDateDisabled(startDate) || isDateDisabled(endDate)) return;
322
- let finalDates = {
323
- from: startDate,
324
- to: endDate
325
- };
326
- if (numberOfMonths === 2 && !isRangeValid(startDate, endDate)) {
327
- finalDates = adjustRangeToMaxRange(startDate, endDate);
328
- if (!isRangeValid(finalDates.from, finalDates.to)) return;
329
- }
330
- setPendingDate({
331
- from: finalDates.from,
332
- to: finalDates.to
333
- });
334
- setSelectedRange(range);
335
- setMonthFrom(finalDates.from);
336
- setYearFrom(finalDates.from.getFullYear());
337
- setMonthTo(finalDates.to);
338
- setYearTo(finalDates.to.getFullYear());
339
- if (closeOnSelect) {
340
- onDateSelect({
341
- from: finalDates.from,
342
- to: finalDates.to
343
- });
344
- setIsPopoverOpen(false);
345
- }
346
- };
347
- const handleDateSelect = (range) => {
348
- if (range) {
349
- let from = startOfDay(toDate(range.from, { timeZone }));
350
- let to = range.to ? endOfDay(toDate(range.to, { timeZone })) : from;
351
- if (numberOfMonths === 1) if (range.from !== pendingDate?.from) to = from;
352
- else from = startOfDay(toDate(range.to, { timeZone }));
353
- if (isDateDisabled(from) || isDateDisabled(to)) return;
354
- let finalDates = {
355
- from,
356
- to
357
- };
358
- if (numberOfMonths === 2 && !isRangeValid(from, to)) {
359
- finalDates = adjustRangeToMaxRange(from, to);
360
- if (!isRangeValid(finalDates.from, finalDates.to)) return;
361
- }
362
- setPendingDate({
363
- from: finalDates.from,
364
- to: finalDates.to
365
- });
366
- setMonthFrom(finalDates.from);
367
- setYearFrom(finalDates.from.getFullYear());
368
- setMonthTo(finalDates.to);
369
- setYearTo(finalDates.to.getFullYear());
370
- if (closeOnSelect) {
371
- onDateSelect({
372
- from: finalDates.from,
373
- to: finalDates.to
374
- });
375
- setIsPopoverOpen(false);
376
- }
377
- }
378
- setSelectedRange(null);
379
- };
380
- const handleMonthChange = (newMonthIndex, part) => {
381
- setSelectedRange(null);
382
- if (part === "from") {
383
- if (yearFrom !== void 0) {
384
- if (newMonthIndex < 0 || newMonthIndex > yearsRange + 1) return;
385
- const newMonth = new Date(yearFrom, newMonthIndex, 1);
386
- const from = numberOfMonths === 2 ? startOfMonth(toDate(newMonth, { timeZone })) : pendingDate?.from ? new Date(pendingDate.from.getFullYear(), newMonth.getMonth(), pendingDate.from.getDate()) : newMonth;
387
- const to = numberOfMonths === 2 ? pendingDate?.to ? endOfDay(toDate(pendingDate.to, { timeZone })) : endOfMonth(toDate(newMonth, { timeZone })) : from;
388
- if (from <= to) {
389
- setPendingDate({
390
- from,
391
- to
392
- });
393
- setMonthFrom(newMonth);
394
- setMonthTo(pendingDate?.to);
395
- }
396
- }
397
- } else if (yearTo !== void 0) {
398
- if (newMonthIndex < 0 || newMonthIndex > yearsRange + 1) return;
399
- const newMonth = new Date(yearTo, newMonthIndex, 1);
400
- const from = pendingDate?.from ? startOfDay(toDate(pendingDate.from, { timeZone })) : startOfMonth(toDate(newMonth, { timeZone }));
401
- const to = numberOfMonths === 2 ? endOfMonth(toDate(newMonth, { timeZone })) : from;
402
- if (from <= to) {
403
- setPendingDate({
404
- from,
405
- to
406
- });
407
- setMonthTo(newMonth);
408
- setMonthFrom(pendingDate?.from);
409
- }
410
- }
411
- };
412
- const years = Array.from({ length: yearsRange + 1 }, (_, i) => today.getFullYear() - yearsRange / 2 + i);
413
- const handleYearChange = (newYear, part) => {
414
- setSelectedRange(null);
415
- if (part === "from") {
416
- if (years.includes(newYear)) {
417
- const newMonth = monthFrom ? new Date(newYear, monthFrom ? monthFrom.getMonth() : 0, 1) : new Date(newYear, 0, 1);
418
- const from = numberOfMonths === 2 ? startOfMonth(toDate(newMonth, { timeZone })) : pendingDate?.from ? new Date(newYear, newMonth.getMonth(), pendingDate.from.getDate()) : newMonth;
419
- const to = numberOfMonths === 2 ? pendingDate?.to ? endOfDay(toDate(pendingDate.to, { timeZone })) : endOfMonth(toDate(newMonth, { timeZone })) : from;
420
- if (from <= to) {
421
- setPendingDate({
422
- from,
423
- to
424
- });
425
- setYearFrom(newYear);
426
- setMonthFrom(newMonth);
427
- setYearTo(pendingDate?.to?.getFullYear());
428
- setMonthTo(pendingDate?.to);
429
- }
430
- }
431
- } else if (years.includes(newYear)) {
432
- const newMonth = monthTo ? new Date(newYear, monthTo.getMonth(), 1) : new Date(newYear, 0, 1);
433
- const from = pendingDate?.from ? startOfDay(toDate(pendingDate.from, { timeZone })) : startOfMonth(toDate(newMonth, { timeZone }));
434
- const to = numberOfMonths === 2 ? endOfMonth(toDate(newMonth, { timeZone })) : from;
435
- if (from <= to) {
436
- setPendingDate({
437
- from,
438
- to
439
- });
440
- setYearTo(newYear);
441
- setMonthTo(newMonth);
442
- setYearFrom(pendingDate?.from?.getFullYear());
443
- setMonthFrom(pendingDate?.from);
444
- }
445
- }
446
- };
447
- const defaultDateRangePresets = [
448
- {
449
- key: "today",
450
- label: "Today",
451
- start: today,
452
- end: today
453
- },
454
- {
455
- key: "yesterday",
456
- label: "Yesterday",
457
- start: subDays(today, 1),
458
- end: subDays(today, 1)
459
- },
460
- {
461
- key: "thisWeek",
462
- label: "This Week",
463
- start: startOfWeek(today, { weekStartsOn: 1 }),
464
- end: endOfWeek(today, { weekStartsOn: 1 })
465
- },
466
- {
467
- key: "lastWeek",
468
- label: "Last Week",
469
- start: subDays(startOfWeek(today, { weekStartsOn: 1 }), 7),
470
- end: subDays(endOfWeek(today, { weekStartsOn: 1 }), 7)
471
- },
472
- {
473
- key: "last7Days",
474
- label: "Last 7 Days",
475
- start: subDays(today, 6),
476
- end: today
477
- },
478
- {
479
- key: "thisMonth",
480
- label: "This Month",
481
- start: startOfMonth(today),
482
- end: endOfMonth(today)
483
- },
484
- {
485
- key: "lastMonth",
486
- label: "Last Month",
487
- start: startOfMonth(subDays(today, today.getDate())),
488
- end: endOfMonth(subDays(today, today.getDate()))
489
- },
490
- {
491
- key: "thisYear",
492
- label: "This Year",
493
- start: startOfYear(today),
494
- end: endOfYear(today)
495
- },
496
- {
497
- key: "lastYear",
498
- label: "Last Year",
499
- start: startOfYear(subDays(today, 365)),
500
- end: endOfYear(subDays(today, 365))
501
- }
502
- ];
503
- const allDateRangePresets = customPresets || defaultDateRangePresets;
504
- const dateRanges = React$1.useMemo(() => {
505
- return allDateRangePresets.filter((preset) => {
506
- if (excludePresets?.includes(preset.key)) return false;
507
- const startValid = !isDateDisabled(preset.start);
508
- const endValid = !isDateDisabled(preset.end);
509
- const rangeValid = numberOfMonths === 1 || isRangeValid(preset.start, preset.end);
510
- return startValid && endValid && rangeValid;
511
- });
512
- }, [
513
- isDateDisabled,
514
- excludePresets,
515
- numberOfMonths,
516
- isRangeValid
517
- ]);
518
- const handleMouseOver = (part) => {
519
- setHighlightedPart(part);
520
- };
521
- const handleMouseLeave = () => {
522
- setHighlightedPart(null);
523
- };
524
- const handleWheel = (event) => {
525
- event.preventDefault();
526
- setSelectedRange(null);
527
- if (highlightedPart === "firstDay") {
528
- const newDate = new Date(pendingDate?.from);
529
- const increment = event.deltaY > 0 ? -1 : 1;
530
- newDate.setDate(newDate.getDate() + increment);
531
- if (newDate <= pendingDate?.to) {
532
- numberOfMonths === 2 ? setPendingDate({
533
- from: newDate,
534
- to: new Date(pendingDate?.to)
535
- }) : setPendingDate({
536
- from: newDate,
537
- to: newDate
538
- });
539
- setMonthFrom(newDate);
540
- } else if (newDate > pendingDate?.to && numberOfMonths === 1) {
541
- setPendingDate({
542
- from: newDate,
543
- to: newDate
544
- });
545
- setMonthFrom(newDate);
546
- }
547
- } else if (highlightedPart === "firstMonth") handleMonthChange((monthFrom ? monthFrom.getMonth() : 0) + (event.deltaY > 0 ? -1 : 1), "from");
548
- else if (highlightedPart === "firstYear" && yearFrom !== void 0) handleYearChange(yearFrom + (event.deltaY > 0 ? -1 : 1), "from");
549
- else if (highlightedPart === "secondDay") {
550
- const newDate = new Date(pendingDate?.to);
551
- const increment = event.deltaY > 0 ? -1 : 1;
552
- newDate.setDate(newDate.getDate() + increment);
553
- if (newDate >= pendingDate?.from) {
554
- setPendingDate({
555
- from: new Date(pendingDate?.from),
556
- to: newDate
557
- });
558
- setMonthTo(newDate);
559
- }
560
- } else if (highlightedPart === "secondMonth") handleMonthChange((monthTo ? monthTo.getMonth() : 0) + (event.deltaY > 0 ? -1 : 1), "to");
561
- else if (highlightedPart === "secondYear" && yearTo !== void 0) handleYearChange(yearTo + (event.deltaY > 0 ? -1 : 1), "to");
562
- };
563
- React$1.useEffect(() => {
564
- const elements = [
565
- document.getElementById(`firstDay-${id}`),
566
- document.getElementById(`firstMonth-${id}`),
567
- document.getElementById(`firstYear-${id}`),
568
- document.getElementById(`secondDay-${id}`),
569
- document.getElementById(`secondMonth-${id}`),
570
- document.getElementById(`secondYear-${id}`)
571
- ];
572
- const addPassiveEventListener = (element) => {
573
- if (element) element.addEventListener("wheel", handleWheel, { passive: false });
574
- };
575
- elements.forEach(addPassiveEventListener);
576
- return () => {
577
- elements.forEach((element) => {
578
- if (element) element.removeEventListener("wheel", handleWheel);
579
- });
580
- };
581
- }, [highlightedPart, pendingDate]);
582
- const formatWithTz = (date, fmt) => formatInTimeZone(date, timeZone, fmt);
583
- return {
584
- isPopoverOpen,
585
- setIsPopoverOpen,
586
- selectedRange,
587
- setSelectedRange,
588
- monthFrom,
589
- setMonthFrom,
590
- yearFrom,
591
- setYearFrom,
592
- monthTo,
593
- setMonthTo,
594
- yearTo,
595
- setYearTo,
596
- highlightedPart,
597
- pendingDate,
598
- timeZone,
599
- today,
600
- effectiveMinDate,
601
- effectiveMaxDate,
602
- years,
603
- dateRanges,
604
- isDateDisabled,
605
- getDaysDifference,
606
- isRangeValid,
607
- adjustRangeToMaxRange,
608
- handleTogglePopover,
609
- handleClear,
610
- handleApply,
611
- handleReset,
612
- selectDateRange,
613
- handleDateSelect,
614
- handleMonthChange,
615
- handleYearChange,
616
- handleMouseOver,
617
- handleMouseLeave,
618
- handleWheel,
619
- formatWithTz
620
- };
621
- }
622
- //#endregion
623
- //#region src/components/features/calendar-date-picker/calendar-date-picker.tsx
624
- function CalendarDatePicker({ ref, id = "calendar-date-picker", className, triggerClassName, date, closeOnSelect = false, numberOfMonths = 2, yearsRange = 10, onDateSelect, variant, placeholder, excludePresets, customPresets, minDate, maxDate, disableFuture = false, disablePast = false, maxRange, popoverClassName, disabled, modal = false, responsive, sheetTitle, ...props }) {
625
- const picker = useCalendarDatePicker({
626
- id,
627
- date,
628
- closeOnSelect,
629
- numberOfMonths,
630
- yearsRange,
631
- onDateSelect,
632
- excludePresets,
633
- customPresets,
634
- minDate,
635
- maxDate,
636
- disableFuture,
637
- disablePast,
638
- maxRange
639
- });
640
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("style", { children: `
641
- .date-part {
642
- touch-action: none;
643
- }
644
- ` }), /* @__PURE__ */ jsx(ResponsivePopover, {
645
- open: picker.isPopoverOpen,
646
- onOpenChange: picker.setIsPopoverOpen,
647
- responsive,
648
- sheetTitle: sheetTitle ?? placeholder ?? "Pick a date",
649
- align: "center",
650
- avoidCollisions: false,
651
- contentClassName: cn("w-full sm:w-auto popover-content-width-full", popoverClassName),
652
- modal,
653
- onInteractOutside: () => picker.setIsPopoverOpen(false),
654
- onEscapeKeyDown: () => picker.setIsPopoverOpen(false),
655
- trigger: /* @__PURE__ */ jsx(DateTrigger, {
656
- ref,
657
- id,
658
- date,
659
- placeholder,
660
- disabled,
661
- numberOfMonths,
662
- highlightedPart: picker.highlightedPart,
663
- handleMouseOver: picker.handleMouseOver,
664
- handleMouseLeave: picker.handleMouseLeave,
665
- handleClear: picker.handleClear,
666
- handleTogglePopover: picker.handleTogglePopover,
667
- formatWithTz: picker.formatWithTz,
668
- variant,
669
- className,
670
- triggerClassName,
671
- ...props
672
- }),
673
- children: picker.isPopoverOpen && /* @__PURE__ */ jsx("div", {
674
- style: {
675
- maxHeight: "var(--radix-popover-content-available-height)",
676
- overflowY: "auto"
677
- },
678
- children: /* @__PURE__ */ jsxs("div", {
679
- className: "flex",
680
- children: [numberOfMonths === 2 && /* @__PURE__ */ jsx(CalendarPresets, {
681
- dateRanges: picker.dateRanges,
682
- selectedRange: picker.selectedRange,
683
- onSelect: (start, end, label) => {
684
- picker.selectDateRange(start, end, label);
685
- picker.setMonthFrom(start);
686
- picker.setYearFrom(start.getFullYear());
687
- picker.setMonthTo(end);
688
- picker.setYearTo(end.getFullYear());
689
- }
690
- }), /* @__PURE__ */ jsxs("div", {
691
- className: "flex w-full flex-col",
692
- children: [
693
- /* @__PURE__ */ jsx(CalendarHeader, {
694
- monthFrom: picker.monthFrom,
695
- yearFrom: picker.yearFrom,
696
- monthTo: picker.monthTo,
697
- yearTo: picker.yearTo,
698
- years: picker.years,
699
- numberOfMonths,
700
- onMonthChange: (month, target) => {
701
- picker.handleMonthChange(month, target);
702
- picker.setSelectedRange(null);
703
- },
704
- onYearChange: (year, target) => {
705
- picker.handleYearChange(year, target);
706
- picker.setSelectedRange(null);
707
- }
708
- }),
709
- /* @__PURE__ */ jsx("div", {
710
- className: "flex w-full justify-center",
711
- children: /* @__PURE__ */ jsx(Calendar$1, {
712
- mode: "range",
713
- defaultMonth: picker.monthFrom,
714
- month: picker.monthFrom,
715
- onMonthChange: picker.setMonthFrom,
716
- selected: picker.pendingDate,
717
- onSelect: picker.handleDateSelect,
718
- numberOfMonths,
719
- showOutsideDays: false,
720
- disabled: picker.isDateDisabled,
721
- fromDate: picker.effectiveMinDate,
722
- toDate: picker.effectiveMaxDate,
723
- className: cn("w-full sm:w-auto", className)
724
- })
725
- }),
726
- !closeOnSelect && /* @__PURE__ */ jsxs("div", {
727
- className: "flex justify-end gap-2 border-t p-3",
728
- children: [/* @__PURE__ */ jsx(Button, {
729
- variant: "outline",
730
- size: "sm",
731
- onClick: picker.handleReset,
732
- type: "button",
733
- children: "Reset"
734
- }), /* @__PURE__ */ jsx(Button, {
735
- size: "sm",
736
- onClick: picker.handleApply,
737
- type: "button",
738
- children: "Apply"
739
- })]
740
- })
741
- ]
742
- })]
743
- })
744
- })
745
- })] });
746
- }
747
- CalendarDatePicker.displayName = "CalendarDatePicker";
748
- //#endregion
749
- export { CalendarDatePicker as t };