@salt-ds/lab 1.0.0-alpha.71 → 1.0.0-alpha.73

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 (668) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/css/salt-lab.css +80 -76
  3. package/dist-cjs/app-header/AppHeader.css.js +1 -1
  4. package/dist-cjs/app-header/AppHeader.js +5 -5
  5. package/dist-cjs/app-header/AppHeader.js.map +1 -1
  6. package/dist-cjs/breadcrumbs/Breadcrumb.js +3 -3
  7. package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
  8. package/dist-cjs/breadcrumbs/Breadcrumbs.js +3 -3
  9. package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
  10. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  11. package/dist-cjs/button-bar/ButtonBar.js +4 -4
  12. package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
  13. package/dist-cjs/button-bar/OrderedButton.js +3 -3
  14. package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
  15. package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
  16. package/dist-cjs/calendar/Calendar.js +35 -10
  17. package/dist-cjs/calendar/Calendar.js.map +1 -1
  18. package/dist-cjs/calendar/CalendarGrid.js +2 -2
  19. package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
  20. package/dist-cjs/calendar/CalendarMonthHeader.js +2 -2
  21. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
  22. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  23. package/dist-cjs/calendar/CalendarWeekHeader.js +3 -3
  24. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  25. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  26. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  27. package/dist-cjs/calendar/internal/CalendarMonth.js +3 -3
  28. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  29. package/dist-cjs/calendar/internal/useFocusManagement.js +1 -1
  30. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  31. package/dist-cjs/calendar/useCalendar.js +6 -0
  32. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  33. package/dist-cjs/calendar/useCalendarSelection.js +185 -103
  34. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  35. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  36. package/dist-cjs/cascading-menu/CascadingMenuItem.css.js +1 -1
  37. package/dist-cjs/cascading-menu/CascadingMenuItem.js +3 -3
  38. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  39. package/dist-cjs/cascading-menu/CascadingMenuList.js +5 -5
  40. package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
  41. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  42. package/dist-cjs/color-chooser/AlphaInputField.js +2 -2
  43. package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
  44. package/dist-cjs/color-chooser/ColorChooser.css.js +1 -1
  45. package/dist-cjs/color-chooser/ColorChooser.js +38 -40
  46. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  47. package/dist-cjs/color-chooser/ColorPicker.css.js +1 -1
  48. package/dist-cjs/color-chooser/ColorPicker.js +3 -3
  49. package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
  50. package/dist-cjs/color-chooser/DictTabs.js +2 -2
  51. package/dist-cjs/color-chooser/HexInput.css.js +1 -1
  52. package/dist-cjs/color-chooser/HexInput.js +2 -2
  53. package/dist-cjs/color-chooser/HexInput.js.map +1 -1
  54. package/dist-cjs/color-chooser/RGBAInput.css.js +1 -1
  55. package/dist-cjs/color-chooser/RGBAInput.js +3 -3
  56. package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
  57. package/dist-cjs/color-chooser/RGBAInputField.js +2 -2
  58. package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
  59. package/dist-cjs/color-chooser/Swatch.css.js +1 -1
  60. package/dist-cjs/color-chooser/Swatches.js +3 -3
  61. package/dist-cjs/color-chooser/Swatches.js.map +1 -1
  62. package/dist-cjs/color-chooser/SwatchesPicker.js +3 -3
  63. package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
  64. package/dist-cjs/combo-box/ComboBox.js +6 -6
  65. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  66. package/dist-cjs/combo-box/useCombobox.js +1 -1
  67. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  68. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js +3 -3
  69. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  70. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
  71. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  72. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js +2 -2
  73. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js +1 -1
  74. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -1
  75. package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
  76. package/dist-cjs/common-hooks/itemToString.js +1 -1
  77. package/dist-cjs/common-hooks/itemToString.js.map +1 -1
  78. package/dist-cjs/common-hooks/useCollectionItems.js +1 -1
  79. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  80. package/dist-cjs/common-hooks/useImperativeScrollingAPI.js +6 -10
  81. package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  82. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  83. package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
  84. package/dist-cjs/common-hooks/utils/collection-item-utils.js +2 -2
  85. package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
  86. package/dist-cjs/contact-details/ContactActions.js +1 -1
  87. package/dist-cjs/contact-details/ContactActions.js.map +1 -1
  88. package/dist-cjs/contact-details/ContactAvatar.js +1 -1
  89. package/dist-cjs/contact-details/ContactDetails.js +4 -4
  90. package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
  91. package/dist-cjs/contact-details/ContactFavoriteToggle.js +1 -1
  92. package/dist-cjs/contact-details/ContactMetadata.js +2 -2
  93. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  94. package/dist-cjs/contact-details/ContactMetadataItem.js.map +1 -1
  95. package/dist-cjs/contact-details/ContactPrimaryInfo.js +1 -1
  96. package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
  97. package/dist-cjs/contact-details/ContactSecondaryInfo.js +1 -1
  98. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  99. package/dist-cjs/contact-details/ContactTertiaryInfo.js +1 -1
  100. package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
  101. package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
  102. package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
  103. package/dist-cjs/content-status/ContentStatus.js +3 -3
  104. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  105. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  106. package/dist-cjs/date-input/DateInput.css.js +1 -1
  107. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  108. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  109. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  110. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  111. package/dist-cjs/date-picker/DatePickerContext.js +10 -10
  112. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  113. package/dist-cjs/date-picker/DatePickerOverlay.css.js +1 -1
  114. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  115. package/dist-cjs/date-picker/DatePickerOverlayProvider.js +4 -0
  116. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  117. package/dist-cjs/date-picker/DatePickerPanel.css.js +1 -1
  118. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +3 -3
  119. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  120. package/dist-cjs/date-picker/DatePickerRangeInput.js +1 -1
  121. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  122. package/dist-cjs/date-picker/DatePickerRangePanel.js +3 -3
  123. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  124. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +3 -3
  125. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  126. package/dist-cjs/date-picker/DatePickerSingleInput.js +1 -1
  127. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  128. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  129. package/dist-cjs/deck-item/DeckItem.js +2 -2
  130. package/dist-cjs/deck-item/DeckItem.js.map +1 -1
  131. package/dist-cjs/deck-layout/DeckLayout.js +3 -3
  132. package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
  133. package/dist-cjs/dropdown/Dropdown.js +1 -1
  134. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  135. package/dist-cjs/dropdown/DropdownBase.js +3 -3
  136. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  137. package/dist-cjs/dropdown/DropdownButton.js +2 -2
  138. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  139. package/dist-cjs/dropdown/useDropdown.js +1 -1
  140. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  141. package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
  142. package/dist-cjs/editable-label/EditableLabel.js +2 -2
  143. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  144. package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
  145. package/dist-cjs/form-field-legacy/FormFieldLegacy.css.js +1 -1
  146. package/dist-cjs/form-field-legacy/FormFieldLegacy.js +4 -4
  147. package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
  148. package/dist-cjs/form-field-legacy/FormHelperText.js.map +1 -1
  149. package/dist-cjs/form-field-legacy/FormLabel.js +3 -3
  150. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  151. package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
  152. package/dist-cjs/form-group/FormGroup.js +2 -2
  153. package/dist-cjs/form-group/FormGroup.js.map +1 -1
  154. package/dist-cjs/formatted-input/FormattedInput.js +3 -3
  155. package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
  156. package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
  157. package/dist-cjs/index.js +105 -107
  158. package/dist-cjs/index.js.map +1 -1
  159. package/dist-cjs/input-legacy/InputLegacy.js +3 -3
  160. package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
  161. package/dist-cjs/input-legacy/StaticInputAdornment.js +2 -2
  162. package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
  163. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  164. package/dist-cjs/list/Highlighter.js +2 -2
  165. package/dist-cjs/list/Highlighter.js.map +1 -1
  166. package/dist-cjs/list/List.css.js +1 -1
  167. package/dist-cjs/list/List.js +3 -3
  168. package/dist-cjs/list/List.js.map +1 -1
  169. package/dist-cjs/list/ListItem.js +2 -2
  170. package/dist-cjs/list/ListItem.js.map +1 -1
  171. package/dist-cjs/list/VirtualizedList.js +4 -4
  172. package/dist-cjs/list/VirtualizedList.js.map +1 -1
  173. package/dist-cjs/list/useList.js +2 -2
  174. package/dist-cjs/list/useList.js.map +1 -1
  175. package/dist-cjs/list/useListHeight.js +1 -1
  176. package/dist-cjs/list-deprecated/List.css.js +1 -1
  177. package/dist-cjs/list-deprecated/List.js +2 -2
  178. package/dist-cjs/list-deprecated/List.js.map +1 -1
  179. package/dist-cjs/list-deprecated/ListBase.js +15 -19
  180. package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
  181. package/dist-cjs/list-deprecated/ListItem.js +1 -1
  182. package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
  183. package/dist-cjs/list-deprecated/ListItemBase.js +2 -2
  184. package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
  185. package/dist-cjs/list-deprecated/internal/DescendantContext.js +7 -4
  186. package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
  187. package/dist-cjs/list-deprecated/internal/Highlighter.js +2 -2
  188. package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
  189. package/dist-cjs/list-deprecated/itemToString.js +1 -1
  190. package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
  191. package/dist-cjs/list-deprecated/useList.js.map +1 -1
  192. package/dist-cjs/list-next/ListItemNext.css.js +1 -1
  193. package/dist-cjs/list-next/ListItemNext.js +2 -2
  194. package/dist-cjs/list-next/ListItemNext.js.map +1 -1
  195. package/dist-cjs/list-next/ListNext.css.js +1 -1
  196. package/dist-cjs/list-next/ListNext.js.map +1 -1
  197. package/dist-cjs/logo/Logo.js +2 -2
  198. package/dist-cjs/logo/Logo.js.map +1 -1
  199. package/dist-cjs/logo/LogoSeparator.css.js +1 -1
  200. package/dist-cjs/logo/LogoSeparator.js +2 -2
  201. package/dist-cjs/logo/LogoSeparator.js.map +1 -1
  202. package/dist-cjs/menu-button/MenuButton.js +1 -1
  203. package/dist-cjs/menu-button/MenuButton.js.map +1 -1
  204. package/dist-cjs/menu-button/MenuButtonTrigger.js +2 -2
  205. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  206. package/dist-cjs/metric/Metric.js +2 -2
  207. package/dist-cjs/metric/Metric.js.map +1 -1
  208. package/dist-cjs/metric/MetricContent.css.js +1 -1
  209. package/dist-cjs/metric/MetricContent.js +2 -2
  210. package/dist-cjs/metric/MetricContent.js.map +1 -1
  211. package/dist-cjs/metric/MetricHeader.js +2 -2
  212. package/dist-cjs/metric/MetricHeader.js.map +1 -1
  213. package/dist-cjs/number-input/NumberInput.css.js +1 -1
  214. package/dist-cjs/number-input/NumberInput.js +1 -1
  215. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  216. package/dist-cjs/number-input/useNumberInput.js.map +1 -1
  217. package/dist-cjs/portal/Portal.js.map +1 -1
  218. package/dist-cjs/query-input/QueryInput.js +3 -3
  219. package/dist-cjs/query-input/QueryInput.js.map +1 -1
  220. package/dist-cjs/query-input/internal/CategoryList.js +1 -1
  221. package/dist-cjs/query-input/internal/CategoryListItem.js +1 -1
  222. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  223. package/dist-cjs/query-input/internal/SearchList.js +3 -3
  224. package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
  225. package/dist-cjs/query-input/internal/ValueList.js +1 -1
  226. package/dist-cjs/query-input/internal/ValueSelector.js +1 -1
  227. package/dist-cjs/query-input/useQueryInput.js.map +1 -1
  228. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  229. package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
  230. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  231. package/dist-cjs/responsive/useWidth.js.map +1 -1
  232. package/dist-cjs/search-input/SearchInput.js +2 -2
  233. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  234. package/dist-cjs/static-list/StaticList.css.js +1 -1
  235. package/dist-cjs/static-list/StaticList.js.map +1 -1
  236. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -1
  237. package/dist-cjs/system-status/SystemStatus.css.js +1 -1
  238. package/dist-cjs/system-status/SystemStatus.js +2 -2
  239. package/dist-cjs/system-status/SystemStatus.js.map +1 -1
  240. package/dist-cjs/system-status/SystemStatusActions.js +2 -2
  241. package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
  242. package/dist-cjs/system-status/SystemStatusContent.js +2 -2
  243. package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
  244. package/dist-cjs/tabs/Tab.css.js +1 -1
  245. package/dist-cjs/tabs/Tab.js.map +1 -1
  246. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  247. package/dist-cjs/tabs/TabActivationIndicator.js +2 -2
  248. package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
  249. package/dist-cjs/tabs/TabPanel.js.map +1 -1
  250. package/dist-cjs/tabs/Tabs.js +3 -3
  251. package/dist-cjs/tabs/Tabs.js.map +1 -1
  252. package/dist-cjs/tabs/Tabstrip.css.js +1 -1
  253. package/dist-cjs/tabs/Tabstrip.js +5 -5
  254. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  255. package/dist-cjs/tabs/drag-drop/Draggable.js +2 -2
  256. package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
  257. package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js +2 -2
  258. package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  259. package/dist-cjs/tabs/useActivationIndicator.js +1 -1
  260. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  261. package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
  262. package/dist-cjs/tabs/useTabstrip.js +1 -1
  263. package/dist-cjs/tabs/useTabstrip.js.map +1 -1
  264. package/dist-cjs/tabs-next/TabBar.css.js +1 -1
  265. package/dist-cjs/tabs-next/TabBar.js +2 -2
  266. package/dist-cjs/tabs-next/TabBar.js.map +1 -1
  267. package/dist-cjs/tabs-next/TabListNext.js +2 -2
  268. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  269. package/dist-cjs/tabs-next/TabNext.css.js +1 -1
  270. package/dist-cjs/tabs-next/TabNext.js.map +1 -1
  271. package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
  272. package/dist-cjs/tabs-next/TabOverflowList.css.js +1 -1
  273. package/dist-cjs/tabs-next/TabOverflowList.js +1 -1
  274. package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
  275. package/dist-cjs/tabs-next/TabsNext.js +2 -2
  276. package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
  277. package/dist-cjs/tokenized-input/TokenizedInputBase.js +2 -2
  278. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  279. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  280. package/dist-cjs/tokenized-input/internal/InputRuler.js.map +1 -1
  281. package/dist-cjs/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  282. package/dist-cjs/tokenized-input/internal/defaultItemToString.js +1 -1
  283. package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
  284. package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
  285. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  286. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js +1 -1
  287. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  288. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  289. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  290. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  291. package/dist-cjs/toolbar/Toolbar.css.js +1 -1
  292. package/dist-cjs/toolbar/Toolbar.js +6 -6
  293. package/dist-cjs/toolbar/Toolbar.js.map +1 -1
  294. package/dist-cjs/toolbar/ToolbarButton.js +1 -1
  295. package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
  296. package/dist-cjs/toolbar/Tooltray.js +3 -3
  297. package/dist-cjs/toolbar/Tooltray.js.map +1 -1
  298. package/dist-cjs/toolbar/internal/renderToolbarItems.js +3 -3
  299. package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
  300. package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
  301. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  302. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js +5 -5
  303. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  304. package/dist-cjs/toolbar/toolbar-field/ToolbarField.js +1 -1
  305. package/dist-cjs/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  306. package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  307. package/dist-cjs/tree/Tree.js +4 -4
  308. package/dist-cjs/tree/Tree.js.map +1 -1
  309. package/dist-cjs/tree/TreeNode.js +2 -2
  310. package/dist-cjs/tree/TreeNode.js.map +1 -1
  311. package/dist-cjs/tree/useTree.js +2 -2
  312. package/dist-cjs/tree/useTree.js.map +1 -1
  313. package/dist-cjs/utils/useEventCallback.js +1 -1
  314. package/dist-cjs/utils/useEventCallback.js.map +1 -1
  315. package/dist-cjs/window/ElectronWindow.js +4 -4
  316. package/dist-cjs/window/ElectronWindow.js.map +1 -1
  317. package/dist-es/app-header/AppHeader.css.js +1 -1
  318. package/dist-es/app-header/AppHeader.js +5 -5
  319. package/dist-es/app-header/AppHeader.js.map +1 -1
  320. package/dist-es/breadcrumbs/Breadcrumb.js +3 -3
  321. package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
  322. package/dist-es/breadcrumbs/Breadcrumbs.js +3 -3
  323. package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
  324. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  325. package/dist-es/button-bar/ButtonBar.js +4 -4
  326. package/dist-es/button-bar/ButtonBar.js.map +1 -1
  327. package/dist-es/button-bar/OrderedButton.js +3 -3
  328. package/dist-es/button-bar/OrderedButton.js.map +1 -1
  329. package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
  330. package/dist-es/calendar/Calendar.js +35 -10
  331. package/dist-es/calendar/Calendar.js.map +1 -1
  332. package/dist-es/calendar/CalendarGrid.js +2 -2
  333. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  334. package/dist-es/calendar/CalendarMonthHeader.js +2 -2
  335. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  336. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  337. package/dist-es/calendar/CalendarWeekHeader.js +3 -3
  338. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  339. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  340. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  341. package/dist-es/calendar/internal/CalendarMonth.js +3 -3
  342. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  343. package/dist-es/calendar/internal/useFocusManagement.js +1 -1
  344. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  345. package/dist-es/calendar/useCalendar.js +6 -0
  346. package/dist-es/calendar/useCalendar.js.map +1 -1
  347. package/dist-es/calendar/useCalendarSelection.js +186 -102
  348. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  349. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  350. package/dist-es/cascading-menu/CascadingMenuItem.css.js +1 -1
  351. package/dist-es/cascading-menu/CascadingMenuItem.js +3 -3
  352. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  353. package/dist-es/cascading-menu/CascadingMenuList.js +5 -5
  354. package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
  355. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  356. package/dist-es/color-chooser/AlphaInputField.js +2 -2
  357. package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
  358. package/dist-es/color-chooser/ColorChooser.css.js +1 -1
  359. package/dist-es/color-chooser/ColorChooser.js +39 -41
  360. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  361. package/dist-es/color-chooser/ColorPicker.css.js +1 -1
  362. package/dist-es/color-chooser/ColorPicker.js +3 -3
  363. package/dist-es/color-chooser/ColorPicker.js.map +1 -1
  364. package/dist-es/color-chooser/DictTabs.js +2 -2
  365. package/dist-es/color-chooser/HexInput.css.js +1 -1
  366. package/dist-es/color-chooser/HexInput.js +2 -2
  367. package/dist-es/color-chooser/HexInput.js.map +1 -1
  368. package/dist-es/color-chooser/RGBAInput.css.js +1 -1
  369. package/dist-es/color-chooser/RGBAInput.js +3 -3
  370. package/dist-es/color-chooser/RGBAInput.js.map +1 -1
  371. package/dist-es/color-chooser/RGBAInputField.js +2 -2
  372. package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
  373. package/dist-es/color-chooser/Swatch.css.js +1 -1
  374. package/dist-es/color-chooser/Swatches.js +3 -3
  375. package/dist-es/color-chooser/Swatches.js.map +1 -1
  376. package/dist-es/color-chooser/SwatchesPicker.js +3 -3
  377. package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
  378. package/dist-es/combo-box/ComboBox.js +6 -6
  379. package/dist-es/combo-box/ComboBox.js.map +1 -1
  380. package/dist-es/combo-box/useCombobox.js +1 -1
  381. package/dist-es/combo-box/useCombobox.js.map +1 -1
  382. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js +3 -3
  383. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  384. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js +2 -2
  385. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  386. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js +2 -2
  387. package/dist-es/combo-box-deprecated/internal/useComboBox.js +1 -1
  388. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js +1 -1
  389. package/dist-es/common-hooks/collectionProvider.js.map +1 -1
  390. package/dist-es/common-hooks/itemToString.js +1 -1
  391. package/dist-es/common-hooks/itemToString.js.map +1 -1
  392. package/dist-es/common-hooks/useCollectionItems.js +1 -1
  393. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  394. package/dist-es/common-hooks/useImperativeScrollingAPI.js +6 -10
  395. package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  396. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  397. package/dist-es/common-hooks/useTypeahead.js.map +1 -1
  398. package/dist-es/common-hooks/utils/collection-item-utils.js +2 -2
  399. package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
  400. package/dist-es/contact-details/ContactActions.js +1 -1
  401. package/dist-es/contact-details/ContactActions.js.map +1 -1
  402. package/dist-es/contact-details/ContactAvatar.js +1 -1
  403. package/dist-es/contact-details/ContactDetails.js +4 -4
  404. package/dist-es/contact-details/ContactDetails.js.map +1 -1
  405. package/dist-es/contact-details/ContactFavoriteToggle.js +1 -1
  406. package/dist-es/contact-details/ContactMetadata.js +2 -2
  407. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  408. package/dist-es/contact-details/ContactMetadataItem.js.map +1 -1
  409. package/dist-es/contact-details/ContactPrimaryInfo.js +1 -1
  410. package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
  411. package/dist-es/contact-details/ContactSecondaryInfo.js +1 -1
  412. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  413. package/dist-es/contact-details/ContactTertiaryInfo.js +1 -1
  414. package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
  415. package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
  416. package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
  417. package/dist-es/content-status/ContentStatus.js +3 -3
  418. package/dist-es/content-status/ContentStatus.js.map +1 -1
  419. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  420. package/dist-es/date-input/DateInput.css.js +1 -1
  421. package/dist-es/date-input/DateInputRange.js.map +1 -1
  422. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  423. package/dist-es/date-picker/DatePicker.js.map +1 -1
  424. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  425. package/dist-es/date-picker/DatePickerContext.js +10 -10
  426. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  427. package/dist-es/date-picker/DatePickerOverlay.css.js +1 -1
  428. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  429. package/dist-es/date-picker/DatePickerOverlayProvider.js +4 -0
  430. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  431. package/dist-es/date-picker/DatePickerPanel.css.js +1 -1
  432. package/dist-es/date-picker/DatePickerRangeGridPanel.js +3 -3
  433. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  434. package/dist-es/date-picker/DatePickerRangeInput.js +1 -1
  435. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  436. package/dist-es/date-picker/DatePickerRangePanel.js +3 -3
  437. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  438. package/dist-es/date-picker/DatePickerSingleGridPanel.js +3 -3
  439. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  440. package/dist-es/date-picker/DatePickerSingleInput.js +1 -1
  441. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  442. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  443. package/dist-es/deck-item/DeckItem.js +2 -2
  444. package/dist-es/deck-item/DeckItem.js.map +1 -1
  445. package/dist-es/deck-layout/DeckLayout.js +3 -3
  446. package/dist-es/deck-layout/DeckLayout.js.map +1 -1
  447. package/dist-es/dropdown/Dropdown.js +1 -1
  448. package/dist-es/dropdown/Dropdown.js.map +1 -1
  449. package/dist-es/dropdown/DropdownBase.js +3 -3
  450. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  451. package/dist-es/dropdown/DropdownButton.js +2 -2
  452. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  453. package/dist-es/dropdown/useDropdown.js +1 -1
  454. package/dist-es/dropdown/useDropdown.js.map +1 -1
  455. package/dist-es/dropdown/useDropdownBase.js.map +1 -1
  456. package/dist-es/editable-label/EditableLabel.js +2 -2
  457. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  458. package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
  459. package/dist-es/form-field-legacy/FormFieldLegacy.css.js +1 -1
  460. package/dist-es/form-field-legacy/FormFieldLegacy.js +4 -4
  461. package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
  462. package/dist-es/form-field-legacy/FormHelperText.js.map +1 -1
  463. package/dist-es/form-field-legacy/FormLabel.js +3 -3
  464. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  465. package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
  466. package/dist-es/form-group/FormGroup.js +2 -2
  467. package/dist-es/form-group/FormGroup.js.map +1 -1
  468. package/dist-es/formatted-input/FormattedInput.js +3 -3
  469. package/dist-es/formatted-input/FormattedInput.js.map +1 -1
  470. package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
  471. package/dist-es/index.js +52 -52
  472. package/dist-es/input-legacy/InputLegacy.js +3 -3
  473. package/dist-es/input-legacy/InputLegacy.js.map +1 -1
  474. package/dist-es/input-legacy/StaticInputAdornment.js +2 -2
  475. package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
  476. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  477. package/dist-es/list/Highlighter.js +2 -2
  478. package/dist-es/list/Highlighter.js.map +1 -1
  479. package/dist-es/list/List.css.js +1 -1
  480. package/dist-es/list/List.js +3 -3
  481. package/dist-es/list/List.js.map +1 -1
  482. package/dist-es/list/ListItem.js +2 -2
  483. package/dist-es/list/ListItem.js.map +1 -1
  484. package/dist-es/list/VirtualizedList.js +4 -4
  485. package/dist-es/list/VirtualizedList.js.map +1 -1
  486. package/dist-es/list/useList.js +2 -2
  487. package/dist-es/list/useList.js.map +1 -1
  488. package/dist-es/list/useListHeight.js +1 -1
  489. package/dist-es/list-deprecated/List.css.js +1 -1
  490. package/dist-es/list-deprecated/List.js +2 -2
  491. package/dist-es/list-deprecated/List.js.map +1 -1
  492. package/dist-es/list-deprecated/ListBase.js +15 -19
  493. package/dist-es/list-deprecated/ListBase.js.map +1 -1
  494. package/dist-es/list-deprecated/ListItem.js +1 -1
  495. package/dist-es/list-deprecated/ListItem.js.map +1 -1
  496. package/dist-es/list-deprecated/ListItemBase.js +2 -2
  497. package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
  498. package/dist-es/list-deprecated/internal/DescendantContext.js +7 -4
  499. package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
  500. package/dist-es/list-deprecated/internal/Highlighter.js +2 -2
  501. package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
  502. package/dist-es/list-deprecated/itemToString.js +1 -1
  503. package/dist-es/list-deprecated/itemToString.js.map +1 -1
  504. package/dist-es/list-deprecated/useList.js.map +1 -1
  505. package/dist-es/list-next/ListItemNext.css.js +1 -1
  506. package/dist-es/list-next/ListItemNext.js +2 -2
  507. package/dist-es/list-next/ListItemNext.js.map +1 -1
  508. package/dist-es/list-next/ListNext.css.js +1 -1
  509. package/dist-es/list-next/ListNext.js.map +1 -1
  510. package/dist-es/logo/Logo.js +2 -2
  511. package/dist-es/logo/Logo.js.map +1 -1
  512. package/dist-es/logo/LogoSeparator.css.js +1 -1
  513. package/dist-es/logo/LogoSeparator.js +2 -2
  514. package/dist-es/logo/LogoSeparator.js.map +1 -1
  515. package/dist-es/menu-button/MenuButton.js +1 -1
  516. package/dist-es/menu-button/MenuButton.js.map +1 -1
  517. package/dist-es/menu-button/MenuButtonTrigger.js +2 -2
  518. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  519. package/dist-es/metric/Metric.js +2 -2
  520. package/dist-es/metric/Metric.js.map +1 -1
  521. package/dist-es/metric/MetricContent.css.js +1 -1
  522. package/dist-es/metric/MetricContent.js +2 -2
  523. package/dist-es/metric/MetricContent.js.map +1 -1
  524. package/dist-es/metric/MetricHeader.js +2 -2
  525. package/dist-es/metric/MetricHeader.js.map +1 -1
  526. package/dist-es/number-input/NumberInput.css.js +1 -1
  527. package/dist-es/number-input/NumberInput.js +1 -1
  528. package/dist-es/number-input/NumberInput.js.map +1 -1
  529. package/dist-es/number-input/useNumberInput.js.map +1 -1
  530. package/dist-es/portal/Portal.js.map +1 -1
  531. package/dist-es/query-input/QueryInput.js +3 -3
  532. package/dist-es/query-input/QueryInput.js.map +1 -1
  533. package/dist-es/query-input/internal/CategoryList.js +1 -1
  534. package/dist-es/query-input/internal/CategoryListItem.js +1 -1
  535. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  536. package/dist-es/query-input/internal/SearchList.js +3 -3
  537. package/dist-es/query-input/internal/SearchList.js.map +1 -1
  538. package/dist-es/query-input/internal/ValueList.js +1 -1
  539. package/dist-es/query-input/internal/ValueSelector.js +1 -1
  540. package/dist-es/query-input/useQueryInput.js.map +1 -1
  541. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  542. package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
  543. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  544. package/dist-es/responsive/useWidth.js.map +1 -1
  545. package/dist-es/search-input/SearchInput.js +2 -2
  546. package/dist-es/search-input/SearchInput.js.map +1 -1
  547. package/dist-es/static-list/StaticList.css.js +1 -1
  548. package/dist-es/static-list/StaticList.js.map +1 -1
  549. package/dist-es/static-list/StaticListItemContent.js.map +1 -1
  550. package/dist-es/system-status/SystemStatus.css.js +1 -1
  551. package/dist-es/system-status/SystemStatus.js +2 -2
  552. package/dist-es/system-status/SystemStatus.js.map +1 -1
  553. package/dist-es/system-status/SystemStatusActions.js +2 -2
  554. package/dist-es/system-status/SystemStatusActions.js.map +1 -1
  555. package/dist-es/system-status/SystemStatusContent.js +2 -2
  556. package/dist-es/system-status/SystemStatusContent.js.map +1 -1
  557. package/dist-es/tabs/Tab.css.js +1 -1
  558. package/dist-es/tabs/Tab.js.map +1 -1
  559. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  560. package/dist-es/tabs/TabActivationIndicator.js +2 -2
  561. package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
  562. package/dist-es/tabs/TabPanel.js.map +1 -1
  563. package/dist-es/tabs/Tabs.js +3 -3
  564. package/dist-es/tabs/Tabs.js.map +1 -1
  565. package/dist-es/tabs/Tabstrip.css.js +1 -1
  566. package/dist-es/tabs/Tabstrip.js +5 -5
  567. package/dist-es/tabs/Tabstrip.js.map +1 -1
  568. package/dist-es/tabs/drag-drop/Draggable.js +2 -2
  569. package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
  570. package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js +2 -2
  571. package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  572. package/dist-es/tabs/useActivationIndicator.js +1 -1
  573. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  574. package/dist-es/tabs/useItemsWithIds.js.map +1 -1
  575. package/dist-es/tabs/useTabstrip.js +1 -1
  576. package/dist-es/tabs/useTabstrip.js.map +1 -1
  577. package/dist-es/tabs-next/TabBar.css.js +1 -1
  578. package/dist-es/tabs-next/TabBar.js +2 -2
  579. package/dist-es/tabs-next/TabBar.js.map +1 -1
  580. package/dist-es/tabs-next/TabListNext.js +2 -2
  581. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  582. package/dist-es/tabs-next/TabNext.css.js +1 -1
  583. package/dist-es/tabs-next/TabNext.js.map +1 -1
  584. package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
  585. package/dist-es/tabs-next/TabOverflowList.css.js +1 -1
  586. package/dist-es/tabs-next/TabOverflowList.js +1 -1
  587. package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
  588. package/dist-es/tabs-next/TabsNext.js +2 -2
  589. package/dist-es/tabs-next/TabsNext.js.map +1 -1
  590. package/dist-es/tokenized-input/TokenizedInputBase.js +2 -2
  591. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  592. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  593. package/dist-es/tokenized-input/internal/InputRuler.js.map +1 -1
  594. package/dist-es/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  595. package/dist-es/tokenized-input/internal/defaultItemToString.js +1 -1
  596. package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
  597. package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
  598. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  599. package/dist-es/tokenized-input-next/TokenizedInputNext.js +1 -1
  600. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  601. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  602. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  603. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  604. package/dist-es/toolbar/Toolbar.css.js +1 -1
  605. package/dist-es/toolbar/Toolbar.js +6 -6
  606. package/dist-es/toolbar/Toolbar.js.map +1 -1
  607. package/dist-es/toolbar/ToolbarButton.js +1 -1
  608. package/dist-es/toolbar/ToolbarButton.js.map +1 -1
  609. package/dist-es/toolbar/Tooltray.js +3 -3
  610. package/dist-es/toolbar/Tooltray.js.map +1 -1
  611. package/dist-es/toolbar/internal/renderToolbarItems.js +3 -3
  612. package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
  613. package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
  614. package/dist-es/toolbar/overflow-panel/OverflowPanel.css.js +1 -1
  615. package/dist-es/toolbar/overflow-panel/OverflowPanel.js +5 -5
  616. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  617. package/dist-es/toolbar/toolbar-field/ToolbarField.js +1 -1
  618. package/dist-es/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  619. package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  620. package/dist-es/tree/Tree.js +4 -4
  621. package/dist-es/tree/Tree.js.map +1 -1
  622. package/dist-es/tree/TreeNode.js +2 -2
  623. package/dist-es/tree/TreeNode.js.map +1 -1
  624. package/dist-es/tree/useTree.js +2 -2
  625. package/dist-es/tree/useTree.js.map +1 -1
  626. package/dist-es/utils/useEventCallback.js +1 -1
  627. package/dist-es/utils/useEventCallback.js.map +1 -1
  628. package/dist-es/window/ElectronWindow.js +4 -4
  629. package/dist-es/window/ElectronWindow.js.map +1 -1
  630. package/dist-types/button-bar/ButtonBar.d.ts +1 -1
  631. package/dist-types/calendar/Calendar.d.ts +43 -7
  632. package/dist-types/calendar/CalendarGrid.d.ts +2 -2
  633. package/dist-types/calendar/CalendarMonthHeader.d.ts +1 -1
  634. package/dist-types/calendar/index.d.ts +3 -3
  635. package/dist-types/calendar/useCalendar.d.ts +23 -24
  636. package/dist-types/calendar/useCalendarSelection.d.ts +152 -58
  637. package/dist-types/color-chooser/index.d.ts +4 -4
  638. package/dist-types/combo-box/ComboBox.d.ts +1 -1
  639. package/dist-types/combo-box-deprecated/internal/useComboBox.d.ts +1 -1
  640. package/dist-types/combo-box-deprecated/internal/useMultiSelectComboBox.d.ts +2 -2
  641. package/dist-types/common-hooks/index.d.ts +2 -2
  642. package/dist-types/contact-details/index.d.ts +1 -1
  643. package/dist-types/contact-details/internal/index.d.ts +1 -1
  644. package/dist-types/content-status/internal/StatusIndicator.d.ts +1 -2
  645. package/dist-types/date-input/index.d.ts +1 -1
  646. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +2 -3
  647. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +1 -2
  648. package/dist-types/date-picker/index.d.ts +3 -3
  649. package/dist-types/dropdown/index.d.ts +1 -1
  650. package/dist-types/index.d.ts +5 -5
  651. package/dist-types/list/index.d.ts +3 -3
  652. package/dist-types/list-deprecated/index.d.ts +3 -3
  653. package/dist-types/list-deprecated/internal/DescendantContext.d.ts +13 -6
  654. package/dist-types/list-next/index.d.ts +1 -1
  655. package/dist-types/metric/index.d.ts +1 -1
  656. package/dist-types/metric/internal/index.d.ts +1 -1
  657. package/dist-types/number-input/index.d.ts +1 -1
  658. package/dist-types/query-input/index.d.ts +1 -1
  659. package/dist-types/query-input/useQueryInput.d.ts +1 -1
  660. package/dist-types/responsive/index.d.ts +5 -5
  661. package/dist-types/system-status/index.d.ts +1 -1
  662. package/dist-types/tabs/index.d.ts +2 -2
  663. package/dist-types/tabs/useTabstrip.d.ts +1 -1
  664. package/dist-types/tabs-next/index.d.ts +4 -4
  665. package/dist-types/toolbar/index.d.ts +1 -1
  666. package/dist-types/utils/index.d.ts +1 -1
  667. package/dist-types/window/index.d.ts +1 -1
  668. package/package.json +7 -6
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n * @template TDate - The type of the date object.\n */\nexport interface DateInputRangeProps<TDate extends DateFrameworkType>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<InputProps, \"defaultValue\" | \"inputRef\" | \"value\" | \"onChange\"> {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult<TDate>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection<TDate> | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection<TDate> | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\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\nexport const DateInputRange = forwardRef<\n HTMLDivElement,\n DateInputRangeProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DateInputRangeProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const { dateAdapter } = useLocalization<TDate>();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onClick,\n onDateValueChange,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n endInputProps = {},\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate || defaultDate?.startDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ?? defaultDate?.startDate) as TDate,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId();\n const endInputID = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult<TDate> | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n const updatedDateRange: DateRangeSelection<TDate> = {\n startDate,\n endDate,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleWrapperClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n startInputPropsLabelledBy,\n startInputID,\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n endInputPropsLabelledBy,\n endInputID,\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","DateParserField","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputRange.js","sources":["../src/date-input/DateInputRange.tsx"],"sourcesContent":["import {\n type InputProps,\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { DateRangeSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * DateInputRange raw value or null if no date is defined.\n */\nexport type DateInputRangeValue = {\n startDate?: string | null;\n endDate?: string | null;\n};\n\n/**\n * Details of parsing the date range\n */\nexport type DateInputRangeDetails = {\n /** Details of parsing the start date and applying any validation */\n startDate?: DateDetail;\n /** Details of parsing the end date and applying any validation */\n endDate?: DateDetail;\n};\n\n/**\n * Enum to identify the field being parsed\n */\nexport enum DateParserField {\n START = \"start\",\n END = \"end\",\n}\n\n/**\n * Props for the DateInputRange component.\n * @template TDate - The type of the date object.\n */\nexport interface DateInputRangeProps<TDate extends DateFrameworkType>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\" | \"onChange\">,\n Omit<InputProps, \"defaultValue\" | \"inputRef\" | \"value\" | \"onChange\"> {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the start `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n startInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * Attributes applied to the end `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n endInputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Optional ref for the start input component.\n */\n startInputRef?: Ref<HTMLInputElement>;\n /**\n * Optional ref for the end input component.\n */\n endInputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param field: DateParserField to identify value,\n * @param format - format required\n */\n parse?: (\n value: string,\n field: DateParserField,\n format: string,\n ) => ParserResult<TDate>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: DateInputRangeValue;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: DateInputRangeValue;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: DateRangeSelection<TDate> | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: DateRangeSelection<TDate> | null;\n /**\n * Callback fired when the input value changes.\n * @param event - The change event.\n * @param date - The new date input range value.\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details: DateInputRangeDetails,\n ) => void;\n /**\n * Called when input values change, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input range value.\n */\n onDateValueChange?: (\n event: SyntheticEvent | null,\n newValue: DateInputRangeValue,\n ) => void;\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\nexport const DateInputRange = forwardRef<\n HTMLDivElement,\n DateInputRangeProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DateInputRangeProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const { dateAdapter } = useLocalization<TDate>();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = {\n startDate: \"\",\n endDate: \"\",\n },\n onChange,\n onClick,\n onDateValueChange,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n startInputProps = {},\n endInputProps = {},\n startInputRef: startInputRefProp,\n endInputRef: endInputRefProp,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n timezone = dateProp?.startDate || defaultDate?.startDate\n ? dateAdapter.getTimezone(\n (dateProp?.startDate ?? defaultDate?.startDate) as TDate,\n )\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n\n const startInputRef = useRef<HTMLInputElement>(null);\n const handleStartInputRef = useForkRef(startInputRef, startInputRefProp);\n const endInputRef = useRef<HTMLInputElement>(null);\n const handleEndInputRef = useForkRef(endInputRef, endInputRefProp);\n\n const startInputID = useId();\n const endInputID = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-range\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const parseDateValue = (\n dateValue: string | null | undefined,\n field: DateParserField,\n ): ParserResult<TDate> | undefined =>\n parseProp\n ? parseProp(dateValue ?? \"\", field, format)\n : dateAdapter.parse.bind(dateAdapter)(dateValue ?? \"\", format);\n\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputRange\",\n state: \"dateValue\",\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n const { date: startDate = undefined } =\n parseDateValue(defaultValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined } =\n parseDateValue(defaultValue?.endDate, DateParserField.END) ?? {};\n return {\n startDate,\n endDate,\n };\n }, []),\n name: \"DateInputRange\",\n state: \"date\",\n });\n\n const lastAppliedValue = useRef<DateInputRangeValue>(dateValue);\n const preservedTime = useRef<{\n startTime: TimeFields | null;\n endTime: TimeFields | null;\n }>({ startTime: null, endTime: null });\n preservedTime.current = {\n startTime:\n date?.startDate && dateAdapter.isValid(date?.startDate)\n ? dateAdapter.getTime(date.startDate)\n : null,\n endTime:\n date?.endDate && dateAdapter.isValid(date?.endDate)\n ? dateAdapter.getTime(date.endDate)\n : null,\n };\n const setDateValueFromDate = (newDate: typeof date) => {\n let newDateValue = { startDate: \"\", endDate: \"\" };\n if (!newDate?.startDate) {\n newDateValue = { ...newDateValue, startDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.startDate)) {\n newDateValue = {\n ...newDateValue,\n startDate: dateValue?.startDate ?? \"\",\n };\n } else if (newDate?.startDate) {\n const formattedStartDateValue = dateAdapter.format(\n newDate.startDate,\n format,\n );\n newDateValue = { ...newDateValue, startDate: formattedStartDateValue };\n }\n if (!newDate?.endDate) {\n newDateValue = { ...newDateValue, endDate: \"\" };\n } else if (!dateAdapter.isValid(newDate?.endDate)) {\n newDateValue = { ...newDateValue, endDate: dateValue?.endDate ?? \"\" };\n } else if (newDate?.endDate && dateAdapter.isValid(newDate.endDate)) {\n const formattedEndDateValue = dateAdapter.format(\n newDate.endDate,\n format,\n );\n newDateValue = { ...newDateValue, endDate: formattedEndDateValue };\n }\n\n if (\n (!newDateValue?.startDate && !!dateValue?.startDate) ||\n (!newDateValue.endDate && !!dateValue?.endDate) ||\n newDateValue?.startDate !== dateValue?.startDate ||\n newDateValue?.endDate !== dateValue?.endDate\n ) {\n onDateValueChange?.(null, newDateValue);\n setDateValue(newDateValue);\n }\n return newDateValue;\n };\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n lastAppliedValue.current = setDateValueFromDate(date);\n }, [date, date?.startDate, date?.endDate, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": startInputPropsDescribedBy,\n \"aria-labelledby\": startInputPropsLabelledBy,\n onBlur: startInputPropsOnBlur,\n onChange: startInputPropsOnChange,\n onKeyDown: startInputPropsOnKeyDown,\n onFocus: startInputPropsOnFocus,\n required: startInputPropsRequired,\n ...restStartInputProps\n } = startInputProps;\n\n const startInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : startInputPropsRequired;\n\n const {\n \"aria-describedby\": endInputPropsDescribedBy,\n \"aria-labelledby\": endInputPropsLabelledBy,\n onBlur: endInputPropsOnBlur,\n onChange: endInputPropsOnChange,\n onKeyDown: endInputPropsOnKeyDown,\n onFocus: endInputPropsOnFocus,\n required: endInputPropsRequired,\n ...restEndInputProps\n } = endInputProps;\n\n const endInputIsRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : endInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const { date: startDate = undefined, ...startDateParseDetails } =\n parseDateValue(dateValue?.startDate, DateParserField.START) ?? {};\n const { date: endDate = undefined, ...endDateParseDetails } =\n parseDateValue(dateValue?.endDate, DateParserField.END) ?? {};\n const updatedDateRange: DateRangeSelection<TDate> = {\n startDate,\n endDate,\n };\n if (dateAdapter.isValid(startDate)) {\n updatedDateRange.startDate = dateAdapter.setTimezone(\n startDate,\n timezone,\n );\n if (preservedTime.current.startTime) {\n updatedDateRange.startDate = dateAdapter.set(\n updatedDateRange.startDate,\n preservedTime.current.startTime,\n );\n }\n }\n if (dateAdapter.isValid(endDate)) {\n updatedDateRange.endDate = dateAdapter.setTimezone(endDate, timezone);\n if (preservedTime.current.endTime) {\n updatedDateRange.endDate = dateAdapter.set(\n updatedDateRange.endDate,\n preservedTime.current.endTime,\n );\n }\n }\n const updatedDateValue = setDateValueFromDate(updatedDateRange);\n\n setDate(updatedDateRange);\n\n if (\n lastAppliedValue.current.startDate !== updatedDateValue.startDate ||\n lastAppliedValue.current.endDate !== updatedDateValue.endDate\n ) {\n onDateChange?.(event, updatedDateRange, {\n startDate: startDateParseDetails,\n endDate: endDateParseDetails,\n });\n onDateValueChange?.(event, updatedDateValue);\n lastAppliedValue.current = updatedDateValue;\n }\n };\n\n const handleStartInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, startDate: event.target.value };\n setDateValue(newDateValue);\n startInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleEndInputChange: ChangeEventHandler<HTMLInputElement> = (\n event,\n ) => {\n const newDateValue = { ...dateValue, endDate: event.target.value };\n setDateValue(newDateValue);\n endInputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleStartInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n startInputPropsOnFocus?.(event);\n };\n\n const handleEndInputFocus: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(true);\n endInputPropsOnFocus?.(event);\n };\n\n const handleStartInputBlur: FocusEventHandler<HTMLInputElement> = (\n event,\n ) => {\n setFocused(false);\n apply(event);\n startInputPropsOnBlur?.(event);\n };\n\n const handleEndInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n endInputPropsOnBlur?.(event);\n };\n\n const handleStartInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n startInputPropsOnKeyDown?.(event);\n };\n\n const handleEndInputKeyDown: KeyboardEventHandler<HTMLInputElement> = (\n event,\n ) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n endInputPropsOnKeyDown?.(event);\n };\n\n const handleWrapperClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n const input = startInputRef.current;\n input?.focus();\n input?.setSelectionRange(input.value.length, input.value.length);\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleWrapperClick}\n {...rest}\n >\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n startInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n startInputPropsLabelledBy,\n startInputID,\n )}\n aria-label={clsx(\"Start date\", ariaLabel)}\n id={startInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleStartInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.startDate\n ? emptyReadOnlyMarker\n : (dateValue.startDate ?? dateAdapter.format(undefined, format))\n }\n {...restStartInputProps}\n onBlur={handleStartInputBlur}\n onChange={handleStartInputChange}\n onKeyDown={handleStartInputKeyDown}\n onFocus={!isDisabled ? handleStartInputFocus : undefined}\n required={startInputIsRequired}\n />\n <span className={withBaseName(\"dash\")}>-</span>\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(\n formFieldDescribedBy,\n endInputPropsDescribedBy,\n )}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n endInputPropsLabelledBy,\n endInputID,\n )}\n aria-label={clsx(\"End date\", ariaLabel)}\n id={endInputID}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleEndInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={\n isReadOnly && !dateValue?.endDate\n ? emptyReadOnlyMarker\n : (dateValue.endDate ?? dateAdapter.format(undefined, format))\n }\n {...restEndInputProps}\n onBlur={handleEndInputBlur}\n onChange={handleEndInputChange}\n onKeyDown={handleEndInputKeyDown}\n onFocus={!isDisabled ? handleEndInputFocus : undefined}\n required={endInputIsRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","DateParserField","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","dateValue","useControlled","useMemo","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n StatusAdornment,\n makePrefixer,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n * @template TDate - The type of the date object.\n */\nexport interface DateInputSingleProps<TDate extends DateFrameworkType>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult<TDate>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: TDate | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: TDate | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\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\nexport const DateInputSingle = forwardRef<\n HTMLDivElement,\n DateInputSingleProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DateInputSingleProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const { dateAdapter } = useLocalization<TDate>();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n onChange,\n onClick,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone((dateProp ?? defaultDate) as TDate)\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format) as TDate;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let { date: parsedDate, ...parseDetails } = parseResult;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n innerInputRef?.current?.focus();\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleClick}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n inputId,\n )}\n aria-label={clsx(\"Selected date\", ariaLabel)}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"DateInputSingle.js","sources":["../src/date-input/DateInputSingle.tsx"],"sourcesContent":["import {\n makePrefixer,\n StatusAdornment,\n useControlled,\n useForkRef,\n useFormFieldProps,\n useId,\n} from \"@salt-ds/core\";\nimport type {\n DateDetail,\n DateFrameworkType,\n ParserResult,\n TimeFields,\n Timezone,\n} from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEventHandler,\n type ComponentPropsWithoutRef,\n type FocusEventHandler,\n forwardRef,\n type InputHTMLAttributes,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n type Ref,\n type SyntheticEvent,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { SingleDateSelection } from \"../calendar\";\nimport { useLocalization } from \"../localization-provider\";\nimport dateInputCss from \"./DateInput.css\";\n\nconst withBaseName = makePrefixer(\"saltDateInput\");\n\n/**\n * Details of parsing the date\n */\nexport type DateInputSingleDetails = DateDetail;\n\n/**\n * Props for the DateInputSingle component.\n * @template TDate - The type of the date object.\n */\nexport interface DateInputSingleProps<TDate extends DateFrameworkType>\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"defaultValue\">,\n Pick<\n ComponentPropsWithoutRef<\"input\">,\n \"disabled\" | \"value\" | \"defaultValue\" | \"placeholder\"\n > {\n /**\n * The aria-label for accessibility.\n */\n ariaLabel?: string;\n /**\n * Styling variant with full border. Defaults to false.\n */\n bordered?: boolean;\n /**\n * The marker to use in an empty read-only DateInput.\n * Use `''` to disable this feature. Defaults to '—'.\n */\n emptyReadOnlyMarker?: string;\n /**\n * End adornment component.\n */\n endAdornment?: ReactNode;\n /**\n * Attributes applied to the `input` element.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dateInput#Attributes\n */\n inputProps?: InputHTMLAttributes<HTMLInputElement>;\n /**\n * If `true`, the component is read-only.\n */\n readOnly?: boolean;\n /**\n * Start adornment component\n */\n startAdornment?: ReactNode;\n /**\n * Validation status.\n */\n validationStatus?: \"error\" | \"warning\" | \"success\";\n /**\n * Styling variant. Defaults to \"primary\".\n */\n variant?: \"primary\" | \"secondary\";\n /**\n * Format string for date.\n */\n format?: string;\n /**\n * Reference for the input.\n */\n inputRef?: Ref<HTMLInputElement>;\n /**\n * Parser callback, if not using the adapter's parser\n * @param value - date string to parse\n * @param format - format required\n */\n parse?: (value: string, format: string) => ParserResult<TDate>;\n /**\n * Input value. Use when the input value is controlled.\n */\n value?: string;\n /**\n * The initial input value. Use when the component is uncontrolled.\n */\n defaultValue?: string;\n /**\n * The date value. Use when the component is controlled.\n */\n date?: TDate | null;\n /**\n * The initial selected date value. Use when the component is uncontrolled.\n */\n defaultDate?: TDate | null;\n /**\n * Callback fired when the selected date changes.\n * @param event - The synthetic event.\n * @param date - the selected date, invalid date if not a valid date or undefined (uncontrolled) or null (controlled) if not defined\n * @param details - The details of date selection, either a valid date or error\n */\n onDateChange?: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null | undefined,\n details: DateInputSingleDetails,\n ) => void;\n /**\n * Called when input value changes, either due to user interaction or programmatic formatting of valid dates.\n * @param event - The synthetic event or null if a programmatic change.\n * @param newValue - The new date input value.\n */\n onDateValueChange?: (event: SyntheticEvent | null, newValue: string) => void;\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\nexport const DateInputSingle = forwardRef<\n HTMLDivElement,\n DateInputSingleProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DateInputSingleProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const { dateAdapter } = useLocalization<TDate>();\n const {\n bordered = false,\n className,\n disabled,\n \"aria-label\": ariaLabel,\n date: dateProp,\n defaultDate,\n onDateChange,\n value: valueProp,\n format = \"DD MMM YYYY\",\n defaultValue = \"\",\n onChange,\n onClick,\n emptyReadOnlyMarker = \"—\",\n endAdornment,\n inputProps = {},\n inputRef: inputRefProp = null,\n parse: parseProp,\n placeholder = format.toLowerCase(),\n readOnly: readOnlyProp,\n startAdornment,\n validationStatus: validationStatusProp,\n variant = \"primary\",\n onDateValueChange,\n timezone = dateProp || defaultDate\n ? dateAdapter.getTimezone((dateProp ?? defaultDate) as TDate)\n : \"default\",\n ...rest\n } = props;\n const wrapperRef = useRef(null);\n const handleWrapperRef = useForkRef<HTMLDivElement>(ref, wrapperRef);\n const innerInputRef = useRef<HTMLInputElement>(null);\n const handleInputRef = useForkRef<HTMLInputElement>(\n innerInputRef,\n inputRefProp,\n );\n\n const inputId = useId();\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-input-single\",\n css: dateInputCss,\n window: targetWindow,\n });\n\n const [date, setDate] = useControlled({\n controlled: dateProp,\n // biome-ignore lint/correctness/useExhaustiveDependencies: just on mount\n default: useMemo(() => {\n if (defaultDate) {\n return defaultDate;\n }\n if (!defaultValue) {\n return undefined;\n }\n return dateAdapter.parse(defaultValue, format) as TDate;\n }, []),\n name: \"DateInputSingle\",\n state: \"date\",\n });\n const [dateValue, setDateValue] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"DateInputSingle\",\n state: \"dateValue\",\n });\n const lastAppliedValue = useRef<string>(dateValue);\n const preservedTime = useRef<TimeFields | null>(null);\n preservedTime.current = dateAdapter.isValid(date)\n ? dateAdapter.getTime(date)\n : null;\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: Update date string value ONLY when selected date changes, not when date string itself change\n useEffect(() => {\n const formattedValue = dateAdapter.format(date, format);\n const hasValueChanged = formattedValue !== dateValue;\n if (\n // should not reset \"error\" input values\n (date === null || dateAdapter.isValid(date)) &&\n hasValueChanged\n ) {\n setDateValue(formattedValue);\n onDateValueChange?.(null, formattedValue);\n lastAppliedValue.current = formattedValue;\n }\n }, [date, dateAdapter.format, format]);\n\n const [focused, setFocused] = useState(false);\n\n const {\n a11yProps: {\n \"aria-describedby\": formFieldDescribedBy,\n \"aria-labelledby\": formFieldLabelledBy,\n } = {},\n disabled: formFieldDisabled,\n readOnly: formFieldReadOnly,\n necessity: formFieldRequired,\n validationStatus: formFieldValidationStatus,\n } = useFormFieldProps();\n\n const isReadOnly = readOnlyProp || formFieldReadOnly;\n const isDisabled = disabled || formFieldDisabled;\n\n const validationStatus = formFieldValidationStatus ?? validationStatusProp;\n\n const {\n \"aria-describedby\": dateInputDescribedBy,\n \"aria-labelledby\": dateInputLabelledBy,\n onBlur: inputPropsOnBlur,\n onChange: inputPropsOnChange,\n onKeyDown: inputPropsOnKeyDown,\n onFocus: inputPropsOnFocus,\n required: dateInputPropsRequired,\n ...restDateInputProps\n } = inputProps;\n\n const isRequired = formFieldRequired\n ? [\"required\", \"asterisk\"].includes(formFieldRequired)\n : dateInputPropsRequired;\n\n const apply = (event: SyntheticEvent) => {\n const parse = parseProp ?? dateAdapter.parse.bind(dateAdapter);\n const parseResult = parse(dateValue ?? \"\", format);\n let { date: parsedDate, ...parseDetails } = parseResult;\n let formattedValue = \"\";\n const isDateValid = dateAdapter.isValid(parsedDate);\n if (isDateValid) {\n parsedDate = dateAdapter.setTimezone(parsedDate, timezone);\n if (preservedTime.current) {\n parsedDate = dateAdapter.set(parsedDate, preservedTime.current);\n }\n formattedValue = dateAdapter.format(parsedDate, format);\n }\n const hasValueChanged = formattedValue !== dateValue;\n const newValue = isDateValid ? formattedValue : dateValue;\n if (hasValueChanged) {\n setDateValue(newValue);\n onDateValueChange?.(event, newValue);\n }\n\n setDate(parsedDate);\n\n if (lastAppliedValue.current !== newValue) {\n onDateChange?.(event, parsedDate, parseDetails);\n }\n lastAppliedValue.current = newValue;\n };\n\n const handleChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newDateValue = event.target.value;\n setDateValue(newDateValue);\n inputPropsOnChange?.(event);\n onChange?.(event);\n onDateValueChange?.(event, newDateValue);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(true);\n inputPropsOnFocus?.(event);\n };\n const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n setFocused(false);\n apply(event);\n inputPropsOnBlur?.(event);\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n apply(event);\n }\n inputPropsOnKeyDown?.(event);\n };\n\n const handleClick: MouseEventHandler<HTMLDivElement> = (event) => {\n if (event.target === wrapperRef.current) {\n innerInputRef?.current?.focus();\n }\n onClick?.(event);\n };\n\n return (\n <div\n className={clsx(\n withBaseName(),\n withBaseName(variant),\n {\n [withBaseName(\"focused\")]: !isDisabled && focused,\n [withBaseName(\"disabled\")]: isDisabled,\n [withBaseName(\"readOnly\")]: isReadOnly,\n [withBaseName(validationStatus ?? \"\")]: validationStatus,\n [withBaseName(\"bordered\")]: bordered,\n },\n className,\n )}\n ref={handleWrapperRef}\n onClick={handleClick}\n {...rest}\n >\n {startAdornment && (\n <div className={withBaseName(\"startAdornmentContainer\")}>\n {startAdornment}\n </div>\n )}\n <input\n autoComplete=\"off\"\n aria-describedby={clsx(formFieldDescribedBy, dateInputDescribedBy)}\n aria-labelledby={clsx(\n formFieldLabelledBy,\n dateInputLabelledBy,\n inputId,\n )}\n aria-label={clsx(\"Selected date\", ariaLabel)}\n id={inputId}\n className={withBaseName(\"input\")}\n disabled={isDisabled}\n readOnly={isReadOnly}\n ref={handleInputRef}\n tabIndex={isDisabled ? -1 : 0}\n placeholder={placeholder}\n value={isReadOnly && !dateValue ? emptyReadOnlyMarker : dateValue}\n {...restDateInputProps}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n onFocus={!isDisabled ? handleFocus : undefined}\n required={isRequired}\n />\n <div className={withBaseName(\"endAdornmentContainer\")}>\n {!isDisabled && !isReadOnly && validationStatus && (\n <StatusAdornment status={validationStatus} />\n )}\n {endAdornment}\n </div>\n <div className={withBaseName(\"activationIndicator\")} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","useLocalization","useRef","useForkRef","useId","useWindow","useComponentCssInjection","dateInputCss","useControlled","useMemo","useEffect","useState","useFormFieldProps","jsxs","clsx","jsx","StatusAdornment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { type ReactNode, forwardRef } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport {\n type DatePickerOpenChangeReason,\n DatePickerOverlayProvider,\n} from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /** When `open` is uncontrolled, set this to `true` to open on click */\n openOnClick?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n * @param reason - reason for the the state change\n */\n onOpenChange?: (\n newOpen: boolean,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\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\n/**\n * Props for the DatePicker component, when `selectionVariant` is `single`.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerSingleProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerSingleProps<TDate> {\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `range`.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerRangeProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerRangeProps<TDate> {\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the DatePicker component.\n * @template TDate - The type of the date object.\n */\nexport type DatePickerProps<TDate extends DateFrameworkType> =\n | DatePickerSingleProps<TDate>\n | DatePickerRangeProps<TDate>;\n\nexport const DatePickerMain = forwardRef<\n HTMLDivElement,\n DatePickerProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DatePickerProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n children,\n readOnly,\n disabled,\n isDayDisabled,\n isDayHighlighted,\n isDayUnselectable,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n timezone,\n ...rest\n } = props;\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useDatePickerProps: any = {\n readOnly,\n disabled,\n isDayDisabled,\n isDayHighlighted,\n isDayUnselectable,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n timezone,\n };\n\n if (props.selectionVariant === \"range\") {\n const stateAndHelpers = useDatePicker<TDate, \"range\">(\n useDatePickerProps,\n ref,\n ) as RangeDatePickerState<TDate>;\n return (\n <DateRangeSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </DateRangeSelectionContext.Provider>\n );\n }\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as SingleDatePickerState<TDate>;\n\n return (\n <SingleDateSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </SingleDateSelectionContext.Provider>\n );\n },\n);\n\nexport const DatePicker = forwardRef(function DatePicker<\n TDate extends DateFrameworkType,\n>(props: DatePickerProps<TDate>, ref: React.Ref<HTMLDivElement>) {\n const { defaultOpen, open, openOnClick, onOpenChange, readOnly, ...rest } =\n props;\n\n return (\n <DatePickerOverlayProvider\n defaultOpen={defaultOpen}\n open={open}\n openOnClick={openOnClick}\n onOpenChange={onOpenChange}\n readOnly={readOnly}\n >\n <DatePickerMain {...rest} readOnly={readOnly} ref={ref} />\n </DatePickerOverlayProvider>\n );\n});\n"],"names":["forwardRef","stateAndHelpers","useDatePicker","DateRangeSelectionContext","SingleDateSelectionContext","jsx","DatePicker","DatePickerOverlayProvider"],"mappings":";;;;;;;;AAgFO,MAAM,cAAiB,GAAAA,gBAAA;AAAA,EAI5B,CACE,OACA,GACG,KAAA;AAvFP,IAAA,IAAA,EAAA,EAAA,EAAA;AAwFI,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,kBAA0B,GAAA;AAAA,MAC9B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAI,IAAA,KAAA,CAAM,qBAAqB,OAAS,EAAA;AACtC,MAAA,MAAMC,gBAAkB,GAAAC,2BAAA;AAAA,QACtB,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,sCACGC,2CAA0B,CAAA,QAAA,EAA1B,EAAmC,KAAOF,EAAAA,gBAAAA,EACzC,yCAAC,KAAI,EAAA,EAAA,GAAA,EAAA,CAAK,KAAAA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,iBAAiB,KAAjB,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,cAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGJ,IAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,MACtB,kBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,sCACGE,4CAA2B,CAAA,QAAA,EAA3B,EAAoC,KAAA,EAAO,iBAC1C,QAAC,kBAAAC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,UAAjB,IAAwB,GAAA,MAAA,GAAA,EAAA,CAAA,YAAA,EAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGN;AAEO,MAAM,UAAa,GAAAL,gBAAA,CAAW,SAASM,WAAAA,CAE5C,OAA+B,GAAgC,EAAA;AAC/D,EAAM,MAAA,EAAE,aAAa,IAAM,EAAA,WAAA,EAAa,cAAc,QAAU,EAAA,GAAG,MACjE,GAAA,KAAA;AAEF,EACE,uBAAAD,cAAA;AAAA,IAACE,mDAAA;AAAA,IAAA;AAAA,MACC,WAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MAEA,QAAC,kBAAAF,cAAA,CAAA,cAAA,EAAA,EAAgB,GAAG,IAAA,EAAM,UAAoB,GAAU,EAAA;AAAA;AAAA,GAC1D;AAEJ,CAAC;;;;;"}
1
+ {"version":3,"file":"DatePicker.js","sources":["../src/date-picker/DatePicker.tsx"],"sourcesContent":["import type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { forwardRef, type ReactNode } from \"react\";\nimport {\n DateRangeSelectionContext,\n type RangeDatePickerState,\n type SingleDatePickerState,\n SingleDateSelectionContext,\n} from \"./DatePickerContext\";\nimport {\n type DatePickerOpenChangeReason,\n DatePickerOverlayProvider,\n} from \"./DatePickerOverlayProvider\";\nimport {\n type UseDatePickerRangeProps,\n type UseDatePickerSingleProps,\n useDatePicker,\n} from \"./useDatePicker\";\n\n/**\n * Base props for DatePicker.\n */\nexport interface DatePickerBaseProps {\n className?: string;\n children?: ReactNode;\n /** the open/close state of the overlay. The open/close state will be controlled when this prop is provided. */\n open?: boolean;\n /** When `open` is uncontrolled, set this to `true` to open on click */\n openOnClick?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n * @param reason - reason for the the state change\n */\n onOpenChange?: (\n newOpen: boolean,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**\n * the initial open/close state of the overlay, when the open/close state is un-controlled.\n */\n defaultOpen?: DatePickerBaseProps[\"open\"];\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\n/**\n * Props for the DatePicker component, when `selectionVariant` is `single`.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerSingleProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerSingleProps<TDate> {\n selectionVariant: \"single\";\n}\n\n/**\n * Props for the DatePicker component, when `selectionVariant` is `range`.\n * @template TDate - The type of the date object.\n */\nexport interface DatePickerRangeProps<TDate extends DateFrameworkType>\n extends DatePickerBaseProps,\n UseDatePickerRangeProps<TDate> {\n selectionVariant: \"range\";\n}\n\n/**\n * Props for the DatePicker component.\n * @template TDate - The type of the date object.\n */\nexport type DatePickerProps<TDate extends DateFrameworkType> =\n | DatePickerSingleProps<TDate>\n | DatePickerRangeProps<TDate>;\n\nexport const DatePickerMain = forwardRef<\n HTMLDivElement,\n DatePickerProps<DateFrameworkType>\n>(\n <TDate extends DateFrameworkType>(\n props: DatePickerProps<TDate>,\n ref: React.Ref<HTMLDivElement>,\n ) => {\n const {\n children,\n readOnly,\n disabled,\n isDayDisabled,\n isDayHighlighted,\n isDayUnselectable,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n timezone,\n ...rest\n } = props;\n // biome-ignore lint/suspicious/noExplicitAny: type guard\n const useDatePickerProps: any = {\n readOnly,\n disabled,\n isDayDisabled,\n isDayHighlighted,\n isDayUnselectable,\n selectionVariant,\n defaultSelectedDate,\n selectedDate,\n onSelectionChange,\n onApply,\n minDate,\n maxDate,\n onCancel,\n timezone,\n };\n\n if (props.selectionVariant === \"range\") {\n // TODO\n // biome-ignore lint/correctness/useHookAtTopLevel: This should be fixed.\n const stateAndHelpers = useDatePicker<TDate, \"range\">(\n useDatePickerProps,\n ref,\n ) as RangeDatePickerState<TDate>;\n return (\n <DateRangeSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </DateRangeSelectionContext.Provider>\n );\n }\n // TODO\n // biome-ignore lint/correctness/useHookAtTopLevel: This should be fixed.\n const stateAndHelpers = useDatePicker(\n useDatePickerProps,\n ref,\n ) as SingleDatePickerState<TDate>;\n\n return (\n <SingleDateSelectionContext.Provider value={stateAndHelpers}>\n <div ref={stateAndHelpers?.state?.containerRef} {...rest}>\n {children}\n </div>\n </SingleDateSelectionContext.Provider>\n );\n },\n);\n\nexport const DatePicker = forwardRef(function DatePicker<\n TDate extends DateFrameworkType,\n>(props: DatePickerProps<TDate>, ref: React.Ref<HTMLDivElement>) {\n const { defaultOpen, open, openOnClick, onOpenChange, readOnly, ...rest } =\n props;\n\n return (\n <DatePickerOverlayProvider\n defaultOpen={defaultOpen}\n open={open}\n openOnClick={openOnClick}\n onOpenChange={onOpenChange}\n readOnly={readOnly}\n >\n <DatePickerMain {...rest} readOnly={readOnly} ref={ref} />\n </DatePickerOverlayProvider>\n );\n});\n"],"names":["forwardRef","stateAndHelpers","useDatePicker","DateRangeSelectionContext","SingleDateSelectionContext","jsx","DatePicker","DatePickerOverlayProvider"],"mappings":";;;;;;;;AAgFO,MAAM,cAAiB,GAAAA,gBAAA;AAAA,EAI5B,CACE,OACA,GACG,KAAA;AAvFP,IAAA,IAAA,EAAA,EAAA,EAAA;AAwFI,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,kBAA0B,GAAA;AAAA,MAC9B,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAA;AAAA,MACA,gBAAA;AAAA,MACA,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,iBAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAI,IAAA,KAAA,CAAM,qBAAqB,OAAS,EAAA;AAGtC,MAAA,MAAMC,gBAAkB,GAAAC,2BAAA;AAAA,QACtB,kBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,sCACGC,2CAA0B,CAAA,QAAA,EAA1B,EAAmC,KAAOF,EAAAA,gBAAAA,EACzC,yCAAC,KAAI,EAAA,EAAA,GAAA,EAAA,CAAK,KAAAA,gBAAA,IAAA,IAAA,GAAA,MAAA,GAAAA,iBAAiB,KAAjB,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAwB,cAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAKJ,IAAA,MAAM,eAAkB,GAAAC,2BAAA;AAAA,MACtB,kBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,sCACGE,4CAA2B,CAAA,QAAA,EAA3B,EAAoC,KAAA,EAAO,iBAC1C,QAAC,kBAAAC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,CAAA,EAAA,GAAA,eAAA,IAAA,IAAA,GAAA,MAAA,GAAA,eAAA,CAAiB,UAAjB,IAAwB,GAAA,MAAA,GAAA,EAAA,CAAA,YAAA,EAAe,GAAG,IAAA,EACjD,UACH,CACF,EAAA,CAAA;AAAA;AAGN;AAEO,MAAM,UAAa,GAAAL,gBAAA,CAAW,SAASM,WAAAA,CAE5C,OAA+B,GAAgC,EAAA;AAC/D,EAAM,MAAA,EAAE,aAAa,IAAM,EAAA,WAAA,EAAa,cAAc,QAAU,EAAA,GAAG,MACjE,GAAA,KAAA;AAEF,EACE,uBAAAD,cAAA;AAAA,IAACE,mDAAA;AAAA,IAAA;AAAA,MACC,WAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MAEA,QAAC,kBAAAF,cAAA,CAAA,cAAA,EAAA,EAAgB,GAAG,IAAA,EAAM,UAAoB,GAAU,EAAA;AAAA;AAAA,GAC1D;AAEJ,CAAC;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n forwardRef,\n useEffect,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport \"./DatePickerActions.css\";\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport datePickerActions from \"./DatePickerActions.css\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n TDate extends DateFrameworkType,\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerRangeInput<\n TDate extends DateFrameworkType,\n>(\n props: DatePickerActionsProps<TDate, \"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: state and helpers coerced based on selectionVariant\n let stateAndHelpers: any;\n if (selectionVariant === \"range\") {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"range\",\n }) as RangeDatePickerState<TDate>;\n } else {\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState<TDate>;\n }\n\n const {\n state: { selectedDate },\n helpers: { cancel, apply, setEnableApply },\n } = stateAndHelpers;\n\n useEffect(() => {\n setEnableApply(true);\n }, [setEnableApply]);\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n ApplyButtonProps?.onClick?.(event);\n };\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","datePickerActions","useDatePickerContext","useEffect","jsxs","clsx","jsx","Button"],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerActions.js","sources":["../src/date-picker/DatePickerActions.tsx"],"sourcesContent":["import { Button, type ButtonProps, makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type MouseEventHandler,\n type Ref,\n type SyntheticEvent,\n useEffect,\n} from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport {\n type RangeDatePickerState,\n type SingleDatePickerState,\n useDatePickerContext,\n} from \"./DatePickerContext\";\nimport \"./DatePickerActions.css\";\nimport type { DateFrameworkType } from \"@salt-ds/date-adapters\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport datePickerActions from \"./DatePickerActions.css\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerActions\");\n\n/**\n * Base props for DatePicker actions component.\n */\nexport interface DatePickerActionsBaseProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * Callback fired when the cancel action is triggered.\n * @param _event - The synthetic event.\n */\n onCancel?: (_event: SyntheticEvent) => void;\n /**\n * Ref to apply button\n */\n applyButtonRef?: Ref<HTMLButtonElement>;\n /**\n * Props for the apply button.\n */\n ApplyButtonProps?: ButtonProps;\n /**\n * Props for the cancel button.\n */\n CancelButtonProps?: ButtonProps;\n /**\n * Ref to cancel button\n */\n cancelButtonRef?: Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the DatePicker actions component.\n * @template SelectionVariant - The selection variant, either \"single\" or \"range\".\n */\nexport type DatePickerActionsProps<\n TDate extends DateFrameworkType,\n SelectionVariant extends \"single\" | \"range\",\n> = SelectionVariant extends \"single\"\n ? DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"single\".\n */\n selectionVariant: \"single\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected single date or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n ) => void;\n }\n : DatePickerActionsBaseProps & {\n /**\n * The selection variant, set to \"range\".\n */\n selectionVariant: \"range\";\n /**\n * Callback fired when the apply action is triggered.\n * @param _event - The synthetic event.\n * @param date - The selected date range or null.\n */\n onApply?: (\n _event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n ) => void;\n };\n\nexport const DatePickerActions = forwardRef(function DatePickerRangeInput<\n TDate extends DateFrameworkType,\n>(\n props: DatePickerActionsProps<TDate, \"single\" | \"range\">,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n applyButtonRef,\n ApplyButtonProps,\n cancelButtonRef,\n children,\n className,\n CancelButtonProps,\n onApply,\n onCancel,\n selectionVariant,\n ...rest\n } = props;\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-actions\",\n css: datePickerActions,\n window: targetWindow,\n });\n\n // biome-ignore lint/suspicious/noExplicitAny: state and helpers coerced based on selectionVariant\n let stateAndHelpers: any;\n if (selectionVariant === \"range\") {\n // TODO\n // biome-ignore lint/correctness/useHookAtTopLevel: This should be fixed.\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"range\",\n }) as RangeDatePickerState<TDate>;\n } else {\n // TODO\n // biome-ignore lint/correctness/useHookAtTopLevel: This should be fixed.\n stateAndHelpers = useDatePickerContext({\n selectionVariant: \"single\",\n }) as SingleDatePickerState<TDate>;\n }\n\n const {\n state: { selectedDate },\n helpers: { cancel, apply, setEnableApply },\n } = stateAndHelpers;\n\n useEffect(() => {\n setEnableApply(true);\n }, [setEnableApply]);\n\n const handleCancel: MouseEventHandler<HTMLButtonElement> = (event) => {\n cancel(event);\n CancelButtonProps?.onClick?.(event);\n onCancel?.(event);\n };\n\n const handleApply: MouseEventHandler<HTMLButtonElement> = (event) => {\n apply(event, selectedDate);\n onApply?.(event, selectedDate);\n ApplyButtonProps?.onClick?.(event);\n };\n\n return (\n <div className={clsx(className, withBaseName())} ref={ref} {...rest}>\n <div className={withBaseName(\"body\")}>{children}</div>\n <Button\n appearance=\"transparent\"\n sentiment=\"neutral\"\n ref={cancelButtonRef}\n {...CancelButtonProps}\n onClick={handleCancel}\n className={clsx(withBaseName(\"action\"), CancelButtonProps?.className)}\n >\n Cancel\n </Button>\n <Button\n appearance=\"solid\"\n sentiment=\"accented\"\n ref={applyButtonRef}\n {...ApplyButtonProps}\n onClick={handleApply}\n className={clsx(withBaseName(\"action\"), ApplyButtonProps?.className)}\n >\n Apply\n </Button>\n </div>\n );\n});\n"],"names":["makePrefixer","forwardRef","useWindow","useComponentCssInjection","datePickerActions","useDatePickerContext","useEffect","jsxs","clsx","jsx","Button"],"mappings":"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"}
@@ -8,26 +8,26 @@ const DateRangeSelectionContext = core.createContext("DateRangeSelectionContext"
8
8
  function useDatePickerContext({
9
9
  selectionVariant
10
10
  }) {
11
+ const rangeContext = react.useContext(
12
+ DateRangeSelectionContext
13
+ );
14
+ const singleContext = react.useContext(
15
+ SingleDateSelectionContext
16
+ );
11
17
  if (selectionVariant === "range") {
12
- const context2 = react.useContext(
13
- DateRangeSelectionContext
14
- );
15
- if (!context2) {
18
+ if (!rangeContext) {
16
19
  throw new Error(
17
20
  'useDatePickerSelection should be called with props { selectionVariant : "range" } inside DateRangeSelectionContext.Provider'
18
21
  );
19
22
  }
20
- return context2;
23
+ return rangeContext;
21
24
  }
22
- const context = react.useContext(
23
- SingleDateSelectionContext
24
- );
25
- if (!context) {
25
+ if (!singleContext) {
26
26
  throw new Error(
27
27
  'useDatePickerSelection should be called with props { selectionVariant : "single" } inside SingleDateSelectionContext.Provider'
28
28
  );
29
29
  }
30
- return context;
30
+ return singleContext;
31
31
  }
32
32
 
33
33
  exports.DateRangeSelectionContext = DateRangeSelectionContext;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerContext.js","sources":["../src/date-picker/DatePickerContext.ts"],"sourcesContent":["import { createContext } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { type Context, type Ref, type SyntheticEvent, useContext } from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport type {\n DateInputRangeDetails,\n DateInputSingleDetails,\n} from \"../date-input\";\n\n/**\n * Interface representing the base state for a DatePicker.\n * @template TDate - The type of the date object.\n */\ninterface DatePickerBaseState<TDate extends DateFrameworkType> {\n /**\n * The state properties of the DatePicker.\n */\n state: {\n /**\n * If `true`, the DatePicker is disabled.\n */\n disabled?: boolean;\n /**\n * If `true`, the DatePicker is read-only.\n */\n readOnly?: boolean;\n /**\n * If `true`, the DatePicker has been cancelled.\n */\n cancelled?: boolean;\n /**\n * If `true`, the apply action is enabled.\n */\n enableApply?: boolean;\n /**\n * The minimum selectable date.\n */\n minDate?: TDate;\n /**\n * The maximum selectable date.\n */\n maxDate?: TDate;\n /**\n * Reference to the container element.\n */\n containerRef: Ref<HTMLDivElement>;\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 /**\n * Helper functions for managing the DatePicker state.\n */\n helpers: {\n /**\n * Cancels the DatePicker action.\n * @param event - event that triggered the state change\n */\n cancel: (event?: Event) => void;\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 * Function to determine if a day is highlighted.\n * @param date - The date to check.\n * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.\n */\n isDayHighlighted?: (date: TDate) => string | false | undefined;\n /**\n * Function to determine if a day is unselectable.\n * @param date - The date to check.\n * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.\n */\n isDayUnselectable?: (date: TDate) => string | false | undefined;\n /**\n * Sets the enableApply state.\n * @param newEnableApply - The new value for enableApply.\n */\n setEnableApply: (newEnableApply: boolean) => void;\n };\n}\n\n/**\n * Interface representing the state for a single date picker.\n */\nexport interface SingleDatePickerState<TDate extends DateFrameworkType>\n extends DatePickerBaseState<TDate> {\n /**\n * The state properties of the single date picker.\n */\n state: DatePickerBaseState<TDate>[\"state\"] & {\n /**\n * The selected date.\n */\n selectedDate: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate>;\n };\n /**\n * Helper functions for managing the single date picker state.\n */\n helpers: DatePickerBaseState<TDate>[\"helpers\"] & {\n /**\n * Apply the selected single date.\n * @param event - The synthetic event.\n * @param date - The new applied date.\n */\n apply: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n ) => void;\n /**\n * Select a single date.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n * @param details - Details of selection, such as errors and original value.\n */\n select: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n details?: DateInputSingleDetails,\n ) => void;\n };\n}\n\n/**\n * Interface representing the state for a range date picker.\n */\nexport interface RangeDatePickerState<TDate extends DateFrameworkType>\n extends DatePickerBaseState<TDate> {\n /**\n * The state properties of the range date picker.\n */\n state: DatePickerBaseState<TDate>[\"state\"] & {\n /**\n * The selected date range.\n */\n selectedDate: DateRangeSelection<TDate> | null;\n /**\n * The default selected date range.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n };\n /**\n * Helper functions for managing the range date picker state.\n */\n helpers: DatePickerBaseState<TDate>[\"helpers\"] & {\n /**\n * Apply the selected date range.\n * @param event - The synthetic event.\n * @param date - The new applied date range\n */\n apply: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n ) => void;\n /**\n * Select a date range.\n * @param event - The synthetic event.\n * @param date - The selected date.\n * @param details - Details of selection, such as errors and original value. */\n select: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details?: DateInputRangeDetails,\n ) => void;\n };\n}\n\n/**\n * Type representing the state of a date picker, either single or range.\n */\nexport type DatePickerState<TDate extends DateFrameworkType> =\n | SingleDatePickerState<TDate>\n | RangeDatePickerState<TDate>;\n\n/**\n * Context for single date selection.\n */\nexport const SingleDateSelectionContext = createContext<\n SingleDatePickerState<DateFrameworkType> | undefined\n>(\"SingleDateSelectionContext\", undefined);\n\n/**\n * Context for date range selection.\n */\nexport const DateRangeSelectionContext = createContext<\n RangeDatePickerState<DateFrameworkType> | undefined\n>(\"DateRangeSelectionContext\", undefined);\n\n/**\n * Props for using the date picker context.\n */\nexport interface UseDatePickerContextProps {\n /**\n * The selection variant, either \"single\" or \"range\".\n */\n selectionVariant: \"single\" | \"range\";\n}\n\n// Overloads\n\n/**\n * Hook to use the date picker context for single date selection.\n * @param props - The props for the hook.\n * @returns The state of the single date picker.\n */\nexport function useDatePickerContext<TDate extends DateFrameworkType>(props: {\n selectionVariant: \"single\";\n}): SingleDatePickerState<TDate>;\n\n/**\n * Hook to use the date picker context for range date selection.\n * @param props - The props for the hook.\n * @returns The state of the range date picker.\n */\nexport function useDatePickerContext<TDate extends DateFrameworkType>(props: {\n selectionVariant: \"range\";\n}): RangeDatePickerState<TDate>;\n\nexport function useDatePickerContext<TDate extends DateFrameworkType>({\n selectionVariant,\n}: UseDatePickerContextProps): DatePickerState<TDate> {\n if (selectionVariant === \"range\") {\n const context = useContext(\n DateRangeSelectionContext as Context<\n RangeDatePickerState<TDate> | undefined\n >,\n );\n if (!context) {\n throw new Error(\n 'useDatePickerSelection should be called with props { selectionVariant : \"range\" } inside DateRangeSelectionContext.Provider',\n );\n }\n return context;\n }\n const context = useContext(\n SingleDateSelectionContext as Context<\n SingleDatePickerState<TDate> | undefined\n >,\n );\n if (!context) {\n throw new Error(\n 'useDatePickerSelection should be called with props { selectionVariant : \"single\" } inside SingleDateSelectionContext.Provider',\n );\n }\n return context;\n}\n"],"names":["createContext","context","useContext"],"mappings":";;;;;AA8La,MAAA,0BAAA,GAA6BA,kBAExC,CAAA,4BAAA,EAA8B,MAAS;AAK5B,MAAA,yBAAA,GAA4BA,kBAEvC,CAAA,2BAAA,EAA6B,MAAS;AAgCjC,SAAS,oBAAsD,CAAA;AAAA,EACpE;AACF,CAAsD,EAAA;AACpD,EAAA,IAAI,qBAAqB,OAAS,EAAA;AAChC,IAAA,MAAMC,QAAU,GAAAC,gBAAA;AAAA,MACd;AAAA,KAGF;AACA,IAAA,IAAI,CAACD,QAAS,EAAA;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA;AAEF,IAAOA,OAAAA,QAAAA;AAAA;AAET,EAAA,MAAM,OAAU,GAAAC,gBAAA;AAAA,IACd;AAAA,GAGF;AACA,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA;AAEF,EAAO,OAAA,OAAA;AACT;;;;;;"}
1
+ {"version":3,"file":"DatePickerContext.js","sources":["../src/date-picker/DatePickerContext.ts"],"sourcesContent":["import { createContext } from \"@salt-ds/core\";\nimport type { DateFrameworkType, Timezone } from \"@salt-ds/date-adapters\";\nimport { type Context, type Ref, type SyntheticEvent, useContext } from \"react\";\nimport type { DateRangeSelection, SingleDateSelection } from \"../calendar\";\nimport type {\n DateInputRangeDetails,\n DateInputSingleDetails,\n} from \"../date-input\";\n\n/**\n * Interface representing the base state for a DatePicker.\n * @template TDate - The type of the date object.\n */\ninterface DatePickerBaseState<TDate extends DateFrameworkType> {\n /**\n * The state properties of the DatePicker.\n */\n state: {\n /**\n * If `true`, the DatePicker is disabled.\n */\n disabled?: boolean;\n /**\n * If `true`, the DatePicker is read-only.\n */\n readOnly?: boolean;\n /**\n * If `true`, the DatePicker has been cancelled.\n */\n cancelled?: boolean;\n /**\n * If `true`, the apply action is enabled.\n */\n enableApply?: boolean;\n /**\n * The minimum selectable date.\n */\n minDate?: TDate;\n /**\n * The maximum selectable date.\n */\n maxDate?: TDate;\n /**\n * Reference to the container element.\n */\n containerRef: Ref<HTMLDivElement>;\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 /**\n * Helper functions for managing the DatePicker state.\n */\n helpers: {\n /**\n * Cancels the DatePicker action.\n * @param event - event that triggered the state change\n */\n cancel: (event?: Event) => void;\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 * Function to determine if a day is highlighted.\n * @param date - The date to check.\n * @returns A string reason if the day is highlighted, otherwise `false` or `undefined`.\n */\n isDayHighlighted?: (date: TDate) => string | false | undefined;\n /**\n * Function to determine if a day is unselectable.\n * @param date - The date to check.\n * @returns A string reason if the day is unselectable, otherwise `false` or `undefined`.\n */\n isDayUnselectable?: (date: TDate) => string | false | undefined;\n /**\n * Sets the enableApply state.\n * @param newEnableApply - The new value for enableApply.\n */\n setEnableApply: (newEnableApply: boolean) => void;\n };\n}\n\n/**\n * Interface representing the state for a single date picker.\n */\nexport interface SingleDatePickerState<TDate extends DateFrameworkType>\n extends DatePickerBaseState<TDate> {\n /**\n * The state properties of the single date picker.\n */\n state: DatePickerBaseState<TDate>[\"state\"] & {\n /**\n * The selected date.\n */\n selectedDate: SingleDateSelection<TDate> | null;\n /**\n * The default selected date.\n */\n defaultSelectedDate?: SingleDateSelection<TDate>;\n };\n /**\n * Helper functions for managing the single date picker state.\n */\n helpers: DatePickerBaseState<TDate>[\"helpers\"] & {\n /**\n * Apply the selected single date.\n * @param event - The synthetic event.\n * @param date - The new applied date.\n */\n apply: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n ) => void;\n /**\n * Select a single date.\n * @param event - The synthetic event.\n * @param date - The selected date or null.\n * @param details - Details of selection, such as errors and original value.\n */\n select: (\n event: SyntheticEvent,\n date: SingleDateSelection<TDate> | null,\n details?: DateInputSingleDetails,\n ) => void;\n };\n}\n\n/**\n * Interface representing the state for a range date picker.\n */\nexport interface RangeDatePickerState<TDate extends DateFrameworkType>\n extends DatePickerBaseState<TDate> {\n /**\n * The state properties of the range date picker.\n */\n state: DatePickerBaseState<TDate>[\"state\"] & {\n /**\n * The selected date range.\n */\n selectedDate: DateRangeSelection<TDate> | null;\n /**\n * The default selected date range.\n */\n defaultSelectedDate?: DateRangeSelection<TDate>;\n };\n /**\n * Helper functions for managing the range date picker state.\n */\n helpers: DatePickerBaseState<TDate>[\"helpers\"] & {\n /**\n * Apply the selected date range.\n * @param event - The synthetic event.\n * @param date - The new applied date range\n */\n apply: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n ) => void;\n /**\n * Select a date range.\n * @param event - The synthetic event.\n * @param date - The selected date.\n * @param details - Details of selection, such as errors and original value. */\n select: (\n event: SyntheticEvent,\n date: DateRangeSelection<TDate> | null,\n details?: DateInputRangeDetails,\n ) => void;\n };\n}\n\n/**\n * Type representing the state of a date picker, either single or range.\n */\nexport type DatePickerState<TDate extends DateFrameworkType> =\n | SingleDatePickerState<TDate>\n | RangeDatePickerState<TDate>;\n\n/**\n * Context for single date selection.\n */\nexport const SingleDateSelectionContext = createContext<\n SingleDatePickerState<DateFrameworkType> | undefined\n>(\"SingleDateSelectionContext\", undefined);\n\n/**\n * Context for date range selection.\n */\nexport const DateRangeSelectionContext = createContext<\n RangeDatePickerState<DateFrameworkType> | undefined\n>(\"DateRangeSelectionContext\", undefined);\n\n/**\n * Props for using the date picker context.\n */\nexport interface UseDatePickerContextProps {\n /**\n * The selection variant, either \"single\" or \"range\".\n */\n selectionVariant: \"single\" | \"range\";\n}\n\n// Overloads\n\n/**\n * Hook to use the date picker context for single date selection.\n * @param props - The props for the hook.\n * @returns The state of the single date picker.\n */\nexport function useDatePickerContext<TDate extends DateFrameworkType>(props: {\n selectionVariant: \"single\";\n}): SingleDatePickerState<TDate>;\n\n/**\n * Hook to use the date picker context for range date selection.\n * @param props - The props for the hook.\n * @returns The state of the range date picker.\n */\nexport function useDatePickerContext<TDate extends DateFrameworkType>(props: {\n selectionVariant: \"range\";\n}): RangeDatePickerState<TDate>;\n\nexport function useDatePickerContext<TDate extends DateFrameworkType>({\n selectionVariant,\n}: UseDatePickerContextProps): DatePickerState<TDate> {\n const rangeContext = useContext(\n DateRangeSelectionContext as Context<\n RangeDatePickerState<TDate> | undefined\n >,\n );\n\n const singleContext = useContext(\n SingleDateSelectionContext as Context<\n SingleDatePickerState<TDate> | undefined\n >,\n );\n\n if (selectionVariant === \"range\") {\n if (!rangeContext) {\n throw new Error(\n 'useDatePickerSelection should be called with props { selectionVariant : \"range\" } inside DateRangeSelectionContext.Provider',\n );\n }\n return rangeContext;\n }\n\n if (!singleContext) {\n throw new Error(\n 'useDatePickerSelection should be called with props { selectionVariant : \"single\" } inside SingleDateSelectionContext.Provider',\n );\n }\n return singleContext;\n}\n"],"names":["createContext","useContext"],"mappings":";;;;;AA8La,MAAA,0BAAA,GAA6BA,kBAExC,CAAA,4BAAA,EAA8B,MAAS;AAK5B,MAAA,yBAAA,GAA4BA,kBAEvC,CAAA,2BAAA,EAA6B,MAAS;AAgCjC,SAAS,oBAAsD,CAAA;AAAA,EACpE;AACF,CAAsD,EAAA;AACpD,EAAA,MAAM,YAAe,GAAAC,gBAAA;AAAA,IACnB;AAAA,GAGF;AAEA,EAAA,MAAM,aAAgB,GAAAA,gBAAA;AAAA,IACpB;AAAA,GAGF;AAEA,EAAA,IAAI,qBAAqB,OAAS,EAAA;AAChC,IAAA,IAAI,CAAC,YAAc,EAAA;AACjB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA;AAEF,IAAO,OAAA,YAAA;AAAA;AAGT,EAAA,IAAI,CAAC,aAAe,EAAA;AAClB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA;AAEF,EAAO,OAAA,aAAA;AACT;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltDatePickerOverlay {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n";
3
+ var css_248z = ".saltDatePickerOverlay {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DatePickerOverlay.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerOverlay.js","sources":["../src/date-picker/DatePickerOverlay.tsx"],"sourcesContent":["import {\n makePrefixer,\n useFloatingComponent,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n type ReactNode,\n forwardRef,\n} from \"react\";\nimport datePickerOverlayCss from \"./DatePickerOverlay.css\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerOverlay\");\n\n/**\n * Props for the DatePickerOverlay component.\n */\nexport interface DatePickerOverlayProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the overlay.\n */\n children: ReactNode;\n}\n\nexport const DatePickerOverlay = forwardRef<\n HTMLDivElement,\n DatePickerOverlayProps\n>(function DatePickerOverlay({ className, children, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-overlay\",\n css: datePickerOverlayCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const { a11yProps } = useFormFieldProps();\n\n const {\n state: { open, floatingUIResult },\n helpers: { getFloatingProps },\n } = useDatePickerOverlay();\n\n const floatingRef = useForkRef<HTMLDivElement>(\n ref,\n floatingUIResult?.floating,\n );\n\n return (\n <FloatingComponent\n className={clsx(withBaseName(), className)}\n open={open || false}\n role=\"dialog\"\n aria-modal=\"true\"\n ref={floatingRef}\n {...(getFloatingProps\n ? getFloatingProps({\n ...a11yProps,\n ...rest,\n })\n : rest)}\n >\n {children}\n </FloatingComponent>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerOverlay","useWindow","useComponentCssInjection","datePickerOverlayCss","useFloatingComponent","useFormFieldProps","useDatePickerOverlay","useForkRef","jsx","clsx"],"mappings":";;;;;;;;;;;AAiBA,MAAM,YAAA,GAAeA,kBAAa,uBAAuB,CAAA;AAa5C,MAAA,iBAAA,GAAoBC,gBAG/B,CAAA,SAASC,kBAAkB,CAAA,EAAE,WAAW,QAAU,EAAA,GAAG,IAAK,EAAA,EAAG,GAAK,EAAA;AAClE,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,SAAA,EAAW,iBAAkB,EAAA,GAAIC,yBAAqB,EAAA;AAE9D,EAAM,MAAA,EAAE,SAAU,EAAA,GAAIC,sBAAkB,EAAA;AAExC,EAAM,MAAA;AAAA,IACJ,KAAA,EAAO,EAAE,IAAA,EAAM,gBAAiB,EAAA;AAAA,IAChC,OAAA,EAAS,EAAE,gBAAiB;AAAA,MAC1BC,8CAAqB,EAAA;AAEzB,EAAA,MAAM,WAAc,GAAAC,eAAA;AAAA,IAClB,GAAA;AAAA,IACA,gBAAkB,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAA;AAAA,GACpB;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,MAAM,IAAQ,IAAA,KAAA;AAAA,MACd,IAAK,EAAA,QAAA;AAAA,MACL,YAAW,EAAA,MAAA;AAAA,MACX,GAAK,EAAA,WAAA;AAAA,MACJ,GAAI,mBACD,gBAAiB,CAAA;AAAA,QACf,GAAG,SAAA;AAAA,QACH,GAAG;AAAA,OACJ,CACD,GAAA,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"DatePickerOverlay.js","sources":["../src/date-picker/DatePickerOverlay.tsx"],"sourcesContent":["import {\n makePrefixer,\n useFloatingComponent,\n useForkRef,\n useFormFieldProps,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ComponentPropsWithoutRef,\n forwardRef,\n type ReactNode,\n} from \"react\";\nimport datePickerOverlayCss from \"./DatePickerOverlay.css\";\nimport { useDatePickerOverlay } from \"./DatePickerOverlayProvider\";\n\nconst withBaseName = makePrefixer(\"saltDatePickerOverlay\");\n\n/**\n * Props for the DatePickerOverlay component.\n */\nexport interface DatePickerOverlayProps\n extends ComponentPropsWithoutRef<\"div\"> {\n /**\n * The content to be rendered inside the overlay.\n */\n children: ReactNode;\n}\n\nexport const DatePickerOverlay = forwardRef<\n HTMLDivElement,\n DatePickerOverlayProps\n>(function DatePickerOverlay({ className, children, ...rest }, ref) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-date-picker-overlay\",\n css: datePickerOverlayCss,\n window: targetWindow,\n });\n\n const { Component: FloatingComponent } = useFloatingComponent();\n\n const { a11yProps } = useFormFieldProps();\n\n const {\n state: { open, floatingUIResult },\n helpers: { getFloatingProps },\n } = useDatePickerOverlay();\n\n const floatingRef = useForkRef<HTMLDivElement>(\n ref,\n floatingUIResult?.floating,\n );\n\n return (\n <FloatingComponent\n className={clsx(withBaseName(), className)}\n open={open || false}\n role=\"dialog\"\n aria-modal=\"true\"\n ref={floatingRef}\n {...(getFloatingProps\n ? getFloatingProps({\n ...a11yProps,\n ...rest,\n })\n : rest)}\n >\n {children}\n </FloatingComponent>\n );\n});\n"],"names":["makePrefixer","forwardRef","DatePickerOverlay","useWindow","useComponentCssInjection","datePickerOverlayCss","useFloatingComponent","useFormFieldProps","useDatePickerOverlay","useForkRef","jsx","clsx"],"mappings":";;;;;;;;;;;AAiBA,MAAM,YAAA,GAAeA,kBAAa,uBAAuB,CAAA;AAa5C,MAAA,iBAAA,GAAoBC,gBAG/B,CAAA,SAASC,kBAAkB,CAAA,EAAE,WAAW,QAAU,EAAA,GAAG,IAAK,EAAA,EAAG,GAAK,EAAA;AAClE,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,0BAAA;AAAA,IACR,GAAK,EAAAC,mBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,SAAA,EAAW,iBAAkB,EAAA,GAAIC,yBAAqB,EAAA;AAE9D,EAAM,MAAA,EAAE,SAAU,EAAA,GAAIC,sBAAkB,EAAA;AAExC,EAAM,MAAA;AAAA,IACJ,KAAA,EAAO,EAAE,IAAA,EAAM,gBAAiB,EAAA;AAAA,IAChC,OAAA,EAAS,EAAE,gBAAiB;AAAA,MAC1BC,8CAAqB,EAAA;AAEzB,EAAA,MAAM,WAAc,GAAAC,eAAA;AAAA,IAClB,GAAA;AAAA,IACA,gBAAkB,IAAA,IAAA,GAAA,MAAA,GAAA,gBAAA,CAAA;AAAA,GACpB;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,MACzC,MAAM,IAAQ,IAAA,KAAA;AAAA,MACd,IAAK,EAAA,QAAA;AAAA,MACL,YAAW,EAAA,MAAA;AAAA,MACX,GAAK,EAAA,WAAA;AAAA,MACJ,GAAI,mBACD,gBAAiB,CAAA;AAAA,QACf,GAAG,SAAA;AAAA,QACH,GAAG;AAAA,OACJ,CACD,GAAA,IAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ,CAAC;;;;"}
@@ -78,18 +78,22 @@ const DatePickerOverlayProvider = ({
78
78
  getReferenceProps: getReferencePropsCallback
79
79
  } = react$1.useInteractions(
80
80
  interactions ? interactions(floatingUIResult.context) : [
81
+ // biome-ignore lint/correctness/useHookAtTopLevel: useDismiss is not a React hook
81
82
  react$1.useDismiss(floatingUIResult.context, {}),
83
+ // biome-ignore lint/correctness/useHookAtTopLevel: useKeyboard is not a React hook
82
84
  useKeyboard.useKeyboard(floatingUIResult.context, {
83
85
  enabled: !readOnly,
84
86
  onArrowDown: (event) => {
85
87
  handleOpenChange(true, event.nativeEvent, "reference-press");
86
88
  }
87
89
  }),
90
+ // biome-ignore lint/correctness/useHookAtTopLevel: useClick is not a React hook
88
91
  react$1.useClick(floatingUIResult.context, {
89
92
  enabled: !!openOnClick && !readOnly,
90
93
  toggle: false,
91
94
  keyboardHandlers: false
92
95
  }),
96
+ // biome-ignore lint/correctness/useHookAtTopLevel: useFocusOut is not a React hook
93
97
  useFocusOut.useFocusOut(floatingUIResult.context, {
94
98
  enabled: !readOnly
95
99
  })
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerOverlayProvider.js","sources":["../src/date-picker/DatePickerOverlayProvider.tsx"],"sourcesContent":["import {\n type ElementProps,\n type FloatingContext,\n type OpenChangeReason as FloatingUIOpenChangeReason,\n flip,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { createContext, useControlled, useFloatingUI } from \"@salt-ds/core\";\nimport {\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useFocusOut } from \"./useFocusOut\";\nimport { useKeyboard } from \"./useKeyboard\";\n\n/** Reason for overlay state change, can be a custom reason */\nexport type DatePickerOpenChangeReason =\n | FloatingUIOpenChangeReason\n | \"apply\"\n | \"cancel\"\n | string;\n/**\n * Interface representing the state for a DatePicker overlay.\n */\ninterface DatePickerOverlayState {\n /**\n * If `true`, the overlay is open.\n */\n open: boolean;\n /**\n * If `true`, the overlay contains the active element\n */\n focused: boolean;\n /**\n * The result of the floating UI calculations.\n */\n floatingUIResult: ReturnType<typeof useFloatingUI>;\n /**\n * Ref to attach to the initially focused element, when the overlay is opened.\n */\n initialFocusRef?: React.MutableRefObject<HTMLElement | null>;\n}\n\n/**\n * Interface representing the helper functions for a DatePicker overlay.\n */\ninterface DatePickerOverlayHelpers {\n /**\n * Function to get the props for the floating element.\n */\n getFloatingProps: ReturnType<typeof useInteractions>[\"getFloatingProps\"];\n /**\n * Function to get the props for the reference element.\n */\n getReferenceProps: ReturnType<typeof useInteractions>[\"getReferenceProps\"];\n /**\n * Sets the open state of the overlay.\n * @param newOpen - The new value for the open state.\n * @param event - event that triggered the state change\n * @param reason - reason for the the state change\n */\n setOpen: (\n newOpen: boolean,\n event?: Event,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**~\n * Register a callback for when onDismiss is called\n * @param onDismissCallback\n */\n setOnDismiss: (onDismissCallback: (event?: Event) => void) => void;\n}\n\n/**\n * Interface representing the context type for a DatePicker overlay.\n */\ninterface DatePickerOverlayContextType {\n /**\n * The state of the DatePicker overlay.\n */\n state: DatePickerOverlayState;\n /**\n * The helper functions for the DatePicker overlay.\n */\n helpers: DatePickerOverlayHelpers;\n}\n\n/**\n * Context for the DatePicker overlay.\n */\nconst DatePickerOverlayContext = createContext<\n DatePickerOverlayContextType | undefined\n>(\"DatePickerOverlayContext\", undefined);\n\n/**\n * Props for the DatePickerOverlayProvider component.\n */\ninterface DatePickerOverlayProviderProps {\n /**\n * If `true`, the overlay is open.\n */\n open?: boolean;\n /**\n * When `open` is uncontrolled, set this to `true` to open on click\n */\n openOnClick?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n * @param reason - reason for the the state change\n */\n onOpenChange?: (\n newOpen: boolean,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**\n * The default open state of the overlay.\n */\n defaultOpen?: boolean;\n /**\n * The content to be rendered inside the overlay provider.\n */\n children: ReactNode;\n /**\n * A factory method to create a set of interaction, if provided overrides the default interactions\n */\n interactions?: (context: FloatingContext) => Array<ElementProps>;\n /**\n * When true, shouldn't open the overlay.\n */\n readOnly?: boolean;\n}\n\nexport const DatePickerOverlayProvider: React.FC<\n DatePickerOverlayProviderProps\n> = ({\n open: openProp,\n openOnClick,\n defaultOpen,\n onOpenChange,\n children,\n interactions,\n readOnly,\n}) => {\n const [open, setOpenState, isOpenControlled] = useControlled({\n controlled: openProp,\n default: Boolean(defaultOpen),\n name: \"DatePicker\",\n state: \"openDatePickerOverlay\",\n });\n const triggeringElementRef = useRef<HTMLElement | null>(null);\n const initialFocusRef = useRef<HTMLElement | null>(null);\n const [focused, setFocused] = useState(false);\n const onDismissCallback = useRef<(event?: Event) => void>();\n const handleOpenChange = useCallback(\n (newOpen: boolean, _event?: Event, reason?: DatePickerOpenChangeReason) => {\n if (newOpen) {\n if (readOnly) {\n return;\n }\n triggeringElementRef.current = document.activeElement as HTMLElement;\n setFocused(true);\n } else if (!isOpenControlled && reason !== \"focus-out\") {\n const trigger = triggeringElementRef.current as HTMLElement;\n if (trigger) {\n trigger.focus();\n }\n if (trigger instanceof HTMLInputElement) {\n setTimeout(() => {\n trigger.setSelectionRange(0, trigger.value.length);\n }, 1);\n }\n triggeringElementRef.current = null;\n }\n setOpenState(newOpen);\n onOpenChange?.(newOpen, reason);\n\n if (\n reason === \"focus-out\" ||\n reason === \"escape-key\" ||\n (reason === \"outside-press\" && onDismissCallback.current)\n ) {\n onDismissCallback?.current?.();\n }\n },\n [isOpenControlled, onOpenChange, readOnly],\n );\n\n const openState = open && !readOnly;\n const floatingUIResult = useFloatingUI({\n open: openState,\n onOpenChange: handleOpenChange,\n placement: \"bottom-start\",\n middleware: [flip({ fallbackStrategy: \"initialPlacement\" })],\n });\n\n const handleContainerBlur = useCallback(() => {\n setTimeout(() => {\n setFocused(\n !!floatingUIResult?.refs.floating?.current?.contains(\n document.activeElement,\n ),\n );\n }, 0);\n }, [floatingUIResult]);\n\n const {\n getFloatingProps: getFloatingPropsCallback,\n getReferenceProps: getReferencePropsCallback,\n } = useInteractions(\n interactions\n ? interactions(floatingUIResult.context)\n : [\n useDismiss(floatingUIResult.context, {}),\n useKeyboard(floatingUIResult.context, {\n enabled: !readOnly,\n onArrowDown: (event) => {\n handleOpenChange(true, event.nativeEvent, \"reference-press\");\n },\n }),\n useClick(floatingUIResult.context, {\n enabled: !!openOnClick && !readOnly,\n toggle: false,\n keyboardHandlers: false,\n }),\n useFocusOut(floatingUIResult.context, {\n enabled: !readOnly,\n }),\n ],\n );\n\n const getFloatingProps = useCallback(\n (userProps: React.HTMLProps<HTMLElement> | undefined) => {\n const { x, y, strategy, elements } = floatingUIResult;\n return {\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n ...getFloatingPropsCallback(userProps),\n focusManagerProps: {\n returnFocus: false,\n context: floatingUIResult.context,\n initialFocus: initialFocusRef,\n },\n };\n },\n [getFloatingPropsCallback, floatingUIResult],\n );\n const setOnDismiss = useCallback(\n (dismissCallback: (event?: Event) => void) => {\n onDismissCallback.current = dismissCallback;\n },\n [],\n );\n\n const state: DatePickerOverlayState = useMemo(\n () => ({\n open: openState,\n focused,\n floatingUIResult,\n initialFocusRef,\n }),\n [focused, openState, floatingUIResult],\n );\n\n const helpers: DatePickerOverlayHelpers = useMemo(\n () => ({\n getFloatingProps,\n getReferenceProps: getReferencePropsCallback,\n setOpen: handleOpenChange,\n setOnDismiss,\n }),\n [\n getFloatingProps,\n getReferencePropsCallback,\n handleOpenChange,\n setOnDismiss,\n ],\n );\n const contextValue = useMemo(() => ({ state, helpers }), [state, helpers]);\n\n return (\n <DatePickerOverlayContext.Provider value={contextValue}>\n <div onBlur={handleContainerBlur}>{children}</div>\n </DatePickerOverlayContext.Provider>\n );\n};\n\nexport const useDatePickerOverlay = (): DatePickerOverlayContextType => {\n const context = useContext(DatePickerOverlayContext);\n if (!context) {\n throw new Error(\n \"useDatePickerOverlay must be used within a DatePickerOverlayProvider\",\n );\n }\n return context;\n};\n"],"names":["createContext","useControlled","useRef","useState","useCallback","useFloatingUI","flip","useInteractions","useDismiss","useKeyboard","useClick","useFocusOut","useMemo","jsx","useContext"],"mappings":"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"}
1
+ {"version":3,"file":"DatePickerOverlayProvider.js","sources":["../src/date-picker/DatePickerOverlayProvider.tsx"],"sourcesContent":["import {\n type ElementProps,\n type FloatingContext,\n type OpenChangeReason as FloatingUIOpenChangeReason,\n flip,\n useClick,\n useDismiss,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { createContext, useControlled, useFloatingUI } from \"@salt-ds/core\";\nimport {\n type ReactNode,\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useFocusOut } from \"./useFocusOut\";\nimport { useKeyboard } from \"./useKeyboard\";\n\n/** Reason for overlay state change, can be a custom reason */\nexport type DatePickerOpenChangeReason =\n | FloatingUIOpenChangeReason\n | \"apply\"\n | \"cancel\"\n | string;\n/**\n * Interface representing the state for a DatePicker overlay.\n */\ninterface DatePickerOverlayState {\n /**\n * If `true`, the overlay is open.\n */\n open: boolean;\n /**\n * If `true`, the overlay contains the active element\n */\n focused: boolean;\n /**\n * The result of the floating UI calculations.\n */\n floatingUIResult: ReturnType<typeof useFloatingUI>;\n /**\n * Ref to attach to the initially focused element, when the overlay is opened.\n */\n initialFocusRef?: React.MutableRefObject<HTMLElement | null>;\n}\n\n/**\n * Interface representing the helper functions for a DatePicker overlay.\n */\ninterface DatePickerOverlayHelpers {\n /**\n * Function to get the props for the floating element.\n */\n getFloatingProps: ReturnType<typeof useInteractions>[\"getFloatingProps\"];\n /**\n * Function to get the props for the reference element.\n */\n getReferenceProps: ReturnType<typeof useInteractions>[\"getReferenceProps\"];\n /**\n * Sets the open state of the overlay.\n * @param newOpen - The new value for the open state.\n * @param event - event that triggered the state change\n * @param reason - reason for the the state change\n */\n setOpen: (\n newOpen: boolean,\n event?: Event,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**~\n * Register a callback for when onDismiss is called\n * @param onDismissCallback\n */\n setOnDismiss: (onDismissCallback: (event?: Event) => void) => void;\n}\n\n/**\n * Interface representing the context type for a DatePicker overlay.\n */\ninterface DatePickerOverlayContextType {\n /**\n * The state of the DatePicker overlay.\n */\n state: DatePickerOverlayState;\n /**\n * The helper functions for the DatePicker overlay.\n */\n helpers: DatePickerOverlayHelpers;\n}\n\n/**\n * Context for the DatePicker overlay.\n */\nconst DatePickerOverlayContext = createContext<\n DatePickerOverlayContextType | undefined\n>(\"DatePickerOverlayContext\", undefined);\n\n/**\n * Props for the DatePickerOverlayProvider component.\n */\ninterface DatePickerOverlayProviderProps {\n /**\n * If `true`, the overlay is open.\n */\n open?: boolean;\n /**\n * When `open` is uncontrolled, set this to `true` to open on click\n */\n openOnClick?: boolean;\n /**\n * Handler for when open state changes\n * @param newOpen - true when opened\n * @param reason - reason for the the state change\n */\n onOpenChange?: (\n newOpen: boolean,\n reason?: DatePickerOpenChangeReason,\n ) => void;\n /**\n * The default open state of the overlay.\n */\n defaultOpen?: boolean;\n /**\n * The content to be rendered inside the overlay provider.\n */\n children: ReactNode;\n /**\n * A factory method to create a set of interaction, if provided overrides the default interactions\n */\n interactions?: (context: FloatingContext) => Array<ElementProps>;\n /**\n * When true, shouldn't open the overlay.\n */\n readOnly?: boolean;\n}\n\nexport const DatePickerOverlayProvider: React.FC<\n DatePickerOverlayProviderProps\n> = ({\n open: openProp,\n openOnClick,\n defaultOpen,\n onOpenChange,\n children,\n interactions,\n readOnly,\n}) => {\n const [open, setOpenState, isOpenControlled] = useControlled({\n controlled: openProp,\n default: Boolean(defaultOpen),\n name: \"DatePicker\",\n state: \"openDatePickerOverlay\",\n });\n const triggeringElementRef = useRef<HTMLElement | null>(null);\n const initialFocusRef = useRef<HTMLElement | null>(null);\n const [focused, setFocused] = useState(false);\n const onDismissCallback = useRef<(event?: Event) => void>();\n const handleOpenChange = useCallback(\n (newOpen: boolean, _event?: Event, reason?: DatePickerOpenChangeReason) => {\n if (newOpen) {\n if (readOnly) {\n return;\n }\n triggeringElementRef.current = document.activeElement as HTMLElement;\n setFocused(true);\n } else if (!isOpenControlled && reason !== \"focus-out\") {\n const trigger = triggeringElementRef.current as HTMLElement;\n if (trigger) {\n trigger.focus();\n }\n if (trigger instanceof HTMLInputElement) {\n setTimeout(() => {\n trigger.setSelectionRange(0, trigger.value.length);\n }, 1);\n }\n triggeringElementRef.current = null;\n }\n setOpenState(newOpen);\n onOpenChange?.(newOpen, reason);\n\n if (\n reason === \"focus-out\" ||\n reason === \"escape-key\" ||\n (reason === \"outside-press\" && onDismissCallback.current)\n ) {\n onDismissCallback?.current?.();\n }\n },\n [isOpenControlled, onOpenChange, readOnly],\n );\n\n const openState = open && !readOnly;\n const floatingUIResult = useFloatingUI({\n open: openState,\n onOpenChange: handleOpenChange,\n placement: \"bottom-start\",\n middleware: [flip({ fallbackStrategy: \"initialPlacement\" })],\n });\n\n const handleContainerBlur = useCallback(() => {\n setTimeout(() => {\n setFocused(\n !!floatingUIResult?.refs.floating?.current?.contains(\n document.activeElement,\n ),\n );\n }, 0);\n }, [floatingUIResult]);\n\n const {\n getFloatingProps: getFloatingPropsCallback,\n getReferenceProps: getReferencePropsCallback,\n } = useInteractions(\n interactions\n ? interactions(floatingUIResult.context)\n : [\n // biome-ignore lint/correctness/useHookAtTopLevel: useDismiss is not a React hook\n useDismiss(floatingUIResult.context, {}),\n // biome-ignore lint/correctness/useHookAtTopLevel: useKeyboard is not a React hook\n useKeyboard(floatingUIResult.context, {\n enabled: !readOnly,\n onArrowDown: (event) => {\n handleOpenChange(true, event.nativeEvent, \"reference-press\");\n },\n }),\n // biome-ignore lint/correctness/useHookAtTopLevel: useClick is not a React hook\n useClick(floatingUIResult.context, {\n enabled: !!openOnClick && !readOnly,\n toggle: false,\n keyboardHandlers: false,\n }),\n // biome-ignore lint/correctness/useHookAtTopLevel: useFocusOut is not a React hook\n useFocusOut(floatingUIResult.context, {\n enabled: !readOnly,\n }),\n ],\n );\n\n const getFloatingProps = useCallback(\n (userProps: React.HTMLProps<HTMLElement> | undefined) => {\n const { x, y, strategy, elements } = floatingUIResult;\n return {\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n width: elements.floating?.offsetWidth,\n height: elements.floating?.offsetHeight,\n ...getFloatingPropsCallback(userProps),\n focusManagerProps: {\n returnFocus: false,\n context: floatingUIResult.context,\n initialFocus: initialFocusRef,\n },\n };\n },\n [getFloatingPropsCallback, floatingUIResult],\n );\n const setOnDismiss = useCallback(\n (dismissCallback: (event?: Event) => void) => {\n onDismissCallback.current = dismissCallback;\n },\n [],\n );\n\n const state: DatePickerOverlayState = useMemo(\n () => ({\n open: openState,\n focused,\n floatingUIResult,\n initialFocusRef,\n }),\n [focused, openState, floatingUIResult],\n );\n\n const helpers: DatePickerOverlayHelpers = useMemo(\n () => ({\n getFloatingProps,\n getReferenceProps: getReferencePropsCallback,\n setOpen: handleOpenChange,\n setOnDismiss,\n }),\n [\n getFloatingProps,\n getReferencePropsCallback,\n handleOpenChange,\n setOnDismiss,\n ],\n );\n const contextValue = useMemo(() => ({ state, helpers }), [state, helpers]);\n\n return (\n <DatePickerOverlayContext.Provider value={contextValue}>\n <div onBlur={handleContainerBlur}>{children}</div>\n </DatePickerOverlayContext.Provider>\n );\n};\n\nexport const useDatePickerOverlay = (): DatePickerOverlayContextType => {\n const context = useContext(DatePickerOverlayContext);\n if (!context) {\n throw new Error(\n \"useDatePickerOverlay must be used within a DatePickerOverlayProvider\",\n );\n }\n return context;\n};\n"],"names":["createContext","useControlled","useRef","useState","useCallback","useFloatingUI","flip","useInteractions","useDismiss","useKeyboard","useClick","useFocusOut","useMemo","jsx","useContext"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var css_248z = ".saltDatePickerOverlay {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-selectable-borderStyle-selected) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner, 0);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-container > .saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
3
+ var css_248z = ".saltDatePickerOverlay {\n background: var(--salt-container-primary-background);\n border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);\n border-radius: var(--salt-palette-corner, 0);\n overflow: hidden;\n overflow-y: auto;\n position: relative;\n z-index: var(--salt-zIndex-flyover);\n box-shadow: var(--salt-overlayable-shadow-popout);\n box-sizing: border-box;\n display: flex;\n}\n\n.saltDatePickerPanel-container {\n width: min-content;\n gap: 1px;\n}\n\n.saltDatePickerPanel-container > .saltDatePickerPanel-header {\n padding: var(--salt-spacing-100);\n}\n";
4
4
 
5
5
  module.exports = css_248z;
6
6
  //# sourceMappingURL=DatePickerPanel.css.js.map
@@ -7,12 +7,12 @@ var window = require('@salt-ds/window');
7
7
  var clsx = require('clsx');
8
8
  var react = require('react');
9
9
  var Calendar = require('../calendar/Calendar.js');
10
+ var CalendarGrid = require('../calendar/CalendarGrid.js');
10
11
  var CalendarNavigation = require('../calendar/CalendarNavigation.js');
11
12
  require('../calendar/CalendarWeekHeader.js');
12
- var CalendarGrid = require('../calendar/CalendarGrid.js');
13
13
  var LocalizationProvider = require('../localization-provider/LocalizationProvider.js');
14
- require('../calendar/internal/CalendarContext.js');
15
14
  require('../calendar/useCalendarSelection.js');
15
+ require('../calendar/internal/CalendarContext.js');
16
16
  var utils = require('../calendar/internal/utils.js');
17
17
  var DatePickerContext = require('./DatePickerContext.js');
18
18
  var DatePickerOverlayProvider = require('./DatePickerOverlayProvider.js');
@@ -215,7 +215,7 @@ const DatePickerRangeGridPanel = react.forwardRef(
215
215
  {
216
216
  separators: true,
217
217
  gap: 0,
218
- className: clsx(className, withBaseName("container")),
218
+ className: clsx.clsx(className, withBaseName("container")),
219
219
  ref,
220
220
  ...rest,
221
221
  children: [