@salt-ds/lab 1.0.0-alpha.50 → 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 (295) hide show
  1. package/css/salt-lab.css +279 -267
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/Calendar.js +6 -15
  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 -63
  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.css.js +1 -1
  13. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  14. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  15. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  16. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  17. package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
  18. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  19. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  20. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  21. package/dist-cjs/calendar/internal/utils.js +28 -23
  22. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  23. package/dist-cjs/calendar/useCalendar.js +94 -45
  24. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  25. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  26. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  27. package/dist-cjs/calendar/useCalendarSelection.js +360 -0
  28. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  29. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  30. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  31. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  32. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  33. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  34. package/dist-cjs/date-input/DateInput.css.js +1 -1
  35. package/dist-cjs/date-input/DateInputRange.js +355 -0
  36. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  37. package/dist-cjs/date-input/DateInputSingle.js +229 -0
  38. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  39. package/dist-cjs/date-input/utils.js +65 -0
  40. package/dist-cjs/date-input/utils.js.map +1 -0
  41. package/dist-cjs/date-picker/DatePicker.js +40 -148
  42. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  43. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  44. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  45. package/dist-cjs/date-picker/DatePickerActions.js +102 -0
  46. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  47. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  48. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  49. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  50. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  51. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  52. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  53. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  54. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  55. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  56. package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
  57. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  58. package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
  59. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  60. package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
  61. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  62. package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
  63. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  64. package/dist-cjs/date-picker/useDatePicker.js +179 -0
  65. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  66. package/dist-cjs/dropdown/Dropdown.css.js +1 -1
  67. package/dist-cjs/dropdown/DropdownBase.js +1 -1
  68. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  69. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  70. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  71. package/dist-cjs/index.js +43 -10
  72. package/dist-cjs/index.js.map +1 -1
  73. package/dist-cjs/list/List.js.map +1 -1
  74. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  75. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  76. package/dist-cjs/slider/Slider.css.js +1 -1
  77. package/dist-cjs/slider/Slider.js +53 -105
  78. package/dist-cjs/slider/Slider.js.map +1 -1
  79. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  80. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  81. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  82. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  83. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  84. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  85. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  86. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  87. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  88. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  89. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  90. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  91. package/dist-cjs/slider/internal/utils.js +78 -116
  92. package/dist-cjs/slider/internal/utils.js.map +1 -1
  93. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  94. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js +29 -25
  95. package/dist-cjs/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  96. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  97. package/dist-cjs/tabs/Tabstrip.css.js +1 -1
  98. package/dist-cjs/tabs/useTabs.js.map +1 -1
  99. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  100. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  101. package/dist-es/calendar/Calendar.css.js +1 -1
  102. package/dist-es/calendar/Calendar.js +7 -16
  103. package/dist-es/calendar/Calendar.js.map +1 -1
  104. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  105. package/dist-es/calendar/CalendarNavigation.js +308 -0
  106. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  107. package/dist-es/calendar/formatDate.js +51 -0
  108. package/dist-es/calendar/formatDate.js.map +1 -0
  109. package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
  110. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  111. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  112. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  113. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  114. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  115. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  116. package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
  117. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
  118. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  119. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  120. package/dist-es/calendar/internal/utils.js +29 -23
  121. package/dist-es/calendar/internal/utils.js.map +1 -1
  122. package/dist-es/calendar/useCalendar.js +96 -47
  123. package/dist-es/calendar/useCalendar.js.map +1 -1
  124. package/dist-es/calendar/useCalendarDay.js +20 -11
  125. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  126. package/dist-es/calendar/useCalendarSelection.js +350 -0
  127. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  128. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  129. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  130. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  131. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  132. package/dist-es/content-status/ContentStatus.css.js +1 -1
  133. package/dist-es/date-input/DateInput.css.js +1 -1
  134. package/dist-es/date-input/DateInputRange.js +351 -0
  135. package/dist-es/date-input/DateInputRange.js.map +1 -0
  136. package/dist-es/date-input/DateInputSingle.js +225 -0
  137. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  138. package/dist-es/date-input/utils.js +57 -0
  139. package/dist-es/date-input/utils.js.map +1 -0
  140. package/dist-es/date-picker/DatePicker.js +43 -152
  141. package/dist-es/date-picker/DatePicker.js.map +1 -1
  142. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  143. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  144. package/dist-es/date-picker/DatePickerActions.js +98 -0
  145. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  146. package/dist-es/date-picker/DatePickerContext.js +22 -17
  147. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  148. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  149. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  150. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  151. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  152. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  153. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  154. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  155. package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
  156. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  157. package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
  158. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  159. package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
  160. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  161. package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
  162. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  163. package/dist-es/date-picker/useDatePicker.js +175 -0
  164. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  165. package/dist-es/dropdown/Dropdown.css.js +1 -1
  166. package/dist-es/dropdown/DropdownBase.js +1 -1
  167. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  168. package/dist-es/dropdown/useDropdown.js.map +1 -1
  169. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  170. package/dist-es/index.js +14 -3
  171. package/dist-es/index.js.map +1 -1
  172. package/dist-es/list/List.js.map +1 -1
  173. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  174. package/dist-es/query-input/QueryInput.css.js +1 -1
  175. package/dist-es/slider/Slider.css.js +1 -1
  176. package/dist-es/slider/Slider.js +55 -107
  177. package/dist-es/slider/Slider.js.map +1 -1
  178. package/dist-es/slider/internal/SliderContext.js +16 -0
  179. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  180. package/dist-es/slider/internal/SliderMarks.js +27 -0
  181. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  182. package/dist-es/slider/internal/SliderSelection.js +17 -10
  183. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  184. package/dist-es/slider/internal/SliderThumb.js +73 -0
  185. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  186. package/dist-es/slider/internal/SliderTrack.js +87 -0
  187. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  188. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  189. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  190. package/dist-es/slider/internal/utils.js +70 -111
  191. package/dist-es/slider/internal/utils.js.map +1 -1
  192. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.css.js +1 -1
  193. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js +30 -26
  194. package/dist-es/stepped-tracker/TrackerStep/TrackerStep.js.map +1 -1
  195. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  196. package/dist-es/tabs/Tabstrip.css.js +1 -1
  197. package/dist-es/tabs/useTabs.js.map +1 -1
  198. package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  199. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  200. package/dist-types/calendar/Calendar.d.ts +63 -5
  201. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  202. package/dist-types/calendar/formatDate.d.ts +14 -0
  203. package/dist-types/calendar/index.d.ts +3 -1
  204. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  205. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
  206. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  207. package/dist-types/calendar/internal/utils.d.ts +7 -8
  208. package/dist-types/calendar/useCalendar.d.ts +100 -16
  209. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  210. package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
  211. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  212. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  213. package/dist-types/date-input/index.d.ts +3 -1
  214. package/dist-types/date-input/utils.d.ts +43 -0
  215. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  216. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  217. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  218. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  219. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  220. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  221. package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
  222. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  223. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
  224. package/dist-types/date-picker/index.d.ts +7 -0
  225. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  226. package/dist-types/slider/Slider.d.ts +23 -10
  227. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  228. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  229. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  230. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  231. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  232. package/dist-types/slider/internal/index.d.ts +3 -0
  233. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  234. package/dist-types/slider/internal/utils.d.ts +18 -10
  235. package/dist-types/slider/types.d.ts +3 -1
  236. package/dist-types/stepped-tracker/TrackerStep/TrackerStep.d.ts +11 -3
  237. package/package.json +3 -3
  238. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  239. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  240. package/dist-cjs/calendar/useSelection.js +0 -249
  241. package/dist-cjs/calendar/useSelection.js.map +0 -1
  242. package/dist-cjs/date-input/DateInput.js +0 -281
  243. package/dist-cjs/date-input/DateInput.js.map +0 -1
  244. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  245. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  246. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  247. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  248. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  249. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  250. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  251. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  252. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  253. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  254. package/dist-cjs/slider/internal/styles.js +0 -99
  255. package/dist-cjs/slider/internal/styles.js.map +0 -1
  256. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  257. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  258. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  259. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  260. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  261. package/dist-es/calendar/internal/CalendarNavigation.js +0 -211
  262. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  263. package/dist-es/calendar/useSelection.js +0 -242
  264. package/dist-es/calendar/useSelection.js.map +0 -1
  265. package/dist-es/date-input/DateInput.js +0 -277
  266. package/dist-es/date-input/DateInput.js.map +0 -1
  267. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  268. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  269. package/dist-es/slider/internal/SliderHandle.js +0 -40
  270. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  271. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  272. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  273. package/dist-es/slider/internal/SliderRail.js +0 -21
  274. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  275. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  276. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  277. package/dist-es/slider/internal/styles.js +0 -91
  278. package/dist-es/slider/internal/styles.js.map +0 -1
  279. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  280. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  281. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  282. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  283. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -15
  284. package/dist-types/calendar/useSelection.d.ts +0 -78
  285. package/dist-types/date-input/DateInput.d.ts +0 -56
  286. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  287. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  288. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  289. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  290. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  291. package/dist-types/slider/internal/styles.d.ts +0 -10
  292. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  293. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  294. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  295. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import { type DateValue, getLocalTimeZone } from \"@internationalized/date\";\nimport {\n type InputProps,\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n type DateRangeSelection,\n formatDate as defaultFormatDate,\n getCurrentLocale,\n} from \"../calendar\";\nimport dateInputCss from \"./DateInput.css\";\nimport type { DateInputSingleParserError } from \"./DateInputSingle\";\nimport {\n type RangeTimeFields,\n extractTimeFieldsFromDateRange,\n parseCalendarDate,\n} from \"./utils\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Date error produced by DateInputRange parser.\n */\nexport type DateInputRangeParserError = string | false;\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Return value of DateInputRange parser.\n * @template T\n */\nexport interface DateInputRangeParserResult<T = DateValue | null> {\n /**\n * The parsed date value.\n */\n date: T;\n /**\n * The error encountered during parsing, if any.\n */\n error: DateInputRangeParserError;\n}\n\n/**\n * Date Range error returned with selected date to indicate invalid dates.\n */\nexport type DateInputRangeError = {\n /**\n * The error for the start date.\n */\n startDate: DateInputSingleParserError;\n /**\n * The error for the end date.\n */\n endDate: DateInputSingleParserError;\n};\n\n/**\n * Props for the DateInputRange component.\n * @template T\n */\nexport interface DateInputRangeProps<T = DateRangeSelection>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<InputProps, \"defaultValue\" | \"inputRef\" | \"value\" | \"onChange\"> {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n format?: (date: DateValue | null) => string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: T | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: T | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (\n event: ChangeEvent<HTMLInputElement>,\n date: DateInputRangeValue,\n ) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The new date value.\n * @param error - The date input range error.\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: T | null,\n error: DateInputRangeError,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param newValue - The new date input range value.\n * @param isFormatted - Whether the value is formatted.\n */\n onDateValueChange?: (\n newValue: DateInputRangeValue,\n isFormatted: boolean,\n ) => void;\n /**\n * Function to parse date string to valid `DateValue` or null, if invalid.\n * @param inputDate - The input date string.\n * @returns The result of the date input range parser.\n */\n parse?: (inputDate: string) => DateInputRangeParserResult;\n /**\n * Locale of the entered date.\n */\n locale?: string;\n /**\n * Timezone of the entered date.\n */\n timeZone?: string;\n}\n\nexport const DateInputRange = forwardRef<HTMLDivElement, DateInputRangeProps>(\n function DateInputRange(props, ref) {\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate = {},\n onDateChange,\n value: valueProp,\n defaultValue = { startDate: \"\", endDate: \"\" },\n onChange,\n onClick,\n onDateValueChange,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n format: formatProp,\n startInputProps = {},\n endInputProps = {},\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse = parseCalendarDate,\n placeholder = \"dd mmm yyyy\",\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n locale = getCurrentLocale(),\n timeZone = getLocalTimeZone(),\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const lastError = useRef<{\n startDate: DateInputRangeParserError;\n endDate: DateInputRangeParserError;\n }>({\n startDate: false,\n endDate: false,\n });\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId();\n const endInputID = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate,\n name: \"DateInputRange\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const preservedTime = useRef<RangeTimeFields>({});\n preservedTime.current = extractTimeFieldsFromDateRange(date);\n\n const format = useCallback(\n (date: DateValue | null) => {\n return formatProp\n ? formatProp(date)\n : defaultFormatDate(date, locale, { timeZone });\n },\n [formatProp, locale, timeZone],\n );\n\n const setDateValueFromDate = (newDate: DateInputRangeProps[\"date\"]) => {\n let newDateValue = { ...dateValue };\n const formattedStartDate = format(newDate?.startDate ?? null);\n if (formattedStartDate) {\n newDateValue = { ...newDateValue, startDate: formattedStartDate };\n }\n const formattedEndDate = format(newDate?.endDate ?? null);\n if (formattedEndDate) {\n newDateValue = { ...newDateValue, endDate: formattedEndDate };\n }\n if (\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(newDateValue, true);\n }\n setDateValue(newDateValue);\n };\n\n // Update date string value when selected date changes\n useEffect(() => {\n setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: newStartDate, error: startDateError } = parse(\n dateValue.startDate ?? \"\",\n );\n const { date: newEndDate, error: endDateError } = parse(\n dateValue.endDate || \"\",\n );\n\n const hasDateChanged = (\n newDate: DateValue | null,\n oldDate: DateValue | null,\n ): boolean => {\n if (newDate && oldDate) {\n return newDate.compare(oldDate) !== 0;\n }\n return newDate !== oldDate;\n };\n\n const createNewDateRange = (\n startDate: DateValue | null,\n endDate: DateValue | null,\n ): DateRangeSelection | null => {\n if (!startDate && !endDate) {\n return null;\n }\n\n const dateRange: DateRangeSelection = {};\n dateRange.startDate = startDate;\n dateRange.endDate = endDate;\n\n return dateRange;\n };\n\n const hasStartDateChanged = hasDateChanged(\n newStartDate,\n date?.startDate || null,\n );\n const hasEndDateChanged = hasDateChanged(\n newEndDate,\n date?.endDate || null,\n );\n const hasStartOrEndDateChanged = hasStartDateChanged || hasEndDateChanged;\n\n const newDate: DateRangeSelection | null = createNewDateRange(\n newStartDate,\n newEndDate,\n );\n\n if (newDate?.startDate || newDate?.endDate) {\n setDateValueFromDate(newDate);\n }\n\n if (hasStartOrEndDateChanged) {\n setDate(newDate);\n if (newDate?.startDate && preservedTime.current.startTime) {\n newDate.startDate = newDate.startDate.set(\n preservedTime.current.startTime,\n );\n }\n if (newDate?.endDate && preservedTime.current.endTime) {\n newDate.endDate = newDate.endDate.set(preservedTime.current.endTime);\n }\n }\n const error = {\n startDate: startDateError,\n endDate: endDateError,\n };\n if (\n hasStartOrEndDateChanged ||\n lastError.current.startDate !== error.startDate ||\n lastError.current.endDate !== error.endDate\n ) {\n const error = {\n startDate: startDateError,\n endDate: endDateError,\n };\n onDateChange?.(event, newDate, error);\n lastError.current = error;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event, newDateValue);\n onDateValueChange?.(newDateValue, false);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event, newDateValue);\n onDateValueChange?.(newDateValue, false);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleWrapperClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n startInputPropsLabelledBy,\n startInputID,\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? \"\")\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n endInputPropsLabelledBy,\n endInputID,\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n size={placeholder.length}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? \"\")\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["DateInputRange","dateInputCss","date","defaultFormatDate","_a","_b","newDate","error"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AAmK1C,MAAM,cAAiB,GAAA,UAAA;AAAA,EAC5B,SAASA,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AA/MtC,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAgNI,IAAM,MAAA;AAAA,MACJ,QAAW,GAAA,KAAA;AAAA,MACX,SAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAc,EAAA,SAAA;AAAA,MACd,IAAM,EAAA,QAAA;AAAA,MACN,cAAc,EAAC;AAAA,MACf,YAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACP,YAAe,GAAA,EAAE,SAAW,EAAA,EAAA,EAAI,SAAS,EAAG,EAAA;AAAA,MAC5C,QAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAsB,GAAA,QAAA;AAAA,MACtB,YAAA;AAAA,MACA,MAAQ,EAAA,UAAA;AAAA,MACR,kBAAkB,EAAC;AAAA,MACnB,gBAAgB,EAAC;AAAA,MACjB,aAAe,EAAA,iBAAA;AAAA,MACf,WAAa,EAAA,eAAA;AAAA,MACb,KAAQ,GAAA,iBAAA;AAAA,MACR,WAAc,GAAA,aAAA;AAAA,MACd,QAAU,EAAA,YAAA;AAAA,MACV,gBAAkB,EAAA,oBAAA;AAAA,MAClB,OAAU,GAAA,SAAA;AAAA,MACV,SAAS,gBAAiB,EAAA;AAAA,MAC1B,WAAW,gBAAiB,EAAA;AAAA,MACzB,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AACJ,IAAM,MAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAA;AAC9B,IAAM,MAAA,gBAAA,GAAmB,UAA2B,CAAA,GAAA,EAAK,UAAU,CAAA,CAAA;AACnE,IAAA,MAAM,YAAY,MAGf,CAAA;AAAA,MACD,SAAW,EAAA,KAAA;AAAA,MACX,OAAS,EAAA,KAAA;AAAA,KACV,CAAA,CAAA;AAED,IAAM,MAAA,aAAA,GAAgB,OAAyB,IAAI,CAAA,CAAA;AACnD,IAAM,MAAA,mBAAA,GAAsB,UAAW,CAAA,aAAA,EAAe,iBAAiB,CAAA,CAAA;AACvE,IAAM,MAAA,WAAA,GAAc,OAAyB,IAAI,CAAA,CAAA;AACjD,IAAM,MAAA,iBAAA,GAAoB,UAAW,CAAA,WAAA,EAAa,eAAe,CAAA,CAAA;AAEjE,IAAA,MAAM,eAAe,KAAM,EAAA,CAAA;AAC3B,IAAA,MAAM,aAAa,KAAM,EAAA,CAAA;AAEzB,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,uBAAA;AAAA,MACR,GAAK,EAAAC,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,aAAc,CAAA;AAAA,MACpC,UAAY,EAAA,QAAA;AAAA,MACZ,OAAS,EAAA,WAAA;AAAA,MACT,IAAM,EAAA,gBAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,aAAc,CAAA;AAAA,MAC9C,UAAY,EAAA,SAAA;AAAA,MACZ,OAAS,EAAA,YAAA;AAAA,MACT,IAAM,EAAA,gBAAA;AAAA,MACN,KAAO,EAAA,WAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAM,MAAA,aAAA,GAAgB,MAAwB,CAAA,EAAE,CAAA,CAAA;AAChD,IAAc,aAAA,CAAA,OAAA,GAAU,+BAA+B,IAAI,CAAA,CAAA;AAE3D,IAAA,MAAM,MAAS,GAAA,WAAA;AAAA,MACb,CAACC,KAA2B,KAAA;AAC1B,QAAO,OAAA,UAAA,GACH,WAAWA,KAAI,CAAA,GACfC,WAAkBD,KAAM,EAAA,MAAA,EAAQ,EAAE,QAAA,EAAU,CAAA,CAAA;AAAA,OAClD;AAAA,MACA,CAAC,UAAY,EAAA,MAAA,EAAQ,QAAQ,CAAA;AAAA,KAC/B,CAAA;AAEA,IAAM,MAAA,oBAAA,GAAuB,CAAC,OAAyC,KAAA;AA/R3E,MAAA,IAAAE,GAAAC,EAAAA,GAAAA,CAAAA;AAgSM,MAAI,IAAA,YAAA,GAAe,EAAE,GAAG,SAAU,EAAA,CAAA;AAClC,MAAA,MAAM,qBAAqB,MAAOD,CAAAA,CAAAA,GAAAA,GAAA,mCAAS,SAAT,KAAA,IAAA,GAAAA,MAAsB,IAAI,CAAA,CAAA;AAC5D,MAAA,IAAI,kBAAoB,EAAA;AACtB,QAAA,YAAA,GAAe,EAAE,GAAG,YAAc,EAAA,SAAA,EAAW,kBAAmB,EAAA,CAAA;AAAA,OAClE;AACA,MAAA,MAAM,mBAAmB,MAAOC,CAAAA,CAAAA,GAAAA,GAAA,mCAAS,OAAT,KAAA,IAAA,GAAAA,MAAoB,IAAI,CAAA,CAAA;AACxD,MAAA,IAAI,gBAAkB,EAAA;AACpB,QAAA,YAAA,GAAe,EAAE,GAAG,YAAc,EAAA,OAAA,EAAS,gBAAiB,EAAA,CAAA;AAAA,OAC9D;AACA,MAAA,IAAA,CACE,6CAAc,SAAc,OAAA,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,eACvC,YAAc,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,OAAA,OAAY,uCAAW,OACrC,CAAA,EAAA;AACA,QAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,YAAc,EAAA,IAAA,CAAA,CAAA;AAAA,OACpC;AACA,MAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AAAA,KAC3B,CAAA;AAGA,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,oBAAA,CAAqB,IAAI,CAAA,CAAA;AAAA,OACxB,CAAC,IAAA,EAAM,6BAAM,SAAW,EAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,OAAO,CAAC,CAAA,CAAA;AAEzC,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAE5C,IAAM,MAAA;AAAA,MACJ,SAAW,EAAA;AAAA,QACT,kBAAoB,EAAA,oBAAA;AAAA,QACpB,iBAAmB,EAAA,mBAAA;AAAA,UACjB,EAAC;AAAA,MACL,QAAU,EAAA,iBAAA;AAAA,MACV,QAAU,EAAA,iBAAA;AAAA,MACV,SAAW,EAAA,iBAAA;AAAA,MACX,gBAAkB,EAAA,yBAAA;AAAA,QAChB,iBAAkB,EAAA,CAAA;AAEtB,IAAA,MAAM,aAAa,YAAgB,IAAA,iBAAA,CAAA;AACnC,IAAA,MAAM,aAAa,QAAY,IAAA,iBAAA,CAAA;AAE/B,IAAA,MAAM,mBAAmB,yBAA6B,IAAA,IAAA,GAAA,yBAAA,GAAA,oBAAA,CAAA;AAEtD,IAAM,MAAA;AAAA,MACJ,kBAAoB,EAAA,0BAAA;AAAA,MACpB,iBAAmB,EAAA,yBAAA;AAAA,MACnB,MAAQ,EAAA,qBAAA;AAAA,MACR,QAAU,EAAA,uBAAA;AAAA,MACV,SAAW,EAAA,wBAAA;AAAA,MACX,OAAS,EAAA,sBAAA;AAAA,MACT,QAAU,EAAA,uBAAA;AAAA,MACP,GAAA,mBAAA;AAAA,KACD,GAAA,eAAA,CAAA;AAEJ,IAAM,MAAA,oBAAA,GAAuB,oBACzB,CAAC,UAAA,EAAY,UAAU,CAAE,CAAA,QAAA,CAAS,iBAAiB,CACnD,GAAA,uBAAA,CAAA;AAEJ,IAAM,MAAA;AAAA,MACJ,kBAAoB,EAAA,wBAAA;AAAA,MACpB,iBAAmB,EAAA,uBAAA;AAAA,MACnB,MAAQ,EAAA,mBAAA;AAAA,MACR,QAAU,EAAA,qBAAA;AAAA,MACV,SAAW,EAAA,sBAAA;AAAA,MACX,OAAS,EAAA,oBAAA;AAAA,MACT,QAAU,EAAA,qBAAA;AAAA,MACP,GAAA,iBAAA;AAAA,KACD,GAAA,aAAA,CAAA;AAEJ,IAAM,MAAA,kBAAA,GAAqB,oBACvB,CAAC,UAAA,EAAY,UAAU,CAAE,CAAA,QAAA,CAAS,iBAAiB,CACnD,GAAA,qBAAA,CAAA;AAEJ,IAAM,MAAA,KAAA,GAAQ,CAAC,KAA0B,KAAA;AAvW7C,MAAAD,IAAAA,GAAAA,CAAAA;AAwWM,MAAA,MAAM,EAAE,IAAA,EAAM,YAAc,EAAA,KAAA,EAAO,gBAAmB,GAAA,KAAA;AAAA,QAAA,CACpDA,GAAA,GAAA,SAAA,CAAU,SAAV,KAAA,IAAA,GAAAA,GAAuB,GAAA,EAAA;AAAA,OACzB,CAAA;AACA,MAAA,MAAM,EAAE,IAAA,EAAM,UAAY,EAAA,KAAA,EAAO,cAAiB,GAAA,KAAA;AAAA,QAChD,UAAU,OAAW,IAAA,EAAA;AAAA,OACvB,CAAA;AAEA,MAAM,MAAA,cAAA,GAAiB,CACrBE,QAAAA,EACA,OACY,KAAA;AACZ,QAAA,IAAIA,YAAW,OAAS,EAAA;AACtB,UAAOA,OAAAA,QAAAA,CAAQ,OAAQ,CAAA,OAAO,CAAM,KAAA,CAAA,CAAA;AAAA,SACtC;AACA,QAAA,OAAOA,QAAY,KAAA,OAAA,CAAA;AAAA,OACrB,CAAA;AAEA,MAAM,MAAA,kBAAA,GAAqB,CACzB,SAAA,EACA,OAC8B,KAAA;AAC9B,QAAI,IAAA,CAAC,SAAa,IAAA,CAAC,OAAS,EAAA;AAC1B,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AAEA,QAAA,MAAM,YAAgC,EAAC,CAAA;AACvC,QAAA,SAAA,CAAU,SAAY,GAAA,SAAA,CAAA;AACtB,QAAA,SAAA,CAAU,OAAU,GAAA,OAAA,CAAA;AAEpB,QAAO,OAAA,SAAA,CAAA;AAAA,OACT,CAAA;AAEA,MAAA,MAAM,mBAAsB,GAAA,cAAA;AAAA,QAC1B,YAAA;AAAA,QAAA,CACA,6BAAM,SAAa,KAAA,IAAA;AAAA,OACrB,CAAA;AACA,MAAA,MAAM,iBAAoB,GAAA,cAAA;AAAA,QACxB,UAAA;AAAA,QAAA,CACA,6BAAM,OAAW,KAAA,IAAA;AAAA,OACnB,CAAA;AACA,MAAA,MAAM,2BAA2B,mBAAuB,IAAA,iBAAA,CAAA;AAExD,MAAA,MAAM,OAAqC,GAAA,kBAAA;AAAA,QACzC,YAAA;AAAA,QACA,UAAA;AAAA,OACF,CAAA;AAEA,MAAI,IAAA,CAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,SAAa,MAAA,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAS,OAAS,CAAA,EAAA;AAC1C,QAAA,oBAAA,CAAqB,OAAO,CAAA,CAAA;AAAA,OAC9B;AAEA,MAAA,IAAI,wBAA0B,EAAA;AAC5B,QAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AACf,QAAA,IAAA,CAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,SAAA,KAAa,aAAc,CAAA,OAAA,CAAQ,SAAW,EAAA;AACzD,UAAQ,OAAA,CAAA,SAAA,GAAY,QAAQ,SAAU,CAAA,GAAA;AAAA,YACpC,cAAc,OAAQ,CAAA,SAAA;AAAA,WACxB,CAAA;AAAA,SACF;AACA,QAAA,IAAA,CAAI,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,OAAA,KAAW,aAAc,CAAA,OAAA,CAAQ,OAAS,EAAA;AACrD,UAAA,OAAA,CAAQ,UAAU,OAAQ,CAAA,OAAA,CAAQ,GAAI,CAAA,aAAA,CAAc,QAAQ,OAAO,CAAA,CAAA;AAAA,SACrE;AAAA,OACF;AACA,MAAA,MAAM,KAAQ,GAAA;AAAA,QACZ,SAAW,EAAA,cAAA;AAAA,QACX,OAAS,EAAA,YAAA;AAAA,OACX,CAAA;AACA,MACE,IAAA,wBAAA,IACA,SAAU,CAAA,OAAA,CAAQ,SAAc,KAAA,KAAA,CAAM,aACtC,SAAU,CAAA,OAAA,CAAQ,OAAY,KAAA,KAAA,CAAM,OACpC,EAAA;AACA,QAAA,MAAMC,MAAQ,GAAA;AAAA,UACZ,SAAW,EAAA,cAAA;AAAA,UACX,OAAS,EAAA,YAAA;AAAA,SACX,CAAA;AACA,QAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAe,OAAO,OAASA,EAAAA,MAAAA,CAAAA,CAAAA;AAC/B,QAAA,SAAA,CAAU,OAAUA,GAAAA,MAAAA,CAAAA;AAAA,OACtB;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,sBAAA,GAA+D,CACnE,KACG,KAAA;AACH,MAAA,MAAM,eAAe,EAAE,GAAG,WAAW,SAAW,EAAA,KAAA,CAAM,OAAO,KAAM,EAAA,CAAA;AACnE,MAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AACzB,MAA0B,uBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,uBAAA,CAAA,KAAA,CAAA,CAAA;AAC1B,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,KAAO,EAAA,YAAA,CAAA,CAAA;AAClB,MAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,YAAc,EAAA,KAAA,CAAA,CAAA;AAAA,KACpC,CAAA;AAEA,IAAM,MAAA,oBAAA,GAA6D,CACjE,KACG,KAAA;AACH,MAAA,MAAM,eAAe,EAAE,GAAG,WAAW,OAAS,EAAA,KAAA,CAAM,OAAO,KAAM,EAAA,CAAA;AACjE,MAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AACzB,MAAwB,qBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,CAAA;AACxB,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAW,KAAO,EAAA,YAAA,CAAA,CAAA;AAClB,MAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,YAAc,EAAA,KAAA,CAAA,CAAA;AAAA,KACpC,CAAA;AAEA,IAAM,MAAA,qBAAA,GAA6D,CACjE,KACG,KAAA;AACH,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AACf,MAAyB,sBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAC3B,CAAA;AAEA,IAAM,MAAA,mBAAA,GAA2D,CAC/D,KACG,KAAA;AACH,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AACf,MAAuB,oBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,oBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,CAAA;AAEA,IAAM,MAAA,oBAAA,GAA4D,CAChE,KACG,KAAA;AACH,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACX,MAAwB,qBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAC1B,CAAA;AAEA,IAAM,MAAA,kBAAA,GAA0D,CAAC,KAAU,KAAA;AACzE,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACX,MAAsB,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACxB,CAAA;AAEA,IAAM,MAAA,uBAAA,GAAkE,CACtE,KACG,KAAA;AACH,MAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,OACb;AACA,MAA2B,wBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,wBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAC7B,CAAA;AAEA,IAAM,MAAA,qBAAA,GAAgE,CACpE,KACG,KAAA;AACH,MAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,OACb;AACA,MAAyB,sBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,sBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KAC3B,CAAA;AAEA,IAAM,MAAA,kBAAA,GAAwD,CAAC,KAAU,KAAA;AACvE,MAAI,IAAA,KAAA,CAAM,MAAW,KAAA,UAAA,CAAW,OAAS,EAAA;AACvC,QAAA,MAAM,QAAQ,aAAc,CAAA,OAAA,CAAA;AAC5B,QAAO,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,KAAA,EAAA,CAAA;AACP,QAAA,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,iBAAkB,CAAA,KAAA,CAAM,KAAM,CAAA,MAAA,EAAQ,MAAM,KAAM,CAAA,MAAA,CAAA,CAAA;AAAA,OAC3D;AACA,MAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACZ,CAAA;AAEA,IAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAA,IAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,OAAO,CAAA;AAAA,QACpB;AAAA,UACE,CAAC,YAAA,CAAa,SAAS,CAAA,GAAI,CAAC,UAAc,IAAA,OAAA;AAAA,UAC1C,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAA,CAAa,gBAAoB,IAAA,IAAA,GAAA,gBAAA,GAAA,EAAE,CAAI,GAAA,gBAAA;AAAA,UACxC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,SAC9B;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,GAAK,EAAA,gBAAA;AAAA,MACL,OAAS,EAAA,kBAAA;AAAA,MACR,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,YAAa,EAAA,KAAA;AAAA,UACb,kBAAkB,EAAA,IAAA;AAAA,YAChB,oBAAA;AAAA,YACA,0BAAA;AAAA,WACF;AAAA,UACA,iBAAiB,EAAA,IAAA;AAAA,YACf,mBAAA;AAAA,YACA,yBAAA;AAAA,YACA,YAAA;AAAA,WACF;AAAA,UACA,YAAA,EAAY,IAAK,CAAA,YAAA,EAAc,SAAS,CAAA;AAAA,UACxC,EAAI,EAAA,YAAA;AAAA,UACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,QAAU,EAAA,UAAA;AAAA,UACV,QAAU,EAAA,UAAA;AAAA,UACV,GAAK,EAAA,mBAAA;AAAA,UACL,QAAA,EAAU,aAAa,CAAK,CAAA,GAAA,CAAA;AAAA,UAC5B,WAAA;AAAA,UACA,MAAM,WAAY,CAAA,MAAA;AAAA,UAClB,KAAA,EACE,cAAc,EAAC,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,aACtB,mBACC,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,cAAV,IAAuB,GAAA,EAAA,GAAA,EAAA;AAAA,UAE7B,GAAG,mBAAA;AAAA,UACJ,MAAQ,EAAA,oBAAA;AAAA,UACR,QAAU,EAAA,sBAAA;AAAA,UACV,SAAW,EAAA,uBAAA;AAAA,UACX,OAAA,EAAS,CAAC,UAAA,GAAa,qBAAwB,GAAA,KAAA,CAAA;AAAA,UAC/C,QAAU,EAAA,oBAAA;AAAA,SACZ,CAAA;AAAA,wBACC,GAAA,CAAA,MAAA,EAAA;AAAA,UAAK,QAAA,EAAA,GAAA;AAAA,SAAC,CAAA;AAAA,wBACN,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,YAAa,EAAA,KAAA;AAAA,UACb,kBAAkB,EAAA,IAAA;AAAA,YAChB,oBAAA;AAAA,YACA,wBAAA;AAAA,WACF;AAAA,UACA,iBAAiB,EAAA,IAAA;AAAA,YACf,mBAAA;AAAA,YACA,uBAAA;AAAA,YACA,UAAA;AAAA,WACF;AAAA,UACA,YAAA,EAAY,IAAK,CAAA,UAAA,EAAY,SAAS,CAAA;AAAA,UACtC,EAAI,EAAA,UAAA;AAAA,UACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,QAAU,EAAA,UAAA;AAAA,UACV,QAAU,EAAA,UAAA;AAAA,UACV,GAAK,EAAA,iBAAA;AAAA,UACL,QAAA,EAAU,aAAa,CAAK,CAAA,GAAA,CAAA;AAAA,UAC5B,WAAA;AAAA,UACA,MAAM,WAAY,CAAA,MAAA;AAAA,UAClB,KAAA,EACE,cAAc,EAAC,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,WACtB,mBACC,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,YAAV,IAAqB,GAAA,EAAA,GAAA,EAAA;AAAA,UAE3B,GAAG,iBAAA;AAAA,UACJ,MAAQ,EAAA,kBAAA;AAAA,UACR,QAAU,EAAA,oBAAA;AAAA,UACV,SAAW,EAAA,qBAAA;AAAA,UACX,OAAA,EAAS,CAAC,UAAA,GAAa,mBAAsB,GAAA,KAAA,CAAA;AAAA,UAC7C,QAAU,EAAA,kBAAA;AAAA,SACZ,CAAA;AAAA,wBACC,IAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,uBAAuB,CAAA;AAAA,UACjD,QAAA,EAAA;AAAA,YAAA,CAAC,UAAc,IAAA,CAAC,UAAc,IAAA,gBAAA,oBAC5B,GAAA,CAAA,eAAA,EAAA;AAAA,cAAgB,MAAQ,EAAA,gBAAA;AAAA,aAAkB,CAAA;AAAA,YAE5C,YAAA;AAAA,WAAA;AAAA,SACH,CAAA;AAAA,wBACC,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,qBAAqB,CAAA;AAAA,SAAG,CAAA;AAAA,OAAA;AAAA,KACvD,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,225 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { getLocalTimeZone } from '@internationalized/date';
3
+ import { makePrefixer, useForkRef, useId, useControlled, useFormFieldProps, StatusAdornment } from '@salt-ds/core';
4
+ import { useComponentCssInjection } from '@salt-ds/styles';
5
+ import { useWindow } from '@salt-ds/window';
6
+ import { clsx } from 'clsx';
7
+ import { forwardRef, useRef, useCallback, useEffect, useState } from 'react';
8
+ import '../calendar/Calendar.js';
9
+ import '../calendar/CalendarNavigation.js';
10
+ import '../calendar/internal/CalendarContext.js';
11
+ import { getCurrentLocale, formatDate } from '../calendar/formatDate.js';
12
+ import '../calendar/useCalendarSelection.js';
13
+ import css_248z from './DateInput.css.js';
14
+ import { parseCalendarDate, extractTimeFieldsFromDate } from './utils.js';
15
+
16
+ const withBaseName = makePrefixer("saltDateInput");
17
+ const DateInputSingle = forwardRef(
18
+ function DateInput(props, ref) {
19
+ const {
20
+ bordered = false,
21
+ className,
22
+ disabled,
23
+ "aria-label": ariaLabel,
24
+ date: dateProp,
25
+ defaultDate,
26
+ onDateChange,
27
+ value: valueProp,
28
+ defaultValue = "",
29
+ onChange,
30
+ onClick,
31
+ emptyReadOnlyMarker = "\u2014",
32
+ endAdornment,
33
+ format: formatProp,
34
+ inputProps = {},
35
+ inputRef: inputRefProp = null,
36
+ parse = parseCalendarDate,
37
+ placeholder = "dd mmm yyyy",
38
+ readOnly: readOnlyProp,
39
+ validationStatus: validationStatusProp,
40
+ variant = "primary",
41
+ onDateValueChange,
42
+ locale = getCurrentLocale(),
43
+ timeZone = getLocalTimeZone(),
44
+ ...rest
45
+ } = props;
46
+ const wrapperRef = useRef(null);
47
+ const lastError = useRef(false);
48
+ const handleWrapperRef = useForkRef(ref, wrapperRef);
49
+ const innerInputRef = useRef(null);
50
+ const handleInputRef = useForkRef(
51
+ innerInputRef,
52
+ inputRefProp
53
+ );
54
+ const inputId = useId();
55
+ const targetWindow = useWindow();
56
+ useComponentCssInjection({
57
+ testId: "salt-date-input-single",
58
+ css: css_248z,
59
+ window: targetWindow
60
+ });
61
+ const [date, setDate] = useControlled({
62
+ controlled: dateProp,
63
+ default: defaultDate,
64
+ name: "DateInputSingle",
65
+ state: "date"
66
+ });
67
+ const [dateValue, setDateValue] = useControlled({
68
+ controlled: valueProp,
69
+ default: defaultValue,
70
+ name: "DateInputSingle",
71
+ state: "dateValue"
72
+ });
73
+ const preservedTime = useRef(
74
+ extractTimeFieldsFromDate(date || null)
75
+ );
76
+ const format = useCallback(
77
+ (date2) => {
78
+ return formatProp ? formatProp(date2) : formatDate(date2, locale, { timeZone });
79
+ },
80
+ [formatProp, locale, timeZone]
81
+ );
82
+ useEffect(() => {
83
+ const formattedDate = format(date || null);
84
+ if (formattedDate) {
85
+ setDateValue(formattedDate);
86
+ onDateValueChange == null ? void 0 : onDateValueChange(formattedDate, true);
87
+ }
88
+ }, [date, format, locale, timeZone]);
89
+ const [focused, setFocused] = useState(false);
90
+ const {
91
+ a11yProps: {
92
+ "aria-describedby": formFieldDescribedBy,
93
+ "aria-labelledby": formFieldLabelledBy
94
+ } = {},
95
+ disabled: formFieldDisabled,
96
+ readOnly: formFieldReadOnly,
97
+ necessity: formFieldRequired,
98
+ validationStatus: formFieldValidationStatus
99
+ } = useFormFieldProps();
100
+ const isReadOnly = readOnlyProp || formFieldReadOnly;
101
+ const isDisabled = disabled || formFieldDisabled;
102
+ const validationStatus = formFieldValidationStatus != null ? formFieldValidationStatus : validationStatusProp;
103
+ const {
104
+ "aria-describedby": dateInputDescribedBy,
105
+ "aria-labelledby": dateInputLabelledBy,
106
+ onBlur: inputPropsOnBlur,
107
+ onChange: inputPropsOnChange,
108
+ onKeyDown: inputPropsOnKeyDown,
109
+ onFocus: inputPropsOnFocus,
110
+ required: dateInputPropsRequired,
111
+ ...restDateInputProps
112
+ } = inputProps;
113
+ const isRequired = formFieldRequired ? ["required", "asterisk"].includes(formFieldRequired) : dateInputPropsRequired;
114
+ const apply = (event) => {
115
+ const { date: parsedDate, error } = parse(dateValue != null ? dateValue : "");
116
+ let newDate = parsedDate;
117
+ if (newDate) {
118
+ const formattedDate = format(newDate);
119
+ if (formattedDate) {
120
+ setDateValue(formattedDate);
121
+ onDateValueChange == null ? void 0 : onDateValueChange(formattedDate, true);
122
+ }
123
+ }
124
+ const hasDateChanged = newDate && date ? newDate.compare(date) !== 0 : newDate !== date;
125
+ if (hasDateChanged) {
126
+ setDate(newDate);
127
+ if (newDate && preservedTime.current) {
128
+ newDate = newDate.set(preservedTime.current);
129
+ }
130
+ }
131
+ if (hasDateChanged || lastError.current !== error) {
132
+ onDateChange == null ? void 0 : onDateChange(event, newDate, error);
133
+ }
134
+ lastError.current = error;
135
+ };
136
+ const handleChange = (event) => {
137
+ const newDateValue = event.target.value;
138
+ setDateValue(newDateValue);
139
+ inputPropsOnChange == null ? void 0 : inputPropsOnChange(event);
140
+ onChange == null ? void 0 : onChange(event);
141
+ onDateValueChange == null ? void 0 : onDateValueChange(newDateValue, false);
142
+ };
143
+ const handleFocus = (event) => {
144
+ setFocused(true);
145
+ inputPropsOnFocus == null ? void 0 : inputPropsOnFocus(event);
146
+ };
147
+ const handleBlur = (event) => {
148
+ setFocused(false);
149
+ apply(event);
150
+ inputPropsOnBlur == null ? void 0 : inputPropsOnBlur(event);
151
+ };
152
+ const handleKeyDown = (event) => {
153
+ if (event.key === "Enter") {
154
+ apply(event);
155
+ }
156
+ inputPropsOnKeyDown == null ? void 0 : inputPropsOnKeyDown(event);
157
+ };
158
+ const handleClick = (event) => {
159
+ var _a;
160
+ if (event.target === wrapperRef.current) {
161
+ (_a = innerInputRef == null ? void 0 : innerInputRef.current) == null ? void 0 : _a.focus();
162
+ }
163
+ onClick == null ? void 0 : onClick(event);
164
+ };
165
+ return /* @__PURE__ */ jsxs("div", {
166
+ className: clsx(
167
+ withBaseName(),
168
+ withBaseName(variant),
169
+ {
170
+ [withBaseName("focused")]: !isDisabled && focused,
171
+ [withBaseName("disabled")]: isDisabled,
172
+ [withBaseName("readOnly")]: isReadOnly,
173
+ [withBaseName(validationStatus != null ? validationStatus : "")]: validationStatus,
174
+ [withBaseName("bordered")]: bordered
175
+ },
176
+ className
177
+ ),
178
+ ref: handleWrapperRef,
179
+ onClick: handleClick,
180
+ ...rest,
181
+ children: [
182
+ /* @__PURE__ */ jsx("input", {
183
+ autoComplete: "off",
184
+ "aria-describedby": clsx(formFieldDescribedBy, dateInputDescribedBy),
185
+ "aria-labelledby": clsx(
186
+ formFieldLabelledBy,
187
+ dateInputLabelledBy,
188
+ inputId
189
+ ),
190
+ "aria-label": clsx("Selected date", ariaLabel),
191
+ id: inputId,
192
+ className: withBaseName("input"),
193
+ disabled: isDisabled,
194
+ readOnly: isReadOnly,
195
+ ref: handleInputRef,
196
+ tabIndex: isDisabled ? -1 : 0,
197
+ placeholder,
198
+ size: placeholder.length,
199
+ value: isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue,
200
+ ...restDateInputProps,
201
+ onBlur: handleBlur,
202
+ onChange: handleChange,
203
+ onKeyDown: handleKeyDown,
204
+ onFocus: !isDisabled ? handleFocus : void 0,
205
+ required: isRequired
206
+ }),
207
+ /* @__PURE__ */ jsxs("div", {
208
+ className: withBaseName("endAdornmentContainer"),
209
+ children: [
210
+ !isDisabled && !isReadOnly && validationStatus && /* @__PURE__ */ jsx(StatusAdornment, {
211
+ status: validationStatus
212
+ }),
213
+ endAdornment
214
+ ]
215
+ }),
216
+ /* @__PURE__ */ jsx("div", {
217
+ className: withBaseName("activationIndicator")
218
+ })
219
+ ]
220
+ });
221
+ }
222
+ );
223
+
224
+ export { DateInputSingle };
225
+ //# sourceMappingURL=DateInputSingle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n type DateValue,\n type TimeFields,\n getLocalTimeZone,\n} from \"@internationalized/date\";\nimport {\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type RefObject,\n type SyntheticEvent,\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n type SingleDateSelection,\n formatDate as defaultFormatDate,\n getCurrentLocale,\n} from \"../calendar\";\nimport dateInputCss from \"./DateInput.css\";\nimport { extractTimeFieldsFromDate, parseCalendarDate } from \"./utils\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleParserError = string | false;\n\n/**\n * Date error produced by DateInputSingle parser.\n */\nexport type DateInputSingleError = DateInputSingleParserError;\n\n/**\n * Return value of DateInputSingle parser.\n * @template T\n */\nexport interface DateInputSingleParserResult<T = DateValue | null> {\n /**\n * The parsed date value.\n */\n date: T;\n /**\n * The error encountered during parsing, if any.\n */\n error: DateInputSingleParserError;\n}\n\n/**\n * Props for the DateInputSingle component.\n * @template T\n */\nexport interface DateInputSingleProps<T = SingleDateSelection>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Function to format the input value.\n */\n format?: (date: DateValue | null) => string;\n /**\n * Reference for the input.\n */\n inputRef?: RefObject<HTMLInputElement>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: T | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: T | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The new date value.\n * @param error - The date input single error.\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: T | null,\n error: DateInputSingleError,\n ) => void;\n /**\n * Function to parse date string to valid `DateValue` or null, if invalid or empty.\n * @param inputDate - The input date string.\n * @returns The result of the date input single parser.\n */\n parse?: (inputDate: string) => DateInputSingleParserResult;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param newValue - The new date input value.\n * @param isFormatted - Whether the value is formatted.\n */\n onDateValueChange?: (newValue: string, isFormatted: boolean) => void;\n /**\n * Locale of the entered date.\n */\n locale?: string;\n /**\n * Timezone of the entered date.\n */\n timeZone?: string;\n}\nexport const DateInputSingle = forwardRef<HTMLDivElement, DateInputSingleProps>(\n function DateInput(props, ref) {\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n defaultValue = \"\",\n onChange,\n onClick,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n format: formatProp,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse = parseCalendarDate,\n placeholder = \"dd mmm yyyy\",\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n locale = getCurrentLocale(),\n timeZone = getLocalTimeZone(),\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const lastError = useRef<string | false>(false);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n default: defaultDate,\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const preservedTime = useRef<TimeFields | undefined>(\n extractTimeFieldsFromDate(date || null),\n );\n\n const format = useCallback(\n (date: DateValue | null) => {\n return formatProp\n ? formatProp(date)\n : defaultFormatDate(date, locale, { timeZone });\n },\n [formatProp, locale, timeZone],\n );\n\n // Update date string value when selected date changes\n useEffect(() => {\n const formattedDate = format(date || null);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }, [date, format, locale, timeZone]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: parsedDate, error } = parse(dateValue ?? \"\");\n let newDate = parsedDate;\n if (newDate) {\n const formattedDate = format(newDate);\n if (formattedDate) {\n setDateValue(formattedDate);\n onDateValueChange?.(formattedDate, true);\n }\n }\n const hasDateChanged =\n newDate && date ? newDate.compare(date) !== 0 : newDate !== date;\n if (hasDateChanged) {\n setDate(newDate);\n if (newDate && preservedTime.current) {\n newDate = newDate.set(preservedTime.current);\n }\n }\n if (hasDateChanged || lastError.current !== error) {\n onDateChange?.(event, newDate, error);\n }\n lastError.current = error;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(newDateValue, false);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n innerInputRef?.current?.focus();\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n inputId,\n )}\n aria-label={clsx(\"Selected date\", ariaLabel)}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n size={placeholder.length}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["dateInputCss","date","defaultFormatDate"],"mappings":";;;;;;;;;;;;;;;AAwCA,MAAM,YAAA,GAAe,aAAa,eAAe,CAAA,CAAA;AA+H1C,MAAM,eAAkB,GAAA,UAAA;AAAA,EAC7B,SAAS,SAAU,CAAA,KAAA,EAAO,GAAK,EAAA;AAC7B,IAAM,MAAA;AAAA,MACJ,QAAW,GAAA,KAAA;AAAA,MACX,SAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAc,EAAA,SAAA;AAAA,MACd,IAAM,EAAA,QAAA;AAAA,MACN,WAAA;AAAA,MACA,YAAA;AAAA,MACA,KAAO,EAAA,SAAA;AAAA,MACP,YAAe,GAAA,EAAA;AAAA,MACf,QAAA;AAAA,MACA,OAAA;AAAA,MACA,mBAAsB,GAAA,QAAA;AAAA,MACtB,YAAA;AAAA,MACA,MAAQ,EAAA,UAAA;AAAA,MACR,aAAa,EAAC;AAAA,MACd,UAAU,YAAe,GAAA,IAAA;AAAA,MACzB,KAAQ,GAAA,iBAAA;AAAA,MACR,WAAc,GAAA,aAAA;AAAA,MACd,QAAU,EAAA,YAAA;AAAA,MACV,gBAAkB,EAAA,oBAAA;AAAA,MAClB,OAAU,GAAA,SAAA;AAAA,MACV,iBAAA;AAAA,MACA,SAAS,gBAAiB,EAAA;AAAA,MAC1B,WAAW,gBAAiB,EAAA;AAAA,MACzB,GAAA,IAAA;AAAA,KACD,GAAA,KAAA,CAAA;AACJ,IAAM,MAAA,UAAA,GAAa,OAAO,IAAI,CAAA,CAAA;AAC9B,IAAM,MAAA,SAAA,GAAY,OAAuB,KAAK,CAAA,CAAA;AAC9C,IAAM,MAAA,gBAAA,GAAmB,UAA2B,CAAA,GAAA,EAAK,UAAU,CAAA,CAAA;AACnE,IAAM,MAAA,aAAA,GAAgB,OAAyB,IAAI,CAAA,CAAA;AACnD,IAAA,MAAM,cAAiB,GAAA,UAAA;AAAA,MACrB,aAAA;AAAA,MACA,YAAA;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,UAAU,KAAM,EAAA,CAAA;AAEtB,IAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,IAAyB,wBAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,wBAAA;AAAA,MACR,GAAK,EAAAA,QAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,aAAc,CAAA;AAAA,MACpC,UAAY,EAAA,QAAA;AAAA,MACZ,OAAS,EAAA,WAAA;AAAA,MACT,IAAM,EAAA,iBAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,aAAc,CAAA;AAAA,MAC9C,UAAY,EAAA,SAAA;AAAA,MACZ,OAAS,EAAA,YAAA;AAAA,MACT,IAAM,EAAA,iBAAA;AAAA,MACN,KAAO,EAAA,WAAA;AAAA,KACR,CAAA,CAAA;AACD,IAAA,MAAM,aAAgB,GAAA,MAAA;AAAA,MACpB,yBAAA,CAA0B,QAAQ,IAAI,CAAA;AAAA,KACxC,CAAA;AAEA,IAAA,MAAM,MAAS,GAAA,WAAA;AAAA,MACb,CAACC,KAA2B,KAAA;AAC1B,QAAO,OAAA,UAAA,GACH,WAAWA,KAAI,CAAA,GACfC,WAAkBD,KAAM,EAAA,MAAA,EAAQ,EAAE,QAAA,EAAU,CAAA,CAAA;AAAA,OAClD;AAAA,MACA,CAAC,UAAY,EAAA,MAAA,EAAQ,QAAQ,CAAA;AAAA,KAC/B,CAAA;AAGA,IAAA,SAAA,CAAU,MAAM;AACd,MAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,IAAA,IAAQ,IAAI,CAAA,CAAA;AACzC,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,YAAA,CAAa,aAAa,CAAA,CAAA;AAC1B,QAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,aAAe,EAAA,IAAA,CAAA,CAAA;AAAA,OACrC;AAAA,OACC,CAAC,IAAA,EAAM,MAAQ,EAAA,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAEnC,IAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAE5C,IAAM,MAAA;AAAA,MACJ,SAAW,EAAA;AAAA,QACT,kBAAoB,EAAA,oBAAA;AAAA,QACpB,iBAAmB,EAAA,mBAAA;AAAA,UACjB,EAAC;AAAA,MACL,QAAU,EAAA,iBAAA;AAAA,MACV,QAAU,EAAA,iBAAA;AAAA,MACV,SAAW,EAAA,iBAAA;AAAA,MACX,gBAAkB,EAAA,yBAAA;AAAA,QAChB,iBAAkB,EAAA,CAAA;AAEtB,IAAA,MAAM,aAAa,YAAgB,IAAA,iBAAA,CAAA;AACnC,IAAA,MAAM,aAAa,QAAY,IAAA,iBAAA,CAAA;AAE/B,IAAA,MAAM,mBAAmB,yBAA6B,IAAA,IAAA,GAAA,yBAAA,GAAA,oBAAA,CAAA;AAEtD,IAAM,MAAA;AAAA,MACJ,kBAAoB,EAAA,oBAAA;AAAA,MACpB,iBAAmB,EAAA,mBAAA;AAAA,MACnB,MAAQ,EAAA,gBAAA;AAAA,MACR,QAAU,EAAA,kBAAA;AAAA,MACV,SAAW,EAAA,mBAAA;AAAA,MACX,OAAS,EAAA,iBAAA;AAAA,MACT,QAAU,EAAA,sBAAA;AAAA,MACP,GAAA,kBAAA;AAAA,KACD,GAAA,UAAA,CAAA;AAEJ,IAAM,MAAA,UAAA,GAAa,oBACf,CAAC,UAAA,EAAY,UAAU,CAAE,CAAA,QAAA,CAAS,iBAAiB,CACnD,GAAA,sBAAA,CAAA;AAEJ,IAAM,MAAA,KAAA,GAAQ,CAAC,KAA0B,KAAA;AACvC,MAAA,MAAM,EAAE,IAAM,EAAA,UAAA,EAAY,OAAU,GAAA,KAAA,CAAM,gCAAa,EAAE,CAAA,CAAA;AACzD,MAAA,IAAI,OAAU,GAAA,UAAA,CAAA;AACd,MAAA,IAAI,OAAS,EAAA;AACX,QAAM,MAAA,aAAA,GAAgB,OAAO,OAAO,CAAA,CAAA;AACpC,QAAA,IAAI,aAAe,EAAA;AACjB,UAAA,YAAA,CAAa,aAAa,CAAA,CAAA;AAC1B,UAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,aAAe,EAAA,IAAA,CAAA,CAAA;AAAA,SACrC;AAAA,OACF;AACA,MAAM,MAAA,cAAA,GACJ,WAAW,IAAO,GAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,KAAM,IAAI,OAAY,KAAA,IAAA,CAAA;AAC9D,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AACf,QAAI,IAAA,OAAA,IAAW,cAAc,OAAS,EAAA;AACpC,UAAU,OAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,aAAA,CAAc,OAAO,CAAA,CAAA;AAAA,SAC7C;AAAA,OACF;AACA,MAAI,IAAA,cAAA,IAAkB,SAAU,CAAA,OAAA,KAAY,KAAO,EAAA;AACjD,QAAA,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAe,OAAO,OAAS,EAAA,KAAA,CAAA,CAAA;AAAA,OACjC;AACA,MAAA,SAAA,CAAU,OAAU,GAAA,KAAA,CAAA;AAAA,KACtB,CAAA;AAEA,IAAM,MAAA,YAAA,GAAqD,CAAC,KAAU,KAAA;AACpE,MAAM,MAAA,YAAA,GAAe,MAAM,MAAO,CAAA,KAAA,CAAA;AAClC,MAAA,YAAA,CAAa,YAAY,CAAA,CAAA;AACzB,MAAqB,kBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,kBAAA,CAAA,KAAA,CAAA,CAAA;AACrB,MAAW,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA,CAAA;AACX,MAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAoB,YAAc,EAAA,KAAA,CAAA,CAAA;AAAA,KACpC,CAAA;AAEA,IAAM,MAAA,WAAA,GAAmD,CAAC,KAAU,KAAA;AAClE,MAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AACf,MAAoB,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACtB,CAAA;AACA,IAAM,MAAA,UAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,MAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAChB,MAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACX,MAAmB,gBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,gBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACrB,CAAA;AAEA,IAAM,MAAA,aAAA,GAAwD,CAAC,KAAU,KAAA;AACvE,MAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,QAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AAAA,OACb;AACA,MAAsB,mBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,mBAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACxB,CAAA;AAEA,IAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AA1UtE,MAAA,IAAA,EAAA,CAAA;AA2UM,MAAI,IAAA,KAAA,CAAM,MAAW,KAAA,UAAA,CAAW,OAAS,EAAA;AACvC,QAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,aAAA,CAAe,YAAf,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,OAC1B;AACA,MAAU,OAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACZ,CAAA;AAEA,IAAA,uBACG,IAAA,CAAA,KAAA,EAAA;AAAA,MACC,SAAW,EAAA,IAAA;AAAA,QACT,YAAa,EAAA;AAAA,QACb,aAAa,OAAO,CAAA;AAAA,QACpB;AAAA,UACE,CAAC,YAAA,CAAa,SAAS,CAAA,GAAI,CAAC,UAAc,IAAA,OAAA;AAAA,UAC1C,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,UAC5B,CAAC,YAAA,CAAa,gBAAoB,IAAA,IAAA,GAAA,gBAAA,GAAA,EAAE,CAAI,GAAA,gBAAA;AAAA,UACxC,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,QAAA;AAAA,SAC9B;AAAA,QACA,SAAA;AAAA,OACF;AAAA,MACA,GAAK,EAAA,gBAAA;AAAA,MACL,OAAS,EAAA,WAAA;AAAA,MACR,GAAG,IAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,YAAa,EAAA,KAAA;AAAA,UACb,kBAAA,EAAkB,IAAK,CAAA,oBAAA,EAAsB,oBAAoB,CAAA;AAAA,UACjE,iBAAiB,EAAA,IAAA;AAAA,YACf,mBAAA;AAAA,YACA,mBAAA;AAAA,YACA,OAAA;AAAA,WACF;AAAA,UACA,YAAA,EAAY,IAAK,CAAA,eAAA,EAAiB,SAAS,CAAA;AAAA,UAC3C,EAAI,EAAA,OAAA;AAAA,UACJ,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,QAAU,EAAA,UAAA;AAAA,UACV,QAAU,EAAA,UAAA;AAAA,UACV,GAAK,EAAA,cAAA;AAAA,UACL,QAAA,EAAU,aAAa,CAAK,CAAA,GAAA,CAAA;AAAA,UAC5B,WAAA;AAAA,UACA,MAAM,WAAY,CAAA,MAAA;AAAA,UAClB,KAAO,EAAA,UAAA,IAAc,CAAC,SAAA,GAAY,mBAAsB,GAAA,SAAA;AAAA,UACvD,GAAG,kBAAA;AAAA,UACJ,MAAQ,EAAA,UAAA;AAAA,UACR,QAAU,EAAA,YAAA;AAAA,UACV,SAAW,EAAA,aAAA;AAAA,UACX,OAAA,EAAS,CAAC,UAAA,GAAa,WAAc,GAAA,KAAA,CAAA;AAAA,UACrC,QAAU,EAAA,UAAA;AAAA,SACZ,CAAA;AAAA,wBACC,IAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,uBAAuB,CAAA;AAAA,UACjD,QAAA,EAAA;AAAA,YAAA,CAAC,UAAc,IAAA,CAAC,UAAc,IAAA,gBAAA,oBAC5B,GAAA,CAAA,eAAA,EAAA;AAAA,cAAgB,MAAQ,EAAA,gBAAA;AAAA,aAAkB,CAAA;AAAA,YAE5C,YAAA;AAAA,WAAA;AAAA,SACH,CAAA;AAAA,wBACC,GAAA,CAAA,KAAA,EAAA;AAAA,UAAI,SAAA,EAAW,aAAa,qBAAqB,CAAA;AAAA,SAAG,CAAA;AAAA,OAAA;AAAA,KACvD,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,57 @@
1
+ import { CalendarDate, toZoned, getLocalTimeZone, CalendarDateTime, ZonedDateTime } from '@internationalized/date';
2
+
3
+ function parseCalendarDate(inputDate) {
4
+ if (!(inputDate == null ? void 0 : inputDate.length)) {
5
+ return { date: null, error: false };
6
+ }
7
+ const date = new Date(inputDate);
8
+ if (Number.isNaN(date.getTime())) {
9
+ return { date: null, error: "not a valid date" };
10
+ }
11
+ const year = date.getFullYear();
12
+ const month = date.getMonth() + 1;
13
+ const day = date.getDate();
14
+ try {
15
+ const isoDate = new CalendarDate(year, month, day);
16
+ return { date: isoDate, error: false };
17
+ } catch (err) {
18
+ return { date: null, error: err.message };
19
+ }
20
+ }
21
+ function parseZonedDateTime(inputDate, timeZone = getLocalTimeZone()) {
22
+ const parsedDate = parseCalendarDate(inputDate);
23
+ if (!parsedDate.date || parsedDate.error) {
24
+ return { ...parsedDate, date: null };
25
+ }
26
+ try {
27
+ const zonedDate = toZoned(parsedDate.date, timeZone, "compatible");
28
+ return { date: zonedDate, error: false };
29
+ } catch (err) {
30
+ return { date: null, error: err.message };
31
+ }
32
+ }
33
+ const dateSupportsTime = (date) => date instanceof CalendarDateTime || date instanceof ZonedDateTime;
34
+ function extractTimeFieldsFromDateRange(selectedDate) {
35
+ let startTime;
36
+ let endTime;
37
+ if (selectedDate) {
38
+ if (selectedDate.startDate && dateSupportsTime(selectedDate.startDate)) {
39
+ const { hour, minute, second, millisecond } = selectedDate.startDate;
40
+ startTime = { hour, minute, second, millisecond };
41
+ }
42
+ if (selectedDate.endDate && dateSupportsTime(selectedDate.endDate)) {
43
+ const { hour, minute, second, millisecond } = selectedDate.endDate;
44
+ endTime = { hour, minute, second, millisecond };
45
+ }
46
+ }
47
+ return { startTime, endTime };
48
+ }
49
+ function extractTimeFieldsFromDate(selectedDate) {
50
+ if (selectedDate && dateSupportsTime(selectedDate)) {
51
+ const { hour, minute, second, millisecond } = selectedDate;
52
+ return { hour, minute, second, millisecond };
53
+ }
54
+ }
55
+
56
+ export { dateSupportsTime, extractTimeFieldsFromDate, extractTimeFieldsFromDateRange, parseCalendarDate, parseZonedDateTime };
57
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../src/date-input/utils.ts"],"sourcesContent":["import {\n CalendarDate,\n CalendarDateTime,\n type DateValue,\n type TimeFields,\n ZonedDateTime,\n getLocalTimeZone,\n toZoned,\n} from \"@internationalized/date\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\n\nexport type RangeTimeFields = {\n startTime?: TimeFields;\n endTime?: TimeFields;\n};\n\n/**\n * Parses a string into a CalendarDate.\n * @param inputDate - The input date string.\n * @returns An object containing the parsed date and any error encountered.\n */\nexport function parseCalendarDate(inputDate: string): {\n date: DateValue | null;\n error: string | false;\n} {\n if (!inputDate?.length) {\n return { date: null, error: false };\n }\n const date = new Date(inputDate);\n if (Number.isNaN(date.getTime())) {\n return { date: null, error: \"not a valid date\" };\n }\n\n const year = date.getFullYear();\n const month = date.getMonth() + 1;\n const day = date.getDate();\n\n try {\n const isoDate = new CalendarDate(year, month, day);\n return { date: isoDate, error: false };\n } catch (err) {\n return { date: null, error: (err as Error).message };\n }\n}\n\n/**\n * Parses a string into a ZonedDateTime.\n * @param inputDate - The input date string.\n * @param timeZone - The time zone to use for parsing. Defaults to the local time zone.\n * @returns An object containing the parsed date and any error encountered.\n */\nexport function parseZonedDateTime(\n inputDate: string,\n timeZone: string = getLocalTimeZone(),\n): {\n date: DateValue | null;\n error: string | false;\n} {\n const parsedDate = parseCalendarDate(inputDate);\n if (!parsedDate.date || parsedDate.error) {\n return { ...parsedDate, date: null };\n }\n try {\n const zonedDate = toZoned(parsedDate.date, timeZone, \"compatible\");\n return { date: zonedDate, error: false };\n } catch (err) {\n return { date: null, error: (err as Error).message };\n }\n}\n\n/**\n * Checks if a date supports time fields.\n * @param date - The date to check.\n * @returns `true` if the date supports time fields, otherwise `false`.\n */\nexport const dateSupportsTime = (\n date: DateValue,\n): date is CalendarDateTime | ZonedDateTime =>\n date instanceof CalendarDateTime || date instanceof ZonedDateTime;\n\n/**\n * Extracts time fields from a date range selection.\n * @param selectedDate - The selected date range.\n * @returns An object containing the start and end time fields.\n */\nexport function extractTimeFieldsFromDateRange(\n selectedDate: DateRangeSelection | null,\n): RangeTimeFields {\n let startTime: TimeFields | undefined;\n let endTime: TimeFields | undefined;\n if (selectedDate) {\n if (selectedDate.startDate && dateSupportsTime(selectedDate.startDate)) {\n const { hour, minute, second, millisecond } = selectedDate.startDate;\n startTime = { hour, minute, second, millisecond };\n }\n if (selectedDate.endDate && dateSupportsTime(selectedDate.endDate)) {\n const { hour, minute, second, millisecond } = selectedDate.endDate;\n endTime = { hour, minute, second, millisecond };\n }\n }\n return { startTime, endTime };\n}\n\n/**\n * Extracts time fields from a single date selection.\n * @param selectedDate - The selected date.\n * @returns The time fields of the selected date, if available.\n */\nexport function extractTimeFieldsFromDate(\n selectedDate: SingleDateSelection | null,\n): TimeFields | undefined {\n if (selectedDate && dateSupportsTime(selectedDate)) {\n const { hour, minute, second, millisecond } = selectedDate;\n return { hour, minute, second, millisecond };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,157 +1,48 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { clsx } from 'clsx';
3
- import { forwardRef, useState, useRef } from 'react';
4
- import { flip, useInteractions, useDismiss } from '@floating-ui/react';
5
- import { today, getLocalTimeZone } from '@internationalized/date';
6
- import { makePrefixer, useControlled, useFloatingUI, useFormFieldProps, useForkRef, Button } from '@salt-ds/core';
7
- import { CalendarIcon } from '@salt-ds/icons';
8
- import '../calendar/Calendar.js';
9
- import '../calendar/internal/CalendarContext.js';
10
- import '../calendar/internal/utils.js';
11
- import { isRangeOrOffsetSelectionWithStartDate } from '../calendar/useSelection.js';
12
- import { DateInput } from '../date-input/DateInput.js';
13
- import { DatePickerContext } from './DatePickerContext.js';
14
- import { DatePickerPanel } from './DatePickerPanel.js';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { forwardRef } from 'react';
3
+ import { DateRangeSelectionContext, SingleDateSelectionContext } from './DatePickerContext.js';
4
+ import { DatePickerOverlayProvider } from './DatePickerOverlayProvider.js';
5
+ import { useDatePicker } from './useDatePicker.js';
15
6
 
16
- const withBaseName = makePrefixer("saltDatePicker");
17
- const DatePicker = forwardRef(function DatePicker2({
18
- selectionVariant = "default",
19
- disabled = false,
20
- placeholder = "dd mmm yyyy",
21
- selectedDate: selectedDateProp,
22
- defaultSelectedDate,
23
- dateFormatter,
24
- CalendarProps,
25
- className,
26
- open: openProp,
27
- defaultOpen,
28
- onOpenChange: onOpenChangeProp,
29
- helperText,
30
- readOnly: readOnlyProp,
31
- validationStatus,
32
- onSelectionChange,
33
- onChange,
34
- visibleMonths = 2,
35
- ...rest
36
- }, ref) {
37
- var _a, _b, _c;
38
- const [open, setOpen] = useControlled({
39
- controlled: openProp,
40
- default: Boolean(defaultOpen),
41
- name: "openPanel",
42
- state: "openPanel"
43
- });
44
- const [selectedDate, setSelectedDate] = useControlled({
45
- controlled: selectedDateProp,
46
- default: defaultSelectedDate,
47
- name: "Calendar",
48
- state: "selectedDate"
49
- });
50
- const [startVisibleMonth, setStartVisibleMonth] = useState(
51
- (_a = isRangeOrOffsetSelectionWithStartDate(selectedDate) ? selectedDate == null ? void 0 : selectedDate.startDate : selectedDate) != null ? _a : today(getLocalTimeZone())
52
- );
53
- const [endVisibleMonth, setEndVisibleMonth] = useState(
54
- (_c = isRangeOrOffsetSelectionWithStartDate(selectedDate) ? (_b = selectedDate.startDate) == null ? void 0 : _b.add({ months: 1 }) : selectedDate) != null ? _c : today(getLocalTimeZone()).add({ months: 1 })
55
- );
56
- const onOpenChange = (newState) => {
57
- var _a2;
58
- setOpen(newState);
59
- (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
60
- onOpenChangeProp == null ? void 0 : onOpenChangeProp(newState);
61
- };
62
- const { x, y, strategy, elements, floating, reference, context } = useFloatingUI({
63
- open,
64
- onOpenChange,
65
- placement: "bottom-start",
66
- middleware: [flip({ fallbackStrategy: "initialPlacement" })]
67
- });
68
- const { getReferenceProps, getFloatingProps } = useInteractions([
69
- useDismiss(context)
70
- ]);
71
- const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } = useFormFieldProps();
72
- const isReadOnly = readOnlyProp || formFieldReadOnly;
73
- const getPanelPosition = () => {
74
- var _a2, _b2;
75
- return {
76
- top: y != null ? y : 0,
77
- left: x != null ? x : 0,
78
- position: strategy,
79
- width: (_a2 = elements.floating) == null ? void 0 : _a2.offsetWidth,
80
- height: (_b2 = elements.floating) == null ? void 0 : _b2.offsetHeight
81
- };
82
- };
83
- const panelRef = useRef(null);
84
- const startInputRef = useRef(null);
85
- const endInputRef = useRef(null);
86
- const inputRef = useForkRef(ref, reference);
87
- const floatingRef = useForkRef(panelRef, floating);
88
- const handleSelect = (event, selectedDate2) => {
89
- var _a2, _b2;
90
- if (selectionVariant === "default" && selectedDate2) {
91
- (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
7
+ const DatePickerMain = forwardRef(
8
+ function DatePickerMain2(props, ref) {
9
+ var _a, _b;
10
+ const { className, children, ...rest } = props;
11
+ if (props.selectionVariant === "range") {
12
+ const stateAndHelpers2 = useDatePicker(rest, ref);
13
+ return /* @__PURE__ */ jsx(DateRangeSelectionContext.Provider, {
14
+ value: stateAndHelpers2,
15
+ children: /* @__PURE__ */ jsx("div", {
16
+ className,
17
+ ref: (_a = stateAndHelpers2 == null ? void 0 : stateAndHelpers2.state) == null ? void 0 : _a.containerRef,
18
+ children
19
+ })
20
+ });
92
21
  }
93
- if (isRangeOrOffsetSelectionWithStartDate(selectedDate2) && selectedDate2.endDate) {
94
- (_b2 = endInputRef == null ? void 0 : endInputRef.current) == null ? void 0 : _b2.focus();
95
- }
96
- onSelectionChange == null ? void 0 : onSelectionChange(event, selectedDate2);
97
- };
98
- const handleCalendarButton = () => {
99
- var _a2;
100
- (_a2 = startInputRef == null ? void 0 : startInputRef.current) == null ? void 0 : _a2.focus();
101
- setOpen(!open);
102
- };
103
- const datePickerContextValue = {
104
- openState: open,
105
- setOpen,
106
- disabled,
107
- selectedDate,
108
- setSelectedDate,
109
- defaultSelectedDate,
110
- startVisibleMonth,
111
- setStartVisibleMonth,
112
- endVisibleMonth,
113
- setEndVisibleMonth,
114
- selectionVariant,
115
- context,
116
- getPanelPosition
117
- };
118
- return /* @__PURE__ */ jsxs(DatePickerContext.Provider, {
119
- value: datePickerContextValue,
120
- children: [
121
- /* @__PURE__ */ jsx(DateInput, {
122
- validationStatus,
123
- className: clsx(withBaseName(), className),
124
- ref: inputRef,
125
- ...getReferenceProps(),
126
- startInputRef,
127
- endInputRef,
128
- placeholder,
129
- dateFormatter,
130
- readOnly: isReadOnly,
131
- onSelectionChange,
132
- onChange,
133
- endAdornment: /* @__PURE__ */ jsx(Button, {
134
- variant: "secondary",
135
- onClick: handleCalendarButton,
136
- disabled: disabled || isReadOnly || formFieldDisabled,
137
- "aria-label": "Open Calendar",
138
- children: /* @__PURE__ */ jsx(CalendarIcon, {
139
- "aria-hidden": true
140
- })
141
- }),
142
- ...rest
143
- }),
144
- /* @__PURE__ */ jsx(DatePickerPanel, {
145
- ref: floatingRef,
146
- ...getFloatingProps(),
147
- onSelect: handleSelect,
148
- CalendarProps,
149
- helperText,
150
- visibleMonths
22
+ const stateAndHelpers = useDatePicker(rest, ref);
23
+ return /* @__PURE__ */ jsx(SingleDateSelectionContext.Provider, {
24
+ value: stateAndHelpers,
25
+ children: /* @__PURE__ */ jsx("div", {
26
+ className,
27
+ ref: (_b = stateAndHelpers == null ? void 0 : stateAndHelpers.state) == null ? void 0 : _b.containerRef,
28
+ children
29
+ })
30
+ });
31
+ }
32
+ );
33
+ const DatePicker = forwardRef(
34
+ function DatePicker2(props, ref) {
35
+ const { open, defaultOpen, ...rest } = props;
36
+ return /* @__PURE__ */ jsx(DatePickerOverlayProvider, {
37
+ open,
38
+ defaultOpen,
39
+ children: /* @__PURE__ */ jsx(DatePickerMain, {
40
+ ...rest,
41
+ ref
151
42
  })
152
- ]
153
- });
154
- });
43
+ });
44
+ }
45
+ );
155
46
 
156
- export { DatePicker };
47
+ export { DatePicker, DatePickerMain };
157
48
  //# sourceMappingURL=DatePicker.js.map