@workday/canvas-kit-react 12.1.0-937-next.0 → 12.1.0-945-next.0

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 (237) hide show
  1. package/collection/lib/useOverflowListItemMeasure.tsx +6 -2
  2. package/collection/lib/useOverflowListMeasure.ts +19 -5
  3. package/collection/lib/useOverflowListModel.tsx +114 -47
  4. package/collection/lib/useOverflowListTarget.tsx +5 -1
  5. package/dist/commonjs/action-bar/lib/ActionBar.d.ts +580 -0
  6. package/dist/commonjs/action-bar/lib/ActionBar.d.ts.map +1 -1
  7. package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts +44 -0
  8. package/dist/commonjs/action-bar/lib/ActionBarItem.d.ts.map +1 -1
  9. package/dist/commonjs/action-bar/lib/ActionBarList.d.ts +45 -1
  10. package/dist/commonjs/action-bar/lib/ActionBarList.d.ts.map +1 -1
  11. package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts +44 -0
  12. package/dist/commonjs/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
  13. package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts +558 -0
  14. package/dist/commonjs/action-bar/lib/useActionBarModel.d.ts.map +1 -1
  15. package/dist/commonjs/avatar/lib/Avatar.js +21 -21
  16. package/dist/commonjs/badge/lib/CountBadge.js +3 -3
  17. package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts +602 -0
  18. package/dist/commonjs/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
  19. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +44 -0
  20. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
  21. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts +44 -0
  22. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
  23. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts +22 -0
  24. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
  25. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +44 -0
  26. package/dist/commonjs/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
  27. package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +558 -0
  28. package/dist/commonjs/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
  29. package/dist/commonjs/button/lib/BaseButton.js +21 -21
  30. package/dist/commonjs/button/lib/DeleteButton.js +1 -1
  31. package/dist/commonjs/button/lib/PrimaryButton.js +2 -2
  32. package/dist/commonjs/button/lib/SecondaryButton.js +2 -2
  33. package/dist/commonjs/button/lib/TertiaryButton.js +18 -18
  34. package/dist/commonjs/card/lib/Card.js +1 -1
  35. package/dist/commonjs/card/lib/CardBody.js +1 -1
  36. package/dist/commonjs/card/lib/CardHeading.js +1 -1
  37. package/dist/commonjs/checkbox/lib/CheckBackground.js +3 -3
  38. package/dist/commonjs/checkbox/lib/CheckboxCheck.js +5 -5
  39. package/dist/commonjs/checkbox/lib/CheckboxContainer.js +1 -1
  40. package/dist/commonjs/checkbox/lib/CheckboxInput.js +5 -5
  41. package/dist/commonjs/checkbox/lib/CheckboxRipple.js +1 -1
  42. package/dist/commonjs/collection/lib/ListBox.js +3 -3
  43. package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts +22 -0
  44. package/dist/commonjs/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
  45. package/dist/commonjs/collection/lib/useOverflowListItemMeasure.js +5 -2
  46. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts +23 -1
  47. package/dist/commonjs/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  48. package/dist/commonjs/collection/lib/useOverflowListMeasure.js +12 -28
  49. package/dist/commonjs/collection/lib/useOverflowListModel.d.ts +970 -1
  50. package/dist/commonjs/collection/lib/useOverflowListModel.d.ts.map +1 -1
  51. package/dist/commonjs/collection/lib/useOverflowListModel.js +84 -37
  52. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts +22 -0
  53. package/dist/commonjs/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  54. package/dist/commonjs/collection/lib/useOverflowListTarget.js +4 -1
  55. package/dist/commonjs/combobox/lib/ComboboxMenuList.js +1 -1
  56. package/dist/commonjs/common/lib/AccessibleHide.js +1 -1
  57. package/dist/commonjs/common/lib/CanvasProvider.js +1 -1
  58. package/dist/commonjs/form-field/lib/FormFieldContainer.js +1 -1
  59. package/dist/commonjs/form-field/lib/FormFieldField.js +1 -1
  60. package/dist/commonjs/form-field/lib/FormFieldGroupLabel.js +5 -5
  61. package/dist/commonjs/form-field/lib/FormFieldGroupList.js +3 -3
  62. package/dist/commonjs/form-field/lib/FormFieldHint.js +3 -3
  63. package/dist/commonjs/form-field/lib/FormFieldLabel.js +6 -6
  64. package/dist/commonjs/form-field/lib/formFieldStencil.js +8 -8
  65. package/dist/commonjs/icon/lib/AccentIcon.js +2 -2
  66. package/dist/commonjs/icon/lib/AppletIcon.js +1 -1
  67. package/dist/commonjs/icon/lib/Graphic.js +2 -2
  68. package/dist/commonjs/icon/lib/Svg.js +2 -2
  69. package/dist/commonjs/icon/lib/SystemIcon.js +1 -1
  70. package/dist/commonjs/icon/lib/SystemIconCircle.js +1 -1
  71. package/dist/commonjs/loading-dots/lib/LoadingDots.js +2 -2
  72. package/dist/commonjs/menu/lib/MenuCard.js +1 -1
  73. package/dist/commonjs/menu/lib/MenuItem.js +1 -1
  74. package/dist/commonjs/menu/lib/MenuList.js +3 -3
  75. package/dist/commonjs/menu/lib/MenuOption.js +1 -1
  76. package/dist/commonjs/modal/lib/ModalBody.js +1 -1
  77. package/dist/commonjs/modal/lib/ModalCard.js +1 -1
  78. package/dist/commonjs/modal/lib/ModalHeading.js +1 -1
  79. package/dist/commonjs/modal/lib/ModalOverflowOverlay.js +1 -1
  80. package/dist/commonjs/modal/lib/ModalOverlay.js +2 -2
  81. package/dist/commonjs/popup/lib/PopupBody.js +1 -1
  82. package/dist/commonjs/popup/lib/PopupCard.js +2 -2
  83. package/dist/commonjs/popup/lib/PopupCloseIcon.js +1 -1
  84. package/dist/commonjs/popup/lib/PopupHeading.js +1 -1
  85. package/dist/commonjs/select/lib/SelectCard.js +1 -1
  86. package/dist/commonjs/select/lib/SelectInput.js +3 -3
  87. package/dist/commonjs/switch/lib/Switch.js +7 -7
  88. package/dist/commonjs/table/lib/Table.js +1 -1
  89. package/dist/commonjs/table/lib/TableBody.js +1 -1
  90. package/dist/commonjs/table/lib/TableCaption.js +1 -1
  91. package/dist/commonjs/table/lib/TableCell.js +1 -1
  92. package/dist/commonjs/table/lib/TableFooter.js +1 -1
  93. package/dist/commonjs/table/lib/TableHead.js +1 -1
  94. package/dist/commonjs/table/lib/TableHeader.js +1 -1
  95. package/dist/commonjs/table/lib/TableRow.js +1 -1
  96. package/dist/commonjs/tabs/lib/Tabs.d.ts +666 -0
  97. package/dist/commonjs/tabs/lib/Tabs.d.ts.map +1 -1
  98. package/dist/commonjs/tabs/lib/TabsItem.d.ts +44 -0
  99. package/dist/commonjs/tabs/lib/TabsItem.d.ts.map +1 -1
  100. package/dist/commonjs/tabs/lib/TabsList.d.ts +45 -1
  101. package/dist/commonjs/tabs/lib/TabsList.d.ts.map +1 -1
  102. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts +44 -0
  103. package/dist/commonjs/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
  104. package/dist/commonjs/tabs/lib/TabsPanel.d.ts +44 -0
  105. package/dist/commonjs/tabs/lib/TabsPanel.d.ts.map +1 -1
  106. package/dist/commonjs/tabs/lib/TabsPanels.d.ts +22 -0
  107. package/dist/commonjs/tabs/lib/TabsPanels.d.ts.map +1 -1
  108. package/dist/commonjs/tabs/lib/useTabsModel.d.ts +680 -0
  109. package/dist/commonjs/tabs/lib/useTabsModel.d.ts.map +1 -1
  110. package/dist/commonjs/text/lib/LabelText.js +6 -6
  111. package/dist/commonjs/text/lib/Text.js +16 -16
  112. package/dist/commonjs/text/lib/TypeLevelComponents.js +4 -4
  113. package/dist/commonjs/text-area/lib/TextArea.js +5 -5
  114. package/dist/commonjs/text-input/lib/InputGroup.js +6 -6
  115. package/dist/commonjs/text-input/lib/TextInput.js +5 -5
  116. package/dist/commonjs/toast/lib/Toast.js +1 -1
  117. package/dist/commonjs/toast/lib/ToastBody.js +1 -1
  118. package/dist/commonjs/toast/lib/ToastCloseIcon.js +1 -1
  119. package/dist/commonjs/toast/lib/ToastIcon.js +1 -1
  120. package/dist/commonjs/toast/lib/ToastMessage.js +1 -1
  121. package/dist/es6/action-bar/lib/ActionBar.d.ts +580 -0
  122. package/dist/es6/action-bar/lib/ActionBar.d.ts.map +1 -1
  123. package/dist/es6/action-bar/lib/ActionBarItem.d.ts +44 -0
  124. package/dist/es6/action-bar/lib/ActionBarItem.d.ts.map +1 -1
  125. package/dist/es6/action-bar/lib/ActionBarList.d.ts +45 -1
  126. package/dist/es6/action-bar/lib/ActionBarList.d.ts.map +1 -1
  127. package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts +44 -0
  128. package/dist/es6/action-bar/lib/ActionBarOverflowButton.d.ts.map +1 -1
  129. package/dist/es6/action-bar/lib/useActionBarModel.d.ts +558 -0
  130. package/dist/es6/action-bar/lib/useActionBarModel.d.ts.map +1 -1
  131. package/dist/es6/avatar/lib/Avatar.js +21 -21
  132. package/dist/es6/badge/lib/CountBadge.js +3 -3
  133. package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts +602 -0
  134. package/dist/es6/breadcrumbs/lib/Breadcrumbs.d.ts.map +1 -1
  135. package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts +44 -0
  136. package/dist/es6/breadcrumbs/lib/BreadcrumbsCurrentItem.d.ts.map +1 -1
  137. package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts +44 -0
  138. package/dist/es6/breadcrumbs/lib/BreadcrumbsItem.d.ts.map +1 -1
  139. package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts +22 -0
  140. package/dist/es6/breadcrumbs/lib/BreadcrumbsList.d.ts.map +1 -1
  141. package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts +44 -0
  142. package/dist/es6/breadcrumbs/lib/BreadcrumbsOverflowButton.d.ts.map +1 -1
  143. package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts +558 -0
  144. package/dist/es6/breadcrumbs/lib/hooks/useBreadcrumbsModel.d.ts.map +1 -1
  145. package/dist/es6/button/lib/BaseButton.js +21 -21
  146. package/dist/es6/button/lib/DeleteButton.js +1 -1
  147. package/dist/es6/button/lib/PrimaryButton.js +2 -2
  148. package/dist/es6/button/lib/SecondaryButton.js +2 -2
  149. package/dist/es6/button/lib/TertiaryButton.js +18 -18
  150. package/dist/es6/card/lib/Card.js +1 -1
  151. package/dist/es6/card/lib/CardBody.js +1 -1
  152. package/dist/es6/card/lib/CardHeading.js +1 -1
  153. package/dist/es6/checkbox/lib/CheckBackground.js +3 -3
  154. package/dist/es6/checkbox/lib/CheckboxCheck.js +5 -5
  155. package/dist/es6/checkbox/lib/CheckboxContainer.js +1 -1
  156. package/dist/es6/checkbox/lib/CheckboxInput.js +5 -5
  157. package/dist/es6/checkbox/lib/CheckboxRipple.js +1 -1
  158. package/dist/es6/collection/lib/ListBox.js +3 -3
  159. package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts +22 -0
  160. package/dist/es6/collection/lib/useOverflowListItemMeasure.d.ts.map +1 -1
  161. package/dist/es6/collection/lib/useOverflowListItemMeasure.js +5 -2
  162. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts +23 -1
  163. package/dist/es6/collection/lib/useOverflowListMeasure.d.ts.map +1 -1
  164. package/dist/es6/collection/lib/useOverflowListMeasure.js +13 -6
  165. package/dist/es6/collection/lib/useOverflowListModel.d.ts +970 -1
  166. package/dist/es6/collection/lib/useOverflowListModel.d.ts.map +1 -1
  167. package/dist/es6/collection/lib/useOverflowListModel.js +84 -37
  168. package/dist/es6/collection/lib/useOverflowListTarget.d.ts +22 -0
  169. package/dist/es6/collection/lib/useOverflowListTarget.d.ts.map +1 -1
  170. package/dist/es6/collection/lib/useOverflowListTarget.js +4 -1
  171. package/dist/es6/combobox/lib/ComboboxMenuList.js +1 -1
  172. package/dist/es6/common/lib/AccessibleHide.js +1 -1
  173. package/dist/es6/common/lib/CanvasProvider.js +1 -1
  174. package/dist/es6/form-field/lib/FormFieldContainer.js +1 -1
  175. package/dist/es6/form-field/lib/FormFieldField.js +1 -1
  176. package/dist/es6/form-field/lib/FormFieldGroupLabel.js +5 -5
  177. package/dist/es6/form-field/lib/FormFieldGroupList.js +3 -3
  178. package/dist/es6/form-field/lib/FormFieldHint.js +3 -3
  179. package/dist/es6/form-field/lib/FormFieldLabel.js +6 -6
  180. package/dist/es6/form-field/lib/formFieldStencil.js +8 -8
  181. package/dist/es6/icon/lib/AccentIcon.js +2 -2
  182. package/dist/es6/icon/lib/AppletIcon.js +1 -1
  183. package/dist/es6/icon/lib/Graphic.js +2 -2
  184. package/dist/es6/icon/lib/Svg.js +2 -2
  185. package/dist/es6/icon/lib/SystemIcon.js +1 -1
  186. package/dist/es6/icon/lib/SystemIconCircle.js +1 -1
  187. package/dist/es6/loading-dots/lib/LoadingDots.js +2 -2
  188. package/dist/es6/menu/lib/MenuCard.js +1 -1
  189. package/dist/es6/menu/lib/MenuItem.js +1 -1
  190. package/dist/es6/menu/lib/MenuList.js +3 -3
  191. package/dist/es6/menu/lib/MenuOption.js +1 -1
  192. package/dist/es6/modal/lib/ModalBody.js +1 -1
  193. package/dist/es6/modal/lib/ModalCard.js +1 -1
  194. package/dist/es6/modal/lib/ModalHeading.js +1 -1
  195. package/dist/es6/modal/lib/ModalOverflowOverlay.js +1 -1
  196. package/dist/es6/modal/lib/ModalOverlay.js +2 -2
  197. package/dist/es6/popup/lib/PopupBody.js +1 -1
  198. package/dist/es6/popup/lib/PopupCard.js +2 -2
  199. package/dist/es6/popup/lib/PopupCloseIcon.js +1 -1
  200. package/dist/es6/popup/lib/PopupHeading.js +1 -1
  201. package/dist/es6/select/lib/SelectCard.js +1 -1
  202. package/dist/es6/select/lib/SelectInput.js +3 -3
  203. package/dist/es6/switch/lib/Switch.js +7 -7
  204. package/dist/es6/table/lib/Table.js +1 -1
  205. package/dist/es6/table/lib/TableBody.js +1 -1
  206. package/dist/es6/table/lib/TableCaption.js +1 -1
  207. package/dist/es6/table/lib/TableCell.js +1 -1
  208. package/dist/es6/table/lib/TableFooter.js +1 -1
  209. package/dist/es6/table/lib/TableHead.js +1 -1
  210. package/dist/es6/table/lib/TableHeader.js +1 -1
  211. package/dist/es6/table/lib/TableRow.js +1 -1
  212. package/dist/es6/tabs/lib/Tabs.d.ts +666 -0
  213. package/dist/es6/tabs/lib/Tabs.d.ts.map +1 -1
  214. package/dist/es6/tabs/lib/TabsItem.d.ts +44 -0
  215. package/dist/es6/tabs/lib/TabsItem.d.ts.map +1 -1
  216. package/dist/es6/tabs/lib/TabsList.d.ts +45 -1
  217. package/dist/es6/tabs/lib/TabsList.d.ts.map +1 -1
  218. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts +44 -0
  219. package/dist/es6/tabs/lib/TabsOverflowButton.d.ts.map +1 -1
  220. package/dist/es6/tabs/lib/TabsPanel.d.ts +44 -0
  221. package/dist/es6/tabs/lib/TabsPanel.d.ts.map +1 -1
  222. package/dist/es6/tabs/lib/TabsPanels.d.ts +22 -0
  223. package/dist/es6/tabs/lib/TabsPanels.d.ts.map +1 -1
  224. package/dist/es6/tabs/lib/useTabsModel.d.ts +680 -0
  225. package/dist/es6/tabs/lib/useTabsModel.d.ts.map +1 -1
  226. package/dist/es6/text/lib/LabelText.js +6 -6
  227. package/dist/es6/text/lib/Text.js +16 -16
  228. package/dist/es6/text/lib/TypeLevelComponents.js +4 -4
  229. package/dist/es6/text-area/lib/TextArea.js +5 -5
  230. package/dist/es6/text-input/lib/InputGroup.js +6 -6
  231. package/dist/es6/text-input/lib/TextInput.js +5 -5
  232. package/dist/es6/toast/lib/Toast.js +1 -1
  233. package/dist/es6/toast/lib/ToastBody.js +1 -1
  234. package/dist/es6/toast/lib/ToastCloseIcon.js +1 -1
  235. package/dist/es6/toast/lib/ToastIcon.js +1 -1
  236. package/dist/es6/toast/lib/ToastMessage.js +1 -1
  237. package/package.json +4 -4
@@ -26,17 +26,21 @@ export const useOverflowListItemMeasure = createElemPropsHook(useOverflowListMod
26
26
  useMountLayout(() => {
27
27
  if (localRef.current) {
28
28
  const styles = getComputedStyle(localRef.current);
29
- model.events.addItemWidth({
29
+ model.events.addItemSize({
30
30
  id: name,
31
31
  width:
32
32
  localRef.current.offsetWidth +
33
33
  parseFloat(styles.marginLeft) +
34
34
  parseFloat(styles.marginRight),
35
+ height:
36
+ localRef.current.offsetHeight +
37
+ parseFloat(styles.marginTop) +
38
+ parseFloat(styles.marginBottom),
35
39
  });
36
40
  }
37
41
 
38
42
  return () => {
39
- model.events.removeItemWidth({id: name});
43
+ model.events.removeItemSize({id: name});
40
44
  };
41
45
  });
42
46
 
@@ -1,6 +1,11 @@
1
1
  import * as React from 'react';
2
2
 
3
- import {createElemPropsHook, useForkRef, useResizeObserver} from '@workday/canvas-kit-react/common';
3
+ import {
4
+ createElemPropsHook,
5
+ useMountLayout,
6
+ useResizeObserver,
7
+ useLocalRef,
8
+ } from '@workday/canvas-kit-react/common';
4
9
 
5
10
  import {useOverflowListModel} from './useOverflowListModel';
6
11
 
@@ -9,12 +14,21 @@ import {useOverflowListModel} from './useOverflowListModel';
9
14
  * overflow detection.
10
15
  */
11
16
  export const useOverflowListMeasure = createElemPropsHook(useOverflowListModel)((model, ref) => {
12
- const localRef = React.useRef(null);
13
- const {ref: resizeRef} = useResizeObserver({
17
+ const {elementRef, localRef} = useLocalRef(ref as React.Ref<HTMLElement>);
18
+ const gapProperty = model.state.orientation === 'horizontal' ? 'columnGap' : 'rowGap';
19
+
20
+ useResizeObserver({
14
21
  ref: localRef,
15
- onResize: model.events.setContainerWidth,
22
+ onResize: model.events.setContainerSize,
23
+ });
24
+ useMountLayout(() => {
25
+ if (localRef.current) {
26
+ const styles = getComputedStyle(localRef.current);
27
+ model.events.setContainerGap({
28
+ size: styles.gap === 'normal' ? 0 : Number(styles[gapProperty].replace('px', '')),
29
+ });
30
+ }
16
31
  });
17
- const elementRef = useForkRef(ref, resizeRef);
18
32
 
19
33
  return {
20
34
  ref: elementRef,
@@ -5,49 +5,57 @@ import {useSelectionListModel} from './useSelectionListModel';
5
5
  import {Item} from './useBaseListModel';
6
6
 
7
7
  export function getHiddenIds(
8
- containerWidth: number,
9
- overflowTargetWidth: number,
10
- itemWidthCache: Record<string, number>,
8
+ containerSize: number,
9
+ containerGap: number,
10
+ overflowTargetSize: number,
11
+ itemSizeCache: Record<string, number>,
11
12
  selectedIds: string[] | 'all',
12
- items?: Item<any>[]
13
+ items: Item<any>[]
13
14
  ): string[] {
14
15
  /** Allows us to prioritize showing the selected item */
15
16
  let selectedKey: undefined | string;
16
17
  /** Tally of combined item widths. We'll add items that fit until the container is full */
17
- let itemWidth = 0;
18
+ let itemSize = 0;
18
19
  /** Tally ids that won't fit inside the container. These will be used by components to hide
19
20
  * elements that won't fit in the container */
20
21
  const hiddenIds: string[] = [];
22
+ /** Track if gap should be calculated since gap doesn't apply to the width of the first item, only
23
+ * consecutive items */
24
+ let shouldAddGap = false;
25
+
21
26
  if (selectedIds !== 'all' && selectedIds.length) {
22
- if (items?.length) {
27
+ if (items.length) {
23
28
  // If selectedIds[0] is not in items, use the first id from items
24
29
  selectedKey = items.find(item => item.id === selectedIds[0]) ? selectedIds[0] : items[0].id;
25
- } else {
26
- selectedKey = selectedIds[0];
27
30
  }
28
31
  }
29
32
 
30
33
  if (
31
- Object.keys(itemWidthCache).reduce((sum, key) => sum + itemWidthCache[key], 0) <= containerWidth
34
+ Object.keys(itemSizeCache).reduce(
35
+ (sum, key, index) => sum + itemSizeCache[key] + (index > 0 ? containerGap : 0),
36
+ 0
37
+ ) <= containerSize
32
38
  ) {
33
39
  // All items fit, return empty array
34
40
  return [];
35
41
  } else if (selectedKey) {
36
- if (itemWidthCache[selectedKey] + overflowTargetWidth > containerWidth) {
42
+ if (itemSizeCache[selectedKey] + overflowTargetSize > containerSize) {
37
43
  // If the selected item doesn't fit, only show overflow (all items hidden)
38
- return Object.keys(itemWidthCache);
44
+ return Object.keys(itemSizeCache);
39
45
  } else {
40
46
  // at least the selected item and overflow target fit. Update our itemWidth with the sum
41
- itemWidth += itemWidthCache[selectedKey] + overflowTargetWidth;
47
+ itemSize += itemSizeCache[selectedKey] + overflowTargetSize;
48
+ shouldAddGap = true;
42
49
  }
43
50
  } else {
44
- itemWidth += overflowTargetWidth;
51
+ itemSize += overflowTargetSize;
45
52
  }
46
53
 
47
- for (const key in itemWidthCache) {
54
+ for (const key in itemSizeCache) {
48
55
  if (key !== selectedKey) {
49
- itemWidth += itemWidthCache[key];
50
- if (itemWidth > containerWidth) {
56
+ itemSize += itemSizeCache[key] + (shouldAddGap ? containerGap : 0);
57
+ shouldAddGap = true;
58
+ if (itemSize > containerSize) {
51
59
  hiddenIds.push(key);
52
60
  }
53
61
  }
@@ -73,12 +81,13 @@ export const useOverflowListModel = createModelHook({
73
81
  const shouldCalculateOverflow =
74
82
  config.shouldCalculateOverflow === undefined ? true : config.shouldCalculateOverflow;
75
83
  const [hiddenIds, setHiddenIds] = React.useState(config.initialHiddenIds);
76
- const [itemWidthCache, setItemWidthCache] = React.useState<Record<string, number>>({});
77
- const [containerWidth, setContainerWidth] = React.useState(0);
78
- const containerWidthRef = React.useRef(0);
79
- const itemWidthCacheRef = React.useRef(itemWidthCache);
84
+ const [itemSizeCache, setItemSizeCache] = React.useState<Record<string, number>>({});
85
+ const [containerSize, setContainerSize] = React.useState(0);
86
+ const [containerGap, setContainerGap] = React.useState(0);
87
+ const containerSizeRef = React.useRef(0);
88
+ const itemSizeCacheRef = React.useRef(itemSizeCache);
80
89
  const [overflowTargetWidth, setOverflowTargetWidth] = React.useState(0);
81
- const overflowTargetWidthRef = React.useRef(0);
90
+ const overflowTargetSizeRef = React.useRef(0);
82
91
 
83
92
  const internalHiddenIds = shouldCalculateOverflow ? hiddenIds : [];
84
93
 
@@ -94,8 +103,17 @@ export const useOverflowListModel = createModelHook({
94
103
  const state = {
95
104
  ...model.state,
96
105
  hiddenIds: internalHiddenIds,
97
- itemWidthCache,
98
- containerWidth,
106
+ itemSizeCache,
107
+ /**
108
+ * @deprecated Use `itemSizeCache` instead
109
+ */
110
+ itemWidthCache: itemSizeCache,
111
+ containerSize,
112
+ /**
113
+ * @deprecated Use `containerSize` instead
114
+ */
115
+ containerWidth: containerSize,
116
+ containerGap,
99
117
  overflowTargetWidth,
100
118
  };
101
119
 
@@ -104,9 +122,10 @@ export const useOverflowListModel = createModelHook({
104
122
  select(data: Parameters<typeof model.events.select>[0]) {
105
123
  const {selectedIds} = model.selection.select(data.id, state);
106
124
  const ids = getHiddenIds(
107
- containerWidthRef.current,
108
- overflowTargetWidthRef.current,
109
- itemWidthCacheRef.current,
125
+ containerSizeRef.current,
126
+ containerGap,
127
+ overflowTargetSizeRef.current,
128
+ itemSizeCacheRef.current,
110
129
  selectedIds,
111
130
  config.items
112
131
  );
@@ -114,52 +133,93 @@ export const useOverflowListModel = createModelHook({
114
133
 
115
134
  setHiddenIds(ids);
116
135
  },
136
+ setContainerSize(data: {width?: number; height?: number}) {
137
+ containerSizeRef.current =
138
+ model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
139
+ setContainerSize(containerSizeRef.current);
140
+ const ids = getHiddenIds(
141
+ containerSizeRef.current,
142
+ containerGap,
143
+ overflowTargetSizeRef.current,
144
+ itemSizeCacheRef.current,
145
+ state.selectedIds,
146
+ config.items
147
+ );
148
+ setHiddenIds(ids);
149
+ },
150
+ /**
151
+ * @deprecated Use `setContainerSize` instead and pass both `width` and `height`
152
+ */
117
153
  setContainerWidth(data: {width?: number}) {
118
- containerWidthRef.current = data.width || 0;
119
- setContainerWidth(data.width || 0);
154
+ events.setContainerSize({width: data.width, height: 0});
155
+ },
156
+ setContainerGap(data: {size: number}) {
157
+ setContainerGap(data.size);
120
158
 
121
159
  const ids = getHiddenIds(
122
- containerWidthRef.current,
123
- overflowTargetWidthRef.current,
124
- itemWidthCacheRef.current,
160
+ containerSizeRef.current,
161
+ data.size,
162
+ overflowTargetSizeRef.current,
163
+ itemSizeCacheRef.current,
125
164
  state.selectedIds,
126
165
  config.items
127
166
  );
128
167
 
129
168
  setHiddenIds(ids);
130
169
  },
170
+ setOverflowTargetSize(data: {width: number; height: number}) {
171
+ overflowTargetSizeRef.current =
172
+ model.state.orientation === 'horizontal' ? data.width || 0 : data.height || 0;
173
+ setOverflowTargetWidth(overflowTargetSizeRef.current);
174
+ },
175
+
176
+ /**
177
+ *
178
+ * @deprecated `setOverflowTargetWidth` is deprecated. Please use `setOverflowTargetSize` and pass in the `width` and set `height` to `0`.
179
+ */
131
180
  setOverflowTargetWidth(data: {width: number}) {
132
- overflowTargetWidthRef.current = data.width;
133
- setOverflowTargetWidth(data.width);
181
+ overflowTargetSizeRef.current = data.width;
182
+ events.setOverflowTargetSize({width: overflowTargetSizeRef.current, height: 0});
134
183
  },
184
+
185
+ /**
186
+ *
187
+ * @deprecated `addItemWidth` is deprecated. Please use `addItemSize` and set the `width`
188
+ */
135
189
  addItemWidth(data: {id: string; width: number}) {
136
- itemWidthCacheRef.current = {
137
- ...itemWidthCacheRef.current,
138
- [data.id]: data.width,
190
+ events.addItemSize({id: data.id, width: data.width, height: 0});
191
+ },
192
+ addItemSize(data: {id: string; width: number; height: number}) {
193
+ itemSizeCacheRef.current = {
194
+ ...itemSizeCacheRef.current,
195
+ [data.id]: model.state.orientation === 'horizontal' ? data.width : data.height,
139
196
  };
140
197
 
141
- setItemWidthCache(itemWidthCacheRef.current);
198
+
199
+ setItemSizeCache(itemSizeCacheRef.current);
142
200
 
143
201
  const ids = getHiddenIds(
144
- containerWidthRef.current,
145
- overflowTargetWidthRef.current,
146
- itemWidthCacheRef.current,
202
+ containerSizeRef.current,
203
+ containerGap,
204
+ overflowTargetSizeRef.current,
205
+ itemSizeCacheRef.current,
147
206
  state.selectedIds,
148
207
  config.items
149
208
  );
150
209
 
151
210
  setHiddenIds(ids);
152
211
  },
153
- removeItemWidth(data: {id: string}) {
154
- const newCache = {...itemWidthCacheRef.current};
212
+ removeItemSize(data: {id: string}) {
213
+ const newCache = {...itemSizeCacheRef.current};
155
214
  delete newCache[data.id];
156
- itemWidthCacheRef.current = newCache;
157
- setItemWidthCache(itemWidthCacheRef.current);
215
+ itemSizeCacheRef.current = newCache;
216
+ setItemSizeCache(itemSizeCacheRef.current);
158
217
 
159
218
  const ids = getHiddenIds(
160
- containerWidthRef.current,
161
- overflowTargetWidthRef.current,
162
- itemWidthCacheRef.current,
219
+ containerSizeRef.current,
220
+ containerGap,
221
+ overflowTargetSizeRef.current,
222
+ itemSizeCacheRef.current,
163
223
  state.selectedIds !== 'all'
164
224
  ? state.selectedIds.filter(sId => data.id !== sId)
165
225
  : state.selectedIds,
@@ -168,6 +228,13 @@ export const useOverflowListModel = createModelHook({
168
228
 
169
229
  setHiddenIds(ids);
170
230
  },
231
+ /**
232
+ *
233
+ * @deprecated `removeItemWidth` is deprecated. Please use `removeItemSize`.
234
+ */
235
+ removeItemWidth(data: {id: string}) {
236
+ events.removeItemSize({id: data.id});
237
+ },
171
238
  addHiddenKey(data: {id: string}) {
172
239
  setHiddenIds(ids => ids.concat(data.id));
173
240
  },
@@ -24,11 +24,15 @@ export const useOverflowListTarget = createElemPropsHook(useOverflowListModel)((
24
24
  if (localRef.current) {
25
25
  const styles = getComputedStyle(localRef.current);
26
26
 
27
- model.events.setOverflowTargetWidth({
27
+ model.events.setOverflowTargetSize({
28
28
  width:
29
29
  localRef.current.offsetWidth +
30
30
  parseFloat(styles.marginLeft) +
31
31
  parseFloat(styles.marginRight),
32
+ height:
33
+ localRef.current.offsetWidth +
34
+ parseFloat(styles.marginTop) +
35
+ parseFloat(styles.marginBottom),
32
36
  });
33
37
  }
34
38
  });