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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/css/salt-lab.css +274 -79
  3. package/dist-cjs/app-header/AppHeader.js.map +1 -1
  4. package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
  5. package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
  6. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  7. package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  8. package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  9. package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  10. package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
  11. package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
  12. package/dist-cjs/button-bar/internal/ButtonBarContext.js.map +1 -1
  13. package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
  14. package/dist-cjs/button-bar/internal/useDescendant.js.map +1 -1
  15. package/dist-cjs/button-bar/internal/useDescendants.js.map +1 -1
  16. package/dist-cjs/calendar/Calendar.css.js +1 -1
  17. package/dist-cjs/calendar/Calendar.js +11 -2
  18. package/dist-cjs/calendar/Calendar.js.map +1 -1
  19. package/dist-cjs/calendar/CalendarGrid.js +38 -36
  20. package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
  21. package/dist-cjs/calendar/CalendarMonthHeader.js +1 -1
  22. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
  23. package/dist-cjs/calendar/CalendarNavigation.css.js +1 -1
  24. package/dist-cjs/calendar/CalendarNavigation.js +20 -13
  25. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  26. package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
  27. package/dist-cjs/calendar/CalendarWeekHeader.js +1 -1
  28. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  29. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  30. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  31. package/dist-cjs/calendar/internal/CalendarDay.js +26 -36
  32. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  33. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  34. package/dist-cjs/calendar/internal/CalendarMonth.js +30 -9
  35. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  36. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  37. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  38. package/dist-cjs/calendar/useCalendar.js +7 -9
  39. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  40. package/dist-cjs/calendar/useCalendarDay.js +7 -11
  41. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  42. package/dist-cjs/calendar/useCalendarSelection.js +144 -76
  43. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  44. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  45. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  46. package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
  47. package/dist-cjs/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  48. package/dist-cjs/cascading-menu/internal/keydownHandlers.js.map +1 -1
  49. package/dist-cjs/cascading-menu/internal/menuPositioning.js.map +1 -1
  50. package/dist-cjs/cascading-menu/internal/stateUtils.js.map +1 -1
  51. package/dist-cjs/cascading-menu/internal/useClickAway.js.map +1 -1
  52. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  53. package/dist-cjs/cascading-menu/internal/useMountedRef.js.map +1 -1
  54. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  55. package/dist-cjs/cascading-menu/internal/useRefsManager.js.map +1 -1
  56. package/dist-cjs/cascading-menu/internal/useStateReducer.js.map +1 -1
  57. package/dist-cjs/cascading-menu/stateChangeTypes.js.map +1 -1
  58. package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
  59. package/dist-cjs/color-chooser/Color.js.map +1 -1
  60. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  61. package/dist-cjs/color-chooser/ColorHelpers.js.map +1 -1
  62. package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
  63. package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
  64. package/dist-cjs/color-chooser/GetColorPalettes.js.map +1 -1
  65. package/dist-cjs/color-chooser/HexInput.js.map +1 -1
  66. package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
  67. package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
  68. package/dist-cjs/color-chooser/Swatch.js.map +1 -1
  69. package/dist-cjs/color-chooser/Swatches.js.map +1 -1
  70. package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
  71. package/dist-cjs/color-chooser/color-utils.js.map +1 -1
  72. package/dist-cjs/color-chooser/colorMap.js.map +1 -1
  73. package/dist-cjs/color-chooser/createTabsMapping.js.map +1 -1
  74. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  75. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  76. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  77. package/dist-cjs/combo-box-deprecated/filterHelpers.js.map +1 -1
  78. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  79. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  80. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  81. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  82. package/dist-cjs/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  83. package/dist-cjs/common-hooks/calcPreferredHeight.js.map +1 -1
  84. package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
  85. package/dist-cjs/common-hooks/itemToString.js.map +1 -1
  86. package/dist-cjs/common-hooks/keyUtils.js.map +1 -1
  87. package/dist-cjs/common-hooks/list-dom-utils.js.map +1 -1
  88. package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
  89. package/dist-cjs/common-hooks/useAutoSizer.js.map +1 -1
  90. package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
  91. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  92. package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  93. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  94. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  95. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  96. package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
  97. package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
  98. package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
  99. package/dist-cjs/common-hooks/utils/filter-utils.js.map +1 -1
  100. package/dist-cjs/common-hooks/utils/isSelected.js.map +1 -1
  101. package/dist-cjs/contact-details/ContactAction.js.map +1 -1
  102. package/dist-cjs/contact-details/ContactActions.js.map +1 -1
  103. package/dist-cjs/contact-details/ContactAvatar.js.map +1 -1
  104. package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
  105. package/dist-cjs/contact-details/ContactFavoriteToggle.js.map +1 -1
  106. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  107. package/dist-cjs/contact-details/ContactMetadataItem.js.map +1 -1
  108. package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
  109. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  110. package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
  111. package/dist-cjs/contact-details/MailLinkComponent.js.map +1 -1
  112. package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
  113. package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
  114. package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  115. package/dist-cjs/contact-details/internal/StarIcon.js.map +1 -1
  116. package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
  117. package/dist-cjs/contact-details/internal/useComponentSize.js.map +1 -1
  118. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  119. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  120. package/dist-cjs/date-input/DateInputRange.js +3 -2
  121. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  122. package/dist-cjs/date-input/DateInputSingle.js +5 -2
  123. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  124. package/dist-cjs/date-picker/DatePicker.js +0 -2
  125. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  126. package/dist-cjs/date-picker/DatePickerActions.js +1 -1
  127. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  128. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  129. package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -1
  130. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  131. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  132. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +2 -3
  133. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  134. package/dist-cjs/date-picker/DatePickerRangeInput.js +22 -8
  135. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  136. package/dist-cjs/date-picker/DatePickerRangePanel.js +2 -4
  137. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  138. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +2 -4
  139. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  140. package/dist-cjs/date-picker/DatePickerSingleInput.js +12 -7
  141. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  142. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  143. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  144. package/dist-cjs/date-picker/useDatePicker.js +0 -17
  145. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  146. package/dist-cjs/date-picker/useFocusOut.js.map +1 -1
  147. package/dist-cjs/date-picker/useKeyboard.js.map +1 -1
  148. package/dist-cjs/deck-item/DeckItem.js.map +1 -1
  149. package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
  150. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  151. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  152. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  153. package/dist-cjs/dropdown/useClickAway.js.map +1 -1
  154. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  155. package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
  156. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  157. package/dist-cjs/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  158. package/dist-cjs/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  159. package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
  160. package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
  161. package/dist-cjs/form-field-legacy/FormHelperText.js.map +1 -1
  162. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  163. package/dist-cjs/form-field-legacy/NecessityIndicator.js.map +1 -1
  164. package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
  165. package/dist-cjs/form-field-legacy/constant.js.map +1 -1
  166. package/dist-cjs/form-group/FormGroup.js.map +1 -1
  167. package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
  168. package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
  169. package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
  170. package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
  171. package/dist-cjs/input-legacy/useCursorOnFocus.js.map +1 -1
  172. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  173. package/dist-cjs/list/Highlighter.js.map +1 -1
  174. package/dist-cjs/list/List.js.map +1 -1
  175. package/dist-cjs/list/ListItem.js.map +1 -1
  176. package/dist-cjs/list/ListItemGroup.js.map +1 -1
  177. package/dist-cjs/list/ListItemHeader.js.map +1 -1
  178. package/dist-cjs/list/VirtualizedList.js.map +1 -1
  179. package/dist-cjs/list/keyset.js.map +1 -1
  180. package/dist-cjs/list/useList.js.map +1 -1
  181. package/dist-cjs/list/useListHeight.js.map +1 -1
  182. package/dist-cjs/list/useVirtualization.js.map +1 -1
  183. package/dist-cjs/list-deprecated/List.js.map +1 -1
  184. package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
  185. package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
  186. package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
  187. package/dist-cjs/list-deprecated/ListItemContext.js.map +1 -1
  188. package/dist-cjs/list-deprecated/ListStateContext.js.map +1 -1
  189. package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
  190. package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
  191. package/dist-cjs/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  192. package/dist-cjs/list-deprecated/internal/helpers.js.map +1 -1
  193. package/dist-cjs/list-deprecated/internal/scrollIntoView.js.map +1 -1
  194. package/dist-cjs/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  195. package/dist-cjs/list-deprecated/internal/useWidth.js.map +1 -1
  196. package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
  197. package/dist-cjs/list-deprecated/useList.js.map +1 -1
  198. package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
  199. package/dist-cjs/list-deprecated/useTypeSelect.js.map +1 -1
  200. package/dist-cjs/list-next/ListItemNext.js.map +1 -1
  201. package/dist-cjs/list-next/ListNext.js.map +1 -1
  202. package/dist-cjs/list-next/ListNextContext.js.map +1 -1
  203. package/dist-cjs/list-next/useList.js.map +1 -1
  204. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -1
  205. package/dist-cjs/logo/Logo.js.map +1 -1
  206. package/dist-cjs/logo/LogoImage.js.map +1 -1
  207. package/dist-cjs/logo/LogoSeparator.js.map +1 -1
  208. package/dist-cjs/menu-button/MenuButton.js.map +1 -1
  209. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  210. package/dist-cjs/metric/Metric.js.map +1 -1
  211. package/dist-cjs/metric/MetricContent.js.map +1 -1
  212. package/dist-cjs/metric/MetricHeader.js.map +1 -1
  213. package/dist-cjs/metric/internal/MetricContext.js.map +1 -1
  214. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  215. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  216. package/dist-cjs/number-input/internal/useCaret.js.map +1 -1
  217. package/dist-cjs/number-input/internal/useInterval.js.map +1 -1
  218. package/dist-cjs/number-input/internal/utils.js.map +1 -1
  219. package/dist-cjs/number-input/useNumberInput.js.map +1 -1
  220. package/dist-cjs/portal/Portal.js.map +1 -1
  221. package/dist-cjs/query-input/QueryInput.js.map +1 -1
  222. package/dist-cjs/query-input/internal/CategoryList.js.map +1 -1
  223. package/dist-cjs/query-input/internal/CategoryListContext.js.map +1 -1
  224. package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
  225. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  226. package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
  227. package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
  228. package/dist-cjs/query-input/internal/ValueSelector.js.map +1 -1
  229. package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
  230. package/dist-cjs/query-input/useQueryInput.js.map +1 -1
  231. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  232. package/dist-cjs/responsive/overflowUtils.js.map +1 -1
  233. package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
  234. package/dist-cjs/responsive/useInstantCollapse.js.map +1 -1
  235. package/dist-cjs/responsive/useOverflow.js.map +1 -1
  236. package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
  237. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  238. package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
  239. package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
  240. package/dist-cjs/responsive/useWidth.js.map +1 -1
  241. package/dist-cjs/responsive/utils.js.map +1 -1
  242. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  243. package/dist-cjs/static-list/StaticList.js.map +1 -1
  244. package/dist-cjs/static-list/StaticListItem.js.map +1 -1
  245. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -1
  246. package/dist-cjs/system-status/SystemStatus.js.map +1 -1
  247. package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
  248. package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
  249. package/dist-cjs/table/TBody.js.map +1 -1
  250. package/dist-cjs/table/TD.js +6 -2
  251. package/dist-cjs/table/TD.js.map +1 -1
  252. package/dist-cjs/table/TFoot.js.map +1 -1
  253. package/dist-cjs/table/TH.js +6 -2
  254. package/dist-cjs/table/TH.js.map +1 -1
  255. package/dist-cjs/table/THead.js.map +1 -1
  256. package/dist-cjs/table/TR.js.map +1 -1
  257. package/dist-cjs/table/Table.css.js +1 -1
  258. package/dist-cjs/table/Table.js +2 -2
  259. package/dist-cjs/table/Table.js.map +1 -1
  260. package/dist-cjs/tabs/Tab.js.map +1 -1
  261. package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
  262. package/dist-cjs/tabs/TabPanel.js.map +1 -1
  263. package/dist-cjs/tabs/Tabs.js.map +1 -1
  264. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  265. package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
  266. package/dist-cjs/tabs/drag-drop/drag-utils.js.map +1 -1
  267. package/dist-cjs/tabs/drag-drop/dragDropTypes.js.map +1 -1
  268. package/dist-cjs/tabs/drag-drop/useDragDrop.js.map +1 -1
  269. package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  270. package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
  271. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  272. package/dist-cjs/tabs/useEditableItem.js.map +1 -1
  273. package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
  274. package/dist-cjs/tabs/useKeyboardNavigation.js.map +1 -1
  275. package/dist-cjs/tabs/useSelection.js.map +1 -1
  276. package/dist-cjs/tabs/useTabs.js.map +1 -1
  277. package/dist-cjs/tabs/useTabstrip.js.map +1 -1
  278. package/dist-cjs/tabs-next/TabBar.js.map +1 -1
  279. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  280. package/dist-cjs/tabs-next/TabNext.js.map +1 -1
  281. package/dist-cjs/tabs-next/TabNextAction.js.map +1 -1
  282. package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
  283. package/dist-cjs/tabs-next/TabNextPanel.js.map +1 -1
  284. package/dist-cjs/tabs-next/TabNextTrigger.css.js +1 -1
  285. package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
  286. package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
  287. package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
  288. package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
  289. package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
  290. package/dist-cjs/tabs-next/hooks/useFocusOutside.js.map +1 -1
  291. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
  292. package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  293. package/dist-cjs/toast-group/ToastGroup.js.map +1 -1
  294. package/dist-cjs/tokenized-input/TokenizedInput.js.map +1 -1
  295. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  296. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  297. package/dist-cjs/tokenized-input/internal/InputRuler.js.map +1 -1
  298. package/dist-cjs/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  299. package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
  300. package/dist-cjs/tokenized-input/internal/getCursorPosition.js.map +1 -1
  301. package/dist-cjs/tokenized-input/internal/isPlainObject.js.map +1 -1
  302. package/dist-cjs/tokenized-input/internal/useResizeObserver.js.map +1 -1
  303. package/dist-cjs/tokenized-input/internal/useWidth.js.map +1 -1
  304. package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
  305. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  306. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  307. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  308. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  309. package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -1
  310. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  311. package/dist-cjs/toolbar/Toolbar.js.map +1 -1
  312. package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
  313. package/dist-cjs/toolbar/Tooltray.js.map +1 -1
  314. package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
  315. package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
  316. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  317. package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  318. package/dist-cjs/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  319. package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  320. package/dist-cjs/tree/Tree.js.map +1 -1
  321. package/dist-cjs/tree/TreeNode.js.map +1 -1
  322. package/dist-cjs/tree/use-tree-keyboard-navigation.js.map +1 -1
  323. package/dist-cjs/tree/useTree.js.map +1 -1
  324. package/dist-cjs/utils/escapeRegExp.js.map +1 -1
  325. package/dist-cjs/utils/forwardCallbackProps.js.map +1 -1
  326. package/dist-cjs/utils/isEmail.js.map +1 -1
  327. package/dist-cjs/utils/isPlainObject.js.map +1 -1
  328. package/dist-cjs/utils/partition.js.map +1 -1
  329. package/dist-cjs/utils/useClickOutside.js.map +1 -1
  330. package/dist-cjs/utils/useEventCallback.js.map +1 -1
  331. package/dist-cjs/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  332. package/dist-cjs/utils/useLayoutEffectOnce.js.map +1 -1
  333. package/dist-cjs/utils/useLayoutEffectSkipFirst.js.map +1 -1
  334. package/dist-cjs/utils/useOverflowDetection.js.map +1 -1
  335. package/dist-cjs/utils/useSlideSelection.js.map +1 -1
  336. package/dist-cjs/window/ElectronWindow.js.map +1 -1
  337. package/dist-cjs/window/WindowContext.js.map +1 -1
  338. package/dist-cjs/window/desktop-utils.js.map +1 -1
  339. package/dist-es/app-header/AppHeader.js.map +1 -1
  340. package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
  341. package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
  342. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  343. package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  344. package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  345. package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  346. package/dist-es/button-bar/ButtonBar.js.map +1 -1
  347. package/dist-es/button-bar/OrderedButton.js.map +1 -1
  348. package/dist-es/button-bar/internal/ButtonBarContext.js.map +1 -1
  349. package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
  350. package/dist-es/button-bar/internal/useDescendant.js.map +1 -1
  351. package/dist-es/button-bar/internal/useDescendants.js.map +1 -1
  352. package/dist-es/calendar/Calendar.css.js +1 -1
  353. package/dist-es/calendar/Calendar.js +12 -3
  354. package/dist-es/calendar/Calendar.js.map +1 -1
  355. package/dist-es/calendar/CalendarGrid.js +39 -37
  356. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  357. package/dist-es/calendar/CalendarMonthHeader.js +1 -1
  358. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  359. package/dist-es/calendar/CalendarNavigation.css.js +1 -1
  360. package/dist-es/calendar/CalendarNavigation.js +21 -14
  361. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  362. package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
  363. package/dist-es/calendar/CalendarWeekHeader.js +2 -2
  364. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  365. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  366. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  367. package/dist-es/calendar/internal/CalendarDay.js +27 -37
  368. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  369. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  370. package/dist-es/calendar/internal/CalendarMonth.js +31 -10
  371. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  372. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  373. package/dist-es/calendar/internal/utils.js.map +1 -1
  374. package/dist-es/calendar/useCalendar.js +7 -9
  375. package/dist-es/calendar/useCalendar.js.map +1 -1
  376. package/dist-es/calendar/useCalendarDay.js +7 -11
  377. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  378. package/dist-es/calendar/useCalendarSelection.js +144 -76
  379. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  380. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  381. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  382. package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
  383. package/dist-es/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  384. package/dist-es/cascading-menu/internal/keydownHandlers.js.map +1 -1
  385. package/dist-es/cascading-menu/internal/menuPositioning.js.map +1 -1
  386. package/dist-es/cascading-menu/internal/stateUtils.js.map +1 -1
  387. package/dist-es/cascading-menu/internal/useClickAway.js.map +1 -1
  388. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  389. package/dist-es/cascading-menu/internal/useMountedRef.js.map +1 -1
  390. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  391. package/dist-es/cascading-menu/internal/useRefsManager.js.map +1 -1
  392. package/dist-es/cascading-menu/internal/useStateReducer.js.map +1 -1
  393. package/dist-es/cascading-menu/stateChangeTypes.js.map +1 -1
  394. package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
  395. package/dist-es/color-chooser/Color.js.map +1 -1
  396. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  397. package/dist-es/color-chooser/ColorHelpers.js.map +1 -1
  398. package/dist-es/color-chooser/ColorPicker.js.map +1 -1
  399. package/dist-es/color-chooser/DictTabs.js.map +1 -1
  400. package/dist-es/color-chooser/GetColorPalettes.js.map +1 -1
  401. package/dist-es/color-chooser/HexInput.js.map +1 -1
  402. package/dist-es/color-chooser/RGBAInput.js.map +1 -1
  403. package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
  404. package/dist-es/color-chooser/Swatch.js.map +1 -1
  405. package/dist-es/color-chooser/Swatches.js.map +1 -1
  406. package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
  407. package/dist-es/color-chooser/color-utils.js.map +1 -1
  408. package/dist-es/color-chooser/colorMap.js.map +1 -1
  409. package/dist-es/color-chooser/createTabsMapping.js.map +1 -1
  410. package/dist-es/combo-box/ComboBox.js.map +1 -1
  411. package/dist-es/combo-box/useCombobox.js.map +1 -1
  412. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  413. package/dist-es/combo-box-deprecated/filterHelpers.js.map +1 -1
  414. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  415. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  416. package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  417. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  418. package/dist-es/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  419. package/dist-es/common-hooks/calcPreferredHeight.js.map +1 -1
  420. package/dist-es/common-hooks/collectionProvider.js.map +1 -1
  421. package/dist-es/common-hooks/itemToString.js.map +1 -1
  422. package/dist-es/common-hooks/keyUtils.js.map +1 -1
  423. package/dist-es/common-hooks/list-dom-utils.js.map +1 -1
  424. package/dist-es/common-hooks/selectionTypes.js.map +1 -1
  425. package/dist-es/common-hooks/useAutoSizer.js.map +1 -1
  426. package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
  427. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  428. package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  429. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  430. package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  431. package/dist-es/common-hooks/useSelection.js.map +1 -1
  432. package/dist-es/common-hooks/useTypeahead.js.map +1 -1
  433. package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
  434. package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
  435. package/dist-es/common-hooks/utils/filter-utils.js.map +1 -1
  436. package/dist-es/common-hooks/utils/isSelected.js.map +1 -1
  437. package/dist-es/contact-details/ContactAction.js.map +1 -1
  438. package/dist-es/contact-details/ContactActions.js.map +1 -1
  439. package/dist-es/contact-details/ContactAvatar.js.map +1 -1
  440. package/dist-es/contact-details/ContactDetails.js.map +1 -1
  441. package/dist-es/contact-details/ContactFavoriteToggle.js.map +1 -1
  442. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  443. package/dist-es/contact-details/ContactMetadataItem.js.map +1 -1
  444. package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
  445. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  446. package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
  447. package/dist-es/contact-details/MailLinkComponent.js.map +1 -1
  448. package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
  449. package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
  450. package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  451. package/dist-es/contact-details/internal/StarIcon.js.map +1 -1
  452. package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
  453. package/dist-es/contact-details/internal/useComponentSize.js.map +1 -1
  454. package/dist-es/content-status/ContentStatus.js.map +1 -1
  455. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  456. package/dist-es/date-input/DateInputRange.js +3 -2
  457. package/dist-es/date-input/DateInputRange.js.map +1 -1
  458. package/dist-es/date-input/DateInputSingle.js +5 -2
  459. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  460. package/dist-es/date-picker/DatePicker.js +0 -2
  461. package/dist-es/date-picker/DatePicker.js.map +1 -1
  462. package/dist-es/date-picker/DatePickerActions.js +1 -1
  463. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  464. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  465. package/dist-es/date-picker/DatePickerHelperText.js.map +1 -1
  466. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  467. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  468. package/dist-es/date-picker/DatePickerRangeGridPanel.js +2 -3
  469. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  470. package/dist-es/date-picker/DatePickerRangeInput.js +22 -8
  471. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  472. package/dist-es/date-picker/DatePickerRangePanel.js +2 -4
  473. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  474. package/dist-es/date-picker/DatePickerSingleGridPanel.js +2 -4
  475. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  476. package/dist-es/date-picker/DatePickerSingleInput.js +12 -7
  477. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  478. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  479. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  480. package/dist-es/date-picker/useDatePicker.js +0 -17
  481. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  482. package/dist-es/date-picker/useFocusOut.js.map +1 -1
  483. package/dist-es/date-picker/useKeyboard.js.map +1 -1
  484. package/dist-es/deck-item/DeckItem.js.map +1 -1
  485. package/dist-es/deck-layout/DeckLayout.js.map +1 -1
  486. package/dist-es/dropdown/Dropdown.js.map +1 -1
  487. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  488. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  489. package/dist-es/dropdown/useClickAway.js.map +1 -1
  490. package/dist-es/dropdown/useDropdown.js.map +1 -1
  491. package/dist-es/dropdown/useDropdownBase.js.map +1 -1
  492. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  493. package/dist-es/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  494. package/dist-es/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  495. package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
  496. package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
  497. package/dist-es/form-field-legacy/FormHelperText.js.map +1 -1
  498. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  499. package/dist-es/form-field-legacy/NecessityIndicator.js.map +1 -1
  500. package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
  501. package/dist-es/form-field-legacy/constant.js.map +1 -1
  502. package/dist-es/form-group/FormGroup.js.map +1 -1
  503. package/dist-es/formatted-input/FormattedInput.js.map +1 -1
  504. package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
  505. package/dist-es/input-legacy/InputLegacy.js.map +1 -1
  506. package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
  507. package/dist-es/input-legacy/useCursorOnFocus.js.map +1 -1
  508. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  509. package/dist-es/list/Highlighter.js.map +1 -1
  510. package/dist-es/list/List.js.map +1 -1
  511. package/dist-es/list/ListItem.js.map +1 -1
  512. package/dist-es/list/ListItemGroup.js.map +1 -1
  513. package/dist-es/list/ListItemHeader.js.map +1 -1
  514. package/dist-es/list/VirtualizedList.js.map +1 -1
  515. package/dist-es/list/keyset.js.map +1 -1
  516. package/dist-es/list/useList.js.map +1 -1
  517. package/dist-es/list/useListHeight.js.map +1 -1
  518. package/dist-es/list/useVirtualization.js.map +1 -1
  519. package/dist-es/list-deprecated/List.js.map +1 -1
  520. package/dist-es/list-deprecated/ListBase.js.map +1 -1
  521. package/dist-es/list-deprecated/ListItem.js.map +1 -1
  522. package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
  523. package/dist-es/list-deprecated/ListItemContext.js.map +1 -1
  524. package/dist-es/list-deprecated/ListStateContext.js.map +1 -1
  525. package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
  526. package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
  527. package/dist-es/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  528. package/dist-es/list-deprecated/internal/helpers.js.map +1 -1
  529. package/dist-es/list-deprecated/internal/scrollIntoView.js.map +1 -1
  530. package/dist-es/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  531. package/dist-es/list-deprecated/internal/useWidth.js.map +1 -1
  532. package/dist-es/list-deprecated/itemToString.js.map +1 -1
  533. package/dist-es/list-deprecated/useList.js.map +1 -1
  534. package/dist-es/list-deprecated/useListItem.js.map +1 -1
  535. package/dist-es/list-deprecated/useTypeSelect.js.map +1 -1
  536. package/dist-es/list-next/ListItemNext.js.map +1 -1
  537. package/dist-es/list-next/ListNext.js.map +1 -1
  538. package/dist-es/list-next/ListNextContext.js.map +1 -1
  539. package/dist-es/list-next/useList.js.map +1 -1
  540. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -1
  541. package/dist-es/logo/Logo.js.map +1 -1
  542. package/dist-es/logo/LogoImage.js.map +1 -1
  543. package/dist-es/logo/LogoSeparator.js.map +1 -1
  544. package/dist-es/menu-button/MenuButton.js.map +1 -1
  545. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  546. package/dist-es/metric/Metric.js.map +1 -1
  547. package/dist-es/metric/MetricContent.js.map +1 -1
  548. package/dist-es/metric/MetricHeader.js.map +1 -1
  549. package/dist-es/metric/internal/MetricContext.js.map +1 -1
  550. package/dist-es/number-input/NumberInput.js.map +1 -1
  551. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  552. package/dist-es/number-input/internal/useCaret.js.map +1 -1
  553. package/dist-es/number-input/internal/useInterval.js.map +1 -1
  554. package/dist-es/number-input/internal/utils.js.map +1 -1
  555. package/dist-es/number-input/useNumberInput.js.map +1 -1
  556. package/dist-es/portal/Portal.js.map +1 -1
  557. package/dist-es/query-input/QueryInput.js.map +1 -1
  558. package/dist-es/query-input/internal/CategoryList.js.map +1 -1
  559. package/dist-es/query-input/internal/CategoryListContext.js.map +1 -1
  560. package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
  561. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  562. package/dist-es/query-input/internal/SearchList.js.map +1 -1
  563. package/dist-es/query-input/internal/ValueList.js.map +1 -1
  564. package/dist-es/query-input/internal/ValueSelector.js.map +1 -1
  565. package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
  566. package/dist-es/query-input/useQueryInput.js.map +1 -1
  567. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  568. package/dist-es/responsive/overflowUtils.js.map +1 -1
  569. package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
  570. package/dist-es/responsive/useInstantCollapse.js.map +1 -1
  571. package/dist-es/responsive/useOverflow.js.map +1 -1
  572. package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
  573. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  574. package/dist-es/responsive/useReclaimSpace.js.map +1 -1
  575. package/dist-es/responsive/useResizeObserver.js.map +1 -1
  576. package/dist-es/responsive/useWidth.js.map +1 -1
  577. package/dist-es/responsive/utils.js.map +1 -1
  578. package/dist-es/search-input/SearchInput.js.map +1 -1
  579. package/dist-es/static-list/StaticList.js.map +1 -1
  580. package/dist-es/static-list/StaticListItem.js.map +1 -1
  581. package/dist-es/static-list/StaticListItemContent.js.map +1 -1
  582. package/dist-es/system-status/SystemStatus.js.map +1 -1
  583. package/dist-es/system-status/SystemStatusActions.js.map +1 -1
  584. package/dist-es/system-status/SystemStatusContent.js.map +1 -1
  585. package/dist-es/table/TBody.js.map +1 -1
  586. package/dist-es/table/TD.js +6 -2
  587. package/dist-es/table/TD.js.map +1 -1
  588. package/dist-es/table/TFoot.js.map +1 -1
  589. package/dist-es/table/TH.js +6 -2
  590. package/dist-es/table/TH.js.map +1 -1
  591. package/dist-es/table/THead.js.map +1 -1
  592. package/dist-es/table/TR.js.map +1 -1
  593. package/dist-es/table/Table.css.js +1 -1
  594. package/dist-es/table/Table.js +2 -2
  595. package/dist-es/table/Table.js.map +1 -1
  596. package/dist-es/tabs/Tab.js.map +1 -1
  597. package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
  598. package/dist-es/tabs/TabPanel.js.map +1 -1
  599. package/dist-es/tabs/Tabs.js.map +1 -1
  600. package/dist-es/tabs/Tabstrip.js.map +1 -1
  601. package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
  602. package/dist-es/tabs/drag-drop/drag-utils.js.map +1 -1
  603. package/dist-es/tabs/drag-drop/dragDropTypes.js.map +1 -1
  604. package/dist-es/tabs/drag-drop/useDragDrop.js.map +1 -1
  605. package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  606. package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
  607. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  608. package/dist-es/tabs/useEditableItem.js.map +1 -1
  609. package/dist-es/tabs/useItemsWithIds.js.map +1 -1
  610. package/dist-es/tabs/useKeyboardNavigation.js.map +1 -1
  611. package/dist-es/tabs/useSelection.js.map +1 -1
  612. package/dist-es/tabs/useTabs.js.map +1 -1
  613. package/dist-es/tabs/useTabstrip.js.map +1 -1
  614. package/dist-es/tabs-next/TabBar.js.map +1 -1
  615. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  616. package/dist-es/tabs-next/TabNext.js.map +1 -1
  617. package/dist-es/tabs-next/TabNextAction.js.map +1 -1
  618. package/dist-es/tabs-next/TabNextContext.js.map +1 -1
  619. package/dist-es/tabs-next/TabNextPanel.js.map +1 -1
  620. package/dist-es/tabs-next/TabNextTrigger.css.js +1 -1
  621. package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
  622. package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
  623. package/dist-es/tabs-next/TabsNext.js.map +1 -1
  624. package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
  625. package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
  626. package/dist-es/tabs-next/hooks/useFocusOutside.js.map +1 -1
  627. package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
  628. package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  629. package/dist-es/toast-group/ToastGroup.js.map +1 -1
  630. package/dist-es/tokenized-input/TokenizedInput.js.map +1 -1
  631. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  632. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  633. package/dist-es/tokenized-input/internal/InputRuler.js.map +1 -1
  634. package/dist-es/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  635. package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
  636. package/dist-es/tokenized-input/internal/getCursorPosition.js.map +1 -1
  637. package/dist-es/tokenized-input/internal/isPlainObject.js.map +1 -1
  638. package/dist-es/tokenized-input/internal/useResizeObserver.js.map +1 -1
  639. package/dist-es/tokenized-input/internal/useWidth.js.map +1 -1
  640. package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
  641. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  642. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  643. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  644. package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  645. package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -1
  646. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  647. package/dist-es/toolbar/Toolbar.js.map +1 -1
  648. package/dist-es/toolbar/ToolbarButton.js.map +1 -1
  649. package/dist-es/toolbar/Tooltray.js.map +1 -1
  650. package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
  651. package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
  652. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  653. package/dist-es/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  654. package/dist-es/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  655. package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  656. package/dist-es/tree/Tree.js.map +1 -1
  657. package/dist-es/tree/TreeNode.js.map +1 -1
  658. package/dist-es/tree/use-tree-keyboard-navigation.js.map +1 -1
  659. package/dist-es/tree/useTree.js.map +1 -1
  660. package/dist-es/utils/escapeRegExp.js.map +1 -1
  661. package/dist-es/utils/forwardCallbackProps.js.map +1 -1
  662. package/dist-es/utils/isEmail.js.map +1 -1
  663. package/dist-es/utils/isPlainObject.js.map +1 -1
  664. package/dist-es/utils/partition.js.map +1 -1
  665. package/dist-es/utils/useClickOutside.js.map +1 -1
  666. package/dist-es/utils/useEventCallback.js.map +1 -1
  667. package/dist-es/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  668. package/dist-es/utils/useLayoutEffectOnce.js.map +1 -1
  669. package/dist-es/utils/useLayoutEffectSkipFirst.js.map +1 -1
  670. package/dist-es/utils/useOverflowDetection.js.map +1 -1
  671. package/dist-es/utils/useSlideSelection.js.map +1 -1
  672. package/dist-es/window/ElectronWindow.js.map +1 -1
  673. package/dist-es/window/WindowContext.js.map +1 -1
  674. package/dist-es/window/desktop-utils.js.map +1 -1
  675. package/dist-types/calendar/useCalendar.d.ts +26 -25
  676. package/dist-types/calendar/useCalendarDay.d.ts +1 -5
  677. package/dist-types/calendar/useCalendarSelection.d.ts +14 -11
  678. package/dist-types/date-picker/DatePickerContext.d.ts +0 -6
  679. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +2 -2
  680. package/dist-types/date-picker/DatePickerRangePanel.d.ts +4 -4
  681. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +2 -2
  682. package/dist-types/date-picker/useDatePicker.d.ts +0 -6
  683. package/dist-types/table/TD.d.ts +6 -0
  684. package/dist-types/table/TH.d.ts +6 -0
  685. package/dist-types/table/Table.d.ts +3 -3
  686. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"overflowUtils.js","sources":["../src/responsive/overflowUtils.tsx"],"sourcesContent":["import type {\n ElementRef,\n OverflowItem,\n orientationType,\n} from \"./overflowTypes\";\n\nexport const DropdownPlaceholder = () => null;\nexport const getDropdownPlaceholder = () => <DropdownPlaceholder />;\n\nexport type heightOrWidth = \"width\" | \"height\";\nexport const NO_DATA = {};\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n\nexport const allExceptOverflowIndicator = (sum: number, m: OverflowItem) =>\n sum + (m.isOverflowIndicator ? 0 : m.size);\n\nexport const isCollapsed = (item: OverflowItem): boolean =>\n item.collapsed === true;\nexport const isCollapsing = (item: OverflowItem): boolean =>\n item.collapsing === true;\nexport const isCollapsedOrCollapsing = (item: OverflowItem): boolean =>\n isCollapsed(item) || isCollapsing(item);\nexport const isOverflowed = (item: OverflowItem): boolean =>\n item.overflowed === true;\nexport const notOverflowed = (item: OverflowItem): boolean =>\n !isOverflowed(item);\n\nexport const isCollapsible = (item: OverflowItem) =>\n item.collapsible === \"instant\" || item.collapsible === \"dynamic\";\n\nexport const getIsOverflowed = (managedItems: OverflowItem[]) =>\n managedItems.some(isOverflowed);\n\nexport const measureContainer = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n innerContainerSize: number;\n rootContainerDepth: number;\n innerContainerDepth: number;\n} => {\n const innerElement = ref.current as HTMLElement;\n const container = innerElement.parentElement;\n if (container) {\n const { width: innerWidth, height: innerHeight } =\n innerElement.getBoundingClientRect();\n const { width, height } = container.getBoundingClientRect();\n if (orientation === \"horizontal\") {\n return {\n innerContainerSize: innerWidth,\n rootContainerDepth: height,\n innerContainerDepth: innerHeight,\n };\n }\n return {\n innerContainerSize: innerHeight,\n rootContainerDepth: width,\n innerContainerDepth: innerWidth,\n };\n }\n throw Error(\"measureContainer, innerContainer has no parent element\");\n};\n\nconst isContainerOverflowing = (\n containerDepth: number,\n parentContainerDepth: number,\n innerElement: HTMLElement,\n orientation: orientationType,\n) => {\n const isHorizontal = orientation === \"horizontal\";\n // If true, this is a reliable indication of content wrapping, but the containerDepth\n // is not always correct\n if (containerDepth > parentContainerDepth) {\n return true;\n }\n // ... hence - expensive, but catches those situations where the containerDepth is wrong\n const { bottom, right } = innerElement.getBoundingClientRect();\n const maxPos = Array.from(innerElement.childNodes).reduce<number>(\n (maxVal, child) => {\n const rect = (child as HTMLElement).getBoundingClientRect();\n return Math.max(isHorizontal ? rect.bottom : rect.right, maxVal);\n },\n isHorizontal ? bottom : right,\n );\n return isHorizontal ? maxPos > bottom : maxPos > right;\n};\n\nexport const measureContainerOverflow = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n isOverflowing: boolean;\n innerContainerSize: number;\n rootContainerDepth: number;\n} => {\n const { innerContainerDepth, innerContainerSize, rootContainerDepth } =\n measureContainer(ref, orientation);\n const innerElement = ref.current as HTMLElement;\n const isOverflowing = isContainerOverflowing(\n innerContainerDepth,\n rootContainerDepth,\n innerElement,\n orientation,\n );\n\n return { isOverflowing, innerContainerSize, rootContainerDepth };\n};\n\n/**\n * Compute element size including margin.\n * Exclude margin where this has been applied for alignment, via margin: auto\n * which can be identified by the data-pad-end, data-pad-start attributes.\n **/\nexport function measureElementSize(\n element: HTMLElement,\n dimension: heightOrWidth = \"width\",\n includeAutoMargin = false,\n): number {\n const { [dimension]: size } = element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = Number.parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = Number.parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n // TODO should we consider percentage values ?\n // TODO are we still using flexBasis ?\n if (!Number.isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n\n return marginStart + minWidth + marginEnd;\n}\n\nexport const byDescendingPriority = (m1: OverflowItem, m2: OverflowItem) => {\n let result = m1.priority - m2.priority;\n if (result === 0) {\n result = m1.index - m2.index;\n }\n return result;\n};\n\n// Helper function to try and determine the display label for an overflow item\n// Currently, Tab uses data-text, so this works for any Tab. Need to decide\n// whether this is appropriate for other components.\n// Note: Tab uses data-text for another reason, it is not implemented there just to\n// support this function.\n// There may be an aria attribute we should use instead\n// function getElementText(element: HTMLElement) {\n// if (element.dataset.text) {\n// return element.dataset.text;\n// }\n// const textNode = element.querySelector(\"[data-text]\") as HTMLElement;\n// if (textNode) {\n// return textNode.dataset.text;\n// }\n// return \"\";\n// }\n// const asCollapsibleType = (value?: string): collapsibleType | undefined =>\n// value === \"instant\" || value == \"dynamic\"\n// ? (value as collapsibleType)\n// : undefined;\n\nexport const getOverflowIndicator = (managedItems: OverflowItem[]) =>\n managedItems.find((item) => item.isOverflowIndicator);\n\n// TODO whats the right way to deduce the label. AccessibleText added\n// to eg delete button makes innerText unreliable.\n// const getLabelForElement = (element: HTMLElement) =>\n// element.title || getElementText(element) || element.innerText;\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nexport const popNextItemByPriority = (\n items: OverflowItem[],\n): OverflowItem | null => {\n const maxPriority = Math.max(...items.map(getPriority));\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].isOverflowIndicator && items[i].priority === maxPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const measureOverflowItems = (\n items: OverflowItem[],\n dimension: heightOrWidth,\n): OverflowItem[] => {\n const measurements = items.map(({ id }) => {\n const childElement = document.getElementById(id);\n const size = childElement ? measureElementSize(childElement, dimension) : 0;\n return size;\n });\n\n if (measurements.some((size, i) => size !== items[i].size)) {\n return items.map((item, i) =>\n item.size === measurements[i]\n ? item\n : {\n ...item,\n size: measurements[i],\n },\n );\n }\n return items;\n};\n\nexport const addAll = (sum: number, m: OverflowItem): number => sum + m.size;\n\nexport const getElementForItem = (ref: ElementRef, item: OverflowItem) =>\n ref.current?.querySelector<HTMLElement>(\n `:scope > [data-index='${item.index}']`,\n );\n\ntype dimension = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const getRuntimePadding = (\n el: HTMLElement,\n ...dimensions: dimension[]\n): number[] => {\n const targetStyle = getComputedStyle(el);\n return dimensions.map((dimension) =>\n Number.parseInt(targetStyle.getPropertyValue(`padding-${dimension}`), 10),\n );\n};\n"],"names":["jsx"],"mappings":"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"}
1
+ {"version":3,"file":"overflowUtils.js","sources":["../src/responsive/overflowUtils.tsx"],"sourcesContent":["import type {\n ElementRef,\n OverflowItem,\n orientationType,\n} from \"./overflowTypes\";\n\nexport const DropdownPlaceholder = () => null;\nexport const getDropdownPlaceholder = () => <DropdownPlaceholder />;\n\nexport type heightOrWidth = \"width\" | \"height\";\nexport const NO_DATA = {};\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n\nexport const allExceptOverflowIndicator = (sum: number, m: OverflowItem) =>\n sum + (m.isOverflowIndicator ? 0 : m.size);\n\nexport const isCollapsed = (item: OverflowItem): boolean =>\n item.collapsed === true;\nexport const isCollapsing = (item: OverflowItem): boolean =>\n item.collapsing === true;\nexport const isCollapsedOrCollapsing = (item: OverflowItem): boolean =>\n isCollapsed(item) || isCollapsing(item);\nexport const isOverflowed = (item: OverflowItem): boolean =>\n item.overflowed === true;\nexport const notOverflowed = (item: OverflowItem): boolean =>\n !isOverflowed(item);\n\nexport const isCollapsible = (item: OverflowItem) =>\n item.collapsible === \"instant\" || item.collapsible === \"dynamic\";\n\nexport const getIsOverflowed = (managedItems: OverflowItem[]) =>\n managedItems.some(isOverflowed);\n\nexport const measureContainer = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n innerContainerSize: number;\n rootContainerDepth: number;\n innerContainerDepth: number;\n} => {\n const innerElement = ref.current as HTMLElement;\n const container = innerElement.parentElement;\n if (container) {\n const { width: innerWidth, height: innerHeight } =\n innerElement.getBoundingClientRect();\n const { width, height } = container.getBoundingClientRect();\n if (orientation === \"horizontal\") {\n return {\n innerContainerSize: innerWidth,\n rootContainerDepth: height,\n innerContainerDepth: innerHeight,\n };\n }\n return {\n innerContainerSize: innerHeight,\n rootContainerDepth: width,\n innerContainerDepth: innerWidth,\n };\n }\n throw Error(\"measureContainer, innerContainer has no parent element\");\n};\n\nconst isContainerOverflowing = (\n containerDepth: number,\n parentContainerDepth: number,\n innerElement: HTMLElement,\n orientation: orientationType,\n) => {\n const isHorizontal = orientation === \"horizontal\";\n // If true, this is a reliable indication of content wrapping, but the containerDepth\n // is not always correct\n if (containerDepth > parentContainerDepth) {\n return true;\n }\n // ... hence - expensive, but catches those situations where the containerDepth is wrong\n const { bottom, right } = innerElement.getBoundingClientRect();\n const maxPos = Array.from(innerElement.childNodes).reduce<number>(\n (maxVal, child) => {\n const rect = (child as HTMLElement).getBoundingClientRect();\n return Math.max(isHorizontal ? rect.bottom : rect.right, maxVal);\n },\n isHorizontal ? bottom : right,\n );\n return isHorizontal ? maxPos > bottom : maxPos > right;\n};\n\nexport const measureContainerOverflow = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n isOverflowing: boolean;\n innerContainerSize: number;\n rootContainerDepth: number;\n} => {\n const { innerContainerDepth, innerContainerSize, rootContainerDepth } =\n measureContainer(ref, orientation);\n const innerElement = ref.current as HTMLElement;\n const isOverflowing = isContainerOverflowing(\n innerContainerDepth,\n rootContainerDepth,\n innerElement,\n orientation,\n );\n\n return { isOverflowing, innerContainerSize, rootContainerDepth };\n};\n\n/**\n * Compute element size including margin.\n * Exclude margin where this has been applied for alignment, via margin: auto\n * which can be identified by the data-pad-end, data-pad-start attributes.\n **/\nexport function measureElementSize(\n element: HTMLElement,\n dimension: heightOrWidth = \"width\",\n includeAutoMargin = false,\n): number {\n const { [dimension]: size } = element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = Number.parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = Number.parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n // TODO should we consider percentage values ?\n // TODO are we still using flexBasis ?\n if (!Number.isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n\n return marginStart + minWidth + marginEnd;\n}\n\nexport const byDescendingPriority = (m1: OverflowItem, m2: OverflowItem) => {\n let result = m1.priority - m2.priority;\n if (result === 0) {\n result = m1.index - m2.index;\n }\n return result;\n};\n\n// Helper function to try and determine the display label for an overflow item\n// Currently, Tab uses data-text, so this works for any Tab. Need to decide\n// whether this is appropriate for other components.\n// Note: Tab uses data-text for another reason, it is not implemented there just to\n// support this function.\n// There may be an aria attribute we should use instead\n// function getElementText(element: HTMLElement) {\n// if (element.dataset.text) {\n// return element.dataset.text;\n// }\n// const textNode = element.querySelector(\"[data-text]\") as HTMLElement;\n// if (textNode) {\n// return textNode.dataset.text;\n// }\n// return \"\";\n// }\n// const asCollapsibleType = (value?: string): collapsibleType | undefined =>\n// value === \"instant\" || value == \"dynamic\"\n// ? (value as collapsibleType)\n// : undefined;\n\nexport const getOverflowIndicator = (managedItems: OverflowItem[]) =>\n managedItems.find((item) => item.isOverflowIndicator);\n\n// TODO whats the right way to deduce the label. AccessibleText added\n// to eg delete button makes innerText unreliable.\n// const getLabelForElement = (element: HTMLElement) =>\n// element.title || getElementText(element) || element.innerText;\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nexport const popNextItemByPriority = (\n items: OverflowItem[],\n): OverflowItem | null => {\n const maxPriority = Math.max(...items.map(getPriority));\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].isOverflowIndicator && items[i].priority === maxPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const measureOverflowItems = (\n items: OverflowItem[],\n dimension: heightOrWidth,\n): OverflowItem[] => {\n const measurements = items.map(({ id }) => {\n const childElement = document.getElementById(id);\n const size = childElement ? measureElementSize(childElement, dimension) : 0;\n return size;\n });\n\n if (measurements.some((size, i) => size !== items[i].size)) {\n return items.map((item, i) =>\n item.size === measurements[i]\n ? item\n : {\n ...item,\n size: measurements[i],\n },\n );\n }\n return items;\n};\n\nexport const addAll = (sum: number, m: OverflowItem): number => sum + m.size;\n\nexport const getElementForItem = (ref: ElementRef, item: OverflowItem) =>\n ref.current?.querySelector<HTMLElement>(\n `:scope > [data-index='${item.index}']`,\n );\n\ntype dimension = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const getRuntimePadding = (\n el: HTMLElement,\n ...dimensions: dimension[]\n): number[] => {\n const targetStyle = getComputedStyle(el);\n return dimensions.map((dimension) =>\n Number.parseInt(targetStyle.getPropertyValue(`padding-${dimension}`), 10),\n );\n};\n"],"names":["jsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDynamicCollapse.js","sources":["../src/responsive/useDynamicCollapse.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useCallback, useState } from \"react\";\nimport type {\n DynamicCollapseHookResult,\n ElementRef,\n OverflowHookProps,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n byDescendingPriority,\n getElementForItem,\n getRuntimePadding,\n isCollapsed,\n isCollapsible,\n measureContainerOverflow,\n measureElementSize,\n} from \"./overflowUtils\";\n\nconst UNCOLLAPSED_DYNAMIC_ITEMS =\n '[data-collapsible=\"dynamic\"]:not([data-collapsed=\"true\"]):not([data-collapsing=\"true\"])';\n\nconst hasUncollapsedDynamicItems = (containerRef: ElementRef) =>\n containerRef.current?.querySelector(UNCOLLAPSED_DYNAMIC_ITEMS) !== null;\n\nconst thereAreCollapsibleItemsAndTheyAreAllCollapsed = (\n items: OverflowItem[],\n) => {\n const collapsibleItems = items.filter(isCollapsible);\n return collapsibleItems.length > 0 && collapsibleItems.every(isCollapsed);\n};\n\nconst nextItemToCollapse = (listItems: OverflowItem[]): OverflowItem =>\n listItems.filter(isCollapsible).sort(byDescendingPriority).slice(-1)[0];\n\nexport const useDynamicCollapse = ({\n collectionHook,\n overflowItemsRef: managedItemsRef,\n overflowContainerRef: ref,\n orientation,\n}: OverflowHookProps): DynamicCollapseHookResult => {\n const { dispatch } = collectionHook;\n const [newCollapsingItem, setNewCollapsingItem] =\n useState<OverflowItem | null>(null);\n const restoreCollapsingItem = useCallback(() => {\n dispatch({\n type: \"restore-collapsing-item\",\n });\n }, [dispatch]);\n\n const collapseCollapsingItem = useCallback(\n (item: OverflowItem, target: HTMLElement, minSize: number) => {\n const styleDimension =\n orientation === \"horizontal\" ? \"minWidth\" : \"minHeight\";\n // TODO do we really want to do this here ?\n target.style[styleDimension] = `${minSize}px`;\n const size = measureElementSize(target);\n\n dispatch({\n type: \"collapse-dynamic-item\",\n overflowItem: item,\n collapsedSize: size,\n minSize,\n });\n },\n [dispatch, orientation],\n );\n\n const checkDynamicContent = useCallback(\n (containerHasGrown?: boolean) => {\n const { current: managedItems } = managedItemsRef;\n // The order must matter here\n const collapsingChild = managedItems.find(\n ({ collapsible, collapsing }) =>\n collapsible === \"dynamic\" && collapsing,\n );\n const collapsedChild = managedItems.find(\n ({ collapsible, collapsed }) => collapsible === \"dynamic\" && collapsed,\n );\n\n if (!collapsingChild && !collapsedChild) {\n return;\n }\n if (collapsedChild && !collapsingChild) {\n // TODO do we need a check to see whether we now have enough space to completely uncollapse the item ?\n // We may be able to uncollapse one or more items before the one we set to collapsing\n\n dispatch({\n type: \"uncollapse-dynamic-item\",\n overflowItem: collapsedChild,\n });\n } else if (collapsingChild) {\n if (containerHasGrown && collapsedChild) {\n const collapsingElement = getElementForItem(ref, collapsingChild);\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n // can we avoid measuring ths element on every resize event ?\n if (collapsingElement) {\n const size = measureElementSize(collapsingElement, dimension);\n // collapsingElement.getBoundingClientRect();\n\n // We don't restore a collapsing item unless there is at least one collapsed item\n if (collapsedChild && size === collapsingChild.size) {\n restoreCollapsingItem();\n }\n }\n } else {\n // Note we are going to compare width with minWidth. Margin is ignored\n // use getBoundingClientRect rather than measureNode\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const collapsingElement = getElementForItem(ref, collapsingChild);\n\n if (!collapsingElement) return;\n\n const { [dimension]: measuredSizeOfCollapsingElement } =\n collapsingElement.getBoundingClientRect();\n // minsize should be the size of the last item in the tooltray\n const [padStart, padEnd] = getRuntimePadding(\n collapsingElement,\n \"left\",\n \"right\",\n );\n //TODO we don't really want to measure the last item in the collapsing container\n // we want to measure the width of the item that will be the last to overflow.\n const lastTooltrayItem = collapsingElement.querySelector(\n \".Responsive-inner > :last-child\",\n );\n if (lastTooltrayItem) {\n const { [dimension]: childMinSize } =\n lastTooltrayItem.getBoundingClientRect();\n const minSize = padStart + childMinSize + padEnd;\n if (Math.floor(measuredSizeOfCollapsingElement) <= minSize) {\n collapseCollapsingItem(\n collapsingChild,\n collapsingElement,\n minSize,\n );\n }\n }\n }\n }\n },\n [\n collapseCollapsingItem,\n dispatch,\n managedItemsRef,\n orientation,\n ref,\n restoreCollapsingItem,\n ],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = managedItemsRef;\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n\n const collapsingItem = managedItems.find((item) => item.collapsing);\n\n if (collapsingItem) {\n checkDynamicContent(containerHasGrown);\n } else if (\n containerHasGrown &&\n !willOverflow &&\n thereAreCollapsibleItemsAndTheyAreAllCollapsed(managedItems)\n ) {\n checkDynamicContent(true);\n }\n },\n [checkDynamicContent, managedItemsRef, orientation, ref],\n );\n\n const resetMeasurements = useCallback(() => {\n const { current: managedItems } = managedItemsRef;\n const hasDynamicItems = hasUncollapsedDynamicItems(ref);\n if (hasDynamicItems) {\n const collapsingItem = nextItemToCollapse(managedItems);\n setNewCollapsingItem(collapsingItem);\n\n dispatch({\n type: \"collapsing-item\",\n overflowItem: collapsingItem,\n });\n return true;\n }\n return false;\n }, [dispatch, managedItemsRef, ref]);\n\n useIsomorphicLayoutEffect(() => {\n if (newCollapsingItem) {\n checkDynamicContent(false);\n }\n }, [checkDynamicContent, newCollapsingItem]);\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["isCollapsible","isCollapsed","byDescendingPriority","useState","useCallback","measureElementSize","getElementForItem","getRuntimePadding","measureContainerOverflow","useIsomorphicLayoutEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useDynamicCollapse.js","sources":["../src/responsive/useDynamicCollapse.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useCallback, useState } from \"react\";\nimport type {\n DynamicCollapseHookResult,\n ElementRef,\n OverflowHookProps,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n byDescendingPriority,\n getElementForItem,\n getRuntimePadding,\n isCollapsed,\n isCollapsible,\n measureContainerOverflow,\n measureElementSize,\n} from \"./overflowUtils\";\n\nconst UNCOLLAPSED_DYNAMIC_ITEMS =\n '[data-collapsible=\"dynamic\"]:not([data-collapsed=\"true\"]):not([data-collapsing=\"true\"])';\n\nconst hasUncollapsedDynamicItems = (containerRef: ElementRef) =>\n containerRef.current?.querySelector(UNCOLLAPSED_DYNAMIC_ITEMS) !== null;\n\nconst thereAreCollapsibleItemsAndTheyAreAllCollapsed = (\n items: OverflowItem[],\n) => {\n const collapsibleItems = items.filter(isCollapsible);\n return collapsibleItems.length > 0 && collapsibleItems.every(isCollapsed);\n};\n\nconst nextItemToCollapse = (listItems: OverflowItem[]): OverflowItem =>\n listItems.filter(isCollapsible).sort(byDescendingPriority).slice(-1)[0];\n\nexport const useDynamicCollapse = ({\n collectionHook,\n overflowItemsRef: managedItemsRef,\n overflowContainerRef: ref,\n orientation,\n}: OverflowHookProps): DynamicCollapseHookResult => {\n const { dispatch } = collectionHook;\n const [newCollapsingItem, setNewCollapsingItem] =\n useState<OverflowItem | null>(null);\n const restoreCollapsingItem = useCallback(() => {\n dispatch({\n type: \"restore-collapsing-item\",\n });\n }, [dispatch]);\n\n const collapseCollapsingItem = useCallback(\n (item: OverflowItem, target: HTMLElement, minSize: number) => {\n const styleDimension =\n orientation === \"horizontal\" ? \"minWidth\" : \"minHeight\";\n // TODO do we really want to do this here ?\n target.style[styleDimension] = `${minSize}px`;\n const size = measureElementSize(target);\n\n dispatch({\n type: \"collapse-dynamic-item\",\n overflowItem: item,\n collapsedSize: size,\n minSize,\n });\n },\n [dispatch, orientation],\n );\n\n const checkDynamicContent = useCallback(\n (containerHasGrown?: boolean) => {\n const { current: managedItems } = managedItemsRef;\n // The order must matter here\n const collapsingChild = managedItems.find(\n ({ collapsible, collapsing }) =>\n collapsible === \"dynamic\" && collapsing,\n );\n const collapsedChild = managedItems.find(\n ({ collapsible, collapsed }) => collapsible === \"dynamic\" && collapsed,\n );\n\n if (!collapsingChild && !collapsedChild) {\n return;\n }\n if (collapsedChild && !collapsingChild) {\n // TODO do we need a check to see whether we now have enough space to completely uncollapse the item ?\n // We may be able to uncollapse one or more items before the one we set to collapsing\n\n dispatch({\n type: \"uncollapse-dynamic-item\",\n overflowItem: collapsedChild,\n });\n } else if (collapsingChild) {\n if (containerHasGrown && collapsedChild) {\n const collapsingElement = getElementForItem(ref, collapsingChild);\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n // can we avoid measuring ths element on every resize event ?\n if (collapsingElement) {\n const size = measureElementSize(collapsingElement, dimension);\n // collapsingElement.getBoundingClientRect();\n\n // We don't restore a collapsing item unless there is at least one collapsed item\n if (collapsedChild && size === collapsingChild.size) {\n restoreCollapsingItem();\n }\n }\n } else {\n // Note we are going to compare width with minWidth. Margin is ignored\n // use getBoundingClientRect rather than measureNode\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const collapsingElement = getElementForItem(ref, collapsingChild);\n\n if (!collapsingElement) return;\n\n const { [dimension]: measuredSizeOfCollapsingElement } =\n collapsingElement.getBoundingClientRect();\n // minsize should be the size of the last item in the tooltray\n const [padStart, padEnd] = getRuntimePadding(\n collapsingElement,\n \"left\",\n \"right\",\n );\n //TODO we don't really want to measure the last item in the collapsing container\n // we want to measure the width of the item that will be the last to overflow.\n const lastTooltrayItem = collapsingElement.querySelector(\n \".Responsive-inner > :last-child\",\n );\n if (lastTooltrayItem) {\n const { [dimension]: childMinSize } =\n lastTooltrayItem.getBoundingClientRect();\n const minSize = padStart + childMinSize + padEnd;\n if (Math.floor(measuredSizeOfCollapsingElement) <= minSize) {\n collapseCollapsingItem(\n collapsingChild,\n collapsingElement,\n minSize,\n );\n }\n }\n }\n }\n },\n [\n collapseCollapsingItem,\n dispatch,\n managedItemsRef,\n orientation,\n ref,\n restoreCollapsingItem,\n ],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = managedItemsRef;\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n\n const collapsingItem = managedItems.find((item) => item.collapsing);\n\n if (collapsingItem) {\n checkDynamicContent(containerHasGrown);\n } else if (\n containerHasGrown &&\n !willOverflow &&\n thereAreCollapsibleItemsAndTheyAreAllCollapsed(managedItems)\n ) {\n checkDynamicContent(true);\n }\n },\n [checkDynamicContent, managedItemsRef, orientation, ref],\n );\n\n const resetMeasurements = useCallback(() => {\n const { current: managedItems } = managedItemsRef;\n const hasDynamicItems = hasUncollapsedDynamicItems(ref);\n if (hasDynamicItems) {\n const collapsingItem = nextItemToCollapse(managedItems);\n setNewCollapsingItem(collapsingItem);\n\n dispatch({\n type: \"collapsing-item\",\n overflowItem: collapsingItem,\n });\n return true;\n }\n return false;\n }, [dispatch, managedItemsRef, ref]);\n\n useIsomorphicLayoutEffect(() => {\n if (newCollapsingItem) {\n checkDynamicContent(false);\n }\n }, [checkDynamicContent, newCollapsingItem]);\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["isCollapsible","isCollapsed","byDescendingPriority","useState","useCallback","measureElementSize","getElementForItem","getRuntimePadding","measureContainerOverflow","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInstantCollapse.js","sources":["../src/responsive/useInstantCollapse.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useCallback, useMemo } from \"react\";\nimport type {\n InstantCollapseHookResult,\n OverflowHookProps,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n addAll,\n allExceptOverflowIndicator,\n getElementForItem,\n measureContainerOverflow,\n measureElementSize,\n} from \"./overflowUtils\";\n\ntype MinMaxSize = {\n maxSize: number | null;\n minSize: number | null;\n};\n\nconst newlyCollapsed = (overflowItems: OverflowItem[]) =>\n overflowItems.some(\n (item) =>\n item.collapsible === \"instant\" &&\n item.collapsed &&\n item.fullSize === null,\n );\n\nconst findItemToCollapse = (items: OverflowItem[]) => {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (item.collapsible === \"instant\" && !item.collapsed) {\n // We only ever collapse 1 item at a time. We don'tknow how much space\n //this has saved until it re-renders and we can re-measure\n return item;\n }\n }\n};\n\nconst uncollapseItems = (items: OverflowItem[], containerSize: number) => {\n const visibleContentSize = items.reduce(allExceptOverflowIndicator, 0);\n let diff = containerSize - visibleContentSize;\n\n const collapsed = items\n .filter((item) => item.collapsible === \"instant\" && item.collapsed)\n .sort((i1, i2) => i2.index - i1.index);\n // find the next collapsed item, see how much extra space it would\n // occupy if restored. If we have enough space, restore it.\n const result: OverflowItem[] = [];\n while (collapsed.length) {\n const item = collapsed.pop() as OverflowItem;\n const itemDiff = (item.fullSize ?? 0) - item.size;\n if (diff >= itemDiff) {\n result.push({\n ...item,\n collapsed: false,\n size: item.fullSize as number,\n fullSize: null,\n });\n diff = diff - itemDiff;\n } else {\n break;\n }\n }\n return result;\n};\n\nexport const useInstantCollapse = ({\n collectionHook,\n hasOverflowedItems,\n innerContainerSize = 0,\n overflowContainerRef: ref,\n overflowItemsRef,\n orientation,\n}: OverflowHookProps): InstantCollapseHookResult => {\n const minMaxSizes = useMemo(() => new Map<number, MinMaxSize>(), []);\n const { dispatch } = collectionHook;\n\n const updateCollapse = useCallback(\n (containerSize: number, renderedSize: number | null) => {\n const { current: managedItems } = overflowItemsRef;\n if (renderedSize && containerSize < renderedSize) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n }\n } else {\n const uncollapsedItems = uncollapseItems(managedItems, containerSize);\n if (uncollapsedItems.length) {\n dispatch({\n type: \"update-items\",\n overflowItems: uncollapsedItems,\n });\n }\n }\n },\n [dispatch, overflowItemsRef],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n\n const collapsedItems = managedItems.filter((item) => item.collapsed);\n\n if (willOverflow && !hasOverflowedItems) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n }\n } else if (collapsedItems.length > 0 && containerHasGrown) {\n // Note: it must have been previously overflowing, too\n // check to see if we can reinstate one or more items\n updateCollapse(size, null);\n } else if (willOverflow && hasOverflowedItems) {\n // Note: container must have shrunk\n // still overflowing, possibly more overflowing than before\n const renderedSize = managedItems.reduce(addAll, 0);\n updateCollapse(size, renderedSize);\n }\n },\n [\n dispatch,\n hasOverflowedItems,\n orientation,\n overflowItemsRef,\n ref,\n updateCollapse,\n ],\n );\n\n const resetMeasurements = useCallback(\n (isOverflowing?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n if (isOverflowing) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n return true;\n }\n return false;\n }\n },\n [dispatch, overflowItemsRef],\n );\n\n const setMinSize = useCallback(\n (item: OverflowItem, size: number) => {\n const minMaxSize = minMaxSizes.get(item.index);\n if (minMaxSize) {\n minMaxSize.minSize = size;\n } else {\n minMaxSizes.set(item.index, { maxSize: null, minSize: size });\n }\n },\n [minMaxSizes],\n );\n\n const measureCollapsedItem = useCallback(() => {\n const { current: managedItems } = overflowItemsRef;\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [collapsedItem] = managedItems.filter(\n (item) => item.collapsible === \"instant\" && item.collapsed,\n );\n console.log(`measureCollapsedItem ${collapsedItem.index}`);\n if (collapsedItem.fullSize === null) {\n const target = getElementForItem(ref, collapsedItem);\n if (target) {\n const collapsedSize = measureElementSize(target, dimension);\n const managedItem = findItemToCollapse(managedItems);\n const diff = collapsedItem.size - collapsedSize;\n const renderedSize = managedItems.reduce(addAll, 0) - diff;\n const updates = [];\n if (renderedSize > innerContainerSize && managedItem) {\n console.log(`next item to collapse ${managedItem.index}`);\n updates.push(\n {\n ...collapsedItem,\n fullSize: collapsedItem.size,\n size: collapsedSize,\n },\n {\n ...managedItem,\n collapsed: true,\n },\n );\n } else {\n updates.push({\n ...collapsedItem,\n fullSize: collapsedItem.size,\n size: collapsedSize,\n });\n }\n dispatch({\n type: \"update-items\",\n overflowItems: updates,\n });\n setMinSize(collapsedItem, collapsedSize);\n }\n } else {\n return -1;\n }\n }, [\n dispatch,\n innerContainerSize,\n orientation,\n overflowItemsRef,\n ref,\n setMinSize,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n const { current: managedItems } = overflowItemsRef;\n const newlyCollapsedItem = newlyCollapsed(managedItems);\n if (newlyCollapsedItem) {\n measureCollapsedItem();\n }\n });\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["allExceptOverflowIndicator","useMemo","useCallback","measureContainerOverflow","addAll","getElementForItem","measureElementSize","useIsomorphicLayoutEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useInstantCollapse.js","sources":["../src/responsive/useInstantCollapse.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { useCallback, useMemo } from \"react\";\nimport type {\n InstantCollapseHookResult,\n OverflowHookProps,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n addAll,\n allExceptOverflowIndicator,\n getElementForItem,\n measureContainerOverflow,\n measureElementSize,\n} from \"./overflowUtils\";\n\ntype MinMaxSize = {\n maxSize: number | null;\n minSize: number | null;\n};\n\nconst newlyCollapsed = (overflowItems: OverflowItem[]) =>\n overflowItems.some(\n (item) =>\n item.collapsible === \"instant\" &&\n item.collapsed &&\n item.fullSize === null,\n );\n\nconst findItemToCollapse = (items: OverflowItem[]) => {\n for (let i = items.length - 1; i >= 0; i--) {\n const item = items[i];\n if (item.collapsible === \"instant\" && !item.collapsed) {\n // We only ever collapse 1 item at a time. We don'tknow how much space\n //this has saved until it re-renders and we can re-measure\n return item;\n }\n }\n};\n\nconst uncollapseItems = (items: OverflowItem[], containerSize: number) => {\n const visibleContentSize = items.reduce(allExceptOverflowIndicator, 0);\n let diff = containerSize - visibleContentSize;\n\n const collapsed = items\n .filter((item) => item.collapsible === \"instant\" && item.collapsed)\n .sort((i1, i2) => i2.index - i1.index);\n // find the next collapsed item, see how much extra space it would\n // occupy if restored. If we have enough space, restore it.\n const result: OverflowItem[] = [];\n while (collapsed.length) {\n const item = collapsed.pop() as OverflowItem;\n const itemDiff = (item.fullSize ?? 0) - item.size;\n if (diff >= itemDiff) {\n result.push({\n ...item,\n collapsed: false,\n size: item.fullSize as number,\n fullSize: null,\n });\n diff = diff - itemDiff;\n } else {\n break;\n }\n }\n return result;\n};\n\nexport const useInstantCollapse = ({\n collectionHook,\n hasOverflowedItems,\n innerContainerSize = 0,\n overflowContainerRef: ref,\n overflowItemsRef,\n orientation,\n}: OverflowHookProps): InstantCollapseHookResult => {\n const minMaxSizes = useMemo(() => new Map<number, MinMaxSize>(), []);\n const { dispatch } = collectionHook;\n\n const updateCollapse = useCallback(\n (containerSize: number, renderedSize: number | null) => {\n const { current: managedItems } = overflowItemsRef;\n if (renderedSize && containerSize < renderedSize) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n }\n } else {\n const uncollapsedItems = uncollapseItems(managedItems, containerSize);\n if (uncollapsedItems.length) {\n dispatch({\n type: \"update-items\",\n overflowItems: uncollapsedItems,\n });\n }\n }\n },\n [dispatch, overflowItemsRef],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n\n const collapsedItems = managedItems.filter((item) => item.collapsed);\n\n if (willOverflow && !hasOverflowedItems) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n }\n } else if (collapsedItems.length > 0 && containerHasGrown) {\n // Note: it must have been previously overflowing, too\n // check to see if we can reinstate one or more items\n updateCollapse(size, null);\n } else if (willOverflow && hasOverflowedItems) {\n // Note: container must have shrunk\n // still overflowing, possibly more overflowing than before\n const renderedSize = managedItems.reduce(addAll, 0);\n updateCollapse(size, renderedSize);\n }\n },\n [\n dispatch,\n hasOverflowedItems,\n orientation,\n overflowItemsRef,\n ref,\n updateCollapse,\n ],\n );\n\n const resetMeasurements = useCallback(\n (isOverflowing?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n if (isOverflowing) {\n const overflowItem = findItemToCollapse(managedItems);\n if (overflowItem) {\n dispatch({\n type: \"collapse-instant-item\",\n overflowItem,\n });\n return true;\n }\n return false;\n }\n },\n [dispatch, overflowItemsRef],\n );\n\n const setMinSize = useCallback(\n (item: OverflowItem, size: number) => {\n const minMaxSize = minMaxSizes.get(item.index);\n if (minMaxSize) {\n minMaxSize.minSize = size;\n } else {\n minMaxSizes.set(item.index, { maxSize: null, minSize: size });\n }\n },\n [minMaxSizes],\n );\n\n const measureCollapsedItem = useCallback(() => {\n const { current: managedItems } = overflowItemsRef;\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [collapsedItem] = managedItems.filter(\n (item) => item.collapsible === \"instant\" && item.collapsed,\n );\n console.log(`measureCollapsedItem ${collapsedItem.index}`);\n if (collapsedItem.fullSize === null) {\n const target = getElementForItem(ref, collapsedItem);\n if (target) {\n const collapsedSize = measureElementSize(target, dimension);\n const managedItem = findItemToCollapse(managedItems);\n const diff = collapsedItem.size - collapsedSize;\n const renderedSize = managedItems.reduce(addAll, 0) - diff;\n const updates = [];\n if (renderedSize > innerContainerSize && managedItem) {\n console.log(`next item to collapse ${managedItem.index}`);\n updates.push(\n {\n ...collapsedItem,\n fullSize: collapsedItem.size,\n size: collapsedSize,\n },\n {\n ...managedItem,\n collapsed: true,\n },\n );\n } else {\n updates.push({\n ...collapsedItem,\n fullSize: collapsedItem.size,\n size: collapsedSize,\n });\n }\n dispatch({\n type: \"update-items\",\n overflowItems: updates,\n });\n setMinSize(collapsedItem, collapsedSize);\n }\n } else {\n return -1;\n }\n }, [\n dispatch,\n innerContainerSize,\n orientation,\n overflowItemsRef,\n ref,\n setMinSize,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n const { current: managedItems } = overflowItemsRef;\n const newlyCollapsedItem = newlyCollapsed(managedItems);\n if (newlyCollapsedItem) {\n measureCollapsedItem();\n }\n });\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["allExceptOverflowIndicator","useMemo","useCallback","measureContainerOverflow","addAll","getElementForItem","measureElementSize","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOverflow.js","sources":["../src/responsive/useOverflow.ts"],"sourcesContent":["import { useIdMemo } from \"@salt-ds/core\";\nimport { useCallback, useRef } from \"react\";\nimport { partition } from \"../utils\";\nimport type {\n OverflowHookProps,\n OverflowHookResult,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n addAll,\n allExceptOverflowIndicator,\n getOverflowIndicator,\n isOverflowed,\n measureContainerOverflow,\n notOverflowed,\n popNextItemByPriority,\n} from \"./overflowUtils\";\n\nconst NO_OVERFLOW_INDICATOR = { size: 0 };\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nconst popNextOverflowedItem = (items: OverflowItem[]) => {\n const minPriority = Math.min(...items.map(getPriority));\n for (let i = 0; i < items.length; i++) {\n if (!items[i].isOverflowIndicator && items[i].priority === minPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const useOverflow = ({\n collectionHook: { dispatch },\n id: idProp,\n label = \"Toolbar\",\n overflowItemsRef,\n overflowContainerRef,\n orientation,\n}: OverflowHookProps): OverflowHookResult => {\n // We need to detect when we enter/exit the overflowed state\n const innerContainerSizeRef = useRef(0);\n const overflowIndicatorSize = useRef(0);\n const id = useIdMemo(idProp);\n\n const setContainerMinSize = useCallback(\n (size?: number) => {\n if (overflowContainerRef.current) {\n const isHorizontal = orientation === \"horizontal\";\n if (size === undefined) {\n const dimension = isHorizontal ? \"width\" : \"height\";\n ({ [dimension]: size } =\n overflowContainerRef.current.getBoundingClientRect());\n }\n if (typeof size === \"number\") {\n const styleDimension = isHorizontal ? \"minWidth\" : \"minHeight\";\n overflowContainerRef.current.style[styleDimension] = `${size}px`;\n }\n }\n },\n [orientation, overflowContainerRef],\n );\n\n const getAllOverflowedItems = useCallback(\n (renderedSize: number, availableSpace: number) => {\n const { current: allItems } = overflowItemsRef;\n const overflowedItems: OverflowItem[] = [];\n const items = allItems.slice();\n while (renderedSize > availableSpace) {\n const overflowedItem = popNextItemByPriority(items);\n if (overflowedItem === null) {\n break;\n }\n renderedSize -= overflowedItem.size;\n overflowedItems.push({\n ...overflowedItem,\n overflowed: true,\n });\n }\n return overflowedItems;\n },\n [overflowItemsRef],\n );\n\n const getOverflowedItems = useCallback(\n (visibleContentSize: number, containerSize: number) => {\n const newlyOverflowedItems = [];\n const { current: managedItems } = overflowItemsRef;\n const visibleItems = managedItems.filter(notOverflowed);\n while (visibleContentSize > containerSize) {\n const overflowedItem = popNextItemByPriority(visibleItems);\n if (overflowedItem === null) {\n // unable to overflow, all items are collapsed, this is our minimum width,\n // enforce it ...\n // TODO what if density changes\n // TODO probably not right, now we overflow even collapsed items, min width should be\n // overflow indicator width plus width of any non-overflowable items\n // setContainerMinSize(visibleContentSize);\n break;\n }\n visibleContentSize -= overflowedItem.size;\n newlyOverflowedItems.push({\n ...overflowedItem,\n overflowed: true,\n });\n }\n return newlyOverflowedItems;\n },\n [overflowItemsRef],\n );\n\n const getReinstatedItems = useCallback(\n (containerSize: number): [number, OverflowItem[]] => {\n const reinstatedItems: OverflowItem[] = [];\n const { current: managedItems } = overflowItemsRef;\n\n const [overflowedItems, visibleItems] = partition(\n managedItems,\n isOverflowed,\n );\n const overflowCount = overflowedItems.length;\n // TODO calculate this without using fullWidth if we have OVERFLOW\n // Need a loop here where we first remove OVERFLOW, then potentially remove\n // COLLAPSE too\n // We want to re-introduce overflowed items before we start to restore collapsed items\n // When we are dealing with overflowed items, we just use the current width of collapsed items.\n let visibleContentSize = visibleItems.reduce(\n allExceptOverflowIndicator,\n 0,\n );\n let diff = containerSize - visibleContentSize;\n const { size: overflowSize = 0 } =\n getOverflowIndicator(managedItems) || NO_OVERFLOW_INDICATOR;\n const totalOverflowedSize = overflowedItems.reduce(\n (sum, item) => sum + item.size,\n 0,\n );\n // It is important to make this check first, because the overflow indicator may have larger size than\n // individual overflowed item(s).\n if (totalOverflowedSize <= diff) {\n reinstatedItems.push(\n ...overflowedItems.map((item) => ({ ...item, overflowed: false })),\n );\n } else {\n while (overflowedItems.length > 0) {\n const nextItem = popNextOverflowedItem(overflowedItems);\n if (nextItem && diff >= nextItem.size) {\n // we have enough free space to reinstate this overflowed item\n // we can only ignore the width of overflow Indicator if either there is only one remaining\n // overflow item (so overflowIndicator will be removed) or diff is big enough to accommodate\n // the overflow Ind.\n if (\n overflowedItems.length === 0 ||\n diff >= nextItem.size + overflowSize\n ) {\n visibleContentSize += nextItem.size;\n diff = diff - nextItem.size;\n reinstatedItems.push({\n ...nextItem,\n overflowed: false,\n });\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n return [overflowCount, reinstatedItems];\n },\n [overflowItemsRef],\n );\n\n const resetMeasurements = useCallback(\n (isOverflowing: boolean, innerContainerSize: number) => {\n if (isOverflowing) {\n const { current: managedItems } = overflowItemsRef;\n const renderedSize = managedItems.reduce(allExceptOverflowIndicator, 0);\n const overflowIndicator = managedItems.find(\n (i) => i.isOverflowIndicator,\n );\n if (\n overflowIndicator &&\n overflowIndicator.size !== overflowIndicatorSize.current\n ) {\n overflowIndicatorSize.current = overflowIndicator.size;\n setContainerMinSize(overflowIndicator.size);\n }\n const existingOverflow = managedItems.filter(isOverflowed);\n const updates = getAllOverflowedItems(\n renderedSize,\n innerContainerSize - overflowIndicatorSize.current,\n );\n\n for (const item of existingOverflow) {\n if (!updates.some((i) => i.index === item.index)) {\n updates.push({\n ...item,\n overflowed: false,\n });\n }\n }\n\n const overflowAdded = !existingOverflow.length && updates.length;\n\n if (updates.length > 0) {\n if (overflowAdded) {\n dispatch({\n type: \"update-items-add-overflow-indicator\",\n overflowItems: updates,\n overflowItem: {\n fullSize: null,\n id: `${id}-overflow-indicator`,\n index: managedItems.length,\n isOverflowIndicator: true,\n label: \"Overflow Menu\",\n priority: 1,\n source: {},\n } as OverflowItem<\"source\">,\n });\n } else {\n dispatch({\n type: \"update-items\",\n overflowItems: updates,\n });\n }\n return true;\n }\n return false;\n }\n },\n [\n dispatch,\n getAllOverflowedItems,\n id,\n overflowItemsRef,\n setContainerMinSize,\n ],\n );\n\n const updateOverflow = useCallback(\n (containerSize: number, renderedSize: number) => {\n if (containerSize < renderedSize) {\n const overflowItems = getOverflowedItems(renderedSize, containerSize);\n if (overflowItems.length) {\n dispatch({\n type: \"update-items\",\n overflowItems,\n });\n }\n }\n },\n [dispatch, getOverflowedItems],\n );\n\n const removeOverflow = useCallback(\n (containerSize: number) => {\n const [overflowCount, reinstated] = getReinstatedItems(containerSize);\n if (reinstated.length) {\n if (overflowCount === reinstated.length) {\n dispatch({\n type: \"update-items-remove-overflow-indicator\",\n overflowItems: reinstated,\n });\n } else {\n dispatch({\n type: \"update-items\",\n overflowItems: reinstated,\n });\n }\n }\n },\n [dispatch, getReinstatedItems],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n const wasOverflowing = managedItems.some(\n (item) => item.isOverflowIndicator,\n );\n const { isOverflowing } = measureContainerOverflow(\n overflowContainerRef,\n orientation,\n );\n\n innerContainerSizeRef.current = size;\n\n if (!wasOverflowing && isOverflowing) {\n // entering overflow\n // TODO if client is not using an overflow indicator, there is nothing to do here,\n // just let nature take its course. How do we know this ?\n // This is when we need to add width to measurements we are tracking\n resetMeasurements(true, size);\n } else if (wasOverflowing && containerHasGrown) {\n // check to see if we can reinstate one or more items, possibly all\n removeOverflow(size);\n } else if (wasOverflowing && isOverflowing) {\n // Note: container must have shrunk\n // still overflowing, possibly more overflowing than before\n const renderedSize = managedItems\n .filter(notOverflowed)\n .reduce(addAll, 0);\n updateOverflow(size, renderedSize);\n }\n },\n [\n orientation,\n overflowContainerRef,\n overflowItemsRef,\n removeOverflow,\n resetMeasurements,\n updateOverflow,\n ],\n );\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["useRef","useIdMemo","useCallback","popNextItemByPriority","notOverflowed","partition","isOverflowed","allExceptOverflowIndicator","getOverflowIndicator","measureContainerOverflow","addAll"],"mappings":";;;;;;;AAkBA,MAAM,qBAAA,GAAwB,EAAE,IAAA,EAAM,CAAE,EAAA;AAExC,MAAM,WAAA,GAAc,CAAC,IAAA,KAAuB,IAAK,CAAA,QAAA;AAEjD,MAAM,qBAAA,GAAwB,CAAC,KAA0B,KAAA;AACvD,EAAA,MAAM,cAAc,IAAK,CAAA,GAAA,CAAI,GAAG,KAAM,CAAA,GAAA,CAAI,WAAW,CAAC,CAAA;AACtD,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAI,IAAA,CAAC,MAAM,CAAC,CAAA,CAAE,uBAAuB,KAAM,CAAA,CAAC,CAAE,CAAA,QAAA,KAAa,WAAa,EAAA;AACtE,MAAA,OAAO,KAAM,CAAA,MAAA,CAAO,CAAG,EAAA,CAAC,EAAE,CAAC,CAAA;AAAA;AAC7B;AAEF,EAAO,OAAA,IAAA;AACT,CAAA;AAEO,MAAM,cAAc,CAAC;AAAA,EAC1B,cAAA,EAAgB,EAAE,QAAS,EAAA;AAAA,EAC3B,EAAI,EAAA,MAAA;AAAA,EACJ,KAAQ,GAAA,SAAA;AAAA,EACR,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAA6C,KAAA;AAE3C,EAAM,MAAA,qBAAA,GAAwBA,aAAO,CAAC,CAAA;AACtC,EAAM,MAAA,qBAAA,GAAwBA,aAAO,CAAC,CAAA;AACtC,EAAM,MAAA,EAAA,GAAKC,eAAU,MAAM,CAAA;AAE3B,EAAA,MAAM,mBAAsB,GAAAC,iBAAA;AAAA,IAC1B,CAAC,IAAkB,KAAA;AACjB,MAAA,IAAI,qBAAqB,OAAS,EAAA;AAChC,QAAA,MAAM,eAAe,WAAgB,KAAA,YAAA;AACrC,QAAA,IAAI,SAAS,MAAW,EAAA;AACtB,UAAM,MAAA,SAAA,GAAY,eAAe,OAAU,GAAA,QAAA;AAC3C,UAAC,CAAA,EAAE,CAAC,SAAS,GAAG,MACd,GAAA,oBAAA,CAAqB,QAAQ,qBAAsB,EAAA;AAAA;AAEvD,QAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,UAAM,MAAA,cAAA,GAAiB,eAAe,UAAa,GAAA,WAAA;AACnD,UAAA,oBAAA,CAAqB,OAAQ,CAAA,KAAA,CAAM,cAAc,CAAA,GAAI,GAAG,IAAI,CAAA,EAAA,CAAA;AAAA;AAC9D;AACF,KACF;AAAA,IACA,CAAC,aAAa,oBAAoB;AAAA,GACpC;AAEA,EAAA,MAAM,qBAAwB,GAAAA,iBAAA;AAAA,IAC5B,CAAC,cAAsB,cAA2B,KAAA;AAChD,MAAM,MAAA,EAAE,OAAS,EAAA,QAAA,EAAa,GAAA,gBAAA;AAC9B,MAAA,MAAM,kBAAkC,EAAC;AACzC,MAAM,MAAA,KAAA,GAAQ,SAAS,KAAM,EAAA;AAC7B,MAAA,OAAO,eAAe,cAAgB,EAAA;AACpC,QAAM,MAAA,cAAA,GAAiBC,oCAAsB,KAAK,CAAA;AAClD,QAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,UAAA;AAAA;AAEF,QAAA,YAAA,IAAgB,cAAe,CAAA,IAAA;AAC/B,QAAA,eAAA,CAAgB,IAAK,CAAA;AAAA,UACnB,GAAG,cAAA;AAAA,UACH,UAAY,EAAA;AAAA,SACb,CAAA;AAAA;AAEH,MAAO,OAAA,eAAA;AAAA,KACT;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,kBAAqB,GAAAD,iBAAA;AAAA,IACzB,CAAC,oBAA4B,aAA0B,KAAA;AACrD,MAAA,MAAM,uBAAuB,EAAC;AAC9B,MAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,gBAAA;AAClC,MAAM,MAAA,YAAA,GAAe,YAAa,CAAA,MAAA,CAAOE,2BAAa,CAAA;AACtD,MAAA,OAAO,qBAAqB,aAAe,EAAA;AACzC,QAAM,MAAA,cAAA,GAAiBD,oCAAsB,YAAY,CAAA;AACzD,QAAA,IAAI,mBAAmB,IAAM,EAAA;AAO3B,UAAA;AAAA;AAEF,QAAA,kBAAA,IAAsB,cAAe,CAAA,IAAA;AACrC,QAAA,oBAAA,CAAqB,IAAK,CAAA;AAAA,UACxB,GAAG,cAAA;AAAA,UACH,UAAY,EAAA;AAAA,SACb,CAAA;AAAA;AAEH,MAAO,OAAA,oBAAA;AAAA,KACT;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,kBAAqB,GAAAD,iBAAA;AAAA,IACzB,CAAC,aAAoD,KAAA;AACnD,MAAA,MAAM,kBAAkC,EAAC;AACzC,MAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,gBAAA;AAElC,MAAM,MAAA,CAAC,eAAiB,EAAA,YAAY,CAAI,GAAAG,mBAAA;AAAA,QACtC,YAAA;AAAA,QACAC;AAAA,OACF;AACA,MAAA,MAAM,gBAAgB,eAAgB,CAAA,MAAA;AAMtC,MAAA,IAAI,qBAAqB,YAAa,CAAA,MAAA;AAAA,QACpCC,wCAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,OAAO,aAAgB,GAAA,kBAAA;AAC3B,MAAA,MAAM,EAAE,IAAM,EAAA,YAAA,GAAe,GAC3B,GAAAC,kCAAA,CAAqB,YAAY,CAAK,IAAA,qBAAA;AACxC,MAAA,MAAM,sBAAsB,eAAgB,CAAA,MAAA;AAAA,QAC1C,CAAC,GAAA,EAAK,IAAS,KAAA,GAAA,GAAM,IAAK,CAAA,IAAA;AAAA,QAC1B;AAAA,OACF;AAGA,MAAA,IAAI,uBAAuB,IAAM,EAAA;AAC/B,QAAgB,eAAA,CAAA,IAAA;AAAA,UACd,GAAG,eAAgB,CAAA,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,UAAY,EAAA,KAAA,EAAQ,CAAA;AAAA,SACnE;AAAA,OACK,MAAA;AACL,QAAO,OAAA,eAAA,CAAgB,SAAS,CAAG,EAAA;AACjC,UAAM,MAAA,QAAA,GAAW,sBAAsB,eAAe,CAAA;AACtD,UAAI,IAAA,QAAA,IAAY,IAAQ,IAAA,QAAA,CAAS,IAAM,EAAA;AAKrC,YAAA,IACE,gBAAgB,MAAW,KAAA,CAAA,IAC3B,IAAQ,IAAA,QAAA,CAAS,OAAO,YACxB,EAAA;AACA,cAAA,kBAAA,IAAsB,QAAS,CAAA,IAAA;AAC/B,cAAA,IAAA,GAAO,OAAO,QAAS,CAAA,IAAA;AACvB,cAAA,eAAA,CAAgB,IAAK,CAAA;AAAA,gBACnB,GAAG,QAAA;AAAA,gBACH,UAAY,EAAA;AAAA,eACb,CAAA;AAAA,aACI,MAAA;AACL,cAAA;AAAA;AACF,WACK,MAAA;AACL,YAAA;AAAA;AACF;AACF;AAEF,MAAO,OAAA,CAAC,eAAe,eAAe,CAAA;AAAA,KACxC;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,iBAAoB,GAAAN,iBAAA;AAAA,IACxB,CAAC,eAAwB,kBAA+B,KAAA;AACtD,MAAA,IAAI,aAAe,EAAA;AACjB,QAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,gBAAA;AAClC,QAAA,MAAM,YAAe,GAAA,YAAA,CAAa,MAAO,CAAAK,wCAAA,EAA4B,CAAC,CAAA;AACtE,QAAA,MAAM,oBAAoB,YAAa,CAAA,IAAA;AAAA,UACrC,CAAC,MAAM,CAAE,CAAA;AAAA,SACX;AACA,QAAA,IACE,iBACA,IAAA,iBAAA,CAAkB,IAAS,KAAA,qBAAA,CAAsB,OACjD,EAAA;AACA,UAAA,qBAAA,CAAsB,UAAU,iBAAkB,CAAA,IAAA;AAClD,UAAA,mBAAA,CAAoB,kBAAkB,IAAI,CAAA;AAAA;AAE5C,QAAM,MAAA,gBAAA,GAAmB,YAAa,CAAA,MAAA,CAAOD,0BAAY,CAAA;AACzD,QAAA,MAAM,OAAU,GAAA,qBAAA;AAAA,UACd,YAAA;AAAA,UACA,qBAAqB,qBAAsB,CAAA;AAAA,SAC7C;AAEA,QAAA,KAAA,MAAW,QAAQ,gBAAkB,EAAA;AACnC,UAAI,IAAA,CAAC,QAAQ,IAAK,CAAA,CAAC,MAAM,CAAE,CAAA,KAAA,KAAU,IAAK,CAAA,KAAK,CAAG,EAAA;AAChD,YAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,cACX,GAAG,IAAA;AAAA,cACH,UAAY,EAAA;AAAA,aACb,CAAA;AAAA;AACH;AAGF,QAAA,MAAM,aAAgB,GAAA,CAAC,gBAAiB,CAAA,MAAA,IAAU,OAAQ,CAAA,MAAA;AAE1D,QAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,UAAA,IAAI,aAAe,EAAA;AACjB,YAAS,QAAA,CAAA;AAAA,cACP,IAAM,EAAA,qCAAA;AAAA,cACN,aAAe,EAAA,OAAA;AAAA,cACf,YAAc,EAAA;AAAA,gBACZ,QAAU,EAAA,IAAA;AAAA,gBACV,EAAA,EAAI,GAAG,EAAE,CAAA,mBAAA,CAAA;AAAA,gBACT,OAAO,YAAa,CAAA,MAAA;AAAA,gBACpB,mBAAqB,EAAA,IAAA;AAAA,gBACrB,KAAO,EAAA,eAAA;AAAA,gBACP,QAAU,EAAA,CAAA;AAAA,gBACV,QAAQ;AAAC;AACX,aACD,CAAA;AAAA,WACI,MAAA;AACL,YAAS,QAAA,CAAA;AAAA,cACP,IAAM,EAAA,cAAA;AAAA,cACN,aAAe,EAAA;AAAA,aAChB,CAAA;AAAA;AAEH,UAAO,OAAA,IAAA;AAAA;AAET,QAAO,OAAA,KAAA;AAAA;AACT,KACF;AAAA,IACA;AAAA,MACE,QAAA;AAAA,MACA,qBAAA;AAAA,MACA,EAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAM,cAAiB,GAAAJ,iBAAA;AAAA,IACrB,CAAC,eAAuB,YAAyB,KAAA;AAC/C,MAAA,IAAI,gBAAgB,YAAc,EAAA;AAChC,QAAM,MAAA,aAAA,GAAgB,kBAAmB,CAAA,YAAA,EAAc,aAAa,CAAA;AACpE,QAAA,IAAI,cAAc,MAAQ,EAAA;AACxB,UAAS,QAAA,CAAA;AAAA,YACP,IAAM,EAAA,cAAA;AAAA,YACN;AAAA,WACD,CAAA;AAAA;AACH;AACF,KACF;AAAA,IACA,CAAC,UAAU,kBAAkB;AAAA,GAC/B;AAEA,EAAA,MAAM,cAAiB,GAAAA,iBAAA;AAAA,IACrB,CAAC,aAA0B,KAAA;AACzB,MAAA,MAAM,CAAC,aAAA,EAAe,UAAU,CAAA,GAAI,mBAAmB,aAAa,CAAA;AACpE,MAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,QAAI,IAAA,aAAA,KAAkB,WAAW,MAAQ,EAAA;AACvC,UAAS,QAAA,CAAA;AAAA,YACP,IAAM,EAAA,wCAAA;AAAA,YACN,aAAe,EAAA;AAAA,WAChB,CAAA;AAAA,SACI,MAAA;AACL,UAAS,QAAA,CAAA;AAAA,YACP,IAAM,EAAA,cAAA;AAAA,YACN,aAAe,EAAA;AAAA,WAChB,CAAA;AAAA;AACH;AACF,KACF;AAAA,IACA,CAAC,UAAU,kBAAkB;AAAA,GAC/B;AAEA,EAAA,MAAM,YAAe,GAAAA,iBAAA;AAAA,IACnB,CAAC,MAAc,iBAAgC,KAAA;AAC7C,MAAM,MAAA,EAAE,OAAS,EAAA,YAAA,EAAiB,GAAA,gBAAA;AAClC,MAAA,MAAM,iBAAiB,YAAa,CAAA,IAAA;AAAA,QAClC,CAAC,SAAS,IAAK,CAAA;AAAA,OACjB;AACA,MAAM,MAAA,EAAE,eAAkB,GAAAO,sCAAA;AAAA,QACxB,oBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,qBAAA,CAAsB,OAAU,GAAA,IAAA;AAEhC,MAAI,IAAA,CAAC,kBAAkB,aAAe,EAAA;AAKpC,QAAA,iBAAA,CAAkB,MAAM,IAAI,CAAA;AAAA,OAC9B,MAAA,IAAW,kBAAkB,iBAAmB,EAAA;AAE9C,QAAA,cAAA,CAAe,IAAI,CAAA;AAAA,OACrB,MAAA,IAAW,kBAAkB,aAAe,EAAA;AAG1C,QAAA,MAAM,eAAe,YAClB,CAAA,MAAA,CAAOL,2BAAa,CACpB,CAAA,MAAA,CAAOM,sBAAQ,CAAC,CAAA;AACnB,QAAA,cAAA,CAAe,MAAM,YAAY,CAAA;AAAA;AACnC,KACF;AAAA,IACA;AAAA,MACE,WAAA;AAAA,MACA,oBAAA;AAAA,MACA,gBAAA;AAAA,MACA,cAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAO,OAAA;AAAA,IACL,QAAU,EAAA,YAAA;AAAA,IACV;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useOverflow.js","sources":["../src/responsive/useOverflow.ts"],"sourcesContent":["import { useIdMemo } from \"@salt-ds/core\";\nimport { useCallback, useRef } from \"react\";\nimport { partition } from \"../utils\";\nimport type {\n OverflowHookProps,\n OverflowHookResult,\n OverflowItem,\n} from \"./overflowTypes\";\nimport {\n addAll,\n allExceptOverflowIndicator,\n getOverflowIndicator,\n isOverflowed,\n measureContainerOverflow,\n notOverflowed,\n popNextItemByPriority,\n} from \"./overflowUtils\";\n\nconst NO_OVERFLOW_INDICATOR = { size: 0 };\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nconst popNextOverflowedItem = (items: OverflowItem[]) => {\n const minPriority = Math.min(...items.map(getPriority));\n for (let i = 0; i < items.length; i++) {\n if (!items[i].isOverflowIndicator && items[i].priority === minPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const useOverflow = ({\n collectionHook: { dispatch },\n id: idProp,\n label = \"Toolbar\",\n overflowItemsRef,\n overflowContainerRef,\n orientation,\n}: OverflowHookProps): OverflowHookResult => {\n // We need to detect when we enter/exit the overflowed state\n const innerContainerSizeRef = useRef(0);\n const overflowIndicatorSize = useRef(0);\n const id = useIdMemo(idProp);\n\n const setContainerMinSize = useCallback(\n (size?: number) => {\n if (overflowContainerRef.current) {\n const isHorizontal = orientation === \"horizontal\";\n if (size === undefined) {\n const dimension = isHorizontal ? \"width\" : \"height\";\n ({ [dimension]: size } =\n overflowContainerRef.current.getBoundingClientRect());\n }\n if (typeof size === \"number\") {\n const styleDimension = isHorizontal ? \"minWidth\" : \"minHeight\";\n overflowContainerRef.current.style[styleDimension] = `${size}px`;\n }\n }\n },\n [orientation, overflowContainerRef],\n );\n\n const getAllOverflowedItems = useCallback(\n (renderedSize: number, availableSpace: number) => {\n const { current: allItems } = overflowItemsRef;\n const overflowedItems: OverflowItem[] = [];\n const items = allItems.slice();\n while (renderedSize > availableSpace) {\n const overflowedItem = popNextItemByPriority(items);\n if (overflowedItem === null) {\n break;\n }\n renderedSize -= overflowedItem.size;\n overflowedItems.push({\n ...overflowedItem,\n overflowed: true,\n });\n }\n return overflowedItems;\n },\n [overflowItemsRef],\n );\n\n const getOverflowedItems = useCallback(\n (visibleContentSize: number, containerSize: number) => {\n const newlyOverflowedItems = [];\n const { current: managedItems } = overflowItemsRef;\n const visibleItems = managedItems.filter(notOverflowed);\n while (visibleContentSize > containerSize) {\n const overflowedItem = popNextItemByPriority(visibleItems);\n if (overflowedItem === null) {\n // unable to overflow, all items are collapsed, this is our minimum width,\n // enforce it ...\n // TODO what if density changes\n // TODO probably not right, now we overflow even collapsed items, min width should be\n // overflow indicator width plus width of any non-overflowable items\n // setContainerMinSize(visibleContentSize);\n break;\n }\n visibleContentSize -= overflowedItem.size;\n newlyOverflowedItems.push({\n ...overflowedItem,\n overflowed: true,\n });\n }\n return newlyOverflowedItems;\n },\n [overflowItemsRef],\n );\n\n const getReinstatedItems = useCallback(\n (containerSize: number): [number, OverflowItem[]] => {\n const reinstatedItems: OverflowItem[] = [];\n const { current: managedItems } = overflowItemsRef;\n\n const [overflowedItems, visibleItems] = partition(\n managedItems,\n isOverflowed,\n );\n const overflowCount = overflowedItems.length;\n // TODO calculate this without using fullWidth if we have OVERFLOW\n // Need a loop here where we first remove OVERFLOW, then potentially remove\n // COLLAPSE too\n // We want to re-introduce overflowed items before we start to restore collapsed items\n // When we are dealing with overflowed items, we just use the current width of collapsed items.\n let visibleContentSize = visibleItems.reduce(\n allExceptOverflowIndicator,\n 0,\n );\n let diff = containerSize - visibleContentSize;\n const { size: overflowSize = 0 } =\n getOverflowIndicator(managedItems) || NO_OVERFLOW_INDICATOR;\n const totalOverflowedSize = overflowedItems.reduce(\n (sum, item) => sum + item.size,\n 0,\n );\n // It is important to make this check first, because the overflow indicator may have larger size than\n // individual overflowed item(s).\n if (totalOverflowedSize <= diff) {\n reinstatedItems.push(\n ...overflowedItems.map((item) => ({ ...item, overflowed: false })),\n );\n } else {\n while (overflowedItems.length > 0) {\n const nextItem = popNextOverflowedItem(overflowedItems);\n if (nextItem && diff >= nextItem.size) {\n // we have enough free space to reinstate this overflowed item\n // we can only ignore the width of overflow Indicator if either there is only one remaining\n // overflow item (so overflowIndicator will be removed) or diff is big enough to accommodate\n // the overflow Ind.\n if (\n overflowedItems.length === 0 ||\n diff >= nextItem.size + overflowSize\n ) {\n visibleContentSize += nextItem.size;\n diff = diff - nextItem.size;\n reinstatedItems.push({\n ...nextItem,\n overflowed: false,\n });\n } else {\n break;\n }\n } else {\n break;\n }\n }\n }\n return [overflowCount, reinstatedItems];\n },\n [overflowItemsRef],\n );\n\n const resetMeasurements = useCallback(\n (isOverflowing: boolean, innerContainerSize: number) => {\n if (isOverflowing) {\n const { current: managedItems } = overflowItemsRef;\n const renderedSize = managedItems.reduce(allExceptOverflowIndicator, 0);\n const overflowIndicator = managedItems.find(\n (i) => i.isOverflowIndicator,\n );\n if (\n overflowIndicator &&\n overflowIndicator.size !== overflowIndicatorSize.current\n ) {\n overflowIndicatorSize.current = overflowIndicator.size;\n setContainerMinSize(overflowIndicator.size);\n }\n const existingOverflow = managedItems.filter(isOverflowed);\n const updates = getAllOverflowedItems(\n renderedSize,\n innerContainerSize - overflowIndicatorSize.current,\n );\n\n for (const item of existingOverflow) {\n if (!updates.some((i) => i.index === item.index)) {\n updates.push({\n ...item,\n overflowed: false,\n });\n }\n }\n\n const overflowAdded = !existingOverflow.length && updates.length;\n\n if (updates.length > 0) {\n if (overflowAdded) {\n dispatch({\n type: \"update-items-add-overflow-indicator\",\n overflowItems: updates,\n overflowItem: {\n fullSize: null,\n id: `${id}-overflow-indicator`,\n index: managedItems.length,\n isOverflowIndicator: true,\n label: \"Overflow Menu\",\n priority: 1,\n source: {},\n } as OverflowItem<\"source\">,\n });\n } else {\n dispatch({\n type: \"update-items\",\n overflowItems: updates,\n });\n }\n return true;\n }\n return false;\n }\n },\n [\n dispatch,\n getAllOverflowedItems,\n id,\n overflowItemsRef,\n setContainerMinSize,\n ],\n );\n\n const updateOverflow = useCallback(\n (containerSize: number, renderedSize: number) => {\n if (containerSize < renderedSize) {\n const overflowItems = getOverflowedItems(renderedSize, containerSize);\n if (overflowItems.length) {\n dispatch({\n type: \"update-items\",\n overflowItems,\n });\n }\n }\n },\n [dispatch, getOverflowedItems],\n );\n\n const removeOverflow = useCallback(\n (containerSize: number) => {\n const [overflowCount, reinstated] = getReinstatedItems(containerSize);\n if (reinstated.length) {\n if (overflowCount === reinstated.length) {\n dispatch({\n type: \"update-items-remove-overflow-indicator\",\n overflowItems: reinstated,\n });\n } else {\n dispatch({\n type: \"update-items\",\n overflowItems: reinstated,\n });\n }\n }\n },\n [dispatch, getReinstatedItems],\n );\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { current: managedItems } = overflowItemsRef;\n const wasOverflowing = managedItems.some(\n (item) => item.isOverflowIndicator,\n );\n const { isOverflowing } = measureContainerOverflow(\n overflowContainerRef,\n orientation,\n );\n\n innerContainerSizeRef.current = size;\n\n if (!wasOverflowing && isOverflowing) {\n // entering overflow\n // TODO if client is not using an overflow indicator, there is nothing to do here,\n // just let nature take its course. How do we know this ?\n // This is when we need to add width to measurements we are tracking\n resetMeasurements(true, size);\n } else if (wasOverflowing && containerHasGrown) {\n // check to see if we can reinstate one or more items, possibly all\n removeOverflow(size);\n } else if (wasOverflowing && isOverflowing) {\n // Note: container must have shrunk\n // still overflowing, possibly more overflowing than before\n const renderedSize = managedItems\n .filter(notOverflowed)\n .reduce(addAll, 0);\n updateOverflow(size, renderedSize);\n }\n },\n [\n orientation,\n overflowContainerRef,\n overflowItemsRef,\n removeOverflow,\n resetMeasurements,\n updateOverflow,\n ],\n );\n\n return {\n onResize: handleResize,\n resetMeasurements,\n };\n};\n"],"names":["useRef","useIdMemo","useCallback","popNextItemByPriority","notOverflowed","partition","isOverflowed","allExceptOverflowIndicator","getOverflowIndicator","measureContainerOverflow","addAll"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOverflowCollectionItems.js","sources":["../src/responsive/useOverflowCollectionItems.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n Children,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useReducer,\n useRef,\n} from \"react\";\n\nimport {\n type OverflowAction,\n type OverflowReducer,\n type OverflowReducerInitialisationProps,\n overflowReducer,\n reducerInitialiser,\n} from \"./OverflowReducer\";\nimport type {\n OverflowCollectionHookProps,\n OverflowCollectionHookResult,\n OverflowCollectionOptions,\n OverflowItem,\n OverflowSource,\n} from \"./overflowTypes\";\nimport { measureOverflowItems } from \"./overflowUtils\";\n\nconst defaultOptions: OverflowCollectionOptions = {};\n\ntype WithLabel = { label?: string };\n\nconst defaultChildIdentity = (children: ReactNode) => {\n const childLabels: string[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child)) {\n childLabels.push((child as ReactElement<WithLabel>).props.label ?? \"\");\n }\n });\n return `${childLabels.length}:${childLabels.join(\":\")}`;\n};\n\nconst defaultSourceIdentity = (source: WithLabel[]): string => {\n const labels = source.map(({ label }) => label).join(\":\");\n return `${source.length}:${labels}`;\n};\n// We need to track structural changes to controlled source or child elements.\n// Simple identity won't work as child elements will be different on every render.\n// structural changes are addition or removal of items, reordering items.\n// Question, what if user changes prop in declarative TabPanel ?\nconst getItemsIdentity = (\n defaultSource?: OverflowSource[],\n source?: OverflowSource[],\n children?: ReactNode,\n): string => {\n let identity: string;\n if (Array.isArray(defaultSource)) {\n identity = defaultSourceIdentity(defaultSource);\n } else if (Array.isArray(source)) {\n identity = defaultSourceIdentity(source);\n } else {\n identity = defaultChildIdentity(children);\n }\n return identity;\n};\n\ntype OverflowCollectionHook = (\n props: OverflowCollectionHookProps,\n) => OverflowCollectionHookResult;\n\nexport const useOverflowCollectionItems: OverflowCollectionHook = ({\n children,\n defaultSource,\n id: idRoot,\n injectedItems = [],\n options = defaultOptions,\n orientation,\n label: _label = \"\",\n source,\n}) => {\n const dataRef = useRef<OverflowItem[]>([]);\n const versionRef = useRef(0);\n const measureTimeout = useRef<number | null>(null);\n const previousIdentityRef = useRef(\"\");\n const fontsLoaded = useRef(false);\n const identity = getItemsIdentity(defaultSource, source, children);\n const isControlled = Array.isArray(source) || Children.count(children) > 0;\n if (isControlled && defaultSource !== undefined) {\n throw Error(\n \"useOverflowCollectionItems: defaultSource prop should not be used in combination with either source prop or children \",\n );\n }\n\n const [data, dispatch] = useReducer<\n OverflowReducer,\n OverflowReducerInitialisationProps\n >(\n overflowReducer,\n {\n children,\n source: source || defaultSource,\n injectedItems,\n idRoot,\n options,\n },\n reducerInitialiser,\n );\n\n dataRef.current = data;\n\n const measureManagedItems = useCallback(\n (defer = false) => {\n if (measureTimeout.current) {\n window.clearTimeout(measureTimeout.current);\n measureTimeout.current = null;\n }\n if (defer) {\n measureTimeout.current = window.setTimeout(measureManagedItems, 30);\n } else {\n // If fonts have not yet loaded, measurements WILL be incorrect\n if (fontsLoaded.current) {\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const overflowItems = measureOverflowItems(\n dataRef.current,\n dimension,\n );\n // TODO if measurements have not changed, do nothing\n // Track the generation of measured items. This can be used to trigger\n // side effects when measurement takes place.\n versionRef.current += 1;\n dispatch({\n type: \"init\",\n overflowItems,\n });\n }\n }\n },\n [orientation],\n );\n\n // Take the initial measurements of overflow items. All subsequent re-measurement will be\n // triggered by either manipulation of the items or item state or updated source.\n useIsomorphicLayoutEffect(() => {\n async function measure(): Promise<void> {\n const { fonts } = document;\n if (fonts) {\n await fonts.ready;\n fontsLoaded.current = true;\n } else {\n fontsLoaded.current = true;\n }\n measureManagedItems();\n }\n\n measure().catch((err) => {\n console.warn(\"error occurred measuring Overflow Items\", err);\n });\n }, [measureManagedItems]);\n\n const dispatchOverflowAction = useCallback(\n (action: OverflowAction | { type: \"reset\" }) => {\n if (action.type === \"reset\") {\n measureManagedItems();\n } else {\n dispatch(action);\n\n if (action.type.endsWith(\"overflow-indicator\")) {\n measureManagedItems(true);\n }\n }\n },\n [measureManagedItems],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (previousIdentityRef.current !== \"\") {\n const overflowItems = reducerInitialiser({\n children,\n source: source || defaultSource,\n injectedItems,\n idRoot,\n options,\n });\n\n dispatch({ type: \"init\", overflowItems });\n measureManagedItems(true);\n }\n previousIdentityRef.current = identity;\n }, [identity]);\n\n return {\n data,\n dispatch: dispatchOverflowAction,\n isControlled,\n version: versionRef.current,\n };\n};\n"],"names":["Children","isValidElement","useRef","useReducer","overflowReducer","reducerInitialiser","useCallback","measureOverflowItems","useIsomorphicLayoutEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useOverflowCollectionItems.js","sources":["../src/responsive/useOverflowCollectionItems.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n Children,\n isValidElement,\n type ReactElement,\n type ReactNode,\n useCallback,\n useReducer,\n useRef,\n} from \"react\";\n\nimport {\n type OverflowAction,\n type OverflowReducer,\n type OverflowReducerInitialisationProps,\n overflowReducer,\n reducerInitialiser,\n} from \"./OverflowReducer\";\nimport type {\n OverflowCollectionHookProps,\n OverflowCollectionHookResult,\n OverflowCollectionOptions,\n OverflowItem,\n OverflowSource,\n} from \"./overflowTypes\";\nimport { measureOverflowItems } from \"./overflowUtils\";\n\nconst defaultOptions: OverflowCollectionOptions = {};\n\ntype WithLabel = { label?: string };\n\nconst defaultChildIdentity = (children: ReactNode) => {\n const childLabels: string[] = [];\n Children.forEach(children, (child) => {\n if (isValidElement(child)) {\n childLabels.push((child as ReactElement<WithLabel>).props.label ?? \"\");\n }\n });\n return `${childLabels.length}:${childLabels.join(\":\")}`;\n};\n\nconst defaultSourceIdentity = (source: WithLabel[]): string => {\n const labels = source.map(({ label }) => label).join(\":\");\n return `${source.length}:${labels}`;\n};\n// We need to track structural changes to controlled source or child elements.\n// Simple identity won't work as child elements will be different on every render.\n// structural changes are addition or removal of items, reordering items.\n// Question, what if user changes prop in declarative TabPanel ?\nconst getItemsIdentity = (\n defaultSource?: OverflowSource[],\n source?: OverflowSource[],\n children?: ReactNode,\n): string => {\n let identity: string;\n if (Array.isArray(defaultSource)) {\n identity = defaultSourceIdentity(defaultSource);\n } else if (Array.isArray(source)) {\n identity = defaultSourceIdentity(source);\n } else {\n identity = defaultChildIdentity(children);\n }\n return identity;\n};\n\ntype OverflowCollectionHook = (\n props: OverflowCollectionHookProps,\n) => OverflowCollectionHookResult;\n\nexport const useOverflowCollectionItems: OverflowCollectionHook = ({\n children,\n defaultSource,\n id: idRoot,\n injectedItems = [],\n options = defaultOptions,\n orientation,\n label: _label = \"\",\n source,\n}) => {\n const dataRef = useRef<OverflowItem[]>([]);\n const versionRef = useRef(0);\n const measureTimeout = useRef<number | null>(null);\n const previousIdentityRef = useRef(\"\");\n const fontsLoaded = useRef(false);\n const identity = getItemsIdentity(defaultSource, source, children);\n const isControlled = Array.isArray(source) || Children.count(children) > 0;\n if (isControlled && defaultSource !== undefined) {\n throw Error(\n \"useOverflowCollectionItems: defaultSource prop should not be used in combination with either source prop or children \",\n );\n }\n\n const [data, dispatch] = useReducer<\n OverflowReducer,\n OverflowReducerInitialisationProps\n >(\n overflowReducer,\n {\n children,\n source: source || defaultSource,\n injectedItems,\n idRoot,\n options,\n },\n reducerInitialiser,\n );\n\n dataRef.current = data;\n\n const measureManagedItems = useCallback(\n (defer = false) => {\n if (measureTimeout.current) {\n window.clearTimeout(measureTimeout.current);\n measureTimeout.current = null;\n }\n if (defer) {\n measureTimeout.current = window.setTimeout(measureManagedItems, 30);\n } else {\n // If fonts have not yet loaded, measurements WILL be incorrect\n if (fontsLoaded.current) {\n const dimension = orientation === \"horizontal\" ? \"width\" : \"height\";\n const overflowItems = measureOverflowItems(\n dataRef.current,\n dimension,\n );\n // TODO if measurements have not changed, do nothing\n // Track the generation of measured items. This can be used to trigger\n // side effects when measurement takes place.\n versionRef.current += 1;\n dispatch({\n type: \"init\",\n overflowItems,\n });\n }\n }\n },\n [orientation],\n );\n\n // Take the initial measurements of overflow items. All subsequent re-measurement will be\n // triggered by either manipulation of the items or item state or updated source.\n useIsomorphicLayoutEffect(() => {\n async function measure(): Promise<void> {\n const { fonts } = document;\n if (fonts) {\n await fonts.ready;\n fontsLoaded.current = true;\n } else {\n fontsLoaded.current = true;\n }\n measureManagedItems();\n }\n\n measure().catch((err) => {\n console.warn(\"error occurred measuring Overflow Items\", err);\n });\n }, [measureManagedItems]);\n\n const dispatchOverflowAction = useCallback(\n (action: OverflowAction | { type: \"reset\" }) => {\n if (action.type === \"reset\") {\n measureManagedItems();\n } else {\n dispatch(action);\n\n if (action.type.endsWith(\"overflow-indicator\")) {\n measureManagedItems(true);\n }\n }\n },\n [measureManagedItems],\n );\n\n useIsomorphicLayoutEffect(() => {\n if (previousIdentityRef.current !== \"\") {\n const overflowItems = reducerInitialiser({\n children,\n source: source || defaultSource,\n injectedItems,\n idRoot,\n options,\n });\n\n dispatch({ type: \"init\", overflowItems });\n measureManagedItems(true);\n }\n previousIdentityRef.current = identity;\n }, [identity]);\n\n return {\n data,\n dispatch: dispatchOverflowAction,\n isControlled,\n version: versionRef.current,\n };\n};\n"],"names":["Children","isValidElement","useRef","useReducer","overflowReducer","reducerInitialiser","useCallback","measureOverflowItems","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOverflowLayout.js","sources":["../src/responsive/useOverflowLayout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from \"react\";\nimport {\n type ResizeHandler,\n useResizeObserver,\n} from \"../responsive/useResizeObserver\";\nimport type {\n ElementRef,\n ManagedListRef,\n OverflowItem,\n OverflowLayoutHookProps,\n} from \"./overflowTypes\";\nimport { getIsOverflowed, measureContainerOverflow } from \"./overflowUtils\";\nimport { useDynamicCollapse } from \"./useDynamicCollapse\";\nimport { useInstantCollapse } from \"./useInstantCollapse\";\nimport { useOverflow } from \"./useOverflow\";\nimport { useReclaimSpace } from \"./useReclaimSpace\";\n\nconst MONITORED_DIMENSIONS: { [key: string]: string[] } = {\n horizontal: [\"width\", \"scrollHeight\"],\n vertical: [\"height\", \"scrollWidth\"],\n none: [],\n};\n\ntype overflowUpdate = (item1: OverflowItem, item2: OverflowItem) => void;\n\n// we need id, just to be able to assign id to overflowIndicator in useOverflow\nexport const useOverflowLayout = ({\n collectionHook,\n id,\n orientation,\n label = \"Toolbar\",\n disableOverflow = false,\n}: OverflowLayoutHookProps): [ElementRef, overflowUpdate] => {\n const overflowContainerRef: ElementRef = useRef(null);\n const overflowItemsRef: ManagedListRef = useRef([]);\n const measurement = useRef({ innerContainerSize: 0, rootContainerDepth: 0 });\n const { innerContainerSize } = measurement.current;\n\n const { dispatch, version: collectionVersion } = collectionHook;\n overflowItemsRef.current = collectionHook.data;\n\n const {\n onResize: onOverflowResize,\n resetMeasurements: resetOverflowMeasurements,\n } = useOverflow({\n collectionHook,\n id,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const hasOverflowedItems = getIsOverflowed(collectionHook.data);\n // const hasOverflowedItems = getIsOverflowed(managedItems);\n\n const {\n onResize: onDynamicResize,\n resetMeasurements: resetDynamicMeasurements,\n } = useDynamicCollapse({\n collectionHook,\n innerContainerSize,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const {\n onResize: onInstantResize,\n resetMeasurements: resetInstantMeasurements,\n } = useInstantCollapse({\n collectionHook,\n hasOverflowedItems,\n innerContainerSize,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const { onResize: onReclaimResize } = useReclaimSpace({\n collectionHook,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const resizeHandler: ResizeHandler = useCallback(\n ({\n scrollHeight,\n height = scrollHeight,\n scrollWidth,\n width = scrollWidth,\n }) => {\n const size = orientation === \"horizontal\" ? width : height;\n if (typeof size === \"number\") {\n const { innerContainerSize } = measurement.current;\n const sizeDiff = size - innerContainerSize;\n // Tiny size diffs seem to be down to the relative sub-pixel innaccuracy of\n // ResizeObserver vs getBoundingClientRect\n if (Math.abs(sizeDiff) > 0.5) {\n measurement.current.innerContainerSize = size;\n const containerHasGrown = size > innerContainerSize;\n // Note: any one of these hooks may trigger a render which\n // may affect the overflow state that the next hook sees.\n // Hence, they all test for overflow internally and independently.\n onDynamicResize(size, containerHasGrown);\n onInstantResize(size, containerHasGrown);\n onOverflowResize(size, containerHasGrown);\n onReclaimResize(size, containerHasGrown);\n }\n }\n },\n [\n onDynamicResize,\n onInstantResize,\n onOverflowResize,\n onReclaimResize,\n orientation,\n ],\n );\n\n const measureAndInitialize = useCallback(() => {\n const { isOverflowing, ...contentWidthAndDepth } = measureContainerOverflow(\n overflowContainerRef,\n orientation,\n );\n\n measurement.current = contentWidthAndDepth;\n const { innerContainerSize } = contentWidthAndDepth;\n // TODO check this with complex combinations\n let handled = resetInstantMeasurements(isOverflowing);\n if (!handled) {\n handled = resetDynamicMeasurements();\n if (!handled) {\n resetOverflowMeasurements?.(isOverflowing, innerContainerSize);\n }\n }\n }, [\n orientation,\n resetInstantMeasurements,\n resetDynamicMeasurements,\n resetOverflowMeasurements,\n ]);\n\n const switchPriorities = useCallback(\n (item1: OverflowItem, item2: OverflowItem) => {\n const { priority: priority1 } = item1;\n const { priority: priority2 } = item2;\n if (priority1 !== priority2) {\n dispatch({\n type: \"update-items\",\n overflowItems: [\n { id: item1.id, priority: priority2 },\n { id: item2.id, priority: priority1 },\n ],\n });\n // Why do we need a timeout here when we don't inside resizeHandler ?\n setTimeout(measureAndInitialize, 0);\n }\n },\n [dispatch, measureAndInitialize],\n );\n\n // Important that we register our resize handler before we measure and\n // initialize. The initialization may trigger changes which we want the\n // resize observer to detect (when we have nested overflowables).\n useResizeObserver(\n overflowContainerRef,\n MONITORED_DIMENSIONS[disableOverflow ? \"none\" : orientation],\n resizeHandler,\n );\n\n // This hook runs after a measurememnt cycle, not after every single change to\n // collection data. The version attribute has been introduced specifically for this.\n useEffect(() => {\n if (!disableOverflow && collectionVersion != null) {\n measureAndInitialize();\n }\n }, [collectionVersion, disableOverflow, measureAndInitialize]);\n\n return [overflowContainerRef, switchPriorities];\n};\n"],"names":["useRef","useOverflow","getIsOverflowed","useDynamicCollapse","useInstantCollapse","useReclaimSpace","useCallback","innerContainerSize","measureContainerOverflow","useResizeObserver","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useOverflowLayout.js","sources":["../src/responsive/useOverflowLayout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from \"react\";\nimport {\n type ResizeHandler,\n useResizeObserver,\n} from \"../responsive/useResizeObserver\";\nimport type {\n ElementRef,\n ManagedListRef,\n OverflowItem,\n OverflowLayoutHookProps,\n} from \"./overflowTypes\";\nimport { getIsOverflowed, measureContainerOverflow } from \"./overflowUtils\";\nimport { useDynamicCollapse } from \"./useDynamicCollapse\";\nimport { useInstantCollapse } from \"./useInstantCollapse\";\nimport { useOverflow } from \"./useOverflow\";\nimport { useReclaimSpace } from \"./useReclaimSpace\";\n\nconst MONITORED_DIMENSIONS: { [key: string]: string[] } = {\n horizontal: [\"width\", \"scrollHeight\"],\n vertical: [\"height\", \"scrollWidth\"],\n none: [],\n};\n\ntype overflowUpdate = (item1: OverflowItem, item2: OverflowItem) => void;\n\n// we need id, just to be able to assign id to overflowIndicator in useOverflow\nexport const useOverflowLayout = ({\n collectionHook,\n id,\n orientation,\n label = \"Toolbar\",\n disableOverflow = false,\n}: OverflowLayoutHookProps): [ElementRef, overflowUpdate] => {\n const overflowContainerRef: ElementRef = useRef(null);\n const overflowItemsRef: ManagedListRef = useRef([]);\n const measurement = useRef({ innerContainerSize: 0, rootContainerDepth: 0 });\n const { innerContainerSize } = measurement.current;\n\n const { dispatch, version: collectionVersion } = collectionHook;\n overflowItemsRef.current = collectionHook.data;\n\n const {\n onResize: onOverflowResize,\n resetMeasurements: resetOverflowMeasurements,\n } = useOverflow({\n collectionHook,\n id,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const hasOverflowedItems = getIsOverflowed(collectionHook.data);\n // const hasOverflowedItems = getIsOverflowed(managedItems);\n\n const {\n onResize: onDynamicResize,\n resetMeasurements: resetDynamicMeasurements,\n } = useDynamicCollapse({\n collectionHook,\n innerContainerSize,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const {\n onResize: onInstantResize,\n resetMeasurements: resetInstantMeasurements,\n } = useInstantCollapse({\n collectionHook,\n hasOverflowedItems,\n innerContainerSize,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const { onResize: onReclaimResize } = useReclaimSpace({\n collectionHook,\n label,\n overflowItemsRef,\n orientation,\n overflowContainerRef,\n });\n\n const resizeHandler: ResizeHandler = useCallback(\n ({\n scrollHeight,\n height = scrollHeight,\n scrollWidth,\n width = scrollWidth,\n }) => {\n const size = orientation === \"horizontal\" ? width : height;\n if (typeof size === \"number\") {\n const { innerContainerSize } = measurement.current;\n const sizeDiff = size - innerContainerSize;\n // Tiny size diffs seem to be down to the relative sub-pixel innaccuracy of\n // ResizeObserver vs getBoundingClientRect\n if (Math.abs(sizeDiff) > 0.5) {\n measurement.current.innerContainerSize = size;\n const containerHasGrown = size > innerContainerSize;\n // Note: any one of these hooks may trigger a render which\n // may affect the overflow state that the next hook sees.\n // Hence, they all test for overflow internally and independently.\n onDynamicResize(size, containerHasGrown);\n onInstantResize(size, containerHasGrown);\n onOverflowResize(size, containerHasGrown);\n onReclaimResize(size, containerHasGrown);\n }\n }\n },\n [\n onDynamicResize,\n onInstantResize,\n onOverflowResize,\n onReclaimResize,\n orientation,\n ],\n );\n\n const measureAndInitialize = useCallback(() => {\n const { isOverflowing, ...contentWidthAndDepth } = measureContainerOverflow(\n overflowContainerRef,\n orientation,\n );\n\n measurement.current = contentWidthAndDepth;\n const { innerContainerSize } = contentWidthAndDepth;\n // TODO check this with complex combinations\n let handled = resetInstantMeasurements(isOverflowing);\n if (!handled) {\n handled = resetDynamicMeasurements();\n if (!handled) {\n resetOverflowMeasurements?.(isOverflowing, innerContainerSize);\n }\n }\n }, [\n orientation,\n resetInstantMeasurements,\n resetDynamicMeasurements,\n resetOverflowMeasurements,\n ]);\n\n const switchPriorities = useCallback(\n (item1: OverflowItem, item2: OverflowItem) => {\n const { priority: priority1 } = item1;\n const { priority: priority2 } = item2;\n if (priority1 !== priority2) {\n dispatch({\n type: \"update-items\",\n overflowItems: [\n { id: item1.id, priority: priority2 },\n { id: item2.id, priority: priority1 },\n ],\n });\n // Why do we need a timeout here when we don't inside resizeHandler ?\n setTimeout(measureAndInitialize, 0);\n }\n },\n [dispatch, measureAndInitialize],\n );\n\n // Important that we register our resize handler before we measure and\n // initialize. The initialization may trigger changes which we want the\n // resize observer to detect (when we have nested overflowables).\n useResizeObserver(\n overflowContainerRef,\n MONITORED_DIMENSIONS[disableOverflow ? \"none\" : orientation],\n resizeHandler,\n );\n\n // This hook runs after a measurememnt cycle, not after every single change to\n // collection data. The version attribute has been introduced specifically for this.\n useEffect(() => {\n if (!disableOverflow && collectionVersion != null) {\n measureAndInitialize();\n }\n }, [collectionVersion, disableOverflow, measureAndInitialize]);\n\n return [overflowContainerRef, switchPriorities];\n};\n"],"names":["useRef","useOverflow","getIsOverflowed","useDynamicCollapse","useInstantCollapse","useReclaimSpace","useCallback","innerContainerSize","measureContainerOverflow","useResizeObserver","useEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useReclaimSpace.js","sources":["../src/responsive/useReclaimSpace.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport type {\n OverflowHookProps,\n OverflowHookResult,\n OverflowItem,\n} from \"./overflowTypes\";\n\nimport {\n getOverflowIndicator,\n measureContainerOverflow,\n} from \"./overflowUtils\";\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nconst canReclaimSpace = (item: OverflowItem) =>\n item.collapsed && item.reclaimSpace;\n\nconst hasReclaimedSpace = (item: OverflowItem) => item.reclaimedSpace;\nconst getReclaimableSpace = ({ size, minSize = 0 }: OverflowItem) =>\n size - minSize;\n\nconst findNextOverflowedItem = (items: OverflowItem[]) => {\n const overflowedItems = items.filter((item) => item.overflowed);\n const minPriority = Math.min(...overflowedItems.map(getPriority));\n for (let i = 0; i < overflowedItems.length; i++) {\n if (overflowedItems[i].priority === minPriority) {\n return overflowedItems[i];\n }\n }\n return null;\n};\n\nexport const addAllVisible = (sum: number, m: OverflowItem) =>\n sum + (m.overflowed ? 0 : m.size);\n\nconst canReleaseReclaimedSpace = (size: number, items: OverflowItem[]) => {\n const claimant = items.find(hasReclaimedSpace);\n const overflowedItem = findNextOverflowedItem(items);\n if (claimant && overflowedItem) {\n const renderedSize = items.reduce(addAllVisible, 0);\n const { size: indicatorSize } = getOverflowIndicator(items) ?? { size: 0 };\n const { size: overflowedSize } = overflowedItem;\n // TODO we can discount the indicator size ONLY IF overflowed item is only overflowed item\n const reclaimableSpace = getReclaimableSpace(claimant);\n const renderedSizeAfterReclaim =\n renderedSize - reclaimableSpace - indicatorSize;\n const maxAvailableSpace = size - renderedSizeAfterReclaim;\n if (maxAvailableSpace >= overflowedSize) {\n return true;\n }\n }\n};\n\nconst mightBeAbleToReclaimSpace = (items: OverflowItem[]) =>\n items.some(canReclaimSpace);\n\n// We need to release the reclaimed space (i.e take it back from the collapsed item and re-assign it\n// as available space) when container grows and space now allows overflowed item to be 'un-wrapped'\n\nexport const useReclaimSpace = ({\n collectionHook,\n label: _label = \"Toolbar\",\n overflowItemsRef: managedItemsRef,\n overflowContainerRef: ref,\n orientation,\n}: OverflowHookProps): OverflowHookResult => {\n const releaseReclaimedSpace = useCallback(() => {\n const { current: managedItems } = managedItemsRef;\n\n const claimant = managedItems.find(hasReclaimedSpace);\n if (claimant) {\n // Might not always need to collapse, if there is enough available space for it to still be collapsing then\n // collapse the claimant and turn off reclaimed\n collectionHook.dispatch({\n type: \"replace-item\",\n overflowItem: {\n ...claimant,\n collapsed: true,\n collapsing: false,\n reclaimedSpace: undefined,\n size: claimant.minSize as number,\n fullSize: claimant.size,\n },\n });\n }\n }, [managedItemsRef, collectionHook.dispatch]);\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n const { current: managedItems } = managedItemsRef;\n\n if (containerHasGrown && canReleaseReclaimedSpace(size, managedItems)) {\n releaseReclaimedSpace();\n } else if (\n !containerHasGrown &&\n willOverflow &&\n mightBeAbleToReclaimSpace(managedItems)\n ) {\n const collapsedChild = managedItems.find(canReclaimSpace);\n if (collapsedChild) {\n collectionHook.dispatch({\n type: \"replace-item\",\n overflowItem: {\n ...collapsedChild,\n collapsed: false,\n collapsing: true,\n reclaimedSpace: true,\n size: collapsedChild.fullSize as number,\n fullSize: null,\n },\n });\n }\n }\n },\n [\n ref,\n managedItemsRef,\n releaseReclaimedSpace,\n collectionHook.dispatch,\n orientation,\n ],\n );\n\n return {\n onResize: handleResize,\n };\n};\n"],"names":["getOverflowIndicator","useCallback","measureContainerOverflow"],"mappings":"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"}
1
+ {"version":3,"file":"useReclaimSpace.js","sources":["../src/responsive/useReclaimSpace.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport type {\n OverflowHookProps,\n OverflowHookResult,\n OverflowItem,\n} from \"./overflowTypes\";\n\nimport {\n getOverflowIndicator,\n measureContainerOverflow,\n} from \"./overflowUtils\";\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nconst canReclaimSpace = (item: OverflowItem) =>\n item.collapsed && item.reclaimSpace;\n\nconst hasReclaimedSpace = (item: OverflowItem) => item.reclaimedSpace;\nconst getReclaimableSpace = ({ size, minSize = 0 }: OverflowItem) =>\n size - minSize;\n\nconst findNextOverflowedItem = (items: OverflowItem[]) => {\n const overflowedItems = items.filter((item) => item.overflowed);\n const minPriority = Math.min(...overflowedItems.map(getPriority));\n for (let i = 0; i < overflowedItems.length; i++) {\n if (overflowedItems[i].priority === minPriority) {\n return overflowedItems[i];\n }\n }\n return null;\n};\n\nexport const addAllVisible = (sum: number, m: OverflowItem) =>\n sum + (m.overflowed ? 0 : m.size);\n\nconst canReleaseReclaimedSpace = (size: number, items: OverflowItem[]) => {\n const claimant = items.find(hasReclaimedSpace);\n const overflowedItem = findNextOverflowedItem(items);\n if (claimant && overflowedItem) {\n const renderedSize = items.reduce(addAllVisible, 0);\n const { size: indicatorSize } = getOverflowIndicator(items) ?? { size: 0 };\n const { size: overflowedSize } = overflowedItem;\n // TODO we can discount the indicator size ONLY IF overflowed item is only overflowed item\n const reclaimableSpace = getReclaimableSpace(claimant);\n const renderedSizeAfterReclaim =\n renderedSize - reclaimableSpace - indicatorSize;\n const maxAvailableSpace = size - renderedSizeAfterReclaim;\n if (maxAvailableSpace >= overflowedSize) {\n return true;\n }\n }\n};\n\nconst mightBeAbleToReclaimSpace = (items: OverflowItem[]) =>\n items.some(canReclaimSpace);\n\n// We need to release the reclaimed space (i.e take it back from the collapsed item and re-assign it\n// as available space) when container grows and space now allows overflowed item to be 'un-wrapped'\n\nexport const useReclaimSpace = ({\n collectionHook,\n label: _label = \"Toolbar\",\n overflowItemsRef: managedItemsRef,\n overflowContainerRef: ref,\n orientation,\n}: OverflowHookProps): OverflowHookResult => {\n const releaseReclaimedSpace = useCallback(() => {\n const { current: managedItems } = managedItemsRef;\n\n const claimant = managedItems.find(hasReclaimedSpace);\n if (claimant) {\n // Might not always need to collapse, if there is enough available space for it to still be collapsing then\n // collapse the claimant and turn off reclaimed\n collectionHook.dispatch({\n type: \"replace-item\",\n overflowItem: {\n ...claimant,\n collapsed: true,\n collapsing: false,\n reclaimedSpace: undefined,\n size: claimant.minSize as number,\n fullSize: claimant.size,\n },\n });\n }\n }, [managedItemsRef, collectionHook.dispatch]);\n\n const handleResize = useCallback(\n (size: number, containerHasGrown?: boolean) => {\n const { isOverflowing: willOverflow } = measureContainerOverflow(\n ref,\n orientation,\n );\n const { current: managedItems } = managedItemsRef;\n\n if (containerHasGrown && canReleaseReclaimedSpace(size, managedItems)) {\n releaseReclaimedSpace();\n } else if (\n !containerHasGrown &&\n willOverflow &&\n mightBeAbleToReclaimSpace(managedItems)\n ) {\n const collapsedChild = managedItems.find(canReclaimSpace);\n if (collapsedChild) {\n collectionHook.dispatch({\n type: \"replace-item\",\n overflowItem: {\n ...collapsedChild,\n collapsed: false,\n collapsing: true,\n reclaimedSpace: true,\n size: collapsedChild.fullSize as number,\n fullSize: null,\n },\n });\n }\n }\n },\n [\n ref,\n managedItemsRef,\n releaseReclaimedSpace,\n collectionHook.dispatch,\n orientation,\n ],\n );\n\n return {\n onResize: handleResize,\n };\n};\n"],"names":["getOverflowIndicator","useCallback","measureContainerOverflow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useResizeObserver.js","sources":["../src/responsive/useResizeObserver.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension,\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nconst resizeObserver =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension,\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize?.(measurements);\n }\n }\n }\n })\n : null;\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false,\n): void {\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {},\n );\n }, []);\n\n const resizeCallback = useRef(onResize);\n\n useIsomorphicLayoutEffect(() => {\n resizeCallback.current = onResize;\n }, [onResize]);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useIsomorphicLayoutEffect(() => {\n if (!resizeObserver) {\n return undefined;\n }\n\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n\n const { fonts } = document;\n if (fonts) {\n await fonts.ready;\n }\n if (!cleanedUp && resizeObserver) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n resizeCallback.current?.(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\",\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize]);\n\n useIsomorphicLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n"],"names":["useRef","useCallback","useIsomorphicLayoutEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useResizeObserver.js","sources":["../src/responsive/useResizeObserver.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension,\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nconst resizeObserver =\n typeof ResizeObserver !== \"undefined\"\n ? new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension,\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize?.(measurements);\n }\n }\n }\n })\n : null;\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false,\n): void {\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {},\n );\n }, []);\n\n const resizeCallback = useRef(onResize);\n\n useIsomorphicLayoutEffect(() => {\n resizeCallback.current = onResize;\n }, [onResize]);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useIsomorphicLayoutEffect(() => {\n if (!resizeObserver) {\n return undefined;\n }\n\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n\n const { fonts } = document;\n if (fonts) {\n await fonts.ready;\n }\n if (!cleanedUp && resizeObserver) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n resizeCallback.current?.(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\",\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize]);\n\n useIsomorphicLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n"],"names":["useRef","useCallback","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useWidth.js","sources":["../src/responsive/useWidth.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef, useState } from \"react\";\nimport {\n type ResizeHandler,\n useResizeObserver,\n WidthOnly,\n} from \"./useResizeObserver\";\n\nconst NONE: string[] = [];\n\nexport function useWidth<Element extends HTMLElement>(\n responsive: boolean,\n): [RefObject<Element>, number] {\n const [width, setWidth] = useState<number>();\n const ref = useRef<HTMLElement>(null);\n\n const handleResize: ResizeHandler = useCallback(({ width: newWidth }) => {\n setWidth(newWidth);\n }, []);\n\n const measurementsToObserve = responsive ? WidthOnly : NONE;\n useResizeObserver(ref, measurementsToObserve, handleResize);\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n handleResize(ref.current.getBoundingClientRect());\n }, [handleResize]);\n\n return [ref, width] as [RefObject<Element>, number];\n}\n"],"names":["useState","useRef","useCallback","WidthOnly","useResizeObserver","useIsomorphicLayoutEffect"],"mappings":";;;;;;AAQA,MAAM,OAAiB,EAAC;AAEjB,SAAS,SACd,UAC8B,EAAA;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAiB,EAAA;AAC3C,EAAM,MAAA,GAAA,GAAMC,aAAoB,IAAI,CAAA;AAEpC,EAAA,MAAM,eAA8BC,iBAAY,CAAA,CAAC,EAAE,KAAA,EAAO,UAAe,KAAA;AACvE,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,GACnB,EAAG,EAAE,CAAA;AAEL,EAAM,MAAA,qBAAA,GAAwB,aAAaC,2BAAY,GAAA,IAAA;AACvD,EAAkBC,mCAAA,CAAA,GAAA,EAAK,uBAAuB,YAAY,CAAA;AAE1D,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAI,IAAA,CAAC,IAAI,OAAS,EAAA;AAChB,MAAO,OAAA,MAAA;AAAA;AAET,IAAa,YAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,qBAAA,EAAuB,CAAA;AAAA,GAClD,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAO,OAAA,CAAC,KAAK,KAAK,CAAA;AACpB;;;;"}
1
+ {"version":3,"file":"useWidth.js","sources":["../src/responsive/useWidth.ts"],"sourcesContent":["import { useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport { type RefObject, useCallback, useRef, useState } from \"react\";\nimport {\n type ResizeHandler,\n useResizeObserver,\n WidthOnly,\n} from \"./useResizeObserver\";\n\nconst NONE: string[] = [];\n\nexport function useWidth<Element extends HTMLElement>(\n responsive: boolean,\n): [RefObject<Element>, number] {\n const [width, setWidth] = useState<number>();\n const ref = useRef<HTMLElement>(null);\n\n const handleResize: ResizeHandler = useCallback(({ width: newWidth }) => {\n setWidth(newWidth);\n }, []);\n\n const measurementsToObserve = responsive ? WidthOnly : NONE;\n useResizeObserver(ref, measurementsToObserve, handleResize);\n\n useIsomorphicLayoutEffect(() => {\n if (!ref.current) {\n return undefined;\n }\n handleResize(ref.current.getBoundingClientRect());\n }, [handleResize]);\n\n return [ref, width] as [RefObject<Element>, number];\n}\n"],"names":["useState","useRef","useCallback","WidthOnly","useResizeObserver","useIsomorphicLayoutEffect"],"mappings":";;;;;;AAQA,MAAM,OAAiB,EAAC;AAEjB,SAAS,SACd,UAAA,EAC8B;AAC9B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAA,EAAiB;AAC3C,EAAA,MAAM,GAAA,GAAMC,aAAoB,IAAI,CAAA;AAEpC,EAAA,MAAM,eAA8BC,iBAAA,CAAY,CAAC,EAAE,KAAA,EAAO,UAAS,KAAM;AACvE,IAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,qBAAA,GAAwB,aAAaC,2BAAA,GAAY,IAAA;AACvD,EAAAC,mCAAA,CAAkB,GAAA,EAAK,uBAAuB,YAAY,CAAA;AAE1D,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AAChB,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,YAAA,CAAa,GAAA,CAAI,OAAA,CAAQ,qBAAA,EAAuB,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,OAAO,CAAC,KAAK,KAAK,CAAA;AACpB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/responsive/utils.ts"],"sourcesContent":["const COLLAPSIBLE = \"data-collapsible\";\n\nexport type dataPadDirection = \"data-pad-start\" | \"data-pad-end\";\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n \"data-pad-start\": true,\n \"data-pad-end\": true,\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: \"dynamic\",\n instant: \"instant\",\n true: \"instant\",\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? \"none\";\n\ntype AnyProps = Record<string, unknown>;\ntype ResponsivePropsTuple = [AnyProps, AnyProps];\n/**\n * data- attributes can be used to manage item overflow behaviour. Users may\n * speficy these attributes directly on a Toolbar component, which ultimately\n * gets wrapped by a FormField. We need to 'lift' these attributes to the form\n * field and remove them from the props of the nested component.\n * @param props\n * @returns\n */\nexport const liftResponsivePropsToFormField = (\n props: AnyProps,\n): ResponsivePropsTuple => {\n const propNames = Object.keys(props);\n if (propNames.some(isResponsiveAttribute)) {\n return propNames.reduce<ResponsivePropsTuple>(\n (tuple, propName): ResponsivePropsTuple => {\n const [toolbarProps, rest] = tuple;\n const propValue = props[propName];\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName)\n ? collapsibleValue(propValue as string)\n : propValue;\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return tuple;\n },\n [{}, {}],\n );\n }\n return [{}, props];\n};\n"],"names":[],"mappings":";;AAAA,MAAM,WAAc,GAAA,kBAAA;AAIpB,MAAM,oBAAmD,GAAA;AAAA,EACvD,CAAC,WAAW,GAAG,IAAA;AAAA,EACf,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA;AAClB,CAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,QACpC,KAAA,oBAAA,CAAqB,QAAQ,CAAK,IAAA;AAEpC,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAqB,QAAa,KAAA,WAAA;AAEzD,MAAM,iBAA+C,GAAA;AAAA,EACnD,OAAS,EAAA,SAAA;AAAA,EACT,OAAS,EAAA,SAAA;AAAA,EACT,IAAM,EAAA;AACR,CAAA;AAEA,MAAM,gBAAmB,GAAA,CAAC,KAAkB,KAAA,iBAAA,CAAkB,KAAK,CAAK,IAAA,MAAA;AAY3D,MAAA,8BAAA,GAAiC,CAC5C,KACyB,KAAA;AACzB,EAAM,MAAA,SAAA,GAAY,MAAO,CAAA,IAAA,CAAK,KAAK,CAAA;AACnC,EAAI,IAAA,SAAA,CAAU,IAAK,CAAA,qBAAqB,CAAG,EAAA;AACzC,IAAA,OAAO,SAAU,CAAA,MAAA;AAAA,MACf,CAAC,OAAO,QAAmC,KAAA;AACzC,QAAM,MAAA,CAAC,YAAc,EAAA,IAAI,CAAI,GAAA,KAAA;AAC7B,QAAM,MAAA,SAAA,GAAY,MAAM,QAAQ,CAAA;AAChC,QAAI,IAAA,qBAAA,CAAsB,QAAQ,CAAG,EAAA;AACnC,UAAA,MAAM,QAAQ,aAAc,CAAA,QAAQ,CAChC,GAAA,gBAAA,CAAiB,SAAmB,CACpC,GAAA,SAAA;AAEJ,UAAA,YAAA,CAAa,QAAQ,CAAI,GAAA,KAAA;AACzB,UAAA,IAAA,CAAK,QAAQ,CAAI,GAAA,MAAA;AAAA;AAEnB,QAAO,OAAA,KAAA;AAAA,OACT;AAAA,MACA,CAAC,EAAI,EAAA,EAAE;AAAA,KACT;AAAA;AAEF,EAAO,OAAA,CAAC,EAAC,EAAG,KAAK,CAAA;AACnB;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../src/responsive/utils.ts"],"sourcesContent":["const COLLAPSIBLE = \"data-collapsible\";\n\nexport type dataPadDirection = \"data-pad-start\" | \"data-pad-end\";\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n \"data-pad-start\": true,\n \"data-pad-end\": true,\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: \"dynamic\",\n instant: \"instant\",\n true: \"instant\",\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? \"none\";\n\ntype AnyProps = Record<string, unknown>;\ntype ResponsivePropsTuple = [AnyProps, AnyProps];\n/**\n * data- attributes can be used to manage item overflow behaviour. Users may\n * speficy these attributes directly on a Toolbar component, which ultimately\n * gets wrapped by a FormField. We need to 'lift' these attributes to the form\n * field and remove them from the props of the nested component.\n * @param props\n * @returns\n */\nexport const liftResponsivePropsToFormField = (\n props: AnyProps,\n): ResponsivePropsTuple => {\n const propNames = Object.keys(props);\n if (propNames.some(isResponsiveAttribute)) {\n return propNames.reduce<ResponsivePropsTuple>(\n (tuple, propName): ResponsivePropsTuple => {\n const [toolbarProps, rest] = tuple;\n const propValue = props[propName];\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName)\n ? collapsibleValue(propValue as string)\n : propValue;\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return tuple;\n },\n [{}, {}],\n );\n }\n return [{}, props];\n};\n"],"names":[],"mappings":";;AAAA,MAAM,WAAA,GAAc,kBAAA;AAIpB,MAAM,oBAAA,GAAmD;AAAA,EACvD,CAAC,WAAW,GAAG,IAAA;AAAA,EACf,gBAAA,EAAkB,IAAA;AAAA,EAClB,cAAA,EAAgB;AAClB,CAAA;AAEO,MAAM,qBAAA,GAAwB,CAAC,QAAA,KACpC,oBAAA,CAAqB,QAAQ,CAAA,IAAK;AAEpC,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAqB,QAAA,KAAa,WAAA;AAEzD,MAAM,iBAAA,GAA+C;AAAA,EACnD,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM;AACR,CAAA;AAEA,MAAM,gBAAA,GAAmB,CAAC,KAAA,KAAkB,iBAAA,CAAkB,KAAK,CAAA,IAAK,MAAA;AAYjE,MAAM,8BAAA,GAAiC,CAC5C,KAAA,KACyB;AACzB,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACnC,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,qBAAqB,CAAA,EAAG;AACzC,IAAA,OAAO,SAAA,CAAU,MAAA;AAAA,MACf,CAAC,OAAO,QAAA,KAAmC;AACzC,QAAA,MAAM,CAAC,YAAA,EAAc,IAAI,CAAA,GAAI,KAAA;AAC7B,QAAA,MAAM,SAAA,GAAY,MAAM,QAAQ,CAAA;AAChC,QAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACnC,UAAA,MAAM,QAAQ,aAAA,CAAc,QAAQ,CAAA,GAChC,gBAAA,CAAiB,SAAmB,CAAA,GACpC,SAAA;AAEJ,UAAA,YAAA,CAAa,QAAQ,CAAA,GAAI,KAAA;AACzB,UAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,MAAA;AAAA,QACnB;AACA,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,EAAC,EAAG,EAAE;AAAA,KACT;AAAA,EACF;AACA,EAAA,OAAO,CAAC,EAAC,EAAG,KAAK,CAAA;AACnB;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchInput.js","sources":["../src/search-input/SearchInput.tsx"],"sourcesContent":["import { Button, useControlled, useForkRef, useIcon } from \"@salt-ds/core\";\nimport { SearchIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useRef,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n StaticInputAdornment,\n} from \"../input-legacy\";\n\nimport searchInputCss from \"./SearchInput.css\";\n\nconst baseName = \"saltSearchInput\";\n\n//TODO formfield integration\n\nexport interface SearchInputProps extends Omit<InputProps, \"onSubmit\"> {\n /**\n * Override \"search\" icon.\n * Set to `null` to hide.\n */\n IconComponent?: ComponentType | null;\n /**\n * Callback for when clear button is clicked.\n */\n onClear?: () => void;\n /**\n * Callback for change event.\n * Event is either an Input change event or a Button click event.\n */\n onChange?: (event: SyntheticEvent<unknown>, value: string) => void;\n /**\n * Callback to trigger search.\n */\n onSubmit?: (value: InputProps[\"value\"]) => void;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n IconComponent = SearchIcon,\n className,\n onChange,\n onClear,\n onKeyUp,\n onSubmit,\n value: valueProp,\n defaultValue,\n ...other\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-search-input\",\n css: searchInputCss,\n window: targetWindow,\n });\n const { CloseIcon } = useIcon();\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(inputRef, ref);\n\n const [value, setValue, isControlled] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"SearchInput\",\n state: \"value\",\n });\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n newValue: string,\n ) => {\n setValue(newValue);\n onChange?.(event, newValue);\n };\n\n const handleClear = (event: SyntheticEvent<HTMLButtonElement>) => {\n setValue(\"\");\n if (!isControlled) {\n onChange?.(event, \"\");\n }\n onClear?.();\n inputRef.current?.focus();\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && onSubmit && value) {\n onSubmit?.(value);\n }\n\n onKeyUp?.(event);\n };\n\n return (\n <Input\n className={clsx(baseName, className)}\n ref={handleRef}\n endAdornment={\n !!value && (\n <Button\n className={clsx(`${baseName}-clearButton`)}\n onClick={handleClear}\n variant=\"secondary\"\n >\n <CloseIcon\n aria-label=\"clear input\"\n className={`${baseName}-clearIcon`}\n />\n </Button>\n )\n }\n onChange={handleChange}\n onKeyUp={handleKeyUp}\n startAdornment={\n IconComponent && (\n <StaticInputAdornment>\n <IconComponent className={`${baseName}-icon`} />\n </StaticInputAdornment>\n )\n }\n value={value || \"\"}\n {...other}\n />\n );\n },\n);\n"],"names":["forwardRef","SearchInput","SearchIcon","useWindow","useComponentCssInjection","searchInputCss","useIcon","useRef","useForkRef","useControlled","jsx","Input","clsx","Button","StaticInputAdornment"],"mappings":"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"}
1
+ {"version":3,"file":"SearchInput.js","sources":["../src/search-input/SearchInput.tsx"],"sourcesContent":["import { Button, useControlled, useForkRef, useIcon } from \"@salt-ds/core\";\nimport { SearchIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type ChangeEvent,\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type SyntheticEvent,\n useRef,\n} from \"react\";\nimport {\n InputLegacy as Input,\n type InputLegacyProps as InputProps,\n StaticInputAdornment,\n} from \"../input-legacy\";\n\nimport searchInputCss from \"./SearchInput.css\";\n\nconst baseName = \"saltSearchInput\";\n\n//TODO formfield integration\n\nexport interface SearchInputProps extends Omit<InputProps, \"onSubmit\"> {\n /**\n * Override \"search\" icon.\n * Set to `null` to hide.\n */\n IconComponent?: ComponentType | null;\n /**\n * Callback for when clear button is clicked.\n */\n onClear?: () => void;\n /**\n * Callback for change event.\n * Event is either an Input change event or a Button click event.\n */\n onChange?: (event: SyntheticEvent<unknown>, value: string) => void;\n /**\n * Callback to trigger search.\n */\n onSubmit?: (value: InputProps[\"value\"]) => void;\n}\n\nexport const SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\n function SearchInput(\n {\n IconComponent = SearchIcon,\n className,\n onChange,\n onClear,\n onKeyUp,\n onSubmit,\n value: valueProp,\n defaultValue,\n ...other\n },\n ref,\n ) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-search-input\",\n css: searchInputCss,\n window: targetWindow,\n });\n const { CloseIcon } = useIcon();\n const inputRef = useRef<HTMLInputElement>(null);\n const handleRef = useForkRef(inputRef, ref);\n\n const [value, setValue, isControlled] = useControlled({\n controlled: valueProp,\n default: defaultValue,\n name: \"SearchInput\",\n state: \"value\",\n });\n\n const handleChange = (\n event: ChangeEvent<HTMLInputElement>,\n newValue: string,\n ) => {\n setValue(newValue);\n onChange?.(event, newValue);\n };\n\n const handleClear = (event: SyntheticEvent<HTMLButtonElement>) => {\n setValue(\"\");\n if (!isControlled) {\n onChange?.(event, \"\");\n }\n onClear?.();\n inputRef.current?.focus();\n };\n\n const handleKeyUp = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" && onSubmit && value) {\n onSubmit?.(value);\n }\n\n onKeyUp?.(event);\n };\n\n return (\n <Input\n className={clsx(baseName, className)}\n ref={handleRef}\n endAdornment={\n !!value && (\n <Button\n className={clsx(`${baseName}-clearButton`)}\n onClick={handleClear}\n variant=\"secondary\"\n >\n <CloseIcon\n aria-label=\"clear input\"\n className={`${baseName}-clearIcon`}\n />\n </Button>\n )\n }\n onChange={handleChange}\n onKeyUp={handleKeyUp}\n startAdornment={\n IconComponent && (\n <StaticInputAdornment>\n <IconComponent className={`${baseName}-icon`} />\n </StaticInputAdornment>\n )\n }\n value={value || \"\"}\n {...other}\n />\n );\n },\n);\n"],"names":["forwardRef","SearchInput","SearchIcon","useWindow","useComponentCssInjection","searchInputCss","useIcon","useRef","useForkRef","useControlled","jsx","Input","clsx","Button","StaticInputAdornment"],"mappings":";;;;;;;;;;;;;AAqBA,MAAM,QAAA,GAAW,iBAAA;AAyBV,MAAM,WAAA,GAAcA,gBAAA;AAAA,EACzB,SAASC,YAAAA,CACP;AAAA,IACE,aAAA,GAAgBC,gBAAA;AAAA,IAChB,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,YAAA;AAAA,IACA,GAAG;AAAA,KAEL,GAAA,EACA;AACA,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,mBAAA;AAAA,MACR,GAAA,EAAKC,aAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,MAAM,EAAE,SAAA,EAAU,GAAIC,YAAA,EAAQ;AAC9B,IAAA,MAAM,QAAA,GAAWC,aAAyB,IAAI,CAAA;AAC9C,IAAA,MAAM,SAAA,GAAYC,eAAA,CAAW,QAAA,EAAU,GAAG,CAAA;AAE1C,IAAA,MAAM,CAAC,KAAA,EAAO,QAAA,EAAU,YAAY,IAAIC,kBAAA,CAAc;AAAA,MACpD,UAAA,EAAY,SAAA;AAAA,MACZ,OAAA,EAAS,YAAA;AAAA,MACT,IAAA,EAAM,aAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;AAED,IAAA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,QAAA,KACG;AACH,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,EAAO,QAAA,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA6C;AAtFtE,MAAA,IAAA,EAAA;AAuFM,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,EAAO,EAAA,CAAA;AAAA,MACpB;AACA,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AACA,MAAA,CAAA,EAAA,GAAA,QAAA,CAAS,YAAT,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA,EAAA;AAAA,IACpB,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAA2C;AAC9D,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,OAAA,IAAW,QAAA,IAAY,KAAA,EAAO;AAC9C,QAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,KAAA,CAAA;AAAA,MACb;AAEA,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAU,KAAA,CAAA;AAAA,IACZ,CAAA;AAEA,IAAA,uBACEC,cAAA;AAAA,MAACC,uBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,SAAA,CAAK,QAAA,EAAU,SAAS,CAAA;AAAA,QACnC,GAAA,EAAK,SAAA;AAAA,QACL,YAAA,EACE,CAAC,CAAC,KAAA,oBACAF,cAAA;AAAA,UAACG,WAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,SAAA,CAAK,CAAA,EAAG,QAAQ,CAAA,YAAA,CAAc,CAAA;AAAA,YACzC,OAAA,EAAS,WAAA;AAAA,YACT,OAAA,EAAQ,WAAA;AAAA,YAER,QAAA,kBAAAF,cAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAW,aAAA;AAAA,gBACX,SAAA,EAAW,GAAG,QAAQ,CAAA,UAAA;AAAA;AAAA;AACxB;AAAA,SACF;AAAA,QAGJ,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,WAAA;AAAA,QACT,cAAA,EACE,aAAA,oBACEA,cAAA,CAACI,yCAAA,EAAA,EACC,QAAA,kBAAAJ,cAAA,CAAC,iBAAc,SAAA,EAAW,CAAA,EAAG,QAAQ,CAAA,KAAA,CAAA,EAAS,CAAA,EAChD,CAAA;AAAA,QAGJ,OAAO,KAAA,IAAS,EAAA;AAAA,QACf,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ;AACF;;;;"}