@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,193 +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 { t as useDateConstraints } from "./use-date-constraints-R3H4lIoT.mjs";
6
- import { CalendarIcon } from "lucide-react";
7
- import * as React$1 from "react";
8
- import { jsx, jsxs } from "react/jsx-runtime";
9
- import { format } from "date-fns";
10
- import { formatInTimeZone, fromZonedTime, toZonedTime } from "date-fns-tz";
11
- //#region src/components/features/date-time-picker/utils/format.ts
12
- /**
13
- * Format date for display
14
- */
15
- function formatDate(date) {
16
- if (!date) return "";
17
- return format(date, "PP");
18
- }
19
- //#endregion
20
- //#region src/components/features/date-time-picker/utils/timezone.ts
21
- /**
22
- * Get the browser's timezone
23
- */
24
- function getBrowserTimezone() {
25
- return Intl.DateTimeFormat().resolvedOptions().timeZone;
26
- }
27
- /**
28
- * Convert local date + time to UTC ISO string
29
- * @param date - Date object (date part)
30
- * @param time - Time string in HH:mm format
31
- * @param timezone - IANA timezone (e.g., "America/New_York")
32
- * @returns UTC ISO string
33
- */
34
- function localDateTimeToUtc(date, time, timezone) {
35
- try {
36
- const [hours, minutes] = time.split(":").map(Number);
37
- return fromZonedTime(`${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")} ${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`, timezone).toISOString();
38
- } catch {
39
- const [hours = 0, minutes = 0] = time.split(":").map(Number);
40
- const combined = new Date(date);
41
- combined.setUTCHours(hours, minutes, 0, 0);
42
- return combined.toISOString();
43
- }
44
- }
45
- /**
46
- * Convert UTC ISO string to local date + time
47
- * @param utcString - UTC ISO string
48
- * @param timezone - IANA timezone
49
- * @returns Object with date and time (HH:mm)
50
- */
51
- function utcToLocalDateTime(utcString, timezone) {
52
- try {
53
- const utcDate = new Date(utcString);
54
- const time = formatInTimeZone(utcDate, timezone, "HH:mm");
55
- return {
56
- date: toZonedTime(utcDate, timezone),
57
- time
58
- };
59
- } catch {
60
- const utcDate = new Date(utcString);
61
- const hours = utcDate.getUTCHours();
62
- const minutes = utcDate.getUTCMinutes();
63
- return {
64
- date: utcDate,
65
- time: `${String(hours).padStart(2, "0")}:${String(minutes).padStart(2, "0")}`
66
- };
67
- }
68
- }
69
- //#endregion
70
- //#region src/components/features/date-time-picker/date-time-picker.tsx
71
- const DEFAULT_TIMEZONE = getBrowserTimezone();
72
- function DateTimePicker({ ref, value, onChange, minDate, maxDate, disabledDates, disablePast, disableFuture, timezone = DEFAULT_TIMEZONE, showTimezoneIndicator = false, placeholder = "Select date and time", disabled = false, className, modal = false, sheetTitle, sheetDescription, responsive = true }) {
73
- const [open, setOpen] = React$1.useState(false);
74
- const initialState = React$1.useMemo(() => {
75
- if (!value) return {
76
- date: void 0,
77
- time: ""
78
- };
79
- return utcToLocalDateTime(value, timezone);
80
- }, [value, timezone]);
81
- const [state, setState] = React$1.useState(initialState);
82
- const { effectiveMinDate, effectiveMaxDate, isDateDisabled: isConstraintDisabled } = useDateConstraints({
83
- minDate,
84
- maxDate,
85
- disablePast,
86
- disableFuture
87
- });
88
- const prevValue = React$1.useRef(value);
89
- const prevTimezone = React$1.useRef(timezone);
90
- React$1.useEffect(() => {
91
- if (value !== prevValue.current || timezone !== prevTimezone.current) {
92
- prevValue.current = value;
93
- prevTimezone.current = timezone;
94
- setState(() => value ? utcToLocalDateTime(value, timezone) : {
95
- date: void 0,
96
- time: ""
97
- });
98
- }
99
- }, [value, timezone]);
100
- const handleDateChange = React$1.useCallback((newDate) => {
101
- setState((prev) => ({
102
- ...prev,
103
- date: newDate
104
- }));
105
- }, []);
106
- const handleTimeChange = React$1.useCallback((e) => {
107
- const newTime = e.target.value;
108
- if (newTime && !/^\d{2}:\d{2}$/.test(newTime)) return;
109
- setState((prev) => ({
110
- ...prev,
111
- time: newTime
112
- }));
113
- }, []);
114
- React$1.useEffect(() => {
115
- if (state.date && state.time) {
116
- const utcValue = localDateTimeToUtc(state.date, state.time, timezone);
117
- onChange?.(utcValue);
118
- }
119
- }, [
120
- state.date,
121
- state.time,
122
- timezone,
123
- onChange
124
- ]);
125
- const formatDisplayValue = () => {
126
- if (!state.date) return placeholder;
127
- if (state.time) return `${formatDate(state.date)} ${state.time}`;
128
- return formatDate(state.date);
129
- };
130
- return /* @__PURE__ */ jsx("div", {
131
- ref,
132
- className,
133
- children: /* @__PURE__ */ jsx(ResponsivePopover, {
134
- open,
135
- onOpenChange: setOpen,
136
- trigger: /* @__PURE__ */ jsxs(Button, {
137
- variant: "outline",
138
- className: cn("w-full justify-start text-left font-normal", !state.date && "text-muted-foreground"),
139
- disabled,
140
- children: [
141
- /* @__PURE__ */ jsx(CalendarIcon, { className: "mr-2 h-4 w-4" }),
142
- /* @__PURE__ */ jsx("span", {
143
- className: "flex-1",
144
- children: formatDisplayValue()
145
- }),
146
- showTimezoneIndicator && state.date && state.time && /* @__PURE__ */ jsx("span", {
147
- className: "text-muted-foreground ml-2 text-xs",
148
- children: timezone
149
- })
150
- ]
151
- }),
152
- sheetTitle: sheetTitle ?? placeholder ?? "Pick date & time",
153
- sheetDescription,
154
- align: "start",
155
- contentClassName: "w-full sm:w-auto",
156
- modal,
157
- responsive,
158
- children: /* @__PURE__ */ jsxs("div", {
159
- className: "p-3",
160
- children: [/* @__PURE__ */ jsx(Calendar$1, {
161
- mode: "single",
162
- selected: state.date,
163
- onSelect: handleDateChange,
164
- className: "w-full sm:w-auto",
165
- disabled: (date) => {
166
- if (isConstraintDisabled(date)) return true;
167
- if (typeof disabledDates === "function") return disabledDates(date);
168
- if (Array.isArray(disabledDates)) return disabledDates.some((d) => d.getTime() === date.getTime());
169
- return false;
170
- },
171
- fromDate: effectiveMinDate,
172
- toDate: effectiveMaxDate
173
- }), /* @__PURE__ */ jsxs("div", {
174
- className: "mt-3",
175
- children: [/* @__PURE__ */ jsx("label", {
176
- className: "mb-1 block text-sm font-medium",
177
- children: "Time"
178
- }), /* @__PURE__ */ jsx("input", {
179
- type: "time",
180
- "aria-label": "Select time",
181
- value: state.time,
182
- onChange: handleTimeChange,
183
- disabled: disabled || !state.date,
184
- className: cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1", "text-sm shadow-sm transition-colors", "placeholder:text-muted-foreground", "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", "disabled:cursor-not-allowed disabled:opacity-50")
185
- })]
186
- })]
187
- })
188
- })
189
- });
190
- }
191
- DateTimePicker.displayName = "DateTimePicker";
192
- //#endregion
193
- export { DateTimePicker as t };
@@ -1,163 +0,0 @@
1
- import { t as cn } from "./cn-D2KYQ917.mjs";
2
- import { t as cn$1 } from "./utils-C8KwMfT_.mjs";
3
- import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
4
- import "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- import * as SelectPrimitive from "@radix-ui/react-select";
7
- //#region ../shadcn/ui/select.tsx
8
- const Select$1 = ({ ...props }) => {
9
- return /* @__PURE__ */ jsx(SelectPrimitive.Root, {
10
- "data-slot": "select",
11
- ...props
12
- });
13
- };
14
- const SelectGroup$1 = ({ ...props }) => {
15
- return /* @__PURE__ */ jsx(SelectPrimitive.Group, {
16
- "data-slot": "select-group",
17
- ...props
18
- });
19
- };
20
- const SelectValue$1 = ({ ...props }) => {
21
- return /* @__PURE__ */ jsx(SelectPrimitive.Value, {
22
- "data-slot": "select-value",
23
- ...props
24
- });
25
- };
26
- const SelectTrigger$1 = ({ className, children, ...props }) => {
27
- return /* @__PURE__ */ jsxs(SelectPrimitive.Trigger, {
28
- "data-slot": "select-trigger",
29
- className: cn$1("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive rounded-md border bg-transparent py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "flex h-auto min-h-10 w-full items-center justify-between px-3 text-sm font-medium", className),
30
- ...props,
31
- children: [children, /* @__PURE__ */ jsx(SelectPrimitive.Icon, {
32
- asChild: true,
33
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4 opacity-50" })
34
- })]
35
- });
36
- };
37
- const SelectContent$1 = ({ className, children, position = "popper", ...props }) => {
38
- return /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(SelectPrimitive.Content, {
39
- "data-slot": "select-content",
40
- className: cn$1("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", "w-[var(--radix-select-trigger-width)]", className),
41
- position,
42
- ...props,
43
- children: [
44
- /* @__PURE__ */ jsx(SelectScrollUpButton$1, {}),
45
- /* @__PURE__ */ jsx(SelectPrimitive.Viewport, {
46
- className: cn$1("p-1", position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),
47
- children
48
- }),
49
- /* @__PURE__ */ jsx(SelectScrollDownButton$1, {})
50
- ]
51
- }) });
52
- };
53
- const SelectLabel$1 = ({ className, ...props }) => {
54
- return /* @__PURE__ */ jsx(SelectPrimitive.Label, {
55
- "data-slot": "select-label",
56
- className: cn$1("px-2 py-1.5 text-sm font-medium", className),
57
- ...props
58
- });
59
- };
60
- const SelectItem$1 = ({ className, children, ...props }) => {
61
- return /* @__PURE__ */ jsxs(SelectPrimitive.Item, {
62
- "data-slot": "select-item",
63
- className: cn$1("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
64
- ...props,
65
- children: [/* @__PURE__ */ jsx("span", {
66
- className: "absolute right-2 flex size-3.5 items-center justify-center",
67
- children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) })
68
- }), /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children })]
69
- });
70
- };
71
- const SelectSeparator$1 = ({ className, ...props }) => {
72
- return /* @__PURE__ */ jsx(SelectPrimitive.Separator, {
73
- "data-slot": "select-separator",
74
- className: cn$1("bg-border pointer-events-none -mx-1 my-1 h-px", className),
75
- ...props
76
- });
77
- };
78
- const SelectScrollUpButton$1 = ({ className, ...props }) => {
79
- return /* @__PURE__ */ jsx(SelectPrimitive.ScrollUpButton, {
80
- "data-slot": "select-scroll-up-button",
81
- className: cn$1("flex cursor-default items-center justify-center py-1", className),
82
- ...props,
83
- children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "size-4" })
84
- });
85
- };
86
- const SelectScrollDownButton$1 = ({ className, ...props }) => {
87
- return /* @__PURE__ */ jsx(SelectPrimitive.ScrollDownButton, {
88
- "data-slot": "select-scroll-down-button",
89
- className: cn$1("flex cursor-default items-center justify-center py-1", className),
90
- ...props,
91
- children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-4" })
92
- });
93
- };
94
- //#endregion
95
- //#region src/components/base/select/select.tsx
96
- const Select = Select$1;
97
- const SelectValue = SelectValue$1;
98
- function SelectGroup({ ref, className, ...props }) {
99
- return /* @__PURE__ */ jsx(SelectGroup$1, {
100
- ref,
101
- className: cn(className),
102
- ...props
103
- });
104
- }
105
- SelectGroup.displayName = "SelectGroup";
106
- function SelectTrigger({ ref, className, ...props }) {
107
- return /* @__PURE__ */ jsx(SelectTrigger$1, {
108
- ref,
109
- className: cn("rounded-lg", "bg-input-background/50", "text-input-foreground", "border-input-border", "placeholder:text-input-placeholder", "focus-visible:ring-0 focus-visible:ring-offset-0", "focus-visible:border-input-focus-border", "focus-visible:shadow-(--input-focus-shadow)", "aria-invalid:border-destructive", className),
110
- ...props
111
- });
112
- }
113
- SelectTrigger.displayName = "SelectTrigger";
114
- function SelectContent({ ref, className, ...props }) {
115
- return /* @__PURE__ */ jsx(SelectContent$1, {
116
- ref,
117
- className: cn(className),
118
- ...props
119
- });
120
- }
121
- SelectContent.displayName = "SelectContent";
122
- function SelectLabel({ ref, className, ...props }) {
123
- return /* @__PURE__ */ jsx(SelectLabel$1, {
124
- ref,
125
- className: cn(className),
126
- ...props
127
- });
128
- }
129
- SelectLabel.displayName = "SelectLabel";
130
- function SelectItem({ ref, className, ...props }) {
131
- return /* @__PURE__ */ jsx(SelectItem$1, {
132
- ref,
133
- className: cn(className),
134
- ...props
135
- });
136
- }
137
- SelectItem.displayName = "SelectItem";
138
- function SelectSeparator({ ref, className, ...props }) {
139
- return /* @__PURE__ */ jsx(SelectSeparator$1, {
140
- ref,
141
- className: cn(className),
142
- ...props
143
- });
144
- }
145
- SelectSeparator.displayName = "SelectSeparator";
146
- function SelectScrollUpButton({ ref, className, ...props }) {
147
- return /* @__PURE__ */ jsx(SelectScrollUpButton$1, {
148
- ref,
149
- className: cn(className),
150
- ...props
151
- });
152
- }
153
- SelectScrollUpButton.displayName = "SelectScrollUpButton";
154
- function SelectScrollDownButton({ ref, className, ...props }) {
155
- return /* @__PURE__ */ jsx(SelectScrollDownButton$1, {
156
- ref,
157
- className: cn(className),
158
- ...props
159
- });
160
- }
161
- SelectScrollDownButton.displayName = "SelectScrollDownButton";
162
- //#endregion
163
- export { SelectLabel as a, SelectSeparator as c, SelectItem as i, SelectTrigger as l, SelectContent as n, SelectScrollDownButton as o, SelectGroup as r, SelectScrollUpButton as s, Select as t, SelectValue as u };
@@ -1,99 +0,0 @@
1
- import { t as cn } from "./cn-D2KYQ917.mjs";
2
- import { t as ResponsivePopover } from "./responsive-popover-D-t9bxSN.mjs";
3
- import { n as OptionList, t as useOptionPicker } from "./use-option-picker-BXQOfyrK.mjs";
4
- import { Clock } from "lucide-react";
5
- import * as React$1 from "react";
6
- import { useMemo } from "react";
7
- import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
- //#region src/components/features/time-picker/use-time-slots.ts
9
- function timeToMinutes(time) {
10
- const [h, m] = time.split(":").map(Number);
11
- return h * 60 + m;
12
- }
13
- function minutesToTime(totalMinutes) {
14
- const h = Math.floor(totalMinutes / 60);
15
- const m = totalMinutes % 60;
16
- return `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`;
17
- }
18
- function formatTimeLabel(time) {
19
- const [hStr, mStr] = time.split(":");
20
- let h = Number(hStr);
21
- const m = mStr;
22
- const period = h >= 12 ? "PM" : "AM";
23
- if (h === 0) h = 12;
24
- else if (h > 12) h -= 12;
25
- return `${h}:${m} ${period}`;
26
- }
27
- function useTimeSlots({ min, max, step = 15 }) {
28
- return useMemo(() => {
29
- const minMinutes = min ? timeToMinutes(min) : 0;
30
- const maxMinutes = max ? timeToMinutes(max) : 1439;
31
- const slots = [];
32
- for (let m = minMinutes; m <= maxMinutes; m += step) {
33
- if (m >= 1440) break;
34
- const value = minutesToTime(m);
35
- slots.push({
36
- value,
37
- label: formatTimeLabel(value)
38
- });
39
- }
40
- return slots;
41
- }, [
42
- min,
43
- max,
44
- step
45
- ]);
46
- }
47
- //#endregion
48
- //#region src/components/features/time-picker/time-picker.tsx
49
- function TimePicker({ value, onChange, min, max, step = 15, placeholder = "Select time", disabled = false, className, id, name, responsive = true, sheetTitle }) {
50
- const [open, setOpen] = React$1.useState(false);
51
- const slots = useTimeSlots({
52
- min,
53
- max,
54
- step
55
- });
56
- const picker = useOptionPicker({
57
- multiple: false,
58
- options: slots,
59
- value,
60
- onValueChange: onChange,
61
- open,
62
- onOpenChange: setOpen
63
- });
64
- const displayValue = value ? formatTimeLabel(value) : void 0;
65
- const trigger = /* @__PURE__ */ jsxs("button", {
66
- type: "button",
67
- id,
68
- role: "combobox",
69
- "aria-expanded": open,
70
- disabled,
71
- className: cn("text-input-foreground placeholder:text-input-placeholder", "border-input-border bg-input-background/50 relative flex h-10 w-full items-center justify-between rounded-lg border px-3 py-2 text-left text-sm transition-all", "focus-visible:border-input-focus-border focus-visible:shadow-(--input-focus-shadow)", "focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:outline-hidden", disabled && "cursor-not-allowed opacity-50", className),
72
- children: [/* @__PURE__ */ jsx("span", {
73
- className: cn(!displayValue && "text-muted-foreground"),
74
- children: displayValue ?? placeholder
75
- }), /* @__PURE__ */ jsx(Clock, { className: "text-muted-foreground ml-2 size-4 shrink-0" })]
76
- });
77
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ResponsivePopover, {
78
- open,
79
- onOpenChange: setOpen,
80
- responsive,
81
- sheetTitle: sheetTitle ?? placeholder,
82
- trigger,
83
- align: "start",
84
- children: /* @__PURE__ */ jsx(OptionList, {
85
- picker,
86
- disableSearch: slots.length <= 48,
87
- searchPlaceholder: "Search time...",
88
- listClassName: "max-h-[200px]"
89
- })
90
- }), name && /* @__PURE__ */ jsx("input", {
91
- type: "hidden",
92
- name,
93
- value: value ?? "",
94
- readOnly: true
95
- })] });
96
- }
97
- TimePicker.displayName = "TimePicker";
98
- //#endregion
99
- export { TimePicker as t };
@@ -1,41 +0,0 @@
1
- import { useCallback, useMemo } from "react";
2
- import { endOfDay, startOfDay } from "date-fns";
3
- //#region src/components/base/date-picker/use-date-constraints.ts
4
- function useDateConstraints({ minDate, maxDate, disablePast, disableFuture }) {
5
- const today = useMemo(() => /* @__PURE__ */ new Date(), []);
6
- const effectiveMinDate = useMemo(() => {
7
- let min = minDate;
8
- if (disablePast) {
9
- const todayStart = startOfDay(today);
10
- min = min ? min > todayStart ? min : todayStart : todayStart;
11
- }
12
- return min;
13
- }, [
14
- minDate,
15
- disablePast,
16
- today
17
- ]);
18
- const effectiveMaxDate = useMemo(() => {
19
- let max = maxDate;
20
- if (disableFuture) {
21
- const todayEnd = endOfDay(today);
22
- max = max ? max < todayEnd ? max : todayEnd : todayEnd;
23
- }
24
- return max;
25
- }, [
26
- maxDate,
27
- disableFuture,
28
- today
29
- ]);
30
- return {
31
- effectiveMinDate,
32
- effectiveMaxDate,
33
- isDateDisabled: useCallback((date) => {
34
- if (effectiveMinDate && date < effectiveMinDate) return true;
35
- if (effectiveMaxDate && date > effectiveMaxDate) return true;
36
- return false;
37
- }, [effectiveMinDate, effectiveMaxDate])
38
- };
39
- }
40
- //#endregion
41
- export { useDateConstraints as t };
File without changes
File without changes
File without changes
File without changes