@salt-ds/lab 1.0.0-alpha.76 → 1.0.0-alpha.78

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 (686) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/css/salt-lab.css +274 -79
  3. package/dist-cjs/app-header/AppHeader.js.map +1 -1
  4. package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
  5. package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
  6. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  7. package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  8. package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  9. package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  10. package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
  11. package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
  12. package/dist-cjs/button-bar/internal/ButtonBarContext.js.map +1 -1
  13. package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
  14. package/dist-cjs/button-bar/internal/useDescendant.js.map +1 -1
  15. package/dist-cjs/button-bar/internal/useDescendants.js.map +1 -1
  16. package/dist-cjs/calendar/Calendar.css.js +1 -1
  17. package/dist-cjs/calendar/Calendar.js +11 -2
  18. package/dist-cjs/calendar/Calendar.js.map +1 -1
  19. package/dist-cjs/calendar/CalendarGrid.js +38 -36
  20. package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
  21. package/dist-cjs/calendar/CalendarMonthHeader.js +1 -1
  22. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
  23. package/dist-cjs/calendar/CalendarNavigation.css.js +1 -1
  24. package/dist-cjs/calendar/CalendarNavigation.js +20 -13
  25. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  26. package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
  27. package/dist-cjs/calendar/CalendarWeekHeader.js +1 -1
  28. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  29. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  30. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  31. package/dist-cjs/calendar/internal/CalendarDay.js +26 -36
  32. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  33. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  34. package/dist-cjs/calendar/internal/CalendarMonth.js +30 -9
  35. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  36. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  37. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  38. package/dist-cjs/calendar/useCalendar.js +7 -9
  39. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  40. package/dist-cjs/calendar/useCalendarDay.js +7 -11
  41. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  42. package/dist-cjs/calendar/useCalendarSelection.js +144 -76
  43. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  44. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  45. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  46. package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
  47. package/dist-cjs/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  48. package/dist-cjs/cascading-menu/internal/keydownHandlers.js.map +1 -1
  49. package/dist-cjs/cascading-menu/internal/menuPositioning.js.map +1 -1
  50. package/dist-cjs/cascading-menu/internal/stateUtils.js.map +1 -1
  51. package/dist-cjs/cascading-menu/internal/useClickAway.js.map +1 -1
  52. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  53. package/dist-cjs/cascading-menu/internal/useMountedRef.js.map +1 -1
  54. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  55. package/dist-cjs/cascading-menu/internal/useRefsManager.js.map +1 -1
  56. package/dist-cjs/cascading-menu/internal/useStateReducer.js.map +1 -1
  57. package/dist-cjs/cascading-menu/stateChangeTypes.js.map +1 -1
  58. package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
  59. package/dist-cjs/color-chooser/Color.js.map +1 -1
  60. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  61. package/dist-cjs/color-chooser/ColorHelpers.js.map +1 -1
  62. package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
  63. package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
  64. package/dist-cjs/color-chooser/GetColorPalettes.js.map +1 -1
  65. package/dist-cjs/color-chooser/HexInput.js.map +1 -1
  66. package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
  67. package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
  68. package/dist-cjs/color-chooser/Swatch.js.map +1 -1
  69. package/dist-cjs/color-chooser/Swatches.js.map +1 -1
  70. package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
  71. package/dist-cjs/color-chooser/color-utils.js.map +1 -1
  72. package/dist-cjs/color-chooser/colorMap.js.map +1 -1
  73. package/dist-cjs/color-chooser/createTabsMapping.js.map +1 -1
  74. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  75. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  76. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  77. package/dist-cjs/combo-box-deprecated/filterHelpers.js.map +1 -1
  78. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  79. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  80. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  81. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  82. package/dist-cjs/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  83. package/dist-cjs/common-hooks/calcPreferredHeight.js.map +1 -1
  84. package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
  85. package/dist-cjs/common-hooks/itemToString.js.map +1 -1
  86. package/dist-cjs/common-hooks/keyUtils.js.map +1 -1
  87. package/dist-cjs/common-hooks/list-dom-utils.js.map +1 -1
  88. package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
  89. package/dist-cjs/common-hooks/useAutoSizer.js.map +1 -1
  90. package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
  91. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  92. package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  93. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  94. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  95. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  96. package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
  97. package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
  98. package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
  99. package/dist-cjs/common-hooks/utils/filter-utils.js.map +1 -1
  100. package/dist-cjs/common-hooks/utils/isSelected.js.map +1 -1
  101. package/dist-cjs/contact-details/ContactAction.js.map +1 -1
  102. package/dist-cjs/contact-details/ContactActions.js.map +1 -1
  103. package/dist-cjs/contact-details/ContactAvatar.js.map +1 -1
  104. package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
  105. package/dist-cjs/contact-details/ContactFavoriteToggle.js.map +1 -1
  106. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  107. package/dist-cjs/contact-details/ContactMetadataItem.js.map +1 -1
  108. package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
  109. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  110. package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
  111. package/dist-cjs/contact-details/MailLinkComponent.js.map +1 -1
  112. package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
  113. package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
  114. package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  115. package/dist-cjs/contact-details/internal/StarIcon.js.map +1 -1
  116. package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
  117. package/dist-cjs/contact-details/internal/useComponentSize.js.map +1 -1
  118. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  119. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  120. package/dist-cjs/date-input/DateInputRange.js +3 -2
  121. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  122. package/dist-cjs/date-input/DateInputSingle.js +5 -2
  123. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  124. package/dist-cjs/date-picker/DatePicker.js +0 -2
  125. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  126. package/dist-cjs/date-picker/DatePickerActions.js +1 -1
  127. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  128. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  129. package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -1
  130. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  131. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  132. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +2 -3
  133. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  134. package/dist-cjs/date-picker/DatePickerRangeInput.js +22 -8
  135. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  136. package/dist-cjs/date-picker/DatePickerRangePanel.js +2 -4
  137. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  138. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +2 -4
  139. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  140. package/dist-cjs/date-picker/DatePickerSingleInput.js +12 -7
  141. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  142. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  143. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  144. package/dist-cjs/date-picker/useDatePicker.js +0 -17
  145. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  146. package/dist-cjs/date-picker/useFocusOut.js.map +1 -1
  147. package/dist-cjs/date-picker/useKeyboard.js.map +1 -1
  148. package/dist-cjs/deck-item/DeckItem.js.map +1 -1
  149. package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
  150. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  151. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  152. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  153. package/dist-cjs/dropdown/useClickAway.js.map +1 -1
  154. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  155. package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
  156. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  157. package/dist-cjs/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  158. package/dist-cjs/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  159. package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
  160. package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
  161. package/dist-cjs/form-field-legacy/FormHelperText.js.map +1 -1
  162. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  163. package/dist-cjs/form-field-legacy/NecessityIndicator.js.map +1 -1
  164. package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
  165. package/dist-cjs/form-field-legacy/constant.js.map +1 -1
  166. package/dist-cjs/form-group/FormGroup.js.map +1 -1
  167. package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
  168. package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
  169. package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
  170. package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
  171. package/dist-cjs/input-legacy/useCursorOnFocus.js.map +1 -1
  172. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  173. package/dist-cjs/list/Highlighter.js.map +1 -1
  174. package/dist-cjs/list/List.js.map +1 -1
  175. package/dist-cjs/list/ListItem.js.map +1 -1
  176. package/dist-cjs/list/ListItemGroup.js.map +1 -1
  177. package/dist-cjs/list/ListItemHeader.js.map +1 -1
  178. package/dist-cjs/list/VirtualizedList.js.map +1 -1
  179. package/dist-cjs/list/keyset.js.map +1 -1
  180. package/dist-cjs/list/useList.js.map +1 -1
  181. package/dist-cjs/list/useListHeight.js.map +1 -1
  182. package/dist-cjs/list/useVirtualization.js.map +1 -1
  183. package/dist-cjs/list-deprecated/List.js.map +1 -1
  184. package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
  185. package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
  186. package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
  187. package/dist-cjs/list-deprecated/ListItemContext.js.map +1 -1
  188. package/dist-cjs/list-deprecated/ListStateContext.js.map +1 -1
  189. package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
  190. package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
  191. package/dist-cjs/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  192. package/dist-cjs/list-deprecated/internal/helpers.js.map +1 -1
  193. package/dist-cjs/list-deprecated/internal/scrollIntoView.js.map +1 -1
  194. package/dist-cjs/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  195. package/dist-cjs/list-deprecated/internal/useWidth.js.map +1 -1
  196. package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
  197. package/dist-cjs/list-deprecated/useList.js.map +1 -1
  198. package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
  199. package/dist-cjs/list-deprecated/useTypeSelect.js.map +1 -1
  200. package/dist-cjs/list-next/ListItemNext.js.map +1 -1
  201. package/dist-cjs/list-next/ListNext.js.map +1 -1
  202. package/dist-cjs/list-next/ListNextContext.js.map +1 -1
  203. package/dist-cjs/list-next/useList.js.map +1 -1
  204. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -1
  205. package/dist-cjs/logo/Logo.js.map +1 -1
  206. package/dist-cjs/logo/LogoImage.js.map +1 -1
  207. package/dist-cjs/logo/LogoSeparator.js.map +1 -1
  208. package/dist-cjs/menu-button/MenuButton.js.map +1 -1
  209. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  210. package/dist-cjs/metric/Metric.js.map +1 -1
  211. package/dist-cjs/metric/MetricContent.js.map +1 -1
  212. package/dist-cjs/metric/MetricHeader.js.map +1 -1
  213. package/dist-cjs/metric/internal/MetricContext.js.map +1 -1
  214. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  215. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  216. package/dist-cjs/number-input/internal/useCaret.js.map +1 -1
  217. package/dist-cjs/number-input/internal/useInterval.js.map +1 -1
  218. package/dist-cjs/number-input/internal/utils.js.map +1 -1
  219. package/dist-cjs/number-input/useNumberInput.js.map +1 -1
  220. package/dist-cjs/portal/Portal.js.map +1 -1
  221. package/dist-cjs/query-input/QueryInput.js.map +1 -1
  222. package/dist-cjs/query-input/internal/CategoryList.js.map +1 -1
  223. package/dist-cjs/query-input/internal/CategoryListContext.js.map +1 -1
  224. package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
  225. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  226. package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
  227. package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
  228. package/dist-cjs/query-input/internal/ValueSelector.js.map +1 -1
  229. package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
  230. package/dist-cjs/query-input/useQueryInput.js.map +1 -1
  231. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  232. package/dist-cjs/responsive/overflowUtils.js.map +1 -1
  233. package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
  234. package/dist-cjs/responsive/useInstantCollapse.js.map +1 -1
  235. package/dist-cjs/responsive/useOverflow.js.map +1 -1
  236. package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
  237. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  238. package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
  239. package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
  240. package/dist-cjs/responsive/useWidth.js.map +1 -1
  241. package/dist-cjs/responsive/utils.js.map +1 -1
  242. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  243. package/dist-cjs/static-list/StaticList.js.map +1 -1
  244. package/dist-cjs/static-list/StaticListItem.js.map +1 -1
  245. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -1
  246. package/dist-cjs/system-status/SystemStatus.js.map +1 -1
  247. package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
  248. package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
  249. package/dist-cjs/table/TBody.js.map +1 -1
  250. package/dist-cjs/table/TD.js +6 -2
  251. package/dist-cjs/table/TD.js.map +1 -1
  252. package/dist-cjs/table/TFoot.js.map +1 -1
  253. package/dist-cjs/table/TH.js +6 -2
  254. package/dist-cjs/table/TH.js.map +1 -1
  255. package/dist-cjs/table/THead.js.map +1 -1
  256. package/dist-cjs/table/TR.js.map +1 -1
  257. package/dist-cjs/table/Table.css.js +1 -1
  258. package/dist-cjs/table/Table.js +2 -2
  259. package/dist-cjs/table/Table.js.map +1 -1
  260. package/dist-cjs/tabs/Tab.js.map +1 -1
  261. package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
  262. package/dist-cjs/tabs/TabPanel.js.map +1 -1
  263. package/dist-cjs/tabs/Tabs.js.map +1 -1
  264. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  265. package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
  266. package/dist-cjs/tabs/drag-drop/drag-utils.js.map +1 -1
  267. package/dist-cjs/tabs/drag-drop/dragDropTypes.js.map +1 -1
  268. package/dist-cjs/tabs/drag-drop/useDragDrop.js.map +1 -1
  269. package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  270. package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
  271. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  272. package/dist-cjs/tabs/useEditableItem.js.map +1 -1
  273. package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
  274. package/dist-cjs/tabs/useKeyboardNavigation.js.map +1 -1
  275. package/dist-cjs/tabs/useSelection.js.map +1 -1
  276. package/dist-cjs/tabs/useTabs.js.map +1 -1
  277. package/dist-cjs/tabs/useTabstrip.js.map +1 -1
  278. package/dist-cjs/tabs-next/TabBar.js.map +1 -1
  279. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  280. package/dist-cjs/tabs-next/TabNext.js.map +1 -1
  281. package/dist-cjs/tabs-next/TabNextAction.js.map +1 -1
  282. package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
  283. package/dist-cjs/tabs-next/TabNextPanel.js.map +1 -1
  284. package/dist-cjs/tabs-next/TabNextTrigger.css.js +1 -1
  285. package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
  286. package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
  287. package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
  288. package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
  289. package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
  290. package/dist-cjs/tabs-next/hooks/useFocusOutside.js.map +1 -1
  291. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
  292. package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  293. package/dist-cjs/toast-group/ToastGroup.js.map +1 -1
  294. package/dist-cjs/tokenized-input/TokenizedInput.js.map +1 -1
  295. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  296. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  297. package/dist-cjs/tokenized-input/internal/InputRuler.js.map +1 -1
  298. package/dist-cjs/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  299. package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
  300. package/dist-cjs/tokenized-input/internal/getCursorPosition.js.map +1 -1
  301. package/dist-cjs/tokenized-input/internal/isPlainObject.js.map +1 -1
  302. package/dist-cjs/tokenized-input/internal/useResizeObserver.js.map +1 -1
  303. package/dist-cjs/tokenized-input/internal/useWidth.js.map +1 -1
  304. package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
  305. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  306. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  307. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  308. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  309. package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -1
  310. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  311. package/dist-cjs/toolbar/Toolbar.js.map +1 -1
  312. package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
  313. package/dist-cjs/toolbar/Tooltray.js.map +1 -1
  314. package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
  315. package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
  316. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  317. package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  318. package/dist-cjs/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  319. package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  320. package/dist-cjs/tree/Tree.js.map +1 -1
  321. package/dist-cjs/tree/TreeNode.js.map +1 -1
  322. package/dist-cjs/tree/use-tree-keyboard-navigation.js.map +1 -1
  323. package/dist-cjs/tree/useTree.js.map +1 -1
  324. package/dist-cjs/utils/escapeRegExp.js.map +1 -1
  325. package/dist-cjs/utils/forwardCallbackProps.js.map +1 -1
  326. package/dist-cjs/utils/isEmail.js.map +1 -1
  327. package/dist-cjs/utils/isPlainObject.js.map +1 -1
  328. package/dist-cjs/utils/partition.js.map +1 -1
  329. package/dist-cjs/utils/useClickOutside.js.map +1 -1
  330. package/dist-cjs/utils/useEventCallback.js.map +1 -1
  331. package/dist-cjs/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  332. package/dist-cjs/utils/useLayoutEffectOnce.js.map +1 -1
  333. package/dist-cjs/utils/useLayoutEffectSkipFirst.js.map +1 -1
  334. package/dist-cjs/utils/useOverflowDetection.js.map +1 -1
  335. package/dist-cjs/utils/useSlideSelection.js.map +1 -1
  336. package/dist-cjs/window/ElectronWindow.js.map +1 -1
  337. package/dist-cjs/window/WindowContext.js.map +1 -1
  338. package/dist-cjs/window/desktop-utils.js.map +1 -1
  339. package/dist-es/app-header/AppHeader.js.map +1 -1
  340. package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
  341. package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
  342. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  343. package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  344. package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  345. package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  346. package/dist-es/button-bar/ButtonBar.js.map +1 -1
  347. package/dist-es/button-bar/OrderedButton.js.map +1 -1
  348. package/dist-es/button-bar/internal/ButtonBarContext.js.map +1 -1
  349. package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
  350. package/dist-es/button-bar/internal/useDescendant.js.map +1 -1
  351. package/dist-es/button-bar/internal/useDescendants.js.map +1 -1
  352. package/dist-es/calendar/Calendar.css.js +1 -1
  353. package/dist-es/calendar/Calendar.js +12 -3
  354. package/dist-es/calendar/Calendar.js.map +1 -1
  355. package/dist-es/calendar/CalendarGrid.js +39 -37
  356. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  357. package/dist-es/calendar/CalendarMonthHeader.js +1 -1
  358. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  359. package/dist-es/calendar/CalendarNavigation.css.js +1 -1
  360. package/dist-es/calendar/CalendarNavigation.js +21 -14
  361. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  362. package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
  363. package/dist-es/calendar/CalendarWeekHeader.js +2 -2
  364. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  365. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  366. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  367. package/dist-es/calendar/internal/CalendarDay.js +27 -37
  368. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  369. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  370. package/dist-es/calendar/internal/CalendarMonth.js +31 -10
  371. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  372. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  373. package/dist-es/calendar/internal/utils.js.map +1 -1
  374. package/dist-es/calendar/useCalendar.js +7 -9
  375. package/dist-es/calendar/useCalendar.js.map +1 -1
  376. package/dist-es/calendar/useCalendarDay.js +7 -11
  377. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  378. package/dist-es/calendar/useCalendarSelection.js +144 -76
  379. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  380. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  381. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  382. package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
  383. package/dist-es/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  384. package/dist-es/cascading-menu/internal/keydownHandlers.js.map +1 -1
  385. package/dist-es/cascading-menu/internal/menuPositioning.js.map +1 -1
  386. package/dist-es/cascading-menu/internal/stateUtils.js.map +1 -1
  387. package/dist-es/cascading-menu/internal/useClickAway.js.map +1 -1
  388. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  389. package/dist-es/cascading-menu/internal/useMountedRef.js.map +1 -1
  390. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  391. package/dist-es/cascading-menu/internal/useRefsManager.js.map +1 -1
  392. package/dist-es/cascading-menu/internal/useStateReducer.js.map +1 -1
  393. package/dist-es/cascading-menu/stateChangeTypes.js.map +1 -1
  394. package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
  395. package/dist-es/color-chooser/Color.js.map +1 -1
  396. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  397. package/dist-es/color-chooser/ColorHelpers.js.map +1 -1
  398. package/dist-es/color-chooser/ColorPicker.js.map +1 -1
  399. package/dist-es/color-chooser/DictTabs.js.map +1 -1
  400. package/dist-es/color-chooser/GetColorPalettes.js.map +1 -1
  401. package/dist-es/color-chooser/HexInput.js.map +1 -1
  402. package/dist-es/color-chooser/RGBAInput.js.map +1 -1
  403. package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
  404. package/dist-es/color-chooser/Swatch.js.map +1 -1
  405. package/dist-es/color-chooser/Swatches.js.map +1 -1
  406. package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
  407. package/dist-es/color-chooser/color-utils.js.map +1 -1
  408. package/dist-es/color-chooser/colorMap.js.map +1 -1
  409. package/dist-es/color-chooser/createTabsMapping.js.map +1 -1
  410. package/dist-es/combo-box/ComboBox.js.map +1 -1
  411. package/dist-es/combo-box/useCombobox.js.map +1 -1
  412. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  413. package/dist-es/combo-box-deprecated/filterHelpers.js.map +1 -1
  414. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  415. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  416. package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  417. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  418. package/dist-es/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  419. package/dist-es/common-hooks/calcPreferredHeight.js.map +1 -1
  420. package/dist-es/common-hooks/collectionProvider.js.map +1 -1
  421. package/dist-es/common-hooks/itemToString.js.map +1 -1
  422. package/dist-es/common-hooks/keyUtils.js.map +1 -1
  423. package/dist-es/common-hooks/list-dom-utils.js.map +1 -1
  424. package/dist-es/common-hooks/selectionTypes.js.map +1 -1
  425. package/dist-es/common-hooks/useAutoSizer.js.map +1 -1
  426. package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
  427. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  428. package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  429. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  430. package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  431. package/dist-es/common-hooks/useSelection.js.map +1 -1
  432. package/dist-es/common-hooks/useTypeahead.js.map +1 -1
  433. package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
  434. package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
  435. package/dist-es/common-hooks/utils/filter-utils.js.map +1 -1
  436. package/dist-es/common-hooks/utils/isSelected.js.map +1 -1
  437. package/dist-es/contact-details/ContactAction.js.map +1 -1
  438. package/dist-es/contact-details/ContactActions.js.map +1 -1
  439. package/dist-es/contact-details/ContactAvatar.js.map +1 -1
  440. package/dist-es/contact-details/ContactDetails.js.map +1 -1
  441. package/dist-es/contact-details/ContactFavoriteToggle.js.map +1 -1
  442. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  443. package/dist-es/contact-details/ContactMetadataItem.js.map +1 -1
  444. package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
  445. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  446. package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
  447. package/dist-es/contact-details/MailLinkComponent.js.map +1 -1
  448. package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
  449. package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
  450. package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  451. package/dist-es/contact-details/internal/StarIcon.js.map +1 -1
  452. package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
  453. package/dist-es/contact-details/internal/useComponentSize.js.map +1 -1
  454. package/dist-es/content-status/ContentStatus.js.map +1 -1
  455. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  456. package/dist-es/date-input/DateInputRange.js +3 -2
  457. package/dist-es/date-input/DateInputRange.js.map +1 -1
  458. package/dist-es/date-input/DateInputSingle.js +5 -2
  459. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  460. package/dist-es/date-picker/DatePicker.js +0 -2
  461. package/dist-es/date-picker/DatePicker.js.map +1 -1
  462. package/dist-es/date-picker/DatePickerActions.js +1 -1
  463. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  464. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  465. package/dist-es/date-picker/DatePickerHelperText.js.map +1 -1
  466. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  467. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  468. package/dist-es/date-picker/DatePickerRangeGridPanel.js +2 -3
  469. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  470. package/dist-es/date-picker/DatePickerRangeInput.js +22 -8
  471. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  472. package/dist-es/date-picker/DatePickerRangePanel.js +2 -4
  473. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  474. package/dist-es/date-picker/DatePickerSingleGridPanel.js +2 -4
  475. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  476. package/dist-es/date-picker/DatePickerSingleInput.js +12 -7
  477. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  478. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  479. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  480. package/dist-es/date-picker/useDatePicker.js +0 -17
  481. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  482. package/dist-es/date-picker/useFocusOut.js.map +1 -1
  483. package/dist-es/date-picker/useKeyboard.js.map +1 -1
  484. package/dist-es/deck-item/DeckItem.js.map +1 -1
  485. package/dist-es/deck-layout/DeckLayout.js.map +1 -1
  486. package/dist-es/dropdown/Dropdown.js.map +1 -1
  487. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  488. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  489. package/dist-es/dropdown/useClickAway.js.map +1 -1
  490. package/dist-es/dropdown/useDropdown.js.map +1 -1
  491. package/dist-es/dropdown/useDropdownBase.js.map +1 -1
  492. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  493. package/dist-es/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  494. package/dist-es/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  495. package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
  496. package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
  497. package/dist-es/form-field-legacy/FormHelperText.js.map +1 -1
  498. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  499. package/dist-es/form-field-legacy/NecessityIndicator.js.map +1 -1
  500. package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
  501. package/dist-es/form-field-legacy/constant.js.map +1 -1
  502. package/dist-es/form-group/FormGroup.js.map +1 -1
  503. package/dist-es/formatted-input/FormattedInput.js.map +1 -1
  504. package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
  505. package/dist-es/input-legacy/InputLegacy.js.map +1 -1
  506. package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
  507. package/dist-es/input-legacy/useCursorOnFocus.js.map +1 -1
  508. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  509. package/dist-es/list/Highlighter.js.map +1 -1
  510. package/dist-es/list/List.js.map +1 -1
  511. package/dist-es/list/ListItem.js.map +1 -1
  512. package/dist-es/list/ListItemGroup.js.map +1 -1
  513. package/dist-es/list/ListItemHeader.js.map +1 -1
  514. package/dist-es/list/VirtualizedList.js.map +1 -1
  515. package/dist-es/list/keyset.js.map +1 -1
  516. package/dist-es/list/useList.js.map +1 -1
  517. package/dist-es/list/useListHeight.js.map +1 -1
  518. package/dist-es/list/useVirtualization.js.map +1 -1
  519. package/dist-es/list-deprecated/List.js.map +1 -1
  520. package/dist-es/list-deprecated/ListBase.js.map +1 -1
  521. package/dist-es/list-deprecated/ListItem.js.map +1 -1
  522. package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
  523. package/dist-es/list-deprecated/ListItemContext.js.map +1 -1
  524. package/dist-es/list-deprecated/ListStateContext.js.map +1 -1
  525. package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
  526. package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
  527. package/dist-es/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  528. package/dist-es/list-deprecated/internal/helpers.js.map +1 -1
  529. package/dist-es/list-deprecated/internal/scrollIntoView.js.map +1 -1
  530. package/dist-es/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  531. package/dist-es/list-deprecated/internal/useWidth.js.map +1 -1
  532. package/dist-es/list-deprecated/itemToString.js.map +1 -1
  533. package/dist-es/list-deprecated/useList.js.map +1 -1
  534. package/dist-es/list-deprecated/useListItem.js.map +1 -1
  535. package/dist-es/list-deprecated/useTypeSelect.js.map +1 -1
  536. package/dist-es/list-next/ListItemNext.js.map +1 -1
  537. package/dist-es/list-next/ListNext.js.map +1 -1
  538. package/dist-es/list-next/ListNextContext.js.map +1 -1
  539. package/dist-es/list-next/useList.js.map +1 -1
  540. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -1
  541. package/dist-es/logo/Logo.js.map +1 -1
  542. package/dist-es/logo/LogoImage.js.map +1 -1
  543. package/dist-es/logo/LogoSeparator.js.map +1 -1
  544. package/dist-es/menu-button/MenuButton.js.map +1 -1
  545. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  546. package/dist-es/metric/Metric.js.map +1 -1
  547. package/dist-es/metric/MetricContent.js.map +1 -1
  548. package/dist-es/metric/MetricHeader.js.map +1 -1
  549. package/dist-es/metric/internal/MetricContext.js.map +1 -1
  550. package/dist-es/number-input/NumberInput.js.map +1 -1
  551. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  552. package/dist-es/number-input/internal/useCaret.js.map +1 -1
  553. package/dist-es/number-input/internal/useInterval.js.map +1 -1
  554. package/dist-es/number-input/internal/utils.js.map +1 -1
  555. package/dist-es/number-input/useNumberInput.js.map +1 -1
  556. package/dist-es/portal/Portal.js.map +1 -1
  557. package/dist-es/query-input/QueryInput.js.map +1 -1
  558. package/dist-es/query-input/internal/CategoryList.js.map +1 -1
  559. package/dist-es/query-input/internal/CategoryListContext.js.map +1 -1
  560. package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
  561. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  562. package/dist-es/query-input/internal/SearchList.js.map +1 -1
  563. package/dist-es/query-input/internal/ValueList.js.map +1 -1
  564. package/dist-es/query-input/internal/ValueSelector.js.map +1 -1
  565. package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
  566. package/dist-es/query-input/useQueryInput.js.map +1 -1
  567. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  568. package/dist-es/responsive/overflowUtils.js.map +1 -1
  569. package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
  570. package/dist-es/responsive/useInstantCollapse.js.map +1 -1
  571. package/dist-es/responsive/useOverflow.js.map +1 -1
  572. package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
  573. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  574. package/dist-es/responsive/useReclaimSpace.js.map +1 -1
  575. package/dist-es/responsive/useResizeObserver.js.map +1 -1
  576. package/dist-es/responsive/useWidth.js.map +1 -1
  577. package/dist-es/responsive/utils.js.map +1 -1
  578. package/dist-es/search-input/SearchInput.js.map +1 -1
  579. package/dist-es/static-list/StaticList.js.map +1 -1
  580. package/dist-es/static-list/StaticListItem.js.map +1 -1
  581. package/dist-es/static-list/StaticListItemContent.js.map +1 -1
  582. package/dist-es/system-status/SystemStatus.js.map +1 -1
  583. package/dist-es/system-status/SystemStatusActions.js.map +1 -1
  584. package/dist-es/system-status/SystemStatusContent.js.map +1 -1
  585. package/dist-es/table/TBody.js.map +1 -1
  586. package/dist-es/table/TD.js +6 -2
  587. package/dist-es/table/TD.js.map +1 -1
  588. package/dist-es/table/TFoot.js.map +1 -1
  589. package/dist-es/table/TH.js +6 -2
  590. package/dist-es/table/TH.js.map +1 -1
  591. package/dist-es/table/THead.js.map +1 -1
  592. package/dist-es/table/TR.js.map +1 -1
  593. package/dist-es/table/Table.css.js +1 -1
  594. package/dist-es/table/Table.js +2 -2
  595. package/dist-es/table/Table.js.map +1 -1
  596. package/dist-es/tabs/Tab.js.map +1 -1
  597. package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
  598. package/dist-es/tabs/TabPanel.js.map +1 -1
  599. package/dist-es/tabs/Tabs.js.map +1 -1
  600. package/dist-es/tabs/Tabstrip.js.map +1 -1
  601. package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
  602. package/dist-es/tabs/drag-drop/drag-utils.js.map +1 -1
  603. package/dist-es/tabs/drag-drop/dragDropTypes.js.map +1 -1
  604. package/dist-es/tabs/drag-drop/useDragDrop.js.map +1 -1
  605. package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  606. package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
  607. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  608. package/dist-es/tabs/useEditableItem.js.map +1 -1
  609. package/dist-es/tabs/useItemsWithIds.js.map +1 -1
  610. package/dist-es/tabs/useKeyboardNavigation.js.map +1 -1
  611. package/dist-es/tabs/useSelection.js.map +1 -1
  612. package/dist-es/tabs/useTabs.js.map +1 -1
  613. package/dist-es/tabs/useTabstrip.js.map +1 -1
  614. package/dist-es/tabs-next/TabBar.js.map +1 -1
  615. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  616. package/dist-es/tabs-next/TabNext.js.map +1 -1
  617. package/dist-es/tabs-next/TabNextAction.js.map +1 -1
  618. package/dist-es/tabs-next/TabNextContext.js.map +1 -1
  619. package/dist-es/tabs-next/TabNextPanel.js.map +1 -1
  620. package/dist-es/tabs-next/TabNextTrigger.css.js +1 -1
  621. package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
  622. package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
  623. package/dist-es/tabs-next/TabsNext.js.map +1 -1
  624. package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
  625. package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
  626. package/dist-es/tabs-next/hooks/useFocusOutside.js.map +1 -1
  627. package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
  628. package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  629. package/dist-es/toast-group/ToastGroup.js.map +1 -1
  630. package/dist-es/tokenized-input/TokenizedInput.js.map +1 -1
  631. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  632. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  633. package/dist-es/tokenized-input/internal/InputRuler.js.map +1 -1
  634. package/dist-es/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  635. package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
  636. package/dist-es/tokenized-input/internal/getCursorPosition.js.map +1 -1
  637. package/dist-es/tokenized-input/internal/isPlainObject.js.map +1 -1
  638. package/dist-es/tokenized-input/internal/useResizeObserver.js.map +1 -1
  639. package/dist-es/tokenized-input/internal/useWidth.js.map +1 -1
  640. package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
  641. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  642. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  643. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  644. package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  645. package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -1
  646. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  647. package/dist-es/toolbar/Toolbar.js.map +1 -1
  648. package/dist-es/toolbar/ToolbarButton.js.map +1 -1
  649. package/dist-es/toolbar/Tooltray.js.map +1 -1
  650. package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
  651. package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
  652. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  653. package/dist-es/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  654. package/dist-es/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  655. package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  656. package/dist-es/tree/Tree.js.map +1 -1
  657. package/dist-es/tree/TreeNode.js.map +1 -1
  658. package/dist-es/tree/use-tree-keyboard-navigation.js.map +1 -1
  659. package/dist-es/tree/useTree.js.map +1 -1
  660. package/dist-es/utils/escapeRegExp.js.map +1 -1
  661. package/dist-es/utils/forwardCallbackProps.js.map +1 -1
  662. package/dist-es/utils/isEmail.js.map +1 -1
  663. package/dist-es/utils/isPlainObject.js.map +1 -1
  664. package/dist-es/utils/partition.js.map +1 -1
  665. package/dist-es/utils/useClickOutside.js.map +1 -1
  666. package/dist-es/utils/useEventCallback.js.map +1 -1
  667. package/dist-es/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  668. package/dist-es/utils/useLayoutEffectOnce.js.map +1 -1
  669. package/dist-es/utils/useLayoutEffectSkipFirst.js.map +1 -1
  670. package/dist-es/utils/useOverflowDetection.js.map +1 -1
  671. package/dist-es/utils/useSlideSelection.js.map +1 -1
  672. package/dist-es/window/ElectronWindow.js.map +1 -1
  673. package/dist-es/window/WindowContext.js.map +1 -1
  674. package/dist-es/window/desktop-utils.js.map +1 -1
  675. package/dist-types/calendar/useCalendar.d.ts +26 -25
  676. package/dist-types/calendar/useCalendarDay.d.ts +1 -5
  677. package/dist-types/calendar/useCalendarSelection.d.ts +14 -11
  678. package/dist-types/date-picker/DatePickerContext.d.ts +0 -6
  679. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +2 -2
  680. package/dist-types/date-picker/DatePickerRangePanel.d.ts +4 -4
  681. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +2 -2
  682. package/dist-types/date-picker/useDatePicker.d.ts +0 -6
  683. package/dist-types/table/TD.d.ts +6 -0
  684. package/dist-types/table/TH.d.ts +6 -0
  685. package/dist-types/table/Table.d.ts +3 -3
  686. package/package.json +2 -2
@@ -7,7 +7,6 @@ var useCalendarSelection = require('./useCalendarSelection.js');
7
7
 
8
8
  const defaultIsDayUnselectable = () => false;
9
9
  const defaultIsDayHighlighted = () => false;
10
- const defaultIsDayDisabled = () => false;
11
10
  function useCalendar(props) {
12
11
  var _a;
13
12
  const {
@@ -22,7 +21,6 @@ function useCalendar(props) {
22
21
  hoveredDate,
23
22
  focusedDate: focusedDateProp,
24
23
  focusedDateRef,
25
- isDayDisabled = defaultIsDayDisabled,
26
24
  isDayHighlighted = defaultIsDayHighlighted,
27
25
  isDayUnselectable = defaultIsDayUnselectable,
28
26
  multiselect,
@@ -43,7 +41,10 @@ function useCalendar(props) {
43
41
  const { matchedBreakpoints } = core.useBreakpoint();
44
42
  const responsiveNumberOfVisibleMonths = core.resolveResponsiveValue(numberOfVisibleMonths, matchedBreakpoints) ?? 1;
45
43
  const [visibleMonth, setVisibleMonthState] = core.useControlled({
46
- controlled: visibleMonthProp ? dateAdapter.startOf(visibleMonthProp, "month") : void 0,
44
+ controlled: react.useMemo(
45
+ () => visibleMonthProp ? dateAdapter.startOf(visibleMonthProp, "month") : void 0,
46
+ [visibleMonthProp]
47
+ ),
47
48
  // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount
48
49
  default: react.useMemo(
49
50
  () => dateAdapter.startOf(defaultVisibleMonth, "month"),
@@ -75,8 +76,8 @@ function useCalendar(props) {
75
76
  [dateAdapter, minDate, maxDate]
76
77
  );
77
78
  const isDaySelectable = react.useCallback(
78
- (date) => !(date && (isDayUnselectable(date) || isDayDisabled(date) || isOutsideAllowedDates(date))),
79
- [isDayUnselectable, isDayDisabled, isOutsideAllowedDates]
79
+ (date) => !(date && (isDayUnselectable(date) || isOutsideAllowedDates(date))),
80
+ [isDayUnselectable, isOutsideAllowedDates]
80
81
  );
81
82
  const isDayVisible = react.useCallback(
82
83
  (date) => {
@@ -116,7 +117,7 @@ function useCalendar(props) {
116
117
  react.useEffect(() => {
117
118
  var _a2;
118
119
  const focusedDate = (_a2 = selectionManager == null ? void 0 : selectionManager.state) == null ? void 0 : _a2.focusedDate;
119
- const shouldTransition = focusedDate && !focusedDateProp !== void 0 && !isDayVisible(focusedDate) && isDaySelectable(focusedDate) && !isOutsideAllowedDates(focusedDate);
120
+ const shouldTransition = focusedDate && !focusedDateProp !== void 0 && !isDayVisible(focusedDate) && !isOutsideAllowedDates(focusedDate);
120
121
  if (shouldTransition) {
121
122
  setVisibleMonth(null, dateAdapter.startOf(focusedDate, "month"));
122
123
  }
@@ -124,7 +125,6 @@ function useCalendar(props) {
124
125
  dateAdapter,
125
126
  focusedDateProp,
126
127
  isOutsideAllowedDates,
127
- isDaySelectable,
128
128
  (_a = selectionManager == null ? void 0 : selectionManager.state) == null ? void 0 : _a.focusedDate
129
129
  ]);
130
130
  const setVisibleMonth = react.useCallback(
@@ -151,7 +151,6 @@ function useCalendar(props) {
151
151
  setVisibleMonth,
152
152
  isDayUnselectable,
153
153
  isDayHighlighted,
154
- isDayDisabled,
155
154
  isDayVisible,
156
155
  isOutsideAllowedDates,
157
156
  isOutsideAllowedMonths,
@@ -170,7 +169,6 @@ function useCalendar(props) {
170
169
  setVisibleMonth,
171
170
  isDayUnselectable,
172
171
  isDayHighlighted,
173
- isDayDisabled,
174
172
  isDayVisible,
175
173
  isOutsideAllowedDates,
176
174
  isOutsideAllowedMonths,
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendar.js","sources":["../src/calendar/useCalendar.ts"],"sourcesContent":["import {\n type ResponsiveProp,\n resolveResponsiveValue,\n useBreakpoint,\n useControlled,\n} from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { type SyntheticEvent, useCallback, useEffect, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type UseCalendarSelectionBaseProps,\n type UseCalendarSelectionMultiselectOffsetProps,\n type UseCalendarSelectionMultiselectRangeProps,\n type UseCalendarSelectionMultiselectSingleProps,\n type UseCalendarSelectionOffsetProps,\n type UseCalendarSelectionProps,\n type UseCalendarSelectionRangeProps,\n type UseCalendarSelectionSingleProps,\n useCalendarSelection,\n} from \"./useCalendarSelection\";\n\n/**\n * Base properties for the UseCalendar hook.\n * @template TDate - The type of the date object.\n */\ninterface UseCalendarBaseProps<TDate>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The default visible month.\n */\n defaultVisibleMonth?: TDate;\n /**\n * Callback fired when the visible month changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month.\n */\n onVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\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 /**\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 disabled.\n * @param date - The date to check.\n * @returns A string reason if the day is disabled, otherwise `false` or `undefined`.\n */\n isDayDisabled?: (date: TDate) => string | false | undefined;\n /**\n * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * The minimum selectable date.\n */\n minDate?: TDate;\n /**\n * The maximum selectable date.\n */\n maxDate?: TDate;\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 * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n}\n\n/**\n * UseCalendar hook props for a single date selection.\n */\nexport interface UseCalendarSingleProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionSingleProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, single date selection.\n */\nexport interface UseCalendarMultiselectSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectSingleProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props for a date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionRangeProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarMultiselectRangeProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectRangeProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props for an offset date selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarOffsetProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionOffsetProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, offset selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarMultiselectOffsetProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectOffsetProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props, wth the selection variant determining the return type of the date selection\n * @template TDate - The type of the date object.\n */\nexport type UseCalendarProps<TDate extends DateFrameworkType> =\n | UseCalendarSingleProps<TDate>\n | UseCalendarMultiselectSingleProps<TDate>\n | UseCalendarRangeProps<TDate>\n | UseCalendarMultiselectRangeProps<TDate>\n | UseCalendarOffsetProps<TDate>\n | UseCalendarMultiselectOffsetProps<TDate>;\n\n/**\n * Default function to determine if a day is unselectable.\n * @returns `false` indicating the day is selectable.\n */\nconst defaultIsDayUnselectable = (): string | false => false;\n\n/**\n * Default function to determine if a day is highlighted.\n * @returns `false` indicating the day is not highlighted.\n */\nconst defaultIsDayHighlighted = (): string | false => false;\n\n/**\n * Default function to determine if a day is disabled.\n * @returns `false` indicating the day is not disabled.\n */\nconst defaultIsDayDisabled = (): false => false;\n\n/**\n * Represents the return type of the useCalendar hook.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarReturn<TDate extends DateFrameworkType> {\n /**\n * The state of the calendar.\n */\n state: {\n /**\n * The currently visible month in the calendar.\n */\n visibleMonth: TDate;\n\n /**\n * The currently focused date in the calendar, or null if no date is focused.\n */\n focusedDate: TDate | null;\n\n /**\n * Focusable dates based on current state\n */\n focusableDates: TDate[];\n\n /**\n * The minimum selectable date in the calendar.\n */\n minDate: TDate;\n\n /**\n * The maximum selectable date in the calendar.\n */\n maxDate: TDate;\n\n /**\n * The selection variant of the calendar, indicating the type of selection allowed.\n */\n selectionVariant: \"single\" | \"range\" | \"offset\";\n\n /**\n * Whether to hide dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n\n /**\n * Number of visible months\n */\n numberOfVisibleMonths: number;\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 * Additional state properties from selectionManager.state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: user defined\n [key: string]: any; // Use a more specific type if possible\n };\n\n /**\n * Helper functions for interacting with the calendar.\n */\n helpers: {\n /**\n * Sets the visible month in the calendar.\n *\n * @param event - The synthetic event or null if triggered by code.\n * @param newVisibleMonth - The new visible month to set.\n */\n setVisibleMonth: (\n event: SyntheticEvent | null,\n newVisibleMonth: TDate,\n ) => void;\n\n /**\n * Sets the focused date in the calendar.\n *\n * @param event - The synthetic event or null if triggered by code.\n * @param date - The new date to focus.\n */\n setFocusedDate: (event: SyntheticEvent | null, date: TDate | null) => void;\n\n /**\n * Determines if a day is unselectable.\n *\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\n /**\n * Determines if a day is highlighted.\n *\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 /**\n * Determines if a day is disabled.\n *\n * @param date - The date to check.\n * @returns A string reason if the day is disabled, otherwise `false` or `undefined`.\n */\n isDayDisabled: (date: TDate) => string | false | undefined;\n\n /**\n * Determines if a day is visible in the calendar.\n *\n * @param date - The date to check.\n * @returns `true` if the day is visible, otherwise `false`.\n */\n isDayVisible: (date: TDate) => boolean;\n\n /**\n * Determines if a date is outside the allowed date range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedDates: (date: TDate) => boolean;\n\n /**\n * Determines if a month is outside the allowed range.\n *\n * @param date - The date to check.\n * @returns `true` if the month is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedMonths: (date: TDate) => boolean;\n\n /**\n * Determines if a year is outside the allowed range.\n *\n * @param date - The date to check.\n * @returns `true` if the year is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedYears: (date: TDate) => boolean;\n\n /**\n * Sets the selected date in the calendar.\n *\n * @param event - The event triggering the change.\n * @param newSelectedDate - The new date to select.\n */\n setSelectedDate: (\n event:\n | React.KeyboardEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLButtonElement, MouseEvent>,\n newSelectedDate: TDate,\n ) => void;\n\n /**\n * Determines if a date is selected.\n *\n * @param date - The date to check.\n * @returns `true` if the date is selected, otherwise `false`.\n */\n isSelected: (date: TDate) => boolean;\n\n /**\n * Sets the hovered date in the calendar.\n *\n * @param event - The event triggering the change.\n * @param newHoveredDate - The new date to hover.\n */\n setHoveredDate: (\n event: SyntheticEvent,\n newHoveredDate: TDate | null,\n ) => void;\n\n /**\n * Determines if a date is part of a selected span.\n *\n * @param date - The date to check.\n * @returns `true` if the date is part of a selected span, otherwise `false`.\n */\n isSelectedSpan: (date: TDate) => boolean;\n\n /**\n * Determines if a date is part of a hovered span.\n *\n * @param date - The date to check.\n * @returns `true` if the date is part of a hovered span, otherwise `false`.\n */\n isHoveredSpan: (date: TDate) => boolean;\n\n /**\n * Determines if a date is the start of a selected range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the start of a selected range, otherwise `false`.\n */\n isSelectedStart: (date: TDate) => boolean;\n\n /**\n * Determines if a date is the end of a selected range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the end of a selected range, otherwise `false`.\n */\n isSelectedEnd: (date: TDate) => boolean;\n\n /**\n * Determines if a date is hovered.\n *\n * @param date - The date to check.\n * @returns `true` if the date is hovered, otherwise `false`.\n */\n isHovered: (date: TDate) => boolean;\n\n /**\n * Determines if a date is part of a hovered offset.\n *\n * @param date - The date to check.\n * @returns `true` if the date is part of a hovered offset, otherwise `false`.\n */\n isHoveredOffset: (date: TDate) => boolean;\n\n /**\n * Determines if a day is selectable.\n *\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable: (date: TDate) => boolean;\n };\n}\n\nexport function useCalendar<TDate extends DateFrameworkType>(\n props: UseCalendarProps<TDate>,\n): UseCalendarReturn<TDate> {\n const {\n dateAdapter,\n defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate },\n } = useLocalization<TDate>();\n const {\n timezone,\n defaultSelectedDate,\n defaultVisibleMonth = dateAdapter.today(timezone),\n hideOutOfRangeDates,\n hoveredDate,\n focusedDate: focusedDateProp,\n focusedDateRef,\n isDayDisabled = defaultIsDayDisabled,\n isDayHighlighted = defaultIsDayHighlighted,\n isDayUnselectable = defaultIsDayUnselectable,\n multiselect,\n maxDate = defaultMaxDate,\n minDate = defaultMinDate,\n numberOfVisibleMonths = 1,\n onHoveredDateChange,\n onSelectionChange,\n onVisibleMonthChange,\n onFocusedDateChange,\n select,\n selectedDate,\n selectionVariant,\n visibleMonth: visibleMonthProp,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { matchedBreakpoints } = useBreakpoint();\n\n const responsiveNumberOfVisibleMonths =\n resolveResponsiveValue(numberOfVisibleMonths, matchedBreakpoints) ?? 1;\n\n const [visibleMonth, setVisibleMonthState] = useControlled({\n controlled: visibleMonthProp\n ? dateAdapter.startOf(visibleMonthProp, \"month\")\n : undefined,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(\n () => dateAdapter.startOf(defaultVisibleMonth, \"month\"),\n [],\n ),\n name: \"Calendar\",\n state: \"visibleMonth\",\n });\n\n const isOutsideAllowedDates = useCallback(\n (date: TDate) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n },\n [dateAdapter, maxDate, minDate],\n );\n\n const isOutsideAllowedMonths = useCallback(\n (date: TDate) => {\n const startOfMonth = dateAdapter.startOf(date, \"month\");\n const endOfMonth = dateAdapter.endOf(date, \"month\");\n return (\n dateAdapter.compare(endOfMonth, minDate) < 0 ||\n dateAdapter.compare(startOfMonth, maxDate) > 0\n );\n },\n [dateAdapter, minDate, maxDate],\n );\n\n const isOutsideAllowedYears = useCallback(\n (date: TDate) => {\n const startOfYear = dateAdapter.startOf(date, \"year\");\n const endOfYear = dateAdapter.endOf(date, \"year\");\n return (\n dateAdapter.compare(endOfYear, minDate) < 0 ||\n dateAdapter.compare(startOfYear, maxDate) > 0\n );\n },\n [dateAdapter, minDate, maxDate],\n );\n\n const isDaySelectable = useCallback(\n (date?: TDate) =>\n !(\n date &&\n (isDayUnselectable(date) ||\n isDayDisabled(date) ||\n isOutsideAllowedDates(date))\n ),\n [isDayUnselectable, isDayDisabled, isOutsideAllowedDates],\n );\n\n const isDayVisible = useCallback(\n (date?: TDate | null) => {\n if (!date) {\n return false;\n }\n const startInsideDays = dateAdapter.startOf(visibleMonth, \"month\");\n\n if (dateAdapter.compare(date, startInsideDays) < 0) return false;\n\n const endVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n const endInsideDays = dateAdapter.endOf(endVisibleMonth, \"month\");\n\n return !(dateAdapter.compare(date, endInsideDays) > 0);\n },\n [dateAdapter, responsiveNumberOfVisibleMonths, visibleMonth],\n );\n\n const selectionManager = useCalendarSelection<TDate>({\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n startDateOffset:\n props.selectionVariant === \"offset\" ? props.startDateOffset : undefined,\n endDateOffset:\n props.selectionVariant === \"offset\" ? props.endDateOffset : undefined,\n isOutsideAllowedDates,\n isDaySelectable,\n isDayVisible,\n focusedDate: focusedDateProp,\n focusedDateRef,\n multiselect,\n onFocusedDateChange,\n select,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n timezone,\n visibleMonth,\n } as UseCalendarSelectionProps<TDate>);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isDayVisible ignored (due to dependency on visibleMonth)\n useEffect(() => {\n const focusedDate = selectionManager?.state?.focusedDate;\n const shouldTransition =\n focusedDate &&\n !focusedDateProp !== undefined &&\n !isDayVisible(focusedDate) &&\n isDaySelectable(focusedDate) &&\n !isOutsideAllowedDates(focusedDate);\n\n if (shouldTransition) {\n setVisibleMonth(null, dateAdapter.startOf(focusedDate, \"month\"));\n }\n }, [\n dateAdapter,\n focusedDateProp,\n isOutsideAllowedDates,\n isDaySelectable,\n selectionManager?.state?.focusedDate,\n ]);\n\n const setVisibleMonth = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setVisibleMonthState(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange],\n );\n\n return useMemo(\n () =>\n ({\n state: {\n visibleMonth,\n timezone,\n multiselect,\n minDate,\n maxDate,\n numberOfVisibleMonths: responsiveNumberOfVisibleMonths,\n selectionVariant,\n hideOutOfRangeDates,\n ...selectionManager.state,\n },\n helpers: {\n setVisibleMonth,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n ...selectionManager.helpers,\n },\n }) as UseCalendarReturn<TDate>,\n [\n visibleMonth,\n timezone,\n multiselect,\n minDate,\n maxDate,\n selectionVariant,\n hideOutOfRangeDates,\n setVisibleMonth,\n isDayUnselectable,\n isDayHighlighted,\n isDayDisabled,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n responsiveNumberOfVisibleMonths,\n selectionManager,\n ],\n );\n}\n"],"names":["useLocalization","useBreakpoint","resolveResponsiveValue","useControlled","useMemo","useCallback","useCalendarSelection","useEffect","_a"],"mappings":"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"}
1
+ {"version":3,"file":"useCalendar.js","sources":["../src/calendar/useCalendar.ts"],"sourcesContent":["import {\n type ResponsiveProp,\n resolveResponsiveValue,\n useBreakpoint,\n useControlled,\n} from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { type SyntheticEvent, useCallback, useEffect, useMemo } from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport {\n type UseCalendarSelectionBaseProps,\n type UseCalendarSelectionMultiselectOffsetProps,\n type UseCalendarSelectionMultiselectRangeProps,\n type UseCalendarSelectionMultiselectSingleProps,\n type UseCalendarSelectionOffsetProps,\n type UseCalendarSelectionProps,\n type UseCalendarSelectionRangeProps,\n type UseCalendarSelectionSingleProps,\n useCalendarSelection,\n} from \"./useCalendarSelection\";\n\n/**\n * Base properties for the UseCalendar hook.\n * @template TDate - The type of the date object.\n */\ninterface UseCalendarBaseProps<TDate>\n extends UseCalendarSelectionBaseProps<TDate> {\n /**\n * The default visible month.\n */\n defaultVisibleMonth?: TDate;\n /**\n * Callback fired when the visible month changes.\n * @param event - The synthetic event or null if triggered by code.\n * @param visibleMonth - The new visible month.\n */\n onVisibleMonthChange?: (\n event: SyntheticEvent | null,\n visibleMonth: TDate,\n ) => void;\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 /**\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 * If `true`, hides dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n /**\n * The minimum selectable date.\n */\n minDate?: TDate;\n /**\n * The maximum selectable date.\n */\n maxDate?: TDate;\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 * If `true`, the calendar will be multiselect.\n */\n multiselect?: boolean;\n}\n\n/**\n * UseCalendar hook props for a single date selection.\n */\nexport interface UseCalendarSingleProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionSingleProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, single date selection.\n */\nexport interface UseCalendarMultiselectSingleProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectSingleProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props for a date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarRangeProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionRangeProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, date range selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarMultiselectRangeProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectRangeProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props for an offset date selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarOffsetProps<TDate extends DateFrameworkType>\n extends UseCalendarSelectionOffsetProps<TDate>,\n UseCalendarBaseProps<TDate> {}\n\n/**\n * UseCalendar hook props for a multi-select, offset selection.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarMultiselectOffsetProps<\n TDate extends DateFrameworkType,\n> extends UseCalendarSelectionMultiselectOffsetProps<TDate>,\n Omit<UseCalendarBaseProps<TDate>, \"multiselect\"> {}\n\n/**\n * UseCalendar hook props, wth the selection variant determining the return type of the date selection\n * @template TDate - The type of the date object.\n */\nexport type UseCalendarProps<TDate extends DateFrameworkType> =\n | UseCalendarSingleProps<TDate>\n | UseCalendarMultiselectSingleProps<TDate>\n | UseCalendarRangeProps<TDate>\n | UseCalendarMultiselectRangeProps<TDate>\n | UseCalendarOffsetProps<TDate>\n | UseCalendarMultiselectOffsetProps<TDate>;\n\n/**\n * Default function to determine if a day is unselectable.\n * @returns `false` indicating the day is selectable.\n */\nconst defaultIsDayUnselectable = (): string | false => false;\n\n/**\n * Default function to determine if a day is highlighted.\n * @returns `false` indicating the day is not highlighted.\n */\nconst defaultIsDayHighlighted = (): string | false => false;\n\n/**\n * Represents the return type of the useCalendar hook.\n * @template TDate - The type of the date object.\n */\nexport interface UseCalendarReturn<TDate extends DateFrameworkType> {\n /**\n * The state of the calendar.\n */\n state: {\n /**\n * The currently visible month in the calendar.\n */\n visibleMonth: TDate;\n\n /**\n * The currently focused date in the calendar, or null if no date is focused.\n */\n focusedDate: TDate | null;\n\n /**\n * Focusable dates based on current state\n */\n focusableDates: TDate[];\n\n /**\n * The minimum selectable date in the calendar.\n */\n minDate: TDate;\n\n /**\n * The maximum selectable date in the calendar.\n */\n maxDate: TDate;\n\n /**\n * The selection variant of the calendar, indicating the type of selection allowed.\n */\n selectionVariant: \"single\" | \"range\" | \"offset\";\n\n /**\n * Whether to hide dates that are out of the selectable range.\n */\n hideOutOfRangeDates?: boolean;\n\n /**\n * Number of visible months\n */\n numberOfVisibleMonths: number;\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 * Additional state properties from selectionManager.state.\n */\n // biome-ignore lint/suspicious/noExplicitAny: user defined\n [key: string]: any; // Use a more specific type if possible\n };\n\n /**\n * Helper functions for interacting with the calendar.\n */\n helpers: {\n /**\n * Sets the visible month in the calendar.\n *\n * @param event - The synthetic event or null if triggered by code.\n * @param newVisibleMonth - The new visible month to set.\n */\n setVisibleMonth: (\n event: SyntheticEvent | null,\n newVisibleMonth: TDate,\n ) => void;\n\n /**\n * Sets the focused date in the calendar.\n *\n * @param event - The synthetic event or null if triggered by code.\n * @param date - The new date to focus.\n */\n setFocusedDate: (event: SyntheticEvent | null, date: TDate | null) => void;\n\n /**\n * Determines if a day is unselectable.\n *\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\n /**\n * Determines if a day is highlighted.\n *\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 /**\n * Determines if a day is visible in the calendar.\n *\n * @param date - The date to check.\n * @returns `true` if the day is visible, otherwise `false`.\n */\n isDayVisible: (date: TDate) => boolean;\n\n /**\n * Determines if a date is outside the allowed date range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedDates: (date: TDate) => boolean;\n\n /**\n * Determines if a month is outside the allowed range.\n *\n * @param date - The date to check.\n * @returns `true` if the month is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedMonths: (date: TDate) => boolean;\n\n /**\n * Determines if a year is outside the allowed range.\n *\n * @param date - The date to check.\n * @returns `true` if the year is outside the allowed range, otherwise `false`.\n */\n isOutsideAllowedYears: (date: TDate) => boolean;\n\n /**\n * Determines if the date range is on the same day\n *\n * @param date - The range to check.\n * @returns `true` if the range start and end date are the same\n */\n isSameDay: (date: TDate) => boolean;\n\n /**\n * Sets the selected date in the calendar.\n *\n * @param event - The event triggering the change.\n * @param newSelectedDate - The new date to select.\n */\n setSelectedDate: (\n event:\n | React.KeyboardEvent<HTMLButtonElement>\n | React.MouseEvent<HTMLButtonElement, MouseEvent>,\n newSelectedDate: TDate,\n ) => void;\n\n /**\n * Determines if a date is selected.\n *\n * @param date - The date to check.\n * @returns `true` if the date is selected, otherwise `false`.\n */\n isSelected: (date: TDate) => boolean;\n\n /**\n * Determines if a date is hovered.\n *\n * @param date - The date to check.\n * @returns `true` if the date is hovered, otherwise `false`.\n */\n isHovered: (date: TDate) => boolean;\n\n /**\n * Sets the hovered date in the calendar.\n *\n * @param event - The event triggering the change.\n * @param newHoveredDate - The new date to hover.\n */\n setHoveredDate: (\n event: SyntheticEvent,\n newHoveredDate: TDate | null,\n ) => void;\n\n /**\n * Determines if a date is part of a selected span.\n *\n * @param date - The date to check.\n * @returns `true` if the date is part of a selected span, otherwise `false`.\n */\n isSelectedSpan: (date: TDate) => boolean;\n\n /**\n * Determines if a date is the start of a selected range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the start of a selected range, otherwise `false`.\n */\n isSelectedStart: (date: TDate) => boolean;\n\n /**\n * Determines if a date is the end of a selected range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the end of a selected range, otherwise `false`.\n */\n isSelectedEnd: (date: TDate) => boolean;\n\n /**\n * Determines if the hovered and a new date range would be created, if selected.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the start of a hovered offset, otherwise `false`.\n */\n isHoveredStart: (date: TDate) => boolean;\n\n /**\n * Determines if a date is part of a hovered range.\n *\n * @param date - The date to check.\n * @returns `true` if the date is part of a hovered offset, otherwise `false`.\n */\n isHoveredSpan: (date: TDate) => boolean;\n\n /**\n * Determines if the hovered and a date range would be completed, if selected.\n *\n * @param date - The date to check.\n * @returns `true` if the date is the end of a hovered offset, otherwise `false`.\n */\n isHoveredEnd: (date: TDate) => boolean;\n\n /**\n * Determines if a day is selectable.\n *\n * @param date - The date to check.\n * @returns `true` if the day is selectable, otherwise `false`.\n */\n isDaySelectable: (date: TDate) => boolean;\n };\n}\n\nexport function useCalendar<TDate extends DateFrameworkType>(\n props: UseCalendarProps<TDate>,\n): UseCalendarReturn<TDate> {\n const {\n dateAdapter,\n defaultDates: { minDate: defaultMinDate, maxDate: defaultMaxDate },\n } = useLocalization<TDate>();\n const {\n timezone,\n defaultSelectedDate,\n defaultVisibleMonth = dateAdapter.today(timezone),\n hideOutOfRangeDates,\n hoveredDate,\n focusedDate: focusedDateProp,\n focusedDateRef,\n isDayHighlighted = defaultIsDayHighlighted,\n isDayUnselectable = defaultIsDayUnselectable,\n multiselect,\n maxDate = defaultMaxDate,\n minDate = defaultMinDate,\n numberOfVisibleMonths = 1,\n onHoveredDateChange,\n onSelectionChange,\n onVisibleMonthChange,\n onFocusedDateChange,\n select,\n selectedDate,\n selectionVariant,\n visibleMonth: visibleMonthProp,\n // startDateOffset,\n // endDateOffset,\n } = props;\n const { matchedBreakpoints } = useBreakpoint();\n\n const responsiveNumberOfVisibleMonths =\n resolveResponsiveValue(numberOfVisibleMonths, matchedBreakpoints) ?? 1;\n\n const [visibleMonth, setVisibleMonthState] = useControlled({\n controlled: useMemo(\n () =>\n visibleMonthProp\n ? dateAdapter.startOf(visibleMonthProp, \"month\")\n : undefined,\n [visibleMonthProp],\n ),\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(\n () => dateAdapter.startOf(defaultVisibleMonth, \"month\"),\n [],\n ),\n name: \"Calendar\",\n state: \"visibleMonth\",\n });\n\n const isOutsideAllowedDates = useCallback(\n (date: TDate) => {\n return (\n dateAdapter.compare(date, minDate) < 0 ||\n dateAdapter.compare(date, maxDate) > 0\n );\n },\n [dateAdapter, maxDate, minDate],\n );\n\n const isOutsideAllowedMonths = useCallback(\n (date: TDate) => {\n const startOfMonth = dateAdapter.startOf(date, \"month\");\n const endOfMonth = dateAdapter.endOf(date, \"month\");\n return (\n dateAdapter.compare(endOfMonth, minDate) < 0 ||\n dateAdapter.compare(startOfMonth, maxDate) > 0\n );\n },\n [dateAdapter, minDate, maxDate],\n );\n\n const isOutsideAllowedYears = useCallback(\n (date: TDate) => {\n const startOfYear = dateAdapter.startOf(date, \"year\");\n const endOfYear = dateAdapter.endOf(date, \"year\");\n return (\n dateAdapter.compare(endOfYear, minDate) < 0 ||\n dateAdapter.compare(startOfYear, maxDate) > 0\n );\n },\n [dateAdapter, minDate, maxDate],\n );\n\n const isDaySelectable = useCallback(\n (date?: TDate) =>\n !(date && (isDayUnselectable(date) || isOutsideAllowedDates(date))),\n [isDayUnselectable, isOutsideAllowedDates],\n );\n\n const isDayVisible = useCallback(\n (date?: TDate | null) => {\n if (!date) {\n return false;\n }\n const startInsideDays = dateAdapter.startOf(visibleMonth, \"month\");\n\n if (dateAdapter.compare(date, startInsideDays) < 0) return false;\n\n const endVisibleMonth = dateAdapter.add(visibleMonth, {\n months: responsiveNumberOfVisibleMonths - 1,\n });\n const endInsideDays = dateAdapter.endOf(endVisibleMonth, \"month\");\n\n return !(dateAdapter.compare(date, endInsideDays) > 0);\n },\n [dateAdapter, responsiveNumberOfVisibleMonths, visibleMonth],\n );\n\n const selectionManager = useCalendarSelection<TDate>({\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n startDateOffset:\n props.selectionVariant === \"offset\" ? props.startDateOffset : undefined,\n endDateOffset:\n props.selectionVariant === \"offset\" ? props.endDateOffset : undefined,\n isOutsideAllowedDates,\n isDaySelectable,\n isDayVisible,\n focusedDate: focusedDateProp,\n focusedDateRef,\n multiselect,\n onFocusedDateChange,\n select,\n selectionVariant,\n onHoveredDateChange,\n hoveredDate,\n timezone,\n visibleMonth,\n } as UseCalendarSelectionProps<TDate>);\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: isDayVisible ignored (due to dependency on visibleMonth)\n useEffect(() => {\n const focusedDate = selectionManager?.state?.focusedDate;\n const shouldTransition =\n focusedDate &&\n !focusedDateProp !== undefined &&\n !isDayVisible(focusedDate) &&\n !isOutsideAllowedDates(focusedDate);\n\n if (shouldTransition) {\n setVisibleMonth(null, dateAdapter.startOf(focusedDate, \"month\"));\n }\n }, [\n dateAdapter,\n focusedDateProp,\n isOutsideAllowedDates,\n selectionManager?.state?.focusedDate,\n ]);\n\n const setVisibleMonth = useCallback(\n (event: SyntheticEvent | null, newVisibleMonth: TDate) => {\n setVisibleMonthState(newVisibleMonth);\n onVisibleMonthChange?.(event, newVisibleMonth);\n },\n [onVisibleMonthChange],\n );\n\n return useMemo(\n () =>\n ({\n state: {\n visibleMonth,\n timezone,\n multiselect,\n minDate,\n maxDate,\n numberOfVisibleMonths: responsiveNumberOfVisibleMonths,\n selectionVariant,\n hideOutOfRangeDates,\n ...selectionManager.state,\n },\n helpers: {\n setVisibleMonth,\n isDayUnselectable,\n isDayHighlighted,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n ...selectionManager.helpers,\n },\n }) as UseCalendarReturn<TDate>,\n [\n visibleMonth,\n timezone,\n multiselect,\n minDate,\n maxDate,\n selectionVariant,\n hideOutOfRangeDates,\n setVisibleMonth,\n isDayUnselectable,\n isDayHighlighted,\n isDayVisible,\n isOutsideAllowedDates,\n isOutsideAllowedMonths,\n isOutsideAllowedYears,\n responsiveNumberOfVisibleMonths,\n selectionManager,\n ],\n );\n}\n"],"names":["useLocalization","useBreakpoint","resolveResponsiveValue","useControlled","useMemo","useCallback","useCalendarSelection","useEffect","_a"],"mappings":"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"}
@@ -19,45 +19,42 @@ function useCalendarDay(props) {
19
19
  helpers: {
20
20
  setHoveredDate,
21
21
  isDayUnselectable,
22
- isDaySelectable,
23
22
  isDayHighlighted,
24
- isDayDisabled,
25
23
  isOutsideAllowedMonths
26
24
  }
27
25
  } = CalendarContext.useCalendarContext();
28
26
  const selectionManager = useCalendarSelection.useCalendarSelectionDay({ date });
29
27
  const focusManager = useFocusManagement.useFocusManagement({ date });
30
28
  const handleClick = (event) => {
31
- selectionManager == null ? void 0 : selectionManager.handleClick(event);
29
+ selectionManager.handleClick(event);
32
30
  focusManager.handleClick(event);
33
31
  };
34
32
  const handleKeyDown = (event) => {
35
33
  focusManager.handleKeyDown(event);
36
- selectionManager == null ? void 0 : selectionManager.handleKeyDown(event);
34
+ selectionManager.handleKeyDown(event);
37
35
  };
38
36
  const handleFocus = (event) => {
39
37
  focusManager.handleFocus(event);
40
38
  setHoveredDate(event, date);
41
39
  };
42
- const handleMouseEnter = (event) => {
40
+ const handleMouseMove = (event) => {
43
41
  setHoveredDate(event, date);
44
42
  };
45
43
  const eventHandlers = {
46
44
  onClick: handleClick,
47
45
  onKeyDown: handleKeyDown,
48
46
  onFocus: handleFocus,
49
- onMouseEnter: handleMouseEnter
47
+ onMouseMove: handleMouseMove
50
48
  };
51
- const outOfRange = !dateAdapter.isSame(date, month, "month");
52
- const focused = focusedDate && dateAdapter.isSame(date, focusedDate, "day") && !outOfRange;
49
+ const focused = focusedDate && dateAdapter.isSame(date, focusedDate, "day");
53
50
  const tabIndex = focusableDates.find(
54
51
  (tabbableDate) => dateAdapter.isSame(date, tabbableDate, "day")
55
52
  ) ? 0 : -1;
56
53
  const today = dateAdapter.isSame(dateAdapter.today(timezone), date, "day");
57
54
  const unselectableReason = isDayUnselectable(date);
58
55
  const highlightedReason = isDayHighlighted(date);
59
- const disabled = isDayDisabled(date) || outOfRange && isOutsideAllowedMonths(date) || isDaySelectable && !isDaySelectable(date);
60
- const unselectable = Boolean(unselectableReason);
56
+ const outOfRange = !dateAdapter.isSame(date, month, "month");
57
+ const unselectable = Boolean(unselectableReason) || isOutsideAllowedMonths(date);
61
58
  const highlighted = Boolean(highlightedReason);
62
59
  const hidden = hideOutOfRangeDates ? outOfRange : false;
63
60
  return {
@@ -67,7 +64,6 @@ function useCalendarDay(props) {
67
64
  unselectable,
68
65
  focused,
69
66
  hidden,
70
- disabled,
71
67
  highlighted,
72
68
  ...selectionManager.status
73
69
  },
@@ -1 +1 @@
1
- {"version":3,"file":"useCalendarDay.js","sources":["../src/calendar/useCalendarDay.ts"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport type {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { useFocusManagement } from \"./internal/useFocusManagement\";\nimport { useCalendarSelectionDay } from \"./useCalendarSelection\";\n\n/**\n * Interface representing the status of a day in the Calendar.\n */\nexport interface DayStatus {\n /**\n * If `true`, the day is out of the selectable range.\n */\n outOfRange?: boolean;\n /**\n * If `true`, the day is selected.\n */\n selected?: boolean;\n /**\n * If `true`, the day is today.\n */\n today?: boolean;\n /**\n * If set, the day is unselectable with a reason.\n */\n unselectable?: string | false;\n /**\n * If set, the day is highlighted with a reason.\n */\n highlighted?: string | false;\n /**\n * If `true`, the day is focused.\n */\n focused?: boolean;\n /**\n * If `true`, the day is disabled.\n */\n disabled?: boolean;\n /**\n * If `true`, the day is hidden.\n */\n hidden?: boolean;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n * @template TDate - The type of the date object.\n */\nexport interface useCalendarDayProps<TDate> {\n /**\n * The date of the calendar day.\n */\n date: TDate;\n /**\n * The month of the calendar day.\n */\n month: TDate;\n}\n\nexport function useCalendarDay<TDate extends DateFrameworkType>(\n props: useCalendarDayProps<TDate>,\n) {\n const { date, month } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const {\n state: {\n focusedDate,\n focusedDateRef,\n hideOutOfRangeDates,\n timezone,\n focusableDates,\n },\n helpers: {\n setHoveredDate,\n isDayUnselectable,\n isDaySelectable,\n isDayHighlighted,\n isDayDisabled,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext<TDate>();\n const selectionManager = useCalendarSelectionDay<TDate>({ date });\n const focusManager = useFocusManagement<TDate>({ date });\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager?.handleClick(event);\n focusManager.handleClick(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleKeyDown(event);\n selectionManager?.handleKeyDown(event);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleFocus(event);\n setHoveredDate(event, date);\n };\n\n const handleMouseEnter: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n };\n\n const outOfRange = !dateAdapter.isSame(date, month, \"month\");\n const focused =\n focusedDate && dateAdapter.isSame(date, focusedDate, \"day\") && !outOfRange;\n const tabIndex = focusableDates.find((tabbableDate) =>\n dateAdapter.isSame(date, tabbableDate, \"day\"),\n )\n ? 0\n : -1;\n const today = dateAdapter.isSame(dateAdapter.today(timezone), date, \"day\");\n\n const unselectableReason = isDayUnselectable(date);\n const highlightedReason = isDayHighlighted(date);\n\n const disabled =\n isDayDisabled(date) ||\n (outOfRange && isOutsideAllowedMonths(date)) ||\n (isDaySelectable && !isDaySelectable(date));\n const unselectable = Boolean(unselectableReason);\n const highlighted = Boolean(highlightedReason);\n const hidden = hideOutOfRangeDates ? outOfRange : false;\n\n return {\n status: {\n outOfRange,\n today,\n unselectable,\n focused,\n hidden,\n disabled,\n highlighted,\n ...selectionManager.status,\n } as DayStatus,\n dayProps: {\n tabIndex,\n \"aria-current\": today ? \"date\" : undefined,\n \"aria-hidden\": hidden ? \"true\" : undefined,\n ...eventHandlers,\n ...selectionManager.dayProps,\n } as ComponentPropsWithoutRef<\"button\">,\n focusedDateRef: focused ? focusedDateRef : null,\n unselectableReason,\n highlightedReason,\n };\n}\n"],"names":["useLocalization","useCalendarContext","useCalendarSelectionDay","useFocusManagement"],"mappings":"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"}
1
+ {"version":3,"file":"useCalendarDay.js","sources":["../src/calendar/useCalendarDay.ts"],"sourcesContent":["import type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport type {\n ComponentPropsWithoutRef,\n FocusEventHandler,\n KeyboardEventHandler,\n MouseEventHandler,\n} from \"react\";\nimport { useLocalization } from \"../localization-provider\";\nimport { useCalendarContext } from \"./internal/CalendarContext\";\nimport { useFocusManagement } from \"./internal/useFocusManagement\";\nimport { useCalendarSelectionDay } from \"./useCalendarSelection\";\n\n/**\n * Interface representing the status of a day in the Calendar.\n */\nexport interface DayStatus {\n /**\n * If `true`, the day is selectable but outside of current month.\n */\n outOfRange?: boolean;\n /**\n * If `true`, the day is selected.\n */\n selected?: boolean;\n /**\n * If `true`, the day is today.\n */\n today?: boolean;\n /**\n * If set, the day is unselectable with a reason.\n */\n unselectable?: string | false;\n /**\n * If set, the day is highlighted with a reason.\n */\n highlighted?: string | false;\n /**\n * If `true`, the day is focused.\n */\n focused?: boolean;\n /**\n * If `true`, the day is hidden.\n */\n hidden?: boolean;\n}\n\n/**\n * UseCalendar hook props to return a calendar day's status\n * @template TDate - The type of the date object.\n */\nexport interface useCalendarDayProps<TDate> {\n /**\n * The date of the calendar day.\n */\n date: TDate;\n /**\n * The month of the calendar day.\n */\n month: TDate;\n}\n\nexport function useCalendarDay<TDate extends DateFrameworkType>(\n props: useCalendarDayProps<TDate>,\n) {\n const { date, month } = props;\n const { dateAdapter } = useLocalization<TDate>();\n const {\n state: {\n focusedDate,\n focusedDateRef,\n hideOutOfRangeDates,\n timezone,\n focusableDates,\n },\n helpers: {\n setHoveredDate,\n isDayUnselectable,\n isDayHighlighted,\n isOutsideAllowedMonths,\n },\n } = useCalendarContext<TDate>();\n const selectionManager = useCalendarSelectionDay<TDate>({ date });\n const focusManager = useFocusManagement<TDate>({ date });\n\n const handleClick: MouseEventHandler<HTMLButtonElement> = (event) => {\n selectionManager.handleClick(event);\n focusManager.handleClick(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleKeyDown(event);\n selectionManager.handleKeyDown(event);\n };\n\n const handleFocus: FocusEventHandler<HTMLButtonElement> = (event) => {\n focusManager.handleFocus(event);\n setHoveredDate(event, date);\n };\n\n const handleMouseMove: MouseEventHandler<HTMLButtonElement> = (event) => {\n setHoveredDate(event, date);\n };\n\n const eventHandlers = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onFocus: handleFocus,\n onMouseMove: handleMouseMove,\n };\n\n const focused = focusedDate && dateAdapter.isSame(date, focusedDate, \"day\");\n const tabIndex = focusableDates.find((tabbableDate) =>\n dateAdapter.isSame(date, tabbableDate, \"day\"),\n )\n ? 0\n : -1;\n const today = dateAdapter.isSame(dateAdapter.today(timezone), date, \"day\");\n\n const unselectableReason = isDayUnselectable(date);\n const highlightedReason = isDayHighlighted(date);\n\n const outOfRange = !dateAdapter.isSame(date, month, \"month\");\n const unselectable =\n Boolean(unselectableReason) || isOutsideAllowedMonths(date);\n const highlighted = Boolean(highlightedReason);\n const hidden = hideOutOfRangeDates ? outOfRange : false;\n\n return {\n status: {\n outOfRange,\n today,\n unselectable,\n focused,\n hidden,\n highlighted,\n ...selectionManager.status,\n } as DayStatus,\n dayProps: {\n tabIndex,\n \"aria-current\": today ? \"date\" : undefined,\n \"aria-hidden\": hidden ? \"true\" : undefined,\n ...eventHandlers,\n ...selectionManager.dayProps,\n } as ComponentPropsWithoutRef<\"button\">,\n focusedDateRef: focused ? focusedDateRef : null,\n unselectableReason,\n highlightedReason,\n };\n}\n"],"names":["useLocalization","useCalendarContext","useCalendarSelectionDay","useFocusManagement"],"mappings":"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"}
@@ -189,24 +189,13 @@ function useCalendarSelection(props) {
189
189
  if (!selectedDate) {
190
190
  return false;
191
191
  }
192
- const isSingleDateSelected = (element) => dateAdapter.isSame(element, date, "day");
193
- const isDateRangeSelected = (range) => range.startDate && range.endDate && dateAdapter.compare(date, range.startDate) >= 0 && dateAdapter.compare(date, range.endDate) <= 0;
194
- if (Array.isArray(selectedDate)) {
195
- return selectedDate.some(
196
- (element) => isDateRangeSelection(element) ? isDateRangeSelected(element) : isSingleDateSelected(element)
192
+ if (selectionVariant === "single") {
193
+ const singleDates = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
194
+ return singleDates.some(
195
+ (singleDate) => dateAdapter.isSame(singleDate, date, "day")
197
196
  );
198
197
  }
199
- switch (selectionVariant) {
200
- case "single":
201
- return isSingleDateSelected(
202
- selectedDate
203
- );
204
- case "range":
205
- case "offset":
206
- return isDateRangeSelected(selectedDate);
207
- default:
208
- return false;
209
- }
198
+ return false;
210
199
  },
211
200
  [dateAdapter, selectedDate, selectionVariant]
212
201
  );
@@ -344,29 +333,56 @@ function useCalendarSelection(props) {
344
333
  timezone,
345
334
  visibleMonth
346
335
  ]);
347
- const isSelectedSpan = react.useCallback(
336
+ const isHoveredStart = react.useCallback(
348
337
  (date) => {
349
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
350
- return dateRanges.some((range) => {
351
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && !isOutsideAllowedDates(range.endDate)) {
352
- return dateAdapter.compare(date, range.startDate) > 0 && dateAdapter.compare(date, range.endDate) < 0;
353
- }
354
- return false;
355
- });
338
+ if (selectionVariant === "range" && hoveredDate && dateAdapter.isSame(date, hoveredDate, "day")) {
339
+ const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
340
+ const allDatesPopulated = dateRanges.every(
341
+ (range) => (range == null ? void 0 : range.startDate) && (range == null ? void 0 : range.endDate)
342
+ );
343
+ const startDateMatches = dateRanges.some(
344
+ (range) => (range == null ? void 0 : range.startDate) && dateAdapter.isSame(date, range.startDate, "day")
345
+ );
346
+ const firstIncompleteRange = dateRanges.find(
347
+ (range) => (range == null ? void 0 : range.startDate) && !(range == null ? void 0 : range.endDate)
348
+ );
349
+ const newDateRangeRequired = (firstIncompleteRange == null ? void 0 : firstIncompleteRange.startDate) && dateAdapter.compare(date, firstIncompleteRange.startDate) < 0;
350
+ return allDatesPopulated || startDateMatches || newDateRangeRequired;
351
+ }
352
+ if (selectionVariant === "offset" && hoveredDate) {
353
+ const startDate = getStartDateOffset(hoveredDate);
354
+ return dateAdapter.isSame(date, startDate, "day") && (!isDaySelectable || isDaySelectable(date));
355
+ }
356
+ return false;
356
357
  },
357
- [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
358
+ [
359
+ dateAdapter,
360
+ getStartDateOffset,
361
+ selectionVariant,
362
+ selectedDate,
363
+ hoveredDate,
364
+ isDaySelectable
365
+ ]
358
366
  );
359
367
  const isHoveredSpan = react.useCallback(
360
368
  (date) => {
361
- const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
362
- return dateRanges.some((range) => {
363
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && !dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && hoveredDate) {
364
- const isForwardRange = dateAdapter.compare(hoveredDate, range.startDate) >= 0 && (dateAdapter.compare(date, range.startDate) >= 0 && dateAdapter.compare(date, hoveredDate) <= 0 || dateAdapter.isSame(date, hoveredDate, "day"));
365
- const isValidDayHovered = !isDaySelectable || isDaySelectable(hoveredDate);
366
- return isForwardRange && isValidDayHovered;
367
- }
368
- return false;
369
- });
369
+ if (selectionVariant === "range") {
370
+ const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
371
+ return dateRanges.some((range) => {
372
+ if (isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && !dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && hoveredDate) {
373
+ const isForwardRange = dateAdapter.compare(hoveredDate, range.startDate) > 0 && dateAdapter.compare(date, range.startDate) > 0 && dateAdapter.compare(date, hoveredDate) < 0;
374
+ const isValidDayHovered = !isDaySelectable || isDaySelectable(hoveredDate);
375
+ return isForwardRange && isValidDayHovered;
376
+ }
377
+ return false;
378
+ });
379
+ }
380
+ if (selectionVariant === "offset" && hoveredDate) {
381
+ const startDate = getStartDateOffset(hoveredDate);
382
+ const endDate = getEndDateOffset(hoveredDate);
383
+ return dateAdapter.compare(date, startDate) > 0 && dateAdapter.compare(date, endDate) < 0 && (!isDaySelectable || isDaySelectable(date));
384
+ }
385
+ return false;
370
386
  },
371
387
  [
372
388
  dateAdapter,
@@ -377,8 +393,50 @@ function useCalendarSelection(props) {
377
393
  isDaySelectable
378
394
  ]
379
395
  );
396
+ const isHoveredEnd = react.useCallback(
397
+ (date) => {
398
+ if (selectionVariant === "range" && hoveredDate && dateAdapter.isSame(date, hoveredDate, "day")) {
399
+ const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
400
+ const isIncompleteRange = dateRanges.some(
401
+ (range) => (range == null ? void 0 : range.startDate) && !(range == null ? void 0 : range.endDate) && hoveredDate && dateAdapter.compare(hoveredDate, range.startDate) >= 0
402
+ );
403
+ const endDateMatches = dateRanges.some(
404
+ (range) => (range == null ? void 0 : range.endDate) && dateAdapter.isSame(range.endDate, date, "day")
405
+ );
406
+ return endDateMatches || isIncompleteRange;
407
+ }
408
+ if (selectionVariant === "offset" && hoveredDate) {
409
+ const endDate = getEndDateOffset(hoveredDate);
410
+ return dateAdapter.isSame(date, endDate, "day") && (!isDaySelectable || isDaySelectable(date));
411
+ }
412
+ return false;
413
+ },
414
+ [
415
+ dateAdapter,
416
+ getEndDateOffset,
417
+ selectionVariant,
418
+ selectedDate,
419
+ hoveredDate,
420
+ isDaySelectable
421
+ ]
422
+ );
423
+ const isSameDay = react.useCallback(
424
+ (date) => {
425
+ const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
426
+ return dateRanges.some((range) => {
427
+ if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && (range == null ? void 0 : range.startDate) && (range == null ? void 0 : range.endDate) && dateAdapter.isSame(range == null ? void 0 : range.startDate, date, "day")) {
428
+ return dateAdapter.isSame(range == null ? void 0 : range.startDate, range == null ? void 0 : range.endDate, "day");
429
+ }
430
+ return false;
431
+ });
432
+ },
433
+ [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
434
+ );
380
435
  const isSelectedStart = react.useCallback(
381
436
  (date) => {
437
+ if (selectionVariant === "single") {
438
+ return false;
439
+ }
382
440
  const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
383
441
  return dateRanges.some((range) => {
384
442
  if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && !isOutsideAllowedDates(range.startDate)) {
@@ -389,35 +447,35 @@ function useCalendarSelection(props) {
389
447
  },
390
448
  [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
391
449
  );
392
- const isSelectedEnd = react.useCallback(
450
+ const isSelectedSpan = react.useCallback(
393
451
  (date) => {
452
+ if (selectionVariant === "single") {
453
+ return false;
454
+ }
394
455
  const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
395
456
  return dateRanges.some((range) => {
396
- if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.endDate)) {
397
- return dateAdapter.isSame(range.endDate, date, "day");
457
+ if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.startDate) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.startDate) && !isOutsideAllowedDates(range.endDate)) {
458
+ return dateAdapter.compare(date, range.startDate) > 0 && dateAdapter.compare(date, range.endDate) < 0;
398
459
  }
399
460
  return false;
400
461
  });
401
462
  },
402
463
  [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
403
464
  );
404
- const isHoveredOffset = react.useCallback(
465
+ const isSelectedEnd = react.useCallback(
405
466
  (date) => {
406
- if (hoveredDate && selectionVariant === "offset") {
407
- const startDate = getStartDateOffset(hoveredDate);
408
- const endDate = getEndDateOffset(hoveredDate);
409
- return dateAdapter.compare(date, startDate) >= 0 && dateAdapter.compare(date, endDate) <= 0 && (!isDaySelectable || isDaySelectable(date));
467
+ if (selectionVariant === "single") {
468
+ return false;
410
469
  }
411
- return false;
470
+ const dateRanges = Array.isArray(selectedDate) ? selectedDate : [selectedDate];
471
+ return dateRanges.some((range) => {
472
+ if ((selectionVariant === "range" || selectionVariant === "offset") && isDateRangeSelection(range) && dateAdapter.isValid(range.endDate) && !isOutsideAllowedDates(range.endDate)) {
473
+ return dateAdapter.isSame(range.endDate, date, "day");
474
+ }
475
+ return false;
476
+ });
412
477
  },
413
- [
414
- dateAdapter,
415
- getStartDateOffset,
416
- getEndDateOffset,
417
- hoveredDate,
418
- isDaySelectable,
419
- selectionVariant
420
- ]
478
+ [dateAdapter, isOutsideAllowedDates, selectionVariant, selectedDate]
421
479
  );
422
480
  return react.useMemo(
423
481
  () => ({
@@ -429,15 +487,17 @@ function useCalendarSelection(props) {
429
487
  focusableDates: getFocusableDates()
430
488
  },
431
489
  helpers: {
432
- isSelected,
433
- setSelectedDate,
434
490
  isHovered,
491
+ isSelected,
435
492
  setHoveredDate,
436
- isSelectedSpan,
437
- isHoveredSpan,
493
+ isSameDay,
494
+ setSelectedDate,
438
495
  isSelectedStart,
496
+ isSelectedSpan,
439
497
  isSelectedEnd,
440
- isHoveredOffset,
498
+ isHoveredStart,
499
+ isHoveredSpan,
500
+ isHoveredEnd,
441
501
  isDaySelectable,
442
502
  setFocusedDate
443
503
  }
@@ -449,12 +509,13 @@ function useCalendarSelection(props) {
449
509
  getFocusableDates,
450
510
  hoveredDate,
451
511
  isSelected,
452
- isHovered,
453
- isSelectedSpan,
512
+ isHoveredStart,
454
513
  isHoveredSpan,
514
+ isHoveredEnd,
515
+ isSameDay,
455
516
  isSelectedStart,
517
+ isSelectedSpan,
456
518
  isSelectedEnd,
457
- isHoveredOffset,
458
519
  isDaySelectable,
459
520
  setFocusedDate,
460
521
  setHoveredDate,
@@ -466,15 +527,18 @@ function useCalendarSelectionDay({
466
527
  date
467
528
  }) {
468
529
  const {
530
+ state: { selectionVariant },
469
531
  helpers: {
470
532
  setSelectedDate,
533
+ isSameDay,
471
534
  isSelected,
472
- isSelectedSpan,
473
- isHoveredSpan,
474
535
  isSelectedStart,
536
+ isSelectedSpan,
475
537
  isSelectedEnd,
476
538
  isHovered,
477
- isHoveredOffset,
539
+ isHoveredStart,
540
+ isHoveredSpan,
541
+ isHoveredEnd,
478
542
  isDaySelectable
479
543
  }
480
544
  } = CalendarContext.useCalendarContext();
@@ -496,33 +560,37 @@ function useCalendarSelectionDay({
496
560
  [date, setSelectedDate]
497
561
  );
498
562
  const selected = isSelected(date);
499
- const selectedSpan = isSelectedSpan(date);
500
- const hoveredSpan = isHoveredSpan(date);
501
563
  const selectedStart = isSelectedStart(date);
564
+ const selectedSpan = isSelectedSpan(date);
502
565
  const selectedEnd = isSelectedEnd(date);
566
+ const selectedOnSameDay = isSameDay(date);
503
567
  const hovered = isHovered(date);
504
- const hoveredOffset = isHoveredOffset(date);
568
+ const hoveredStart = isHoveredStart(date);
569
+ const hoveredSpan = isHoveredSpan(date);
570
+ const hoveredEnd = isHoveredEnd(date);
505
571
  return {
506
572
  handleClick,
507
573
  handleKeyDown,
508
574
  status: {
575
+ hovered,
509
576
  selected,
510
- selectedSpan,
511
- hoveredSpan,
512
577
  selectedStart,
578
+ selectedSpan,
513
579
  selectedEnd,
514
- hovered,
515
- hoveredOffset
580
+ hoveredStart,
581
+ hoveredSpan,
582
+ hoveredEnd
516
583
  },
517
584
  dayProps: {
518
585
  className: clsx.clsx({
519
- [withBaseName("selected")]: selected,
520
- [withBaseName("selectedSpan")]: selectedSpan,
521
- [withBaseName("hoveredSpan")]: hoveredSpan,
522
- [withBaseName("selectedStart")]: selectedStart,
523
- [withBaseName("selectedEnd")]: selectedEnd,
524
- [withBaseName("hovered")]: hovered,
525
- [withBaseName("hoveredOffset")]: hoveredOffset
586
+ [withBaseName("selected")]: selectionVariant === "single" ? selected : void 0,
587
+ [withBaseName("selectedStart")]: selectionVariant !== "single" ? selectedStart : void 0,
588
+ [withBaseName("selectedSpan")]: selectionVariant !== "single" ? selectedSpan : void 0,
589
+ [withBaseName("selectedEnd")]: selectionVariant !== "single" ? selectedEnd : void 0,
590
+ [withBaseName("selectedSameDay")]: selectionVariant !== "single" && selectedOnSameDay,
591
+ [withBaseName("hoveredStart")]: selectionVariant !== "single" && hoveredStart,
592
+ [withBaseName("hoveredSpan")]: selectionVariant !== "single" && hoveredSpan,
593
+ [withBaseName("hoveredEnd")]: selectionVariant !== "single" && hoveredEnd
526
594
  }),
527
595
  "aria-pressed": selected || selectedEnd || selectedStart || selectedSpan ? "true" : void 0,
528
596
  "aria-disabled": isDaySelectable && !isDaySelectable(date) ? "true" : void 0