@fluentui/priority-overflow 9.1.1 → 9.1.2

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.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,52 @@
2
2
  "name": "@fluentui/priority-overflow",
3
3
  "entries": [
4
4
  {
5
- "date": "Mon, 26 Jun 2023 09:51:04 GMT",
5
+ "date": "Tue, 25 Jul 2023 13:26:18 GMT",
6
+ "tag": "@fluentui/priority-overflow_v9.1.2",
7
+ "version": "9.1.2",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "lingfan.gao@microsoft.com",
12
+ "package": "@fluentui/priority-overflow",
13
+ "commit": "d8493a92520cacac29e9fe341a17d3595bc48343",
14
+ "comment": "fix: Overflow update should run show/hide steps twice"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Thu, 20 Jul 2023 18:27:25 GMT",
21
+ "tag": "@fluentui/priority-overflow_v9.1.1",
22
+ "version": "9.1.1",
23
+ "comments": {
24
+ "none": [
25
+ {
26
+ "author": "olfedias@microsoft.com",
27
+ "package": "@fluentui/priority-overflow",
28
+ "commit": "5a4b16715e8e929f11d8113f710e578ca73acaa6",
29
+ "comment": "chore: migrate to monosize"
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Wed, 28 Jun 2023 11:12:22 GMT",
36
+ "tag": "@fluentui/priority-overflow_v9.1.1",
37
+ "version": "9.1.1",
38
+ "comments": {
39
+ "none": [
40
+ {
41
+ "author": "martinhochel@microsoft.com",
42
+ "package": "@fluentui/priority-overflow",
43
+ "commit": "fbe878e9c9785588197481f172c42c2c0a230292",
44
+ "comment": "fix: update .npmignore to unify v8 packages and exclude project.json"
45
+ }
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "date": "Mon, 26 Jun 2023 09:53:53 GMT",
6
51
  "tag": "@fluentui/priority-overflow_v9.1.1",
7
52
  "version": "9.1.1",
8
53
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,21 @@
1
1
  # Change Log - @fluentui/priority-overflow
2
2
 
3
- This log was last generated on Mon, 26 Jun 2023 09:51:04 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 25 Jul 2023 13:26:18 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.1.2](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.2)
8
+
9
+ Tue, 25 Jul 2023 13:26:18 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.1..@fluentui/priority-overflow_v9.1.2)
11
+
12
+ ### Patches
13
+
14
+ - fix: Overflow update should run show/hide steps twice ([PR #28628](https://github.com/microsoft/fluentui/pull/28628) by lingfan.gao@microsoft.com)
15
+
7
16
  ## [9.1.1](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.1)
8
17
 
9
- Mon, 26 Jun 2023 09:51:04 GMT
18
+ Mon, 26 Jun 2023 09:53:53 GMT
10
19
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.0..@fluentui/priority-overflow_v9.1.1)
11
20
 
12
21
  ### Patches
@@ -6,6 +6,9 @@ import { createPriorityQueue } from './priorityQueue';
6
6
  * @internal
7
7
  * @returns overflow manager instance
8
8
  */ export function createOverflowManager() {
9
+ // calls to `offsetWidth or offsetHeight` can happen multiple times in an update
10
+ // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes
11
+ const sizeCache = new Map();
9
12
  let container;
10
13
  let overflowMenu;
11
14
  // Set as true when resize observer is observing
@@ -109,7 +112,12 @@ import { createPriorityQueue } from './priorityQueue';
109
112
  return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
110
113
  });
111
114
  const getOffsetSize = (el)=>{
112
- return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
115
+ if (sizeCache.has(el)) {
116
+ return sizeCache.get(el);
117
+ }
118
+ const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
119
+ sizeCache.set(el, offsetSize);
120
+ return offsetSize;
113
121
  };
114
122
  function computeSizeChange(entry) {
115
123
  const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
@@ -161,6 +169,7 @@ import { createPriorityQueue } from './priorityQueue';
161
169
  if (!container) {
162
170
  return false;
163
171
  }
172
+ sizeCache.clear();
164
173
  const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
165
174
  function overflowMenuSize() {
166
175
  return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
@@ -169,14 +178,18 @@ import { createPriorityQueue } from './priorityQueue';
169
178
  // Snapshot of the visible/invisible state to compare for updates
170
179
  const visibleTop = visibleItemQueue.peek();
171
180
  const invisibleTop = invisibleItemQueue.peek();
172
- let currentWidth = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
173
- // Add items until available width is filled - can result in overflow
174
- while(currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
175
- currentWidth += showItem();
176
- }
177
- // Remove items until there's no more overflow
178
- while(currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
179
- currentWidth -= hideItem();
181
+ let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
182
+ // Run the show/hide step twice - the first step might not be correct if
183
+ // it was triggered by a new item being added - new items are always visible by default.
184
+ for(let i = 0; i < 2; i++){
185
+ // Add items until available width is filled - can result in overflow
186
+ while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
187
+ currentSize += showItem();
188
+ }
189
+ // Remove items until there's no more overflow
190
+ while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
191
+ currentSize -= hideItem();
192
+ }
180
193
  }
181
194
  // only update when the state of visible/invisible items has changed
182
195
  return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;
@@ -197,6 +210,7 @@ import { createPriorityQueue } from './priorityQueue';
197
210
  };
198
211
  const disconnect = ()=>{
199
212
  observing = false;
213
+ sizeCache.clear();
200
214
  resizeObserver.disconnect();
201
215
  };
202
216
  const addItem = (item)=>{
@@ -252,6 +266,7 @@ import { createPriorityQueue } from './priorityQueue';
252
266
  groupManager.removeItem(item.id, item.groupId);
253
267
  item.element.removeAttribute(DATA_OVERFLOW_GROUP);
254
268
  }
269
+ sizeCache.delete(item.element);
255
270
  delete overflowItems[itemId];
256
271
  update();
257
272
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["overflowManager.ts"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue, PriorityQueue } from './priorityQueue';\nimport type {\n OverflowGroupState,\n OverflowItemEntry,\n OverflowManager,\n ObserveOptions,\n OverflowDividerEntry,\n} from './types';\n\n/**\n * @internal\n * @returns overflow manager instance\n */\nexport function createOverflowManager(): OverflowManager {\n let container: HTMLElement | undefined;\n let overflowMenu: HTMLElement | undefined;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options: Required<ObserveOptions> = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: () => undefined,\n onUpdateOverflow: () => undefined,\n };\n\n const overflowItems: Record<string, OverflowItemEntry> = {};\n const overflowDividers: Record<string, OverflowDividerEntry> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\n\n const getNextItem = (queueToDequeue: PriorityQueue<string>, queueToEnqueue: PriorityQueue<string>) => {\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n\n const createGroupManager = () => {\n const groupVisibility: Record<string, OverflowGroupState> = {};\n const groups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n function updateGroupVisibility(groupId: string) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId: string) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: () => groupVisibility,\n isSingleItemVisible(itemId: string, groupId: string) {\n return (\n isGroupVisible(groupId) &&\n groups[groupId].visibleItemIds.has(itemId) &&\n groups[groupId].visibleItemIds.size === 1\n );\n },\n addItem(itemId: string, groupId: string) {\n groups[groupId] ??= {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n };\n };\n\n const groupManager = createGroupManager();\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const visibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const getOffsetSize = (el: HTMLElement) => {\n return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n };\n\n function computeSizeChange(entry: OverflowItemEntry) {\n const dividerWidth =\n entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId]\n ? getOffsetSize(overflowDividers[entry.groupId].element)\n : 0;\n\n return getOffsetSize(entry.element) + dividerWidth;\n }\n\n const showItem = () => {\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({ item, visible: true });\n\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n\n return computeSizeChange(item);\n };\n\n const hideItem = () => {\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({ item, visible: false });\n\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.setAttribute(DATA_OVERFLOWING, '');\n }\n\n groupManager.hideItem(item.id, item.groupId);\n }\n\n return width;\n };\n\n const dispatchOverflowUpdate = () => {\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n\n const visibleItems = visibleItemIds.map(itemId => overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map(itemId => overflowItems[itemId]);\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility: groupManager.groupVisibility() });\n };\n\n const processOverflowItems = (): boolean => {\n if (!container) {\n return false;\n }\n const totalDividersWidth = Object.values(overflowDividers)\n .map(dvdr => (dvdr.groupId ? getOffsetSize(dvdr.element) : 0))\n .reduce((prev, current) => prev + current, 0);\n\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n let currentWidth = visibleItemQueue\n .all()\n .map(id => overflowItems[id].element)\n .map(getOffsetSize)\n .reduce((prev, current) => prev + current, 0);\n\n // Add items until available width is filled - can result in overflow\n while (currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0) {\n currentWidth += showItem();\n }\n\n // Remove items until there's no more overflow\n while (currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible) {\n currentWidth -= hideItem();\n }\n\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n\n const update: OverflowManager['update'] = debounce(forceUpdate);\n\n const observe: OverflowManager['observe'] = (observedContainer, userOptions) => {\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));\n\n container = observedContainer;\n resizeObserver.observe(container);\n };\n\n const disconnect: OverflowManager['disconnect'] = () => {\n observing = false;\n resizeObserver.disconnect();\n };\n\n const addItem: OverflowManager['addItem'] = item => {\n if (overflowItems[item.id]) {\n return;\n }\n\n overflowItems[item.id] = item;\n\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const addDivider: OverflowManager['addDivider'] = divider => {\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\n };\n\n const removeDivider: OverflowManager['removeDivider'] = groupId => {\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n\n const removeItem: OverflowManager['removeItem'] = itemId => {\n if (!overflowItems[itemId]) {\n return;\n }\n\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n\n delete overflowItems[itemId];\n update();\n };\n\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider,\n };\n}\n"],"names":["groups","groupId","DATA_OVERFLOWING","DATA_OVERFLOW_GROUP","debounce","createPriorityQueue","createOverflowManager","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","updateGroupVisibility","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","offsetWidth","offsetHeight","computeSizeChange","entry","dividerWidth","id","item","visible","removeAttribute","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentWidth","forceUpdate","observe","observedContainer","userOptions","assign","forEach","disconnect","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
1
+ {"version":3,"sources":["overflowManager.ts"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue, PriorityQueue } from './priorityQueue';\nimport type {\n OverflowGroupState,\n OverflowItemEntry,\n OverflowManager,\n ObserveOptions,\n OverflowDividerEntry,\n} from './types';\n\n/**\n * @internal\n * @returns overflow manager instance\n */\nexport function createOverflowManager(): OverflowManager {\n // calls to `offsetWidth or offsetHeight` can happen multiple times in an update\n // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes\n const sizeCache = new Map<HTMLElement, number>();\n let container: HTMLElement | undefined;\n let overflowMenu: HTMLElement | undefined;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options: Required<ObserveOptions> = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: () => undefined,\n onUpdateOverflow: () => undefined,\n };\n\n const overflowItems: Record<string, OverflowItemEntry> = {};\n const overflowDividers: Record<string, OverflowDividerEntry> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\n\n const getNextItem = (queueToDequeue: PriorityQueue<string>, queueToEnqueue: PriorityQueue<string>) => {\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n\n const createGroupManager = () => {\n const groupVisibility: Record<string, OverflowGroupState> = {};\n const groups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n function updateGroupVisibility(groupId: string) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId: string) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: () => groupVisibility,\n isSingleItemVisible(itemId: string, groupId: string) {\n return (\n isGroupVisible(groupId) &&\n groups[groupId].visibleItemIds.has(itemId) &&\n groups[groupId].visibleItemIds.size === 1\n );\n },\n addItem(itemId: string, groupId: string) {\n groups[groupId] ??= {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n };\n };\n\n const groupManager = createGroupManager();\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const visibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const getOffsetSize = (el: HTMLElement) => {\n if (sizeCache.has(el)) {\n return sizeCache.get(el)!;\n }\n\n const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n sizeCache.set(el, offsetSize);\n return offsetSize;\n };\n\n function computeSizeChange(entry: OverflowItemEntry) {\n const dividerWidth =\n entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId]\n ? getOffsetSize(overflowDividers[entry.groupId].element)\n : 0;\n\n return getOffsetSize(entry.element) + dividerWidth;\n }\n\n const showItem = () => {\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({ item, visible: true });\n\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n\n return computeSizeChange(item);\n };\n\n const hideItem = () => {\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({ item, visible: false });\n\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.setAttribute(DATA_OVERFLOWING, '');\n }\n\n groupManager.hideItem(item.id, item.groupId);\n }\n\n return width;\n };\n\n const dispatchOverflowUpdate = () => {\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n\n const visibleItems = visibleItemIds.map(itemId => overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map(itemId => overflowItems[itemId]);\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility: groupManager.groupVisibility() });\n };\n\n const processOverflowItems = (): boolean => {\n if (!container) {\n return false;\n }\n sizeCache.clear();\n\n const totalDividersWidth = Object.values(overflowDividers)\n .map(dvdr => (dvdr.groupId ? getOffsetSize(dvdr.element) : 0))\n .reduce((prev, current) => prev + current, 0);\n\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n let currentSize = visibleItemQueue\n .all()\n .map(id => overflowItems[id].element)\n .map(getOffsetSize)\n .reduce((prev, current) => prev + current, 0);\n\n // Run the show/hide step twice - the first step might not be correct if\n // it was triggered by a new item being added - new items are always visible by default.\n for (let i = 0; i < 2; i++) {\n // Add items until available width is filled - can result in overflow\n while (currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0) {\n currentSize += showItem();\n }\n\n // Remove items until there's no more overflow\n while (currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible) {\n currentSize -= hideItem();\n }\n }\n\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n\n const update: OverflowManager['update'] = debounce(forceUpdate);\n\n const observe: OverflowManager['observe'] = (observedContainer, userOptions) => {\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));\n\n container = observedContainer;\n resizeObserver.observe(container);\n };\n\n const disconnect: OverflowManager['disconnect'] = () => {\n observing = false;\n sizeCache.clear();\n resizeObserver.disconnect();\n };\n\n const addItem: OverflowManager['addItem'] = item => {\n if (overflowItems[item.id]) {\n return;\n }\n\n overflowItems[item.id] = item;\n\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const addDivider: OverflowManager['addDivider'] = divider => {\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\n };\n\n const removeDivider: OverflowManager['removeDivider'] = groupId => {\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n\n const removeItem: OverflowManager['removeItem'] = itemId => {\n if (!overflowItems[itemId]) {\n return;\n }\n\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n\n sizeCache.delete(item.element);\n delete overflowItems[itemId];\n update();\n };\n\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider,\n };\n}\n"],"names":["groups","groupId","DATA_OVERFLOWING","DATA_OVERFLOW_GROUP","debounce","createPriorityQueue","createOverflowManager","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","updateGroupVisibility","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","get","offsetSize","offsetWidth","offsetHeight","set","computeSizeChange","entry","dividerWidth","id","item","visible","removeAttribute","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","clear","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentSize","i","forceUpdate","observe","observedContainer","userOptions","assign","forEach","disconnect","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"IA6EQA,SAAOC;AA7Ef,SAASC,gBAAgB,EAAEC,mBAAmB,QAAQ,WAAW;AACjE,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,mBAAmB,QAAuB,kBAAkB;AASrE;;;CAGC,GACD,OAAO,SAASC,wBAAyC;IACvD,gFAAgF;IAChF,2FAA2F;IAC3F,MAAMC,YAAY,IAAIC;IACtB,IAAIC;IACJ,IAAIC;IACJ,gDAAgD;IAChD,IAAIC,YAAY,KAAK;IACrB,+FAA+F;IAC/F,kDAAkD;IAClD,IAAIC,gBAAgB,IAAI;IACxB,MAAMC,UAAoC;QACxCC,SAAS;QACTC,cAAc;QACdC,mBAAmB;QACnBC,gBAAgB;QAChBC,wBAAwB,IAAMC;QAC9BC,kBAAkB,IAAMD;IAC1B;IAEA,MAAME,gBAAmD,CAAC;IAC1D,MAAMC,mBAAyD,CAAC;IAChE,MAAMC,iBAAiB,IAAIC,eAAeC,CAAAA,UAAW;QACnD,IAAI,CAACA,OAAO,CAAC,EAAE,IAAI,CAAChB,WAAW;YAC7B;QACF,CAAC;QAEDiB;IACF;IAEA,MAAMC,cAAc,CAACC,gBAAuCC,iBAA0C;QACpG,MAAMC,WAAWF,eAAeG,OAAO;QACvCF,eAAeG,OAAO,CAACF;QACvB,OAAOT,aAAa,CAACS,SAAS;IAChC;IAEA,MAAMG,qBAAqB,IAAM;QAC/B,MAAMC,kBAAsD,CAAC;QAC7D,MAAMlC,SAAyF,CAAC;QAChG,SAASmC,sBAAsBlC,OAAe,EAAE;YAC9C,MAAMmC,QAAQpC,MAAM,CAACC,QAAQ;YAC7B,IAAImC,MAAMC,gBAAgB,CAACC,IAAI,IAAIF,MAAMG,cAAc,CAACD,IAAI,EAAE;gBAC5DJ,eAAe,CAACjC,QAAQ,GAAG;YAC7B,OAAO,IAAImC,MAAMG,cAAc,CAACD,IAAI,KAAK,GAAG;gBAC1CJ,eAAe,CAACjC,QAAQ,GAAG;YAC7B,OAAO;gBACLiC,eAAe,CAACjC,QAAQ,GAAG;YAC7B,CAAC;QACH;QACA,SAASuC,eAAevC,OAAe,EAAE;YACvC,OAAOiC,eAAe,CAACjC,QAAQ,KAAK,aAAaiC,eAAe,CAACjC,QAAQ,KAAK;QAChF;QACA,OAAO;YACLiC,iBAAiB,IAAMA;YACvBO,qBAAoBC,MAAc,EAAEzC,OAAe,EAAE;gBACnD,OACEuC,eAAevC,YACfD,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACI,GAAG,CAACD,WACnC1C,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACD,IAAI,KAAK;YAE5C;YACAM,SAAQF,MAAc,EAAEzC,OAAe,EAAE;;gBACvCD,MAAAA,UAAAA,OAAM,CAACC,WAAAA,QAAQ,iCAAfD,OAAM,CAACC,SAAQ,GAAK;oBAClBsC,gBAAgB,IAAIM;oBACpBR,kBAAkB,IAAIQ;gBACxB,CAAC;gBAED7C,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACO,GAAG,CAACJ;gBACnCP,sBAAsBlC;YACxB;YACA8C,YAAWL,MAAc,EAAEzC,OAAe,EAAE;gBAC1CD,MAAM,CAACC,QAAQ,CAACoC,gBAAgB,CAACW,MAAM,CAACN;gBACxC1C,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACS,MAAM,CAACN;gBACtCP,sBAAsBlC;YACxB;YACAgD,UAASP,MAAc,EAAEzC,OAAe,EAAE;gBACxCD,MAAM,CAACC,QAAQ,CAACoC,gBAAgB,CAACW,MAAM,CAACN;gBACxC1C,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACO,GAAG,CAACJ;gBACnCP,sBAAsBlC;YACxB;YACAiD,UAASR,MAAc,EAAEzC,OAAe,EAAE;gBACxCD,MAAM,CAACC,QAAQ,CAACoC,gBAAgB,CAACS,GAAG,CAACJ;gBACrC1C,MAAM,CAACC,QAAQ,CAACsC,cAAc,CAACS,MAAM,CAACN;gBACtCP,sBAAsBlC;YACxB;QACF;IACF;IAEA,MAAMkD,eAAelB;IAErB,MAAMmB,qBAAqB/C,oBAA4B,CAACgD,GAAGC,IAAM;QAC/D,MAAMC,QAAQlC,aAAa,CAACgC,EAAE;QAC9B,MAAMG,QAAQnC,aAAa,CAACiC,EAAE;QAC9B,0CAA0C;QAC1C,MAAMG,WAAWD,MAAMC,QAAQ,GAAGF,MAAME,QAAQ;QAChD,IAAIA,aAAa,GAAG;YAClB,OAAOA;QACT,CAAC;QAED,MAAMC,oBACJ7C,QAAQG,iBAAiB,KAAK,QAAQ2C,KAAKC,2BAA2B,GAAGD,KAAKE,2BAA2B;QAE3G,gCAAgC;QAChC,sCAAsC;QACtC,OAAON,MAAMO,OAAO,CAACC,uBAAuB,CAACP,MAAMM,OAAO,IAAIJ,oBAAoB,CAAC,IAAI,CAAC;IAC1F;IAEA,MAAMM,mBAAmB3D,oBAA4B,CAACgD,GAAGC,IAAM;QAC7D,MAAMC,QAAQlC,aAAa,CAACgC,EAAE;QAC9B,MAAMG,QAAQnC,aAAa,CAACiC,EAAE;QAC9B,yCAAyC;QACzC,MAAMG,WAAWF,MAAME,QAAQ,GAAGD,MAAMC,QAAQ;QAEhD,IAAIA,aAAa,GAAG;YAClB,OAAOA;QACT,CAAC;QAED,MAAMC,oBACJ7C,QAAQG,iBAAiB,KAAK,QAAQ2C,KAAKE,2BAA2B,GAAGF,KAAKC,2BAA2B;QAE3G,gCAAgC;QAChC,sCAAsC;QACtC,OAAOL,MAAMO,OAAO,CAACC,uBAAuB,CAACP,MAAMM,OAAO,IAAIJ,oBAAoB,CAAC,IAAI,CAAC;IAC1F;IAEA,MAAMO,gBAAgB,CAACC,KAAoB;QACzC,IAAI3D,UAAUoC,GAAG,CAACuB,KAAK;YACrB,OAAO3D,UAAU4D,GAAG,CAACD;QACvB,CAAC;QAED,MAAME,aAAavD,QAAQE,YAAY,KAAK,eAAemD,GAAGG,WAAW,GAAGH,GAAGI,YAAY;QAC3F/D,UAAUgE,GAAG,CAACL,IAAIE;QAClB,OAAOA;IACT;IAEA,SAASI,kBAAkBC,KAAwB,EAAE;QACnD,MAAMC,eACJD,MAAMxE,OAAO,IAAIkD,aAAaV,mBAAmB,CAACgC,MAAME,EAAE,EAAEF,MAAMxE,OAAO,KAAKqB,gBAAgB,CAACmD,MAAMxE,OAAO,CAAC,GACzGgE,cAAc3C,gBAAgB,CAACmD,MAAMxE,OAAO,CAAC,CAAC6D,OAAO,IACrD,CAAC;QAEP,OAAOG,cAAcQ,MAAMX,OAAO,IAAIY;IACxC;IAEA,MAAMzB,WAAW,IAAM;QACrB,MAAM2B,OAAOjD,YAAYyB,oBAAoBY;QAC7CnD,QAAQK,sBAAsB,CAAC;YAAE0D;YAAMC,SAAS,IAAI;QAAC;QAErD,IAAID,KAAK3E,OAAO,EAAE;YAChBkD,aAAaF,QAAQ,CAAC2B,KAAKD,EAAE,EAAEC,KAAK3E,OAAO;YAE3C,IAAIkD,aAAaV,mBAAmB,CAACmC,KAAKD,EAAE,EAAEC,KAAK3E,OAAO,GAAG;oBAC3DqB;gBAAAA,CAAAA,iCAAAA,gBAAgB,CAACsD,KAAK3E,OAAO,CAAC,cAA9BqB,4CAAAA,KAAAA,IAAAA,+BAAgCwC,QAAQgB,eAAe,CAAC5E,iBAAiB;YAC3E,CAAC;QACH,CAAC;QAED,OAAOsE,kBAAkBI;IAC3B;IAEA,MAAM1B,WAAW,IAAM;QACrB,MAAM0B,OAAOjD,YAAYqC,kBAAkBZ;QAC3C,MAAM2B,QAAQP,kBAAkBI;QAChC/D,QAAQK,sBAAsB,CAAC;YAAE0D;YAAMC,SAAS,KAAK;QAAC;QAEtD,IAAID,KAAK3E,OAAO,EAAE;YAChB,IAAIkD,aAAaV,mBAAmB,CAACmC,KAAKD,EAAE,EAAEC,KAAK3E,OAAO,GAAG;oBAC3DqB;gBAAAA,CAAAA,iCAAAA,gBAAgB,CAACsD,KAAK3E,OAAO,CAAC,cAA9BqB,4CAAAA,KAAAA,IAAAA,+BAAgCwC,QAAQkB,YAAY,CAAC9E,kBAAkB,GAAG;YAC5E,CAAC;YAEDiD,aAAaD,QAAQ,CAAC0B,KAAKD,EAAE,EAAEC,KAAK3E,OAAO;QAC7C,CAAC;QAED,OAAO8E;IACT;IAEA,MAAME,yBAAyB,IAAM;QACnC,MAAM1C,iBAAiByB,iBAAiBkB,GAAG;QAC3C,MAAM7C,mBAAmBe,mBAAmB8B,GAAG;QAE/C,MAAMC,eAAe5C,eAAe6C,GAAG,CAAC1C,CAAAA,SAAUrB,aAAa,CAACqB,OAAO;QACvE,MAAM2C,iBAAiBhD,iBAAiB+C,GAAG,CAAC1C,CAAAA,SAAUrB,aAAa,CAACqB,OAAO;QAE3E7B,QAAQO,gBAAgB,CAAC;YAAE+D;YAAcE;YAAgBnD,iBAAiBiB,aAAajB,eAAe;QAAG;IAC3G;IAEA,MAAMoD,uBAAuB,IAAe;QAC1C,IAAI,CAAC7E,WAAW;YACd,OAAO,KAAK;QACd,CAAC;QACDF,UAAUgF,KAAK;QAEf,MAAMC,qBAAqBC,OAAOC,MAAM,CAACpE,kBACtC8D,GAAG,CAACO,CAAAA,OAASA,KAAK1F,OAAO,GAAGgE,cAAc0B,KAAK7B,OAAO,IAAI,CAAC,EAC3D8B,MAAM,CAAC,CAACC,MAAMC,UAAYD,OAAOC,SAAS;QAE7C,SAASC,mBAAmB;YAC1B,OAAO3C,mBAAmBd,IAAI,KAAK,KAAK5B,eAAeuD,cAAcvD,gBAAgB,CAAC;QACxF;QAEA,MAAMsF,gBAAgB/B,cAAcxD,aAAa+E,qBAAqB3E,QAAQC,OAAO;QAErF,iEAAiE;QACjE,MAAMmF,aAAajC,iBAAiBkC,IAAI;QACxC,MAAMC,eAAe/C,mBAAmB8C,IAAI;QAE5C,IAAIE,cAAcpC,iBACfkB,GAAG,GACHE,GAAG,CAACT,CAAAA,KAAMtD,aAAa,CAACsD,GAAG,CAACb,OAAO,EACnCsB,GAAG,CAACnB,eACJ2B,MAAM,CAAC,CAACC,MAAMC,UAAYD,OAAOC,SAAS;QAE7C,wEAAwE;QACxE,wFAAwF;QACxF,IAAK,IAAIO,IAAI,GAAGA,IAAI,GAAGA,IAAK;YAC1B,qEAAqE;YACrE,MAAOD,cAAcL,qBAAqBC,iBAAiB5C,mBAAmBd,IAAI,KAAK,EAAG;gBACxF8D,eAAenD;YACjB;YAEA,8CAA8C;YAC9C,MAAOmD,cAAcL,qBAAqBC,iBAAiBhC,iBAAiB1B,IAAI,KAAKzB,QAAQI,cAAc,CAAE;gBAC3GmF,eAAelD;YACjB;QACF;QAEA,oEAAoE;QACpE,OAAOc,iBAAiBkC,IAAI,OAAOD,cAAc7C,mBAAmB8C,IAAI,OAAOC;IACjF;IAEA,MAAMG,cAA8C,IAAM;QACxD,IAAIhB,0BAA0B1E,eAAe;YAC3CA,gBAAgB,KAAK;YACrBqE;QACF,CAAC;IACH;IAEA,MAAMvD,SAAoCtB,SAASkG;IAEnD,MAAMC,UAAsC,CAACC,mBAAmBC,cAAgB;QAC9EhB,OAAOiB,MAAM,CAAC7F,SAAS4F;QACvB9F,YAAY,IAAI;QAChB8E,OAAOC,MAAM,CAACrE,eAAesF,OAAO,CAAC/B,CAAAA,OAAQZ,iBAAiBhC,OAAO,CAAC4C,KAAKD,EAAE;QAE7ElE,YAAY+F;QACZjF,eAAegF,OAAO,CAAC9F;IACzB;IAEA,MAAMmG,aAA4C,IAAM;QACtDjG,YAAY,KAAK;QACjBJ,UAAUgF,KAAK;QACfhE,eAAeqF,UAAU;IAC3B;IAEA,MAAMhE,UAAsCgC,CAAAA,OAAQ;QAClD,IAAIvD,aAAa,CAACuD,KAAKD,EAAE,CAAC,EAAE;YAC1B;QACF,CAAC;QAEDtD,aAAa,CAACuD,KAAKD,EAAE,CAAC,GAAGC;QAEzB,mEAAmE;QACnE,IAAIjE,WAAW;YACb,sDAAsD;YACtD,uEAAuE;YACvE,8CAA8C;YAC9CC,gBAAgB,IAAI;YACpBoD,iBAAiBhC,OAAO,CAAC4C,KAAKD,EAAE;QAClC,CAAC;QAED,IAAIC,KAAK3E,OAAO,EAAE;YAChBkD,aAAaP,OAAO,CAACgC,KAAKD,EAAE,EAAEC,KAAK3E,OAAO;YAC1C2E,KAAKd,OAAO,CAACkB,YAAY,CAAC7E,qBAAqByE,KAAK3E,OAAO;QAC7D,CAAC;QAEDyB;IACF;IAEA,MAAMmF,kBAAsD3C,CAAAA,KAAM;QAChExD,eAAewD;IACjB;IAEA,MAAM4C,aAA4CC,CAAAA,UAAW;QAC3D,IAAI,CAACA,QAAQ9G,OAAO,IAAIqB,gBAAgB,CAACyF,QAAQ9G,OAAO,CAAC,EAAE;YACzD;QACF,CAAC;QAED8G,QAAQjD,OAAO,CAACkB,YAAY,CAAC7E,qBAAqB4G,QAAQ9G,OAAO;QACjEqB,gBAAgB,CAACyF,QAAQ9G,OAAO,CAAC,GAAG8G;IACtC;IAEA,MAAMC,qBAA4D,IAAM;QACtEtG,eAAeS;IACjB;IAEA,MAAM8F,gBAAkDhH,CAAAA,UAAW;QACjE,IAAI,CAACqB,gBAAgB,CAACrB,QAAQ,EAAE;YAC9B;QACF,CAAC;QACD,MAAM8G,UAAUzF,gBAAgB,CAACrB,QAAQ;QACzC,IAAI8G,QAAQ9G,OAAO,EAAE;YACnB,OAAOqB,gBAAgB,CAACrB,QAAQ;YAChC8G,QAAQjD,OAAO,CAACgB,eAAe,CAAC3E;QAClC,CAAC;IACH;IAEA,MAAM4C,aAA4CL,CAAAA,SAAU;QAC1D,IAAI,CAACrB,aAAa,CAACqB,OAAO,EAAE;YAC1B;QACF,CAAC;QAED,MAAMkC,OAAOvD,aAAa,CAACqB,OAAO;QAClCsB,iBAAiBkD,MAAM,CAACxE;QACxBU,mBAAmB8D,MAAM,CAACxE;QAE1B,IAAIkC,KAAK3E,OAAO,EAAE;YAChBkD,aAAaJ,UAAU,CAAC6B,KAAKD,EAAE,EAAEC,KAAK3E,OAAO;YAC7C2E,KAAKd,OAAO,CAACgB,eAAe,CAAC3E;QAC/B,CAAC;QAEDI,UAAUyC,MAAM,CAAC4B,KAAKd,OAAO;QAC7B,OAAOzC,aAAa,CAACqB,OAAO;QAC5BhB;IACF;IAEA,OAAO;QACLkB;QACAgE;QACAN;QACAC;QACAxD;QACArB;QACAmF;QACAG;QACAF;QACAG;IACF;AACF,CAAC"}
@@ -11,6 +11,9 @@ const _debounce = require("./debounce");
11
11
  const _priorityQueue = require("./priorityQueue");
12
12
  var _groups, _groupId;
13
13
  function createOverflowManager() {
14
+ // calls to `offsetWidth or offsetHeight` can happen multiple times in an update
15
+ // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes
16
+ const sizeCache = new Map();
14
17
  let container;
15
18
  let overflowMenu;
16
19
  // Set as true when resize observer is observing
@@ -114,7 +117,12 @@ function createOverflowManager() {
114
117
  return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
115
118
  });
116
119
  const getOffsetSize = (el)=>{
117
- return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
120
+ if (sizeCache.has(el)) {
121
+ return sizeCache.get(el);
122
+ }
123
+ const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
124
+ sizeCache.set(el, offsetSize);
125
+ return offsetSize;
118
126
  };
119
127
  function computeSizeChange(entry) {
120
128
  const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
@@ -166,6 +174,7 @@ function createOverflowManager() {
166
174
  if (!container) {
167
175
  return false;
168
176
  }
177
+ sizeCache.clear();
169
178
  const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
170
179
  function overflowMenuSize() {
171
180
  return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
@@ -174,14 +183,18 @@ function createOverflowManager() {
174
183
  // Snapshot of the visible/invisible state to compare for updates
175
184
  const visibleTop = visibleItemQueue.peek();
176
185
  const invisibleTop = invisibleItemQueue.peek();
177
- let currentWidth = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
178
- // Add items until available width is filled - can result in overflow
179
- while(currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
180
- currentWidth += showItem();
181
- }
182
- // Remove items until there's no more overflow
183
- while(currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
184
- currentWidth -= hideItem();
186
+ let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
187
+ // Run the show/hide step twice - the first step might not be correct if
188
+ // it was triggered by a new item being added - new items are always visible by default.
189
+ for(let i = 0; i < 2; i++){
190
+ // Add items until available width is filled - can result in overflow
191
+ while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
192
+ currentSize += showItem();
193
+ }
194
+ // Remove items until there's no more overflow
195
+ while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
196
+ currentSize -= hideItem();
197
+ }
185
198
  }
186
199
  // only update when the state of visible/invisible items has changed
187
200
  return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;
@@ -202,6 +215,7 @@ function createOverflowManager() {
202
215
  };
203
216
  const disconnect = ()=>{
204
217
  observing = false;
218
+ sizeCache.clear();
205
219
  resizeObserver.disconnect();
206
220
  };
207
221
  const addItem = (item)=>{
@@ -257,6 +271,7 @@ function createOverflowManager() {
257
271
  groupManager.removeItem(item.id, item.groupId);
258
272
  item.element.removeAttribute(_consts.DATA_OVERFLOW_GROUP);
259
273
  }
274
+ sizeCache.delete(item.element);
260
275
  delete overflowItems[itemId];
261
276
  update();
262
277
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["overflowManager.js"],"sourcesContent":["var _groups, _groupId;\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\n/**\n * @internal\n * @returns overflow manager instance\n */ export function createOverflowManager() {\n let container;\n let overflowMenu;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: ()=>undefined,\n onUpdateOverflow: ()=>undefined\n };\n const overflowItems = {};\n const overflowDividers = {};\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\n const getNextItem = (queueToDequeue, queueToEnqueue)=>{\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n const createGroupManager = ()=>{\n const groupVisibility = {};\n const groups = {};\n function updateGroupVisibility(groupId) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: ()=>groupVisibility,\n isSingleItemVisible (itemId, groupId) {\n return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;\n },\n addItem (itemId, groupId) {\n var _;\n (_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {\n visibleItemIds: new Set(),\n invisibleItemIds: new Set()\n };\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n }\n };\n };\n const groupManager = createGroupManager();\n const invisibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const visibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const getOffsetSize = (el)=>{\n return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n };\n function computeSizeChange(entry) {\n const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;\n return getOffsetSize(entry.element) + dividerWidth;\n }\n const showItem = ()=>{\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({\n item,\n visible: true\n });\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n return computeSizeChange(item);\n };\n const hideItem = ()=>{\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({\n item,\n visible: false\n });\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.setAttribute(DATA_OVERFLOWING, '');\n }\n groupManager.hideItem(item.id, item.groupId);\n }\n return width;\n };\n const dispatchOverflowUpdate = ()=>{\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n const visibleItems = visibleItemIds.map((itemId)=>overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map((itemId)=>overflowItems[itemId]);\n options.onUpdateOverflow({\n visibleItems,\n invisibleItems,\n groupVisibility: groupManager.groupVisibility()\n });\n };\n const processOverflowItems = ()=>{\n if (!container) {\n return false;\n }\n const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n let currentWidth = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);\n // Add items until available width is filled - can result in overflow\n while(currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){\n currentWidth += showItem();\n }\n // Remove items until there's no more overflow\n while(currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){\n currentWidth -= hideItem();\n }\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n const forceUpdate = ()=>{\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n const update = debounce(forceUpdate);\n const observe = (observedContainer, userOptions)=>{\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach((item)=>visibleItemQueue.enqueue(item.id));\n container = observedContainer;\n resizeObserver.observe(container);\n };\n const disconnect = ()=>{\n observing = false;\n resizeObserver.disconnect();\n };\n const addItem = (item)=>{\n if (overflowItems[item.id]) {\n return;\n }\n overflowItems[item.id] = item;\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n update();\n };\n const addOverflowMenu = (el)=>{\n overflowMenu = el;\n };\n const addDivider = (divider)=>{\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n const removeOverflowMenu = ()=>{\n overflowMenu = undefined;\n };\n const removeDivider = (groupId)=>{\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n const removeItem = (itemId)=>{\n if (!overflowItems[itemId]) {\n return;\n }\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n delete overflowItems[itemId];\n update();\n };\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider\n };\n}\n"],"names":["createOverflowManager","_groups","_groupId","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","createPriorityQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","offsetWidth","offsetHeight","computeSizeChange","entry","dividerWidth","id","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentWidth","forceUpdate","debounce","observe","observedContainer","userOptions","assign","forEach","disconnect","DATA_OVERFLOW_GROUP","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
1
+ {"version":3,"sources":["overflowManager.js"],"sourcesContent":["var _groups, _groupId;\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\n/**\n * @internal\n * @returns overflow manager instance\n */ export function createOverflowManager() {\n // calls to `offsetWidth or offsetHeight` can happen multiple times in an update\n // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes\n const sizeCache = new Map();\n let container;\n let overflowMenu;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: ()=>undefined,\n onUpdateOverflow: ()=>undefined\n };\n const overflowItems = {};\n const overflowDividers = {};\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\n const getNextItem = (queueToDequeue, queueToEnqueue)=>{\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n const createGroupManager = ()=>{\n const groupVisibility = {};\n const groups = {};\n function updateGroupVisibility(groupId) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: ()=>groupVisibility,\n isSingleItemVisible (itemId, groupId) {\n return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;\n },\n addItem (itemId, groupId) {\n var _;\n (_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {\n visibleItemIds: new Set(),\n invisibleItemIds: new Set()\n };\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n }\n };\n };\n const groupManager = createGroupManager();\n const invisibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const visibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const getOffsetSize = (el)=>{\n if (sizeCache.has(el)) {\n return sizeCache.get(el);\n }\n const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n sizeCache.set(el, offsetSize);\n return offsetSize;\n };\n function computeSizeChange(entry) {\n const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;\n return getOffsetSize(entry.element) + dividerWidth;\n }\n const showItem = ()=>{\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({\n item,\n visible: true\n });\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n return computeSizeChange(item);\n };\n const hideItem = ()=>{\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({\n item,\n visible: false\n });\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.setAttribute(DATA_OVERFLOWING, '');\n }\n groupManager.hideItem(item.id, item.groupId);\n }\n return width;\n };\n const dispatchOverflowUpdate = ()=>{\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n const visibleItems = visibleItemIds.map((itemId)=>overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map((itemId)=>overflowItems[itemId]);\n options.onUpdateOverflow({\n visibleItems,\n invisibleItems,\n groupVisibility: groupManager.groupVisibility()\n });\n };\n const processOverflowItems = ()=>{\n if (!container) {\n return false;\n }\n sizeCache.clear();\n const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);\n // Run the show/hide step twice - the first step might not be correct if\n // it was triggered by a new item being added - new items are always visible by default.\n for(let i = 0; i < 2; i++){\n // Add items until available width is filled - can result in overflow\n while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){\n currentSize += showItem();\n }\n // Remove items until there's no more overflow\n while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){\n currentSize -= hideItem();\n }\n }\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n const forceUpdate = ()=>{\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n const update = debounce(forceUpdate);\n const observe = (observedContainer, userOptions)=>{\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach((item)=>visibleItemQueue.enqueue(item.id));\n container = observedContainer;\n resizeObserver.observe(container);\n };\n const disconnect = ()=>{\n observing = false;\n sizeCache.clear();\n resizeObserver.disconnect();\n };\n const addItem = (item)=>{\n if (overflowItems[item.id]) {\n return;\n }\n overflowItems[item.id] = item;\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n update();\n };\n const addOverflowMenu = (el)=>{\n overflowMenu = el;\n };\n const addDivider = (divider)=>{\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n const removeOverflowMenu = ()=>{\n overflowMenu = undefined;\n };\n const removeDivider = (groupId)=>{\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n const removeItem = (itemId)=>{\n if (!overflowItems[itemId]) {\n return;\n }\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n sizeCache.delete(item.element);\n delete overflowItems[itemId];\n update();\n };\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider\n };\n}\n"],"names":["createOverflowManager","_groups","_groupId","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","createPriorityQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","get","offsetSize","offsetWidth","offsetHeight","set","computeSizeChange","entry","dividerWidth","id","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","clear","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentSize","i","forceUpdate","debounce","observe","observedContainer","userOptions","assign","forEach","disconnect","DATA_OVERFLOW_GROUP","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/priority-overflow",
3
- "version": "9.1.1",
3
+ "version": "9.1.2",
4
4
  "description": "Vanilla JS utilities to implement overflow menus",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -13,7 +13,7 @@
13
13
  "license": "MIT",
14
14
  "scripts": {
15
15
  "build": "just-scripts build",
16
- "bundle-size": "bundle-size measure",
16
+ "bundle-size": "monosize measure",
17
17
  "clean": "just-scripts clean",
18
18
  "code-style": "just-scripts code-style",
19
19
  "just": "just-scripts",