@fluentui/priority-overflow 9.0.0-rc.1 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["packages/react-components/priority-overflow/src/overflowManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\nimport type { OverflowGroupState, OverflowItemEntry, OverflowManager, ObserveOptions } 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 let observing = false;\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 overflowGroups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\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 const makeItemVisible = () => {\n const nextVisible = invisibleItemQueue.dequeue();\n visibleItemQueue.enqueue(nextVisible);\n\n const item = overflowItems[nextVisible];\n options.onUpdateItemVisibility({ item, visible: true });\n if (item.groupId) {\n overflowGroups[item.groupId].invisibleItemIds.delete(item.id);\n overflowGroups[item.groupId].visibleItemIds.add(item.id);\n }\n\n return getOffsetSize(item.element);\n };\n\n const makeItemInvisible = () => {\n const nextInvisible = visibleItemQueue.dequeue();\n invisibleItemQueue.enqueue(nextInvisible);\n\n const item = overflowItems[nextInvisible];\n const width = getOffsetSize(item.element);\n options.onUpdateItemVisibility({ item, visible: false });\n if (item.groupId) {\n overflowGroups[item.groupId].visibleItemIds.delete(item.id);\n overflowGroups[item.groupId].invisibleItemIds.add(item.id);\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 const groupVisibility: Record<string, OverflowGroupState> = {};\n Object.entries(overflowGroups).forEach(([groupId, groupState]) => {\n if (groupState.invisibleItemIds.size && groupState.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (groupState.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n });\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility });\n };\n\n const processOverflowItems = (availableSize: number) => {\n if (!container) {\n return;\n }\n\n const overflowMenuOffset = overflowMenu ? getOffsetSize(overflowMenu) : 0;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n const visibleItemIds = visibleItemQueue.all();\n let currentWidth = visibleItemIds.reduce((sum, visibleItemId) => {\n const child = overflowItems[visibleItemId].element;\n return sum + getOffsetSize(child);\n }, 0);\n\n // Add items until available width is filled\n while (currentWidth < availableSize && invisibleItemQueue.size() > 0) {\n currentWidth += makeItemVisible();\n }\n // Remove items until there's no more overlap\n while (currentWidth > availableSize && visibleItemQueue.size() > 0) {\n if (visibleItemQueue.size() === options.minimumVisible) {\n break;\n }\n currentWidth -= makeItemInvisible();\n }\n\n if (invisibleItemQueue.size() > 0 && currentWidth + overflowMenuOffset > availableSize) {\n makeItemInvisible();\n }\n\n // only update when the state of visible/invisible items has changed\n if (visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop) {\n dispatchOverflowUpdate();\n }\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (!container) {\n return;\n }\n\n const availableSize = getOffsetSize(container) - options.padding;\n processOverflowItems(availableSize);\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 visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n if (!overflowGroups[item.groupId]) {\n overflowGroups[item.groupId] = {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n }\n\n overflowGroups[item.groupId].visibleItemIds.add(item.id);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\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 overflowGroups[item.groupId].visibleItemIds.delete(item.id);\n overflowGroups[item.groupId].invisibleItemIds.delete(item.id);\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 };\n}\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"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","names":["createOverflowManager","container","overflowMenu","observing","options","padding","overflowAxis","overflowDirection","minimumVisible","onUpdateItemVisibility","undefined","onUpdateOverflow","overflowItems","overflowGroups","resizeObserver","ResizeObserver","entries","update","invisibleItemQueue","priorityQueue_1","a","b","itemA","itemB","priority","positionStatusBit","Node","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_PRECEDING","element","compareDocumentPosition","visibleItemQueue","getOffsetSize","el","offsetWidth","offsetHeight","makeItemVisible","nextVisible","dequeue","enqueue","item","visible","groupId","invisibleItemIds","delete","id","visibleItemIds","add","makeItemInvisible","nextInvisible","width","dispatchOverflowUpdate","all","visibleItems","map","itemId","invisibleItems","groupVisibility","Object","forEach","groupState","size","processOverflowItems","availableSize","overflowMenuOffset","visibleTop","peek","invisibleTop","currentWidth","reduce","sum","visibleItemId","child","forceUpdate","debounce_1","observe","observedContainer","userOptions","assign","values","disconnect","addItem","Set","addOverflowMenu","removeOverflowMenu","removeItem","remove","exports"],"sourceRoot":"../src/","sources":["packages/react-components/priority-overflow/src/overflowManager.ts"],"sourcesContent":["import { debounce } from './debounce';\nimport { createPriorityQueue } from './priorityQueue';\nimport type { OverflowGroupState, OverflowItemEntry, OverflowManager, ObserveOptions } 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 let observing = false;\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 overflowGroups: Record<string, { visibleItemIds: Set<string>; invisibleItemIds: Set<string> }> = {};\n const resizeObserver = new ResizeObserver(entries => {\n if (!entries[0] || !container) {\n return;\n }\n\n update();\n });\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 const makeItemVisible = () => {\n const nextVisible = invisibleItemQueue.dequeue();\n visibleItemQueue.enqueue(nextVisible);\n\n const item = overflowItems[nextVisible];\n options.onUpdateItemVisibility({ item, visible: true });\n if (item.groupId) {\n overflowGroups[item.groupId].invisibleItemIds.delete(item.id);\n overflowGroups[item.groupId].visibleItemIds.add(item.id);\n }\n\n return getOffsetSize(item.element);\n };\n\n const makeItemInvisible = () => {\n const nextInvisible = visibleItemQueue.dequeue();\n invisibleItemQueue.enqueue(nextInvisible);\n\n const item = overflowItems[nextInvisible];\n const width = getOffsetSize(item.element);\n options.onUpdateItemVisibility({ item, visible: false });\n if (item.groupId) {\n overflowGroups[item.groupId].visibleItemIds.delete(item.id);\n overflowGroups[item.groupId].invisibleItemIds.add(item.id);\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 const groupVisibility: Record<string, OverflowGroupState> = {};\n Object.entries(overflowGroups).forEach(([groupId, groupState]) => {\n if (groupState.invisibleItemIds.size && groupState.visibleItemIds.size) {\n groupVisibility[groupId] = 'overflow';\n } else if (groupState.visibleItemIds.size === 0) {\n groupVisibility[groupId] = 'hidden';\n } else {\n groupVisibility[groupId] = 'visible';\n }\n });\n\n options.onUpdateOverflow({ visibleItems, invisibleItems, groupVisibility });\n };\n\n const processOverflowItems = (availableSize: number) => {\n if (!container) {\n return;\n }\n\n const overflowMenuOffset = overflowMenu ? getOffsetSize(overflowMenu) : 0;\n\n // Snapshot of the visible/invisible state to compare for updates\n const visibleTop = visibleItemQueue.peek();\n const invisibleTop = invisibleItemQueue.peek();\n\n const visibleItemIds = visibleItemQueue.all();\n let currentWidth = visibleItemIds.reduce((sum, visibleItemId) => {\n const child = overflowItems[visibleItemId].element;\n return sum + getOffsetSize(child);\n }, 0);\n\n // Add items until available width is filled - can result in overflow\n while (currentWidth < availableSize && invisibleItemQueue.size() > 0) {\n currentWidth += makeItemVisible();\n }\n\n // Remove items until there's no more overflow\n while (currentWidth > availableSize && visibleItemQueue.size() > 0) {\n if (visibleItemQueue.size() <= options.minimumVisible) {\n break;\n }\n currentWidth -= makeItemInvisible();\n }\n\n // make sure the overflow menu can fit\n if (\n visibleItemQueue.size() > options.minimumVisible &&\n invisibleItemQueue.size() > 0 &&\n currentWidth + overflowMenuOffset > availableSize\n ) {\n makeItemInvisible();\n }\n\n // only update when the state of visible/invisible items has changed\n if (visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop) {\n dispatchOverflowUpdate();\n }\n };\n\n const forceUpdate: OverflowManager['forceUpdate'] = () => {\n if (!container) {\n return;\n }\n\n const availableSize = getOffsetSize(container) - options.padding;\n processOverflowItems(availableSize);\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 visibleItemQueue.enqueue(item.id);\n }\n\n if (item.groupId) {\n if (!overflowGroups[item.groupId]) {\n overflowGroups[item.groupId] = {\n visibleItemIds: new Set<string>(),\n invisibleItemIds: new Set<string>(),\n };\n }\n\n overflowGroups[item.groupId].visibleItemIds.add(item.id);\n }\n\n update();\n };\n\n const addOverflowMenu: OverflowManager['addOverflowMenu'] = el => {\n overflowMenu = el;\n };\n\n const removeOverflowMenu: OverflowManager['removeOverflowMenu'] = () => {\n overflowMenu = undefined;\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 overflowGroups[item.groupId].visibleItemIds.delete(item.id);\n overflowGroups[item.groupId].invisibleItemIds.delete(item.id);\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 };\n}\n"]}
@@ -8,103 +8,81 @@ exports.createPriorityQueue = void 0;
8
8
  * @param compare - comparison function for items
9
9
  * @returns Priority queue implemented with a min heap
10
10
  */
11
-
12
11
  function createPriorityQueue(compare) {
13
12
  const arr = [];
14
13
  let size = 0;
15
-
16
14
  const left = i => {
17
15
  return 2 * i + 1;
18
16
  };
19
-
20
17
  const right = i => {
21
18
  return 2 * i + 2;
22
19
  };
23
-
24
20
  const parent = i => {
25
21
  return Math.floor((i - 1) / 2);
26
22
  };
27
-
28
23
  const swap = (a, b) => {
29
24
  const tmp = arr[a];
30
25
  arr[a] = arr[b];
31
26
  arr[b] = tmp;
32
27
  };
33
-
34
28
  const heapify = i => {
35
29
  let smallest = i;
36
30
  const l = left(i);
37
31
  const r = right(i);
38
-
39
32
  if (l < size && compare(arr[l], arr[smallest]) < 0) {
40
33
  smallest = l;
41
34
  }
42
-
43
35
  if (r < size && compare(arr[r], arr[smallest]) < 0) {
44
36
  smallest = r;
45
37
  }
46
-
47
38
  if (smallest !== i) {
48
39
  swap(smallest, i);
49
40
  heapify(smallest);
50
41
  }
51
42
  };
52
-
53
43
  const dequeue = () => {
54
44
  if (size === 0) {
55
45
  throw new Error('Priority queue empty');
56
46
  }
57
-
58
47
  const res = arr[0];
59
48
  arr[0] = arr[--size];
60
49
  heapify(0);
61
50
  return res;
62
51
  };
63
-
64
52
  const peek = () => {
65
53
  if (size === 0) {
66
54
  return null;
67
55
  }
68
-
69
56
  return arr[0];
70
57
  };
71
-
72
58
  const enqueue = item => {
73
59
  arr[size++] = item;
74
60
  let i = size - 1;
75
61
  let p = parent(i);
76
-
77
62
  while (i > 0 && compare(arr[p], arr[i]) > 0) {
78
63
  swap(p, i);
79
64
  i = p;
80
65
  p = parent(i);
81
66
  }
82
67
  };
83
-
84
68
  const contains = item => {
85
69
  const index = arr.indexOf(item);
86
70
  return index >= 0 && index < size;
87
71
  };
88
-
89
72
  const remove = item => {
90
73
  const i = arr.indexOf(item);
91
-
92
74
  if (i === -1 || i >= size) {
93
75
  return;
94
76
  }
95
-
96
77
  arr[i] = arr[--size];
97
78
  heapify(i);
98
79
  };
99
-
100
80
  const clear = () => {
101
81
  size = 0;
102
82
  };
103
-
104
83
  const all = () => {
105
84
  return arr.slice(0, size);
106
85
  };
107
-
108
86
  return {
109
87
  all,
110
88
  clear,
@@ -116,6 +94,5 @@ function createPriorityQueue(compare) {
116
94
  size: () => size
117
95
  };
118
96
  }
119
-
120
97
  exports.createPriorityQueue = createPriorityQueue;
121
98
  //# sourceMappingURL=priorityQueue.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["packages/react-components/priority-overflow/src/priorityQueue.ts"],"names":[],"mappings":"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","sourcesContent":["export type PriorityQueueCompareFn<T> = (a: T, b: T) => number;\n\nexport interface PriorityQueue<T> {\n all: () => T[];\n clear: () => void;\n contains: (item: T) => boolean;\n dequeue: () => T;\n enqueue: (item: T) => void;\n peek: () => T | null;\n remove: (item: T) => void;\n size: () => number;\n}\n\n/**\n * @param compare - comparison function for items\n * @returns Priority queue implemented with a min heap\n */\nexport function createPriorityQueue<T>(compare: PriorityQueueCompareFn<T>): PriorityQueue<T> {\n const arr: T[] = [];\n let size = 0;\n\n const left = (i: number) => {\n return 2 * i + 1;\n };\n\n const right = (i: number) => {\n return 2 * i + 2;\n };\n\n const parent = (i: number) => {\n return Math.floor((i - 1) / 2);\n };\n\n const swap = (a: number, b: number) => {\n const tmp = arr[a];\n arr[a] = arr[b];\n arr[b] = tmp;\n };\n\n const heapify = (i: number) => {\n let smallest = i;\n const l = left(i);\n const r = right(i);\n\n if (l < size && compare(arr[l], arr[smallest]) < 0) {\n smallest = l;\n }\n\n if (r < size && compare(arr[r], arr[smallest]) < 0) {\n smallest = r;\n }\n\n if (smallest !== i) {\n swap(smallest, i);\n heapify(smallest);\n }\n };\n\n const dequeue = () => {\n if (size === 0) {\n throw new Error('Priority queue empty');\n }\n\n const res = arr[0];\n arr[0] = arr[--size];\n heapify(0);\n\n return res;\n };\n\n const peek = () => {\n if (size === 0) {\n return null;\n }\n\n return arr[0];\n };\n\n const enqueue = (item: T) => {\n arr[size++] = item;\n let i = size - 1;\n let p = parent(i);\n while (i > 0 && compare(arr[p], arr[i]) > 0) {\n swap(p, i);\n i = p;\n p = parent(i);\n }\n };\n\n const contains = (item: T) => {\n const index = arr.indexOf(item);\n return index >= 0 && index < size;\n };\n\n const remove = (item: T) => {\n const i = arr.indexOf(item);\n\n if (i === -1 || i >= size) {\n return;\n }\n\n arr[i] = arr[--size];\n heapify(i);\n };\n\n const clear = () => {\n size = 0;\n };\n\n const all = () => {\n return arr.slice(0, size);\n };\n\n return {\n all,\n clear,\n contains,\n dequeue,\n enqueue,\n peek,\n remove,\n size: () => size,\n };\n}\n"],"sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"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","names":["createPriorityQueue","compare","arr","size","left","i","right","parent","Math","floor","swap","a","b","tmp","heapify","smallest","l","r","dequeue","Error","res","peek","enqueue","item","p","contains","index","indexOf","remove","clear","all","slice","exports"],"sourceRoot":"../src/","sources":["packages/react-components/priority-overflow/src/priorityQueue.ts"],"sourcesContent":["export type PriorityQueueCompareFn<T> = (a: T, b: T) => number;\n\nexport interface PriorityQueue<T> {\n all: () => T[];\n clear: () => void;\n contains: (item: T) => boolean;\n dequeue: () => T;\n enqueue: (item: T) => void;\n peek: () => T | null;\n remove: (item: T) => void;\n size: () => number;\n}\n\n/**\n * @param compare - comparison function for items\n * @returns Priority queue implemented with a min heap\n */\nexport function createPriorityQueue<T>(compare: PriorityQueueCompareFn<T>): PriorityQueue<T> {\n const arr: T[] = [];\n let size = 0;\n\n const left = (i: number) => {\n return 2 * i + 1;\n };\n\n const right = (i: number) => {\n return 2 * i + 2;\n };\n\n const parent = (i: number) => {\n return Math.floor((i - 1) / 2);\n };\n\n const swap = (a: number, b: number) => {\n const tmp = arr[a];\n arr[a] = arr[b];\n arr[b] = tmp;\n };\n\n const heapify = (i: number) => {\n let smallest = i;\n const l = left(i);\n const r = right(i);\n\n if (l < size && compare(arr[l], arr[smallest]) < 0) {\n smallest = l;\n }\n\n if (r < size && compare(arr[r], arr[smallest]) < 0) {\n smallest = r;\n }\n\n if (smallest !== i) {\n swap(smallest, i);\n heapify(smallest);\n }\n };\n\n const dequeue = () => {\n if (size === 0) {\n throw new Error('Priority queue empty');\n }\n\n const res = arr[0];\n arr[0] = arr[--size];\n heapify(0);\n\n return res;\n };\n\n const peek = () => {\n if (size === 0) {\n return null;\n }\n\n return arr[0];\n };\n\n const enqueue = (item: T) => {\n arr[size++] = item;\n let i = size - 1;\n let p = parent(i);\n while (i > 0 && compare(arr[p], arr[i]) > 0) {\n swap(p, i);\n i = p;\n p = parent(i);\n }\n };\n\n const contains = (item: T) => {\n const index = arr.indexOf(item);\n return index >= 0 && index < size;\n };\n\n const remove = (item: T) => {\n const i = arr.indexOf(item);\n\n if (i === -1 || i >= size) {\n return;\n }\n\n arr[i] = arr[--size];\n heapify(i);\n };\n\n const clear = () => {\n size = 0;\n };\n\n const all = () => {\n return arr.slice(0, size);\n };\n\n return {\n all,\n clear,\n contains,\n dequeue,\n enqueue,\n peek,\n remove,\n size: () => size,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourceRoot":"../src/"}
1
+ {"version":3,"mappings":"","names":[],"sourceRoot":"../src/","sources":[],"sourcesContent":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/priority-overflow",
3
- "version": "9.0.0-rc.1",
3
+ "version": "9.0.0",
4
4
  "description": "Vanilla JS utilities to implement overflow menus",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -24,16 +24,16 @@
24
24
  },
25
25
  "devDependencies": {
26
26
  "@fluentui/eslint-plugin": "*",
27
- "@fluentui/scripts": "^1.0.0"
27
+ "@fluentui/scripts-api-extractor": "*",
28
+ "@fluentui/scripts-tasks": "*"
28
29
  },
29
30
  "dependencies": {
30
31
  "tslib": "^2.1.0"
31
32
  },
32
33
  "beachball": {
33
34
  "disallowedChangeTypes": [
34
- "major",
35
- "minor",
36
- "patch"
35
+ "prerelease",
36
+ "major"
37
37
  ]
38
38
  },
39
39
  "exports": {