@fluentui/priority-overflow 9.1.3 → 9.1.4

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "@fluentui/priority-overflow",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 09 Aug 2023 13:11:29 GMT",
5
+ "date": "Fri, 11 Aug 2023 12:10:19 GMT",
6
+ "tag": "@fluentui/priority-overflow_v9.1.4",
7
+ "version": "9.1.4",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "vkozlova@microsoft.com",
12
+ "package": "@fluentui/priority-overflow",
13
+ "commit": "b52b54415c4d663885710fc113166be24d810742",
14
+ "comment": "fix: flickering in Overflow"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 09 Aug 2023 13:16:48 GMT",
6
21
  "tag": "@fluentui/priority-overflow_v9.1.3",
7
22
  "version": "9.1.3",
8
23
  "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 Wed, 09 Aug 2023 13:11:29 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 11 Aug 2023 12:10:19 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [9.1.4](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.4)
8
+
9
+ Fri, 11 Aug 2023 12:10:19 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.3..@fluentui/priority-overflow_v9.1.4)
11
+
12
+ ### Patches
13
+
14
+ - fix: flickering in Overflow ([PR #28767](https://github.com/microsoft/fluentui/pull/28767) by vkozlova@microsoft.com)
15
+
7
16
  ## [9.1.3](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.3)
8
17
 
9
- Wed, 09 Aug 2023 13:11:29 GMT
18
+ Wed, 09 Aug 2023 13:16:48 GMT
10
19
  [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.2..@fluentui/priority-overflow_v9.1.3)
11
20
 
12
21
  ### Patches
@@ -108,9 +108,11 @@ import { createPriorityQueue } from './priorityQueue';
108
108
  const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');
109
109
  const invisibleItemQueue = createPriorityQueue((a, b)=>-1 * compareItems(a, b));
110
110
  const visibleItemQueue = createPriorityQueue(compareItems);
111
- function computeSizeChange(entry) {
112
- const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
113
- return getOffsetSize(entry.element) + dividerWidth;
111
+ function occupiedSize() {
112
+ const totalItemSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
113
+ const totalDividerSize = Object.entries(groupManager.groupVisibility()).reduce((acc, [id, state])=>acc + (state !== 'hidden' && overflowDividers[id] ? getOffsetSize(overflowDividers[id].element) : 0), 0);
114
+ const overflowMenuSize = invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
115
+ return totalItemSize + totalDividerSize + overflowMenuSize;
114
116
  }
115
117
  const showItem = ()=>{
116
118
  const item = getNextItem(invisibleItemQueue, visibleItemQueue);
@@ -125,11 +127,9 @@ import { createPriorityQueue } from './priorityQueue';
125
127
  (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);
126
128
  }
127
129
  }
128
- return computeSizeChange(item);
129
130
  };
130
131
  const hideItem = ()=>{
131
132
  const item = getNextItem(visibleItemQueue, invisibleItemQueue);
132
- const width = computeSizeChange(item);
133
133
  options.onUpdateItemVisibility({
134
134
  item,
135
135
  visible: false
@@ -141,7 +141,6 @@ import { createPriorityQueue } from './priorityQueue';
141
141
  }
142
142
  groupManager.hideItem(item.id, item.groupId);
143
143
  }
144
- return width;
145
144
  };
146
145
  const dispatchOverflowUpdate = ()=>{
147
146
  const visibleItemIds = visibleItemQueue.all();
@@ -159,29 +158,24 @@ import { createPriorityQueue } from './priorityQueue';
159
158
  return false;
160
159
  }
161
160
  sizeCache.clear();
162
- const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
163
- function overflowMenuSize() {
164
- return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
165
- }
166
- const availableSize = getClientSize(container) - totalDividersWidth - options.padding;
161
+ const availableSize = getClientSize(container) - options.padding;
167
162
  // Snapshot of the visible/invisible state to compare for updates
168
163
  const visibleTop = visibleItemQueue.peek();
169
164
  const invisibleTop = invisibleItemQueue.peek();
170
- let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
171
165
  while(compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0){
172
- currentSize -= hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one
166
+ hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one
173
167
  }
174
168
  // Run the show/hide step twice - the first step might not be correct if
175
169
  // it was triggered by a new item being added - new items are always visible by default.
176
170
  for(let i = 0; i < 2; i++){
177
171
  // Add items until available width is filled - can result in overflow
178
- while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size
172
+ while(occupiedSize() < availableSize && invisibleItemQueue.size() > 0 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size
179
173
  ){
180
- currentSize += showItem();
174
+ showItem();
181
175
  }
182
176
  // Remove items until there's no more overflow
183
- while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
184
- currentSize -= hideItem();
177
+ while(occupiedSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
178
+ hideItem();
185
179
  }
186
180
  }
187
181
  // only update when the state of visible/invisible items has changed
@@ -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 // 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 function compareItems(lt: string | null, rt: string | null): number {\n if (!lt || !rt) {\n return 0;\n }\n\n const lte = overflowItems[lt];\n const rte = overflowItems[rt];\n\n if (lte.priority !== rte.priority) {\n return lte.priority > rte.priority ? 1 : -1;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // eslint-disable-next-line no-bitwise\n return lte.element.compareDocumentPosition(rte.element) & positionStatusBit ? 1 : -1;\n }\n\n function getElementAxisSize(\n horizontal: 'clientWidth' | 'offsetWidth',\n vertical: 'clientHeight' | 'offsetHeight',\n el: HTMLElement,\n ): number {\n if (!sizeCache.has(el)) {\n sizeCache.set(el, options.overflowAxis === 'horizontal' ? el[horizontal] : el[vertical]);\n }\n\n return sizeCache.get(el)!;\n }\n\n const getOffsetSize = getElementAxisSize.bind(null, 'offsetWidth', 'offsetHeight');\n const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => -1 * compareItems(a, b));\n\n const visibleItemQueue = createPriorityQueue<string>(compareItems);\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 = getClientSize(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 while (compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0) {\n currentSize -= hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one\n }\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 (\n (currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0) ||\n invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size\n ) {\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":["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","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","a","b","visibleItemQueue","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":"AAAA,SAASA,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,MAAMC,SAAyF,CAAC;QAChG,SAASC,sBAAsBC,OAAe,EAAE;YAC9C,MAAMC,QAAQH,MAAM,CAACE,QAAQ;YAC7B,IAAIC,MAAMC,gBAAgB,CAACC,IAAI,IAAIF,MAAMG,cAAc,CAACD,IAAI,EAAE;gBAC5DN,eAAe,CAACG,QAAQ,GAAG;YAC7B,OAAO,IAAIC,MAAMG,cAAc,CAACD,IAAI,KAAK,GAAG;gBAC1CN,eAAe,CAACG,QAAQ,GAAG;YAC7B,OAAO;gBACLH,eAAe,CAACG,QAAQ,GAAG;YAC7B,CAAC;QACH;QACA,SAASK,eAAeL,OAAe,EAAE;YACvC,OAAOH,eAAe,CAACG,QAAQ,KAAK,aAAaH,eAAe,CAACG,QAAQ,KAAK;QAChF;QACA,OAAO;YACLH,iBAAiB,IAAMA;YACvBS,qBAAoBC,MAAc,EAAEP,OAAe,EAAE;gBACnD,OACEK,eAAeL,YACfF,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACI,GAAG,CAACD,WACnCT,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACD,IAAI,KAAK;YAE5C;YACAM,SAAQF,MAAc,EAAEP,OAAe,EAAE;oBACvCF,SAAOE;;gBAAPF,MAAAA,UAAAA,OAAM,CAACE,WAAAA,QAAQ,iCAAfF,OAAM,CAACE,SAAQ,GAAK;oBAClBI,gBAAgB,IAAIM;oBACpBR,kBAAkB,IAAIQ;gBACxB,CAAC;gBAEDZ,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACO,GAAG,CAACJ;gBACnCR,sBAAsBC;YACxB;YACAY,YAAWL,MAAc,EAAEP,OAAe,EAAE;gBAC1CF,MAAM,CAACE,QAAQ,CAACE,gBAAgB,CAACW,MAAM,CAACN;gBACxCT,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACS,MAAM,CAACN;gBACtCR,sBAAsBC;YACxB;YACAc,UAASP,MAAc,EAAEP,OAAe,EAAE;gBACxCF,MAAM,CAACE,QAAQ,CAACE,gBAAgB,CAACW,MAAM,CAACN;gBACxCT,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACO,GAAG,CAACJ;gBACnCR,sBAAsBC;YACxB;YACAe,UAASR,MAAc,EAAEP,OAAe,EAAE;gBACxCF,MAAM,CAACE,QAAQ,CAACE,gBAAgB,CAACS,GAAG,CAACJ;gBACrCT,MAAM,CAACE,QAAQ,CAACI,cAAc,CAACS,MAAM,CAACN;gBACtCR,sBAAsBC;YACxB;QACF;IACF;IAEA,MAAMgB,eAAepB;IAErB,SAASqB,aAAaC,EAAiB,EAAEC,EAAiB,EAAU;QAClE,IAAI,CAACD,MAAM,CAACC,IAAI;YACd,OAAO;QACT,CAAC;QAED,MAAMC,MAAMpC,aAAa,CAACkC,GAAG;QAC7B,MAAMG,MAAMrC,aAAa,CAACmC,GAAG;QAE7B,IAAIC,IAAIE,QAAQ,KAAKD,IAAIC,QAAQ,EAAE;YACjC,OAAOF,IAAIE,QAAQ,GAAGD,IAAIC,QAAQ,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,MAAMC,oBACJ/C,QAAQG,iBAAiB,KAAK,QAAQ6C,KAAKC,2BAA2B,GAAGD,KAAKE,2BAA2B;QAE3G,sCAAsC;QACtC,OAAON,IAAIO,OAAO,CAACC,uBAAuB,CAACP,IAAIM,OAAO,IAAIJ,oBAAoB,IAAI,CAAC,CAAC;IACtF;IAEA,SAASM,mBACPC,UAAyC,EACzCC,QAAyC,EACzCC,EAAe,EACP;QACR,IAAI,CAAC9D,UAAUsC,GAAG,CAACwB,KAAK;YACtB9D,UAAU+D,GAAG,CAACD,IAAIxD,QAAQE,YAAY,KAAK,eAAesD,EAAE,CAACF,WAAW,GAAGE,EAAE,CAACD,SAAS;QACzF,CAAC;QAED,OAAO7D,UAAUgE,GAAG,CAACF;IACvB;IAEA,MAAMG,gBAAgBN,mBAAmBO,IAAI,CAAC,IAAI,EAAE,eAAe;IACnE,MAAMC,gBAAgBR,mBAAmBO,IAAI,CAAC,IAAI,EAAE,eAAe;IAEnE,MAAME,qBAAqBtE,oBAA4B,CAACuE,GAAGC,IAAM,CAAC,IAAIvB,aAAasB,GAAGC;IAEtF,MAAMC,mBAAmBzE,oBAA4BiD;IAErD,SAASyB,kBAAkBC,KAAwB,EAAE;QACnD,MAAMC,eACJD,MAAM3C,OAAO,IAAIgB,aAAaV,mBAAmB,CAACqC,MAAME,EAAE,EAAEF,MAAM3C,OAAO,KAAKf,gBAAgB,CAAC0D,MAAM3C,OAAO,CAAC,GACzGmC,cAAclD,gBAAgB,CAAC0D,MAAM3C,OAAO,CAAC,CAAC2B,OAAO,IACrD,CAAC;QAEP,OAAOQ,cAAcQ,MAAMhB,OAAO,IAAIiB;IACxC;IAEA,MAAM9B,WAAW,IAAM;QACrB,MAAMgC,OAAOxD,YAAYgD,oBAAoBG;QAC7CjE,QAAQK,sBAAsB,CAAC;YAAEiE;YAAMC,SAAS,IAAI;QAAC;QAErD,IAAID,KAAK9C,OAAO,EAAE;YAChBgB,aAAaF,QAAQ,CAACgC,KAAKD,EAAE,EAAEC,KAAK9C,OAAO;YAE3C,IAAIgB,aAAaV,mBAAmB,CAACwC,KAAKD,EAAE,EAAEC,KAAK9C,OAAO,GAAG;oBAC3Df;gBAAAA,CAAAA,iCAAAA,gBAAgB,CAAC6D,KAAK9C,OAAO,CAAC,cAA9Bf,4CAAAA,KAAAA,IAAAA,+BAAgC0C,QAAQqB,eAAe,CAACnF,iBAAiB;YAC3E,CAAC;QACH,CAAC;QAED,OAAO6E,kBAAkBI;IAC3B;IAEA,MAAM/B,WAAW,IAAM;QACrB,MAAM+B,OAAOxD,YAAYmD,kBAAkBH;QAC3C,MAAMW,QAAQP,kBAAkBI;QAChCtE,QAAQK,sBAAsB,CAAC;YAAEiE;YAAMC,SAAS,KAAK;QAAC;QAEtD,IAAID,KAAK9C,OAAO,EAAE;YAChB,IAAIgB,aAAaV,mBAAmB,CAACwC,KAAKD,EAAE,EAAEC,KAAK9C,OAAO,GAAG;oBAC3Df;gBAAAA,CAAAA,iCAAAA,gBAAgB,CAAC6D,KAAK9C,OAAO,CAAC,cAA9Bf,4CAAAA,KAAAA,IAAAA,+BAAgC0C,QAAQuB,YAAY,CAACrF,kBAAkB,GAAG;YAC5E,CAAC;YAEDmD,aAAaD,QAAQ,CAAC+B,KAAKD,EAAE,EAAEC,KAAK9C,OAAO;QAC7C,CAAC;QAED,OAAOiD;IACT;IAEA,MAAME,yBAAyB,IAAM;QACnC,MAAM/C,iBAAiBqC,iBAAiBW,GAAG;QAC3C,MAAMlD,mBAAmBoC,mBAAmBc,GAAG;QAE/C,MAAMC,eAAejD,eAAekD,GAAG,CAAC/C,CAAAA,SAAUvB,aAAa,CAACuB,OAAO;QACvE,MAAMgD,iBAAiBrD,iBAAiBoD,GAAG,CAAC/C,CAAAA,SAAUvB,aAAa,CAACuB,OAAO;QAE3E/B,QAAQO,gBAAgB,CAAC;YAAEsE;YAAcE;YAAgB1D,iBAAiBmB,aAAanB,eAAe;QAAG;IAC3G;IAEA,MAAM2D,uBAAuB,IAAe;QAC1C,IAAI,CAACpF,WAAW;YACd,OAAO,KAAK;QACd,CAAC;QACDF,UAAUuF,KAAK;QAEf,MAAMC,qBAAqBC,OAAOC,MAAM,CAAC3E,kBACtCqE,GAAG,CAACO,CAAAA,OAASA,KAAK7D,OAAO,GAAGmC,cAAc0B,KAAKlC,OAAO,IAAI,CAAC,EAC3DmC,MAAM,CAAC,CAACC,MAAMC,UAAYD,OAAOC,SAAS;QAE7C,SAASC,mBAAmB;YAC1B,OAAO3B,mBAAmBnC,IAAI,KAAK,KAAK9B,eAAe8D,cAAc9D,gBAAgB,CAAC;QACxF;QAEA,MAAM6F,gBAAgB7B,cAAcjE,aAAasF,qBAAqBlF,QAAQC,OAAO;QAErF,iEAAiE;QACjE,MAAM0F,aAAa1B,iBAAiB2B,IAAI;QACxC,MAAMC,eAAe/B,mBAAmB8B,IAAI;QAE5C,IAAIE,cAAc7B,iBACfW,GAAG,GACHE,GAAG,CAACT,CAAAA,KAAM7D,aAAa,CAAC6D,GAAG,CAAClB,OAAO,EACnC2B,GAAG,CAACnB,eACJ2B,MAAM,CAAC,CAACC,MAAMC,UAAYD,OAAOC,SAAS;QAE7C,MAAO/C,aAAaqB,mBAAmB8B,IAAI,IAAI3B,iBAAiB2B,IAAI,MAAM,EAAG;YAC3EE,eAAevD,YAAY,0FAA0F;QACvH;QAEA,wEAAwE;QACxE,wFAAwF;QACxF,IAAK,IAAIwD,IAAI,GAAGA,IAAI,GAAGA,IAAK;YAC1B,qEAAqE;YACrE,MACE,AAACD,cAAcL,qBAAqBC,iBAAiB5B,mBAAmBnC,IAAI,KAAK,KACjFmC,mBAAmBnC,IAAI,OAAO,EAAE,8FAA8F;aAC9H;gBACAmE,eAAexD;YACjB;YAEA,8CAA8C;YAC9C,MAAOwD,cAAcL,qBAAqBC,iBAAiBzB,iBAAiBtC,IAAI,KAAK3B,QAAQI,cAAc,CAAE;gBAC3G0F,eAAevD;YACjB;QACF;QAEA,oEAAoE;QACpE,OAAO0B,iBAAiB2B,IAAI,OAAOD,cAAc7B,mBAAmB8B,IAAI,OAAOC;IACjF;IAEA,MAAMG,cAA8C,IAAM;QACxD,IAAIhB,0BAA0BjF,eAAe;YAC3CA,gBAAgB,KAAK;YACrB4E;QACF,CAAC;IACH;IAEA,MAAM9D,SAAoCtB,SAASyG;IAEnD,MAAMC,UAAsC,CAACC,mBAAmBC,cAAgB;QAC9EhB,OAAOiB,MAAM,CAACpG,SAASmG;QACvBrG,YAAY,IAAI;QAChBqF,OAAOC,MAAM,CAAC5E,eAAe6F,OAAO,CAAC/B,CAAAA,OAAQL,iBAAiB9C,OAAO,CAACmD,KAAKD,EAAE;QAE7EzE,YAAYsG;QACZxF,eAAeuF,OAAO,CAACrG;IACzB;IAEA,MAAM0G,aAA4C,IAAM;QACtDxG,YAAY,KAAK;QACjBJ,UAAUuF,KAAK;QACfvE,eAAe4F,UAAU;IAC3B;IAEA,MAAMrE,UAAsCqC,CAAAA,OAAQ;QAClD,IAAI9D,aAAa,CAAC8D,KAAKD,EAAE,CAAC,EAAE;YAC1B;QACF,CAAC;QAED7D,aAAa,CAAC8D,KAAKD,EAAE,CAAC,GAAGC;QAEzB,mEAAmE;QACnE,IAAIxE,WAAW;YACb,sDAAsD;YACtD,uEAAuE;YACvE,8CAA8C;YAC9CC,gBAAgB,IAAI;YACpBkE,iBAAiB9C,OAAO,CAACmD,KAAKD,EAAE;QAClC,CAAC;QAED,IAAIC,KAAK9C,OAAO,EAAE;YAChBgB,aAAaP,OAAO,CAACqC,KAAKD,EAAE,EAAEC,KAAK9C,OAAO;YAC1C8C,KAAKnB,OAAO,CAACuB,YAAY,CAACpF,qBAAqBgF,KAAK9C,OAAO;QAC7D,CAAC;QAEDX;IACF;IAEA,MAAM0F,kBAAsD/C,CAAAA,KAAM;QAChE3D,eAAe2D;IACjB;IAEA,MAAMgD,aAA4CC,CAAAA,UAAW;QAC3D,IAAI,CAACA,QAAQjF,OAAO,IAAIf,gBAAgB,CAACgG,QAAQjF,OAAO,CAAC,EAAE;YACzD;QACF,CAAC;QAEDiF,QAAQtD,OAAO,CAACuB,YAAY,CAACpF,qBAAqBmH,QAAQjF,OAAO;QACjEf,gBAAgB,CAACgG,QAAQjF,OAAO,CAAC,GAAGiF;IACtC;IAEA,MAAMC,qBAA4D,IAAM;QACtE7G,eAAeS;IACjB;IAEA,MAAMqG,gBAAkDnF,CAAAA,UAAW;QACjE,IAAI,CAACf,gBAAgB,CAACe,QAAQ,EAAE;YAC9B;QACF,CAAC;QACD,MAAMiF,UAAUhG,gBAAgB,CAACe,QAAQ;QACzC,IAAIiF,QAAQjF,OAAO,EAAE;YACnB,OAAOf,gBAAgB,CAACe,QAAQ;YAChCiF,QAAQtD,OAAO,CAACqB,eAAe,CAAClF;QAClC,CAAC;IACH;IAEA,MAAM8C,aAA4CL,CAAAA,SAAU;QAC1D,IAAI,CAACvB,aAAa,CAACuB,OAAO,EAAE;YAC1B;QACF,CAAC;QAED,MAAMuC,OAAO9D,aAAa,CAACuB,OAAO;QAClCkC,iBAAiB2C,MAAM,CAAC7E;QACxB+B,mBAAmB8C,MAAM,CAAC7E;QAE1B,IAAIuC,KAAK9C,OAAO,EAAE;YAChBgB,aAAaJ,UAAU,CAACkC,KAAKD,EAAE,EAAEC,KAAK9C,OAAO;YAC7C8C,KAAKnB,OAAO,CAACqB,eAAe,CAAClF;QAC/B,CAAC;QAEDI,UAAU2C,MAAM,CAACiC,KAAKnB,OAAO;QAC7B,OAAO3C,aAAa,CAACuB,OAAO;QAC5BlB;IACF;IAEA,OAAO;QACLoB;QACAqE;QACAN;QACAC;QACA7D;QACAvB;QACA0F;QACAG;QACAF;QACAG;IACF;AACF,CAAC"}
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 function compareItems(lt: string | null, rt: string | null): number {\n if (!lt || !rt) {\n return 0;\n }\n\n const lte = overflowItems[lt];\n const rte = overflowItems[rt];\n\n if (lte.priority !== rte.priority) {\n return lte.priority > rte.priority ? 1 : -1;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // eslint-disable-next-line no-bitwise\n return lte.element.compareDocumentPosition(rte.element) & positionStatusBit ? 1 : -1;\n }\n\n function getElementAxisSize(\n horizontal: 'clientWidth' | 'offsetWidth',\n vertical: 'clientHeight' | 'offsetHeight',\n el: HTMLElement,\n ): number {\n if (!sizeCache.has(el)) {\n sizeCache.set(el, options.overflowAxis === 'horizontal' ? el[horizontal] : el[vertical]);\n }\n\n return sizeCache.get(el)!;\n }\n\n const getOffsetSize = getElementAxisSize.bind(null, 'offsetWidth', 'offsetHeight');\n const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => -1 * compareItems(a, b));\n\n const visibleItemQueue = createPriorityQueue<string>(compareItems);\n\n function occupiedSize(): number {\n const totalItemSize = visibleItemQueue\n .all()\n .map(id => overflowItems[id].element)\n .map(getOffsetSize)\n .reduce((prev, current) => prev + current, 0);\n\n const totalDividerSize = Object.entries(groupManager.groupVisibility()).reduce(\n (acc, [id, state]) =>\n acc + (state !== 'hidden' && overflowDividers[id] ? getOffsetSize(overflowDividers[id].element) : 0),\n 0,\n );\n\n const overflowMenuSize = invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n\n return totalItemSize + totalDividerSize + overflowMenuSize;\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\n const hideItem = () => {\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\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\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 availableSize = getClientSize(container) - 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 while (compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0) {\n hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one\n }\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 (\n (occupiedSize() < availableSize && invisibleItemQueue.size() > 0) ||\n invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size\n ) {\n showItem();\n }\n\n // Remove items until there's no more overflow\n while (occupiedSize() > availableSize && visibleItemQueue.size() > options.minimumVisible) {\n 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":["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","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","a","b","visibleItemQueue","occupiedSize","totalItemSize","all","map","id","reduce","prev","current","totalDividerSize","Object","acc","state","overflowMenuSize","item","visible","removeAttribute","setAttribute","dispatchOverflowUpdate","visibleItems","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","observe","observedContainer","userOptions","assign","values","forEach","disconnect","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
@@ -113,9 +113,11 @@ function createOverflowManager() {
113
113
  const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');
114
114
  const invisibleItemQueue = (0, _priorityQueue.createPriorityQueue)((a, b)=>-1 * compareItems(a, b));
115
115
  const visibleItemQueue = (0, _priorityQueue.createPriorityQueue)(compareItems);
116
- function computeSizeChange(entry) {
117
- const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
118
- return getOffsetSize(entry.element) + dividerWidth;
116
+ function occupiedSize() {
117
+ const totalItemSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
118
+ const totalDividerSize = Object.entries(groupManager.groupVisibility()).reduce((acc, [id, state])=>acc + (state !== 'hidden' && overflowDividers[id] ? getOffsetSize(overflowDividers[id].element) : 0), 0);
119
+ const overflowMenuSize = invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
120
+ return totalItemSize + totalDividerSize + overflowMenuSize;
119
121
  }
120
122
  const showItem = ()=>{
121
123
  const item = getNextItem(invisibleItemQueue, visibleItemQueue);
@@ -130,11 +132,9 @@ function createOverflowManager() {
130
132
  (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(_consts.DATA_OVERFLOWING);
131
133
  }
132
134
  }
133
- return computeSizeChange(item);
134
135
  };
135
136
  const hideItem = ()=>{
136
137
  const item = getNextItem(visibleItemQueue, invisibleItemQueue);
137
- const width = computeSizeChange(item);
138
138
  options.onUpdateItemVisibility({
139
139
  item,
140
140
  visible: false
@@ -146,7 +146,6 @@ function createOverflowManager() {
146
146
  }
147
147
  groupManager.hideItem(item.id, item.groupId);
148
148
  }
149
- return width;
150
149
  };
151
150
  const dispatchOverflowUpdate = ()=>{
152
151
  const visibleItemIds = visibleItemQueue.all();
@@ -164,29 +163,24 @@ function createOverflowManager() {
164
163
  return false;
165
164
  }
166
165
  sizeCache.clear();
167
- const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
168
- function overflowMenuSize() {
169
- return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
170
- }
171
- const availableSize = getClientSize(container) - totalDividersWidth - options.padding;
166
+ const availableSize = getClientSize(container) - options.padding;
172
167
  // Snapshot of the visible/invisible state to compare for updates
173
168
  const visibleTop = visibleItemQueue.peek();
174
169
  const invisibleTop = invisibleItemQueue.peek();
175
- let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
176
170
  while(compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0){
177
- currentSize -= hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one
171
+ hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one
178
172
  }
179
173
  // Run the show/hide step twice - the first step might not be correct if
180
174
  // it was triggered by a new item being added - new items are always visible by default.
181
175
  for(let i = 0; i < 2; i++){
182
176
  // Add items until available width is filled - can result in overflow
183
- while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size
177
+ while(occupiedSize() < availableSize && invisibleItemQueue.size() > 0 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size
184
178
  ){
185
- currentSize += showItem();
179
+ showItem();
186
180
  }
187
181
  // Remove items until there's no more overflow
188
- while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
189
- currentSize -= hideItem();
182
+ while(occupiedSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
183
+ hideItem();
190
184
  }
191
185
  }
192
186
  // only update when the state of visible/invisible items has changed
@@ -1 +1 @@
1
- {"version":3,"sources":["overflowManager.js"],"sourcesContent":["import { 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 _groups, _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 function compareItems(lt, rt) {\n if (!lt || !rt) {\n return 0;\n }\n const lte = overflowItems[lt];\n const rte = overflowItems[rt];\n if (lte.priority !== rte.priority) {\n return lte.priority > rte.priority ? 1 : -1;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // eslint-disable-next-line no-bitwise\n return lte.element.compareDocumentPosition(rte.element) & positionStatusBit ? 1 : -1;\n }\n function getElementAxisSize(horizontal, vertical, el) {\n if (!sizeCache.has(el)) {\n sizeCache.set(el, options.overflowAxis === 'horizontal' ? el[horizontal] : el[vertical]);\n }\n return sizeCache.get(el);\n }\n const getOffsetSize = getElementAxisSize.bind(null, 'offsetWidth', 'offsetHeight');\n const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');\n const invisibleItemQueue = createPriorityQueue((a, b)=>-1 * compareItems(a, b));\n const visibleItemQueue = createPriorityQueue(compareItems);\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 = getClientSize(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 while(compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0){\n currentSize -= hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one\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 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size\n ){\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","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","_groups","_groupId","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","createPriorityQueue","a","b","visibleItemQueue","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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"}
1
+ {"version":3,"sources":["overflowManager.js"],"sourcesContent":["import { 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 _groups, _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 function compareItems(lt, rt) {\n if (!lt || !rt) {\n return 0;\n }\n const lte = overflowItems[lt];\n const rte = overflowItems[rt];\n if (lte.priority !== rte.priority) {\n return lte.priority > rte.priority ? 1 : -1;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // eslint-disable-next-line no-bitwise\n return lte.element.compareDocumentPosition(rte.element) & positionStatusBit ? 1 : -1;\n }\n function getElementAxisSize(horizontal, vertical, el) {\n if (!sizeCache.has(el)) {\n sizeCache.set(el, options.overflowAxis === 'horizontal' ? el[horizontal] : el[vertical]);\n }\n return sizeCache.get(el);\n }\n const getOffsetSize = getElementAxisSize.bind(null, 'offsetWidth', 'offsetHeight');\n const getClientSize = getElementAxisSize.bind(null, 'clientWidth', 'clientHeight');\n const invisibleItemQueue = createPriorityQueue((a, b)=>-1 * compareItems(a, b));\n const visibleItemQueue = createPriorityQueue(compareItems);\n function occupiedSize() {\n const totalItemSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);\n const totalDividerSize = Object.entries(groupManager.groupVisibility()).reduce((acc, [id, state])=>acc + (state !== 'hidden' && overflowDividers[id] ? getOffsetSize(overflowDividers[id].element) : 0), 0);\n const overflowMenuSize = invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n return totalItemSize + totalDividerSize + overflowMenuSize;\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 };\n const hideItem = ()=>{\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\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 };\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 availableSize = getClientSize(container) - options.padding;\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n while(compareItems(invisibleItemQueue.peek(), visibleItemQueue.peek()) > 0){\n hideItem(); // hide elements whose priority become smaller than the highest priority of the hidden one\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(occupiedSize() < availableSize && invisibleItemQueue.size() > 0 || invisibleItemQueue.size() === 1 // attempt to show the last invisible item hoping it's size does not exceed overflow menu size\n ){\n showItem();\n }\n // Remove items until there's no more overflow\n while(occupiedSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){\n 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","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","_groups","_groupId","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","createPriorityQueue","a","b","visibleItemQueue","occupiedSize","totalItemSize","all","map","id","reduce","prev","current","totalDividerSize","Object","acc","state","overflowMenuSize","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","setAttribute","dispatchOverflowUpdate","visibleItems","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","debounce","observe","observedContainer","userOptions","assign","values","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.3",
3
+ "version": "9.1.4",
4
4
  "description": "Vanilla JS utilities to implement overflow menus",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",