@salt-ds/lab 1.0.0-alpha.51 → 1.0.0-alpha.52

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 (276) hide show
  1. package/css/salt-lab.css +256 -268
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/Calendar.js +6 -17
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
  6. package/dist-cjs/calendar/{internal/CalendarNavigation.js → CalendarNavigation.js} +160 -66
  7. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
  8. package/dist-cjs/calendar/formatDate.js +56 -0
  9. package/dist-cjs/calendar/formatDate.js.map +1 -0
  10. package/dist-cjs/calendar/internal/CalendarCarousel.js +3 -3
  11. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  12. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  13. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  14. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  15. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  16. package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
  17. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  18. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  19. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  20. package/dist-cjs/calendar/internal/utils.js +28 -23
  21. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  22. package/dist-cjs/calendar/useCalendar.js +94 -45
  23. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  24. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  25. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  26. package/dist-cjs/calendar/useCalendarSelection.js +360 -0
  27. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  28. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  29. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  30. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  31. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  32. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  33. package/dist-cjs/date-input/DateInput.css.js +1 -1
  34. package/dist-cjs/date-input/DateInputRange.js +355 -0
  35. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  36. package/dist-cjs/date-input/DateInputSingle.js +229 -0
  37. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  38. package/dist-cjs/date-input/utils.js +65 -0
  39. package/dist-cjs/date-input/utils.js.map +1 -0
  40. package/dist-cjs/date-picker/DatePicker.js +40 -150
  41. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  42. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  43. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  44. package/dist-cjs/date-picker/DatePickerActions.js +102 -0
  45. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  46. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  47. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  48. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  49. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  50. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  51. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  52. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  53. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  54. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  55. package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
  56. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  57. package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
  58. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  59. package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
  60. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  61. package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
  62. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  63. package/dist-cjs/date-picker/useDatePicker.js +179 -0
  64. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  65. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  66. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  67. package/dist-cjs/index.js +43 -10
  68. package/dist-cjs/index.js.map +1 -1
  69. package/dist-cjs/list/List.js.map +1 -1
  70. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  71. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  72. package/dist-cjs/slider/Slider.css.js +1 -1
  73. package/dist-cjs/slider/Slider.js +53 -105
  74. package/dist-cjs/slider/Slider.js.map +1 -1
  75. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  76. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  77. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  78. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  79. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  80. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  81. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  82. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  83. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  84. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  85. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  86. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  87. package/dist-cjs/slider/internal/utils.js +78 -116
  88. package/dist-cjs/slider/internal/utils.js.map +1 -1
  89. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  90. package/dist-cjs/tabs/useTabs.js.map +1 -1
  91. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  92. package/dist-es/calendar/Calendar.css.js +1 -1
  93. package/dist-es/calendar/Calendar.js +7 -18
  94. package/dist-es/calendar/Calendar.js.map +1 -1
  95. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  96. package/dist-es/calendar/CalendarNavigation.js +308 -0
  97. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  98. package/dist-es/calendar/formatDate.js +51 -0
  99. package/dist-es/calendar/formatDate.js.map +1 -0
  100. package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
  101. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  102. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  103. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  104. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  105. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  106. package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
  107. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
  108. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  109. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  110. package/dist-es/calendar/internal/utils.js +29 -23
  111. package/dist-es/calendar/internal/utils.js.map +1 -1
  112. package/dist-es/calendar/useCalendar.js +96 -47
  113. package/dist-es/calendar/useCalendar.js.map +1 -1
  114. package/dist-es/calendar/useCalendarDay.js +20 -11
  115. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  116. package/dist-es/calendar/useCalendarSelection.js +350 -0
  117. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  118. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  119. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  120. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  121. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  122. package/dist-es/content-status/ContentStatus.css.js +1 -1
  123. package/dist-es/date-input/DateInput.css.js +1 -1
  124. package/dist-es/date-input/DateInputRange.js +351 -0
  125. package/dist-es/date-input/DateInputRange.js.map +1 -0
  126. package/dist-es/date-input/DateInputSingle.js +225 -0
  127. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  128. package/dist-es/date-input/utils.js +57 -0
  129. package/dist-es/date-input/utils.js.map +1 -0
  130. package/dist-es/date-picker/DatePicker.js +43 -154
  131. package/dist-es/date-picker/DatePicker.js.map +1 -1
  132. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  133. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  134. package/dist-es/date-picker/DatePickerActions.js +98 -0
  135. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  136. package/dist-es/date-picker/DatePickerContext.js +22 -17
  137. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  138. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  139. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  140. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  141. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  142. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  143. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  144. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  145. package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
  146. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  147. package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
  148. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  149. package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
  150. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  151. package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
  152. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  153. package/dist-es/date-picker/useDatePicker.js +175 -0
  154. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  155. package/dist-es/dropdown/useDropdown.js.map +1 -1
  156. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  157. package/dist-es/index.js +14 -3
  158. package/dist-es/index.js.map +1 -1
  159. package/dist-es/list/List.js.map +1 -1
  160. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  161. package/dist-es/query-input/QueryInput.css.js +1 -1
  162. package/dist-es/slider/Slider.css.js +1 -1
  163. package/dist-es/slider/Slider.js +55 -107
  164. package/dist-es/slider/Slider.js.map +1 -1
  165. package/dist-es/slider/internal/SliderContext.js +16 -0
  166. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  167. package/dist-es/slider/internal/SliderMarks.js +27 -0
  168. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  169. package/dist-es/slider/internal/SliderSelection.js +17 -10
  170. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  171. package/dist-es/slider/internal/SliderThumb.js +73 -0
  172. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  173. package/dist-es/slider/internal/SliderTrack.js +87 -0
  174. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  175. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  176. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  177. package/dist-es/slider/internal/utils.js +70 -111
  178. package/dist-es/slider/internal/utils.js.map +1 -1
  179. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  180. package/dist-es/tabs/useTabs.js.map +1 -1
  181. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  182. package/dist-types/calendar/Calendar.d.ts +63 -6
  183. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  184. package/dist-types/calendar/formatDate.d.ts +14 -0
  185. package/dist-types/calendar/index.d.ts +3 -1
  186. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  187. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
  188. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  189. package/dist-types/calendar/internal/utils.d.ts +7 -8
  190. package/dist-types/calendar/useCalendar.d.ts +100 -16
  191. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  192. package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
  193. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  194. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  195. package/dist-types/date-input/index.d.ts +3 -1
  196. package/dist-types/date-input/utils.d.ts +43 -0
  197. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  198. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  199. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  200. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  201. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  202. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  203. package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
  204. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  205. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
  206. package/dist-types/date-picker/index.d.ts +7 -0
  207. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  208. package/dist-types/slider/Slider.d.ts +23 -10
  209. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  210. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  211. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  212. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  213. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  214. package/dist-types/slider/internal/index.d.ts +3 -0
  215. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  216. package/dist-types/slider/internal/utils.d.ts +18 -10
  217. package/dist-types/slider/types.d.ts +3 -1
  218. package/package.json +3 -3
  219. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  220. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  221. package/dist-cjs/calendar/useSelection.js +0 -249
  222. package/dist-cjs/calendar/useSelection.js.map +0 -1
  223. package/dist-cjs/date-input/DateInput.js +0 -283
  224. package/dist-cjs/date-input/DateInput.js.map +0 -1
  225. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  226. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  227. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  228. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  229. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  230. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  231. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  232. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  233. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  234. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  235. package/dist-cjs/slider/internal/styles.js +0 -99
  236. package/dist-cjs/slider/internal/styles.js.map +0 -1
  237. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  238. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  239. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  240. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  241. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  242. package/dist-es/calendar/internal/CalendarNavigation.js +0 -214
  243. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  244. package/dist-es/calendar/useSelection.js +0 -242
  245. package/dist-es/calendar/useSelection.js.map +0 -1
  246. package/dist-es/date-input/DateInput.js +0 -279
  247. package/dist-es/date-input/DateInput.js.map +0 -1
  248. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  249. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  250. package/dist-es/slider/internal/SliderHandle.js +0 -40
  251. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  252. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  253. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  254. package/dist-es/slider/internal/SliderRail.js +0 -21
  255. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  256. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  257. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  258. package/dist-es/slider/internal/styles.js +0 -91
  259. package/dist-es/slider/internal/styles.js.map +0 -1
  260. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  261. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  262. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  263. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  264. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -16
  265. package/dist-types/calendar/useSelection.d.ts +0 -78
  266. package/dist-types/date-input/DateInput.d.ts +0 -60
  267. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  268. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  269. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  270. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  271. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  272. package/dist-types/slider/internal/styles.d.ts +0 -10
  273. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  274. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  275. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  276. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
@@ -0,0 +1,150 @@
1
+ import { type DateValue } from "@internationalized/date";
2
+ import { type InputProps } from "@salt-ds/core";
3
+ import { type ChangeEvent, type ComponentPropsWithoutRef, type InputHTMLAttributes, type ReactNode, type Ref, type SyntheticEvent } from "react";
4
+ import { type DateRangeSelection } from "../calendar";
5
+ import type { DateInputSingleParserError } from "./DateInputSingle";
6
+ /**
7
+ * Date error produced by DateInputRange parser.
8
+ */
9
+ export declare type DateInputRangeParserError = string | false;
10
+ /**
11
+ * DateInputRange raw value or null if no date is defined.
12
+ */
13
+ export declare type DateInputRangeValue = {
14
+ startDate?: string | null;
15
+ endDate?: string | null;
16
+ };
17
+ /**
18
+ * Return value of DateInputRange parser.
19
+ * @template T
20
+ */
21
+ export interface DateInputRangeParserResult<T = DateValue | null> {
22
+ /**
23
+ * The parsed date value.
24
+ */
25
+ date: T;
26
+ /**
27
+ * The error encountered during parsing, if any.
28
+ */
29
+ error: DateInputRangeParserError;
30
+ }
31
+ /**
32
+ * Date Range error returned with selected date to indicate invalid dates.
33
+ */
34
+ export declare type DateInputRangeError = {
35
+ /**
36
+ * The error for the start date.
37
+ */
38
+ startDate: DateInputSingleParserError;
39
+ /**
40
+ * The error for the end date.
41
+ */
42
+ endDate: DateInputSingleParserError;
43
+ };
44
+ /**
45
+ * Props for the DateInputRange component.
46
+ * @template T
47
+ */
48
+ export interface DateInputRangeProps<T = DateRangeSelection> extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue" | "onChange">, Omit<InputProps, "defaultValue" | "inputRef" | "value" | "onChange"> {
49
+ /**
50
+ * The aria-label for accessibility.
51
+ */
52
+ ariaLabel?: string;
53
+ /**
54
+ * Styling variant with full border. Defaults to false.
55
+ */
56
+ bordered?: boolean;
57
+ /**
58
+ * The marker to use in an empty read-only DateInput.
59
+ * Use `''` to disable this feature. Defaults to '—'.
60
+ */
61
+ emptyReadOnlyMarker?: string;
62
+ /**
63
+ * End adornment component.
64
+ */
65
+ endAdornment?: ReactNode;
66
+ /**
67
+ * Attributes applied to the start `input` element.
68
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
69
+ */
70
+ startInputProps?: InputHTMLAttributes<HTMLInputElement>;
71
+ /**
72
+ * Attributes applied to the end `input` element.
73
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
74
+ */
75
+ endInputProps?: InputHTMLAttributes<HTMLInputElement>;
76
+ /**
77
+ * If `true`, the component is read-only.
78
+ */
79
+ readOnly?: boolean;
80
+ /**
81
+ * Validation status.
82
+ */
83
+ validationStatus?: "error" | "warning" | "success";
84
+ /**
85
+ * Styling variant. Defaults to "primary".
86
+ */
87
+ variant?: "primary" | "secondary";
88
+ /**
89
+ * Function to format the input value.
90
+ */
91
+ format?: (date: DateValue | null) => string;
92
+ /**
93
+ * Optional ref for the start input component.
94
+ */
95
+ startInputRef?: Ref<HTMLInputElement>;
96
+ /**
97
+ * Optional ref for the end input component.
98
+ */
99
+ endInputRef?: Ref<HTMLInputElement>;
100
+ /**
101
+ * Input value. Use when the input value is controlled.
102
+ */
103
+ value?: DateInputRangeValue;
104
+ /**
105
+ * The initial input value. Use when the component is uncontrolled.
106
+ */
107
+ defaultValue?: DateInputRangeValue;
108
+ /**
109
+ * The date value. Use when the component is controlled.
110
+ */
111
+ date?: T | null;
112
+ /**
113
+ * The initial selected date value. Use when the component is uncontrolled.
114
+ */
115
+ defaultDate?: T | null;
116
+ /**
117
+ * Callback fired when the input value changes.
118
+ * @param event - The change event.
119
+ * @param date - The new date input range value.
120
+ */
121
+ onChange?: (event: ChangeEvent<HTMLInputElement>, date: DateInputRangeValue) => void;
122
+ /**
123
+ * Callback fired when the selected date changes.
124
+ * @param event - The synthetic event.
125
+ * @param date - The new date value.
126
+ * @param error - The date input range error.
127
+ */
128
+ onDateChange?: (event: SyntheticEvent, date: T | null, error: DateInputRangeError) => void;
129
+ /**
130
+ * Called when input values change, either due to user interaction or programmatic formatting of valid dates.
131
+ * @param newValue - The new date input range value.
132
+ * @param isFormatted - Whether the value is formatted.
133
+ */
134
+ onDateValueChange?: (newValue: DateInputRangeValue, isFormatted: boolean) => void;
135
+ /**
136
+ * Function to parse date string to valid `DateValue` or null, if invalid.
137
+ * @param inputDate - The input date string.
138
+ * @returns The result of the date input range parser.
139
+ */
140
+ parse?: (inputDate: string) => DateInputRangeParserResult;
141
+ /**
142
+ * Locale of the entered date.
143
+ */
144
+ locale?: string;
145
+ /**
146
+ * Timezone of the entered date.
147
+ */
148
+ timeZone?: string;
149
+ }
150
+ export declare const DateInputRange: import("react").ForwardRefExoticComponent<DateInputRangeProps<DateRangeSelection> & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,117 @@
1
+ import { type DateValue } from "@internationalized/date";
2
+ import { type ComponentPropsWithoutRef, type InputHTMLAttributes, type ReactNode, type RefObject, type SyntheticEvent } from "react";
3
+ import { type SingleDateSelection } from "../calendar";
4
+ /**
5
+ * Date error produced by DateInputSingle parser.
6
+ */
7
+ export declare type DateInputSingleParserError = string | false;
8
+ /**
9
+ * Date error produced by DateInputSingle parser.
10
+ */
11
+ export declare type DateInputSingleError = DateInputSingleParserError;
12
+ /**
13
+ * Return value of DateInputSingle parser.
14
+ * @template T
15
+ */
16
+ export interface DateInputSingleParserResult<T = DateValue | null> {
17
+ /**
18
+ * The parsed date value.
19
+ */
20
+ date: T;
21
+ /**
22
+ * The error encountered during parsing, if any.
23
+ */
24
+ error: DateInputSingleParserError;
25
+ }
26
+ /**
27
+ * Props for the DateInputSingle component.
28
+ * @template T
29
+ */
30
+ export interface DateInputSingleProps<T = SingleDateSelection> extends Omit<ComponentPropsWithoutRef<"div">, "defaultValue">, Pick<ComponentPropsWithoutRef<"input">, "disabled" | "value" | "defaultValue" | "placeholder"> {
31
+ /**
32
+ * The aria-label for accessibility.
33
+ */
34
+ ariaLabel?: string;
35
+ /**
36
+ * Styling variant with full border. Defaults to false.
37
+ */
38
+ bordered?: boolean;
39
+ /**
40
+ * The marker to use in an empty read-only DateInput.
41
+ * Use `''` to disable this feature. Defaults to '—'.
42
+ */
43
+ emptyReadOnlyMarker?: string;
44
+ /**
45
+ * End adornment component.
46
+ */
47
+ endAdornment?: ReactNode;
48
+ /**
49
+ * Attributes applied to the `input` element.
50
+ * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes
51
+ */
52
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
53
+ /**
54
+ * If `true`, the component is read-only.
55
+ */
56
+ readOnly?: boolean;
57
+ /**
58
+ * Validation status.
59
+ */
60
+ validationStatus?: "error" | "warning" | "success";
61
+ /**
62
+ * Styling variant. Defaults to "primary".
63
+ */
64
+ variant?: "primary" | "secondary";
65
+ /**
66
+ * Function to format the input value.
67
+ */
68
+ format?: (date: DateValue | null) => string;
69
+ /**
70
+ * Reference for the input.
71
+ */
72
+ inputRef?: RefObject<HTMLInputElement>;
73
+ /**
74
+ * Input value. Use when the input value is controlled.
75
+ */
76
+ value?: string;
77
+ /**
78
+ * The initial input value. Use when the component is uncontrolled.
79
+ */
80
+ defaultValue?: string;
81
+ /**
82
+ * The date value. Use when the component is controlled.
83
+ */
84
+ date?: T | null;
85
+ /**
86
+ * The initial selected date value. Use when the component is uncontrolled.
87
+ */
88
+ defaultDate?: T | null;
89
+ /**
90
+ * Callback fired when the selected date changes.
91
+ * @param event - The synthetic event.
92
+ * @param date - The new date value.
93
+ * @param error - The date input single error.
94
+ */
95
+ onDateChange?: (event: SyntheticEvent, date: T | null, error: DateInputSingleError) => void;
96
+ /**
97
+ * Function to parse date string to valid `DateValue` or null, if invalid or empty.
98
+ * @param inputDate - The input date string.
99
+ * @returns The result of the date input single parser.
100
+ */
101
+ parse?: (inputDate: string) => DateInputSingleParserResult;
102
+ /**
103
+ * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.
104
+ * @param newValue - The new date input value.
105
+ * @param isFormatted - Whether the value is formatted.
106
+ */
107
+ onDateValueChange?: (newValue: string, isFormatted: boolean) => void;
108
+ /**
109
+ * Locale of the entered date.
110
+ */
111
+ locale?: string;
112
+ /**
113
+ * Timezone of the entered date.
114
+ */
115
+ timeZone?: string;
116
+ }
117
+ export declare const DateInputSingle: import("react").ForwardRefExoticComponent<DateInputSingleProps<DateValue> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1 +1,3 @@
1
- export * from "./DateInput";
1
+ export * from "./DateInputSingle";
2
+ export * from "./DateInputRange";
3
+ export * from "./utils";
@@ -0,0 +1,43 @@
1
+ import { CalendarDateTime, type DateValue, type TimeFields, ZonedDateTime } from "@internationalized/date";
2
+ import type { DateRangeSelection, SingleDateSelection } from "../calendar";
3
+ export declare type RangeTimeFields = {
4
+ startTime?: TimeFields;
5
+ endTime?: TimeFields;
6
+ };
7
+ /**
8
+ * Parses a string into a CalendarDate.
9
+ * @param inputDate - The input date string.
10
+ * @returns An object containing the parsed date and any error encountered.
11
+ */
12
+ export declare function parseCalendarDate(inputDate: string): {
13
+ date: DateValue | null;
14
+ error: string | false;
15
+ };
16
+ /**
17
+ * Parses a string into a ZonedDateTime.
18
+ * @param inputDate - The input date string.
19
+ * @param timeZone - The time zone to use for parsing. Defaults to the local time zone.
20
+ * @returns An object containing the parsed date and any error encountered.
21
+ */
22
+ export declare function parseZonedDateTime(inputDate: string, timeZone?: string): {
23
+ date: DateValue | null;
24
+ error: string | false;
25
+ };
26
+ /**
27
+ * Checks if a date supports time fields.
28
+ * @param date - The date to check.
29
+ * @returns `true` if the date supports time fields, otherwise `false`.
30
+ */
31
+ export declare const dateSupportsTime: (date: DateValue) => date is CalendarDateTime | ZonedDateTime;
32
+ /**
33
+ * Extracts time fields from a date range selection.
34
+ * @param selectedDate - The selected date range.
35
+ * @returns An object containing the start and end time fields.
36
+ */
37
+ export declare function extractTimeFieldsFromDateRange(selectedDate: DateRangeSelection | null): RangeTimeFields;
38
+ /**
39
+ * Extracts time fields from a single date selection.
40
+ * @param selectedDate - The selected date.
41
+ * @returns The time fields of the selected date, if available.
42
+ */
43
+ export declare function extractTimeFieldsFromDate(selectedDate: SingleDateSelection | null): TimeFields | undefined;
@@ -1,66 +1,24 @@
1
- import { type ChangeEvent, type SyntheticEvent } from "react";
2
- import { type DateValue } from "@internationalized/date";
3
- import { type CalendarProps, type RangeSelectionValueType, type SingleSelectionValueType } from "../calendar";
4
- import { type DateInputProps } from "../date-input";
5
- export interface DatePickerProps<SelectionVariantType> extends DateInputProps<SelectionVariantType> {
6
- /**
7
- * Selection variant. Defaults to single select.
8
- */
9
- selectionVariant?: "default" | "range";
10
- /**
11
- * If `true`, the component will be disabled.
12
- */
13
- disabled?: boolean;
14
- /**
15
- * The selected date value. Use when the component is controlled.
16
- * Can be a single date or an object with start and end dates for range selection.
17
- */
18
- selectedDate?: SelectionVariantType;
19
- /**
20
- * The default date value. Use when the component is not controlled.
21
- * Can be a single date or an object with start and end dates for range selection.
22
- */
23
- defaultSelectedDate?: SelectionVariantType;
24
- /**
25
- * Props to be passed to the Calendar component.
26
- */
27
- CalendarProps?: Partial<Omit<CalendarProps, "selectionVariant" | "selectedDate" | "defaultSelectedDate" | "onSelectedDateChange">>;
28
- /**
29
- * Function to format the input value.
30
- */
31
- dateFormatter?: (input: DateValue | undefined) => string;
32
- /**
33
- * Callback function triggered when open state changes.
34
- */
35
- onOpenChange?: (newOpen: boolean) => void;
36
- /**
37
- * Display or hide the component.
38
- */
1
+ import { type ReactNode } from "react";
2
+ import { type UseDatePickerRangeProps, type UseDatePickerSingleProps } from "./useDatePicker";
3
+ /**
4
+ * Base props for DatePicker.
5
+ */
6
+ export interface DatePickerBaseProps {
7
+ className?: string;
8
+ children?: ReactNode;
9
+ /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */
39
10
  open?: boolean;
40
11
  /**
41
- * The default open value. Use when the component is not controlled.
42
- */
43
- defaultOpen?: boolean;
44
- /**
45
- * Helper text to display in the panel
46
- */
47
- helperText?: string;
48
- /**
49
- * Validation status.
50
- */
51
- validationStatus?: "error" | "warning" | "success";
52
- /**
53
- * Callback fired when the selected date change.
54
- */
55
- onSelectionChange?: (event: SyntheticEvent, selectedDate?: SelectionVariantType) => void;
56
- /**
57
- * Callback fired when the input value change.
12
+ * the initial open/close state of the overlay, when the open/close state is un-controlled.
58
13
  */
59
- onChange?: SelectionVariantType extends SingleSelectionValueType ? (event: ChangeEvent<HTMLInputElement>, selectedDateInputValue?: string) => void : (event: ChangeEvent<HTMLInputElement>, startDateInputValue?: string, endDateInputValue?: string) => void;
60
- /**
61
- * Number of Calendars to be shown if selectionVariant is range.
62
- * 2 is the default value.
63
- */
64
- visibleMonths?: 1 | 2;
14
+ defaultOpen?: DatePickerBaseProps["open"];
15
+ }
16
+ export interface DatePickerSingleProps extends DatePickerBaseProps, UseDatePickerSingleProps {
17
+ selectionVariant: "single";
18
+ }
19
+ export interface DatePickerRangeProps extends DatePickerBaseProps, UseDatePickerRangeProps {
20
+ selectionVariant: "range";
65
21
  }
66
- export declare const DatePicker: import("react").ForwardRefExoticComponent<DatePickerProps<DateValue | RangeSelectionValueType> & import("react").RefAttributes<HTMLDivElement>>;
22
+ export declare type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
23
+ export declare const DatePickerMain: import("react").ForwardRefExoticComponent<DatePickerProps & import("react").RefAttributes<HTMLDivElement>>;
24
+ export declare const DatePicker: import("react").ForwardRefExoticComponent<DatePickerProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,80 @@
1
+ import { type ButtonProps } from "@salt-ds/core";
2
+ import React, { type ComponentPropsWithoutRef, type SyntheticEvent, type Ref } from "react";
3
+ import type { DateRangeSelection, SingleDateSelection } from "../calendar";
4
+ import "./DatePickerActions.css";
5
+ /**
6
+ * Base props for DatePicker actions.
7
+ */
8
+ export interface DatePickerActionsBaseProps extends ComponentPropsWithoutRef<"div"> {
9
+ /**
10
+ * Callback fired when the cancel action is triggered.
11
+ * @param _event - The synthetic event.
12
+ */
13
+ onCancel?: (_event: SyntheticEvent) => void;
14
+ /**
15
+ * Ref to apply button
16
+ */
17
+ applyButtonRef?: Ref<HTMLButtonElement>;
18
+ /**
19
+ * Props for the apply button.
20
+ */
21
+ ApplyButtonProps?: ButtonProps;
22
+ /**
23
+ * Props for the cancel button.
24
+ */
25
+ CancelButtonProps?: ButtonProps;
26
+ /**
27
+ * Ref to cancel button
28
+ */
29
+ cancelButtonRef?: Ref<HTMLButtonElement>;
30
+ }
31
+ /**
32
+ * Props for the DatePicker actions component.
33
+ * @template SelectionVariant - The selection variant, either "single" or "range".
34
+ */
35
+ export declare type DatePickerActionsProps<SelectionVariant extends "single" | "range"> = SelectionVariant extends "single" ? DatePickerActionsBaseProps & {
36
+ /**
37
+ * The selection variant, set to "single".
38
+ */
39
+ selectionVariant: "single";
40
+ /**
41
+ * Callback fired when the apply action is triggered.
42
+ * @param _event - The synthetic event.
43
+ * @param date - The selected single date or null.
44
+ */
45
+ onApply?: (_event: SyntheticEvent, date: SingleDateSelection | null) => void;
46
+ } : DatePickerActionsBaseProps & {
47
+ /**
48
+ * The selection variant, set to "range".
49
+ */
50
+ selectionVariant: "range";
51
+ /**
52
+ * Callback fired when the apply action is triggered.
53
+ * @param _event - The synthetic event.
54
+ * @param date - The selected date range or null.
55
+ */
56
+ onApply?: (_event: SyntheticEvent, date: DateRangeSelection | null) => void;
57
+ };
58
+ export declare const DatePickerActions: React.ForwardRefExoticComponent<((DatePickerActionsBaseProps & {
59
+ /**
60
+ * The selection variant, set to "single".
61
+ */
62
+ selectionVariant: "single";
63
+ /**
64
+ * Callback fired when the apply action is triggered.
65
+ * @param _event - The synthetic event.
66
+ * @param date - The selected single date or null.
67
+ */
68
+ onApply?: ((_event: SyntheticEvent, date: SingleDateSelection | null) => void) | undefined;
69
+ }) | (DatePickerActionsBaseProps & {
70
+ /**
71
+ * The selection variant, set to "range".
72
+ */
73
+ selectionVariant: "range";
74
+ /**
75
+ * Callback fired when the apply action is triggered.
76
+ * @param _event - The synthetic event.
77
+ * @param date - The selected date range or null.
78
+ */
79
+ onApply?: ((_event: SyntheticEvent, date: DateRangeSelection | null) => void) | undefined;
80
+ })) & React.RefAttributes<HTMLDivElement>>;
@@ -1,19 +1,182 @@
1
1
  import type { DateValue } from "@internationalized/date";
2
- import { type UseFloatingUIReturn } from "@salt-ds/core";
3
- import type { RangeSelectionValueType } from "../calendar";
4
- export interface DatePickerContextValue<SelectionVariantType> extends Partial<Pick<UseFloatingUIReturn, "context">> {
5
- openState: boolean;
6
- setOpen: (newOpen: boolean) => void;
7
- disabled: boolean;
8
- selectedDate: SelectionVariantType | undefined;
9
- defaultSelectedDate: SelectionVariantType | undefined;
10
- setSelectedDate: (newStartDate: SelectionVariantType | undefined) => void;
11
- startVisibleMonth: DateValue | undefined;
12
- setStartVisibleMonth: (newStartDate: DateValue | undefined) => void;
13
- endVisibleMonth: DateValue | undefined;
14
- setEndVisibleMonth: (newStartDate: DateValue | undefined) => void;
15
- selectionVariant: "default" | "range";
16
- getPanelPosition: () => Record<string, unknown>;
2
+ import type { DateRangeSelection, SingleDateSelection } from "../calendar";
3
+ import type { DateInputRangeError, DateInputSingleError } from "../date-input";
4
+ /**
5
+ * Interface representing the base state for a DatePicker.
6
+ */
7
+ interface DatePickerBaseState {
8
+ /**
9
+ * The state properties of the DatePicker.
10
+ */
11
+ state: {
12
+ /**
13
+ * If `true`, the DatePicker is disabled.
14
+ */
15
+ disabled?: boolean;
16
+ /**
17
+ * If `true`, the DatePicker is read-only.
18
+ */
19
+ readOnly?: boolean;
20
+ /**
21
+ * If `true`, the DatePicker has been cancelled.
22
+ */
23
+ cancelled?: boolean;
24
+ /**
25
+ * If `true`, the apply action is enabled.
26
+ */
27
+ enableApply?: boolean;
28
+ /**
29
+ * The minimum selectable date.
30
+ */
31
+ minDate?: DateValue;
32
+ /**
33
+ * The maximum selectable date.
34
+ */
35
+ maxDate?: DateValue;
36
+ /**
37
+ * Reference to the container element.
38
+ */
39
+ containerRef: React.Ref<HTMLDivElement>;
40
+ /**
41
+ * The locale used for date formatting.
42
+ */
43
+ locale?: string;
44
+ /**
45
+ * The time zone used for date formatting.
46
+ */
47
+ timeZone?: string;
48
+ };
49
+ /**
50
+ * Helper functions for managing the DatePicker state.
51
+ */
52
+ helpers: {
53
+ /**
54
+ * Cancels the DatePicker action.
55
+ */
56
+ cancel: () => void;
57
+ /**
58
+ * Sets the enableApply state.
59
+ * @param newEnableApply - The new value for enableApply.
60
+ */
61
+ setEnableApply: (newEnableApply: boolean) => void;
62
+ };
17
63
  }
18
- export declare const DatePickerContext: import("react").Context<DatePickerContextValue<DateValue | RangeSelectionValueType>>;
19
- export declare function useDatePickerContext(): DatePickerContextValue<DateValue | RangeSelectionValueType>;
64
+ /**
65
+ * Type representing a single date picker error.
66
+ */
67
+ export declare type SingleDatePickerError = DateInputSingleError;
68
+ /**
69
+ * Type representing a range date picker error.
70
+ */
71
+ export declare type RangeDatePickerError = DateInputRangeError;
72
+ /**
73
+ * Interface representing the state for a single date picker.
74
+ */
75
+ export interface SingleDatePickerState extends DatePickerBaseState {
76
+ /**
77
+ * The state properties of the single date picker.
78
+ */
79
+ state: DatePickerBaseState["state"] & {
80
+ /**
81
+ * The selected date.
82
+ */
83
+ selectedDate: SingleDateSelection | null;
84
+ /**
85
+ * The default selected date.
86
+ */
87
+ defaultSelectedDate?: SingleDateSelection;
88
+ };
89
+ /**
90
+ * Helper functions for managing the single date picker state.
91
+ */
92
+ helpers: DatePickerBaseState["helpers"] & {
93
+ /**
94
+ * Applies the selected date.
95
+ * @param newDate - The new selected date.
96
+ * @param error - The error encountered during selection, if any.
97
+ */
98
+ apply: (newDate: SingleDateSelection | null, error: SingleDatePickerError) => void;
99
+ /**
100
+ * Sets the selected date.
101
+ * @param newDate - The new selected date.
102
+ * @param error - The error encountered during selection, if any.
103
+ */
104
+ setSelectedDate: (newDate: SingleDateSelection | null, error: string | false) => void;
105
+ };
106
+ }
107
+ /**
108
+ * Interface representing the state for a range date picker.
109
+ */
110
+ export interface RangeDatePickerState extends DatePickerBaseState {
111
+ /**
112
+ * The state properties of the range date picker.
113
+ */
114
+ state: DatePickerBaseState["state"] & {
115
+ /**
116
+ * The selected date range.
117
+ */
118
+ selectedDate: DateRangeSelection | null;
119
+ /**
120
+ * The default selected date range.
121
+ */
122
+ defaultSelectedDate?: DateRangeSelection;
123
+ };
124
+ /**
125
+ * Helper functions for managing the range date picker state.
126
+ */
127
+ helpers: DatePickerBaseState["helpers"] & {
128
+ /**
129
+ * Applies the selected date range.
130
+ * @param newDate - The new selected date range.
131
+ * @param error - The error encountered during selection, if any.
132
+ */
133
+ apply: (newDate: DateRangeSelection | null, error: RangeDatePickerError) => void;
134
+ /**
135
+ * Sets the selected date range.
136
+ * @param newDate - The new selected date range.
137
+ * @param error - The error encountered during selection, if any.
138
+ */
139
+ setSelectedDate: (newDate: DateRangeSelection | null, error: {
140
+ startDate: string | false;
141
+ endDate: string | false;
142
+ }) => void;
143
+ };
144
+ }
145
+ /**
146
+ * Type representing the state of a date picker, either single or range.
147
+ */
148
+ export declare type DatePickerState = SingleDatePickerState | RangeDatePickerState;
149
+ /**
150
+ * Context for single date selection.
151
+ */
152
+ export declare const SingleDateSelectionContext: import("react").Context<SingleDatePickerState | undefined>;
153
+ /**
154
+ * Context for date range selection.
155
+ */
156
+ export declare const DateRangeSelectionContext: import("react").Context<RangeDatePickerState | undefined>;
157
+ /**
158
+ * Props for using the date picker context.
159
+ */
160
+ export interface UseDatePickerContextProps {
161
+ /**
162
+ * The selection variant, either "single" or "range".
163
+ */
164
+ selectionVariant: "single" | "range";
165
+ }
166
+ /**
167
+ * Hook to use the date picker context for single date selection.
168
+ * @param props - The props for the hook.
169
+ * @returns The state of the single date picker.
170
+ */
171
+ export declare function useDatePickerContext(props: {
172
+ selectionVariant: "single";
173
+ }): SingleDatePickerState;
174
+ /**
175
+ * Hook to use the date picker context for range date selection.
176
+ * @param props - The props for the hook.
177
+ * @returns The state of the range date picker.
178
+ */
179
+ export declare function useDatePickerContext(props: {
180
+ selectionVariant: "range";
181
+ }): RangeDatePickerState;
182
+ export {};