@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,83 +0,0 @@
1
- import { useLocalization } from '../localization-provider/LocalizationProvider.js';
2
- import { useCalendarContext } from './internal/CalendarContext.js';
3
- import { useFocusManagement } from './internal/useFocusManagement.js';
4
- import { useCalendarSelectionDay } from './useCalendarSelection.js';
5
-
6
- function useCalendarDay(props) {
7
- const { date, month } = props;
8
- const { dateAdapter } = useLocalization();
9
- const {
10
- state: {
11
- focusedDate,
12
- focusedDateRef,
13
- hideOutOfRangeDates,
14
- timezone,
15
- focusableDates
16
- },
17
- helpers: {
18
- setHoveredDate,
19
- isDayUnselectable,
20
- isDayHighlighted,
21
- isOutsideAllowedMonths,
22
- isOutsideAllowedDates
23
- }
24
- } = useCalendarContext();
25
- const selectionManager = useCalendarSelectionDay({ date });
26
- const focusManager = useFocusManagement({ date });
27
- const handleClick = (event) => {
28
- selectionManager.handleClick(event);
29
- focusManager.handleClick(event);
30
- };
31
- const handleKeyDown = (event) => {
32
- focusManager.handleKeyDown(event);
33
- selectionManager.handleKeyDown(event);
34
- };
35
- const handleFocus = (event) => {
36
- focusManager.handleFocus(event);
37
- setHoveredDate(event, date);
38
- };
39
- const handleMouseMove = (event) => {
40
- setHoveredDate(event, date);
41
- };
42
- const eventHandlers = {
43
- onClick: handleClick,
44
- onKeyDown: handleKeyDown,
45
- onFocus: handleFocus,
46
- onMouseMove: handleMouseMove
47
- };
48
- const focused = focusedDate && dateAdapter.isSame(date, focusedDate, "day");
49
- const tabIndex = focusableDates.find(
50
- (tabbableDate) => dateAdapter.isSame(date, tabbableDate, "day")
51
- ) ? 0 : -1;
52
- const today = dateAdapter.isSame(dateAdapter.today(timezone), date, "day");
53
- const unselectableReason = isDayUnselectable(date);
54
- const highlightedReason = isDayHighlighted(date);
55
- const outOfRange = !dateAdapter.isSame(date, month, "month");
56
- const unselectable = Boolean(unselectableReason) || isOutsideAllowedMonths(date) || isOutsideAllowedDates(date);
57
- const highlighted = Boolean(highlightedReason);
58
- const hidden = hideOutOfRangeDates ? outOfRange : false;
59
- return {
60
- status: {
61
- outOfRange,
62
- today,
63
- unselectable,
64
- focused,
65
- hidden,
66
- highlighted,
67
- ...selectionManager.status
68
- },
69
- dayProps: {
70
- tabIndex,
71
- "aria-current": today ? "date" : void 0,
72
- "aria-hidden": hidden ? "true" : void 0,
73
- ...eventHandlers,
74
- ...selectionManager.dayProps
75
- },
76
- focusedDateRef: focused ? focusedDateRef : null,
77
- unselectableReason,
78
- highlightedReason
79
- };
80
- }
81
-
82
- export { useCalendarDay };
83
- //# sourceMappingURL=useCalendarDay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCalendarDay.js","sources":["../src/calendar/useCalendarDay.ts"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport type {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { useFocusManagement } from \"./internal/useFocusManagement\";\nimport { useCalendarSelectionDay } from \"./useCalendarSelection\";\n\n/**\n * Interface representing the status of a day in the Calendar.\n */\nexport interface DayStatus {\n /**\n * If `true`, the day is selectable but outside of current month.\n */\n outOfRange?: boolean;\n /**\n * If `true`, the day is selected.\n */\n selected?: boolean;\n /**\n * If `true`, the day is today.\n */\n today?: boolean;\n /**\n * If set, the day is unselectable with a reason.\n */\n unselectable?: string | false;\n /**\n * If set, the day is highlighted with a reason.\n */\n highlighted?: string | false;\n /**\n * If `true`, the day is focused.\n */\n focused?: boolean;\n /**\n * If `true`, the day is hidden.\n */\n hidden?: boolean;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n * @template TDate - The type of the date object.\n */\nexport interface useCalendarDayProps<TDate> {\n /**\n * The date of the calendar day.\n */\n date: TDate;\n /**\n * The month of the calendar day.\n */\n month: TDate;\n}\n\nexport function useCalendarDay<TDate extends DateFrameworkType>(\n props: useCalendarDayProps<TDate>,\n) {\n const { date, month } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const {\n state: {\n focusedDate,\n focusedDateRef,\n hideOutOfRangeDates,\n timezone,\n focusableDates,\n },\n helpers: {\n setHoveredDate,\n isDayUnselectable,\n isDayHighlighted,\n isOutsideAllowedMonths,\n isOutsideAllowedDates,\n },\n } = useCalendarContext<TDate>();\n const selectionManager = useCalendarSelectionDay<TDate>({ date });\n const focusManager = useFocusManagement<TDate>({ date });\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager.handleClick(event);\n focusManager.handleClick(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleKeyDown(event);\n selectionManager.handleKeyDown(event);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleFocus(event);\n setHoveredDate(event, date);\n };\n\n const handleMouseMove: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onFocus: handleFocus,\n onMouseMove: handleMouseMove,\n };\n\n const focused = focusedDate && dateAdapter.isSame(date, focusedDate, \"day\");\n const tabIndex = focusableDates.find((tabbableDate) =>\n dateAdapter.isSame(date, tabbableDate, \"day\"),\n )\n ? 0\n : -1;\n const today = dateAdapter.isSame(dateAdapter.today(timezone), date, \"day\");\n\n const unselectableReason = isDayUnselectable(date);\n const highlightedReason = isDayHighlighted(date);\n\n const outOfRange = !dateAdapter.isSame(date, month, \"month\");\n const unselectable =\n Boolean(unselectableReason) ||\n isOutsideAllowedMonths(date) ||\n isOutsideAllowedDates(date);\n const highlighted = Boolean(highlightedReason);\n const hidden = hideOutOfRangeDates ? outOfRange : false;\n\n return {\n status: {\n outOfRange,\n today,\n unselectable,\n focused,\n hidden,\n highlighted,\n ...selectionManager.status,\n } as DayStatus,\n dayProps: {\n tabIndex,\n \"aria-current\": today ? \"date\" : undefined,\n \"aria-hidden\": hidden ? \"true\" : undefined,\n ...eventHandlers,\n ...selectionManager.dayProps,\n } as ComponentPropsWithoutRef<\"button\">,\n focusedDateRef: focused ? focusedDateRef : null,\n unselectableReason,\n highlightedReason,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,600 +0,0 @@
1
- import { makePrefixer, useControlled } from '@salt-ds/core';
2
- import { clsx } from 'clsx';
3
- import { useCallback, useMemo } from 'react';
4
- import { useLocalization } from '../localization-provider/LocalizationProvider.js';
5
- import { useCalendarContext } from './internal/CalendarContext.js';
6
- import { generateDatesForMonth } from './internal/utils.js';
7
-
8
- function isDateRangeSelection(value) {
9
- return value && !Array.isArray(value) && typeof value === "object" && ("startDate" in value || "endDate" in value);
10
- }
11
- function isMultiselect(props) {
12
- return props.multiselect === true;
13
- }
14
- const withBaseName = makePrefixer("saltCalendarDay");
15
- function selectDateRange(dateAdapter, previousSelectedDate, newDate) {
16
- if ((previousSelectedDate == null ? void 0 : previousSelectedDate.startDate) && (previousSelectedDate == null ? void 0 : previousSelectedDate.endDate)) {
17
- return {
18
- startDate: newDate
19
- };
20
- }
21
- if ((previousSelectedDate == null ? void 0 : previousSelectedDate.startDate) && dateAdapter.compare(newDate, previousSelectedDate == null ? void 0 : previousSelectedDate.startDate) >= 0) {
22
- return {
23
- ...previousSelectedDate,
24
- endDate: newDate
25
- };
26
- }
27
- return {
28
- startDate: newDate
29
- };
30
- }
31
- function selectMultiselectDateRange(dateAdapter, previousSelectedDate, newDate) {
32
- const lastRange = previousSelectedDate.length ? previousSelectedDate[previousSelectedDate.length - 1] : void 0;
33
- const isIncompleteRange = !(lastRange == null ? void 0 : lastRange.endDate);
34
- if (isIncompleteRange) {
35
- const isNewSelection = previousSelectedDate.length === 0;
36
- if (isNewSelection) {
37
- return [{ startDate: newDate }];
38
- }
39
- const completeDateRange = selectDateRange(
40
- dateAdapter,
41
- previousSelectedDate[previousSelectedDate.length - 1],
42
- newDate
43
- );
44
- return [...previousSelectedDate.slice(0, -1), completeDateRange];
45
- }
46
- return [...previousSelectedDate, { startDate: newDate }];
47
- }
48
- function useCalendarSelection(props) {
49
- const {
50
- multiselect,
51
- focusedDate: focusedDateProp,
52
- hoveredDate: hoveredDateProp,
53
- selectedDate: selectedDateProp,
54
- defaultSelectedDate,
55
- onSelectionChange,
56
- onHoveredDateChange,
57
- isDaySelectable = () => true,
58
- isDayVisible = () => true,
59
- isOutsideAllowedDates = () => true,
60
- focusedDateRef,
61
- onFocusedDateChange,
62
- select: selectProp,
63
- selectionVariant,
64
- timezone,
65
- visibleMonth
66
- // startDateOffset,
67
- // endDateOffset,
68
- } = props;
69
- const { dateAdapter } = useLocalization();
70
- const [selectedDate, setSelectedDateState] = useControlled({
71
- controlled: selectedDateProp,
72
- default: defaultSelectedDate,
73
- name: "Calendar",
74
- state: "selectedDate"
75
- });
76
- const startDateOffset = selectionVariant === "offset" ? props.startDateOffset : void 0;
77
- const endDateOffset = selectionVariant === "offset" ? props.endDateOffset : void 0;
78
- const getStartDateOffset = useCallback(
79
- (date) => {
80
- if (selectionVariant === "offset" && startDateOffset) {
81
- return startDateOffset(date);
82
- }
83
- return date;
84
- },
85
- [selectionVariant, startDateOffset]
86
- );
87
- const getEndDateOffset = useCallback(
88
- (date) => {
89
- if (selectionVariant === "offset" && endDateOffset) {
90
- return endDateOffset(date);
91
- }
92
- return date;
93
- },
94
- [selectionVariant, endDateOffset]
95
- );
96
- const setSelectedDate = useCallback(
97
- (event, newSelectedDate) => {
98
- if (!isDaySelectable || isDaySelectable(newSelectedDate)) {
99
- const handleSelectionChange = (updatedSelection, changeHandler) => {
100
- changeHandler == null ? void 0 : changeHandler(event, updatedSelection);
101
- setSelectedDateState(updatedSelection);
102
- };
103
- switch (selectionVariant) {
104
- case "single": {
105
- if (isMultiselect(props)) {
106
- const multipleSingleSelectedDate = selectedDate;
107
- const select = selectProp;
108
- const updatedSelection = select ? select(multipleSingleSelectedDate ?? [], newSelectedDate) : [...multipleSingleSelectedDate ?? [], newSelectedDate];
109
- const changeHandler = onSelectionChange;
110
- handleSelectionChange(updatedSelection, changeHandler);
111
- } else {
112
- const singleSelectedDate = selectedDate;
113
- const select = selectProp;
114
- const updatedSelection = select ? select(singleSelectedDate, newSelectedDate) : newSelectedDate;
115
- const changeHandler = onSelectionChange;
116
- handleSelectionChange(updatedSelection, changeHandler);
117
- }
118
- break;
119
- }
120
- case "range": {
121
- if (isMultiselect(props)) {
122
- const multipleRangeSelectedDate = selectedDate;
123
- const select = selectProp;
124
- const updatedSelection = select ? select(multipleRangeSelectedDate ?? [], newSelectedDate) : selectMultiselectDateRange(
125
- dateAdapter,
126
- multipleRangeSelectedDate ?? [],
127
- newSelectedDate
128
- );
129
- const changeHandler = onSelectionChange;
130
- handleSelectionChange(updatedSelection, changeHandler);
131
- } else {
132
- const rangeSelectedDate = selectedDate;
133
- const select = selectProp;
134
- const updatedSelection = select ? select(rangeSelectedDate, newSelectedDate) : selectDateRange(
135
- dateAdapter,
136
- rangeSelectedDate,
137
- newSelectedDate
138
- );
139
- const changeHandler = onSelectionChange;
140
- handleSelectionChange(updatedSelection, changeHandler);
141
- }
142
- break;
143
- }
144
- case "offset": {
145
- if (isMultiselect(props)) {
146
- const multipleOffsetSelectedDate = selectedDate;
147
- const select = selectProp;
148
- const updatedSelection = select ? select(multipleOffsetSelectedDate ?? [], newSelectedDate) : [
149
- ...multipleOffsetSelectedDate ?? [],
150
- {
151
- startDate: getStartDateOffset(newSelectedDate),
152
- endDate: getEndDateOffset(newSelectedDate)
153
- }
154
- ];
155
- const changeHandler = onSelectionChange;
156
- handleSelectionChange(updatedSelection, changeHandler);
157
- } else {
158
- const offsetSelectedDate = selectedDate;
159
- const select = selectProp;
160
- const updatedSelection = select ? select(offsetSelectedDate, newSelectedDate) : {
161
- startDate: getStartDateOffset(newSelectedDate),
162
- endDate: getEndDateOffset(newSelectedDate)
163
- };
164
- const changeHandler = onSelectionChange;
165
- handleSelectionChange(updatedSelection, changeHandler);
166
- }
167
- break;
168
- }
169
- }
170
- }
171
- },
172
- [
173
- dateAdapter,
174
- getEndDateOffset,
175
- getStartDateOffset,
176
- isDaySelectable,
177
- selectProp,
178
- selectedDate,
179
- selectionVariant,
180
- onSelectionChange,
181
- props
182
- // Ensure props is included in the dependency array
183
- ]
184
- );
185
- const isSelected = useCallback(
186
- (date) => {
187
- if (!selectedDate) {
188
- return false;
189
- }
190
- if (selectionVariant === "single") {
191
- const singleDates = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
192
- return singleDates.some(
193
- (singleDate) => dateAdapter.isSame(singleDate, date, "day")
194
- );
195
- }
196
- return false;
197
- },
198
- [dateAdapter, selectedDate, selectionVariant]
199
- );
200
- const getDefaultFocusedDate = () => {
201
- if (selectedDate && (selectionVariant === "range" || selectionVariant === "offset")) {
202
- const getFocusableDate = (result, selection) => {
203
- if ((selection == null ? void 0 : selection.startDate) && isDayVisible(selection.startDate)) {
204
- return [...result, selection.startDate];
205
- }
206
- if ((selection == null ? void 0 : selection.endDate) && isDayVisible(selection.endDate)) {
207
- return [...result, selection.endDate];
208
- }
209
- return result;
210
- };
211
- let focusableSelectedDates;
212
- if (!multiselect) {
213
- focusableSelectedDates = [selectedDate];
214
- } else {
215
- focusableSelectedDates = selectedDate;
216
- }
217
- const selectionInMonth = focusableSelectedDates.reduce(getFocusableDate, []).sort((a, b) => dateAdapter.compare(a, b));
218
- if (selectionInMonth.length > 0) {
219
- return selectionInMonth[0];
220
- }
221
- } else if (selectedDate && selectionVariant === "single") {
222
- const focusableSelectedDate = multiselect ? selectedDate == null ? void 0 : selectedDate[0] : selectedDate;
223
- if (focusableSelectedDate && isDayVisible(focusableSelectedDate)) {
224
- return focusableSelectedDate;
225
- }
226
- }
227
- if ((isDaySelectable == null ? void 0 : isDaySelectable(dateAdapter.today(timezone))) && isDayVisible(dateAdapter.today(timezone))) {
228
- return dateAdapter.today(timezone);
229
- }
230
- const firstSelectableDate = generateDatesForMonth(
231
- dateAdapter,
232
- visibleMonth
233
- ).find((visibleDay) => visibleDay && (isDaySelectable == null ? void 0 : isDaySelectable(visibleDay)));
234
- if (firstSelectableDate) {
235
- return firstSelectableDate;
236
- }
237
- return null;
238
- };
239
- const [focusedDate, setFocusedDateState] = useControlled({
240
- controlled: focusedDateProp,
241
- default: useMemo(getDefaultFocusedDate, []),
242
- name: "Calendar",
243
- state: "focusedDate"
244
- });
245
- const setFocusedDate = useCallback(
246
- (event, date) => {
247
- if (focusedDateRef && (event == null ? void 0 : event.target) instanceof HTMLElement) {
248
- focusedDateRef.current = event.target;
249
- }
250
- if (date && (focusedDate && dateAdapter.isSame(date, focusedDate, "day") || isOutsideAllowedDates(date))) {
251
- return;
252
- }
253
- setFocusedDateState(date);
254
- onFocusedDateChange == null ? void 0 : onFocusedDateChange(event, date);
255
- },
256
- [
257
- dateAdapter,
258
- focusedDate,
259
- focusedDateRef,
260
- isOutsideAllowedDates,
261
- onFocusedDateChange
262
- ]
263
- );
264
- const [hoveredDate, setHoveredDateState] = useControlled({
265
- controlled: hoveredDateProp,
266
- default: void 0,
267
- name: "Calendar",
268
- state: "hoveredDate"
269
- });
270
- const setHoveredDate = useCallback(
271
- (event, date) => {
272
- setHoveredDateState(date);
273
- onHoveredDateChange == null ? void 0 : onHoveredDateChange(event, date);
274
- },
275
- [onHoveredDateChange]
276
- );
277
- const isHovered = useCallback(
278
- (date) => {
279
- return !!hoveredDate && dateAdapter.isSame(date, hoveredDate, "day");
280
- },
281
- [dateAdapter, hoveredDate]
282
- );
283
- const getFocusableDates = useCallback(() => {
284
- const focusableDates = [];
285
- if (Array.isArray(selectedDate)) {
286
- for (const selection of selectedDate) {
287
- if (isDateRangeSelection(selection)) {
288
- if (selection.startDate && isDayVisible(selection.startDate)) {
289
- focusableDates.push(selection.startDate);
290
- } else if (selection.endDate && isDayVisible(selection.endDate)) {
291
- focusableDates.push(selection.endDate);
292
- }
293
- } else if (isDayVisible(selection)) {
294
- focusableDates.push(selection);
295
- }
296
- }
297
- } else if (selectedDate) {
298
- if (isDateRangeSelection(selectedDate)) {
299
- if (selectedDate.startDate && isDayVisible(selectedDate.startDate)) {
300
- focusableDates.push(selectedDate.startDate);
301
- } else if (selectedDate.endDate && isDayVisible(selectedDate.endDate)) {
302
- focusableDates.push(selectedDate.endDate);
303
- }
304
- } else if (isDayVisible(selectedDate)) {
305
- focusableDates.push(selectedDate);
306
- }
307
- }
308
- if (focusedDate && visibleMonth && dateAdapter.isSame(focusedDate, visibleMonth, "month")) {
309
- focusableDates.push(focusedDate);
310
- return focusableDates;
311
- }
312
- if (focusableDates.length === 0 && isDaySelectable(dateAdapter.today(timezone)) && isDayVisible(dateAdapter.today(timezone))) {
313
- focusableDates.push(dateAdapter.today(timezone));
314
- }
315
- if (focusableDates.length === 0 || !focusableDates.some(isDayVisible)) {
316
- const firstSelectableDate = generateDatesForMonth(
317
- dateAdapter,
318
- visibleMonth
319
- ).find((visibleDay) => visibleDay && isDaySelectable(visibleDay));
320
- if (firstSelectableDate) {
321
- focusableDates.push(firstSelectableDate);
322
- }
323
- }
324
- return focusableDates;
325
- }, [
326
- dateAdapter,
327
- focusedDate,
328
- isDaySelectable,
329
- isDayVisible,
330
- selectedDate,
331
- timezone,
332
- visibleMonth
333
- ]);
334
- const isHoveredStart = useCallback(
335
- (date) => {
336
- if (selectionVariant === "range" && hoveredDate && dateAdapter.isSame(date, hoveredDate, "day")) {
337
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
338
- const allDatesPopulated = dateRanges.every(
339
- (range) => (range == null ? void 0 : range.startDate) && (range == null ? void 0 : range.endDate)
340
- );
341
- const startDateMatches = dateRanges.some(
342
- (range) => (range == null ? void 0 : range.startDate) && dateAdapter.isSame(date, range.startDate, "day")
343
- );
344
- const firstIncompleteRange = dateRanges.find(
345
- (range) => (range == null ? void 0 : range.startDate) && !(range == null ? void 0 : range.endDate)
346
- );
347
- const newDateRangeRequired = (firstIncompleteRange == null ? void 0 : firstIncompleteRange.startDate) && dateAdapter.compare(date, firstIncompleteRange.startDate) < 0;
348
- return allDatesPopulated || startDateMatches || newDateRangeRequired;
349
- }
350
- if (selectionVariant === "offset" && hoveredDate) {
351
- const startDate = getStartDateOffset(hoveredDate);
352
- return dateAdapter.isSame(date, startDate, "day") && (!isDaySelectable || isDaySelectable(date));
353
- }
354
- return false;
355
- },
356
- [
357
- dateAdapter,
358
- getStartDateOffset,
359
- selectionVariant,
360
- selectedDate,
361
- hoveredDate,
362
- isDaySelectable
363
- ]
364
- );
365
- const isHoveredSpan = useCallback(
366
- (date) => {
367
- if (selectionVariant === "range") {
368
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
369
- return dateRanges.some((range) => {
370
- if (isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && !dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && hoveredDate) {
371
- const isForwardRange = dateAdapter.compare(hoveredDate, range.startDate) > 0 && dateAdapter.compare(date, range.startDate) > 0 && dateAdapter.compare(date, hoveredDate) < 0;
372
- const isValidDayHovered = !isDaySelectable || isDaySelectable(hoveredDate);
373
- return isForwardRange && isValidDayHovered;
374
- }
375
- return false;
376
- });
377
- }
378
- if (selectionVariant === "offset" && hoveredDate) {
379
- const startDate = getStartDateOffset(hoveredDate);
380
- const endDate = getEndDateOffset(hoveredDate);
381
- return dateAdapter.compare(date, startDate) > 0 && dateAdapter.compare(date, endDate) < 0 && (!isDaySelectable || isDaySelectable(date));
382
- }
383
- return false;
384
- },
385
- [
386
- dateAdapter,
387
- isOutsideAllowedDates,
388
- selectionVariant,
389
- selectedDate,
390
- hoveredDate,
391
- isDaySelectable
392
- ]
393
- );
394
- const isHoveredEnd = useCallback(
395
- (date) => {
396
- if (selectionVariant === "range" && hoveredDate && dateAdapter.isSame(date, hoveredDate, "day")) {
397
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
398
- const isIncompleteRange = dateRanges.some(
399
- (range) => (range == null ? void 0 : range.startDate) && !(range == null ? void 0 : range.endDate) && hoveredDate && dateAdapter.compare(hoveredDate, range.startDate) >= 0
400
- );
401
- const endDateMatches = dateRanges.some(
402
- (range) => (range == null ? void 0 : range.endDate) && dateAdapter.isSame(range.endDate, date, "day")
403
- );
404
- return endDateMatches || isIncompleteRange;
405
- }
406
- if (selectionVariant === "offset" && hoveredDate) {
407
- const endDate = getEndDateOffset(hoveredDate);
408
- return dateAdapter.isSame(date, endDate, "day") && (!isDaySelectable || isDaySelectable(date));
409
- }
410
- return false;
411
- },
412
- [
413
- dateAdapter,
414
- getEndDateOffset,
415
- selectionVariant,
416
- selectedDate,
417
- hoveredDate,
418
- isDaySelectable
419
- ]
420
- );
421
- const isSameDay = useCallback(
422
- (date) => {
423
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
424
- return dateRanges.some((range) => {
425
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && (range == null ? void 0 : range.startDate) && (range == null ? void 0 : range.endDate) && dateAdapter.isSame(range == null ? void 0 : range.startDate, date, "day")) {
426
- return dateAdapter.isSame(range == null ? void 0 : range.startDate, range == null ? void 0 : range.endDate, "day");
427
- }
428
- return false;
429
- });
430
- },
431
- [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
432
- );
433
- const isSelectedStart = useCallback(
434
- (date) => {
435
- if (selectionVariant === "single") {
436
- return false;
437
- }
438
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
439
- return dateRanges.some((range) => {
440
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && !isOutsideAllowedDates(range.startDate)) {
441
- return dateAdapter.isSame(range.startDate, date, "day");
442
- }
443
- return false;
444
- });
445
- },
446
- [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
447
- );
448
- const isSelectedSpan = useCallback(
449
- (date) => {
450
- if (selectionVariant === "single") {
451
- return false;
452
- }
453
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
454
- return dateRanges.some((range) => {
455
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && !isOutsideAllowedDates(range.endDate)) {
456
- return dateAdapter.compare(date, range.startDate) > 0 && dateAdapter.compare(date, range.endDate) < 0;
457
- }
458
- return false;
459
- });
460
- },
461
- [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
462
- );
463
- const isSelectedEnd = useCallback(
464
- (date) => {
465
- if (selectionVariant === "single") {
466
- return false;
467
- }
468
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
469
- return dateRanges.some((range) => {
470
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.endDate)) {
471
- return dateAdapter.isSame(range.endDate, date, "day");
472
- }
473
- return false;
474
- });
475
- },
476
- [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
477
- );
478
- return useMemo(
479
- () => ({
480
- state: {
481
- focusedDate,
482
- focusedDateRef,
483
- hoveredDate,
484
- selectedDate,
485
- focusableDates: getFocusableDates()
486
- },
487
- helpers: {
488
- isHovered,
489
- isSelected,
490
- setHoveredDate,
491
- isSameDay,
492
- setSelectedDate,
493
- isSelectedStart,
494
- isSelectedSpan,
495
- isSelectedEnd,
496
- isHoveredStart,
497
- isHoveredSpan,
498
- isHoveredEnd,
499
- isDaySelectable,
500
- setFocusedDate
501
- }
502
- }),
503
- [
504
- selectedDate,
505
- focusedDate,
506
- focusedDateRef,
507
- getFocusableDates,
508
- hoveredDate,
509
- isSelected,
510
- isHoveredStart,
511
- isHoveredSpan,
512
- isHoveredEnd,
513
- isSameDay,
514
- isSelectedStart,
515
- isSelectedSpan,
516
- isSelectedEnd,
517
- isDaySelectable,
518
- setFocusedDate,
519
- setHoveredDate,
520
- setSelectedDate
521
- ]
522
- );
523
- }
524
- function useCalendarSelectionDay({
525
- date
526
- }) {
527
- const {
528
- state: { selectionVariant },
529
- helpers: {
530
- setSelectedDate,
531
- isSameDay,
532
- isSelected,
533
- isSelectedStart,
534
- isSelectedSpan,
535
- isSelectedEnd,
536
- isHovered,
537
- isHoveredStart,
538
- isHoveredSpan,
539
- isHoveredEnd,
540
- isDaySelectable
541
- }
542
- } = useCalendarContext();
543
- const handleClick = useCallback(
544
- (event) => {
545
- setSelectedDate(event, date);
546
- },
547
- [date, setSelectedDate]
548
- );
549
- const handleKeyDown = useCallback(
550
- (event) => {
551
- switch (event.key) {
552
- case "Space":
553
- case "Enter":
554
- setSelectedDate(event, date);
555
- event.preventDefault();
556
- }
557
- },
558
- [date, setSelectedDate]
559
- );
560
- const selected = isSelected(date);
561
- const selectedStart = isSelectedStart(date);
562
- const selectedSpan = isSelectedSpan(date);
563
- const selectedEnd = isSelectedEnd(date);
564
- const selectedOnSameDay = isSameDay(date);
565
- const hovered = isHovered(date);
566
- const hoveredStart = isHoveredStart(date);
567
- const hoveredSpan = isHoveredSpan(date);
568
- const hoveredEnd = isHoveredEnd(date);
569
- return {
570
- handleClick,
571
- handleKeyDown,
572
- status: {
573
- hovered,
574
- selected,
575
- selectedStart,
576
- selectedSpan,
577
- selectedEnd,
578
- hoveredStart,
579
- hoveredSpan,
580
- hoveredEnd
581
- },
582
- dayProps: {
583
- className: clsx({
584
- [withBaseName("selected")]: selectionVariant === "single" ? selected : void 0,
585
- [withBaseName("selectedStart")]: selectionVariant !== "single" ? selectedStart : void 0,
586
- [withBaseName("selectedSpan")]: selectionVariant !== "single" ? selectedSpan : void 0,
587
- [withBaseName("selectedEnd")]: selectionVariant !== "single" ? selectedEnd : void 0,
588
- [withBaseName("selectedSameDay")]: selectionVariant !== "single" && selectedOnSameDay,
589
- [withBaseName("hoveredStart")]: selectionVariant !== "single" && hoveredStart,
590
- [withBaseName("hoveredSpan")]: selectionVariant !== "single" && hoveredSpan,
591
- [withBaseName("hoveredEnd")]: selectionVariant !== "single" && hoveredEnd
592
- }),
593
- "aria-pressed": selected || selectedEnd || selectedStart || selectedSpan ? "true" : void 0,
594
- "aria-disabled": isDaySelectable && !isDaySelectable(date) ? "true" : void 0
595
- }
596
- };
597
- }
598
-
599
- export { isDateRangeSelection, useCalendarSelection, useCalendarSelectionDay };
600
- //# sourceMappingURL=useCalendarSelection.js.map