@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,201 +0,0 @@
1
- 'use strict';
2
-
3
- var core = require('@salt-ds/core');
4
- var react = require('react');
5
- var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
6
- var DatePickerOverlayProvider = require('./DatePickerOverlayProvider.js');
7
-
8
- function useDatePicker(props, ref) {
9
- const {
10
- dateAdapter,
11
- defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate }
12
- } = LocalizationProvider.useLocalization();
13
- const {
14
- readOnly = false,
15
- disabled,
16
- selectionVariant,
17
- defaultSelectedDate,
18
- isDayHighlighted,
19
- isDayUnselectable,
20
- selectedDate: selectedDateProp,
21
- onSelectionChange,
22
- onApply,
23
- minDate = defaultMinDate,
24
- maxDate = defaultMaxDate,
25
- onCancel,
26
- timezone
27
- } = props;
28
- const previousSelectedDate = react.useRef();
29
- const datePickerRef = react.useRef(null);
30
- const containerRef = core.useForkRef(ref, datePickerRef);
31
- const {
32
- state: { open },
33
- helpers: { setOpen, setOnDismiss }
34
- } = DatePickerOverlayProvider.useDatePickerOverlay();
35
- const [selectedDate, setSelectedDate] = core.useControlled({
36
- controlled: selectedDateProp,
37
- default: defaultSelectedDate,
38
- name: "DatePicker",
39
- state: "selectedDate"
40
- });
41
- const [enableApply, setEnableApply] = react.useState(false);
42
- const [cancelled, setCancelled] = react.useState(false);
43
- react.useEffect(() => {
44
- if (open) {
45
- previousSelectedDate.current = selectedDate;
46
- if (enableApply) {
47
- setOnDismiss(cancel);
48
- }
49
- setCancelled(false);
50
- }
51
- }, [enableApply, open, setOnDismiss, setCancelled]);
52
- react.useEffect(() => {
53
- if (cancelled) {
54
- setSelectedDate(previousSelectedDate == null ? void 0 : previousSelectedDate.current);
55
- }
56
- }, [cancelled, setSelectedDate]);
57
- const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } = core.useFormFieldProps();
58
- const isReadOnly = readOnly || formFieldReadOnly || false;
59
- const isDisabled = disabled || formFieldDisabled || false;
60
- const applySingle = react.useCallback(
61
- (event, date) => {
62
- setCancelled(false);
63
- setOpen(false, event.nativeEvent, "apply");
64
- if (selectionVariant === "single") {
65
- onApply == null ? void 0 : onApply(event, date);
66
- }
67
- },
68
- [selectionVariant, setOpen, onApply]
69
- );
70
- const checkAndAddError = react.useCallback(
71
- (date, checkFunction, errorType, details = {}) => {
72
- const errorMessage = date ? checkFunction == null ? void 0 : checkFunction(date) : false;
73
- if (errorMessage) {
74
- details.errors = details.errors ?? [];
75
- details.errors.push({
76
- type: errorType,
77
- message: errorMessage
78
- });
79
- }
80
- },
81
- []
82
- );
83
- const selectSingle = react.useCallback(
84
- (event, date, details) => {
85
- var _a;
86
- const canBeApplied = dateAdapter.isValid(date) && !((_a = details == null ? void 0 : details.errors) == null ? void 0 : _a.length);
87
- setSelectedDate(date);
88
- checkAndAddError(date, isDayUnselectable, "unselectable", details);
89
- if (selectionVariant === "single") {
90
- onSelectionChange == null ? void 0 : onSelectionChange(event, date, details);
91
- }
92
- if (!enableApply && canBeApplied) {
93
- applySingle(event, date);
94
- }
95
- },
96
- [
97
- checkAndAddError,
98
- dateAdapter,
99
- applySingle,
100
- isDayUnselectable,
101
- enableApply,
102
- onSelectionChange,
103
- selectionVariant
104
- ]
105
- );
106
- const applyRange = react.useCallback(
107
- (event, date) => {
108
- setCancelled(false);
109
- setOpen(false, event.nativeEvent, "apply");
110
- if (selectionVariant === "range") {
111
- onApply == null ? void 0 : onApply(event, date);
112
- }
113
- },
114
- [onApply, setOpen, selectionVariant]
115
- );
116
- const selectRange = react.useCallback(
117
- (event, date, details) => {
118
- var _a, _b, _c, _d;
119
- setSelectedDate(date);
120
- checkAndAddError(
121
- date == null ? void 0 : date.startDate,
122
- isDayUnselectable,
123
- "unselectable",
124
- details == null ? void 0 : details.startDate
125
- );
126
- checkAndAddError(
127
- date == null ? void 0 : date.endDate,
128
- isDayUnselectable,
129
- "unselectable",
130
- details == null ? void 0 : details.endDate
131
- );
132
- if (selectionVariant === "range") {
133
- onSelectionChange == null ? void 0 : onSelectionChange(event, date, details);
134
- }
135
- const isAValidRange = dateAdapter.isValid(date == null ? void 0 : date.startDate) && dateAdapter.isValid(date == null ? void 0 : date.endDate);
136
- const isValidSelection = !((_b = (_a = details == null ? void 0 : details.startDate) == null ? void 0 : _a.errors) == null ? void 0 : _b.length) && !((_d = (_c = details == null ? void 0 : details.endDate) == null ? void 0 : _c.errors) == null ? void 0 : _d.length);
137
- const canBeApplied = isAValidRange && isValidSelection;
138
- if (!enableApply && canBeApplied) {
139
- applyRange(event, date);
140
- }
141
- },
142
- [
143
- checkAndAddError,
144
- dateAdapter,
145
- applyRange,
146
- isDayUnselectable,
147
- enableApply,
148
- onSelectionChange,
149
- selectionVariant
150
- ]
151
- );
152
- const cancel = react.useCallback(
153
- (event) => {
154
- setCancelled(true);
155
- setOpen(false, event, "cancel");
156
- onCancel == null ? void 0 : onCancel();
157
- },
158
- [setOpen, onCancel]
159
- );
160
- const returnValue = {
161
- state: {
162
- selectionVariant,
163
- selectedDate,
164
- cancelled,
165
- enableApply,
166
- disabled: isDisabled,
167
- readOnly: isReadOnly,
168
- containerRef,
169
- minDate,
170
- maxDate,
171
- timezone
172
- },
173
- helpers: {
174
- cancel,
175
- isDayHighlighted,
176
- isDayUnselectable,
177
- setEnableApply
178
- }
179
- };
180
- if (props.selectionVariant === "range") {
181
- return {
182
- ...returnValue,
183
- helpers: {
184
- ...returnValue.helpers,
185
- apply: applyRange,
186
- select: selectRange
187
- }
188
- };
189
- }
190
- return {
191
- ...returnValue,
192
- helpers: {
193
- ...returnValue.helpers,
194
- apply: applySingle,
195
- select: selectSingle
196
- }
197
- };
198
- }
199
-
200
- exports.useDatePicker = useDatePicker;
201
- //# sourceMappingURL=useDatePicker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useDatePicker.js","sources":["../src/date-picker/useDatePicker.ts"],"sourcesContent":["import { useControlled, useForkRef, useFormFieldProps } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport {\n type SyntheticEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport type {\n DateInputRangeDetails,\n DateInputSingleDetails,\n} from \"../date-input\";\nimport { useLocalization } from \"../localization-provider\";\nimport type {\n RangeDatePickerState,\n SingleDatePickerState,\n} from \"./DatePickerContext\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\ninterface UseDatePickerBaseProps<TDate> {\n /** If `true`, the component is disabled. */\n disabled?: boolean;\n /**\n * Function to determine if a day is highlighted.\n * @param date - The date to check.\n * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.\n */\n isDayHighlighted?: (date: TDate) => string | false | undefined;\n /**\n * Function to determine if a day is unselectable.\n * @param date - The date to check.\n * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.\n */\n isDayUnselectable?: (date: TDate) => string | false | undefined;\n /** If `true`, the component is read-only. */\n readOnly?: boolean;\n /**\n * The minimum date for the range, default is 1900.\n */\n minDate?: TDate;\n /**\n * The maximum date for the range, default is 2100.\n */\n maxDate?: TDate;\n /**\n * Handler for when the date selection is cancelled.\n */\n onCancel?: () => void;\n /**\n * Timezone, if un-defined will take the timezone from passed date (or defaultSelectedDate/selectedDate)\n * Can also be set to \"default\" to use the default timezone of the date library\n * Can also be set to \"system\" to take the timezone of the local system.\n */\n timezone?: Timezone;\n}\n\n/**\n * Props for single date selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseDatePickerSingleProps<TDate extends DateFrameworkType>\n extends UseDatePickerBaseProps<TDate> {\n /**\n * Single date selection.\n */\n selectionVariant: \"single\";\n /**\n * The selected date. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: SingleDateSelection<TDate> | null;\n /**\n * The initial selected date, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: SingleDateSelection<TDate> | null;\n /**\n * Handler called when the selected date changes.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n * @param details - The selected date details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n details?: DateInputSingleDetails,\n ) => void;\n /**\n * Handler called when the selected date is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n */\n onApply?: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * Props for date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseDatePickerRangeProps<TDate extends DateFrameworkType>\n extends UseDatePickerBaseProps<TDate> {\n /**\n * Date range selection.\n */\n selectionVariant: \"range\";\n /**\n * The selected date range. The selected date will be controlled when this prop is provided.\n */\n selectedDate?: DateRangeSelection<TDate> | null;\n /**\n * The initial selected date range, when the selected date is uncontrolled.\n */\n defaultSelectedDate?: DateRangeSelection<TDate> | null;\n /**\n * Handler called when the selected date range changes.\n * @param event - The synthetic event.\n * @param date - The selected date range or null.\n * @param details - The selected date range details.\n */\n onSelectionChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details?: DateInputRangeDetails,\n ) => void;\n /**\n * Handler called when the selected date range is confirmed/applied.\n * @param event - The synthetic event.\n * @param date - The selected date range.\n */\n onApply?: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n ) => void;\n}\n\n/**\n * Props for the useDatePicker hook.\n * @template TDate - The type of the date object.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type UseDatePickerProps<\n TDate extends DateFrameworkType,\n SelectionVariant,\n> = SelectionVariant extends \"single\"\n ? UseDatePickerSingleProps<TDate>\n : SelectionVariant extends \"range\"\n ? UseDatePickerRangeProps<TDate>\n : never;\n\n/**\n * Custom hook for managing date picker state.\n * @template TDate - The type of the date object.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n * @param props - The props for the date picker.\n * @param ref - The ref for the date picker container.\n * @returns The date picker state and helpers.\n */\nexport function useDatePicker<\n TDate extends DateFrameworkType,\n SelectionVariant extends \"single\" | \"range\",\n>(\n props: UseDatePickerProps<TDate, SelectionVariant>,\n ref: React.ForwardedRef<HTMLDivElement>,\n): SingleDatePickerState<TDate> | RangeDatePickerState<TDate> {\n const {\n dateAdapter,\n defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate },\n } = useLocalization<TDate>();\n const {\n readOnly = false,\n disabled,\n selectionVariant,\n defaultSelectedDate,\n isDayHighlighted,\n isDayUnselectable,\n selectedDate: selectedDateProp,\n onSelectionChange,\n onApply,\n minDate = defaultMinDate,\n maxDate = defaultMaxDate,\n onCancel,\n timezone,\n } = props;\n\n const previousSelectedDate = useRef<typeof selectedDateProp>();\n const datePickerRef = useRef<HTMLDivElement>(null);\n const containerRef = useForkRef(ref, datePickerRef);\n\n const {\n state: { open },\n helpers: { setOpen, setOnDismiss },\n } = useDatePickerOverlay();\n\n const [selectedDate, setSelectedDate] = useControlled({\n controlled: selectedDateProp,\n default: defaultSelectedDate,\n name: \"DatePicker\",\n state: \"selectedDate\",\n });\n\n const [enableApply, setEnableApply] = useState<boolean>(false);\n const [cancelled, setCancelled] = useState<boolean>(false);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: should run when open changes and not selected date or value\n useEffect(() => {\n if (open) {\n previousSelectedDate.current = selectedDate;\n if (enableApply) {\n setOnDismiss(cancel);\n }\n setCancelled(false);\n }\n }, [enableApply, open, setOnDismiss, setCancelled]);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: avoid excessive re-rendering\n useEffect(() => {\n if (cancelled) {\n setSelectedDate(previousSelectedDate?.current);\n }\n }, [cancelled, setSelectedDate]);\n\n const { disabled: formFieldDisabled, readOnly: formFieldReadOnly } =\n useFormFieldProps();\n const isReadOnly = readOnly || formFieldReadOnly || false;\n const isDisabled = disabled || formFieldDisabled || false;\n\n const applySingle = useCallback(\n (event: SyntheticEvent, date: SingleDateSelection<TDate> | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n if (selectionVariant === \"single\") {\n onApply?.(event, date);\n }\n },\n [selectionVariant, setOpen, onApply],\n );\n\n const checkAndAddError = useCallback(\n (\n date: TDate | null | undefined,\n checkFunction: ((date: TDate) => string | false | undefined) | undefined,\n errorType: string,\n details: {\n errors?: { type: string; message: string | false | undefined }[];\n } = {},\n ) => {\n const errorMessage = date ? checkFunction?.(date) : false;\n if (errorMessage) {\n details.errors = details.errors ?? [];\n details.errors.push({\n type: errorType,\n message: errorMessage,\n });\n }\n },\n [],\n );\n\n const selectSingle = useCallback(\n (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n details: DateInputSingleDetails,\n ) => {\n const canBeApplied =\n dateAdapter.isValid(date) && !details?.errors?.length;\n setSelectedDate(date);\n checkAndAddError(date, isDayUnselectable, \"unselectable\", details);\n\n if (selectionVariant === \"single\") {\n onSelectionChange?.(event, date, details);\n }\n if (!enableApply && canBeApplied) {\n applySingle(event, date);\n }\n },\n [\n checkAndAddError,\n dateAdapter,\n applySingle,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const applyRange = useCallback(\n (event: SyntheticEvent, date: DateRangeSelection<TDate> | null): void => {\n setCancelled(false);\n setOpen(false, event.nativeEvent, \"apply\");\n if (selectionVariant === \"range\") {\n onApply?.(event, date);\n }\n },\n [onApply, setOpen, selectionVariant],\n );\n\n const selectRange = useCallback(\n (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n ) => {\n setSelectedDate(date);\n checkAndAddError(\n date?.startDate,\n isDayUnselectable,\n \"unselectable\",\n details?.startDate,\n );\n checkAndAddError(\n date?.endDate,\n isDayUnselectable,\n \"unselectable\",\n details?.endDate,\n );\n\n if (selectionVariant === \"range\") {\n onSelectionChange?.(event, date, details);\n }\n const isAValidRange =\n dateAdapter.isValid(date?.startDate) &&\n dateAdapter.isValid(date?.endDate);\n const isValidSelection =\n !details?.startDate?.errors?.length &&\n !details?.endDate?.errors?.length;\n const canBeApplied = isAValidRange && isValidSelection;\n if (!enableApply && canBeApplied) {\n applyRange(event, date);\n }\n },\n [\n checkAndAddError,\n dateAdapter,\n applyRange,\n isDayUnselectable,\n enableApply,\n onSelectionChange,\n selectionVariant,\n ],\n );\n\n const cancel = useCallback(\n (event?: Event) => {\n setCancelled(true);\n setOpen(false, event, \"cancel\");\n onCancel?.();\n },\n [setOpen, onCancel],\n );\n\n const returnValue = {\n state: {\n selectionVariant,\n selectedDate,\n cancelled,\n enableApply,\n disabled: isDisabled,\n readOnly: isReadOnly,\n containerRef,\n minDate,\n maxDate,\n timezone,\n },\n helpers: {\n cancel,\n isDayHighlighted,\n isDayUnselectable,\n setEnableApply,\n },\n };\n if (props.selectionVariant === \"range\") {\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applyRange,\n select: selectRange,\n },\n } as RangeDatePickerState<TDate>;\n }\n return {\n ...returnValue,\n helpers: {\n ...returnValue.helpers,\n apply: applySingle,\n select: selectSingle,\n },\n } as SingleDatePickerState<TDate>;\n}\n"],"names":["useLocalization","useRef","useForkRef","useDatePickerOverlay","useControlled","useState","useEffect","useFormFieldProps","useCallback"],"mappings":";;;;;;;AAgKO,SAAS,aAAA,CAId,OACA,GAAA,EAC4D;AAC5D,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,YAAA,EAAc,EAAE,OAAA,EAAS,cAAA,EAAgB,SAAS,cAAA;AAAe,MAC/DA,oCAAA,EAAuB;AAC3B,EAAA,MAAM;AAAA,IACJ,QAAA,GAAW,KAAA;AAAA,IACX,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,YAAA,EAAc,gBAAA;AAAA,IACd,iBAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA,GAAU,cAAA;AAAA,IACV,OAAA,GAAU,cAAA;AAAA,IACV,QAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,uBAAuBC,YAAA,EAAgC;AAC7D,EAAA,MAAM,aAAA,GAAgBA,aAAuB,IAAI,CAAA;AACjD,EAAA,MAAM,YAAA,GAAeC,eAAA,CAAW,GAAA,EAAK,aAAa,CAAA;AAElD,EAAA,MAAM;AAAA,IACJ,KAAA,EAAO,EAAE,IAAA,EAAK;AAAA,IACd,OAAA,EAAS,EAAE,OAAA,EAAS,YAAA;AAAa,MAC/BC,8CAAA,EAAqB;AAEzB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,kBAAA,CAAc;AAAA,IACpD,UAAA,EAAY,gBAAA;AAAA,IACZ,OAAA,EAAS,mBAAA;AAAA,IACT,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAkB,KAAK,CAAA;AAC7D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAkB,KAAK,CAAA;AAGzD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,oBAAA,CAAqB,OAAA,GAAU,YAAA;AAC/B,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,YAAY,CAAC,CAAA;AAGlD,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,eAAA,CAAgB,6DAAsB,OAAO,CAAA;AAAA,IAC/C;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,eAAe,CAAC,CAAA;AAE/B,EAAA,MAAM,EAAE,QAAA,EAAU,iBAAA,EAAmB,QAAA,EAAU,iBAAA,KAC7CC,sBAAA,EAAkB;AACpB,EAAA,MAAM,UAAA,GAAa,YAAY,iBAAA,IAAqB,KAAA;AACpD,EAAA,MAAM,UAAA,GAAa,YAAY,iBAAA,IAAqB,KAAA;AAEpD,EAAA,MAAM,WAAA,GAAcC,iBAAA;AAAA,IAClB,CAAC,OAAuB,IAAA,KAAkD;AACxE,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAA,EAAO,KAAA,CAAM,WAAA,EAAa,OAAO,CAAA;AACzC,MAAA,IAAI,qBAAqB,QAAA,EAAU;AACjC,QAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,EAAO,IAAA,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,gBAAA,EAAkB,OAAA,EAAS,OAAO;AAAA,GACrC;AAEA,EAAA,MAAM,gBAAA,GAAmBA,iBAAA;AAAA,IACvB,CACE,IAAA,EACA,aAAA,EACA,SAAA,EACA,OAAA,GAEI,EAAC,KACF;AACH,MAAA,MAAM,YAAA,GAAe,IAAA,GAAO,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAgB,IAAA,CAAA,GAAQ,KAAA;AACpD,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,MAAA,IAAU,EAAC;AACpC,QAAA,OAAA,CAAQ,OAAO,IAAA,CAAK;AAAA,UAClB,IAAA,EAAM,SAAA;AAAA,UACN,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACnB,CACE,KAAA,EACA,IAAA,EACA,OAAA,KACG;AA1QT,MAAA,IAAA,EAAA;AA2QM,MAAA,MAAM,YAAA,GACJ,YAAY,OAAA,CAAQ,IAAI,KAAK,EAAA,CAAC,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,MAAA,CAAA;AACjD,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,gBAAA,CAAiB,IAAA,EAAM,iBAAA,EAAmB,cAAA,EAAgB,OAAO,CAAA;AAEjE,MAAA,IAAI,qBAAqB,QAAA,EAAU;AACjC,QAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,OAAO,IAAA,EAAM,OAAA,CAAA;AAAA,MACnC;AACA,MAAA,IAAI,CAAC,eAAe,YAAA,EAAc;AAChC,QAAA,WAAA,CAAY,OAAO,IAAI,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAA;AAAA,IACjB,CAAC,OAAuB,IAAA,KAAiD;AACvE,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAA,EAAO,KAAA,CAAM,WAAA,EAAa,OAAO,CAAA;AACzC,MAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,QAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,EAAO,IAAA,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,OAAA,EAAS,gBAAgB;AAAA,GACrC;AAEA,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CACE,KAAA,EACA,IAAA,EACA,OAAA,KACG;AAlTT,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmTM,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,gBAAA;AAAA,QACE,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAA;AAAA,QACN,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS;AAAA,OACX;AACA,MAAA,gBAAA;AAAA,QACE,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAA;AAAA,QACN,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS;AAAA,OACX;AAEA,MAAA,IAAI,qBAAqB,OAAA,EAAS;AAChC,QAAA,iBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,iBAAA,CAAoB,OAAO,IAAA,EAAM,OAAA,CAAA;AAAA,MACnC;AACA,MAAA,MAAM,aAAA,GACJ,YAAY,OAAA,CAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,SAAS,CAAA,IACnC,WAAA,CAAY,OAAA,CAAQ,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,OAAO,CAAA;AACnC,MAAA,MAAM,gBAAA,GACJ,EAAA,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,SAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,MAAA,KAApB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4B,MAAA,CAAA,IAC7B,EAAA,CAAC,EAAA,GAAA,CAAA,EAAA,GAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,OAAA,KAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,WAAlB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA0B,MAAA,CAAA;AAC7B,MAAA,MAAM,eAAe,aAAA,IAAiB,gBAAA;AACtC,MAAA,IAAI,CAAC,eAAe,YAAA,EAAc;AAChC,QAAA,UAAA,CAAW,OAAO,IAAI,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,gBAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA;AAAA,MACA,iBAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,MAAA,GAASA,iBAAA;AAAA,IACb,CAAC,KAAA,KAAkB;AACjB,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,OAAA,CAAQ,KAAA,EAAO,OAAO,QAAQ,CAAA;AAC9B,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,EAAA;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS,QAAQ;AAAA,GACpB;AAEA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,KAAA,EAAO;AAAA,MACL,gBAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA,EAAU,UAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,YAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA;AACF,GACF;AACA,EAAA,IAAI,KAAA,CAAM,qBAAqB,OAAA,EAAS;AACtC,IAAA,OAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,OAAA,EAAS;AAAA,QACP,GAAG,WAAA,CAAY,OAAA;AAAA,QACf,KAAA,EAAO,UAAA;AAAA,QACP,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,GAAG,WAAA;AAAA,IACH,OAAA,EAAS;AAAA,MACP,GAAG,WAAA,CAAY,OAAA;AAAA,MACf,KAAA,EAAO,WAAA;AAAA,MACP,MAAA,EAAQ;AAAA;AACV,GACF;AACF;;;;"}
@@ -1,43 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
-
5
- function getTabbableElements(parent) {
6
- const focusableSelectors = [
7
- "button:not([disabled])",
8
- "input:not([disabled])",
9
- '[tabindex]:not([tabindex="-1"])'
10
- ];
11
- const tabbableElements = parent.querySelectorAll(
12
- focusableSelectors.join(",")
13
- );
14
- return Array.from(tabbableElements).filter(
15
- (element) => !element.hasAttribute("disabled") && element.tabIndex >= 0
16
- );
17
- }
18
- function useFocusOut(context, props) {
19
- const { onOpenChange } = context;
20
- const { enabled = true } = props;
21
- const reference = react.useMemo(() => {
22
- const referenceElement = context.elements.reference;
23
- if (!referenceElement) {
24
- return {};
25
- }
26
- return {
27
- onKeyDown(event) {
28
- if (event.key === "Tab") {
29
- const tabbableElements = getTabbableElements(referenceElement);
30
- const tabbedBeforeFirstElement = event.shiftKey && document.activeElement === tabbableElements[0];
31
- const tabbedAfterLastElement = document.activeElement === tabbableElements[tabbableElements.length - 1];
32
- if (tabbedBeforeFirstElement || tabbedAfterLastElement) {
33
- onOpenChange(false, event.nativeEvent, "focus-out");
34
- }
35
- }
36
- }
37
- };
38
- }, [onOpenChange, context.elements.reference]);
39
- return react.useMemo(() => enabled ? { reference } : {}, [enabled, reference]);
40
- }
41
-
42
- exports.useFocusOut = useFocusOut;
43
- //# sourceMappingURL=useFocusOut.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFocusOut.js","sources":["../src/date-picker/useFocusOut.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { useMemo } from \"react\";\n\nexport interface UseFocusOutProps {\n /**\n * Whether the hook is enabled\n * @default true\n */\n enabled?: boolean;\n}\n\nfunction getTabbableElements(parent: Element): HTMLElement[] {\n const focusableSelectors = [\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n ];\n const tabbableElements = parent.querySelectorAll<HTMLElement>(\n focusableSelectors.join(\",\"),\n );\n return Array.from(tabbableElements).filter(\n (element) => !element.hasAttribute(\"disabled\") && element.tabIndex >= 0,\n );\n}\n//\n// This hook is needed to close the overlay, when,\n// 1. the floating element is opened\n// 2. the user re-focuses into the reference element with the mouse\n// 3. the user tabs out of the reference element\n// Without this hook, the floating element can re-receive focus\nexport function useFocusOut(\n context: FloatingContext,\n props: UseFocusOutProps,\n): ElementProps {\n const { onOpenChange } = context;\n const { enabled = true } = props;\n\n const reference: ElementProps[\"reference\"] = useMemo(() => {\n const referenceElement = context.elements.reference as Element | undefined;\n\n if (!referenceElement) {\n return {};\n }\n\n return {\n onKeyDown(event: React.KeyboardEvent<Element>) {\n if (event.key === \"Tab\") {\n const tabbableElements = getTabbableElements(referenceElement);\n const tabbedBeforeFirstElement =\n event.shiftKey && document.activeElement === tabbableElements[0];\n const tabbedAfterLastElement =\n document.activeElement ===\n tabbableElements[tabbableElements.length - 1];\n if (tabbedBeforeFirstElement || tabbedAfterLastElement) {\n onOpenChange(false, event.nativeEvent, \"focus-out\");\n }\n }\n },\n };\n }, [onOpenChange, context.elements.reference]);\n\n return useMemo(() => (enabled ? { reference } : {}), [enabled, reference]);\n}\n"],"names":["useMemo"],"mappings":";;;;AAWA,SAAS,oBAAoB,MAAA,EAAgC;AAC3D,EAAA,MAAM,kBAAA,GAAqB;AAAA,IACzB,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,mBAAmB,MAAA,CAAO,gBAAA;AAAA,IAC9B,kBAAA,CAAmB,KAAK,GAAG;AAAA,GAC7B;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,gBAAgB,CAAA,CAAE,MAAA;AAAA,IAClC,CAAC,YAAY,CAAC,OAAA,CAAQ,aAAa,UAAU,CAAA,IAAK,QAAQ,QAAA,IAAY;AAAA,GACxE;AACF;AAOO,SAAS,WAAA,CACd,SACA,KAAA,EACc;AACd,EAAA,MAAM,EAAE,cAAa,GAAI,OAAA;AACzB,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAK,GAAI,KAAA;AAE3B,EAAA,MAAM,SAAA,GAAuCA,cAAQ,MAAM;AACzD,IAAA,MAAM,gBAAA,GAAmB,QAAQ,QAAA,CAAS,SAAA;AAE1C,IAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO;AAAA,MACL,UAAU,KAAA,EAAqC;AAC7C,QAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AACvB,UAAA,MAAM,gBAAA,GAAmB,oBAAoB,gBAAgB,CAAA;AAC7D,UAAA,MAAM,2BACJ,KAAA,CAAM,QAAA,IAAY,QAAA,CAAS,aAAA,KAAkB,iBAAiB,CAAC,CAAA;AACjE,UAAA,MAAM,yBACJ,QAAA,CAAS,aAAA,KACT,gBAAA,CAAiB,gBAAA,CAAiB,SAAS,CAAC,CAAA;AAC9C,UAAA,IAAI,4BAA4B,sBAAA,EAAwB;AACtD,YAAA,YAAA,CAAa,KAAA,EAAO,KAAA,CAAM,WAAA,EAAa,WAAW,CAAA;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAAA,KACF;AAAA,EACF,GAAG,CAAC,YAAA,EAAc,OAAA,CAAQ,QAAA,CAAS,SAAS,CAAC,CAAA;AAE7C,EAAA,OAAOA,aAAA,CAAQ,MAAO,OAAA,GAAU,EAAE,SAAA,EAAU,GAAI,EAAC,EAAI,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAC3E;;;;"}
@@ -1,22 +0,0 @@
1
- 'use strict';
2
-
3
- var react = require('react');
4
-
5
- function useKeyboard(_context, props) {
6
- const { enabled = true, onArrowDown } = props;
7
- const reference = react.useMemo(
8
- () => ({
9
- onKeyDown(event) {
10
- if (event.key === "ArrowDown") {
11
- event.preventDefault();
12
- onArrowDown == null ? void 0 : onArrowDown(event);
13
- }
14
- }
15
- }),
16
- [onArrowDown]
17
- );
18
- return react.useMemo(() => enabled ? { reference } : {}, [enabled, reference]);
19
- }
20
-
21
- exports.useKeyboard = useKeyboard;
22
- //# sourceMappingURL=useKeyboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useKeyboard.js","sources":["../src/date-picker/useKeyboard.ts"],"sourcesContent":["import type { ElementProps, FloatingContext } from \"@floating-ui/react\";\nimport { type KeyboardEvent, useMemo } from \"react\";\n\nexport interface UseKeyboardProps {\n /**\n * Whether the hook is enabled\n * @default true\n */\n enabled?: boolean;\n /**\n * Handler for when the arrow key down is pressed\n * @param event\n */\n onArrowDown?: (event: KeyboardEvent) => void;\n}\n\n/**\n * Floating UI Interactions hook, that will open DatePicker on keydown\n * @param context\n * @param props\n */\nexport function useKeyboard(\n _context: FloatingContext,\n props: UseKeyboardProps,\n): ElementProps {\n const { enabled = true, onArrowDown } = props;\n const reference = useMemo(\n () => ({\n onKeyDown(event: KeyboardEvent) {\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n onArrowDown?.(event);\n }\n },\n }),\n [onArrowDown],\n );\n\n return useMemo(() => (enabled ? { reference } : {}), [enabled, reference]);\n}\n"],"names":["useMemo"],"mappings":";;;;AAqBO,SAAS,WAAA,CACd,UACA,KAAA,EACc;AACd,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,WAAA,EAAY,GAAI,KAAA;AACxC,EAAA,MAAM,SAAA,GAAYA,aAAA;AAAA,IAChB,OAAO;AAAA,MACL,UAAU,KAAA,EAAsB;AAC9B,QAAA,IAAI,KAAA,CAAM,QAAQ,WAAA,EAAa;AAC7B,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,CAAc,KAAA,CAAA;AAAA,QAChB;AAAA,MACF;AAAA,KACF,CAAA;AAAA,IACA,CAAC,WAAW;AAAA,GACd;AAEA,EAAA,OAAOA,aAAA,CAAQ,MAAO,OAAA,GAAU,EAAE,SAAA,EAAU,GAAI,EAAC,EAAI,CAAC,OAAA,EAAS,SAAS,CAAC,CAAA;AAC3E;;;;"}
@@ -1,51 +0,0 @@
1
- 'use strict';
2
-
3
- var jsxRuntime = require('react/jsx-runtime');
4
- var react = require('react');
5
-
6
- const MIN_DATE = "1900-01-01T00:00:00.000";
7
- const MAX_DATE = "2099-12-31T00:00:00.000";
8
- const LocalizationProviderContext = (
9
- // biome-ignore lint/suspicious/noExplicitAny: date frameworl
10
- react.createContext(null)
11
- );
12
- if (process.env.NODE_ENV !== "production") {
13
- LocalizationProviderContext.displayName = "LocalizationProviderContext";
14
- }
15
- const LocalizationProvider = function LocalizationProvider2(props) {
16
- const { children, DateAdapter, instance, locale, minDate, maxDate } = props;
17
- const dateAdapter = react.useMemo(() => {
18
- return new DateAdapter({
19
- locale,
20
- instance
21
- });
22
- }, [DateAdapter, instance, locale]);
23
- const defaultDates = react.useMemo(
24
- () => ({
25
- minDate: minDate || dateAdapter.date(MIN_DATE),
26
- maxDate: maxDate || dateAdapter.date(MAX_DATE)
27
- }),
28
- [dateAdapter, minDate, maxDate]
29
- );
30
- const contextValue = react.useMemo(() => {
31
- return {
32
- dateAdapter,
33
- defaultDates
34
- };
35
- }, [dateAdapter, defaultDates]);
36
- return /* @__PURE__ */ jsxRuntime.jsx(LocalizationProviderContext.Provider, { value: contextValue, children });
37
- };
38
- const useLocalization = () => {
39
- const localization = react.useContext(LocalizationProviderContext);
40
- if (!localization) {
41
- throw new Error(
42
- "useLocalization should be called inside LocalizationProviderContext.Provider"
43
- );
44
- }
45
- return localization;
46
- };
47
-
48
- exports.LocalizationProvider = LocalizationProvider;
49
- exports.LocalizationProviderContext = LocalizationProviderContext;
50
- exports.useLocalization = useLocalization;
51
- //# sourceMappingURL=LocalizationProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LocalizationProvider.js","sources":["../src/localization-provider/LocalizationProvider.tsx"],"sourcesContent":["import type {\n DateFrameworkType,\n SaltDateAdapter,\n} from \"@salt-ds/date-adapters\";\nimport { createContext, useContext, useMemo } from \"react\";\n\nconst MIN_DATE = \"1900-01-01T00:00:00.000\";\nconst MAX_DATE = \"2099-12-31T00:00:00.000\";\n\nexport interface LocalizationProviderValue<TDate extends DateFrameworkType> {\n defaultDates: {\n minDate: TDate;\n maxDate: TDate;\n };\n dateAdapter: SaltDateAdapter<TDate>;\n}\n\n/**\n * Props for the LocalizationProvider component.\n *\n * @template TDate - The type of the date object used in the provider.\n * @template TLocale - The type of the locale, defaulting to string.\n */\nexport interface LocalizationProviderProps<\n TDate extends DateFrameworkType,\n TLocale = string,\n> {\n /**\n * The child components to be rendered within the provider.\n */\n children?: React.ReactNode;\n\n /**\n * The instance of the date library being used.\n */\n // biome-ignore lint/suspicious/noExplicitAny: date framework\n instance?: any;\n\n /**\n * The date adapter class, which provides methods for date manipulation and formatting.\n * This should be a constructor for a class implementing the SaltDateAdapter interface.\n */\n DateAdapter: new (\n // biome-ignore lint/suspicious/noExplicitAny: date framework\n ...args: any\n ) => SaltDateAdapter<TDate, TLocale>;\n\n /**\n * The locale to be used for date formatting and manipulation.\n */\n locale?: TLocale;\n\n /**\n * The minimum date allowed for all date selections.\n * Defaults to January 1, 1900.\n */\n minDate?: TDate;\n\n /**\n * The maximum date allowed for all date selections.\n * Defaults to December 31, 2099.\n */\n maxDate?: TDate;\n}\n\nexport type LocalizationProviderContext<TDate extends DateFrameworkType> = {\n [K in keyof LocalizationProviderValue<TDate>]:\n | LocalizationProviderValue<TDate>[K]\n | null;\n};\n\nexport const LocalizationProviderContext =\n // biome-ignore lint/suspicious/noExplicitAny: date frameworl\n createContext<LocalizationProviderValue<any> | null>(null);\n\nif (process.env.NODE_ENV !== \"production\") {\n LocalizationProviderContext.displayName = \"LocalizationProviderContext\";\n}\n\nexport const LocalizationProvider = function LocalizationProvider<\n TDate extends DateFrameworkType,\n TLocale,\n>(props: LocalizationProviderProps<TDate, TLocale>) {\n const { children, DateAdapter, instance, locale, minDate, maxDate } = props;\n\n const dateAdapter = useMemo(() => {\n return new DateAdapter({\n locale,\n instance,\n });\n }, [DateAdapter, instance, locale]);\n\n const defaultDates: LocalizationProviderValue<TDate>[\"defaultDates\"] =\n useMemo(\n () => ({\n minDate: minDate || dateAdapter.date(MIN_DATE),\n maxDate: maxDate || dateAdapter.date(MAX_DATE),\n }),\n [dateAdapter, minDate, maxDate],\n );\n\n const contextValue: LocalizationProviderValue<TDate> = useMemo(() => {\n return {\n dateAdapter,\n defaultDates,\n };\n }, [dateAdapter, defaultDates]);\n\n return (\n <LocalizationProviderContext.Provider value={contextValue}>\n {children}\n </LocalizationProviderContext.Provider>\n );\n};\n\n/**\n * Custom hook to access the localization context.\n *\n * This hook provides access to the localization settings and utilities\n * within the `LocalizationProviderContext`. It should be used within a\n * component that is a descendant of `LocalizationProviderContext.Provider`.\n *\n * @template TDate - The type of the date object used in the localization context.\n *\n * @returns The localization provider value, which includes date manipulation and formatting utilities.\n *\n * @throws Will throw an error if the hook is used outside of a `LocalizationProviderContext.Provider`.\n */\nexport const useLocalization = <\n TDate extends DateFrameworkType,\n>(): LocalizationProviderValue<TDate> => {\n const localization = useContext(LocalizationProviderContext);\n if (!localization) {\n throw new Error(\n \"useLocalization should be called inside LocalizationProviderContext.Provider\",\n );\n }\n return localization;\n};\n"],"names":["createContext","LocalizationProvider","useMemo","useContext"],"mappings":";;;;;AAMA,MAAM,QAAA,GAAW,yBAAA;AACjB,MAAM,QAAA,GAAW,yBAAA;AAgEV,MAAM,2BAAA;AAAA;AAAA,EAEXA,oBAAqD,IAAI;AAAA;AAE3D,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,EAAA,2BAAA,CAA4B,WAAA,GAAc,6BAAA;AAC5C;AAEO,MAAM,oBAAA,GAAuB,SAASC,qBAAAA,CAG3C,KAAA,EAAkD;AAClD,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,UAAU,MAAA,EAAQ,OAAA,EAAS,SAAQ,GAAI,KAAA;AAEtE,EAAA,MAAM,WAAA,GAAcC,cAAQ,MAAM;AAChC,IAAA,OAAO,IAAI,WAAA,CAAY;AAAA,MACrB,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,WAAA,EAAa,QAAA,EAAU,MAAM,CAAC,CAAA;AAElC,EAAA,MAAM,YAAA,GACJA,aAAA;AAAA,IACE,OAAO;AAAA,MACL,OAAA,EAAS,OAAA,IAAW,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAA;AAAA,MAC7C,OAAA,EAAS,OAAA,IAAW,WAAA,CAAY,IAAA,CAAK,QAAQ;AAAA,KAC/C,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,OAAA,EAAS,OAAO;AAAA,GAChC;AAEF,EAAA,MAAM,YAAA,GAAiDA,cAAQ,MAAM;AACnE,IAAA,OAAO;AAAA,MACL,WAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,YAAY,CAAC,CAAA;AAE9B,EAAA,sCACG,2BAAA,CAA4B,QAAA,EAA5B,EAAqC,KAAA,EAAO,cAC1C,QAAA,EACH,CAAA;AAEJ;AAeO,MAAM,kBAAkB,MAEU;AACvC,EAAA,MAAM,YAAA,GAAeC,iBAAW,2BAA2B,CAAA;AAC3D,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,YAAA;AACT;;;;;;"}
@@ -1,4 +0,0 @@
1
- var css_248z = ".saltCalendar {\n --calendar-gap: var(--salt-spacing-fixed-100);\n --calendar-day-size: var(--salt-size-base);\n\n background: var(--salt-container-primary-background);\n padding: var(--salt-spacing-100);\n}\n";
2
-
3
- export { css_248z as default };
4
- //# sourceMappingURL=Calendar.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,150 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { makePrefixer } from '@salt-ds/core';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
- import { useWindow } from '@salt-ds/window';
5
- import { clsx } from 'clsx';
6
- import { forwardRef, useEffect, useRef } from 'react';
7
- import { useLocalization } from '../localization-provider/LocalizationProvider.js';
8
- import css_248z from './Calendar.css.js';
9
- import { CalendarContext } from './internal/CalendarContext.js';
10
- import { useCalendar } from './useCalendar.js';
11
-
12
- const withBaseName = makePrefixer("saltCalendar");
13
- function isMultiselect(props) {
14
- return props.multiselect === true;
15
- }
16
- function getStartOrEndDate(dateRange, isMultiselect2) {
17
- var _a, _b;
18
- if (isMultiselect2) {
19
- const rangeArray = dateRange;
20
- return ((_a = rangeArray == null ? void 0 : rangeArray[0]) == null ? void 0 : _a.startDate) ?? ((_b = rangeArray == null ? void 0 : rangeArray[0]) == null ? void 0 : _b.endDate);
21
- }
22
- const range = dateRange;
23
- return (range == null ? void 0 : range.startDate) ?? (range == null ? void 0 : range.endDate);
24
- }
25
- let warnedOnce = false;
26
- const Calendar = forwardRef(
27
- (props, ref) => {
28
- const targetWindow = useWindow();
29
- const { dateAdapter } = useLocalization();
30
- useComponentCssInjection({
31
- testId: "salt-calendar",
32
- css: css_248z,
33
- window: targetWindow
34
- });
35
- const {
36
- children,
37
- className,
38
- selectedDate,
39
- defaultSelectedDate,
40
- visibleMonth: visibleMonthProp,
41
- defaultVisibleMonth,
42
- onFocusedDateChange,
43
- onSelectionChange,
44
- onVisibleMonthChange,
45
- hideOutOfRangeDates,
46
- focusedDate,
47
- focusedDateRef,
48
- isDayUnselectable,
49
- isDayHighlighted,
50
- minDate,
51
- maxDate,
52
- multiselect,
53
- numberOfVisibleMonths = 1,
54
- select,
55
- selectionVariant,
56
- onHoveredDateChange,
57
- hoveredDate,
58
- timezone: timezoneProp,
59
- ...propsRest
60
- } = props;
61
- useEffect(() => {
62
- if (process.env.NODE_ENV !== "production") {
63
- if (!warnedOnce && multiselect && selectionVariant !== "single") {
64
- console.warn(
65
- `'multiselect' with selection variant '${selectionVariant}' is experimental and not for production use.`
66
- );
67
- warnedOnce = true;
68
- }
69
- }
70
- }, [multiselect, warnedOnce, selectionVariant]);
71
- let timezone = "default";
72
- if (timezoneProp) {
73
- timezone = timezoneProp;
74
- } else {
75
- let defaultTimezoneDate;
76
- if (selectionVariant === "range" || selectionVariant === "offset") {
77
- const shouldExtractFromList = isMultiselect(props);
78
- defaultTimezoneDate = getStartOrEndDate(selectedDate, shouldExtractFromList) ?? getStartOrEndDate(defaultSelectedDate, shouldExtractFromList);
79
- } else if (selectionVariant === "single") {
80
- if (isMultiselect(props)) {
81
- defaultTimezoneDate = (defaultSelectedDate == null ? void 0 : defaultSelectedDate[0]) ?? void 0;
82
- } else {
83
- defaultTimezoneDate = selectedDate ?? defaultSelectedDate;
84
- }
85
- }
86
- if (defaultTimezoneDate) {
87
- timezone = dateAdapter.getTimezone(defaultTimezoneDate);
88
- }
89
- }
90
- let startDateOffset;
91
- let endDateOffset;
92
- let rest;
93
- if (selectionVariant === "offset") {
94
- ({ startDateOffset, endDateOffset, ...rest } = propsRest);
95
- } else {
96
- rest = propsRest;
97
- }
98
- const defaultFocusedDateRef = useRef(null);
99
- const useCalendarProps = {
100
- selectedDate,
101
- defaultSelectedDate,
102
- visibleMonth: visibleMonthProp,
103
- defaultVisibleMonth,
104
- onSelectionChange,
105
- onVisibleMonthChange,
106
- focusedDate,
107
- focusedDateRef: focusedDateRef !== void 0 ? focusedDateRef : defaultFocusedDateRef,
108
- isDayUnselectable,
109
- isDayHighlighted,
110
- multiselect,
111
- minDate,
112
- maxDate,
113
- numberOfVisibleMonths,
114
- select,
115
- selectionVariant,
116
- onFocusedDateChange,
117
- onHoveredDateChange,
118
- hideOutOfRangeDates,
119
- hoveredDate,
120
- startDateOffset,
121
- endDateOffset,
122
- timezone
123
- };
124
- const { state, helpers } = useCalendar(useCalendarProps);
125
- const calendarLabel = dateAdapter.format(state.visibleMonth, "MMMM YYYY");
126
- return /* @__PURE__ */ jsx(
127
- CalendarContext.Provider,
128
- {
129
- value: {
130
- state,
131
- helpers
132
- },
133
- children: /* @__PURE__ */ jsx(
134
- "div",
135
- {
136
- className: clsx(withBaseName(), className),
137
- role: "application",
138
- "aria-label": calendarLabel,
139
- ref,
140
- ...rest,
141
- children
142
- }
143
- )
144
- }
145
- );
146
- }
147
- );
148
-
149
- export { Calendar };
150
- //# sourceMappingURL=Calendar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Calendar.js","sources":["../src/calendar/Calendar.tsx"],"sourcesContent":["import { makePrefixer, type ResponsiveProp } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } 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 ReactNode,\n useEffect,\n useRef,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport calendarCss from \"./Calendar.css\";\nimport { CalendarContext } from \"./internal/CalendarContext\";\nimport {\n type UseCalendarMultiselectOffsetProps,\n type UseCalendarMultiselectRangeProps,\n type UseCalendarMultiselectSingleProps,\n type UseCalendarOffsetProps,\n type UseCalendarRangeProps,\n type UseCalendarSingleProps,\n useCalendar,\n} from \"./useCalendar\";\nimport type { DateRangeSelection } from \"./useCalendarSelection\";\n\n/**\n * Base props for the Calendar component.\n */\nexport interface CalendarBaseProps extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the Calendar.\n */\n children: ReactNode;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * Ref to attach to the focused element,enabling focus to be controlled.\n */\n focusedDateRef?: React.MutableRefObject<HTMLElement | null>;\n /**\n * Number of visible months, maximum 12, defaults to 1\n */\n numberOfVisibleMonths?: ResponsiveProp<\n 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12\n >;\n /**\n * Specifies the timezone behavior:\n * - If undefined, the timezone will be derived from the passed date, or from `defaultSelectedDate`/`selectedDate`.\n * - If set to \"default\", the default timezone of the date library will be used.\n * - If set to \"system\", the local system's timezone will be applied.\n * - If set to \"UTC\", the time will be returned in UTC.\n * - If set to a valid IANA timezone identifier, the time will be returned for that specific timezone.\n */\n timezone?: Timezone;\n /**\n * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n}\n\n/**\n * Props for the Calendar component with single date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarSingleProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarSingleProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the Calendar component with multi-select, date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarMultiselectSingleProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiselectSingleProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Multiple selection\n */\n multiselect: true;\n}\n\n/**\n * Props for the Calendar component with date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarRangeProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarRangeProps<TDate> {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the Calendar component with multi-select, date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarMultiselectRangeProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiselectRangeProps<TDate> {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"range\";\n /**\n * Multiple selection\n */\n multiselect: true;\n}\n\n/**\n * Props for the Calendar component with offset date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarOffsetProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarOffsetProps<TDate> {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n}\n\n/**\n * Props for the Calendar component with multi-select, offset date selection.\n * @template TDate - The type of the date object.\n */\nexport interface CalendarMultiselectOffsetProps<TDate extends DateFrameworkType>\n extends CalendarBaseProps,\n UseCalendarMultiselectOffsetProps<TDate> {\n /**\n * The selection variant, set to \"offset\".\n */\n selectionVariant: \"offset\";\n /**\n * Multiple selection\n */\n multiselect: true;\n}\n\n/**\n * Type representing the props for the Calendar component with various selection variants.\n * @template TDate - The type of the date object.\n */\nexport type CalendarProps<TDate extends DateFrameworkType> =\n | CalendarSingleProps<TDate>\n | CalendarMultiselectSingleProps<TDate>\n | CalendarRangeProps<TDate>\n | CalendarMultiselectRangeProps<TDate>\n | CalendarOffsetProps<TDate>\n | CalendarMultiselectOffsetProps<TDate>;\n\nconst withBaseName = makePrefixer(\"saltCalendar\");\n\nfunction isMultiselect<TDate>(\n props: CalendarProps<TDate>,\n): props is\n | CalendarMultiselectSingleProps<TDate>\n | CalendarMultiselectRangeProps<TDate>\n | CalendarMultiselectOffsetProps<TDate> {\n return props.multiselect === true;\n}\n\nfunction getStartOrEndDate<TDate>(\n dateRange:\n | DateRangeSelection<TDate>\n | DateRangeSelection<TDate>[]\n | undefined,\n isMultiselect: boolean,\n): TDate | null | undefined {\n if (isMultiselect) {\n const rangeArray = dateRange as DateRangeSelection<TDate>[];\n return rangeArray?.[0]?.startDate ?? rangeArray?.[0]?.endDate;\n }\n const range = dateRange as DateRangeSelection<TDate>;\n return range?.startDate ?? range?.endDate;\n}\n\nlet warnedOnce = false;\n\nexport const Calendar = forwardRef<\n HTMLDivElement,\n CalendarProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: CalendarProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const targetWindow = useWindow();\n const { dateAdapter } = useLocalization<TDate>();\n useComponentCssInjection({\n testId: \"salt-calendar\",\n css: calendarCss,\n window: targetWindow,\n });\n const {\n children,\n className,\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onFocusedDateChange,\n onSelectionChange,\n onVisibleMonthChange,\n hideOutOfRangeDates,\n focusedDate,\n focusedDateRef,\n isDayUnselectable,\n isDayHighlighted,\n minDate,\n maxDate,\n multiselect,\n numberOfVisibleMonths = 1,\n select,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n timezone: timezoneProp,\n ...propsRest\n } = props;\n\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n if (!warnedOnce && multiselect && selectionVariant !== \"single\") {\n console.warn(\n `'multiselect' with selection variant '${selectionVariant}' is experimental and not for production use.`,\n );\n warnedOnce = true;\n }\n }\n }, [multiselect, warnedOnce, selectionVariant]);\n\n let timezone: Timezone = \"default\";\n if (timezoneProp) {\n timezone = timezoneProp;\n } else {\n let defaultTimezoneDate: TDate | null | undefined;\n\n if (selectionVariant === \"range\" || selectionVariant === \"offset\") {\n const shouldExtractFromList = isMultiselect(props);\n defaultTimezoneDate =\n getStartOrEndDate(selectedDate, shouldExtractFromList) ??\n getStartOrEndDate(defaultSelectedDate, shouldExtractFromList);\n } else if (selectionVariant === \"single\") {\n if (isMultiselect(props)) {\n defaultTimezoneDate =\n (defaultSelectedDate as TDate[])?.[0] ?? undefined;\n } else {\n defaultTimezoneDate =\n (selectedDate as TDate | null) ??\n (defaultSelectedDate as TDate | null);\n }\n }\n if (defaultTimezoneDate) {\n timezone = dateAdapter.getTimezone(defaultTimezoneDate);\n }\n }\n\n let startDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let endDateOffset: CalendarOffsetProps<TDate>[\"startDateOffset\"];\n let rest: Partial<typeof props>;\n if (selectionVariant === \"offset\") {\n ({ startDateOffset, endDateOffset, ...rest } =\n propsRest as CalendarOffsetProps<TDate>);\n } else {\n rest = propsRest;\n }\n const defaultFocusedDateRef = useRef(null);\n\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useCalendarProps: any = {\n selectedDate,\n defaultSelectedDate,\n visibleMonth: visibleMonthProp,\n defaultVisibleMonth,\n onSelectionChange,\n onVisibleMonthChange,\n focusedDate,\n focusedDateRef:\n focusedDateRef !== undefined ? focusedDateRef : defaultFocusedDateRef,\n isDayUnselectable,\n isDayHighlighted,\n multiselect,\n minDate,\n maxDate,\n numberOfVisibleMonths,\n select,\n selectionVariant,\n onFocusedDateChange,\n onHoveredDateChange,\n hideOutOfRangeDates,\n hoveredDate,\n startDateOffset,\n endDateOffset,\n timezone,\n };\n const { state, helpers } = useCalendar<TDate>(useCalendarProps);\n const calendarLabel = dateAdapter.format(state.visibleMonth, \"MMMM YYYY\");\n\n return (\n <CalendarContext.Provider\n value={{\n state,\n helpers,\n }}\n >\n <div\n className={clsx(withBaseName(), className)}\n role=\"application\"\n aria-label={calendarLabel}\n ref={ref}\n {...rest}\n >\n {children}\n </div>\n </CalendarContext.Provider>\n );\n },\n);\n"],"names":["isMultiselect","calendarCss"],"mappings":"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"}