@fluentui/priority-overflow 0.0.0-nightly-20231115-0405.1 → 0.0.0-nightly-20231117-0406.1
Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
# Change Log - @fluentui/priority-overflow
|
2
2
|
|
3
|
-
This log was last generated on
|
3
|
+
This log was last generated on Fri, 17 Nov 2023 04:20:29 GMT and should not be manually modified.
|
4
4
|
|
5
5
|
<!-- Start content -->
|
6
6
|
|
7
|
-
## [0.0.0-nightly-
|
7
|
+
## [0.0.0-nightly-20231117-0406.1](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v0.0.0-nightly-20231117-0406.1)
|
8
8
|
|
9
|
-
|
10
|
-
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.9..@fluentui/priority-overflow_v0.0.0-nightly-
|
9
|
+
Fri, 17 Nov 2023 04:20:29 GMT
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.9..@fluentui/priority-overflow_v0.0.0-nightly-20231117-0406.1)
|
11
11
|
|
12
12
|
### Changes
|
13
13
|
|
package/lib/overflowManager.js
CHANGED
@@ -32,54 +32,6 @@ import { createPriorityQueue } from './priorityQueue';
|
|
32
32
|
queueToEnqueue.enqueue(nextItem);
|
33
33
|
return overflowItems[nextItem];
|
34
34
|
};
|
35
|
-
const createGroupManager = ()=>{
|
36
|
-
const groupVisibility = {};
|
37
|
-
const groups = {};
|
38
|
-
function updateGroupVisibility(groupId) {
|
39
|
-
const group = groups[groupId];
|
40
|
-
if (group.invisibleItemIds.size && group.visibleItemIds.size) {
|
41
|
-
groupVisibility[groupId] = 'overflow';
|
42
|
-
} else if (group.visibleItemIds.size === 0) {
|
43
|
-
groupVisibility[groupId] = 'hidden';
|
44
|
-
} else {
|
45
|
-
groupVisibility[groupId] = 'visible';
|
46
|
-
}
|
47
|
-
}
|
48
|
-
function isGroupVisible(groupId) {
|
49
|
-
return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';
|
50
|
-
}
|
51
|
-
return {
|
52
|
-
groupVisibility: ()=>groupVisibility,
|
53
|
-
isSingleItemVisible (itemId, groupId) {
|
54
|
-
return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;
|
55
|
-
},
|
56
|
-
addItem (itemId, groupId) {
|
57
|
-
var _groups, _groupId;
|
58
|
-
var _;
|
59
|
-
(_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {
|
60
|
-
visibleItemIds: new Set(),
|
61
|
-
invisibleItemIds: new Set()
|
62
|
-
};
|
63
|
-
groups[groupId].visibleItemIds.add(itemId);
|
64
|
-
updateGroupVisibility(groupId);
|
65
|
-
},
|
66
|
-
removeItem (itemId, groupId) {
|
67
|
-
groups[groupId].invisibleItemIds.delete(itemId);
|
68
|
-
groups[groupId].visibleItemIds.delete(itemId);
|
69
|
-
updateGroupVisibility(groupId);
|
70
|
-
},
|
71
|
-
showItem (itemId, groupId) {
|
72
|
-
groups[groupId].invisibleItemIds.delete(itemId);
|
73
|
-
groups[groupId].visibleItemIds.add(itemId);
|
74
|
-
updateGroupVisibility(groupId);
|
75
|
-
},
|
76
|
-
hideItem (itemId, groupId) {
|
77
|
-
groups[groupId].invisibleItemIds.add(itemId);
|
78
|
-
groups[groupId].visibleItemIds.delete(itemId);
|
79
|
-
updateGroupVisibility(groupId);
|
80
|
-
}
|
81
|
-
};
|
82
|
-
};
|
83
35
|
const groupManager = createGroupManager();
|
84
36
|
function compareItems(lt, rt) {
|
85
37
|
if (!lt || !rt) {
|
@@ -196,11 +148,6 @@ import { createPriorityQueue } from './priorityQueue';
|
|
196
148
|
update();
|
197
149
|
});
|
198
150
|
};
|
199
|
-
const disconnect = ()=>{
|
200
|
-
observing = false;
|
201
|
-
sizeCache.clear();
|
202
|
-
disposeResizeObserver();
|
203
|
-
};
|
204
151
|
const addItem = (item)=>{
|
205
152
|
if (overflowItems[item.id]) {
|
206
153
|
return;
|
@@ -258,6 +205,18 @@ import { createPriorityQueue } from './priorityQueue';
|
|
258
205
|
delete overflowItems[itemId];
|
259
206
|
update();
|
260
207
|
};
|
208
|
+
const disconnect = ()=>{
|
209
|
+
disposeResizeObserver();
|
210
|
+
// reset flags
|
211
|
+
container = undefined;
|
212
|
+
observing = false;
|
213
|
+
forceDispatch = true;
|
214
|
+
// clear all entries
|
215
|
+
Object.keys(overflowItems).forEach((itemId)=>removeItem(itemId));
|
216
|
+
Object.keys(overflowDividers).forEach((dividerId)=>removeDivider(dividerId));
|
217
|
+
removeOverflowMenu();
|
218
|
+
sizeCache.clear();
|
219
|
+
};
|
261
220
|
return {
|
262
221
|
addItem,
|
263
222
|
disconnect,
|
@@ -271,3 +230,51 @@ import { createPriorityQueue } from './priorityQueue';
|
|
271
230
|
removeDivider
|
272
231
|
};
|
273
232
|
}
|
233
|
+
const createGroupManager = ()=>{
|
234
|
+
const groupVisibility = {};
|
235
|
+
const groups = {};
|
236
|
+
function updateGroupVisibility(groupId) {
|
237
|
+
const group = groups[groupId];
|
238
|
+
if (group.invisibleItemIds.size && group.visibleItemIds.size) {
|
239
|
+
groupVisibility[groupId] = 'overflow';
|
240
|
+
} else if (group.visibleItemIds.size === 0) {
|
241
|
+
groupVisibility[groupId] = 'hidden';
|
242
|
+
} else {
|
243
|
+
groupVisibility[groupId] = 'visible';
|
244
|
+
}
|
245
|
+
}
|
246
|
+
function isGroupVisible(groupId) {
|
247
|
+
return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';
|
248
|
+
}
|
249
|
+
return {
|
250
|
+
groupVisibility: ()=>groupVisibility,
|
251
|
+
isSingleItemVisible (itemId, groupId) {
|
252
|
+
return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;
|
253
|
+
},
|
254
|
+
addItem (itemId, groupId) {
|
255
|
+
var _groups, _groupId;
|
256
|
+
var _;
|
257
|
+
(_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {
|
258
|
+
visibleItemIds: new Set(),
|
259
|
+
invisibleItemIds: new Set()
|
260
|
+
};
|
261
|
+
groups[groupId].visibleItemIds.add(itemId);
|
262
|
+
updateGroupVisibility(groupId);
|
263
|
+
},
|
264
|
+
removeItem (itemId, groupId) {
|
265
|
+
groups[groupId].invisibleItemIds.delete(itemId);
|
266
|
+
groups[groupId].visibleItemIds.delete(itemId);
|
267
|
+
updateGroupVisibility(groupId);
|
268
|
+
},
|
269
|
+
showItem (itemId, groupId) {
|
270
|
+
groups[groupId].invisibleItemIds.delete(itemId);
|
271
|
+
groups[groupId].visibleItemIds.add(itemId);
|
272
|
+
updateGroupVisibility(groupId);
|
273
|
+
},
|
274
|
+
hideItem (itemId, groupId) {
|
275
|
+
groups[groupId].invisibleItemIds.add(itemId);
|
276
|
+
groups[groupId].visibleItemIds.delete(itemId);
|
277
|
+
updateGroupVisibility(groupId);
|
278
|
+
}
|
279
|
+
};
|
280
|
+
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["overflowManager.ts"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { observeResize } from './createResizeObserver';\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 let disposeResizeObserver: () => void = () => null;\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 disposeResizeObserver = observeResize(container, entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\n };\n\n const disconnect: OverflowManager['disconnect'] = () => {\n observing = false;\n sizeCache.clear();\n disposeResizeObserver();\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","observeResize","debounce","createPriorityQueue","createOverflowManager","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","disposeResizeObserver","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","entries","acc","state","overflowMenuSize","item","visible","removeAttribute","setAttribute","dispatchOverflowUpdate","visibleItems","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","update","observe","observedContainer","userOptions","assign","values","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 { observeResize } from './createResizeObserver';\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 let disposeResizeObserver: () => void = () => null;\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 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 disposeResizeObserver = observeResize(container, entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\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 const disconnect: OverflowManager['disconnect'] = () => {\n disposeResizeObserver();\n\n // reset flags\n container = undefined;\n observing = false;\n forceDispatch = true;\n\n // clear all entries\n Object.keys(overflowItems).forEach(itemId => removeItem(itemId));\n Object.keys(overflowDividers).forEach(dividerId => removeDivider(dividerId));\n removeOverflowMenu();\n sizeCache.clear();\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\nconst 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"],"names":["DATA_OVERFLOWING","DATA_OVERFLOW_GROUP","observeResize","debounce","createPriorityQueue","createOverflowManager","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","disposeResizeObserver","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","groupManager","createGroupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","has","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","a","b","visibleItemQueue","occupiedSize","totalItemSize","all","map","id","reduce","prev","current","totalDividerSize","Object","entries","groupVisibility","acc","state","overflowMenuSize","size","showItem","item","visible","groupId","isSingleItemVisible","removeAttribute","hideItem","setAttribute","dispatchOverflowUpdate","visibleItemIds","invisibleItemIds","visibleItems","itemId","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","update","observe","observedContainer","userOptions","assign","values","forEach","addItem","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","removeItem","remove","delete","disconnect","keys","dividerId","groups","updateGroupVisibility","group","isGroupVisible","Set","add"],"mappings":"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"}
|
@@ -39,54 +39,6 @@ function createOverflowManager() {
|
|
39
39
|
queueToEnqueue.enqueue(nextItem);
|
40
40
|
return overflowItems[nextItem];
|
41
41
|
};
|
42
|
-
const createGroupManager = ()=>{
|
43
|
-
const groupVisibility = {};
|
44
|
-
const groups = {};
|
45
|
-
function updateGroupVisibility(groupId) {
|
46
|
-
const group = groups[groupId];
|
47
|
-
if (group.invisibleItemIds.size && group.visibleItemIds.size) {
|
48
|
-
groupVisibility[groupId] = 'overflow';
|
49
|
-
} else if (group.visibleItemIds.size === 0) {
|
50
|
-
groupVisibility[groupId] = 'hidden';
|
51
|
-
} else {
|
52
|
-
groupVisibility[groupId] = 'visible';
|
53
|
-
}
|
54
|
-
}
|
55
|
-
function isGroupVisible(groupId) {
|
56
|
-
return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';
|
57
|
-
}
|
58
|
-
return {
|
59
|
-
groupVisibility: ()=>groupVisibility,
|
60
|
-
isSingleItemVisible (itemId, groupId) {
|
61
|
-
return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;
|
62
|
-
},
|
63
|
-
addItem (itemId, groupId) {
|
64
|
-
var _groups, _groupId;
|
65
|
-
var _;
|
66
|
-
(_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {
|
67
|
-
visibleItemIds: new Set(),
|
68
|
-
invisibleItemIds: new Set()
|
69
|
-
};
|
70
|
-
groups[groupId].visibleItemIds.add(itemId);
|
71
|
-
updateGroupVisibility(groupId);
|
72
|
-
},
|
73
|
-
removeItem (itemId, groupId) {
|
74
|
-
groups[groupId].invisibleItemIds.delete(itemId);
|
75
|
-
groups[groupId].visibleItemIds.delete(itemId);
|
76
|
-
updateGroupVisibility(groupId);
|
77
|
-
},
|
78
|
-
showItem (itemId, groupId) {
|
79
|
-
groups[groupId].invisibleItemIds.delete(itemId);
|
80
|
-
groups[groupId].visibleItemIds.add(itemId);
|
81
|
-
updateGroupVisibility(groupId);
|
82
|
-
},
|
83
|
-
hideItem (itemId, groupId) {
|
84
|
-
groups[groupId].invisibleItemIds.add(itemId);
|
85
|
-
groups[groupId].visibleItemIds.delete(itemId);
|
86
|
-
updateGroupVisibility(groupId);
|
87
|
-
}
|
88
|
-
};
|
89
|
-
};
|
90
42
|
const groupManager = createGroupManager();
|
91
43
|
function compareItems(lt, rt) {
|
92
44
|
if (!lt || !rt) {
|
@@ -203,11 +155,6 @@ function createOverflowManager() {
|
|
203
155
|
update();
|
204
156
|
});
|
205
157
|
};
|
206
|
-
const disconnect = ()=>{
|
207
|
-
observing = false;
|
208
|
-
sizeCache.clear();
|
209
|
-
disposeResizeObserver();
|
210
|
-
};
|
211
158
|
const addItem = (item)=>{
|
212
159
|
if (overflowItems[item.id]) {
|
213
160
|
return;
|
@@ -265,6 +212,18 @@ function createOverflowManager() {
|
|
265
212
|
delete overflowItems[itemId];
|
266
213
|
update();
|
267
214
|
};
|
215
|
+
const disconnect = ()=>{
|
216
|
+
disposeResizeObserver();
|
217
|
+
// reset flags
|
218
|
+
container = undefined;
|
219
|
+
observing = false;
|
220
|
+
forceDispatch = true;
|
221
|
+
// clear all entries
|
222
|
+
Object.keys(overflowItems).forEach((itemId)=>removeItem(itemId));
|
223
|
+
Object.keys(overflowDividers).forEach((dividerId)=>removeDivider(dividerId));
|
224
|
+
removeOverflowMenu();
|
225
|
+
sizeCache.clear();
|
226
|
+
};
|
268
227
|
return {
|
269
228
|
addItem,
|
270
229
|
disconnect,
|
@@ -278,3 +237,51 @@ function createOverflowManager() {
|
|
278
237
|
removeDivider
|
279
238
|
};
|
280
239
|
}
|
240
|
+
const createGroupManager = ()=>{
|
241
|
+
const groupVisibility = {};
|
242
|
+
const groups = {};
|
243
|
+
function updateGroupVisibility(groupId) {
|
244
|
+
const group = groups[groupId];
|
245
|
+
if (group.invisibleItemIds.size && group.visibleItemIds.size) {
|
246
|
+
groupVisibility[groupId] = 'overflow';
|
247
|
+
} else if (group.visibleItemIds.size === 0) {
|
248
|
+
groupVisibility[groupId] = 'hidden';
|
249
|
+
} else {
|
250
|
+
groupVisibility[groupId] = 'visible';
|
251
|
+
}
|
252
|
+
}
|
253
|
+
function isGroupVisible(groupId) {
|
254
|
+
return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';
|
255
|
+
}
|
256
|
+
return {
|
257
|
+
groupVisibility: ()=>groupVisibility,
|
258
|
+
isSingleItemVisible (itemId, groupId) {
|
259
|
+
return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;
|
260
|
+
},
|
261
|
+
addItem (itemId, groupId) {
|
262
|
+
var _groups, _groupId;
|
263
|
+
var _;
|
264
|
+
(_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {
|
265
|
+
visibleItemIds: new Set(),
|
266
|
+
invisibleItemIds: new Set()
|
267
|
+
};
|
268
|
+
groups[groupId].visibleItemIds.add(itemId);
|
269
|
+
updateGroupVisibility(groupId);
|
270
|
+
},
|
271
|
+
removeItem (itemId, groupId) {
|
272
|
+
groups[groupId].invisibleItemIds.delete(itemId);
|
273
|
+
groups[groupId].visibleItemIds.delete(itemId);
|
274
|
+
updateGroupVisibility(groupId);
|
275
|
+
},
|
276
|
+
showItem (itemId, groupId) {
|
277
|
+
groups[groupId].invisibleItemIds.delete(itemId);
|
278
|
+
groups[groupId].visibleItemIds.add(itemId);
|
279
|
+
updateGroupVisibility(groupId);
|
280
|
+
},
|
281
|
+
hideItem (itemId, groupId) {
|
282
|
+
groups[groupId].invisibleItemIds.add(itemId);
|
283
|
+
groups[groupId].visibleItemIds.delete(itemId);
|
284
|
+
updateGroupVisibility(groupId);
|
285
|
+
}
|
286
|
+
};
|
287
|
+
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["overflowManager.js"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { observeResize } from './createResizeObserver';\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 let disposeResizeObserver = ()=>null;\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 disposeResizeObserver = observeResize(container, (entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\n };\n const disconnect = ()=>{\n observing = false;\n sizeCache.clear();\n disposeResizeObserver();\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","disposeResizeObserver","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","entries","acc","state","overflowMenuSize","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","setAttribute","dispatchOverflowUpdate","visibleItems","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","update","debounce","observe","observedContainer","userOptions","assign","values","forEach","observeResize","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 { observeResize } from './createResizeObserver';\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 let disposeResizeObserver = ()=>null;\n const getNextItem = (queueToDequeue, queueToEnqueue)=>{\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\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 disposeResizeObserver = observeResize(container, (entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\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 const disconnect = ()=>{\n disposeResizeObserver();\n // reset flags\n container = undefined;\n observing = false;\n forceDispatch = true;\n // clear all entries\n Object.keys(overflowItems).forEach((itemId)=>removeItem(itemId));\n Object.keys(overflowDividers).forEach((dividerId)=>removeDivider(dividerId));\n removeOverflowMenu();\n sizeCache.clear();\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}\nconst 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"],"names":["createOverflowManager","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","disposeResizeObserver","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","groupManager","createGroupManager","compareItems","lt","rt","lte","rte","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","getElementAxisSize","horizontal","vertical","el","has","set","get","getOffsetSize","bind","getClientSize","invisibleItemQueue","createPriorityQueue","a","b","visibleItemQueue","occupiedSize","totalItemSize","all","map","id","reduce","prev","current","totalDividerSize","Object","entries","groupVisibility","acc","state","overflowMenuSize","size","showItem","item","visible","groupId","isSingleItemVisible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","hideItem","setAttribute","dispatchOverflowUpdate","visibleItemIds","invisibleItemIds","visibleItems","itemId","invisibleItems","processOverflowItems","clear","availableSize","visibleTop","peek","invisibleTop","i","forceUpdate","update","debounce","observe","observedContainer","userOptions","assign","values","forEach","observeResize","addItem","DATA_OVERFLOW_GROUP","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","removeItem","remove","delete","disconnect","keys","dividerId","groups","updateGroupVisibility","group","isGroupVisible","_groups","_groupId","_","Set","add"],"mappings":"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"}
|
package/package.json
CHANGED