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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/css/salt-lab.css +256 -268
  2. package/dist-cjs/calendar/Calendar.css.js +1 -1
  3. package/dist-cjs/calendar/Calendar.js +6 -17
  4. package/dist-cjs/calendar/Calendar.js.map +1 -1
  5. package/dist-cjs/calendar/CalendarNavigation.css.js +6 -0
  6. package/dist-cjs/calendar/{internal/CalendarNavigation.js → CalendarNavigation.js} +160 -66
  7. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -0
  8. package/dist-cjs/calendar/formatDate.js +56 -0
  9. package/dist-cjs/calendar/formatDate.js.map +1 -0
  10. package/dist-cjs/calendar/internal/CalendarCarousel.js +3 -3
  11. package/dist-cjs/calendar/internal/CalendarCarousel.js.map +1 -1
  12. package/dist-cjs/calendar/internal/CalendarDay.js +45 -33
  13. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  14. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -2
  15. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  16. package/dist-cjs/calendar/internal/CalendarWeekHeader.js +3 -3
  17. package/dist-cjs/calendar/internal/CalendarWeekHeader.js.map +1 -1
  18. package/dist-cjs/calendar/internal/useFocusManagement.js +7 -4
  19. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  20. package/dist-cjs/calendar/internal/utils.js +28 -23
  21. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  22. package/dist-cjs/calendar/useCalendar.js +94 -45
  23. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  24. package/dist-cjs/calendar/useCalendarDay.js +19 -10
  25. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  26. package/dist-cjs/calendar/useCalendarSelection.js +360 -0
  27. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -0
  28. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  29. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  30. package/dist-cjs/combo-box-deprecated/ComboBox.css.js +1 -1
  31. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  32. package/dist-cjs/content-status/ContentStatus.css.js +1 -1
  33. package/dist-cjs/date-input/DateInput.css.js +1 -1
  34. package/dist-cjs/date-input/DateInputRange.js +355 -0
  35. package/dist-cjs/date-input/DateInputRange.js.map +1 -0
  36. package/dist-cjs/date-input/DateInputSingle.js +229 -0
  37. package/dist-cjs/date-input/DateInputSingle.js.map +1 -0
  38. package/dist-cjs/date-input/utils.js +65 -0
  39. package/dist-cjs/date-input/utils.js.map +1 -0
  40. package/dist-cjs/date-picker/DatePicker.js +40 -150
  41. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  42. package/dist-cjs/date-picker/DatePickerActions.css.js +6 -0
  43. package/dist-cjs/date-picker/DatePickerActions.css.js.map +1 -0
  44. package/dist-cjs/date-picker/DatePickerActions.js +102 -0
  45. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -0
  46. package/dist-cjs/date-picker/DatePickerContext.js +23 -17
  47. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  48. package/dist-cjs/date-picker/DatePickerOverlay.css.js +6 -0
  49. package/dist-cjs/date-picker/DatePickerOverlay.css.js.map +1 -0
  50. package/dist-cjs/date-picker/DatePickerOverlay.js +50 -0
  51. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -0
  52. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +105 -0
  53. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -0
  54. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  55. package/dist-cjs/date-picker/DatePickerRangeInput.js +118 -0
  56. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -0
  57. package/dist-cjs/date-picker/DatePickerRangePanel.js +206 -0
  58. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -0
  59. package/dist-cjs/date-picker/DatePickerSingleInput.js +97 -0
  60. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -0
  61. package/dist-cjs/date-picker/DatePickerSinglePanel.js +138 -0
  62. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -0
  63. package/dist-cjs/date-picker/useDatePicker.js +179 -0
  64. package/dist-cjs/date-picker/useDatePicker.js.map +1 -0
  65. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  66. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  67. package/dist-cjs/index.js +43 -10
  68. package/dist-cjs/index.js.map +1 -1
  69. package/dist-cjs/list/List.js.map +1 -1
  70. package/dist-cjs/menu-button/MenuButtonTrigger.css.js +1 -1
  71. package/dist-cjs/query-input/QueryInput.css.js +1 -1
  72. package/dist-cjs/slider/Slider.css.js +1 -1
  73. package/dist-cjs/slider/Slider.js +53 -105
  74. package/dist-cjs/slider/Slider.js.map +1 -1
  75. package/dist-cjs/slider/internal/SliderContext.js +21 -0
  76. package/dist-cjs/slider/internal/SliderContext.js.map +1 -0
  77. package/dist-cjs/slider/internal/SliderMarks.js +31 -0
  78. package/dist-cjs/slider/internal/SliderMarks.js.map +1 -0
  79. package/dist-cjs/slider/internal/SliderSelection.js +17 -10
  80. package/dist-cjs/slider/internal/SliderSelection.js.map +1 -1
  81. package/dist-cjs/slider/internal/SliderThumb.js +77 -0
  82. package/dist-cjs/slider/internal/SliderThumb.js.map +1 -0
  83. package/dist-cjs/slider/internal/SliderTrack.js +91 -0
  84. package/dist-cjs/slider/internal/SliderTrack.js.map +1 -0
  85. package/dist-cjs/slider/internal/useKeyDownThumb.js +53 -0
  86. package/dist-cjs/slider/internal/useKeyDownThumb.js.map +1 -0
  87. package/dist-cjs/slider/internal/utils.js +78 -116
  88. package/dist-cjs/slider/internal/utils.js.map +1 -1
  89. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  90. package/dist-cjs/tabs/useTabs.js.map +1 -1
  91. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  92. package/dist-es/calendar/Calendar.css.js +1 -1
  93. package/dist-es/calendar/Calendar.js +7 -18
  94. package/dist-es/calendar/Calendar.js.map +1 -1
  95. package/dist-es/calendar/CalendarNavigation.css.js +4 -0
  96. package/dist-es/calendar/CalendarNavigation.js +308 -0
  97. package/dist-es/calendar/CalendarNavigation.js.map +1 -0
  98. package/dist-es/calendar/formatDate.js +51 -0
  99. package/dist-es/calendar/formatDate.js.map +1 -0
  100. package/dist-es/calendar/internal/CalendarCarousel.js +3 -3
  101. package/dist-es/calendar/internal/CalendarCarousel.js.map +1 -1
  102. package/dist-es/calendar/internal/CalendarDay.js +45 -33
  103. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  104. package/dist-es/calendar/internal/CalendarMonth.js +3 -2
  105. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  106. package/dist-es/calendar/internal/CalendarWeekHeader.js +3 -3
  107. package/dist-es/calendar/internal/CalendarWeekHeader.js.map +1 -1
  108. package/dist-es/calendar/internal/useFocusManagement.js +7 -4
  109. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  110. package/dist-es/calendar/internal/utils.js +29 -23
  111. package/dist-es/calendar/internal/utils.js.map +1 -1
  112. package/dist-es/calendar/useCalendar.js +96 -47
  113. package/dist-es/calendar/useCalendar.js.map +1 -1
  114. package/dist-es/calendar/useCalendarDay.js +20 -11
  115. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  116. package/dist-es/calendar/useCalendarSelection.js +350 -0
  117. package/dist-es/calendar/useCalendarSelection.js.map +1 -0
  118. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  119. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  120. package/dist-es/combo-box-deprecated/ComboBox.css.js +1 -1
  121. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  122. package/dist-es/content-status/ContentStatus.css.js +1 -1
  123. package/dist-es/date-input/DateInput.css.js +1 -1
  124. package/dist-es/date-input/DateInputRange.js +351 -0
  125. package/dist-es/date-input/DateInputRange.js.map +1 -0
  126. package/dist-es/date-input/DateInputSingle.js +225 -0
  127. package/dist-es/date-input/DateInputSingle.js.map +1 -0
  128. package/dist-es/date-input/utils.js +57 -0
  129. package/dist-es/date-input/utils.js.map +1 -0
  130. package/dist-es/date-picker/DatePicker.js +43 -154
  131. package/dist-es/date-picker/DatePicker.js.map +1 -1
  132. package/dist-es/date-picker/DatePickerActions.css.js +4 -0
  133. package/dist-es/date-picker/DatePickerActions.css.js.map +1 -0
  134. package/dist-es/date-picker/DatePickerActions.js +98 -0
  135. package/dist-es/date-picker/DatePickerActions.js.map +1 -0
  136. package/dist-es/date-picker/DatePickerContext.js +22 -17
  137. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  138. package/dist-es/date-picker/DatePickerOverlay.css.js +4 -0
  139. package/dist-es/date-picker/DatePickerOverlay.css.js.map +1 -0
  140. package/dist-es/date-picker/DatePickerOverlay.js +46 -0
  141. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -0
  142. package/dist-es/date-picker/DatePickerOverlayProvider.js +100 -0
  143. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -0
  144. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  145. package/dist-es/date-picker/DatePickerRangeInput.js +114 -0
  146. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -0
  147. package/dist-es/date-picker/DatePickerRangePanel.js +198 -0
  148. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -0
  149. package/dist-es/date-picker/DatePickerSingleInput.js +93 -0
  150. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -0
  151. package/dist-es/date-picker/DatePickerSinglePanel.js +130 -0
  152. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -0
  153. package/dist-es/date-picker/useDatePicker.js +175 -0
  154. package/dist-es/date-picker/useDatePicker.js.map +1 -0
  155. package/dist-es/dropdown/useDropdown.js.map +1 -1
  156. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  157. package/dist-es/index.js +14 -3
  158. package/dist-es/index.js.map +1 -1
  159. package/dist-es/list/List.js.map +1 -1
  160. package/dist-es/menu-button/MenuButtonTrigger.css.js +1 -1
  161. package/dist-es/query-input/QueryInput.css.js +1 -1
  162. package/dist-es/slider/Slider.css.js +1 -1
  163. package/dist-es/slider/Slider.js +55 -107
  164. package/dist-es/slider/Slider.js.map +1 -1
  165. package/dist-es/slider/internal/SliderContext.js +16 -0
  166. package/dist-es/slider/internal/SliderContext.js.map +1 -0
  167. package/dist-es/slider/internal/SliderMarks.js +27 -0
  168. package/dist-es/slider/internal/SliderMarks.js.map +1 -0
  169. package/dist-es/slider/internal/SliderSelection.js +17 -10
  170. package/dist-es/slider/internal/SliderSelection.js.map +1 -1
  171. package/dist-es/slider/internal/SliderThumb.js +73 -0
  172. package/dist-es/slider/internal/SliderThumb.js.map +1 -0
  173. package/dist-es/slider/internal/SliderTrack.js +87 -0
  174. package/dist-es/slider/internal/SliderTrack.js.map +1 -0
  175. package/dist-es/slider/internal/useKeyDownThumb.js +49 -0
  176. package/dist-es/slider/internal/useKeyDownThumb.js.map +1 -0
  177. package/dist-es/slider/internal/utils.js +70 -111
  178. package/dist-es/slider/internal/utils.js.map +1 -1
  179. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  180. package/dist-es/tabs/useTabs.js.map +1 -1
  181. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  182. package/dist-types/calendar/Calendar.d.ts +63 -6
  183. package/dist-types/calendar/CalendarNavigation.d.ts +57 -0
  184. package/dist-types/calendar/formatDate.d.ts +14 -0
  185. package/dist-types/calendar/index.d.ts +3 -1
  186. package/dist-types/calendar/internal/CalendarDay.d.ts +2 -1
  187. package/dist-types/calendar/internal/CalendarWeekHeader.d.ts +4 -4
  188. package/dist-types/calendar/internal/useFocusManagement.d.ts +2 -1
  189. package/dist-types/calendar/internal/utils.d.ts +7 -8
  190. package/dist-types/calendar/useCalendar.d.ts +100 -16
  191. package/dist-types/calendar/useCalendarDay.d.ts +38 -0
  192. package/dist-types/calendar/useCalendarSelection.d.ts +189 -0
  193. package/dist-types/date-input/DateInputRange.d.ts +150 -0
  194. package/dist-types/date-input/DateInputSingle.d.ts +117 -0
  195. package/dist-types/date-input/index.d.ts +3 -1
  196. package/dist-types/date-input/utils.d.ts +43 -0
  197. package/dist-types/date-picker/DatePicker.d.ts +20 -62
  198. package/dist-types/date-picker/DatePickerActions.d.ts +80 -0
  199. package/dist-types/date-picker/DatePickerContext.d.ts +180 -17
  200. package/dist-types/date-picker/DatePickerOverlay.d.ts +11 -0
  201. package/dist-types/date-picker/DatePickerOverlayProvider.d.ts +67 -0
  202. package/dist-types/date-picker/DatePickerRangeInput.d.ts +7 -0
  203. package/dist-types/date-picker/DatePickerRangePanel.d.ts +64 -0
  204. package/dist-types/date-picker/DatePickerSingleInput.d.ts +7 -0
  205. package/dist-types/date-picker/DatePickerSinglePanel.d.ts +42 -0
  206. package/dist-types/date-picker/index.d.ts +7 -0
  207. package/dist-types/date-picker/useDatePicker.d.ts +112 -0
  208. package/dist-types/slider/Slider.d.ts +23 -10
  209. package/dist-types/slider/internal/SliderContext.d.ts +11 -0
  210. package/dist-types/slider/internal/SliderMarks.d.ts +7 -0
  211. package/dist-types/slider/internal/SliderSelection.d.ts +3 -3
  212. package/dist-types/slider/internal/SliderThumb.d.ts +8 -0
  213. package/dist-types/slider/internal/SliderTrack.d.ts +4 -0
  214. package/dist-types/slider/internal/index.d.ts +3 -0
  215. package/dist-types/slider/internal/useKeyDownThumb.d.ts +2 -0
  216. package/dist-types/slider/internal/utils.d.ts +18 -10
  217. package/dist-types/slider/types.d.ts +3 -1
  218. package/package.json +3 -3
  219. package/dist-cjs/calendar/internal/CalendarNavigation.css.js +0 -6
  220. package/dist-cjs/calendar/internal/CalendarNavigation.js.map +0 -1
  221. package/dist-cjs/calendar/useSelection.js +0 -249
  222. package/dist-cjs/calendar/useSelection.js.map +0 -1
  223. package/dist-cjs/date-input/DateInput.js +0 -283
  224. package/dist-cjs/date-input/DateInput.js.map +0 -1
  225. package/dist-cjs/date-picker/DatePickerPanel.js +0 -155
  226. package/dist-cjs/date-picker/DatePickerPanel.js.map +0 -1
  227. package/dist-cjs/slider/internal/SliderHandle.js +0 -44
  228. package/dist-cjs/slider/internal/SliderHandle.js.map +0 -1
  229. package/dist-cjs/slider/internal/SliderMarkLabels.js +0 -45
  230. package/dist-cjs/slider/internal/SliderMarkLabels.js.map +0 -1
  231. package/dist-cjs/slider/internal/SliderRail.js +0 -25
  232. package/dist-cjs/slider/internal/SliderRail.js.map +0 -1
  233. package/dist-cjs/slider/internal/SliderRailMarks.js +0 -48
  234. package/dist-cjs/slider/internal/SliderRailMarks.js.map +0 -1
  235. package/dist-cjs/slider/internal/styles.js +0 -99
  236. package/dist-cjs/slider/internal/styles.js.map +0 -1
  237. package/dist-cjs/slider/internal/useSliderKeyDown.js +0 -50
  238. package/dist-cjs/slider/internal/useSliderKeyDown.js.map +0 -1
  239. package/dist-cjs/slider/internal/useSliderMouseDown.js +0 -96
  240. package/dist-cjs/slider/internal/useSliderMouseDown.js.map +0 -1
  241. package/dist-es/calendar/internal/CalendarNavigation.css.js +0 -4
  242. package/dist-es/calendar/internal/CalendarNavigation.js +0 -214
  243. package/dist-es/calendar/internal/CalendarNavigation.js.map +0 -1
  244. package/dist-es/calendar/useSelection.js +0 -242
  245. package/dist-es/calendar/useSelection.js.map +0 -1
  246. package/dist-es/date-input/DateInput.js +0 -279
  247. package/dist-es/date-input/DateInput.js.map +0 -1
  248. package/dist-es/date-picker/DatePickerPanel.js +0 -151
  249. package/dist-es/date-picker/DatePickerPanel.js.map +0 -1
  250. package/dist-es/slider/internal/SliderHandle.js +0 -40
  251. package/dist-es/slider/internal/SliderHandle.js.map +0 -1
  252. package/dist-es/slider/internal/SliderMarkLabels.js +0 -41
  253. package/dist-es/slider/internal/SliderMarkLabels.js.map +0 -1
  254. package/dist-es/slider/internal/SliderRail.js +0 -21
  255. package/dist-es/slider/internal/SliderRail.js.map +0 -1
  256. package/dist-es/slider/internal/SliderRailMarks.js +0 -44
  257. package/dist-es/slider/internal/SliderRailMarks.js.map +0 -1
  258. package/dist-es/slider/internal/styles.js +0 -91
  259. package/dist-es/slider/internal/styles.js.map +0 -1
  260. package/dist-es/slider/internal/useSliderKeyDown.js +0 -46
  261. package/dist-es/slider/internal/useSliderKeyDown.js.map +0 -1
  262. package/dist-es/slider/internal/useSliderMouseDown.js +0 -92
  263. package/dist-es/slider/internal/useSliderMouseDown.js.map +0 -1
  264. package/dist-types/calendar/internal/CalendarNavigation.d.ts +0 -16
  265. package/dist-types/calendar/useSelection.d.ts +0 -78
  266. package/dist-types/date-input/DateInput.d.ts +0 -60
  267. package/dist-types/date-picker/DatePickerPanel.d.ts +0 -10
  268. package/dist-types/slider/internal/SliderHandle.d.ts +0 -11
  269. package/dist-types/slider/internal/SliderMarkLabels.d.ts +0 -7
  270. package/dist-types/slider/internal/SliderRail.d.ts +0 -1
  271. package/dist-types/slider/internal/SliderRailMarks.d.ts +0 -12
  272. package/dist-types/slider/internal/styles.d.ts +0 -10
  273. package/dist-types/slider/internal/useSliderKeyDown.d.ts +0 -4
  274. package/dist-types/slider/internal/useSliderMouseDown.d.ts +0 -4
  275. /package/dist-cjs/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
  276. /package/dist-es/calendar/{internal/CalendarNavigation.css.js.map → CalendarNavigation.css.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n forwardRef,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, type ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, type DropdownBaseProps } from \"../../dropdown\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport overflowPanelCss from \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-overflow-panel\",\n css: overflowPanelCss,\n window: targetWindow,\n });\n\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen || false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n triggerButtonIcon ?? triggerButtonLabel === undefined ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n }\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return cloneElement(item.value as ReactElement, formFieldProps);\n }\n return (\n <ToolbarField {...formFieldProps} key={item.id}>\n {item.value}\n </ToolbarField>\n );\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["overflowPanelCss","useId"],"mappings":"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"}
1
+ {"version":3,"file":"OverflowPanel.js","sources":["../src/toolbar/overflow-panel/OverflowPanel.tsx"],"sourcesContent":["import {\n Button,\n makePrefixer,\n useControlled,\n useIdMemo as useId,\n} from \"@salt-ds/core\";\nimport { OverflowMenuIcon } from \"@salt-ds/icons\";\nimport { clsx } from \"clsx\";\nimport {\n type ForwardedRef,\n type MouseEvent,\n type ReactElement,\n cloneElement,\n forwardRef,\n useCallback,\n useRef,\n} from \"react\";\nimport { ToolbarField, type ToolbarFieldProps } from \"../toolbar-field\";\nimport { OverflowSeparator } from \"./OverflowSeparator\";\n\nimport {\n useCollectionItems,\n useKeyboardNavigationPanel,\n} from \"../../common-hooks\";\n\nimport { DropdownBase, type DropdownBaseProps } from \"../../dropdown\";\n\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport overflowPanelCss from \"./OverflowPanel.css\";\n\nconst withBaseName = makePrefixer(\"saltOverflowPanel\");\n\nexport interface DropdownPanelProps extends DropdownBaseProps {\n /**\n * Trigger button icon\n */\n triggerButtonIcon?: JSX.Element;\n /**\n * Trigger button text\n */\n triggerButtonLabel?: string;\n}\n\nexport const OverflowPanel = forwardRef(function DropdownPanel(\n {\n children,\n className,\n defaultIsOpen,\n isOpen: isOpenProp,\n onOpenChange,\n triggerButtonIcon,\n triggerButtonLabel,\n ...props\n }: DropdownPanelProps,\n forwardedRef?: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-overflow-panel\",\n css: overflowPanelCss,\n window: targetWindow,\n });\n\n const id = useId();\n const collectionHook = useCollectionItems<ReactElement>({\n id,\n children,\n });\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const [isOpen, setIsOpen] = useControlled<boolean>({\n controlled: isOpenProp,\n default: defaultIsOpen || false,\n name: \"DropdownPanel\",\n });\n\n const { highlightedIndex: highlightedIdx, ...keyboardHook } =\n useKeyboardNavigationPanel({\n cycleFocus: true,\n defaultHighlightedIndex: 0,\n focusOnHighlight: true,\n indexPositions: collectionHook.data,\n });\n\n const focusTrigger = useCallback(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, []);\n\n const setPanelRef = useCallback((el: HTMLElement | null) => el?.focus(), []);\n\n const handleItemClick = (evt: MouseEvent) => {\n // if (sourceItem.props[\"data-close-on-click\"] !== false) closeMenu();\n setIsOpen(false);\n focusTrigger();\n };\n\n const handleOpenChange = (open: boolean) => {\n setIsOpen(open);\n onOpenChange?.(open);\n };\n\n const getTriggerButtonIcon = () =>\n (triggerButtonIcon ?? triggerButtonLabel === undefined) ? (\n <OverflowMenuIcon />\n ) : undefined;\n\n return (\n <DropdownBase\n {...props}\n className={clsx(withBaseName(), className)}\n isOpen={isOpen}\n onOpenChange={handleOpenChange}\n placement=\"bottom-end\"\n ref={forwardedRef}\n >\n <Button variant=\"secondary\" ref={triggerRef}>\n {getTriggerButtonIcon()}\n {triggerButtonLabel}\n </Button>\n <div\n className={withBaseName(\"content\")}\n ref={setPanelRef}\n tabIndex={-1}\n {...keyboardHook.listProps}\n >\n {collectionHook.data.map((item) => {\n const { type } = item.value as ReactElement;\n if (type === OverflowSeparator) {\n return item.value;\n }\n const formFieldProps = {\n id: item.id,\n inOverflowPanel: true,\n key: item.id,\n onClick: handleItemClick,\n } as ToolbarFieldProps;\n\n if (type === ToolbarField) {\n return cloneElement(item.value as ReactElement, formFieldProps);\n }\n return (\n <ToolbarField {...formFieldProps} key={item.id}>\n {item.value}\n </ToolbarField>\n );\n })}\n </div>\n </DropdownBase>\n );\n});\n"],"names":["overflowPanelCss","useId"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,YAAA,GAAe,aAAa,mBAAmB,CAAA,CAAA;AAaxC,MAAA,aAAA,GAAgB,UAAW,CAAA,SAAS,aAC/C,CAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAQ,EAAA,UAAA;AAAA,EACR,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACG,GAAA,KAAA;AACL,CAAA,EACA,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,qBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,KAAKC,SAAM,EAAA,CAAA;AACjB,EAAA,MAAM,iBAAiB,kBAAiC,CAAA;AAAA,IACtD,EAAA;AAAA,IACA,QAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,UAAA,GAAa,OAA0B,IAAI,CAAA,CAAA;AACjD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,aAAuB,CAAA;AAAA,IACjD,UAAY,EAAA,UAAA;AAAA,IACZ,SAAS,aAAiB,IAAA,KAAA;AAAA,IAC1B,IAAM,EAAA,eAAA;AAAA,GACP,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,gBAAA,EAAkB,cAAmB,EAAA,GAAA,YAAA,KAC3C,0BAA2B,CAAA;AAAA,IACzB,UAAY,EAAA,IAAA;AAAA,IACZ,uBAAyB,EAAA,CAAA;AAAA,IACzB,gBAAkB,EAAA,IAAA;AAAA,IAClB,gBAAgB,cAAe,CAAA,IAAA;AAAA,GAChC,CAAA,CAAA;AAEH,EAAM,MAAA,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,UAAA,CAAW,QAAQ,KAAM,EAAA,CAAA;AAAA,KAC3B;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEL,EAAA,MAAM,cAAc,WAAY,CAAA,CAAC,OAA2B,EAAI,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,EAAS,EAAE,CAAA,CAAA;AAE3E,EAAM,MAAA,eAAA,GAAkB,CAAC,GAAoB,KAAA;AAE3C,IAAA,SAAA,CAAU,KAAK,CAAA,CAAA;AACf,IAAa,YAAA,EAAA,CAAA;AAAA,GACf,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmB,CAAC,IAAkB,KAAA;AAC1C,IAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AACd,IAAe,YAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,YAAA,CAAA,IAAA,CAAA,CAAA;AAAA,GACjB,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAC1B,CAAA,iBAAA,IAAA,IAAA,GAAA,iBAAA,GAAqB,uBAAuB,KAC3C,CAAA,oBAAA,GAAA,CAAC,oBAAiB,CAChB,GAAA,KAAA,CAAA,CAAA;AAEN,EAAA,uBACG,IAAA,CAAA,YAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,SAAW,EAAA,IAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,IACzC,MAAA;AAAA,IACA,YAAc,EAAA,gBAAA;AAAA,IACd,SAAU,EAAA,YAAA;AAAA,IACV,GAAK,EAAA,YAAA;AAAA,IAEL,QAAA,EAAA;AAAA,sBAAC,IAAA,CAAA,MAAA,EAAA;AAAA,QAAO,OAAQ,EAAA,WAAA;AAAA,QAAY,GAAK,EAAA,UAAA;AAAA,QAC9B,QAAA,EAAA;AAAA,UAAqB,oBAAA,EAAA;AAAA,UACrB,kBAAA;AAAA,SAAA;AAAA,OACH,CAAA;AAAA,sBACC,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,SAAA,EAAW,aAAa,SAAS,CAAA;AAAA,QACjC,GAAK,EAAA,WAAA;AAAA,QACL,QAAU,EAAA,CAAA,CAAA;AAAA,QACT,GAAG,YAAa,CAAA,SAAA;AAAA,QAEhB,QAAe,EAAA,cAAA,CAAA,IAAA,CAAK,GAAI,CAAA,CAAC,IAAS,KAAA;AACjC,UAAM,MAAA,EAAE,IAAK,EAAA,GAAI,IAAK,CAAA,KAAA,CAAA;AACtB,UAAA,IAAI,SAAS,iBAAmB,EAAA;AAC9B,YAAA,OAAO,IAAK,CAAA,KAAA,CAAA;AAAA,WACd;AACA,UAAA,MAAM,cAAiB,GAAA;AAAA,YACrB,IAAI,IAAK,CAAA,EAAA;AAAA,YACT,eAAiB,EAAA,IAAA;AAAA,YACjB,KAAK,IAAK,CAAA,EAAA;AAAA,YACV,OAAS,EAAA,eAAA;AAAA,WACX,CAAA;AAEA,UAAA,IAAI,SAAS,YAAc,EAAA;AACzB,YAAO,OAAA,YAAA,CAAa,IAAK,CAAA,KAAA,EAAuB,cAAc,CAAA,CAAA;AAAA,WAChE;AACA,UAAA,uBACG,aAAA,CAAA,YAAA,EAAA;AAAA,YAAc,GAAG,cAAA;AAAA,YAAgB,KAAK,IAAK,CAAA,EAAA;AAAA,WAAA,EACzC,KAAK,KACR,CAAA,CAAA;AAAA,SAEH,CAAA;AAAA,OACH,CAAA;AAAA,KAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC;;;;"}
@@ -1,12 +1,69 @@
1
+ import { type ComponentPropsWithoutRef, type ReactNode } from "react";
1
2
  import { type CalendarCarouselProps } from "./internal/CalendarCarousel";
2
- import { type CalendarNavigationProps } from "./internal/CalendarNavigation";
3
- import { type useCalendarProps } from "./useCalendar";
4
- export declare type CalendarProps = useCalendarProps & {
3
+ import { type UseCalendarMultiSelectProps, type UseCalendarOffsetProps, type UseCalendarRangeProps, type UseCalendarSingleProps } from "./useCalendar";
4
+ /**
5
+ * Base props for the Calendar component.
6
+ */
7
+ export interface CalendarBaseProps extends ComponentPropsWithoutRef<"div"> {
8
+ /**
9
+ * The content to be rendered inside the Calendar.
10
+ */
11
+ children?: ReactNode;
12
+ /**
13
+ * Additional class names to apply to the Calendar.
14
+ */
5
15
  className?: string;
16
+ /**
17
+ * Function to render the contents of a day.
18
+ */
6
19
  renderDayContents?: CalendarCarouselProps["renderDayContents"];
7
- hideYearDropdown?: CalendarNavigationProps["hideYearDropdown"];
8
- borderedDropdown?: CalendarNavigationProps["borderedDropdown"];
20
+ /**
21
+ * Props for the tooltip component.
22
+ */
9
23
  TooltipProps?: CalendarCarouselProps["TooltipProps"];
24
+ /**
25
+ * If `true`, hides dates that are out of the selectable range.
26
+ */
10
27
  hideOutOfRangeDates?: CalendarCarouselProps["hideOutOfRangeDates"];
11
- };
28
+ }
29
+ /**
30
+ * Props for the Calendar component with single date selection.
31
+ */
32
+ export interface CalendarSingleProps extends CalendarBaseProps, UseCalendarSingleProps {
33
+ /**
34
+ * The selection variant, set to "single".
35
+ */
36
+ selectionVariant: "single";
37
+ }
38
+ /**
39
+ * Props for the Calendar component with date range selection.
40
+ */
41
+ export interface CalendarRangeProps extends CalendarBaseProps, UseCalendarRangeProps {
42
+ /**
43
+ * The selection variant, set to "range".
44
+ */
45
+ selectionVariant: "range";
46
+ }
47
+ /**
48
+ * Props for the Calendar component with multi-select date selection.
49
+ */
50
+ export interface CalendarMultiSelectProps extends CalendarBaseProps, UseCalendarMultiSelectProps {
51
+ /**
52
+ * The selection variant, set to "multiselect".
53
+ */
54
+ selectionVariant: "multiselect";
55
+ }
56
+ /**
57
+ * Props for the Calendar component with offset date selection.
58
+ */
59
+ export interface CalendarOffsetProps extends CalendarBaseProps, UseCalendarOffsetProps {
60
+ /**
61
+ * The selection variant, set to "offset".
62
+ */
63
+ selectionVariant: "offset";
64
+ }
65
+ /**
66
+ * Type representing the props for the Calendar component with various selection variants.
67
+ */
68
+ export declare type CalendarProps = CalendarSingleProps | CalendarRangeProps | CalendarMultiSelectProps | CalendarOffsetProps;
12
69
  export declare const Calendar: import("react").ForwardRefExoticComponent<CalendarProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,57 @@
1
+ import { type ButtonProps, type DropdownProps } from "@salt-ds/core";
2
+ import { type ComponentPropsWithRef } from "react";
3
+ import { type DateValue } from "@internationalized/date";
4
+ declare type DateDropdownProps = DropdownProps<DateValue>;
5
+ /**
6
+ * Props for the CalendarNavigation component.
7
+ */
8
+ export interface CalendarNavigationProps extends ComponentPropsWithRef<"div"> {
9
+ /**
10
+ * Props for the month dropdown component.
11
+ */
12
+ MonthDropdownProps?: DateDropdownProps;
13
+ /**
14
+ * Props for the year dropdown component.
15
+ */
16
+ YearDropdownProps?: DateDropdownProps;
17
+ /**
18
+ * Callback fired when a month is selected.
19
+ * @param event - The change event.
20
+ */
21
+ onMonthSelect?: DateDropdownProps["onChange"];
22
+ /**
23
+ * Callback fired when a year is selected.
24
+ * @param event - The change event.
25
+ */
26
+ onYearSelect?: DateDropdownProps["onChange"];
27
+ /**
28
+ * Callback fired when navigating to the next month.
29
+ * @param event - The click event.
30
+ */
31
+ onNavigateNext?: ButtonProps["onClick"];
32
+ /**
33
+ * Callback fired when navigating to the previous month.
34
+ * @param event - The click event.
35
+ */
36
+ onNavigatePrevious?: ButtonProps["onClick"];
37
+ /**
38
+ * If `true`, hides the year dropdown.
39
+ */
40
+ hideYearDropdown?: boolean;
41
+ /**
42
+ * The step value for navigation. Defaults to 1.
43
+ */
44
+ step?: number;
45
+ /**
46
+ * Format the month dropdown values
47
+ * @param date
48
+ */
49
+ formatMonth?: (date: DateValue) => string;
50
+ /**
51
+ * Format the year dropdown values
52
+ * @param date
53
+ */
54
+ formatYear?: (date: DateValue) => string;
55
+ }
56
+ export declare const CalendarNavigation: import("react").ForwardRefExoticComponent<Omit<CalendarNavigationProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
57
+ export {};
@@ -0,0 +1,14 @@
1
+ import { type DateValue } from "@internationalized/date";
2
+ /**
3
+ * Gets the current locale from the browser.
4
+ * @returns The current locale as a string.
5
+ */
6
+ export declare function getCurrentLocale(): string;
7
+ /**
8
+ * Formats a date value according to the specified locale and options.
9
+ * @param date - The date value to format.
10
+ * @param locale - The locale to use for formatting. Defaults to the current locale.
11
+ * @param options - Additional options for date formatting.
12
+ * @returns The formatted date as a string.
13
+ */
14
+ export declare function formatDate(date: DateValue | null, locale?: string, options?: Intl.DateTimeFormatOptions): string;
@@ -1,4 +1,6 @@
1
1
  export * from "./Calendar";
2
+ export * from "./CalendarNavigation";
2
3
  export * from "./useCalendarDay";
3
4
  export * from "./useCalendar";
4
- export * from "./useSelection";
5
+ export * from "./useCalendarSelection";
6
+ export * from "./formatDate";
@@ -2,10 +2,11 @@ import type { DateValue } from "@internationalized/date";
2
2
  import { type TooltipProps } from "@salt-ds/core";
3
3
  import { type ComponentPropsWithRef, type ReactElement } from "react";
4
4
  import { type DayStatus } from "../useCalendarDay";
5
+ import { formatDate as defaultFormatDate } from "./utils";
5
6
  export declare type DateFormatter = (day: Date) => string | undefined;
6
7
  export interface CalendarDayProps extends Omit<ComponentPropsWithRef<"button">, "children"> {
7
8
  day: DateValue;
8
- formatDate?: DateFormatter;
9
+ formatDate?: typeof defaultFormatDate;
9
10
  renderDayContents?: (date: DateValue, status: DayStatus) => ReactElement;
10
11
  status?: DayStatus;
11
12
  month: DateValue;
@@ -1,5 +1,5 @@
1
1
  import { type ComponentPropsWithRef } from "react";
2
- export declare type CalendarWeekHeaderProps = ComponentPropsWithRef<"div">;
3
- export declare const CalendarWeekHeader: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
4
- ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
5
- }, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
2
+ export declare type CalendarWeekHeaderProps = ComponentPropsWithRef<"div"> & {
3
+ locale: string;
4
+ };
5
+ export declare const CalendarWeekHeader: import("react").ForwardRefExoticComponent<Omit<CalendarWeekHeaderProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,7 +1,8 @@
1
1
  import { type DateValue } from "@internationalized/date";
2
2
  import type { FocusEventHandler, KeyboardEventHandler, MouseEventHandler } from "react";
3
- export declare function useFocusManagement({ date }: {
3
+ export declare function useFocusManagement({ date, locale, }: {
4
4
  date: DateValue;
5
+ locale: string;
5
6
  }): {
6
7
  handleClick: MouseEventHandler<HTMLButtonElement>;
7
8
  handleKeyDown: KeyboardEventHandler<HTMLButtonElement>;
@@ -1,15 +1,14 @@
1
- import { DateFormatter, type DateValue } from "@internationalized/date";
2
- export declare function getCurrentLocale(): string;
3
- export declare function getDateFormatter(options?: Intl.DateTimeFormatOptions): DateFormatter;
4
- export declare function formatDate(date: DateValue, options?: Intl.DateTimeFormatOptions): string;
5
- export declare function getCalender(): import("@internationalized/date").Calendar;
1
+ import { type CalendarDate, type DateValue } from "@internationalized/date";
2
+ export declare function formatDate(date: DateValue, locale: string, options?: Intl.DateTimeFormatOptions): string;
3
+ export declare function getCalendar(locale: string): import("@internationalized/date").Calendar;
6
4
  declare type WeekdayFormat = Intl.DateTimeFormatOptions["weekday"];
7
- export declare function daysForLocale(weekday?: WeekdayFormat): string[];
8
- export declare function monthsForLocale(currentYear: DateValue): (import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime)[];
9
- export declare function generateVisibleDays(currentMonth: DateValue): {
5
+ export declare function daysForLocale(weekday: WeekdayFormat, locale: string): string[];
6
+ export declare function monthsForLocale(currentYear: DateValue, locale: string): (CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime)[];
7
+ export declare function generateVisibleDays(currentMonth: DateValue, locale: string): {
10
8
  date: DateValue;
11
9
  dateOfMonth: number;
12
10
  isCurrentMonth: boolean;
13
11
  }[];
14
12
  export declare function monthDiff(a: DateValue, b: DateValue): number;
13
+ export declare function generateDatesForMonth(date: DateValue): CalendarDate[];
15
14
  export {};
@@ -1,33 +1,116 @@
1
1
  import { type DateValue } from "@internationalized/date";
2
2
  import { type SyntheticEvent } from "react";
3
- import { type UseMultiSelectionCalendarProps, type UseOffsetSelectionCalendarProps, type UseRangeSelectionCalendarProps, type UseSingleSelectionCalendarProps } from "./useSelection";
4
- interface BaseUseCalendarProps {
3
+ import { type UseCalendarSelectionMultiSelectProps, type UseCalendarSelectionOffsetProps, type UseCalendarSelectionRangeProps, type UseCalendarSelectionSingleProps } from "./useCalendarSelection";
4
+ /**
5
+ * Interface representing the base properties UseCalendar hook.
6
+ */
7
+ interface UseCalendarBaseProps {
8
+ /**
9
+ * The default visible month.
10
+ */
5
11
  defaultVisibleMonth?: DateValue;
12
+ /**
13
+ * Callback fired when the visible month changes.
14
+ * @param event - The synthetic event.
15
+ * @param visibleMonth - The new visible month.
16
+ */
6
17
  onVisibleMonthChange?: (event: SyntheticEvent, visibleMonth: DateValue) => void;
18
+ /**
19
+ * Function to determine if a day is unselectable.
20
+ * @param date - The date to check.
21
+ * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.
22
+ */
7
23
  isDayUnselectable?: (date: DateValue) => string | false | undefined;
24
+ /**
25
+ * Function to determine if a day is highlighted.
26
+ * @param date - The date to check.
27
+ * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.
28
+ */
8
29
  isDayHighlighted?: (date: DateValue) => string | false | undefined;
9
- isDayDisabled?: (date: DateValue) => boolean;
30
+ /**
31
+ * Function to determine if a day is disabled.
32
+ * @param date - The date to check.
33
+ * @returns A string reason if the day is disabled, otherwise `false` or `undefined`.
34
+ */
35
+ isDayDisabled?: (date: DateValue) => string | false | undefined;
36
+ /**
37
+ * The currently visible month.
38
+ */
10
39
  visibleMonth?: DateValue;
40
+ /**
41
+ * If `true`, hides dates that are out of the selectable range.
42
+ */
11
43
  hideOutOfRangeDates?: boolean;
12
- hideYearDropdown?: boolean;
44
+ /**
45
+ * The minimum selectable date.
46
+ */
13
47
  minDate?: DateValue;
48
+ /**
49
+ * The maximum selectable date.
50
+ */
14
51
  maxDate?: DateValue;
52
+ /**
53
+ * The time zone used for date calculations.
54
+ */
55
+ timeZone?: string;
56
+ /**
57
+ * The locale used for date formatting.
58
+ */
59
+ locale?: string;
15
60
  }
16
- export declare type useCalendarProps = (Omit<UseSingleSelectionCalendarProps, "isDaySelectable"> | Omit<UseMultiSelectionCalendarProps, "isDaySelectable"> | Omit<UseRangeSelectionCalendarProps, "isDaySelectable"> | Omit<UseOffsetSelectionCalendarProps, "isDaySelectable">) & BaseUseCalendarProps;
17
- export declare function useCalendar(props: useCalendarProps): {
61
+ /**
62
+ * UseCalendar hook props for a single date selection Calendar.
63
+ */
64
+ export interface UseCalendarSingleProps extends UseCalendarSelectionSingleProps, UseCalendarBaseProps {
65
+ /**
66
+ * The selection variant, set to "single".
67
+ */
68
+ selectionVariant: "single";
69
+ }
70
+ /**
71
+ * UseCalendar hook props for a date range selection Calendar.
72
+ */
73
+ export interface UseCalendarRangeProps extends UseCalendarSelectionRangeProps, UseCalendarBaseProps {
74
+ /**
75
+ * The selection variant, set to "range".
76
+ */
77
+ selectionVariant: "range";
78
+ }
79
+ /**
80
+ * UseCalendar hook props for a multi-select Calendar.
81
+ */
82
+ export interface UseCalendarMultiSelectProps extends UseCalendarSelectionMultiSelectProps, UseCalendarBaseProps {
83
+ /**
84
+ * The selection variant, set to "multiselect".
85
+ */
86
+ selectionVariant: "multiselect";
87
+ }
88
+ /**
89
+ * UseCalendar hook props for an offset date selection Calendar.
90
+ */
91
+ export interface UseCalendarOffsetProps extends UseCalendarSelectionOffsetProps, UseCalendarBaseProps {
92
+ /**
93
+ * The selection variant, set to "offset".
94
+ */
95
+ selectionVariant: "offset";
96
+ }
97
+ /**
98
+ * UseCalendar hook props, wth the selection variant determining the return type of the date selection
99
+ */
100
+ export declare type UseCalendarProps = UseCalendarSingleProps | UseCalendarRangeProps | UseCalendarMultiSelectProps | UseCalendarOffsetProps;
101
+ export declare function useCalendar(props: UseCalendarProps): {
18
102
  state: {
19
- selectedDate: import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime | import("./useSelection").RangeSelectionValueType | {
20
- startDate?: DateValue | undefined;
21
- endDate?: DateValue | undefined;
22
- } | DateValue[] | null | undefined;
103
+ selectedDate: import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime | import("./useCalendarSelection").DateRangeSelection | import("./useCalendarSelection").MultipleDateSelection | null | undefined;
23
104
  hoveredDate: import("@internationalized/date").CalendarDate | import("@internationalized/date").CalendarDateTime | import("@internationalized/date").ZonedDateTime | null | undefined;
24
105
  visibleMonth: DateValue;
25
- focusedDate: DateValue;
106
+ focusedDate: DateValue | null;
26
107
  minDate: DateValue | undefined;
27
108
  maxDate: DateValue | undefined;
28
- selectionVariant: "offset" | "range" | "default" | "multiselect";
109
+ selectionVariant: "offset" | "range" | "single" | "multiselect";
29
110
  hideOutOfRangeDates: boolean | undefined;
30
111
  calendarFocused: boolean;
112
+ timeZone: string;
113
+ locale: string;
31
114
  };
32
115
  helpers: {
33
116
  setSelectedDate: (event: SyntheticEvent<HTMLButtonElement, Event>, newSelectedDate: DateValue) => void;
@@ -39,16 +122,17 @@ export declare function useCalendar(props: useCalendarProps): {
39
122
  isSelectedStart: (date: DateValue) => boolean;
40
123
  isSelectedEnd: (date: DateValue) => boolean;
41
124
  isHoveredOffset: (date: DateValue) => boolean;
125
+ isDaySelectable: ((date: DateValue) => boolean) | undefined;
42
126
  setVisibleMonth: (event: SyntheticEvent, newVisibleMonth: DateValue) => void;
43
127
  setFocusedDate: (event: SyntheticEvent, date: DateValue) => void;
44
128
  setCalendarFocused: import("react").Dispatch<import("react").SetStateAction<boolean>>;
45
129
  isDayUnselectable: (date: DateValue) => string | false | undefined;
46
130
  isDayHighlighted: (date: DateValue) => string | false | undefined;
47
- isDayDisabled: (date: DateValue) => boolean;
131
+ isDayDisabled: (date: DateValue) => string | false | undefined;
48
132
  isDayVisible: (date: DateValue) => boolean;
49
- isOutsideAllowedDates: (date: DateValue) => boolean;
50
- isOutsideAllowedMonths: (date: DateValue) => boolean;
51
- isOutsideAllowedYears: (date: DateValue) => boolean;
133
+ isOutsideAllowedDates: (date: DateValue) => boolean | undefined;
134
+ isOutsideAllowedMonths: (date: DateValue) => boolean | undefined;
135
+ isOutsideAllowedYears: (date: DateValue) => boolean | undefined;
52
136
  };
53
137
  };
54
138
  export {};
@@ -1,17 +1,53 @@
1
1
  import { type DateValue } from "@internationalized/date";
2
2
  import { type RefObject } from "react";
3
+ /**
4
+ * Interface representing the status of a day in the Calendar.
5
+ */
3
6
  export interface DayStatus {
7
+ /**
8
+ * If `true`, the day is out of the selectable range.
9
+ */
4
10
  outOfRange?: boolean;
11
+ /**
12
+ * If `true`, the day is selected.
13
+ */
5
14
  selected?: boolean;
15
+ /**
16
+ * If `true`, the day is today.
17
+ */
6
18
  today?: boolean;
19
+ /**
20
+ * If set, the day is unselectable with a reason.
21
+ */
7
22
  unselectable?: string | false;
23
+ /**
24
+ * If set, the day is highlighted with a reason.
25
+ */
8
26
  highlighted?: string | false;
27
+ /**
28
+ * If `true`, the day is focused.
29
+ */
9
30
  focused?: boolean;
31
+ /**
32
+ * If `true`, the day is disabled.
33
+ */
10
34
  disabled?: boolean;
35
+ /**
36
+ * If `true`, the day is hidden.
37
+ */
11
38
  hidden?: boolean;
12
39
  }
40
+ /**
41
+ * UseCalendar hook props to return a calendar day's status
42
+ */
13
43
  export interface useCalendarDayProps {
44
+ /**
45
+ * The date of the calendar day.
46
+ */
14
47
  date: DateValue;
48
+ /**
49
+ * The month of the calendar day.
50
+ */
15
51
  month: DateValue;
16
52
  }
17
53
  export declare function useCalendarDay({ date, month }: useCalendarDayProps, ref: RefObject<HTMLElement>): {
@@ -19,4 +55,6 @@ export declare function useCalendarDay({ date, month }: useCalendarDayProps, ref
19
55
  dayProps: Omit<import("react").DetailedHTMLProps<import("react").ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">;
20
56
  unselectableReason: string | false | undefined;
21
57
  highlightedReason: string | false | undefined;
58
+ locale: string;
59
+ timeZone: string;
22
60
  };
@@ -0,0 +1,189 @@
1
+ import { CalendarDate, CalendarDateTime, type DateValue, ZonedDateTime } from "@internationalized/date";
2
+ import type { KeyboardEventHandler, MouseEventHandler, SyntheticEvent } from "react";
3
+ /**
4
+ * Type representing a single date selection.
5
+ */
6
+ export declare type SingleDateSelection = DateValue;
7
+ /**
8
+ * Type representing multiple date selections.
9
+ */
10
+ export declare type MultipleDateSelection = DateValue[];
11
+ /**
12
+ * Type representing a date range selection.
13
+ */
14
+ export declare type DateRangeSelection = {
15
+ /**
16
+ * The start date of the range.
17
+ */
18
+ startDate?: DateValue | null;
19
+ /**
20
+ * The end date of the range.
21
+ */
22
+ endDate?: DateValue | null;
23
+ };
24
+ /**
25
+ * Type representing all possible selection value types.
26
+ */
27
+ export declare type AllSelectionValueType = SingleDateSelection | MultipleDateSelection | DateRangeSelection | null;
28
+ /**
29
+ * The default minimum year used by the calendar.
30
+ */
31
+ export declare const CALENDAR_MIN_YEAR = 1900;
32
+ /**
33
+ * The default maximum year used by the calendar.
34
+ */
35
+ export declare const CALENDAR_MAX_YEAR = 2100;
36
+ /**
37
+ * Checks if a value is a single date selection.
38
+ * @param value - The value to check.
39
+ * @returns `true` if the value is a single date selection, otherwise `false`.
40
+ */
41
+ export declare function isSingleSelectionValueType(value: any): value is DateValue;
42
+ /**
43
+ * Checks if a value is a date range selection.
44
+ * @param value - The value to check.
45
+ * @returns `true` if the value is a date range selection, otherwise `false`.
46
+ */
47
+ export declare function isDateRangeSelection(value: any): value is DateRangeSelection;
48
+ /**
49
+ * Checks if a value is a multiple date selection.
50
+ * @param value - The value to check.
51
+ * @returns `true` if the value is a multiple date selection, otherwise `false`.
52
+ */
53
+ export declare function isMultipleDateSelection(value: any): value is MultipleDateSelection;
54
+ /**
55
+ * Base properties for calendar UseCalendarSelection hook.
56
+ * @template SelectionVariantType - The type of the selection variant.
57
+ */
58
+ interface UseCalendarSelectionBaseProps<SelectionVariantType> {
59
+ /**
60
+ * The currently hovered date.
61
+ */
62
+ hoveredDate?: DateValue | null;
63
+ /**
64
+ * The currently selected date.
65
+ */
66
+ selectedDate?: SelectionVariantType | null;
67
+ /**
68
+ * The default selected date.
69
+ */
70
+ defaultSelectedDate?: SelectionVariantType;
71
+ /**
72
+ * Callback fired when the selected date changes.
73
+ * @param event - The synthetic event.
74
+ * @param selectedDate - The new selected date.
75
+ */
76
+ onSelectedDateChange?: (event: SyntheticEvent, selectedDate: SelectionVariantType | null) => void;
77
+ /**
78
+ * Function to determine if a day is selectable.
79
+ * @param date - The date to check.
80
+ * @returns `true` if the day is selectable, otherwise `false`.
81
+ */
82
+ isDaySelectable?: (date: DateValue) => boolean;
83
+ /**
84
+ * Callback fired when the hovered date changes.
85
+ * @param event - The synthetic event.
86
+ * @param hoveredDate - The new hovered date.
87
+ */
88
+ onHoveredDateChange?: (event: SyntheticEvent, hoveredDate: DateValue | null) => void;
89
+ /**
90
+ * Function to select a new date.
91
+ * @param currentSelectedDate - The current selected date.
92
+ * @param newSelectedDate - The new date to select.
93
+ * @returns The updated selection variant type.
94
+ */
95
+ select?: (currentSelectedDate: SelectionVariantType, newSelectedDate: DateValue) => SelectionVariantType;
96
+ }
97
+ /**
98
+ * UseCalendar hook props to return a calendar day's status
99
+ */
100
+ export interface UseCalendarSelectionOffsetProps extends Omit<UseCalendarSelectionBaseProps<DateRangeSelection>, "startDateOffset" | "endDateOffset"> {
101
+ /**
102
+ * The selection variant, set to "offset".
103
+ */
104
+ selectionVariant: "offset";
105
+ /**
106
+ * Function to calculate the start date offset.
107
+ * @param date - The date to offset.
108
+ * @returns The offset start date.
109
+ */
110
+ startDateOffset?: (date: DateValue) => DateValue;
111
+ /**
112
+ * Function to calculate the end date offset.
113
+ * @param date - The date to offset.
114
+ * @returns The offset end date.
115
+ */
116
+ endDateOffset?: (date: DateValue) => DateValue;
117
+ }
118
+ /**
119
+ * Properties for the range date selection hook.
120
+ */
121
+ export interface UseCalendarSelectionRangeProps extends UseCalendarSelectionBaseProps<DateRangeSelection> {
122
+ /**
123
+ * The selection variant, set to "range".
124
+ */
125
+ selectionVariant: "range";
126
+ }
127
+ /**
128
+ * Properties for the multi-select date selection hook.
129
+ */
130
+ export interface UseCalendarSelectionMultiSelectProps extends UseCalendarSelectionBaseProps<MultipleDateSelection> {
131
+ /**
132
+ * The selection variant, set to "multiselect".
133
+ */
134
+ selectionVariant: "multiselect";
135
+ }
136
+ /**
137
+ * Properties for the single date selection hook.
138
+ */
139
+ export interface UseCalendarSelectionSingleProps extends UseCalendarSelectionBaseProps<SingleDateSelection> {
140
+ /**
141
+ * The selection variant, set to "single".
142
+ */
143
+ selectionVariant: "single";
144
+ }
145
+ /**
146
+ * UseCalendarSelection hook props, wth the selection variant determining the return type of the date selection
147
+ */
148
+ export declare type UseCalendarSelectionProps = UseCalendarSelectionSingleProps | UseCalendarSelectionMultiSelectProps | UseCalendarSelectionRangeProps | UseCalendarSelectionOffsetProps;
149
+ export declare function useCalendarSelection(props: UseCalendarSelectionProps): {
150
+ state: {
151
+ selectedDate: CalendarDate | CalendarDateTime | ZonedDateTime | DateRangeSelection | MultipleDateSelection | null | undefined;
152
+ hoveredDate: CalendarDate | CalendarDateTime | ZonedDateTime | null | undefined;
153
+ };
154
+ helpers: {
155
+ setSelectedDate: (event: SyntheticEvent<HTMLButtonElement>, newSelectedDate: DateValue) => void;
156
+ isSelected: (date: DateValue) => boolean;
157
+ setHoveredDate: (event: SyntheticEvent, date: DateValue | null) => void;
158
+ isHovered: (date: DateValue) => boolean;
159
+ isSelectedSpan: (date: DateValue) => boolean;
160
+ isHoveredSpan: (date: DateValue) => boolean;
161
+ isSelectedStart: (date: DateValue) => boolean;
162
+ isSelectedEnd: (date: DateValue) => boolean;
163
+ isHoveredOffset: (date: DateValue) => boolean;
164
+ isDaySelectable: ((date: DateValue) => boolean) | undefined;
165
+ };
166
+ };
167
+ export declare function useCalendarSelectionDay({ date }: {
168
+ date: DateValue;
169
+ }): {
170
+ handleClick: MouseEventHandler<HTMLButtonElement>;
171
+ handleKeyDown: KeyboardEventHandler<HTMLButtonElement>;
172
+ handleMouseOver: MouseEventHandler<HTMLButtonElement>;
173
+ handleMouseLeave: MouseEventHandler<HTMLButtonElement>;
174
+ status: {
175
+ selected: boolean;
176
+ selectedSpan: boolean;
177
+ hoveredSpan: boolean;
178
+ selectedStart: boolean;
179
+ selectedEnd: boolean;
180
+ hovered: boolean;
181
+ hoveredOffset: boolean;
182
+ };
183
+ dayProps: {
184
+ className: string;
185
+ "aria-pressed": string | undefined;
186
+ "aria-disabled": string | undefined;
187
+ };
188
+ };
189
+ export {};