@fluentui/priority-overflow 9.1.1 → 9.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +46 -1
- package/CHANGELOG.md +11 -2
- package/lib/overflowManager.js +24 -9
- package/lib/overflowManager.js.map +1 -1
- package/lib-commonjs/overflowManager.js +24 -9
- package/lib-commonjs/overflowManager.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.json
CHANGED
@@ -2,7 +2,52 @@
|
|
2
2
|
"name": "@fluentui/priority-overflow",
|
3
3
|
"entries": [
|
4
4
|
{
|
5
|
-
"date": "
|
5
|
+
"date": "Tue, 25 Jul 2023 13:26:18 GMT",
|
6
|
+
"tag": "@fluentui/priority-overflow_v9.1.2",
|
7
|
+
"version": "9.1.2",
|
8
|
+
"comments": {
|
9
|
+
"patch": [
|
10
|
+
{
|
11
|
+
"author": "lingfan.gao@microsoft.com",
|
12
|
+
"package": "@fluentui/priority-overflow",
|
13
|
+
"commit": "d8493a92520cacac29e9fe341a17d3595bc48343",
|
14
|
+
"comment": "fix: Overflow update should run show/hide steps twice"
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"date": "Thu, 20 Jul 2023 18:27:25 GMT",
|
21
|
+
"tag": "@fluentui/priority-overflow_v9.1.1",
|
22
|
+
"version": "9.1.1",
|
23
|
+
"comments": {
|
24
|
+
"none": [
|
25
|
+
{
|
26
|
+
"author": "olfedias@microsoft.com",
|
27
|
+
"package": "@fluentui/priority-overflow",
|
28
|
+
"commit": "5a4b16715e8e929f11d8113f710e578ca73acaa6",
|
29
|
+
"comment": "chore: migrate to monosize"
|
30
|
+
}
|
31
|
+
]
|
32
|
+
}
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"date": "Wed, 28 Jun 2023 11:12:22 GMT",
|
36
|
+
"tag": "@fluentui/priority-overflow_v9.1.1",
|
37
|
+
"version": "9.1.1",
|
38
|
+
"comments": {
|
39
|
+
"none": [
|
40
|
+
{
|
41
|
+
"author": "martinhochel@microsoft.com",
|
42
|
+
"package": "@fluentui/priority-overflow",
|
43
|
+
"commit": "fbe878e9c9785588197481f172c42c2c0a230292",
|
44
|
+
"comment": "fix: update .npmignore to unify v8 packages and exclude project.json"
|
45
|
+
}
|
46
|
+
]
|
47
|
+
}
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"date": "Mon, 26 Jun 2023 09:53:53 GMT",
|
6
51
|
"tag": "@fluentui/priority-overflow_v9.1.1",
|
7
52
|
"version": "9.1.1",
|
8
53
|
"comments": {
|
package/CHANGELOG.md
CHANGED
@@ -1,12 +1,21 @@
|
|
1
1
|
# Change Log - @fluentui/priority-overflow
|
2
2
|
|
3
|
-
This log was last generated on
|
3
|
+
This log was last generated on Tue, 25 Jul 2023 13:26:18 GMT and should not be manually modified.
|
4
4
|
|
5
5
|
<!-- Start content -->
|
6
6
|
|
7
|
+
## [9.1.2](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.2)
|
8
|
+
|
9
|
+
Tue, 25 Jul 2023 13:26:18 GMT
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.1..@fluentui/priority-overflow_v9.1.2)
|
11
|
+
|
12
|
+
### Patches
|
13
|
+
|
14
|
+
- fix: Overflow update should run show/hide steps twice ([PR #28628](https://github.com/microsoft/fluentui/pull/28628) by lingfan.gao@microsoft.com)
|
15
|
+
|
7
16
|
## [9.1.1](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.1)
|
8
17
|
|
9
|
-
Mon, 26 Jun 2023 09:
|
18
|
+
Mon, 26 Jun 2023 09:53:53 GMT
|
10
19
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.1.0..@fluentui/priority-overflow_v9.1.1)
|
11
20
|
|
12
21
|
### Patches
|
package/lib/overflowManager.js
CHANGED
@@ -6,6 +6,9 @@ import { createPriorityQueue } from './priorityQueue';
|
|
6
6
|
* @internal
|
7
7
|
* @returns overflow manager instance
|
8
8
|
*/ export function createOverflowManager() {
|
9
|
+
// calls to `offsetWidth or offsetHeight` can happen multiple times in an update
|
10
|
+
// Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes
|
11
|
+
const sizeCache = new Map();
|
9
12
|
let container;
|
10
13
|
let overflowMenu;
|
11
14
|
// Set as true when resize observer is observing
|
@@ -109,7 +112,12 @@ import { createPriorityQueue } from './priorityQueue';
|
|
109
112
|
return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
|
110
113
|
});
|
111
114
|
const getOffsetSize = (el)=>{
|
112
|
-
|
115
|
+
if (sizeCache.has(el)) {
|
116
|
+
return sizeCache.get(el);
|
117
|
+
}
|
118
|
+
const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
|
119
|
+
sizeCache.set(el, offsetSize);
|
120
|
+
return offsetSize;
|
113
121
|
};
|
114
122
|
function computeSizeChange(entry) {
|
115
123
|
const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
|
@@ -161,6 +169,7 @@ import { createPriorityQueue } from './priorityQueue';
|
|
161
169
|
if (!container) {
|
162
170
|
return false;
|
163
171
|
}
|
172
|
+
sizeCache.clear();
|
164
173
|
const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
|
165
174
|
function overflowMenuSize() {
|
166
175
|
return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
|
@@ -169,14 +178,18 @@ import { createPriorityQueue } from './priorityQueue';
|
|
169
178
|
// Snapshot of the visible/invisible state to compare for updates
|
170
179
|
const visibleTop = visibleItemQueue.peek();
|
171
180
|
const invisibleTop = invisibleItemQueue.peek();
|
172
|
-
let
|
173
|
-
//
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
181
|
+
let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
|
182
|
+
// Run the show/hide step twice - the first step might not be correct if
|
183
|
+
// it was triggered by a new item being added - new items are always visible by default.
|
184
|
+
for(let i = 0; i < 2; i++){
|
185
|
+
// Add items until available width is filled - can result in overflow
|
186
|
+
while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
|
187
|
+
currentSize += showItem();
|
188
|
+
}
|
189
|
+
// Remove items until there's no more overflow
|
190
|
+
while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
|
191
|
+
currentSize -= hideItem();
|
192
|
+
}
|
180
193
|
}
|
181
194
|
// only update when the state of visible/invisible items has changed
|
182
195
|
return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;
|
@@ -197,6 +210,7 @@ import { createPriorityQueue } from './priorityQueue';
|
|
197
210
|
};
|
198
211
|
const disconnect = ()=>{
|
199
212
|
observing = false;
|
213
|
+
sizeCache.clear();
|
200
214
|
resizeObserver.disconnect();
|
201
215
|
};
|
202
216
|
const addItem = (item)=>{
|
@@ -252,6 +266,7 @@ import { createPriorityQueue } from './priorityQueue';
|
|
252
266
|
groupManager.removeItem(item.id, item.groupId);
|
253
267
|
item.element.removeAttribute(DATA_OVERFLOW_GROUP);
|
254
268
|
}
|
269
|
+
sizeCache.delete(item.element);
|
255
270
|
delete overflowItems[itemId];
|
256
271
|
update();
|
257
272
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["overflowManager.ts"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue, PriorityQueue } from './priorityQueue';\nimport type {\n OverflowGroupState,\n OverflowItemEntry,\n OverflowManager,\n ObserveOptions,\n OverflowDividerEntry,\n} from './types';\n\n/**\n * @internal\n * @returns overflow manager instance\n */\nexport function createOverflowManager(): OverflowManager {\n let container: HTMLElement | undefined;\n let overflowMenu: HTMLElement | undefined;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options: Required<ObserveOptions> = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: () => undefined,\n onUpdateOverflow: () => undefined,\n };\n\n const overflowItems: Record<string, OverflowItemEntry> = {};\n const overflowDividers: Record<string, OverflowDividerEntry> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\n\n const getNextItem = (queueToDequeue: PriorityQueue<string>, queueToEnqueue: PriorityQueue<string>) => {\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n\n const createGroupManager = () => {\n const groupVisibility: Record<string, OverflowGroupState> = {};\n const groups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n function updateGroupVisibility(groupId: string) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId: string) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: () => groupVisibility,\n isSingleItemVisible(itemId: string, groupId: string) {\n return (\n isGroupVisible(groupId) &&\n groups[groupId].visibleItemIds.has(itemId) &&\n groups[groupId].visibleItemIds.size === 1\n );\n },\n addItem(itemId: string, groupId: string) {\n groups[groupId] ??= {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n };\n };\n\n const groupManager = createGroupManager();\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const visibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const getOffsetSize = (el: HTMLElement) => {\n return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n };\n\n function computeSizeChange(entry: OverflowItemEntry) {\n const dividerWidth =\n entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId]\n ? getOffsetSize(overflowDividers[entry.groupId].element)\n : 0;\n\n return getOffsetSize(entry.element) + dividerWidth;\n }\n\n const showItem = () => {\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({ item, visible: true });\n\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n\n return computeSizeChange(item);\n };\n\n const hideItem = () => {\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({ item, visible: false });\n\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.setAttribute(DATA_OVERFLOWING, '');\n }\n\n groupManager.hideItem(item.id, item.groupId);\n }\n\n return width;\n };\n\n const dispatchOverflowUpdate = () => {\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n\n const visibleItems = visibleItemIds.map(itemId => overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map(itemId => overflowItems[itemId]);\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility: groupManager.groupVisibility() });\n };\n\n const processOverflowItems = (): boolean => {\n if (!container) {\n return false;\n }\n const totalDividersWidth = Object.values(overflowDividers)\n .map(dvdr => (dvdr.groupId ? getOffsetSize(dvdr.element) : 0))\n .reduce((prev, current) => prev + current, 0);\n\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n let currentWidth = visibleItemQueue\n .all()\n .map(id => overflowItems[id].element)\n .map(getOffsetSize)\n .reduce((prev, current) => prev + current, 0);\n\n // Add items until available width is filled - can result in overflow\n while (currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0) {\n currentWidth += showItem();\n }\n\n // Remove items until there's no more overflow\n while (currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible) {\n currentWidth -= hideItem();\n }\n\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n\n const update: OverflowManager['update'] = debounce(forceUpdate);\n\n const observe: OverflowManager['observe'] = (observedContainer, userOptions) => {\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));\n\n container = observedContainer;\n resizeObserver.observe(container);\n };\n\n const disconnect: OverflowManager['disconnect'] = () => {\n observing = false;\n resizeObserver.disconnect();\n };\n\n const addItem: OverflowManager['addItem'] = item => {\n if (overflowItems[item.id]) {\n return;\n }\n\n overflowItems[item.id] = item;\n\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const addDivider: OverflowManager['addDivider'] = divider => {\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\n };\n\n const removeDivider: OverflowManager['removeDivider'] = groupId => {\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n\n const removeItem: OverflowManager['removeItem'] = itemId => {\n if (!overflowItems[itemId]) {\n return;\n }\n\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n\n delete overflowItems[itemId];\n update();\n };\n\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider,\n };\n}\n"],"names":["groups","groupId","DATA_OVERFLOWING","DATA_OVERFLOW_GROUP","debounce","createPriorityQueue","createOverflowManager","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","updateGroupVisibility","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","offsetWidth","offsetHeight","computeSizeChange","entry","dividerWidth","id","item","visible","removeAttribute","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentWidth","forceUpdate","observe","observedContainer","userOptions","assign","forEach","disconnect","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["overflowManager.ts"],"sourcesContent":["import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue, PriorityQueue } from './priorityQueue';\nimport type {\n OverflowGroupState,\n OverflowItemEntry,\n OverflowManager,\n ObserveOptions,\n OverflowDividerEntry,\n} from './types';\n\n/**\n * @internal\n * @returns overflow manager instance\n */\nexport function createOverflowManager(): OverflowManager {\n // calls to `offsetWidth or offsetHeight` can happen multiple times in an update\n // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes\n const sizeCache = new Map<HTMLElement, number>();\n let container: HTMLElement | undefined;\n let overflowMenu: HTMLElement | undefined;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options: Required<ObserveOptions> = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: () => undefined,\n onUpdateOverflow: () => undefined,\n };\n\n const overflowItems: Record<string, OverflowItemEntry> = {};\n const overflowDividers: Record<string, OverflowDividerEntry> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\n\n const getNextItem = (queueToDequeue: PriorityQueue<string>, queueToEnqueue: PriorityQueue<string>) => {\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n\n const createGroupManager = () => {\n const groupVisibility: Record<string, OverflowGroupState> = {};\n const groups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n function updateGroupVisibility(groupId: string) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId: string) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: () => groupVisibility,\n isSingleItemVisible(itemId: string, groupId: string) {\n return (\n isGroupVisible(groupId) &&\n groups[groupId].visibleItemIds.has(itemId) &&\n groups[groupId].visibleItemIds.size === 1\n );\n },\n addItem(itemId: string, groupId: string) {\n groups[groupId] ??= {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem(itemId: string, groupId: string) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n };\n };\n\n const groupManager = createGroupManager();\n\n const invisibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const visibleItemQueue = createPriorityQueue<string>((a, b) => {\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n\n if (priority !== 0) {\n return priority;\n }\n\n const positionStatusBit =\n options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n\n const getOffsetSize = (el: HTMLElement) => {\n if (sizeCache.has(el)) {\n return sizeCache.get(el)!;\n }\n\n const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n sizeCache.set(el, offsetSize);\n return offsetSize;\n };\n\n function computeSizeChange(entry: OverflowItemEntry) {\n const dividerWidth =\n entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId]\n ? getOffsetSize(overflowDividers[entry.groupId].element)\n : 0;\n\n return getOffsetSize(entry.element) + dividerWidth;\n }\n\n const showItem = () => {\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({ item, visible: true });\n\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n\n return computeSizeChange(item);\n };\n\n const hideItem = () => {\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({ item, visible: false });\n\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n overflowDividers[item.groupId]?.element.setAttribute(DATA_OVERFLOWING, '');\n }\n\n groupManager.hideItem(item.id, item.groupId);\n }\n\n return width;\n };\n\n const dispatchOverflowUpdate = () => {\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n\n const visibleItems = visibleItemIds.map(itemId => overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map(itemId => overflowItems[itemId]);\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility: groupManager.groupVisibility() });\n };\n\n const processOverflowItems = (): boolean => {\n if (!container) {\n return false;\n }\n sizeCache.clear();\n\n const totalDividersWidth = Object.values(overflowDividers)\n .map(dvdr => (dvdr.groupId ? getOffsetSize(dvdr.element) : 0))\n .reduce((prev, current) => prev + current, 0);\n\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n let currentSize = visibleItemQueue\n .all()\n .map(id => overflowItems[id].element)\n .map(getOffsetSize)\n .reduce((prev, current) => prev + current, 0);\n\n // Run the show/hide step twice - the first step might not be correct if\n // it was triggered by a new item being added - new items are always visible by default.\n for (let i = 0; i < 2; i++) {\n // Add items until available width is filled - can result in overflow\n while (currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0) {\n currentSize += showItem();\n }\n\n // Remove items until there's no more overflow\n while (currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible) {\n currentSize -= hideItem();\n }\n }\n\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n\n const update: OverflowManager['update'] = debounce(forceUpdate);\n\n const observe: OverflowManager['observe'] = (observedContainer, userOptions) => {\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));\n\n container = observedContainer;\n resizeObserver.observe(container);\n };\n\n const disconnect: OverflowManager['disconnect'] = () => {\n observing = false;\n sizeCache.clear();\n resizeObserver.disconnect();\n };\n\n const addItem: OverflowManager['addItem'] = item => {\n if (overflowItems[item.id]) {\n return;\n }\n\n overflowItems[item.id] = item;\n\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const addDivider: OverflowManager['addDivider'] = divider => {\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\n };\n\n const removeDivider: OverflowManager['removeDivider'] = groupId => {\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n\n const removeItem: OverflowManager['removeItem'] = itemId => {\n if (!overflowItems[itemId]) {\n return;\n }\n\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n\n sizeCache.delete(item.element);\n delete overflowItems[itemId];\n update();\n };\n\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider,\n };\n}\n"],"names":["groups","groupId","DATA_OVERFLOWING","DATA_OVERFLOW_GROUP","debounce","createPriorityQueue","createOverflowManager","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","updateGroupVisibility","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","get","offsetSize","offsetWidth","offsetHeight","set","computeSizeChange","entry","dividerWidth","id","item","visible","removeAttribute","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","clear","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentSize","i","forceUpdate","observe","observedContainer","userOptions","assign","forEach","disconnect","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
|
@@ -11,6 +11,9 @@ const _debounce = require("./debounce");
|
|
11
11
|
const _priorityQueue = require("./priorityQueue");
|
12
12
|
var _groups, _groupId;
|
13
13
|
function createOverflowManager() {
|
14
|
+
// calls to `offsetWidth or offsetHeight` can happen multiple times in an update
|
15
|
+
// Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes
|
16
|
+
const sizeCache = new Map();
|
14
17
|
let container;
|
15
18
|
let overflowMenu;
|
16
19
|
// Set as true when resize observer is observing
|
@@ -114,7 +117,12 @@ function createOverflowManager() {
|
|
114
117
|
return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
|
115
118
|
});
|
116
119
|
const getOffsetSize = (el)=>{
|
117
|
-
|
120
|
+
if (sizeCache.has(el)) {
|
121
|
+
return sizeCache.get(el);
|
122
|
+
}
|
123
|
+
const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
|
124
|
+
sizeCache.set(el, offsetSize);
|
125
|
+
return offsetSize;
|
118
126
|
};
|
119
127
|
function computeSizeChange(entry) {
|
120
128
|
const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
|
@@ -166,6 +174,7 @@ function createOverflowManager() {
|
|
166
174
|
if (!container) {
|
167
175
|
return false;
|
168
176
|
}
|
177
|
+
sizeCache.clear();
|
169
178
|
const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
|
170
179
|
function overflowMenuSize() {
|
171
180
|
return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;
|
@@ -174,14 +183,18 @@ function createOverflowManager() {
|
|
174
183
|
// Snapshot of the visible/invisible state to compare for updates
|
175
184
|
const visibleTop = visibleItemQueue.peek();
|
176
185
|
const invisibleTop = invisibleItemQueue.peek();
|
177
|
-
let
|
178
|
-
//
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
186
|
+
let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
|
187
|
+
// Run the show/hide step twice - the first step might not be correct if
|
188
|
+
// it was triggered by a new item being added - new items are always visible by default.
|
189
|
+
for(let i = 0; i < 2; i++){
|
190
|
+
// Add items until available width is filled - can result in overflow
|
191
|
+
while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){
|
192
|
+
currentSize += showItem();
|
193
|
+
}
|
194
|
+
// Remove items until there's no more overflow
|
195
|
+
while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){
|
196
|
+
currentSize -= hideItem();
|
197
|
+
}
|
185
198
|
}
|
186
199
|
// only update when the state of visible/invisible items has changed
|
187
200
|
return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;
|
@@ -202,6 +215,7 @@ function createOverflowManager() {
|
|
202
215
|
};
|
203
216
|
const disconnect = ()=>{
|
204
217
|
observing = false;
|
218
|
+
sizeCache.clear();
|
205
219
|
resizeObserver.disconnect();
|
206
220
|
};
|
207
221
|
const addItem = (item)=>{
|
@@ -257,6 +271,7 @@ function createOverflowManager() {
|
|
257
271
|
groupManager.removeItem(item.id, item.groupId);
|
258
272
|
item.element.removeAttribute(_consts.DATA_OVERFLOW_GROUP);
|
259
273
|
}
|
274
|
+
sizeCache.delete(item.element);
|
260
275
|
delete overflowItems[itemId];
|
261
276
|
update();
|
262
277
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["overflowManager.js"],"sourcesContent":["var _groups, _groupId;\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\n/**\n * @internal\n * @returns overflow manager instance\n */ export function createOverflowManager() {\n let container;\n let overflowMenu;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: ()=>undefined,\n onUpdateOverflow: ()=>undefined\n };\n const overflowItems = {};\n const overflowDividers = {};\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\n const getNextItem = (queueToDequeue, queueToEnqueue)=>{\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n const createGroupManager = ()=>{\n const groupVisibility = {};\n const groups = {};\n function updateGroupVisibility(groupId) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: ()=>groupVisibility,\n isSingleItemVisible (itemId, groupId) {\n return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;\n },\n addItem (itemId, groupId) {\n var _;\n (_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {\n visibleItemIds: new Set(),\n invisibleItemIds: new Set()\n };\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n }\n };\n };\n const groupManager = createGroupManager();\n const invisibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const visibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const getOffsetSize = (el)=>{\n return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n };\n function computeSizeChange(entry) {\n const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;\n return getOffsetSize(entry.element) + dividerWidth;\n }\n const showItem = ()=>{\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({\n item,\n visible: true\n });\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n return computeSizeChange(item);\n };\n const hideItem = ()=>{\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({\n item,\n visible: false\n });\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.setAttribute(DATA_OVERFLOWING, '');\n }\n groupManager.hideItem(item.id, item.groupId);\n }\n return width;\n };\n const dispatchOverflowUpdate = ()=>{\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n const visibleItems = visibleItemIds.map((itemId)=>overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map((itemId)=>overflowItems[itemId]);\n options.onUpdateOverflow({\n visibleItems,\n invisibleItems,\n groupVisibility: groupManager.groupVisibility()\n });\n };\n const processOverflowItems = ()=>{\n if (!container) {\n return false;\n }\n const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n let currentWidth = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);\n // Add items until available width is filled - can result in overflow\n while(currentWidth + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){\n currentWidth += showItem();\n }\n // Remove items until there's no more overflow\n while(currentWidth + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){\n currentWidth -= hideItem();\n }\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n const forceUpdate = ()=>{\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n const update = debounce(forceUpdate);\n const observe = (observedContainer, userOptions)=>{\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach((item)=>visibleItemQueue.enqueue(item.id));\n container = observedContainer;\n resizeObserver.observe(container);\n };\n const disconnect = ()=>{\n observing = false;\n resizeObserver.disconnect();\n };\n const addItem = (item)=>{\n if (overflowItems[item.id]) {\n return;\n }\n overflowItems[item.id] = item;\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n update();\n };\n const addOverflowMenu = (el)=>{\n overflowMenu = el;\n };\n const addDivider = (divider)=>{\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n const removeOverflowMenu = ()=>{\n overflowMenu = undefined;\n };\n const removeDivider = (groupId)=>{\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n const removeItem = (itemId)=>{\n if (!overflowItems[itemId]) {\n return;\n }\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n delete overflowItems[itemId];\n update();\n };\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider\n };\n}\n"],"names":["createOverflowManager","_groups","_groupId","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","createPriorityQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","offsetWidth","offsetHeight","computeSizeChange","entry","dividerWidth","id","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentWidth","forceUpdate","debounce","observe","observedContainer","userOptions","assign","forEach","disconnect","DATA_OVERFLOW_GROUP","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["overflowManager.js"],"sourcesContent":["var _groups, _groupId;\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';\nimport { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\n/**\n * @internal\n * @returns overflow manager instance\n */ export function createOverflowManager() {\n // calls to `offsetWidth or offsetHeight` can happen multiple times in an update\n // Use a cache to avoid causing too many recalcs and avoid scripting time to meausure sizes\n const sizeCache = new Map();\n let container;\n let overflowMenu;\n // Set as true when resize observer is observing\n let observing = false;\n // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change\n // Initially true to force dispatch on first mount\n let forceDispatch = true;\n const options = {\n padding: 10,\n overflowAxis: 'horizontal',\n overflowDirection: 'end',\n minimumVisible: 0,\n onUpdateItemVisibility: ()=>undefined,\n onUpdateOverflow: ()=>undefined\n };\n const overflowItems = {};\n const overflowDividers = {};\n const resizeObserver = new ResizeObserver((entries)=>{\n if (!entries[0] || !container) {\n return;\n }\n update();\n });\n const getNextItem = (queueToDequeue, queueToEnqueue)=>{\n const nextItem = queueToDequeue.dequeue();\n queueToEnqueue.enqueue(nextItem);\n return overflowItems[nextItem];\n };\n const createGroupManager = ()=>{\n const groupVisibility = {};\n const groups = {};\n function updateGroupVisibility(groupId) {\n const group = groups[groupId];\n if (group.invisibleItemIds.size && group.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (group.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n }\n function isGroupVisible(groupId) {\n return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';\n }\n return {\n groupVisibility: ()=>groupVisibility,\n isSingleItemVisible (itemId, groupId) {\n return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;\n },\n addItem (itemId, groupId) {\n var _;\n (_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {\n visibleItemIds: new Set(),\n invisibleItemIds: new Set()\n };\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n removeItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n },\n showItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.delete(itemId);\n groups[groupId].visibleItemIds.add(itemId);\n updateGroupVisibility(groupId);\n },\n hideItem (itemId, groupId) {\n groups[groupId].invisibleItemIds.add(itemId);\n groups[groupId].visibleItemIds.delete(itemId);\n updateGroupVisibility(groupId);\n }\n };\n };\n const groupManager = createGroupManager();\n const invisibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Higher priority at the top of the queue\n const priority = itemB.priority - itemA.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const visibleItemQueue = createPriorityQueue((a, b)=>{\n const itemA = overflowItems[a];\n const itemB = overflowItems[b];\n // Lower priority at the top of the queue\n const priority = itemA.priority - itemB.priority;\n if (priority !== 0) {\n return priority;\n }\n const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;\n // equal priority, use DOM order\n // eslint-disable-next-line no-bitwise\n return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;\n });\n const getOffsetSize = (el)=>{\n if (sizeCache.has(el)) {\n return sizeCache.get(el);\n }\n const offsetSize = options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;\n sizeCache.set(el, offsetSize);\n return offsetSize;\n };\n function computeSizeChange(entry) {\n const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;\n return getOffsetSize(entry.element) + dividerWidth;\n }\n const showItem = ()=>{\n const item = getNextItem(invisibleItemQueue, visibleItemQueue);\n options.onUpdateItemVisibility({\n item,\n visible: true\n });\n if (item.groupId) {\n groupManager.showItem(item.id, item.groupId);\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);\n }\n }\n return computeSizeChange(item);\n };\n const hideItem = ()=>{\n const item = getNextItem(visibleItemQueue, invisibleItemQueue);\n const width = computeSizeChange(item);\n options.onUpdateItemVisibility({\n item,\n visible: false\n });\n if (item.groupId) {\n if (groupManager.isSingleItemVisible(item.id, item.groupId)) {\n var _overflowDividers_item_groupId;\n (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.setAttribute(DATA_OVERFLOWING, '');\n }\n groupManager.hideItem(item.id, item.groupId);\n }\n return width;\n };\n const dispatchOverflowUpdate = ()=>{\n const visibleItemIds = visibleItemQueue.all();\n const invisibleItemIds = invisibleItemQueue.all();\n const visibleItems = visibleItemIds.map((itemId)=>overflowItems[itemId]);\n const invisibleItems = invisibleItemIds.map((itemId)=>overflowItems[itemId]);\n options.onUpdateOverflow({\n visibleItems,\n invisibleItems,\n groupVisibility: groupManager.groupVisibility()\n });\n };\n const processOverflowItems = ()=>{\n if (!container) {\n return false;\n }\n sizeCache.clear();\n const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);\n function overflowMenuSize() {\n return invisibleItemQueue.size() > 0 && overflowMenu ? getOffsetSize(overflowMenu) : 0;\n }\n const availableSize = getOffsetSize(container) - totalDividersWidth - options.padding;\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n let currentSize = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);\n // Run the show/hide step twice - the first step might not be correct if\n // it was triggered by a new item being added - new items are always visible by default.\n for(let i = 0; i < 2; i++){\n // Add items until available width is filled - can result in overflow\n while(currentSize + overflowMenuSize() < availableSize && invisibleItemQueue.size() > 0){\n currentSize += showItem();\n }\n // Remove items until there's no more overflow\n while(currentSize + overflowMenuSize() > availableSize && visibleItemQueue.size() > options.minimumVisible){\n currentSize -= hideItem();\n }\n }\n // only update when the state of visible/invisible items has changed\n return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;\n };\n const forceUpdate = ()=>{\n if (processOverflowItems() || forceDispatch) {\n forceDispatch = false;\n dispatchOverflowUpdate();\n }\n };\n const update = debounce(forceUpdate);\n const observe = (observedContainer, userOptions)=>{\n Object.assign(options, userOptions);\n observing = true;\n Object.values(overflowItems).forEach((item)=>visibleItemQueue.enqueue(item.id));\n container = observedContainer;\n resizeObserver.observe(container);\n };\n const disconnect = ()=>{\n observing = false;\n sizeCache.clear();\n resizeObserver.disconnect();\n };\n const addItem = (item)=>{\n if (overflowItems[item.id]) {\n return;\n }\n overflowItems[item.id] = item;\n // some options can affect priority which are only set on `observe`\n if (observing) {\n // Updates to elements might not change the queue tops\n // i.e. new element is enqueued but the top of the queue stays the same\n // force a dispatch on the next batched update\n forceDispatch = true;\n visibleItemQueue.enqueue(item.id);\n }\n if (item.groupId) {\n groupManager.addItem(item.id, item.groupId);\n item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);\n }\n update();\n };\n const addOverflowMenu = (el)=>{\n overflowMenu = el;\n };\n const addDivider = (divider)=>{\n if (!divider.groupId || overflowDividers[divider.groupId]) {\n return;\n }\n divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);\n overflowDividers[divider.groupId] = divider;\n };\n const removeOverflowMenu = ()=>{\n overflowMenu = undefined;\n };\n const removeDivider = (groupId)=>{\n if (!overflowDividers[groupId]) {\n return;\n }\n const divider = overflowDividers[groupId];\n if (divider.groupId) {\n delete overflowDividers[groupId];\n divider.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n };\n const removeItem = (itemId)=>{\n if (!overflowItems[itemId]) {\n return;\n }\n const item = overflowItems[itemId];\n visibleItemQueue.remove(itemId);\n invisibleItemQueue.remove(itemId);\n if (item.groupId) {\n groupManager.removeItem(item.id, item.groupId);\n item.element.removeAttribute(DATA_OVERFLOW_GROUP);\n }\n sizeCache.delete(item.element);\n delete overflowItems[itemId];\n update();\n };\n return {\n addItem,\n disconnect,\n forceUpdate,\n observe,\n removeItem,\n update,\n addOverflowMenu,\n removeOverflowMenu,\n addDivider,\n removeDivider\n };\n}\n"],"names":["createOverflowManager","_groups","_groupId","sizeCache","Map","container","overflowMenu","observing","forceDispatch","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowDividers","resizeObserver","ResizeObserver","entries","update","getNextItem","queueToDequeue","queueToEnqueue","nextItem","dequeue","enqueue","createGroupManager","groupVisibility","groups","updateGroupVisibility","groupId","group","invisibleItemIds","size","visibleItemIds","isGroupVisible","isSingleItemVisible","itemId","has","addItem","_","Set","add","removeItem","delete","showItem","hideItem","groupManager","invisibleItemQueue","createPriorityQueue","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","get","offsetSize","offsetWidth","offsetHeight","set","computeSizeChange","entry","dividerWidth","id","item","visible","_overflowDividers_item_groupId","removeAttribute","DATA_OVERFLOWING","width","setAttribute","dispatchOverflowUpdate","all","visibleItems","map","invisibleItems","processOverflowItems","clear","totalDividersWidth","Object","values","dvdr","reduce","prev","current","overflowMenuSize","availableSize","visibleTop","peek","invisibleTop","currentSize","i","forceUpdate","debounce","observe","observedContainer","userOptions","assign","forEach","disconnect","DATA_OVERFLOW_GROUP","addOverflowMenu","addDivider","divider","removeOverflowMenu","removeDivider","remove"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fluentui/priority-overflow",
|
3
|
-
"version": "9.1.
|
3
|
+
"version": "9.1.2",
|
4
4
|
"description": "Vanilla JS utilities to implement overflow menus",
|
5
5
|
"main": "lib-commonjs/index.js",
|
6
6
|
"module": "lib/index.js",
|
@@ -13,7 +13,7 @@
|
|
13
13
|
"license": "MIT",
|
14
14
|
"scripts": {
|
15
15
|
"build": "just-scripts build",
|
16
|
-
"bundle-size": "
|
16
|
+
"bundle-size": "monosize measure",
|
17
17
|
"clean": "just-scripts clean",
|
18
18
|
"code-style": "just-scripts code-style",
|
19
19
|
"just": "just-scripts",
|