@cognite/aura 0.2.0 → 0.3.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 (226) hide show
  1. package/README.md +36 -3
  2. package/dist/colors.css +30 -0
  3. package/dist/components/index.d.ts +6 -36
  4. package/dist/components/index.js +311 -347
  5. package/dist/components/ui/core/accordion/accordion.d.ts +7 -7
  6. package/dist/components/ui/core/accordion/accordion.js +49 -47
  7. package/dist/components/ui/core/action-toolbar/action-toolbar.d.ts +41 -0
  8. package/dist/components/ui/core/action-toolbar/action-toolbar.js +176 -0
  9. package/dist/components/ui/core/alert/alert.d.ts +23 -12
  10. package/dist/components/ui/core/alert/alert.js +123 -120
  11. package/dist/components/ui/core/avatar/avatar.d.ts +12 -8
  12. package/dist/components/ui/core/badge/badge.d.ts +11 -8
  13. package/dist/components/ui/core/banner/banner.d.ts +18 -28
  14. package/dist/components/ui/core/banner/banner.js +6 -6
  15. package/dist/components/ui/core/breadcrumb/breadcrumb.d.ts +10 -9
  16. package/dist/components/ui/core/breadcrumb/breadcrumb.js +98 -88
  17. package/dist/components/ui/core/button/button.d.ts +8 -5
  18. package/dist/components/ui/core/button/button.js +22 -19
  19. package/dist/components/ui/core/button-group/button-group.d.ts +7 -6
  20. package/dist/components/ui/core/card/card.d.ts +17 -16
  21. package/dist/components/ui/core/chart/chart.d.ts +69 -0
  22. package/dist/components/ui/core/chart/chart.js +215 -0
  23. package/dist/components/ui/core/chart/index.d.ts +2 -0
  24. package/dist/components/ui/core/chart/index.js +8 -0
  25. package/dist/components/ui/core/checkbox/checkbox.d.ts +13 -9
  26. package/dist/components/ui/core/checkbox/checkbox.js +38 -34
  27. package/dist/components/ui/core/code-block/code-block.d.ts +6 -9
  28. package/dist/components/ui/core/code-block/code-block.js +52 -48
  29. package/dist/components/ui/core/collapsible/collapsible.d.ts +5 -3
  30. package/dist/components/ui/core/combobox/combobox.d.ts +2 -2
  31. package/dist/components/ui/core/command/command.d.ts +11 -78
  32. package/dist/components/ui/core/command/command.js +53 -52
  33. package/dist/components/ui/core/count/count.d.ts +7 -6
  34. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.d.ts +15 -0
  35. package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js +99 -0
  36. package/dist/components/ui/core/date-time-pickers/date-range-picker/index.d.ts +3 -0
  37. package/dist/components/ui/core/date-time-pickers/date-range-picker/types.d.ts +25 -0
  38. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.d.ts +4 -0
  39. package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js +82 -0
  40. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.d.ts +17 -0
  41. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js +190 -0
  42. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.d.ts +3 -0
  43. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.d.ts +42 -0
  44. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.d.ts +3 -0
  45. package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js +161 -0
  46. package/dist/components/ui/core/date-time-pickers/index.d.ts +6 -0
  47. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.d.ts +7 -0
  48. package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js +57 -0
  49. package/dist/components/ui/core/date-time-pickers/shared/calendar/calendar.d.ts +13 -0
  50. package/dist/components/ui/core/date-time-pickers/shared/calendar/calendar.js +119 -0
  51. package/dist/components/ui/core/date-time-pickers/shared/calendar-header/calendar-header.d.ts +10 -0
  52. package/dist/components/ui/core/date-time-pickers/shared/calendar-header/calendar-header.js +93 -0
  53. package/dist/components/ui/core/date-time-pickers/shared/constants.d.ts +20 -0
  54. package/dist/components/ui/core/date-time-pickers/shared/constants.js +14 -0
  55. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.d.ts +19 -0
  56. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js +99 -0
  57. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.d.ts +12 -0
  58. package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js +68 -0
  59. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.d.ts +12 -0
  60. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js +40 -0
  61. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.d.ts +29 -0
  62. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js +63 -0
  63. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.d.ts +8 -0
  64. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js +19 -0
  65. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.d.ts +17 -0
  66. package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js +34 -0
  67. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.d.ts +8 -0
  68. package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js +7 -0
  69. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.d.ts +13 -0
  70. package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js +31 -0
  71. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.d.ts +10 -0
  72. package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js +52 -0
  73. package/dist/components/ui/core/date-time-pickers/utils/calendar-utils.d.ts +48 -0
  74. package/dist/components/ui/core/date-time-pickers/utils/calendar-utils.js +52 -0
  75. package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.d.ts +26 -0
  76. package/dist/components/ui/core/date-time-pickers/utils/format-utils.d.ts +37 -0
  77. package/dist/components/ui/core/date-time-pickers/utils/segment-utils.d.ts +34 -0
  78. package/dist/components/ui/core/date-time-pickers/utils/time-utils.d.ts +43 -0
  79. package/dist/components/ui/core/date-time-pickers/utils/time-utils.js +15 -0
  80. package/dist/components/ui/core/date-time-pickers/utils/time-validation.d.ts +23 -0
  81. package/dist/components/ui/core/dialog/dialog.d.ts +10 -10
  82. package/dist/components/ui/core/dialog/dialog.js +12 -3
  83. package/dist/components/ui/core/dropdown-menu/dropdown-menu.d.ts +24 -47
  84. package/dist/components/ui/core/dropdown-menu/dropdown-menu.js +125 -123
  85. package/dist/components/ui/core/empty-state/empty-state.context.d.ts +10 -0
  86. package/dist/components/ui/core/empty-state/empty-state.context.js +8 -0
  87. package/dist/components/ui/core/empty-state/empty-state.d.ts +18 -0
  88. package/dist/components/ui/core/empty-state/empty-state.js +139 -0
  89. package/dist/components/ui/core/helper-text/helper-text.d.ts +7 -5
  90. package/dist/components/ui/core/hover-card/hover-card.d.ts +5 -7
  91. package/dist/components/ui/core/hover-card/hover-card.js +26 -25
  92. package/dist/components/ui/core/inline-citation/inline-citation.d.ts +10 -10
  93. package/dist/components/ui/core/inline-citation/inline-citation.js +57 -49
  94. package/dist/components/ui/core/input/input.d.ts +2 -1
  95. package/dist/components/ui/core/input-group/input-group.d.ts +17 -13
  96. package/dist/components/ui/core/input-group/input-group.js +35 -36
  97. package/dist/components/ui/core/kbd/kbd.d.ts +3 -2
  98. package/dist/components/ui/core/label/label.d.ts +3 -2
  99. package/dist/components/ui/core/loader/loader.d.ts +2 -2
  100. package/dist/components/ui/core/message/message.d.ts +18 -17
  101. package/dist/components/ui/core/message/message.js +15 -13
  102. package/dist/components/ui/core/pagination/pagination-size-context.d.ts +5 -0
  103. package/dist/components/ui/core/pagination/pagination-size-context.js +6 -0
  104. package/dist/components/ui/core/pagination/pagination-teleport.d.ts +11 -0
  105. package/dist/components/ui/core/pagination/pagination-teleport.js +108 -0
  106. package/dist/components/ui/core/pagination/pagination-teleport.utils.d.ts +1 -0
  107. package/dist/components/ui/core/pagination/pagination-teleport.utils.js +7 -0
  108. package/dist/components/ui/core/pagination/pagination.d.ts +41 -0
  109. package/dist/components/ui/core/pagination/pagination.js +335 -0
  110. package/dist/components/ui/core/popover/popover.d.ts +12 -16
  111. package/dist/components/ui/core/popover/popover.js +52 -51
  112. package/dist/components/ui/core/progress/progress.d.ts +7 -4
  113. package/dist/components/ui/core/prompt-input/prompt-input.d.ts +36 -103
  114. package/dist/components/ui/core/prompt-input/prompt-input.js +193 -180
  115. package/dist/components/ui/core/radio-group/radio-group.d.ts +12 -8
  116. package/dist/components/ui/core/radio-group/radio-group.js +58 -55
  117. package/dist/components/ui/core/reasoning/reasoning.d.ts +5 -5
  118. package/dist/components/ui/core/reasoning/reasoning.js +1 -1
  119. package/dist/components/ui/core/scroll-area/scroll-area.d.ts +4 -2
  120. package/dist/components/ui/core/search/search.d.ts +10 -0
  121. package/dist/components/ui/core/search/search.js +99 -0
  122. package/dist/components/ui/core/segmented-control/segmented-control.d.ts +15 -11
  123. package/dist/components/ui/core/segmented-control/segmented-control.js +7 -4
  124. package/dist/components/ui/core/select/select.d.ts +13 -13
  125. package/dist/components/ui/core/select/select.js +13 -10
  126. package/dist/components/ui/core/separator/separator.d.ts +2 -4
  127. package/dist/components/ui/core/separator/separator.js +4 -5
  128. package/dist/components/ui/core/shimmer/shimmer.d.ts +3 -5
  129. package/dist/components/ui/core/shimmer/shimmer.js +25 -26
  130. package/dist/components/ui/core/skeleton/skeleton.d.ts +2 -1
  131. package/dist/components/ui/core/sonner-toast/sonner-toast.d.ts +2 -1
  132. package/dist/components/ui/core/sources/sources.d.ts +3 -3
  133. package/dist/components/ui/core/sources/sources.js +6 -1
  134. package/dist/components/ui/core/switch/switch.d.ts +11 -0
  135. package/dist/components/ui/core/{button/button.metadata.d.ts → switch/switch.metadata.d.ts} +1 -1
  136. package/dist/components/ui/core/tabs/tabs.d.ts +21 -17
  137. package/dist/components/ui/core/tabs/tabs.js +14 -12
  138. package/dist/components/ui/core/textarea/textarea.d.ts +2 -1
  139. package/dist/components/ui/core/textarea/textarea.js +20 -18
  140. package/dist/components/ui/core/tool/tool.d.ts +7 -6
  141. package/dist/components/ui/core/tool/tool.js +48 -44
  142. package/dist/components/ui/core/tooltip/tooltip.d.ts +6 -5
  143. package/dist/components/ui/core/tooltip/tooltip.js +10 -8
  144. package/dist/components/ui/core/topbar/topbar.d.ts +11 -13
  145. package/dist/eslint/index.d.ts +2 -1
  146. package/dist/index.d.ts +1 -1
  147. package/dist/index.js +302 -336
  148. package/dist/lib/portal-container-context.d.ts +2 -1
  149. package/dist/lib/portal-container-context.js +1 -3
  150. package/dist/styles.css +1 -1
  151. package/dist/styles.source.css +9 -1
  152. package/package.json +22 -1
  153. package/dist/components/ui/core/accordion/accordion.metadata.d.ts +0 -2
  154. package/dist/components/ui/core/accordion/accordion.metadata.js +0 -9
  155. package/dist/components/ui/core/alert/alert.metadata.d.ts +0 -2
  156. package/dist/components/ui/core/alert/alert.metadata.js +0 -9
  157. package/dist/components/ui/core/avatar/avatar.metadata.d.ts +0 -8
  158. package/dist/components/ui/core/avatar/avatar.metadata.js +0 -9
  159. package/dist/components/ui/core/badge/badge.metadata.d.ts +0 -2
  160. package/dist/components/ui/core/badge/badge.metadata.js +0 -8
  161. package/dist/components/ui/core/banner/banner.metadata.d.ts +0 -2
  162. package/dist/components/ui/core/banner/banner.metadata.js +0 -9
  163. package/dist/components/ui/core/breadcrumb/breadcrumb.metadata.d.ts +0 -2
  164. package/dist/components/ui/core/breadcrumb/breadcrumb.metadata.js +0 -9
  165. package/dist/components/ui/core/button/button.metadata.js +0 -9
  166. package/dist/components/ui/core/button-group/button-group.metadata.d.ts +0 -2
  167. package/dist/components/ui/core/button-group/button-group.metadata.js +0 -8
  168. package/dist/components/ui/core/card/card.metadata.d.ts +0 -8
  169. package/dist/components/ui/core/card/card.metadata.js +0 -9
  170. package/dist/components/ui/core/code-block/code-block.metadata.d.ts +0 -2
  171. package/dist/components/ui/core/code-block/code-block.metadata.js +0 -8
  172. package/dist/components/ui/core/collapsible/collapsible.metadata.d.ts +0 -2
  173. package/dist/components/ui/core/collapsible/collapsible.metadata.js +0 -9
  174. package/dist/components/ui/core/combobox/combobox.metadata.d.ts +0 -2
  175. package/dist/components/ui/core/command/command.metadata.d.ts +0 -2
  176. package/dist/components/ui/core/command/command.metadata.js +0 -9
  177. package/dist/components/ui/core/dialog/dialog.metadata.d.ts +0 -2
  178. package/dist/components/ui/core/dialog/dialog.metadata.js +0 -9
  179. package/dist/components/ui/core/dropdown-menu/dropdown-menu.metadata.d.ts +0 -2
  180. package/dist/components/ui/core/dropdown-menu/dropdown-menu.metadata.js +0 -9
  181. package/dist/components/ui/core/helper-text/helper-text.metadata.d.ts +0 -2
  182. package/dist/components/ui/core/helper-text/helper-text.metadata.js +0 -9
  183. package/dist/components/ui/core/hover-card/hover-card.metadata.d.ts +0 -2
  184. package/dist/components/ui/core/hover-card/hover-card.metadata.js +0 -8
  185. package/dist/components/ui/core/inline-citation/inline-citation.metadata.d.ts +0 -2
  186. package/dist/components/ui/core/inline-citation/inline-citation.metadata.js +0 -8
  187. package/dist/components/ui/core/input/input.metadata.d.ts +0 -2
  188. package/dist/components/ui/core/input/input.metadata.js +0 -9
  189. package/dist/components/ui/core/input-group/input-group.metadata.d.ts +0 -2
  190. package/dist/components/ui/core/input-group/input-group.metadata.js +0 -9
  191. package/dist/components/ui/core/kbd/kbd.metadata.d.ts +0 -2
  192. package/dist/components/ui/core/kbd/kbd.metadata.js +0 -9
  193. package/dist/components/ui/core/label/label.metadata.d.ts +0 -2
  194. package/dist/components/ui/core/label/label.metadata.js +0 -9
  195. package/dist/components/ui/core/loader/loader.metadata.d.ts +0 -2
  196. package/dist/components/ui/core/loader/loader.metadata.js +0 -9
  197. package/dist/components/ui/core/message/message.metadata.d.ts +0 -2
  198. package/dist/components/ui/core/popover/popover.metadata.d.ts +0 -2
  199. package/dist/components/ui/core/popover/popover.metadata.js +0 -9
  200. package/dist/components/ui/core/progress/progress.metadata.d.ts +0 -2
  201. package/dist/components/ui/core/progress/progress.metadata.js +0 -9
  202. package/dist/components/ui/core/prompt-input/prompt-input.metadata.d.ts +0 -2
  203. package/dist/components/ui/core/prompt-input/prompt-input.metadata.js +0 -9
  204. package/dist/components/ui/core/radio-group/radio-group.metadata.d.ts +0 -2
  205. package/dist/components/ui/core/radio-group/radio-group.metadata.js +0 -9
  206. package/dist/components/ui/core/reasoning/reasoning.metadata.d.ts +0 -2
  207. package/dist/components/ui/core/reasoning/reasoning.metadata.js +0 -8
  208. package/dist/components/ui/core/scroll-area/scroll-area.metadata.d.ts +0 -2
  209. package/dist/components/ui/core/scroll-area/scroll-area.metadata.js +0 -9
  210. package/dist/components/ui/core/select/select.metadata.d.ts +0 -2
  211. package/dist/components/ui/core/select/select.metadata.js +0 -9
  212. package/dist/components/ui/core/separator/separator.metadata.d.ts +0 -2
  213. package/dist/components/ui/core/separator/separator.metadata.js +0 -8
  214. package/dist/components/ui/core/shimmer/shimmer.metadata.d.ts +0 -2
  215. package/dist/components/ui/core/shimmer/shimmer.metadata.js +0 -9
  216. package/dist/components/ui/core/skeleton/skeleton.metadata.d.ts +0 -2
  217. package/dist/components/ui/core/skeleton/skeleton.metadata.js +0 -9
  218. package/dist/components/ui/core/sonner-toast/sonner-toast.metadata.d.ts +0 -2
  219. package/dist/components/ui/core/sonner-toast/sonner-toast.metadata.js +0 -9
  220. package/dist/components/ui/core/sources/sources.metadata.d.ts +0 -2
  221. package/dist/components/ui/core/textarea/textarea.metadata.d.ts +0 -2
  222. package/dist/components/ui/core/textarea/textarea.metadata.js +0 -9
  223. package/dist/components/ui/core/tool/tool.metadata.d.ts +0 -2
  224. package/dist/components/ui/core/tool/tool.metadata.js +0 -8
  225. package/dist/components/ui/core/tooltip/tooltip.metadata.d.ts +0 -8
  226. package/dist/components/ui/core/tooltip/tooltip.metadata.js +0 -9
@@ -0,0 +1,63 @@
1
+ import { useCallback as e, useState as u, useRef as b } from "react";
2
+ const A = ({
3
+ value: c,
4
+ defaultDate: p,
5
+ mapDate: a,
6
+ onEndDateSelected: S
7
+ }) => {
8
+ const o = e(
9
+ (t, m) => a ? a(t, m) : t,
10
+ [a]
11
+ ), [E, f] = u(c[0]), [y, M] = u(c[1]), [g, i] = u(
12
+ () => c[0] ?? p
13
+ ), [C, l] = u(null), n = b({
14
+ tempStart: c[0],
15
+ tempEnd: c[1]
16
+ }), s = e((t) => {
17
+ n.current.tempStart = t, f(t);
18
+ }, []), r = e((t) => {
19
+ n.current.tempEnd = t, M(t);
20
+ }, []), R = e(
21
+ (t, m) => {
22
+ if (m === "start") {
23
+ s(o(t, "start")), r(null), l(null);
24
+ return;
25
+ }
26
+ const d = n.current.tempStart;
27
+ if (d && t.isBefore(d, "day")) {
28
+ s(o(t, "start")), r(null), l(null);
29
+ return;
30
+ }
31
+ const h = o(t, "end");
32
+ r(h), l(null), S?.(n.current.tempStart, h);
33
+ },
34
+ [o, s, r, S]
35
+ ), k = e((t) => {
36
+ l(t);
37
+ }, []), D = e((t) => {
38
+ i(t);
39
+ }, []), H = e(
40
+ (t) => t === "start" ? (s(null), [null, n.current.tempEnd]) : n.current.tempEnd === null ? null : (r(null), [n.current.tempStart, null]),
41
+ [s, r]
42
+ ), T = e(
43
+ (t) => {
44
+ s(t[0]), r(t[1]), l(null), i(t[0] ?? p);
45
+ },
46
+ [s, r, p]
47
+ );
48
+ return {
49
+ tempStart: E,
50
+ tempEnd: y,
51
+ displayedMonth: g,
52
+ hoverDate: C,
53
+ stateRef: n,
54
+ handleDateClick: R,
55
+ handleDateHover: k,
56
+ handleMonthChange: D,
57
+ clearActiveSegment: H,
58
+ resetDates: T
59
+ };
60
+ };
61
+ export {
62
+ A as useRangeDateState
63
+ };
@@ -0,0 +1,8 @@
1
+ export type RangeSelectionStep = 'start' | 'end';
2
+ export interface UseRangeStepManagerReturn {
3
+ step: RangeSelectionStep;
4
+ handleNext: () => void;
5
+ handleBack: () => void;
6
+ resetStep: () => void;
7
+ }
8
+ export declare const useRangeStepManager: () => UseRangeStepManagerReturn;
@@ -0,0 +1,19 @@
1
+ import { useState as o, useCallback as e } from "react";
2
+ const p = () => {
3
+ const [s, t] = o("start"), a = e(() => {
4
+ t("end");
5
+ }, []), n = e(() => {
6
+ t("start");
7
+ }, []), r = e(() => {
8
+ t("start");
9
+ }, []);
10
+ return {
11
+ step: s,
12
+ handleNext: a,
13
+ handleBack: n,
14
+ resetStep: r
15
+ };
16
+ };
17
+ export {
18
+ p as useRangeStepManager
19
+ };
@@ -0,0 +1,17 @@
1
+ import { TimeFormat } from '../../utils/format-utils';
2
+ export interface UseTimeStateOptions {
3
+ initialHour?: number;
4
+ initialMinute?: number;
5
+ timeFormat?: TimeFormat;
6
+ }
7
+ export interface UseTimeStateReturn {
8
+ hour: number;
9
+ minute: number;
10
+ amPm: 'AM' | 'PM';
11
+ hour24: number;
12
+ handleHourChange: (hour: number) => void;
13
+ handleMinuteChange: (minute: number) => void;
14
+ handleAmPmChange: (amPm: 'AM' | 'PM') => void;
15
+ resetTime: (hour: number, minute: number) => void;
16
+ }
17
+ export declare const useTimeState: ({ initialHour, initialMinute, timeFormat, }?: UseTimeStateOptions) => UseTimeStateReturn;
@@ -0,0 +1,34 @@
1
+ import { useState as r, useMemo as C, useCallback as M } from "react";
2
+ import { getAmPmFromHour as m, convert12HourTo24Hour as P, convert24HourTo12Hour as T } from "../../utils/time-utils.js";
3
+ import { DEFAULT_START_HOUR as U, DEFAULT_MINUTE as f } from "../constants.js";
4
+ const S = ({
5
+ initialHour: s = U,
6
+ initialMinute: a = f,
7
+ timeFormat: o = "24h"
8
+ } = {}) => {
9
+ const l = o === "12h" ? T(s) : s, [e, u] = r(l), [p, h] = r(a), [t, c] = r(
10
+ () => m(s)
11
+ ), A = C(
12
+ () => o === "12h" ? P(e, t) : e,
13
+ [e, t, o]
14
+ ), H = M(
15
+ (n, d) => {
16
+ const g = o === "12h" ? T(n) : n;
17
+ u(g), h(d), c(m(n));
18
+ },
19
+ [o]
20
+ );
21
+ return {
22
+ hour: e,
23
+ minute: p,
24
+ amPm: t,
25
+ hour24: A,
26
+ handleHourChange: u,
27
+ handleMinuteChange: h,
28
+ handleAmPmChange: c,
29
+ resetTime: H
30
+ };
31
+ };
32
+ export {
33
+ S as useTimeState
34
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Shared Tailwind class strings for TimePickerScroll and AmPmScroll.
3
+ * Both components render the same scroll container and cell styles.
4
+ */
5
+ export declare const SCROLL_CONTAINER_CLASSES = "overflow-y-auto flex flex-col items-center py-2 w-9 h-72 shrink-0 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
6
+ export declare const SCROLL_ITEM_BASE_CLASSES = "w-9 h-9 flex items-center justify-center rounded-lg cursor-pointer text-sm font-medium leading-[18px] tracking-normal select-none transition-colors duration-150 shrink-0";
7
+ export declare const SCROLL_ITEM_SELECTED_CLASSES = "bg-primary-background text-foreground-on-primary hover:bg-primary-background";
8
+ export declare const SCROLL_ITEM_UNSELECTED_CLASSES = "text-secondary-foreground hover:bg-accent-background";
@@ -0,0 +1,7 @@
1
+ const r = "overflow-y-auto flex flex-col items-center py-2 w-9 h-72 shrink-0 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden", o = "w-9 h-9 flex items-center justify-center rounded-lg cursor-pointer text-sm font-medium leading-[18px] tracking-normal select-none transition-colors duration-150 shrink-0", e = "bg-primary-background text-foreground-on-primary hover:bg-primary-background", n = "text-secondary-foreground hover:bg-accent-background";
2
+ export {
3
+ r as SCROLL_CONTAINER_CLASSES,
4
+ o as SCROLL_ITEM_BASE_CLASSES,
5
+ e as SCROLL_ITEM_SELECTED_CLASSES,
6
+ n as SCROLL_ITEM_UNSELECTED_CLASSES
7
+ };
@@ -0,0 +1,13 @@
1
+ import { FC } from 'react';
2
+ import { Dayjs } from 'dayjs';
3
+ export interface ShortcutItem {
4
+ id?: string;
5
+ label: string;
6
+ getValue: () => [Dayjs, Dayjs] | Dayjs | [Dayjs | null, Dayjs | null];
7
+ }
8
+ export interface ShortcutsPanelProps {
9
+ shortcuts?: ShortcutItem[];
10
+ onShortcutClick: (value: [Dayjs, Dayjs] | Dayjs | [Dayjs | null, Dayjs | null]) => void;
11
+ className?: string;
12
+ }
13
+ export declare const ShortcutsPanel: FC<ShortcutsPanelProps>;
@@ -0,0 +1,31 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import { cn as t } from "../../../../../../lib/utils.js";
3
+ import { Button as n } from "../../../button/button.js";
4
+ const i = [], m = ({
5
+ shortcuts: r = i,
6
+ onShortcutClick: a,
7
+ className: o
8
+ }) => r.length === 0 ? null : /* @__PURE__ */ l(
9
+ "div",
10
+ {
11
+ "data-slot": "shortcuts-panel",
12
+ className: t(
13
+ "flex flex-col gap-1 p-3 border-r border-border min-w-[150px]",
14
+ o
15
+ ),
16
+ children: r.map((e) => /* @__PURE__ */ l(
17
+ n,
18
+ {
19
+ variant: "ghost",
20
+ size: "default",
21
+ className: "w-full justify-start text-secondary-foreground",
22
+ onClick: () => a(e.getValue()),
23
+ children: e.label
24
+ },
25
+ e.id ?? e.label
26
+ ))
27
+ }
28
+ );
29
+ export {
30
+ m as ShortcutsPanel
31
+ };
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { TimeFormat } from '../../utils/format-utils';
3
+ export type TimePickerScrollProps = {
4
+ value: number | null;
5
+ onChange: (value: number) => void;
6
+ type: 'hour' | 'minute';
7
+ timeFormat?: TimeFormat;
8
+ className?: string;
9
+ };
10
+ export declare const TimePickerScroll: FC<TimePickerScrollProps>;
@@ -0,0 +1,52 @@
1
+ import { jsx as l } from "react/jsx-runtime";
2
+ import { useRef as f, useEffect as p } from "react";
3
+ import { cn as E } from "../../../../../../lib/utils.js";
4
+ import { generateHours as C, generateMinutes as d } from "../../utils/time-utils.js";
5
+ import { MIDNIGHT_HOUR as h, HOURS_IN_12H as s } from "../constants.js";
6
+ import { SCROLL_ITEM_SELECTED_CLASSES as u, SCROLL_ITEM_UNSELECTED_CLASSES as R, SCROLL_ITEM_BASE_CLASSES as T, SCROLL_CONTAINER_CLASSES as a } from "../scroll-cell-classes.js";
7
+ const M = ({
8
+ value: r,
9
+ onChange: m,
10
+ type: c,
11
+ timeFormat: i = "24h",
12
+ className: L
13
+ }) => {
14
+ const e = f(null), n = f(null), _ = c === "hour" ? C(i) : d(), S = r === null ? null : c === "hour" && i === "12h" ? r === h ? s : r > s ? r - s : r : r;
15
+ return p(() => {
16
+ if (r !== null && n.current && e.current) {
17
+ const o = e.current, t = n.current;
18
+ o.scrollTo({
19
+ top: t.offsetTop - o.offsetHeight / 2 + t.offsetHeight / 2,
20
+ behavior: "smooth"
21
+ });
22
+ }
23
+ }, [r]), /* @__PURE__ */ l(
24
+ "div",
25
+ {
26
+ "data-slot": "time-picker-scroll",
27
+ ref: e,
28
+ className: E(a, L),
29
+ children: _.map((o) => {
30
+ const t = S !== null && o === S;
31
+ return /* @__PURE__ */ l(
32
+ "div",
33
+ {
34
+ ref: t ? n : void 0,
35
+ className: E(
36
+ T,
37
+ t ? u : R
38
+ ),
39
+ onClick: () => m(o),
40
+ role: "option",
41
+ "aria-selected": t,
42
+ children: o.toString().padStart(2, "0")
43
+ },
44
+ o
45
+ );
46
+ })
47
+ }
48
+ );
49
+ };
50
+ export {
51
+ M as TimePickerScroll
52
+ };
@@ -0,0 +1,48 @@
1
+ import { Dayjs } from 'dayjs';
2
+ /**
3
+ * Get all days to display in a calendar month grid (including padding days from prev/next months)
4
+ * @param month - The month to display
5
+ * @param locale - Optional locale for week start day (e.g., 'en', 'nb', 'de')
6
+ */
7
+ export declare function getCalendarDays(month: Dayjs, locale?: string): Dayjs[];
8
+ /**
9
+ * Check if a date is within a given range (inclusive)
10
+ * Uses dayjs isBetween plugin with '[]' for inclusive start and end
11
+ * @see https://day.js.org/docs/en/plugin/is-between
12
+ */
13
+ export declare function isDateInRange(date: Dayjs, startDate: Dayjs | null, endDate: Dayjs | null): boolean;
14
+ /**
15
+ * Check if a date is outside the current display month
16
+ */
17
+ export declare function isOutsideMonth(date: Dayjs, displayMonth: Dayjs): boolean;
18
+ /**
19
+ * Check if a date is today
20
+ * Note: Uses local timezone. Both the input date and current time are compared
21
+ * using the user's local timezone, which is the expected behavior for calendar UIs.
22
+ * @param date - The date to check
23
+ * @param now - Optional current date for testing (defaults to dayjs())
24
+ */
25
+ export declare function isToday(date: Dayjs, now?: Dayjs): boolean;
26
+ /**
27
+ * Get an array of weekday names (short form)
28
+ * @param locale - Optional locale for localized weekday names (e.g., 'en', 'nb', 'de')
29
+ * @param baseDate - Optional base date for testing (defaults to dayjs())
30
+ */
31
+ export declare function getWeekdayNames(locale?: string, baseDate?: Dayjs): string[];
32
+ /**
33
+ * Get the week number for a given date
34
+ */
35
+ export declare function getWeekNumber(date: Dayjs): number;
36
+ /**
37
+ * Get all week numbers for days in a calendar month grid
38
+ */
39
+ export declare function getWeekNumbers(days: Dayjs[]): number[];
40
+ /**
41
+ * Check if two dates are the same day
42
+ */
43
+ export declare function isSameDay(date1: Dayjs | null, date2: Dayjs | null): boolean;
44
+ /**
45
+ * Format a date range for display
46
+ * When one date is missing, shows the format placeholder for the missing date
47
+ */
48
+ export declare function formatDateRange(startDate: Dayjs | null, endDate: Dayjs | null, format: string): string;
@@ -0,0 +1,52 @@
1
+ import r from "dayjs";
2
+ import c from "dayjs/plugin/isBetween";
3
+ import d from "dayjs/plugin/isSameOrBefore";
4
+ import m from "dayjs/plugin/weekOfYear";
5
+ import { DAYS_IN_WEEK as u } from "../shared/constants.js";
6
+ r.extend(c);
7
+ r.extend(d);
8
+ r.extend(m);
9
+ function p(e, t) {
10
+ const n = e, a = n.startOf("month").startOf("week"), i = n.endOf("month").endOf("week"), f = [];
11
+ let s = a;
12
+ for (; s.isSameOrBefore(i, "day"); )
13
+ f.push(s), s = s.add(1, "day");
14
+ return f;
15
+ }
16
+ function g(e, t, n) {
17
+ return !t || !n || !e.isValid() || !t.isValid() || !n.isValid() || t.isAfter(n, "day") ? !1 : e.isBetween(t, n, "day", "[]");
18
+ }
19
+ function b(e, t) {
20
+ return e.month() !== t.month();
21
+ }
22
+ function M(e, t) {
23
+ return e.isSame(r(), "day");
24
+ }
25
+ function S(e, t) {
26
+ const a = r().startOf("week");
27
+ return Array.from({ length: u }, (l, i) => a.add(i, "day").format("dd"));
28
+ }
29
+ function y(e) {
30
+ return e.week();
31
+ }
32
+ function W(e) {
33
+ const t = [];
34
+ for (let n = 0; n < e.length; n += u) {
35
+ const o = e[n];
36
+ o && t.push(y(o));
37
+ }
38
+ return t;
39
+ }
40
+ function N(e, t) {
41
+ return !e || !t ? !1 : e.isSame(t, "day");
42
+ }
43
+ export {
44
+ p as getCalendarDays,
45
+ y as getWeekNumber,
46
+ W as getWeekNumbers,
47
+ S as getWeekdayNames,
48
+ g as isDateInRange,
49
+ b as isOutsideMonth,
50
+ N as isSameDay,
51
+ M as isToday
52
+ };
@@ -0,0 +1,26 @@
1
+ import { Dayjs } from 'dayjs';
2
+ /**
3
+ * Applies start of day (00:00:00.000) to a given date
4
+ * @param date - Dayjs object
5
+ * @returns Dayjs object with time set to 00:00:00.000
6
+ */
7
+ export declare const applyStartOfDay: (date: Dayjs) => Dayjs;
8
+ /**
9
+ * Applies end of day (23:59:59.999) to a given date
10
+ * @param date - Dayjs object
11
+ * @returns Dayjs object with time set to 23:59:59.999
12
+ */
13
+ export declare const applyEndOfDay: (date: Dayjs) => Dayjs;
14
+ /**
15
+ * Validates that a date range is valid (start is before or equal to end)
16
+ * @param start - Start date (Dayjs or null)
17
+ * @param end - End date (Dayjs or null)
18
+ * @returns True if the range is valid, false otherwise
19
+ */
20
+ export declare const validateDateRange: (start: Dayjs | null, end: Dayjs | null) => boolean;
21
+ /**
22
+ * Converts a timestamp (milliseconds) to a Dayjs object
23
+ * @param timestamp - Timestamp in milliseconds
24
+ * @returns Dayjs object or null if timestamp is null or undefined
25
+ */
26
+ export declare const timestampToDayjs: (timestamp: number | undefined | null) => Dayjs | null;
@@ -0,0 +1,37 @@
1
+ import { Dayjs } from 'dayjs';
2
+ export type TimeFormat = '12h' | '24h';
3
+ /**
4
+ * Formats a date for display
5
+ * @param date - Dayjs date object
6
+ * @param format - Date format string (e.g., 'DD/MM/YYYY')
7
+ * @returns Formatted date string
8
+ */
9
+ export declare const formatDateDisplay: (date: Dayjs, format: string) => string;
10
+ /**
11
+ * Formats time for display using dayjs formatting
12
+ * @param time - Time object with hour and minute
13
+ * @param timeFormat - '12h' or '24h' format
14
+ * @returns Formatted time string (e.g., "9:05 AM" or "09:05")
15
+ */
16
+ export declare const formatTimeDisplay: (time: {
17
+ hour: number;
18
+ minute: number;
19
+ }, timeFormat?: TimeFormat) => string;
20
+ /**
21
+ * Formats a date range for display
22
+ * @param start - Start date
23
+ * @param end - End date
24
+ * @param format - Date format string
25
+ * @returns Formatted date range string (e.g., "10/05/2024 – 20/05/2024")
26
+ */
27
+ export declare const formatRangeDisplay: (start: Dayjs | null, end: Dayjs | null, format: string) => string;
28
+ /**
29
+ * Formats a date-time range for display
30
+ * @param start - Start date
31
+ * @param end - End date
32
+ * @param dateFormat - Date format string
33
+ * @param includeTime - Whether to include time in the format
34
+ * @param timeFormat - '12h' or '24h' format
35
+ * @returns Formatted date-time range string
36
+ */
37
+ export declare const formatDateTimeRangeDisplay: (start: Dayjs | null, end: Dayjs | null, dateFormat: string, includeTime?: boolean, timeFormat?: TimeFormat) => string;
@@ -0,0 +1,34 @@
1
+ export type SegmentType = 'day' | 'month' | 'year' | 'hour' | 'minute' | 'second' | 'ampm' | 'separator';
2
+ export type DateSegmentType = 'day' | 'month' | 'year';
3
+ export type TimeSegmentType = 'hour' | 'minute' | 'second' | 'ampm';
4
+ export interface Segment {
5
+ type: SegmentType;
6
+ token: string;
7
+ startIndex: number;
8
+ endIndex: number;
9
+ length: number;
10
+ editable: boolean;
11
+ }
12
+ /**
13
+ * Parse a date format string into an array of segments.
14
+ *
15
+ * @example
16
+ * parseFormatToSegments('DD/MM/YYYY')
17
+ * // Returns:
18
+ * // [
19
+ * // { type: 'day', token: 'DD', startIndex: 0, endIndex: 2, length: 2, editable: true },
20
+ * // { type: 'separator', token: '/', ... },
21
+ * // { type: 'month', token: 'MM', ... },
22
+ * // ...
23
+ * // ]
24
+ */
25
+ export declare const parseFormatToSegments: (format: string) => Segment[];
26
+ export declare const getEditableSegments: (format: string) => Segment[];
27
+ export declare const getSegmentAtPosition: (segments: Segment[], position: number) => Segment | undefined;
28
+ export declare const getEditableSegmentIndex: (segments: Segment[], segment: Segment) => number;
29
+ export declare const getNextEditableSegment: (segments: Segment[], currentSegment: Segment) => Segment | undefined;
30
+ export declare const getPreviousEditableSegment: (segments: Segment[], currentSegment: Segment) => Segment | undefined;
31
+ export declare const getFirstEditableSegment: (segments: Segment[]) => Segment | undefined;
32
+ export declare const getLastEditableSegment: (segments: Segment[]) => Segment | undefined;
33
+ export declare const isDateSegment: (type: SegmentType) => type is DateSegmentType;
34
+ export declare const isTimeSegment: (type: SegmentType) => type is TimeSegmentType;
@@ -0,0 +1,43 @@
1
+ import { TimeFormat } from './format-utils';
2
+ /**
3
+ * Generates an array of hours.
4
+ * If timeFormat is '12h', generates hours from 1 to 12.
5
+ * Otherwise, generates hours from 0 to 23.
6
+ * @returns Array of hours
7
+ */
8
+ export declare const generateHours: (timeFormat?: TimeFormat) => number[];
9
+ /**
10
+ * Generates an array of minutes in 5-minute increments
11
+ * @returns Array of minutes [0, 5, 10, ..., 55]
12
+ */
13
+ export declare const generateMinutes: () => number[];
14
+ /**
15
+ * Formats time components into HH:MM string format
16
+ * @param hour - Hour value (0-23)
17
+ * @param minute - Minute value (0-59)
18
+ * @returns Formatted time string (e.g., "09:05")
19
+ */
20
+ export declare const formatTime: (hour: number, minute: number) => string;
21
+ /**
22
+ * Parses a time string in HH:MM or H:MM format
23
+ * @param timeString - Time string in HH:MM format (e.g., "09:30", "9:30")
24
+ * @returns Object with hour and minute properties, or null if invalid
25
+ */
26
+ export declare const parseTime: (timeString: string) => {
27
+ hour: number;
28
+ minute: number;
29
+ } | null;
30
+ /**
31
+ * Gets AM/PM period from a 24-hour format hour.
32
+ */
33
+ export declare const getAmPmFromHour: (hour: number) => "AM" | "PM";
34
+ /**
35
+ * Converts a 12-hour format hour and AM/PM period to a 24-hour format hour.
36
+ */
37
+ export declare const convert12HourTo24Hour: (hour: number, ampm: "AM" | "PM") => number;
38
+ /**
39
+ * Converts a 24-hour format hour to a 12-hour display value (1-12).
40
+ * Used when displaying time in 12-hour format.
41
+ * @param hour24 - Hour value (0-23)
42
+ */
43
+ export declare const convert24HourTo12Hour: (hour24: number) => number;
@@ -0,0 +1,15 @@
1
+ import m from "dayjs";
2
+ import u from "dayjs/plugin/customParseFormat";
3
+ import { HOURS_IN_12H as t, HOURS_IN_DAY as f, MINUTES_IN_HOUR as s, MINUTE_INCREMENT as o } from "../shared/constants.js";
4
+ m.extend(u);
5
+ const c = (r = "24h") => r === "12h" ? Array.from({ length: t }, (e, n) => n + 1) : Array.from({ length: f }, (e, n) => n), M = () => Array.from(
6
+ { length: s / o },
7
+ (r, e) => e * o
8
+ ), a = (r) => r >= t ? "PM" : "AM", A = (r, e) => e === "PM" && r < t ? r + t : e === "AM" && r === t ? 0 : r, N = (r) => r === 0 ? t : r > t ? r - t : r;
9
+ export {
10
+ A as convert12HourTo24Hour,
11
+ N as convert24HourTo12Hour,
12
+ c as generateHours,
13
+ M as generateMinutes,
14
+ a as getAmPmFromHour
15
+ };
@@ -0,0 +1,23 @@
1
+ import { Dayjs } from 'dayjs';
2
+ /**
3
+ * Validates and orders a time range, swapping if end is before start
4
+ * @param startHour - Start hour (0-23)
5
+ * @param startMinute - Start minute (0-59)
6
+ * @param endHour - End hour (0-23)
7
+ * @param endMinute - End minute (0-59)
8
+ * @returns Ordered time range [start, end]
9
+ */
10
+ export declare const orderTimeRange: (startHour: number, startMinute: number, endHour: number, endMinute: number) => [{
11
+ hour: number;
12
+ minute: number;
13
+ }, {
14
+ hour: number;
15
+ minute: number;
16
+ }];
17
+ /**
18
+ * Validates and orders a date range, swapping if end is before start
19
+ * @param start - Start date
20
+ * @param end - End date
21
+ * @returns Ordered date range [start, end]
22
+ */
23
+ export declare const orderDateRange: (start: Dayjs, end: Dayjs) => [Dayjs, Dayjs];
@@ -1,18 +1,18 @@
1
1
  import { ComponentProps, ReactNode } from 'react';
2
2
  import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';
3
- declare function Dialog({ ...props }: DialogPrimitive.Root.Props): import("react/jsx-runtime").JSX.Element;
4
- declare function DialogTrigger({ children, ...props }: DialogPrimitive.Trigger.Props): import("react/jsx-runtime").JSX.Element;
5
- declare function DialogPortal({ ...props }: DialogPrimitive.Portal.Props): import("react/jsx-runtime").JSX.Element;
3
+ declare function Dialog({ ...props }: DialogPrimitive.Root.Props): ReactNode;
4
+ declare function DialogTrigger({ children, ...props }: DialogPrimitive.Trigger.Props): ReactNode;
5
+ declare function DialogPortal({ ...props }: DialogPrimitive.Portal.Props): ReactNode;
6
6
  declare function DialogClose({ children, ...props }: DialogPrimitive.Close.Props & {
7
7
  children?: ReactNode;
8
- }): import("react/jsx-runtime").JSX.Element;
9
- declare function DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props): import("react/jsx-runtime").JSX.Element;
8
+ }): ReactNode;
9
+ declare function DialogOverlay({ className, ...props }: DialogPrimitive.Backdrop.Props): ReactNode;
10
10
  declare function DialogContent({ className, children, showCloseButton, closeButtonLabel, ...props }: DialogPrimitive.Popup.Props & {
11
11
  showCloseButton?: boolean;
12
12
  closeButtonLabel?: string;
13
- }): import("react/jsx-runtime").JSX.Element;
14
- declare function DialogHeader({ className, ...props }: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
15
- declare function DialogFooter({ className, ...props }: ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
16
- declare function DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>): import("react/jsx-runtime").JSX.Element;
17
- declare function DialogDescription({ className, ...props }: DialogPrimitive.Description.Props): import("react/jsx-runtime").JSX.Element;
13
+ }): ReactNode;
14
+ declare function DialogHeader({ className, ...props }: ComponentProps<'div'>): ReactNode;
15
+ declare function DialogFooter({ className, ...props }: ComponentProps<'div'>): ReactNode;
16
+ declare function DialogTitle({ className, ...props }: ComponentProps<typeof DialogPrimitive.Title>): ReactNode;
17
+ declare function DialogDescription({ className, ...props }: DialogPrimitive.Description.Props): ReactNode;
18
18
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };
@@ -7,7 +7,10 @@ import { Button as g } from "../button/button.js";
7
7
  function b({ ...t }) {
8
8
  return /* @__PURE__ */ a(e.Root, { "data-slot": "dialog", ...t });
9
9
  }
10
- function v({ children: t, ...o }) {
10
+ function v({
11
+ children: t,
12
+ ...o
13
+ }) {
11
14
  return /* @__PURE__ */ a(e.Trigger, { "data-slot": "dialog-trigger", ...o, children: t });
12
15
  }
13
16
  function p({ ...t }) {
@@ -84,7 +87,10 @@ function C({
84
87
  )
85
88
  ] });
86
89
  }
87
- function k({ className: t, ...o }) {
90
+ function k({
91
+ className: t,
92
+ ...o
93
+ }) {
88
94
  return /* @__PURE__ */ a(
89
95
  "div",
90
96
  {
@@ -97,7 +103,10 @@ function k({ className: t, ...o }) {
97
103
  }
98
104
  );
99
105
  }
100
- function w({ className: t, ...o }) {
106
+ function w({
107
+ className: t,
108
+ ...o
109
+ }) {
101
110
  return /* @__PURE__ */ a(
102
111
  "div",
103
112
  {