@salt-ds/lab 1.0.0-alpha.89 → 1.0.0-alpha.90

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 (306) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/css/salt-lab.css +120 -643
  3. package/dist-cjs/calendar/index.js +61 -0
  4. package/dist-cjs/calendar/index.js.map +1 -0
  5. package/dist-cjs/content-status/ContentStatus.js +1 -1
  6. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  7. package/dist-cjs/date-input/index.js +23 -0
  8. package/dist-cjs/date-input/index.js.map +1 -0
  9. package/dist-cjs/date-picker/index.js +106 -0
  10. package/dist-cjs/date-picker/index.js.map +1 -0
  11. package/dist-cjs/index.js +58 -56
  12. package/dist-cjs/index.js.map +1 -1
  13. package/dist-cjs/localization-provider/index.js +26 -0
  14. package/dist-cjs/localization-provider/index.js.map +1 -0
  15. package/dist-cjs/rating/Rating.css.js +1 -1
  16. package/dist-cjs/rating/Rating.js +11 -16
  17. package/dist-cjs/rating/Rating.js.map +1 -1
  18. package/dist-cjs/side-panel/SidePanel.css.js +6 -0
  19. package/dist-cjs/side-panel/SidePanel.css.js.map +1 -0
  20. package/dist-cjs/side-panel/SidePanel.js +156 -0
  21. package/dist-cjs/side-panel/SidePanel.js.map +1 -0
  22. package/dist-cjs/side-panel/SidePanelContent.css.js +6 -0
  23. package/dist-cjs/side-panel/SidePanelContent.css.js.map +1 -0
  24. package/dist-cjs/side-panel/SidePanelContent.js +86 -0
  25. package/dist-cjs/side-panel/SidePanelContent.js.map +1 -0
  26. package/dist-cjs/side-panel/SidePanelHeader.css.js +6 -0
  27. package/dist-cjs/side-panel/SidePanelHeader.css.js.map +1 -0
  28. package/dist-cjs/side-panel/SidePanelHeader.js +26 -0
  29. package/dist-cjs/side-panel/SidePanelHeader.js.map +1 -0
  30. package/dist-cjs/side-panel/SidePanelProvider.js +71 -0
  31. package/dist-cjs/side-panel/SidePanelProvider.js.map +1 -0
  32. package/dist-cjs/side-panel/SidePanelTitle.css.js +6 -0
  33. package/dist-cjs/side-panel/SidePanelTitle.css.js.map +1 -0
  34. package/dist-cjs/side-panel/SidePanelTitle.js +47 -0
  35. package/dist-cjs/side-panel/SidePanelTitle.js.map +1 -0
  36. package/dist-cjs/side-panel/SidePanelTrigger.js +37 -0
  37. package/dist-cjs/side-panel/SidePanelTrigger.js.map +1 -0
  38. package/dist-cjs/side-panel/internal/SidePanelContext.js +31 -0
  39. package/dist-cjs/side-panel/internal/SidePanelContext.js.map +1 -0
  40. package/dist-cjs/side-panel/useSidePanel.js +41 -0
  41. package/dist-cjs/side-panel/useSidePanel.js.map +1 -0
  42. package/dist-cjs/utils/deprecatedExport.js +30 -0
  43. package/dist-cjs/utils/deprecatedExport.js.map +1 -0
  44. package/dist-es/calendar/index.js +50 -0
  45. package/dist-es/calendar/index.js.map +1 -0
  46. package/dist-es/content-status/ContentStatus.js +1 -1
  47. package/dist-es/content-status/ContentStatus.js.map +1 -1
  48. package/dist-es/date-input/index.js +20 -0
  49. package/dist-es/date-input/index.js.map +1 -0
  50. package/dist-es/date-picker/index.js +85 -0
  51. package/dist-es/date-picker/index.js.map +1 -0
  52. package/dist-es/index.js +12 -23
  53. package/dist-es/index.js.map +1 -1
  54. package/dist-es/localization-provider/index.js +20 -0
  55. package/dist-es/localization-provider/index.js.map +1 -0
  56. package/dist-es/rating/Rating.css.js +1 -1
  57. package/dist-es/rating/Rating.js +13 -18
  58. package/dist-es/rating/Rating.js.map +1 -1
  59. package/dist-es/side-panel/SidePanel.css.js +4 -0
  60. package/dist-es/side-panel/SidePanel.css.js.map +1 -0
  61. package/dist-es/side-panel/SidePanel.js +154 -0
  62. package/dist-es/side-panel/SidePanel.js.map +1 -0
  63. package/dist-es/side-panel/SidePanelContent.css.js +4 -0
  64. package/dist-es/side-panel/SidePanelContent.css.js.map +1 -0
  65. package/dist-es/side-panel/SidePanelContent.js +84 -0
  66. package/dist-es/side-panel/SidePanelContent.js.map +1 -0
  67. package/dist-es/side-panel/SidePanelHeader.css.js +4 -0
  68. package/dist-es/side-panel/SidePanelHeader.css.js.map +1 -0
  69. package/dist-es/side-panel/SidePanelHeader.js +24 -0
  70. package/dist-es/side-panel/SidePanelHeader.js.map +1 -0
  71. package/dist-es/side-panel/SidePanelProvider.js +69 -0
  72. package/dist-es/side-panel/SidePanelProvider.js.map +1 -0
  73. package/dist-es/side-panel/SidePanelTitle.css.js +4 -0
  74. package/dist-es/side-panel/SidePanelTitle.css.js.map +1 -0
  75. package/dist-es/side-panel/SidePanelTitle.js +45 -0
  76. package/dist-es/side-panel/SidePanelTitle.js.map +1 -0
  77. package/dist-es/side-panel/SidePanelTrigger.js +35 -0
  78. package/dist-es/side-panel/SidePanelTrigger.js.map +1 -0
  79. package/dist-es/side-panel/internal/SidePanelContext.js +28 -0
  80. package/dist-es/side-panel/internal/SidePanelContext.js.map +1 -0
  81. package/dist-es/side-panel/useSidePanel.js +39 -0
  82. package/dist-es/side-panel/useSidePanel.js.map +1 -0
  83. package/dist-es/utils/deprecatedExport.js +27 -0
  84. package/dist-es/utils/deprecatedExport.js.map +1 -0
  85. package/dist-types/calendar/index.d.ts +13 -8
  86. package/dist-types/date-input/index.d.ts +3 -2
  87. package/dist-types/index.d.ts +1 -0
  88. package/dist-types/localization-provider/index.d.ts +9 -1
  89. package/dist-types/rating/Rating.d.ts +1 -2
  90. package/dist-types/side-panel/SidePanel.d.ts +27 -0
  91. package/dist-types/side-panel/SidePanelContent.d.ts +4 -0
  92. package/dist-types/side-panel/SidePanelHeader.d.ts +4 -0
  93. package/dist-types/side-panel/SidePanelProvider.d.ts +20 -0
  94. package/dist-types/side-panel/SidePanelTitle.d.ts +4 -0
  95. package/dist-types/side-panel/SidePanelTrigger.d.ts +5 -0
  96. package/dist-types/side-panel/index.d.ts +7 -0
  97. package/dist-types/side-panel/internal/SidePanelContext.d.ts +48 -0
  98. package/dist-types/side-panel/internal/index.d.ts +1 -0
  99. package/dist-types/side-panel/useSidePanel.d.ts +32 -0
  100. package/dist-types/utils/deprecatedExport.d.ts +11 -0
  101. package/package.json +5 -12
  102. package/dist-cjs/calendar/Calendar.css.js +0 -6
  103. package/dist-cjs/calendar/Calendar.css.js.map +0 -1
  104. package/dist-cjs/calendar/Calendar.js +0 -152
  105. package/dist-cjs/calendar/Calendar.js.map +0 -1
  106. package/dist-cjs/calendar/CalendarGrid.js +0 -85
  107. package/dist-cjs/calendar/CalendarGrid.js.map +0 -1
  108. package/dist-cjs/calendar/CalendarMonthHeader.css.js +0 -6
  109. package/dist-cjs/calendar/CalendarMonthHeader.css.js.map +0 -1
  110. package/dist-cjs/calendar/CalendarMonthHeader.js +0 -48
  111. package/dist-cjs/calendar/CalendarMonthHeader.js.map +0 -1
  112. package/dist-cjs/calendar/CalendarNavigation.css.js +0 -6
  113. package/dist-cjs/calendar/CalendarNavigation.css.js.map +0 -1
  114. package/dist-cjs/calendar/CalendarNavigation.js +0 -337
  115. package/dist-cjs/calendar/CalendarNavigation.js.map +0 -1
  116. package/dist-cjs/calendar/CalendarWeekHeader.css.js +0 -6
  117. package/dist-cjs/calendar/CalendarWeekHeader.css.js.map +0 -1
  118. package/dist-cjs/calendar/CalendarWeekHeader.js +0 -46
  119. package/dist-cjs/calendar/CalendarWeekHeader.js.map +0 -1
  120. package/dist-cjs/calendar/internal/CalendarContext.js +0 -25
  121. package/dist-cjs/calendar/internal/CalendarContext.js.map +0 -1
  122. package/dist-cjs/calendar/internal/CalendarDay.css.js +0 -6
  123. package/dist-cjs/calendar/internal/CalendarDay.css.js.map +0 -1
  124. package/dist-cjs/calendar/internal/CalendarDay.js +0 -97
  125. package/dist-cjs/calendar/internal/CalendarDay.js.map +0 -1
  126. package/dist-cjs/calendar/internal/CalendarMonth.css.js +0 -6
  127. package/dist-cjs/calendar/internal/CalendarMonth.css.js.map +0 -1
  128. package/dist-cjs/calendar/internal/CalendarMonth.js +0 -76
  129. package/dist-cjs/calendar/internal/CalendarMonth.js.map +0 -1
  130. package/dist-cjs/calendar/internal/useFocusManagement.js +0 -68
  131. package/dist-cjs/calendar/internal/useFocusManagement.js.map +0 -1
  132. package/dist-cjs/calendar/internal/utils.js +0 -50
  133. package/dist-cjs/calendar/internal/utils.js.map +0 -1
  134. package/dist-cjs/calendar/useCalendar.js +0 -183
  135. package/dist-cjs/calendar/useCalendar.js.map +0 -1
  136. package/dist-cjs/calendar/useCalendarDay.js +0 -85
  137. package/dist-cjs/calendar/useCalendarDay.js.map +0 -1
  138. package/dist-cjs/calendar/useCalendarSelection.js +0 -604
  139. package/dist-cjs/calendar/useCalendarSelection.js.map +0 -1
  140. package/dist-cjs/date-input/DateInput.css.js +0 -6
  141. package/dist-cjs/date-input/DateInput.css.js.map +0 -1
  142. package/dist-cjs/date-input/DateInputRange.js +0 -352
  143. package/dist-cjs/date-input/DateInputRange.js.map +0 -1
  144. package/dist-cjs/date-input/DateInputSingle.js +0 -234
  145. package/dist-cjs/date-input/DateInputSingle.js.map +0 -1
  146. package/dist-cjs/date-picker/DatePicker.js +0 -75
  147. package/dist-cjs/date-picker/DatePicker.js.map +0 -1
  148. package/dist-cjs/date-picker/DatePickerActions.css.js +0 -6
  149. package/dist-cjs/date-picker/DatePickerActions.css.js.map +0 -1
  150. package/dist-cjs/date-picker/DatePickerActions.js +0 -91
  151. package/dist-cjs/date-picker/DatePickerActions.js.map +0 -1
  152. package/dist-cjs/date-picker/DatePickerContext.js +0 -36
  153. package/dist-cjs/date-picker/DatePickerContext.js.map +0 -1
  154. package/dist-cjs/date-picker/DatePickerHelperText.css.js +0 -6
  155. package/dist-cjs/date-picker/DatePickerHelperText.css.js.map +0 -1
  156. package/dist-cjs/date-picker/DatePickerHelperText.js +0 -36
  157. package/dist-cjs/date-picker/DatePickerHelperText.js.map +0 -1
  158. package/dist-cjs/date-picker/DatePickerOverlay.css.js +0 -6
  159. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +0 -1
  160. package/dist-cjs/date-picker/DatePickerOverlay.js +0 -48
  161. package/dist-cjs/date-picker/DatePickerOverlay.js.map +0 -1
  162. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +0 -166
  163. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +0 -1
  164. package/dist-cjs/date-picker/DatePickerPanel.css.js +0 -6
  165. package/dist-cjs/date-picker/DatePickerPanel.css.js.map +0 -1
  166. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +0 -246
  167. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +0 -1
  168. package/dist-cjs/date-picker/DatePickerRangeInput.js +0 -202
  169. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +0 -1
  170. package/dist-cjs/date-picker/DatePickerRangePanel.js +0 -355
  171. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +0 -1
  172. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +0 -253
  173. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +0 -1
  174. package/dist-cjs/date-picker/DatePickerSingleInput.js +0 -148
  175. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +0 -1
  176. package/dist-cjs/date-picker/DatePickerSinglePanel.js +0 -20
  177. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +0 -1
  178. package/dist-cjs/date-picker/DatePickerTrigger.js +0 -32
  179. package/dist-cjs/date-picker/DatePickerTrigger.js.map +0 -1
  180. package/dist-cjs/date-picker/useDatePicker.js +0 -201
  181. package/dist-cjs/date-picker/useDatePicker.js.map +0 -1
  182. package/dist-cjs/date-picker/useFocusOut.js +0 -43
  183. package/dist-cjs/date-picker/useFocusOut.js.map +0 -1
  184. package/dist-cjs/date-picker/useKeyboard.js +0 -22
  185. package/dist-cjs/date-picker/useKeyboard.js.map +0 -1
  186. package/dist-cjs/localization-provider/LocalizationProvider.js +0 -51
  187. package/dist-cjs/localization-provider/LocalizationProvider.js.map +0 -1
  188. package/dist-es/calendar/Calendar.css.js +0 -4
  189. package/dist-es/calendar/Calendar.css.js.map +0 -1
  190. package/dist-es/calendar/Calendar.js +0 -150
  191. package/dist-es/calendar/Calendar.js.map +0 -1
  192. package/dist-es/calendar/CalendarGrid.js +0 -83
  193. package/dist-es/calendar/CalendarGrid.js.map +0 -1
  194. package/dist-es/calendar/CalendarMonthHeader.css.js +0 -4
  195. package/dist-es/calendar/CalendarMonthHeader.css.js.map +0 -1
  196. package/dist-es/calendar/CalendarMonthHeader.js +0 -46
  197. package/dist-es/calendar/CalendarMonthHeader.js.map +0 -1
  198. package/dist-es/calendar/CalendarNavigation.css.js +0 -4
  199. package/dist-es/calendar/CalendarNavigation.css.js.map +0 -1
  200. package/dist-es/calendar/CalendarNavigation.js +0 -335
  201. package/dist-es/calendar/CalendarNavigation.js.map +0 -1
  202. package/dist-es/calendar/CalendarWeekHeader.css.js +0 -4
  203. package/dist-es/calendar/CalendarWeekHeader.css.js.map +0 -1
  204. package/dist-es/calendar/CalendarWeekHeader.js +0 -44
  205. package/dist-es/calendar/CalendarWeekHeader.js.map +0 -1
  206. package/dist-es/calendar/internal/CalendarContext.js +0 -22
  207. package/dist-es/calendar/internal/CalendarContext.js.map +0 -1
  208. package/dist-es/calendar/internal/CalendarDay.css.js +0 -4
  209. package/dist-es/calendar/internal/CalendarDay.css.js.map +0 -1
  210. package/dist-es/calendar/internal/CalendarDay.js +0 -95
  211. package/dist-es/calendar/internal/CalendarDay.js.map +0 -1
  212. package/dist-es/calendar/internal/CalendarMonth.css.js +0 -4
  213. package/dist-es/calendar/internal/CalendarMonth.css.js.map +0 -1
  214. package/dist-es/calendar/internal/CalendarMonth.js +0 -74
  215. package/dist-es/calendar/internal/CalendarMonth.js.map +0 -1
  216. package/dist-es/calendar/internal/useFocusManagement.js +0 -66
  217. package/dist-es/calendar/internal/useFocusManagement.js.map +0 -1
  218. package/dist-es/calendar/internal/utils.js +0 -44
  219. package/dist-es/calendar/internal/utils.js.map +0 -1
  220. package/dist-es/calendar/useCalendar.js +0 -181
  221. package/dist-es/calendar/useCalendar.js.map +0 -1
  222. package/dist-es/calendar/useCalendarDay.js +0 -83
  223. package/dist-es/calendar/useCalendarDay.js.map +0 -1
  224. package/dist-es/calendar/useCalendarSelection.js +0 -600
  225. package/dist-es/calendar/useCalendarSelection.js.map +0 -1
  226. package/dist-es/date-input/DateInput.css.js +0 -4
  227. package/dist-es/date-input/DateInput.css.js.map +0 -1
  228. package/dist-es/date-input/DateInputRange.js +0 -349
  229. package/dist-es/date-input/DateInputRange.js.map +0 -1
  230. package/dist-es/date-input/DateInputSingle.js +0 -232
  231. package/dist-es/date-input/DateInputSingle.js.map +0 -1
  232. package/dist-es/date-picker/DatePicker.js +0 -72
  233. package/dist-es/date-picker/DatePicker.js.map +0 -1
  234. package/dist-es/date-picker/DatePickerActions.css.js +0 -4
  235. package/dist-es/date-picker/DatePickerActions.css.js.map +0 -1
  236. package/dist-es/date-picker/DatePickerActions.js +0 -89
  237. package/dist-es/date-picker/DatePickerActions.js.map +0 -1
  238. package/dist-es/date-picker/DatePickerContext.js +0 -32
  239. package/dist-es/date-picker/DatePickerContext.js.map +0 -1
  240. package/dist-es/date-picker/DatePickerHelperText.css.js +0 -4
  241. package/dist-es/date-picker/DatePickerHelperText.css.js.map +0 -1
  242. package/dist-es/date-picker/DatePickerHelperText.js +0 -34
  243. package/dist-es/date-picker/DatePickerHelperText.js.map +0 -1
  244. package/dist-es/date-picker/DatePickerOverlay.css.js +0 -4
  245. package/dist-es/date-picker/DatePickerOverlay.css.js.map +0 -1
  246. package/dist-es/date-picker/DatePickerOverlay.js +0 -46
  247. package/dist-es/date-picker/DatePickerOverlay.js.map +0 -1
  248. package/dist-es/date-picker/DatePickerOverlayProvider.js +0 -163
  249. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +0 -1
  250. package/dist-es/date-picker/DatePickerPanel.css.js +0 -4
  251. package/dist-es/date-picker/DatePickerPanel.css.js.map +0 -1
  252. package/dist-es/date-picker/DatePickerRangeGridPanel.js +0 -244
  253. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +0 -1
  254. package/dist-es/date-picker/DatePickerRangeInput.js +0 -199
  255. package/dist-es/date-picker/DatePickerRangeInput.js.map +0 -1
  256. package/dist-es/date-picker/DatePickerRangePanel.js +0 -353
  257. package/dist-es/date-picker/DatePickerRangePanel.js.map +0 -1
  258. package/dist-es/date-picker/DatePickerSingleGridPanel.js +0 -251
  259. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +0 -1
  260. package/dist-es/date-picker/DatePickerSingleInput.js +0 -146
  261. package/dist-es/date-picker/DatePickerSingleInput.js.map +0 -1
  262. package/dist-es/date-picker/DatePickerSinglePanel.js +0 -18
  263. package/dist-es/date-picker/DatePickerSinglePanel.js.map +0 -1
  264. package/dist-es/date-picker/DatePickerTrigger.js +0 -30
  265. package/dist-es/date-picker/DatePickerTrigger.js.map +0 -1
  266. package/dist-es/date-picker/useDatePicker.js +0 -199
  267. package/dist-es/date-picker/useDatePicker.js.map +0 -1
  268. package/dist-es/date-picker/useFocusOut.js +0 -41
  269. package/dist-es/date-picker/useFocusOut.js.map +0 -1
  270. package/dist-es/date-picker/useKeyboard.js +0 -20
  271. package/dist-es/date-picker/useKeyboard.js.map +0 -1
  272. package/dist-es/localization-provider/LocalizationProvider.js +0 -47
  273. package/dist-es/localization-provider/LocalizationProvider.js.map +0 -1
  274. package/dist-types/calendar/Calendar.d.ts +0 -116
  275. package/dist-types/calendar/CalendarGrid.d.ts +0 -29
  276. package/dist-types/calendar/CalendarMonthHeader.d.ts +0 -18
  277. package/dist-types/calendar/CalendarNavigation.d.ts +0 -64
  278. package/dist-types/calendar/CalendarWeekHeader.d.ts +0 -6
  279. package/dist-types/calendar/internal/CalendarContext.d.ts +0 -7
  280. package/dist-types/calendar/internal/CalendarDay.d.ts +0 -32
  281. package/dist-types/calendar/internal/CalendarMonth.d.ts +0 -13
  282. package/dist-types/calendar/internal/useFocusManagement.d.ts +0 -9
  283. package/dist-types/calendar/internal/utils.d.ts +0 -6
  284. package/dist-types/calendar/useCalendar.d.ts +0 -294
  285. package/dist-types/calendar/useCalendarDay.d.ts +0 -56
  286. package/dist-types/calendar/useCalendarSelection.d.ts +0 -365
  287. package/dist-types/date-input/DateInputRange.d.ts +0 -136
  288. package/dist-types/date-input/DateInputSingle.d.ts +0 -104
  289. package/dist-types/date-picker/DatePicker.d.ts +0 -55
  290. package/dist-types/date-picker/DatePickerActions.d.ts +0 -81
  291. package/dist-types/date-picker/DatePickerContext.d.ts +0 -188
  292. package/dist-types/date-picker/DatePickerHelperText.d.ts +0 -4
  293. package/dist-types/date-picker/DatePickerOverlay.d.ts +0 -11
  294. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +0 -102
  295. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +0 -16
  296. package/dist-types/date-picker/DatePickerRangeInput.d.ts +0 -18
  297. package/dist-types/date-picker/DatePickerRangePanel.d.ts +0 -84
  298. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +0 -64
  299. package/dist-types/date-picker/DatePickerSingleInput.d.ts +0 -17
  300. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +0 -8
  301. package/dist-types/date-picker/DatePickerTrigger.d.ts +0 -9
  302. package/dist-types/date-picker/index.d.ts +0 -13
  303. package/dist-types/date-picker/useDatePicker.d.ts +0 -119
  304. package/dist-types/date-picker/useFocusOut.d.ts +0 -9
  305. package/dist-types/date-picker/useKeyboard.d.ts +0 -20
  306. package/dist-types/localization-provider/LocalizationProvider.d.ts +0 -62
@@ -1,202 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var dateAdapters = require('@salt-ds/date-adapters');
6
- var clsx = require('clsx');
7
- var react = require('react');
8
- var DateInputRange = require('../date-input/DateInputRange.js');
9
- require('../date-input/DateInputSingle.js');
10
- var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
11
- var DatePickerContext = require('./DatePickerContext.js');
12
- var DatePickerOverlayProvider = require('./DatePickerOverlayProvider.js');
13
-
14
- const withBaseName = core.makePrefixer("saltDatePickerRangeInput");
15
- function defaultRangeValidator(dateAdapter, date, details, minDate, maxDate) {
16
- const { startDate, endDate } = date || {};
17
- if (!startDate) {
18
- details.startDate = details.startDate || {};
19
- details.startDate.errors = details.startDate.errors || [];
20
- const unsetStartDateError = details.startDate.errors.find(
21
- (err) => err.type === dateAdapters.DateDetailError.UNSET
22
- );
23
- if (unsetStartDateError) {
24
- unsetStartDateError.message = "no start date defined";
25
- } else {
26
- details.startDate.errors.push({
27
- type: dateAdapters.DateDetailError.UNSET,
28
- message: "no start date defined"
29
- });
30
- }
31
- }
32
- if (!endDate) {
33
- details.endDate = details.endDate || {};
34
- details.endDate.errors = details.endDate.errors || [];
35
- const unsetEndDateError = details.endDate.errors.find(
36
- (err) => err.type === dateAdapters.DateDetailError.UNSET
37
- );
38
- if (unsetEndDateError) {
39
- unsetEndDateError.message = "no end date defined";
40
- } else {
41
- details.endDate.errors.push({
42
- type: dateAdapters.DateDetailError.UNSET,
43
- message: "no end date defined"
44
- });
45
- }
46
- }
47
- if (dateAdapter.isValid(startDate) && dateAdapter.isValid(endDate) && dateAdapter.compare(startDate, endDate) > 0) {
48
- details.startDate = details.startDate || {};
49
- details.startDate.errors = details.startDate.errors || [];
50
- details.startDate.errors.push({
51
- type: "greater-than-end-date",
52
- message: "start date after end date"
53
- });
54
- }
55
- if (minDate && dateAdapter.isValid(startDate) && dateAdapter.compare(startDate, minDate) < 0) {
56
- details.startDate = details.startDate || {};
57
- details.startDate.errors = details.startDate.errors || [];
58
- details.startDate.errors.push({
59
- type: "min-date",
60
- message: "is before min date"
61
- });
62
- }
63
- if (maxDate && dateAdapter.isValid(startDate) && dateAdapter.compare(startDate, maxDate) > 0) {
64
- details.startDate = details.startDate || {};
65
- details.startDate.errors = details.startDate.errors || [];
66
- details.startDate.errors.push({
67
- type: "max-date",
68
- message: "is after max date"
69
- });
70
- }
71
- if (minDate && dateAdapter.isValid(endDate) && dateAdapter.compare(endDate, minDate) < 0) {
72
- details.endDate = details.endDate || {};
73
- details.endDate.errors = details.endDate.errors || [];
74
- details.endDate.errors.push({
75
- type: "max-date",
76
- message: "is before min date"
77
- });
78
- }
79
- if (maxDate && dateAdapter.isValid(endDate) && dateAdapter.compare(endDate, maxDate) > 0) {
80
- details.endDate = details.endDate || {};
81
- details.endDate.errors = details.endDate.errors || [];
82
- details.endDate.errors.push({
83
- type: "max-date",
84
- message: "is after max date"
85
- });
86
- }
87
- return details;
88
- }
89
- const DatePickerRangeInput = react.forwardRef(function DatePickerRangeInput2(props, ref) {
90
- const { dateAdapter } = LocalizationProvider.useLocalization();
91
- const {
92
- className,
93
- endInputProps,
94
- startInputProps,
95
- defaultValue,
96
- format = "DD MMM YYYY",
97
- value: valueProp,
98
- validate,
99
- onChange,
100
- onDateValueChange,
101
- ...rest
102
- } = props;
103
- const { CalendarIcon } = core.useIcon();
104
- const {
105
- state: {
106
- selectedDate,
107
- disabled,
108
- readOnly,
109
- cancelled,
110
- minDate,
111
- maxDate,
112
- timezone
113
- },
114
- helpers: { select }
115
- } = DatePickerContext.useDatePickerContext({ selectionVariant: "range" });
116
- const {
117
- state: { open },
118
- helpers: { setOpen }
119
- } = DatePickerOverlayProvider.useDatePickerOverlay();
120
- const previousValue = react.useRef();
121
- const [value, setValue] = core.useControlled({
122
- controlled: valueProp,
123
- default: defaultValue,
124
- name: "DatePickerRangeInput",
125
- state: "dateValue"
126
- });
127
- react.useEffect(() => {
128
- setValue({
129
- startDate: !(selectedDate == null ? void 0 : selectedDate.startDate) ? "" : (selectedDate == null ? void 0 : selectedDate.startDate) && dateAdapter.isValid(selectedDate.startDate) ? dateAdapter.format(selectedDate.startDate, format) : value == null ? void 0 : value.startDate,
130
- endDate: !(selectedDate == null ? void 0 : selectedDate.endDate) ? "" : (selectedDate == null ? void 0 : selectedDate.endDate) && dateAdapter.isValid(selectedDate.endDate) ? dateAdapter.format(selectedDate.endDate, format) : value == null ? void 0 : value.endDate
131
- });
132
- }, [dateAdapter, format, selectedDate]);
133
- const handleCalendarButton = react.useCallback(
134
- (event) => {
135
- event.persist();
136
- setOpen(!open, event.nativeEvent, "click");
137
- event.stopPropagation();
138
- },
139
- [open, setOpen]
140
- );
141
- const handleDateChange = react.useCallback(
142
- (event, date, details) => {
143
- const validatedDetails = validate ? validate(date, details) : defaultRangeValidator(dateAdapter, date, details, minDate, maxDate);
144
- select(event, date, validatedDetails);
145
- },
146
- [dateAdapter, select, minDate, maxDate, validate]
147
- );
148
- const handleDateValueChange = react.useCallback(
149
- (event, newDateValue) => {
150
- setValue(newDateValue);
151
- onDateValueChange == null ? void 0 : onDateValueChange(event, newDateValue);
152
- },
153
- [onDateValueChange]
154
- );
155
- react.useEffect(() => {
156
- if (open) {
157
- previousValue.current = value;
158
- }
159
- }, [open]);
160
- react.useEffect(() => {
161
- if (cancelled) {
162
- setValue(previousValue.current);
163
- }
164
- }, [cancelled]);
165
- return /* @__PURE__ */ jsxRuntime.jsx(
166
- DateInputRange.DateInputRange,
167
- {
168
- value: value ?? {
169
- startDate: "",
170
- endDate: ""
171
- },
172
- className: clsx.clsx(withBaseName(), className),
173
- date: selectedDate ?? null,
174
- startInputProps,
175
- endInputProps,
176
- readOnly,
177
- disabled,
178
- ref,
179
- onDateChange: handleDateChange,
180
- onDateValueChange: handleDateValueChange,
181
- onChange,
182
- endAdornment: !readOnly && /* @__PURE__ */ jsxRuntime.jsx(
183
- core.Button,
184
- {
185
- appearance: "transparent",
186
- sentiment: "neutral",
187
- onClick: handleCalendarButton,
188
- disabled,
189
- "aria-label": "Open Calendar",
190
- children: /* @__PURE__ */ jsxRuntime.jsx(CalendarIcon, { "aria-hidden": true })
191
- }
192
- ),
193
- format,
194
- timezone,
195
- ...rest
196
- }
197
- );
198
- });
199
-
200
- exports.DatePickerRangeInput = DatePickerRangeInput;
201
- exports.defaultRangeValidator = defaultRangeValidator;
202
- //# sourceMappingURL=DatePickerRangeInput.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatePickerRangeInput.js","sources":["../src/date-picker/DatePickerRangeInput.tsx"],"sourcesContent":["import { Button, makePrefixer, useControlled, useIcon } from \"@salt-ds/core\";\nimport {\n DateDetailError,\n type DateFrameworkType,\n type SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { clsx } from \"clsx\";\nimport {\n forwardRef,\n type MouseEventHandler,\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n DateInputRange,\n type DateInputRangeDetails,\n type DateInputRangeProps,\n type DateInputRangeValue,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerRangeInput\");\n\n/**\n * Props for the DatePickerRangeInput component.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerRangeInputProps<TDate extends DateFrameworkType>\n extends DateInputRangeProps<TDate> {\n /**\n * Function to validate the entered date\n * @param date - The selected date\n * @param details - The details of date selection, either a valid date or error\n * @returns updated DateInputRangeDetails details\n */\n validate?: (\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n ) => DateInputRangeDetails;\n}\n\nexport function defaultRangeValidator<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n minDate?: TDate,\n maxDate?: TDate,\n): DateInputRangeDetails {\n const { startDate, endDate } = date || {};\n\n if (!startDate) {\n details.startDate = details.startDate || {};\n details.startDate.errors = details.startDate.errors || [];\n const unsetStartDateError = details.startDate.errors.find(\n (err) => err.type === DateDetailError.UNSET,\n );\n if (unsetStartDateError) {\n unsetStartDateError.message = \"no start date defined\";\n } else {\n details.startDate.errors.push({\n type: DateDetailError.UNSET,\n message: \"no start date defined\",\n });\n }\n }\n\n if (!endDate) {\n details.endDate = details.endDate || {};\n details.endDate.errors = details.endDate.errors || [];\n const unsetEndDateError = details.endDate.errors.find(\n (err) => err.type === DateDetailError.UNSET,\n );\n if (unsetEndDateError) {\n unsetEndDateError.message = \"no end date defined\";\n } else {\n details.endDate.errors.push({\n type: DateDetailError.UNSET,\n message: \"no end date defined\",\n });\n }\n }\n\n // If startDate is after endDate\n if (\n dateAdapter.isValid(startDate) &&\n dateAdapter.isValid(endDate) &&\n dateAdapter.compare(startDate, endDate) > 0\n ) {\n details.startDate = details.startDate || {};\n details.startDate.errors = details.startDate.errors || [];\n details.startDate.errors.push({\n type: \"greater-than-end-date\",\n message: \"start date after end date\",\n });\n }\n // If startDate is before minDate\n if (\n minDate &&\n dateAdapter.isValid(startDate) &&\n dateAdapter.compare(startDate, minDate) < 0\n ) {\n details.startDate = details.startDate || {};\n details.startDate.errors = details.startDate.errors || [];\n details.startDate.errors.push({\n type: \"min-date\",\n message: \"is before min date\",\n });\n }\n // If startDate is after maxDate\n if (\n maxDate &&\n dateAdapter.isValid(startDate) &&\n dateAdapter.compare(startDate, maxDate) > 0\n ) {\n details.startDate = details.startDate || {};\n details.startDate.errors = details.startDate.errors || [];\n details.startDate.errors.push({\n type: \"max-date\",\n message: \"is after max date\",\n });\n }\n if (\n minDate &&\n dateAdapter.isValid(endDate) &&\n dateAdapter.compare(endDate, minDate) < 0\n ) {\n details.endDate = details.endDate || {};\n details.endDate.errors = details.endDate.errors || [];\n details.endDate.errors.push({\n type: \"max-date\",\n message: \"is before min date\",\n });\n }\n // If endDate is after maxDate\n if (\n maxDate &&\n dateAdapter.isValid(endDate) &&\n dateAdapter.compare(endDate, maxDate) > 0\n ) {\n details.endDate = details.endDate || {};\n details.endDate.errors = details.endDate.errors || [];\n details.endDate.errors.push({\n type: \"max-date\",\n message: \"is after max date\",\n });\n }\n return details;\n}\n\nexport const DatePickerRangeInput = forwardRef(function DatePickerRangeInput<\n TDate extends DateFrameworkType,\n>(\n props: DatePickerRangeInputProps<SingleDateSelection<TDate>>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const { dateAdapter } = useLocalization<TDate>();\n const {\n className,\n endInputProps,\n startInputProps,\n defaultValue,\n format = \"DD MMM YYYY\",\n value: valueProp,\n validate,\n onChange,\n onDateValueChange,\n ...rest\n } = props;\n\n const { CalendarIcon } = useIcon();\n\n const {\n state: {\n selectedDate,\n disabled,\n readOnly,\n cancelled,\n minDate,\n maxDate,\n timezone,\n },\n helpers: { select },\n } = useDatePickerContext<TDate>({ selectionVariant: \"range\" });\n const {\n state: { open },\n helpers: { setOpen },\n } = useDatePickerOverlay();\n\n const previousValue = useRef<typeof valueProp>();\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DatePickerRangeInput\",\n state: \"dateValue\",\n });\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: run when date changes to sync the value\n useEffect(() => {\n setValue({\n startDate: !selectedDate?.startDate\n ? \"\"\n : selectedDate?.startDate && dateAdapter.isValid(selectedDate.startDate)\n ? dateAdapter.format(selectedDate.startDate, format)\n : value?.startDate,\n endDate: !selectedDate?.endDate\n ? \"\"\n : selectedDate?.endDate && dateAdapter.isValid(selectedDate.endDate)\n ? dateAdapter.format(selectedDate.endDate, format)\n : value?.endDate,\n });\n }, [dateAdapter, format, selectedDate]);\n\n const handleCalendarButton: MouseEventHandler<HTMLButtonElement> =\n useCallback(\n (event) => {\n event.persist();\n setOpen(!open, event.nativeEvent, \"click\");\n event.stopPropagation();\n },\n [open, setOpen],\n );\n\n const handleDateChange = useCallback(\n (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n ) => {\n const validatedDetails = validate\n ? validate(date, details)\n : defaultRangeValidator(dateAdapter, date, details, minDate, maxDate);\n select(event, date, validatedDetails);\n },\n [dateAdapter, select, minDate, maxDate, validate],\n );\n\n const handleDateValueChange = useCallback(\n (event: SyntheticEvent | null, newDateValue: DateInputRangeValue) => {\n setValue(newDateValue);\n onDateValueChange?.(event, newDateValue);\n },\n [onDateValueChange],\n );\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousValue.current = value;\n }\n }, [open]);\n\n useEffect(() => {\n if (cancelled) {\n setValue(previousValue.current);\n }\n }, [cancelled]);\n\n return (\n <DateInputRange\n value={\n value ?? {\n startDate: \"\",\n endDate: \"\",\n }\n }\n className={clsx(withBaseName(), className)}\n date={selectedDate ?? null}\n startInputProps={startInputProps}\n endInputProps={endInputProps}\n readOnly={readOnly}\n disabled={disabled}\n ref={ref}\n onDateChange={handleDateChange}\n onDateValueChange={handleDateValueChange}\n onChange={onChange}\n endAdornment={\n !readOnly && (\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n onClick={handleCalendarButton}\n disabled={disabled}\n aria-label=\"Open Calendar\"\n >\n <CalendarIcon aria-hidden />\n </Button>\n )\n }\n format={format}\n timezone={timezone}\n {...rest}\n />\n );\n});\n"],"names":["makePrefixer","DateDetailError","forwardRef","DatePickerRangeInput","useLocalization","useIcon","useDatePickerContext","useDatePickerOverlay","useRef","useControlled","useEffect","useCallback","jsx","DateInputRange","clsx","Button"],"mappings":"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"}
@@ -1,355 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var core = require('@salt-ds/core');
5
- var styles = require('@salt-ds/styles');
6
- var window = require('@salt-ds/window');
7
- var clsx = require('clsx');
8
- var react = require('react');
9
- var Calendar = require('../calendar/Calendar.js');
10
- var CalendarGrid = require('../calendar/CalendarGrid.js');
11
- var CalendarNavigation = require('../calendar/CalendarNavigation.js');
12
- require('../calendar/CalendarWeekHeader.js');
13
- var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
14
- require('../calendar/useCalendarSelection.js');
15
- require('../calendar/internal/CalendarContext.js');
16
- var utils = require('../calendar/internal/utils.js');
17
- var DatePickerContext = require('./DatePickerContext.js');
18
- var DatePickerOverlayProvider = require('./DatePickerOverlayProvider.js');
19
- var DatePickerPanel = require('./DatePickerPanel.css.js');
20
-
21
- function getFallbackVisibleMonths(dateAdapter, selectedDate, timezone = "default") {
22
- function createConsecutiveRange(date) {
23
- const startDate = dateAdapter.startOf(date, "month");
24
- const endDate = dateAdapter.add(startDate, { months: 1 });
25
- return [startDate, endDate];
26
- }
27
- if (selectedDate && dateAdapter.isValid(selectedDate == null ? void 0 : selectedDate.startDate)) {
28
- const { startDate, endDate } = selectedDate;
29
- if (dateAdapter.isValid(endDate)) {
30
- return dateAdapter.isSame(startDate, endDate, "month") ? createConsecutiveRange(startDate) : [
31
- dateAdapter.startOf(startDate, "month"),
32
- dateAdapter.startOf(endDate, "month")
33
- ];
34
- }
35
- return createConsecutiveRange(startDate);
36
- }
37
- const currentMonth = dateAdapter.startOf(
38
- dateAdapter.today(timezone),
39
- "month"
40
- );
41
- return [currentMonth, dateAdapter.add(currentMonth, { months: 1 })];
42
- }
43
- const withBaseName = core.makePrefixer("saltDatePickerPanel");
44
- const DatePickerRangePanel = react.forwardRef(function DatePickerRangePanel2(props, ref) {
45
- const { dateAdapter } = LocalizationProvider.useLocalization();
46
- const {
47
- className,
48
- defaultStartVisibleMonth: defaultStartVisibleMonthProp,
49
- startVisibleMonth: startVisibleMonthProp,
50
- onStartVisibleMonthChange,
51
- defaultEndVisibleMonth: defaultEndVisibleMonthProp,
52
- endVisibleMonth: endVisibleMonthProp,
53
- onEndVisibleMonthChange,
54
- helperText,
55
- onFocusedDateChange,
56
- onHoveredDateChange,
57
- onSelectionChange,
58
- StartCalendarProps: StartCalendarPropsProp,
59
- StartCalendarNavigationProps,
60
- StartCalendarGridProps,
61
- EndCalendarProps: EndCalendarPropsProp,
62
- EndCalendarNavigationProps,
63
- EndCalendarGridProps,
64
- ...rest
65
- } = props;
66
- const targetWindow = window.useWindow();
67
- styles.useComponentCssInjection({
68
- testId: "salt-date-picker-range-panel",
69
- css: DatePickerPanel,
70
- window: targetWindow
71
- });
72
- const calendarsRef = react.useRef(null);
73
- const containerRef = core.useForkRef(ref, calendarsRef);
74
- const {
75
- state: {
76
- timezone,
77
- selectedDate,
78
- minDate = dateAdapter.startOf(dateAdapter.today(timezone), "month"),
79
- maxDate = dateAdapter.add(minDate, { months: 1 })
80
- },
81
- helpers: { select, isDayHighlighted, isDayUnselectable }
82
- } = DatePickerContext.useDatePickerContext({ selectionVariant: "range" });
83
- const {
84
- state: { initialFocusRef, focused }
85
- } = DatePickerOverlayProvider.useDatePickerOverlay();
86
- const [hoveredDate, setHoveredDate] = react.useState(null);
87
- const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = react.useState(
88
- () => getFallbackVisibleMonths(dateAdapter, selectedDate, timezone)
89
- );
90
- const [startVisibleMonth, setStartVisibleMonth] = core.useControlled({
91
- controlled: startVisibleMonthProp,
92
- default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,
93
- name: "DatePickerRangePanel",
94
- state: "startVisibleMonth"
95
- });
96
- const [endVisibleMonth, setEndVisibleMonth] = core.useControlled({
97
- controlled: endVisibleMonthProp,
98
- default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,
99
- name: "DatePickerRangePanel",
100
- state: "endVisibleMonth"
101
- });
102
- const handleSelectionChange = react.useCallback(
103
- (event, newDate) => {
104
- select(event, newDate);
105
- onSelectionChange == null ? void 0 : onSelectionChange(event, newDate);
106
- },
107
- [select, onSelectionChange]
108
- );
109
- const handleHoveredStartDateChange = react.useCallback(
110
- (event, newHoveredDate) => {
111
- setHoveredDate(newHoveredDate);
112
- onHoveredDateChange == null ? void 0 : onHoveredDateChange(event, newHoveredDate);
113
- },
114
- [onHoveredDateChange]
115
- );
116
- const handleHoveredEndDateChange = react.useCallback(
117
- (event, newHoveredDate) => {
118
- setHoveredDate(newHoveredDate);
119
- onHoveredDateChange == null ? void 0 : onHoveredDateChange(event, newHoveredDate);
120
- },
121
- [onHoveredDateChange]
122
- );
123
- const handleStartVisibleMonthChange = react.useCallback(
124
- (event, newVisibleMonth) => {
125
- setStartVisibleMonth(newVisibleMonth);
126
- if (dateAdapter.compare(newVisibleMonth, endVisibleMonth) >= 0) {
127
- setEndVisibleMonth(dateAdapter.add(newVisibleMonth, { months: 1 }));
128
- }
129
- onStartVisibleMonthChange == null ? void 0 : onStartVisibleMonthChange(event, newVisibleMonth);
130
- },
131
- [dateAdapter, endVisibleMonth, onStartVisibleMonthChange]
132
- );
133
- const handleEndVisibleMonthChange = react.useCallback(
134
- (event, newVisibleMonth) => {
135
- setEndVisibleMonth(newVisibleMonth);
136
- if (dateAdapter.compare(newVisibleMonth, startVisibleMonth) <= 0) {
137
- setStartVisibleMonth(
138
- dateAdapter.startOf(
139
- dateAdapter.subtract(newVisibleMonth, { months: 1 }),
140
- "month"
141
- )
142
- );
143
- }
144
- onEndVisibleMonthChange == null ? void 0 : onEndVisibleMonthChange(event, newVisibleMonth);
145
- },
146
- [dateAdapter, startVisibleMonth, onEndVisibleMonthChange]
147
- );
148
- const calendarSelectedDate = {
149
- startDate: selectedDate && dateAdapter.isValid(selectedDate.startDate) ? selectedDate.startDate : null,
150
- endDate: selectedDate && dateAdapter.isValid(selectedDate.endDate) ? selectedDate.endDate : null
151
- };
152
- const [focusedDate, setFocusedDate] = react.useState(null);
153
- const handleStartCalendarFocusedDateChange = react.useCallback(
154
- (event, newFocusedDate) => {
155
- setFocusedDate(newFocusedDate);
156
- if (newFocusedDate && !dateAdapter.isSame(startVisibleMonth, newFocusedDate, "month")) {
157
- handleStartVisibleMonthChange(
158
- event,
159
- dateAdapter.startOf(newFocusedDate, "month")
160
- );
161
- }
162
- onFocusedDateChange == null ? void 0 : onFocusedDateChange(event, newFocusedDate);
163
- },
164
- [
165
- dateAdapter,
166
- startVisibleMonth,
167
- handleStartVisibleMonthChange,
168
- onFocusedDateChange
169
- ]
170
- );
171
- const handleEndCalendarFocusedDateChange = react.useCallback(
172
- (event, newFocusedDate) => {
173
- setFocusedDate(newFocusedDate);
174
- if (newFocusedDate && !dateAdapter.isSame(endVisibleMonth, newFocusedDate, "month")) {
175
- handleEndVisibleMonthChange(
176
- event,
177
- dateAdapter.startOf(newFocusedDate, "month")
178
- );
179
- }
180
- onFocusedDateChange == null ? void 0 : onFocusedDateChange(event, newFocusedDate);
181
- },
182
- [
183
- dateAdapter,
184
- endVisibleMonth,
185
- handleEndVisibleMonthChange,
186
- onFocusedDateChange
187
- ]
188
- );
189
- const getNextFocusedDate = (nextStartVisibleMonth, nextEndVisibleMonth) => {
190
- const isOutsideAllowedDates = (date) => {
191
- return dateAdapter.compare(date, minDate) < 0 || dateAdapter.compare(date, maxDate) > 0;
192
- };
193
- const isDaySelectable = (date) => !(date && ((isDayUnselectable == null ? void 0 : isDayUnselectable(date)) || isOutsideAllowedDates(date)));
194
- const getVisibleSelectedDate = (visibleMonth) => {
195
- if ((selectedDate == null ? void 0 : selectedDate.startDate) && dateAdapter.isSame(visibleMonth, selectedDate.startDate, "month") && isDaySelectable(selectedDate.startDate)) {
196
- return selectedDate.startDate;
197
- }
198
- if ((selectedDate == null ? void 0 : selectedDate.endDate) && dateAdapter.isSame(visibleMonth, selectedDate.endDate, "month") && isDaySelectable(selectedDate.endDate)) {
199
- return selectedDate.endDate;
200
- }
201
- return null;
202
- };
203
- let focusSelectedDate = getVisibleSelectedDate(nextStartVisibleMonth);
204
- focusSelectedDate = focusSelectedDate ?? getVisibleSelectedDate(nextEndVisibleMonth);
205
- if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {
206
- return focusSelectedDate;
207
- }
208
- const today = dateAdapter.today(timezone);
209
- if ((dateAdapter.isSame(nextStartVisibleMonth, today, "month") || dateAdapter.isSame(nextEndVisibleMonth, today, "month")) && isDaySelectable(today)) {
210
- return today;
211
- }
212
- const getFirstSelectableDate = (visibleMonth) => {
213
- const firstSelectableDate = utils.generateDatesForMonth(
214
- dateAdapter,
215
- visibleMonth
216
- ).find((visibleDay) => isDaySelectable(visibleDay));
217
- return firstSelectableDate ?? null;
218
- };
219
- return getFirstSelectableDate(nextStartVisibleMonth) ?? getFirstSelectableDate(nextEndVisibleMonth);
220
- };
221
- core.useIsomorphicLayoutEffect(() => {
222
- if (!focused) {
223
- setFocusedDate(null);
224
- return;
225
- }
226
- const isStartDateValid = (selectedDate == null ? void 0 : selectedDate.startDate) && dateAdapter.isValid(selectedDate.startDate) && dateAdapter.compare(selectedDate.startDate, minDate) >= 0 && dateAdapter.compare(selectedDate.startDate, maxDate) <= 0;
227
- const isEndDateValid = (selectedDate == null ? void 0 : selectedDate.endDate) && dateAdapter.isValid(selectedDate.endDate) && dateAdapter.compare(selectedDate.endDate, minDate) >= 0 && dateAdapter.compare(selectedDate.endDate, maxDate) <= 0;
228
- let nextStartVisibleMonth = startVisibleMonth;
229
- let nextEndVisibleMonth = endVisibleMonth;
230
- const setVisibleMonths = (start, end) => {
231
- nextStartVisibleMonth = dateAdapter.startOf(start, "month");
232
- nextEndVisibleMonth = dateAdapter.startOf(end, "month");
233
- };
234
- if ((selectedDate == null ? void 0 : selectedDate.startDate) && (selectedDate == null ? void 0 : selectedDate.endDate) && isStartDateValid && isEndDateValid) {
235
- if (dateAdapter.isSame(
236
- selectedDate.startDate,
237
- startVisibleMonth,
238
- "month"
239
- ) && dateAdapter.isSame(selectedDate.endDate, startVisibleMonth, "month")) {
240
- setVisibleMonths(
241
- selectedDate.startDate,
242
- dateAdapter.add(selectedDate.startDate, { months: 1 })
243
- );
244
- } else {
245
- setVisibleMonths(selectedDate.startDate, selectedDate.endDate);
246
- }
247
- } else if ((selectedDate == null ? void 0 : selectedDate.startDate) && isStartDateValid) {
248
- setVisibleMonths(
249
- selectedDate.startDate,
250
- dateAdapter.add(selectedDate.startDate, { months: 1 })
251
- );
252
- } else if ((selectedDate == null ? void 0 : selectedDate.endDate) && isEndDateValid) {
253
- setVisibleMonths(
254
- dateAdapter.subtract(selectedDate.endDate, { months: 1 }),
255
- selectedDate.endDate
256
- );
257
- }
258
- if (!focusedDate) {
259
- setFocusedDate((prevFocusedDate) => {
260
- if (!prevFocusedDate) {
261
- return getNextFocusedDate(nextStartVisibleMonth, nextEndVisibleMonth);
262
- }
263
- return prevFocusedDate;
264
- });
265
- }
266
- }, [dateAdapter, minDate, maxDate, focused]);
267
- const StartCalendarProps = {
268
- visibleMonth: startVisibleMonth,
269
- hoveredDate,
270
- selectedDate: calendarSelectedDate,
271
- isDayHighlighted,
272
- isDayUnselectable,
273
- focusedDateRef: initialFocusRef,
274
- focusedDate: focusedDate && dateAdapter.compare(
275
- focusedDate,
276
- dateAdapter.startOf(endVisibleMonth, "month")
277
- ) < 0 ? focusedDate : null,
278
- onHoveredDateChange: handleHoveredStartDateChange,
279
- onFocusedDateChange: handleStartCalendarFocusedDateChange,
280
- onVisibleMonthChange: handleStartVisibleMonthChange,
281
- onSelectionChange: handleSelectionChange,
282
- hideOutOfRangeDates: true,
283
- minDate,
284
- maxDate,
285
- timezone,
286
- ...StartCalendarPropsProp
287
- };
288
- const EndCalendarProps = {
289
- visibleMonth: endVisibleMonth,
290
- hoveredDate,
291
- isDayHighlighted,
292
- isDayUnselectable,
293
- focusedDateRef: initialFocusRef,
294
- focusedDate: focusedDate && dateAdapter.compare(
295
- focusedDate,
296
- dateAdapter.startOf(endVisibleMonth, "month")
297
- ) >= 0 ? focusedDate : null,
298
- selectedDate: calendarSelectedDate,
299
- onFocusedDateChange: handleEndCalendarFocusedDateChange,
300
- onHoveredDateChange: handleHoveredEndDateChange,
301
- onVisibleMonthChange: handleEndVisibleMonthChange,
302
- onSelectionChange: handleSelectionChange,
303
- hideOutOfRangeDates: true,
304
- minDate,
305
- maxDate,
306
- timezone,
307
- ...EndCalendarPropsProp
308
- };
309
- return /* @__PURE__ */ jsxRuntime.jsxs(
310
- core.StackLayout,
311
- {
312
- separators: true,
313
- gap: 0,
314
- className: clsx.clsx(className, withBaseName("container")),
315
- ref: containerRef,
316
- ...rest,
317
- children: [
318
- helperText && /* @__PURE__ */ jsxRuntime.jsx(core.FlexItem, { className: withBaseName("header"), children: /* @__PURE__ */ jsxRuntime.jsx(core.FormFieldHelperText, { children: helperText }) }),
319
- /* @__PURE__ */ jsxRuntime.jsx(core.FlexLayout, { gap: 0, children: /* @__PURE__ */ jsxRuntime.jsxs(core.FormFieldContext.Provider, { value: {}, children: [
320
- /* @__PURE__ */ jsxRuntime.jsxs(Calendar.Calendar, { selectionVariant: "range", ...StartCalendarProps, children: [
321
- /* @__PURE__ */ jsxRuntime.jsx(
322
- CalendarNavigation.CalendarNavigation,
323
- {
324
- disableNavigateNext: dateAdapter.isSame(
325
- startVisibleMonth,
326
- dateAdapter.subtract(maxDate, { months: 1 }),
327
- "month"
328
- ),
329
- ...StartCalendarNavigationProps
330
- }
331
- ),
332
- /* @__PURE__ */ jsxRuntime.jsx(CalendarGrid.CalendarGrid, { ...StartCalendarGridProps })
333
- ] }),
334
- /* @__PURE__ */ jsxRuntime.jsxs(Calendar.Calendar, { selectionVariant: "range", ...EndCalendarProps, children: [
335
- /* @__PURE__ */ jsxRuntime.jsx(
336
- CalendarNavigation.CalendarNavigation,
337
- {
338
- disableNavigatePrevious: dateAdapter.isSame(
339
- endVisibleMonth,
340
- dateAdapter.add(minDate, { months: 1 }),
341
- "month"
342
- ),
343
- ...EndCalendarNavigationProps
344
- }
345
- ),
346
- /* @__PURE__ */ jsxRuntime.jsx(CalendarGrid.CalendarGrid, { ...EndCalendarGridProps })
347
- ] })
348
- ] }) })
349
- ]
350
- }
351
- );
352
- });
353
-
354
- exports.DatePickerRangePanel = DatePickerRangePanel;
355
- //# sourceMappingURL=DatePickerRangePanel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DatePickerRangePanel.js","sources":["../src/date-picker/DatePickerRangePanel.tsx"],"sourcesContent":["import {\n FlexItem,\n FlexLayout,\n FormFieldContext,\n type FormFieldContextValue,\n FormFieldHelperText,\n makePrefixer,\n StackLayout,\n useControlled,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport type {\n DateFrameworkType,\n SaltDateAdapter,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type SyntheticEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n Calendar,\n CalendarGrid,\n type CalendarGridProps,\n CalendarNavigation,\n type CalendarNavigationProps,\n type CalendarOffsetProps,\n type CalendarProps,\n type CalendarRangeProps,\n type DateRangeSelection,\n type UseCalendarSelectionRangeProps,\n} from \"../calendar\";\nimport { generateDatesForMonth } from \"../calendar/internal/utils\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useDatePickerContext } from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\nimport datePickerPanelCss from \"./DatePickerPanel.css\";\n\n/**\n * Props for the DatePickerRangePanel component.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerRangePanelProps<TDate extends DateFrameworkType>\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when a date range is selected.\n * @param event - The synthetic event.\n * @param selectedDate - The selected date range or null.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n selectedDate?: DateRangeSelection<TDate> | null,\n ) => void;\n\n /**\n * Helper text to be displayed below the date picker.\n */\n helperText?: string;\n\n /**\n * The currently visible month for the start date.\n */\n startVisibleMonth?: TDate;\n\n /**\n * The default visible month for the start date.\n */\n defaultStartVisibleMonth?: TDate;\n\n /**\n * Callback fired when the visible month for the start date changes.\n * @param event - The synthetic event, or null if called by effect.\n * @param visibleMonth - The new visible month for the start date.\n */\n onStartVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\n\n /**\n * The currently visible month for the end date.\n */\n endVisibleMonth?: TDate;\n\n /**\n * The default visible month for the end date.\n */\n defaultEndVisibleMonth?: TDate;\n\n /**\n * Callback fired when the visible month for the end date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month for the end date.\n */\n onEndVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\n\n /**\n * Callback fired when the focused date changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param focusedDate - The new focused date.\n */\n onFocusedDateChange?: (\n event: SyntheticEvent | null,\n focusedDate?: TDate | null,\n ) => void;\n /**\n * Callback fired when the hovered date changes.\n * @param event - The synthetic event.\n * @param hoveredDate - The new hovered date.\n */\n onHoveredDateChange?: (\n event: SyntheticEvent,\n hoveredDate?: TDate | null,\n ) => void;\n\n /**\n * Props to be passed to the start date CalendarNavigation component.\n */\n StartCalendarNavigationProps?: CalendarNavigationProps<TDate>;\n\n /**\n * Props to be passed to the start date calendar component.\n */\n StartCalendarProps?: Partial<\n Omit<\n CalendarRangeProps<TDate> | CalendarOffsetProps<TDate>,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"multiselect\"\n | \"onFocusedDateChange\"\n | \"onHoveredDateChange\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n /**\n * Props to be passed to the start date CalendarGrid component.\n */\n StartCalendarGridProps?: CalendarGridProps<TDate>;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarProps?: Partial<\n Omit<\n CalendarRangeProps<TDate>,\n | \"selectedDate\"\n | \"defaultSelectedDate\"\n | \"multiselect\"\n | \"onFocusedDateChange\"\n | \"onHoveredDateChange\"\n | \"onSelectionChange\"\n | \"onVisibleMonthChange\"\n >\n >;\n\n /**\n * Props to be passed to the end date CalendarNavigation component.\n */\n EndCalendarNavigationProps?: CalendarNavigationProps<TDate>;\n /**\n * Props to be passed to the end date CalendarGrid component.\n */\n EndCalendarGridProps?: CalendarGridProps<TDate>;\n}\n\nfunction getFallbackVisibleMonths<TDate extends DateFrameworkType>(\n dateAdapter: SaltDateAdapter<TDate>,\n selectedDate: DateRangeSelection<TDate> | null,\n timezone: Timezone = \"default\",\n) {\n function createConsecutiveRange(date: TDate) {\n const startDate = dateAdapter.startOf(date, \"month\");\n const endDate = dateAdapter.add(startDate, { months: 1 });\n return [startDate, endDate];\n }\n\n if (selectedDate && dateAdapter.isValid(selectedDate?.startDate)) {\n const { startDate, endDate } = selectedDate;\n if (dateAdapter.isValid(endDate)) {\n return dateAdapter.isSame(startDate, endDate, \"month\")\n ? createConsecutiveRange(startDate)\n : [\n dateAdapter.startOf(startDate, \"month\"),\n dateAdapter.startOf(endDate, \"month\"),\n ];\n }\n return createConsecutiveRange(startDate);\n }\n\n const currentMonth = dateAdapter.startOf(\n dateAdapter.today(timezone),\n \"month\",\n );\n return [currentMonth, dateAdapter.add(currentMonth, { months: 1 })];\n}\n\nconst withBaseName = makePrefixer(\"saltDatePickerPanel\");\n\nexport const DatePickerRangePanel = forwardRef(function DatePickerRangePanel<\n TDate extends DateFrameworkType,\n>(props: DatePickerRangePanelProps<TDate>, ref: React.Ref<HTMLDivElement>) {\n const { dateAdapter } = useLocalization<TDate>();\n\n const {\n className,\n defaultStartVisibleMonth: defaultStartVisibleMonthProp,\n startVisibleMonth: startVisibleMonthProp,\n onStartVisibleMonthChange,\n defaultEndVisibleMonth: defaultEndVisibleMonthProp,\n endVisibleMonth: endVisibleMonthProp,\n onEndVisibleMonthChange,\n helperText,\n onFocusedDateChange,\n onHoveredDateChange,\n onSelectionChange,\n StartCalendarProps: StartCalendarPropsProp,\n StartCalendarNavigationProps,\n StartCalendarGridProps,\n EndCalendarProps: EndCalendarPropsProp,\n EndCalendarNavigationProps,\n EndCalendarGridProps,\n ...rest\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-range-panel\",\n css: datePickerPanelCss,\n window: targetWindow,\n });\n\n const calendarsRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, calendarsRef);\n\n const {\n state: {\n timezone,\n selectedDate,\n minDate = dateAdapter.startOf(dateAdapter.today(timezone), \"month\"),\n maxDate = dateAdapter.add(minDate, { months: 1 }),\n },\n helpers: { select, isDayHighlighted, isDayUnselectable },\n } = useDatePickerContext<TDate>({ selectionVariant: \"range\" });\n\n const {\n state: { initialFocusRef, focused },\n } = useDatePickerOverlay();\n\n const [hoveredDate, setHoveredDate] = useState<TDate | null>(null);\n\n const [[fallbackStartVisibleMonth, fallbackEndVisibleMonth]] = useState(() =>\n getFallbackVisibleMonths<TDate>(dateAdapter, selectedDate, timezone),\n );\n\n const [startVisibleMonth, setStartVisibleMonth] = useControlled({\n controlled: startVisibleMonthProp,\n default: defaultStartVisibleMonthProp || fallbackStartVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"startVisibleMonth\",\n });\n\n const [endVisibleMonth, setEndVisibleMonth] = useControlled({\n controlled: endVisibleMonthProp,\n default: defaultEndVisibleMonthProp || fallbackEndVisibleMonth,\n name: \"DatePickerRangePanel\",\n state: \"endVisibleMonth\",\n });\n\n const handleSelectionChange = useCallback(\n (event: SyntheticEvent, newDate: DateRangeSelection<TDate> | null) => {\n select(event, newDate);\n onSelectionChange?.(event, newDate);\n },\n [select, onSelectionChange],\n );\n\n const handleHoveredStartDateChange: CalendarProps<TDate>[\"onHoveredDateChange\"] =\n useCallback(\n (event: SyntheticEvent, newHoveredDate: TDate | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleHoveredEndDateChange = useCallback(\n (event: SyntheticEvent, newHoveredDate: TDate | null) => {\n setHoveredDate(newHoveredDate);\n onHoveredDateChange?.(event, newHoveredDate);\n },\n [onHoveredDateChange],\n );\n\n const handleStartVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setStartVisibleMonth(newVisibleMonth);\n if (dateAdapter.compare(newVisibleMonth, endVisibleMonth) >= 0) {\n setEndVisibleMonth(dateAdapter.add(newVisibleMonth, { months: 1 }));\n }\n onStartVisibleMonthChange?.(event, newVisibleMonth);\n },\n [dateAdapter, endVisibleMonth, onStartVisibleMonthChange],\n );\n\n const handleEndVisibleMonthChange = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setEndVisibleMonth(newVisibleMonth);\n if (dateAdapter.compare(newVisibleMonth, startVisibleMonth) <= 0) {\n setStartVisibleMonth(\n dateAdapter.startOf(\n dateAdapter.subtract(newVisibleMonth, { months: 1 }),\n \"month\",\n ),\n );\n }\n onEndVisibleMonthChange?.(event, newVisibleMonth);\n },\n [dateAdapter, startVisibleMonth, onEndVisibleMonthChange],\n );\n\n const calendarSelectedDate = {\n startDate:\n selectedDate && dateAdapter.isValid(selectedDate.startDate)\n ? selectedDate.startDate\n : null,\n endDate:\n selectedDate && dateAdapter.isValid(selectedDate.endDate)\n ? selectedDate.endDate\n : null,\n };\n\n const [focusedDate, setFocusedDate] = useState<TDate | null>(null);\n\n const handleStartCalendarFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: TDate) => {\n setFocusedDate(newFocusedDate);\n if (\n newFocusedDate &&\n !dateAdapter.isSame(startVisibleMonth, newFocusedDate, \"month\")\n ) {\n handleStartVisibleMonthChange(\n event,\n dateAdapter.startOf(newFocusedDate, \"month\"),\n );\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n startVisibleMonth,\n handleStartVisibleMonthChange,\n onFocusedDateChange,\n ],\n );\n\n const handleEndCalendarFocusedDateChange = useCallback(\n (event: SyntheticEvent | null, newFocusedDate: TDate) => {\n setFocusedDate(newFocusedDate);\n if (\n newFocusedDate &&\n !dateAdapter.isSame(endVisibleMonth, newFocusedDate, \"month\")\n ) {\n handleEndVisibleMonthChange(\n event,\n dateAdapter.startOf(newFocusedDate, \"month\"),\n );\n }\n onFocusedDateChange?.(event, newFocusedDate);\n },\n [\n dateAdapter,\n endVisibleMonth,\n handleEndVisibleMonthChange,\n onFocusedDateChange,\n ],\n );\n\n const getNextFocusedDate = (\n nextStartVisibleMonth: TDate,\n nextEndVisibleMonth: TDate,\n ) => {\n const isOutsideAllowedDates = (date: TDate) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n };\n const isDaySelectable = (date: TDate) =>\n !(date && (isDayUnselectable?.(date) || isOutsideAllowedDates(date)));\n\n const getVisibleSelectedDate = (visibleMonth: TDate) => {\n if (\n selectedDate?.startDate &&\n dateAdapter.isSame(visibleMonth, selectedDate.startDate, \"month\") &&\n isDaySelectable(selectedDate.startDate)\n ) {\n return selectedDate.startDate;\n }\n if (\n selectedDate?.endDate &&\n dateAdapter.isSame(visibleMonth, selectedDate.endDate, \"month\") &&\n isDaySelectable(selectedDate.endDate)\n ) {\n return selectedDate.endDate;\n }\n return null;\n };\n let focusSelectedDate = getVisibleSelectedDate(nextStartVisibleMonth);\n focusSelectedDate =\n focusSelectedDate ?? getVisibleSelectedDate(nextEndVisibleMonth);\n if (focusSelectedDate && isDaySelectable(focusSelectedDate)) {\n return focusSelectedDate;\n }\n // Today\n const today = dateAdapter.today(timezone);\n if (\n (dateAdapter.isSame(nextStartVisibleMonth, today, \"month\") ||\n dateAdapter.isSame(nextEndVisibleMonth, today, \"month\")) &&\n isDaySelectable(today)\n ) {\n return today;\n }\n // First selectable date in either calendar\n const getFirstSelectableDate = (visibleMonth: TDate) => {\n const firstSelectableDate = generateDatesForMonth(\n dateAdapter,\n visibleMonth,\n ).find((visibleDay) => isDaySelectable(visibleDay));\n return firstSelectableDate ?? null;\n };\n\n return (\n getFirstSelectableDate(nextStartVisibleMonth) ??\n getFirstSelectableDate(nextEndVisibleMonth)\n );\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: only run when focus/min/max date changes\n useIsomorphicLayoutEffect(() => {\n if (!focused) {\n setFocusedDate(null);\n return;\n }\n\n const isStartDateValid =\n selectedDate?.startDate &&\n dateAdapter.isValid(selectedDate.startDate) &&\n dateAdapter.compare(selectedDate.startDate, minDate) >= 0 &&\n dateAdapter.compare(selectedDate.startDate, maxDate) <= 0;\n\n const isEndDateValid =\n selectedDate?.endDate &&\n dateAdapter.isValid(selectedDate.endDate) &&\n dateAdapter.compare(selectedDate.endDate, minDate) >= 0 &&\n dateAdapter.compare(selectedDate.endDate, maxDate) <= 0;\n\n let nextStartVisibleMonth = startVisibleMonth;\n let nextEndVisibleMonth = endVisibleMonth;\n\n const setVisibleMonths = (\n start: typeof nextStartVisibleMonth,\n end: typeof nextEndVisibleMonth,\n ) => {\n nextStartVisibleMonth = dateAdapter.startOf(start, \"month\");\n nextEndVisibleMonth = dateAdapter.startOf(end, \"month\");\n };\n\n if (\n selectedDate?.startDate &&\n selectedDate?.endDate &&\n isStartDateValid &&\n isEndDateValid\n ) {\n if (\n dateAdapter.isSame(\n selectedDate.startDate,\n startVisibleMonth,\n \"month\",\n ) &&\n dateAdapter.isSame(selectedDate.endDate, startVisibleMonth, \"month\")\n ) {\n setVisibleMonths(\n selectedDate.startDate,\n dateAdapter.add(selectedDate.startDate, { months: 1 }),\n );\n } else {\n setVisibleMonths(selectedDate.startDate, selectedDate.endDate);\n }\n } else if (selectedDate?.startDate && isStartDateValid) {\n setVisibleMonths(\n selectedDate.startDate,\n dateAdapter.add(selectedDate.startDate, { months: 1 }),\n );\n } else if (selectedDate?.endDate && isEndDateValid) {\n setVisibleMonths(\n dateAdapter.subtract(selectedDate.endDate, { months: 1 }),\n selectedDate.endDate,\n );\n }\n\n if (!focusedDate) {\n setFocusedDate((prevFocusedDate) => {\n if (!prevFocusedDate) {\n return getNextFocusedDate(nextStartVisibleMonth, nextEndVisibleMonth);\n }\n return prevFocusedDate;\n });\n }\n }, [dateAdapter, minDate, maxDate, focused]);\n\n const StartCalendarProps = {\n visibleMonth: startVisibleMonth,\n hoveredDate,\n selectedDate: calendarSelectedDate,\n isDayHighlighted,\n isDayUnselectable,\n focusedDateRef: initialFocusRef,\n focusedDate:\n focusedDate &&\n dateAdapter.compare(\n focusedDate,\n dateAdapter.startOf(endVisibleMonth, \"month\"),\n ) < 0\n ? focusedDate\n : null,\n onHoveredDateChange: handleHoveredStartDateChange,\n onFocusedDateChange: handleStartCalendarFocusedDateChange,\n onVisibleMonthChange: handleStartVisibleMonthChange,\n onSelectionChange: handleSelectionChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n timezone,\n ...StartCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps<TDate>>;\n const EndCalendarProps = {\n visibleMonth: endVisibleMonth,\n hoveredDate,\n isDayHighlighted,\n isDayUnselectable,\n focusedDateRef: initialFocusRef,\n focusedDate:\n focusedDate &&\n dateAdapter.compare(\n focusedDate,\n dateAdapter.startOf(endVisibleMonth, \"month\"),\n ) >= 0\n ? focusedDate\n : null,\n selectedDate: calendarSelectedDate,\n onFocusedDateChange: handleEndCalendarFocusedDateChange,\n onHoveredDateChange: handleHoveredEndDateChange,\n onVisibleMonthChange: handleEndVisibleMonthChange,\n onSelectionChange: handleSelectionChange,\n hideOutOfRangeDates: true,\n minDate,\n maxDate,\n timezone,\n ...EndCalendarPropsProp,\n } as Partial<UseCalendarSelectionRangeProps<TDate>>;\n\n return (\n <StackLayout\n separators\n gap={0}\n className={clsx(className, withBaseName(\"container\"))}\n ref={containerRef}\n {...rest}\n >\n {helperText && (\n <FlexItem className={withBaseName(\"header\")}>\n <FormFieldHelperText>{helperText}</FormFieldHelperText>\n </FlexItem>\n )}\n <FlexLayout gap={0}>\n {/* Avoid Dropdowns in Calendar inheriting the FormField's state */}\n <FormFieldContext.Provider value={{} as FormFieldContextValue}>\n <Calendar selectionVariant={\"range\"} {...StartCalendarProps}>\n <CalendarNavigation\n disableNavigateNext={dateAdapter.isSame(\n startVisibleMonth,\n dateAdapter.subtract(maxDate, { months: 1 }),\n \"month\",\n )}\n {...StartCalendarNavigationProps}\n />\n <CalendarGrid {...StartCalendarGridProps} />\n </Calendar>\n <Calendar selectionVariant={\"range\"} {...EndCalendarProps}>\n <CalendarNavigation\n disableNavigatePrevious={dateAdapter.isSame(\n endVisibleMonth,\n dateAdapter.add(minDate, { months: 1 }),\n \"month\",\n )}\n {...EndCalendarNavigationProps}\n />\n <CalendarGrid {...EndCalendarGridProps} />\n </Calendar>\n </FormFieldContext.Provider>\n </FlexLayout>\n </StackLayout>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerRangePanel","useLocalization","useWindow","useComponentCssInjection","datePickerPanelCss","useRef","useForkRef","useDatePickerContext","useDatePickerOverlay","useState","useControlled","useCallback","generateDatesForMonth","useIsomorphicLayoutEffect","jsxs","StackLayout","clsx","jsx","FlexItem","FormFieldHelperText","FlexLayout","FormFieldContext","Calendar","CalendarNavigation","CalendarGrid"],"mappings":"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"}