@fluentui/priority-overflow 9.0.3 → 9.1.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.
- package/CHANGELOG.json +46 -1
 - package/CHANGELOG.md +11 -2
 - package/dist/index.d.ts +16 -0
 - package/lib/consts.js +2 -0
 - package/lib/consts.js.map +1 -0
 - package/lib/debounce.js +13 -14
 - package/lib/debounce.js.map +1 -1
 - package/lib/index.js +0 -1
 - package/lib/index.js.map +1 -1
 - package/lib/overflowManager.js +257 -208
 - package/lib/overflowManager.js.map +1 -1
 - package/lib/priorityQueue.js +85 -86
 - package/lib/priorityQueue.js.map +1 -1
 - package/lib/types.js +1 -2
 - package/lib/types.js.map +1 -1
 - package/lib-commonjs/consts.js +16 -0
 - package/lib-commonjs/consts.js.map +1 -0
 - package/lib-commonjs/debounce.js +1 -3
 - package/lib-commonjs/debounce.js.map +1 -1
 - package/lib-commonjs/index.js +0 -3
 - package/lib-commonjs/index.js.map +1 -1
 - package/lib-commonjs/overflowManager.js +109 -60
 - package/lib-commonjs/overflowManager.js.map +1 -1
 - package/lib-commonjs/priorityQueue.js +1 -3
 - package/lib-commonjs/priorityQueue.js.map +1 -1
 - package/lib-commonjs/types.js +0 -3
 - package/lib-commonjs/types.js.map +1 -1
 - package/package.json +3 -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, 20 Jun 2023 12:34:38 GMT",
         
     | 
| 
      
 6 
     | 
    
         
            +
                  "tag": "@fluentui/priority-overflow_v9.1.0",
         
     | 
| 
      
 7 
     | 
    
         
            +
                  "version": "9.1.0",
         
     | 
| 
      
 8 
     | 
    
         
            +
                  "comments": {
         
     | 
| 
      
 9 
     | 
    
         
            +
                    "minor": [
         
     | 
| 
      
 10 
     | 
    
         
            +
                      {
         
     | 
| 
      
 11 
     | 
    
         
            +
                        "author": "vkozlova@microsoft.com",
         
     | 
| 
      
 12 
     | 
    
         
            +
                        "package": "@fluentui/priority-overflow",
         
     | 
| 
      
 13 
     | 
    
         
            +
                        "commit": "4dedf40597f3b5cfa63d8f2e28a79276eb816bda",
         
     | 
| 
      
 14 
     | 
    
         
            +
                        "comment": "feat: Added support for custom divider"
         
     | 
| 
      
 15 
     | 
    
         
            +
                      }
         
     | 
| 
      
 16 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 17 
     | 
    
         
            +
                  }
         
     | 
| 
      
 18 
     | 
    
         
            +
                },
         
     | 
| 
      
 19 
     | 
    
         
            +
                {
         
     | 
| 
      
 20 
     | 
    
         
            +
                  "date": "Wed, 24 May 2023 20:45:22 GMT",
         
     | 
| 
      
 21 
     | 
    
         
            +
                  "tag": "@fluentui/priority-overflow_v9.0.3",
         
     | 
| 
      
 22 
     | 
    
         
            +
                  "version": "9.0.3",
         
     | 
| 
      
 23 
     | 
    
         
            +
                  "comments": {
         
     | 
| 
      
 24 
     | 
    
         
            +
                    "none": [
         
     | 
| 
      
 25 
     | 
    
         
            +
                      {
         
     | 
| 
      
 26 
     | 
    
         
            +
                        "author": "olfedias@microsoft.com",
         
     | 
| 
      
 27 
     | 
    
         
            +
                        "package": "@fluentui/priority-overflow",
         
     | 
| 
      
 28 
     | 
    
         
            +
                        "commit": "69e0617a93cb44ef42f3bd19284b7dc5fe27fed3",
         
     | 
| 
      
 29 
     | 
    
         
            +
                        "comment": "chore: update test-ssr script"
         
     | 
| 
      
 30 
     | 
    
         
            +
                      }
         
     | 
| 
      
 31 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                  }
         
     | 
| 
      
 33 
     | 
    
         
            +
                },
         
     | 
| 
      
 34 
     | 
    
         
            +
                {
         
     | 
| 
      
 35 
     | 
    
         
            +
                  "date": "Thu, 18 May 2023 00:39:01 GMT",
         
     | 
| 
      
 36 
     | 
    
         
            +
                  "tag": "@fluentui/priority-overflow_v9.0.3",
         
     | 
| 
      
 37 
     | 
    
         
            +
                  "version": "9.0.3",
         
     | 
| 
      
 38 
     | 
    
         
            +
                  "comments": {
         
     | 
| 
      
 39 
     | 
    
         
            +
                    "none": [
         
     | 
| 
      
 40 
     | 
    
         
            +
                      {
         
     | 
| 
      
 41 
     | 
    
         
            +
                        "author": "olfedias@microsoft.com",
         
     | 
| 
      
 42 
     | 
    
         
            +
                        "package": "@fluentui/priority-overflow",
         
     | 
| 
      
 43 
     | 
    
         
            +
                        "commit": "06cd515eda59a3078bfe32f9cc7c1f281cd20208",
         
     | 
| 
      
 44 
     | 
    
         
            +
                        "comment": "chore: add test-ssr script to v9 packages"
         
     | 
| 
      
 45 
     | 
    
         
            +
                      }
         
     | 
| 
      
 46 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 47 
     | 
    
         
            +
                  }
         
     | 
| 
      
 48 
     | 
    
         
            +
                },
         
     | 
| 
      
 49 
     | 
    
         
            +
                {
         
     | 
| 
      
 50 
     | 
    
         
            +
                  "date": "Fri, 12 May 2023 20:28:09 GMT",
         
     | 
| 
       6 
51 
     | 
    
         
             
                  "tag": "@fluentui/priority-overflow_v9.0.3",
         
     | 
| 
       7 
52 
     | 
    
         
             
                  "version": "9.0.3",
         
     | 
| 
       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, 20 Jun 2023 12:34:38 GMT and should not be manually modified.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            <!-- Start content -->
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
      
 7 
     | 
    
         
            +
            ## [9.1.0](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.1.0)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            Tue, 20 Jun 2023 12:34:38 GMT 
         
     | 
| 
      
 10 
     | 
    
         
            +
            [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.0.3..@fluentui/priority-overflow_v9.1.0)
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            ### Minor changes
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            - feat: Added support for custom divider ([PR #28011](https://github.com/microsoft/fluentui/pull/28011) by vkozlova@microsoft.com)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
       7 
16 
     | 
    
         
             
            ## [9.0.3](https://github.com/microsoft/fluentui/tree/@fluentui/priority-overflow_v9.0.3)
         
     | 
| 
       8 
17 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            Fri, 12 May 2023 20: 
     | 
| 
      
 18 
     | 
    
         
            +
            Fri, 12 May 2023 20:28:09 GMT 
         
     | 
| 
       10 
19 
     | 
    
         
             
            [Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/priority-overflow_v9.0.2..@fluentui/priority-overflow_v9.0.3)
         
     | 
| 
       11 
20 
     | 
    
         | 
| 
       12 
21 
     | 
    
         
             
            ### Patches
         
     | 
    
        package/dist/index.d.ts
    CHANGED
    
    | 
         @@ -52,6 +52,14 @@ export declare type OverflowAxis = 'horizontal' | 'vertical'; 
     | 
|
| 
       52 
52 
     | 
    
         | 
| 
       53 
53 
     | 
    
         
             
            export declare type OverflowDirection = 'start' | 'end';
         
     | 
| 
       54 
54 
     | 
    
         | 
| 
      
 55 
     | 
    
         
            +
            export declare interface OverflowDividerEntry {
         
     | 
| 
      
 56 
     | 
    
         
            +
                /**
         
     | 
| 
      
 57 
     | 
    
         
            +
                 * HTML element that will be disappear when overflowed
         
     | 
| 
      
 58 
     | 
    
         
            +
                 */
         
     | 
| 
      
 59 
     | 
    
         
            +
                element: HTMLElement;
         
     | 
| 
      
 60 
     | 
    
         
            +
                groupId: string;
         
     | 
| 
      
 61 
     | 
    
         
            +
            }
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       55 
63 
     | 
    
         
             
            /**
         
     | 
| 
       56 
64 
     | 
    
         
             
             * Payload of the custom DOM event for overflow updates
         
     | 
| 
       57 
65 
     | 
    
         
             
             */
         
     | 
| 
         @@ -113,6 +121,14 @@ export declare interface OverflowManager { 
     | 
|
| 
       113 
121 
     | 
    
         
             
                 * available space and check if additional items need to overflow
         
     | 
| 
       114 
122 
     | 
    
         
             
                 */
         
     | 
| 
       115 
123 
     | 
    
         
             
                addOverflowMenu: (element: HTMLElement) => void;
         
     | 
| 
      
 124 
     | 
    
         
            +
                /**
         
     | 
| 
      
 125 
     | 
    
         
            +
                 * Add overflow divider
         
     | 
| 
      
 126 
     | 
    
         
            +
                 */
         
     | 
| 
      
 127 
     | 
    
         
            +
                addDivider: (divider: OverflowDividerEntry) => void;
         
     | 
| 
      
 128 
     | 
    
         
            +
                /**
         
     | 
| 
      
 129 
     | 
    
         
            +
                 * Remove overflow divider
         
     | 
| 
      
 130 
     | 
    
         
            +
                 */
         
     | 
| 
      
 131 
     | 
    
         
            +
                removeDivider: (groupId: string) => void;
         
     | 
| 
       116 
132 
     | 
    
         
             
                /**
         
     | 
| 
       117 
133 
     | 
    
         
             
                 * Unsets the overflow menu element
         
     | 
| 
       118 
134 
     | 
    
         
             
                 */
         
     | 
    
        package/lib/consts.js
    ADDED
    
    
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["consts.ts"],"sourcesContent":["export const DATA_OVERFLOWING = 'data-overflowing';\nexport const DATA_OVERFLOW_GROUP = 'data-overflow-group';\n"],"names":["DATA_OVERFLOWING","DATA_OVERFLOW_GROUP"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB,mBAAmB;AACnD,OAAO,MAAMC,sBAAsB,sBAAsB"}
         
     | 
    
        package/lib/debounce.js
    CHANGED
    
    | 
         @@ -3,18 +3,17 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
             * https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide
         
     | 
| 
       4 
4 
     | 
    
         
             
             * @param fn - Function to debounce
         
     | 
| 
       5 
5 
     | 
    
         
             
             * @returns debounced function
         
     | 
| 
       6 
     | 
    
         
            -
             */export function debounce(fn) {
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
      
 6 
     | 
    
         
            +
             */ export function debounce(fn) {
         
     | 
| 
      
 7 
     | 
    
         
            +
                let pending;
         
     | 
| 
      
 8 
     | 
    
         
            +
                return ()=>{
         
     | 
| 
      
 9 
     | 
    
         
            +
                    if (!pending) {
         
     | 
| 
      
 10 
     | 
    
         
            +
                        pending = true;
         
     | 
| 
      
 11 
     | 
    
         
            +
                        queueMicrotask(()=>{
         
     | 
| 
      
 12 
     | 
    
         
            +
                            // Need to set pending to `false` before the debounced function is run.
         
     | 
| 
      
 13 
     | 
    
         
            +
                            // React can actually interrupt the function while it's running!
         
     | 
| 
      
 14 
     | 
    
         
            +
                            pending = false;
         
     | 
| 
      
 15 
     | 
    
         
            +
                            fn();
         
     | 
| 
      
 16 
     | 
    
         
            +
                        });
         
     | 
| 
      
 17 
     | 
    
         
            +
                    }
         
     | 
| 
      
 18 
     | 
    
         
            +
                };
         
     | 
| 
       19 
19 
     | 
    
         
             
            }
         
     | 
| 
       20 
     | 
    
         
            -
            //# sourceMappingURL=debounce.js.map
         
     | 
    
        package/lib/debounce.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3," 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["debounce.ts"],"sourcesContent":["/**\n * Microtask debouncer\n * https://developer.mozilla.org/en-US/docs/Web/API/HTML_DOM_API/Microtask_guide\n * @param fn - Function to debounce\n * @returns debounced function\n */\nexport function debounce(fn: Function) {\n  let pending: boolean;\n  return () => {\n    if (!pending) {\n      pending = true;\n      queueMicrotask(() => {\n        // Need to set pending to `false` before the debounced function is run.\n        // React can actually interrupt the function while it's running!\n        pending = false;\n        fn();\n      });\n    }\n  };\n}\n"],"names":["debounce","fn","pending","queueMicrotask"],"mappings":"AAAA;;;;;CAKC,GACD,OAAO,SAASA,SAASC,EAAY,EAAE;IACrC,IAAIC;IACJ,OAAO,IAAM;QACX,IAAI,CAACA,SAAS;YACZA,UAAU,IAAI;YACdC,eAAe,IAAM;gBACnB,uEAAuE;gBACvE,gEAAgE;gBAChED,UAAU,KAAK;gBACfD;YACF;QACF,CAAC;IACH;AACF,CAAC"}
         
     | 
    
        package/lib/index.js
    CHANGED
    
    
    
        package/lib/index.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3," 
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["index.ts"],"sourcesContent":["export { createOverflowManager } from './overflowManager';\nexport type {\n  ObserveOptions,\n  OnUpdateItemVisibility,\n  OnUpdateItemVisibilityPayload,\n  OnUpdateOverflow,\n  OverflowAxis,\n  OverflowDirection,\n  OverflowEventPayload,\n  OverflowGroupState,\n  OverflowItemEntry,\n  OverflowDividerEntry,\n  OverflowManager,\n} from './types';\n"],"names":["createOverflowManager"],"mappings":"AAAA,SAASA,qBAAqB,QAAQ,oBAAoB"}
         
     | 
    
        package/lib/overflowManager.js
    CHANGED
    
    | 
         @@ -1,218 +1,267 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var _groups, _groupId;
         
     | 
| 
      
 2 
     | 
    
         
            +
            import { DATA_OVERFLOWING, DATA_OVERFLOW_GROUP } from './consts';
         
     | 
| 
       1 
3 
     | 
    
         
             
            import { debounce } from './debounce';
         
     | 
| 
       2 
4 
     | 
    
         
             
            import { createPriorityQueue } from './priorityQueue';
         
     | 
| 
       3 
5 
     | 
    
         
             
            /**
         
     | 
| 
       4 
6 
     | 
    
         
             
             * @internal
         
     | 
| 
       5 
7 
     | 
    
         
             
             * @returns overflow manager instance
         
     | 
| 
       6 
     | 
    
         
            -
             */
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
             
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
             
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                 
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
       29 
     | 
    
         
            -
                update();
         
     | 
| 
       30 
     | 
    
         
            -
              });
         
     | 
| 
       31 
     | 
    
         
            -
              const invisibleItemQueue = createPriorityQueue((a, b) => {
         
     | 
| 
       32 
     | 
    
         
            -
                const itemA = overflowItems[a];
         
     | 
| 
       33 
     | 
    
         
            -
                const itemB = overflowItems[b];
         
     | 
| 
       34 
     | 
    
         
            -
                // Higher priority at the top of the queue
         
     | 
| 
       35 
     | 
    
         
            -
                const priority = itemB.priority - itemA.priority;
         
     | 
| 
       36 
     | 
    
         
            -
                if (priority !== 0) {
         
     | 
| 
       37 
     | 
    
         
            -
                  return priority;
         
     | 
| 
       38 
     | 
    
         
            -
                }
         
     | 
| 
       39 
     | 
    
         
            -
                const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;
         
     | 
| 
       40 
     | 
    
         
            -
                // equal priority, use DOM order
         
     | 
| 
       41 
     | 
    
         
            -
                // eslint-disable-next-line no-bitwise
         
     | 
| 
       42 
     | 
    
         
            -
                return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
         
     | 
| 
       43 
     | 
    
         
            -
              });
         
     | 
| 
       44 
     | 
    
         
            -
              const visibleItemQueue = createPriorityQueue((a, b) => {
         
     | 
| 
       45 
     | 
    
         
            -
                const itemA = overflowItems[a];
         
     | 
| 
       46 
     | 
    
         
            -
                const itemB = overflowItems[b];
         
     | 
| 
       47 
     | 
    
         
            -
                // Lower priority at the top of the queue
         
     | 
| 
       48 
     | 
    
         
            -
                const priority = itemA.priority - itemB.priority;
         
     | 
| 
       49 
     | 
    
         
            -
                if (priority !== 0) {
         
     | 
| 
       50 
     | 
    
         
            -
                  return priority;
         
     | 
| 
       51 
     | 
    
         
            -
                }
         
     | 
| 
       52 
     | 
    
         
            -
                const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;
         
     | 
| 
       53 
     | 
    
         
            -
                // equal priority, use DOM order
         
     | 
| 
       54 
     | 
    
         
            -
                // eslint-disable-next-line no-bitwise
         
     | 
| 
       55 
     | 
    
         
            -
                return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
         
     | 
| 
       56 
     | 
    
         
            -
              });
         
     | 
| 
       57 
     | 
    
         
            -
              const getOffsetSize = el => {
         
     | 
| 
       58 
     | 
    
         
            -
                return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
         
     | 
| 
       59 
     | 
    
         
            -
              };
         
     | 
| 
       60 
     | 
    
         
            -
              const makeItemVisible = () => {
         
     | 
| 
       61 
     | 
    
         
            -
                const nextVisible = invisibleItemQueue.dequeue();
         
     | 
| 
       62 
     | 
    
         
            -
                visibleItemQueue.enqueue(nextVisible);
         
     | 
| 
       63 
     | 
    
         
            -
                const item = overflowItems[nextVisible];
         
     | 
| 
       64 
     | 
    
         
            -
                options.onUpdateItemVisibility({
         
     | 
| 
       65 
     | 
    
         
            -
                  item,
         
     | 
| 
       66 
     | 
    
         
            -
                  visible: true
         
     | 
| 
       67 
     | 
    
         
            -
                });
         
     | 
| 
       68 
     | 
    
         
            -
                if (item.groupId) {
         
     | 
| 
       69 
     | 
    
         
            -
                  overflowGroups[item.groupId].invisibleItemIds.delete(item.id);
         
     | 
| 
       70 
     | 
    
         
            -
                  overflowGroups[item.groupId].visibleItemIds.add(item.id);
         
     | 
| 
       71 
     | 
    
         
            -
                }
         
     | 
| 
       72 
     | 
    
         
            -
                return getOffsetSize(item.element);
         
     | 
| 
       73 
     | 
    
         
            -
              };
         
     | 
| 
       74 
     | 
    
         
            -
              const makeItemInvisible = () => {
         
     | 
| 
       75 
     | 
    
         
            -
                const nextInvisible = visibleItemQueue.dequeue();
         
     | 
| 
       76 
     | 
    
         
            -
                invisibleItemQueue.enqueue(nextInvisible);
         
     | 
| 
       77 
     | 
    
         
            -
                const item = overflowItems[nextInvisible];
         
     | 
| 
       78 
     | 
    
         
            -
                const width = getOffsetSize(item.element);
         
     | 
| 
       79 
     | 
    
         
            -
                options.onUpdateItemVisibility({
         
     | 
| 
       80 
     | 
    
         
            -
                  item,
         
     | 
| 
       81 
     | 
    
         
            -
                  visible: false
         
     | 
| 
      
 8 
     | 
    
         
            +
             */ export function createOverflowManager() {
         
     | 
| 
      
 9 
     | 
    
         
            +
                let container;
         
     | 
| 
      
 10 
     | 
    
         
            +
                let overflowMenu;
         
     | 
| 
      
 11 
     | 
    
         
            +
                // Set as true when resize observer is observing
         
     | 
| 
      
 12 
     | 
    
         
            +
                let observing = false;
         
     | 
| 
      
 13 
     | 
    
         
            +
                // If true, next update will dispatch to onUpdateOverflow even if queue top states don't change
         
     | 
| 
      
 14 
     | 
    
         
            +
                // Initially true to force dispatch on first mount
         
     | 
| 
      
 15 
     | 
    
         
            +
                let forceDispatch = true;
         
     | 
| 
      
 16 
     | 
    
         
            +
                const options = {
         
     | 
| 
      
 17 
     | 
    
         
            +
                    padding: 10,
         
     | 
| 
      
 18 
     | 
    
         
            +
                    overflowAxis: 'horizontal',
         
     | 
| 
      
 19 
     | 
    
         
            +
                    overflowDirection: 'end',
         
     | 
| 
      
 20 
     | 
    
         
            +
                    minimumVisible: 0,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    onUpdateItemVisibility: ()=>undefined,
         
     | 
| 
      
 22 
     | 
    
         
            +
                    onUpdateOverflow: ()=>undefined
         
     | 
| 
      
 23 
     | 
    
         
            +
                };
         
     | 
| 
      
 24 
     | 
    
         
            +
                const overflowItems = {};
         
     | 
| 
      
 25 
     | 
    
         
            +
                const overflowDividers = {};
         
     | 
| 
      
 26 
     | 
    
         
            +
                const resizeObserver = new ResizeObserver((entries)=>{
         
     | 
| 
      
 27 
     | 
    
         
            +
                    if (!entries[0] || !container) {
         
     | 
| 
      
 28 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 29 
     | 
    
         
            +
                    }
         
     | 
| 
      
 30 
     | 
    
         
            +
                    update();
         
     | 
| 
       82 
31 
     | 
    
         
             
                });
         
     | 
| 
       83 
     | 
    
         
            -
                 
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
       86 
     | 
    
         
            -
             
     | 
| 
       87 
     | 
    
         
            -
                 
     | 
| 
       88 
     | 
    
         
            -
             
     | 
| 
       89 
     | 
    
         
            -
             
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
             
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
             
     | 
| 
       94 
     | 
    
         
            -
             
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
             
     | 
| 
       98 
     | 
    
         
            -
             
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                     
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
      
 32 
     | 
    
         
            +
                const getNextItem = (queueToDequeue, queueToEnqueue)=>{
         
     | 
| 
      
 33 
     | 
    
         
            +
                    const nextItem = queueToDequeue.dequeue();
         
     | 
| 
      
 34 
     | 
    
         
            +
                    queueToEnqueue.enqueue(nextItem);
         
     | 
| 
      
 35 
     | 
    
         
            +
                    return overflowItems[nextItem];
         
     | 
| 
      
 36 
     | 
    
         
            +
                };
         
     | 
| 
      
 37 
     | 
    
         
            +
                const createGroupManager = ()=>{
         
     | 
| 
      
 38 
     | 
    
         
            +
                    const groupVisibility = {};
         
     | 
| 
      
 39 
     | 
    
         
            +
                    const groups = {};
         
     | 
| 
      
 40 
     | 
    
         
            +
                    function updateGroupVisibility(groupId) {
         
     | 
| 
      
 41 
     | 
    
         
            +
                        const group = groups[groupId];
         
     | 
| 
      
 42 
     | 
    
         
            +
                        if (group.invisibleItemIds.size && group.visibleItemIds.size) {
         
     | 
| 
      
 43 
     | 
    
         
            +
                            groupVisibility[groupId] = 'overflow';
         
     | 
| 
      
 44 
     | 
    
         
            +
                        } else if (group.visibleItemIds.size === 0) {
         
     | 
| 
      
 45 
     | 
    
         
            +
                            groupVisibility[groupId] = 'hidden';
         
     | 
| 
      
 46 
     | 
    
         
            +
                        } else {
         
     | 
| 
      
 47 
     | 
    
         
            +
                            groupVisibility[groupId] = 'visible';
         
     | 
| 
      
 48 
     | 
    
         
            +
                        }
         
     | 
| 
      
 49 
     | 
    
         
            +
                    }
         
     | 
| 
      
 50 
     | 
    
         
            +
                    function isGroupVisible(groupId) {
         
     | 
| 
      
 51 
     | 
    
         
            +
                        return groupVisibility[groupId] === 'visible' || groupVisibility[groupId] === 'overflow';
         
     | 
| 
      
 52 
     | 
    
         
            +
                    }
         
     | 
| 
      
 53 
     | 
    
         
            +
                    return {
         
     | 
| 
      
 54 
     | 
    
         
            +
                        groupVisibility: ()=>groupVisibility,
         
     | 
| 
      
 55 
     | 
    
         
            +
                        isSingleItemVisible (itemId, groupId) {
         
     | 
| 
      
 56 
     | 
    
         
            +
                            return isGroupVisible(groupId) && groups[groupId].visibleItemIds.has(itemId) && groups[groupId].visibleItemIds.size === 1;
         
     | 
| 
      
 57 
     | 
    
         
            +
                        },
         
     | 
| 
      
 58 
     | 
    
         
            +
                        addItem (itemId, groupId) {
         
     | 
| 
      
 59 
     | 
    
         
            +
                            var _;
         
     | 
| 
      
 60 
     | 
    
         
            +
                            (_ = (_groups = groups)[_groupId = groupId]) !== null && _ !== void 0 ? _ : _groups[_groupId] = {
         
     | 
| 
      
 61 
     | 
    
         
            +
                                visibleItemIds: new Set(),
         
     | 
| 
      
 62 
     | 
    
         
            +
                                invisibleItemIds: new Set()
         
     | 
| 
      
 63 
     | 
    
         
            +
                            };
         
     | 
| 
      
 64 
     | 
    
         
            +
                            groups[groupId].visibleItemIds.add(itemId);
         
     | 
| 
      
 65 
     | 
    
         
            +
                            updateGroupVisibility(groupId);
         
     | 
| 
      
 66 
     | 
    
         
            +
                        },
         
     | 
| 
      
 67 
     | 
    
         
            +
                        removeItem (itemId, groupId) {
         
     | 
| 
      
 68 
     | 
    
         
            +
                            groups[groupId].invisibleItemIds.delete(itemId);
         
     | 
| 
      
 69 
     | 
    
         
            +
                            groups[groupId].visibleItemIds.delete(itemId);
         
     | 
| 
      
 70 
     | 
    
         
            +
                            updateGroupVisibility(groupId);
         
     | 
| 
      
 71 
     | 
    
         
            +
                        },
         
     | 
| 
      
 72 
     | 
    
         
            +
                        showItem (itemId, groupId) {
         
     | 
| 
      
 73 
     | 
    
         
            +
                            groups[groupId].invisibleItemIds.delete(itemId);
         
     | 
| 
      
 74 
     | 
    
         
            +
                            groups[groupId].visibleItemIds.add(itemId);
         
     | 
| 
      
 75 
     | 
    
         
            +
                            updateGroupVisibility(groupId);
         
     | 
| 
      
 76 
     | 
    
         
            +
                        },
         
     | 
| 
      
 77 
     | 
    
         
            +
                        hideItem (itemId, groupId) {
         
     | 
| 
      
 78 
     | 
    
         
            +
                            groups[groupId].invisibleItemIds.add(itemId);
         
     | 
| 
      
 79 
     | 
    
         
            +
                            groups[groupId].visibleItemIds.delete(itemId);
         
     | 
| 
      
 80 
     | 
    
         
            +
                            updateGroupVisibility(groupId);
         
     | 
| 
      
 81 
     | 
    
         
            +
                        }
         
     | 
| 
      
 82 
     | 
    
         
            +
                    };
         
     | 
| 
      
 83 
     | 
    
         
            +
                };
         
     | 
| 
      
 84 
     | 
    
         
            +
                const groupManager = createGroupManager();
         
     | 
| 
      
 85 
     | 
    
         
            +
                const invisibleItemQueue = createPriorityQueue((a, b)=>{
         
     | 
| 
      
 86 
     | 
    
         
            +
                    const itemA = overflowItems[a];
         
     | 
| 
      
 87 
     | 
    
         
            +
                    const itemB = overflowItems[b];
         
     | 
| 
      
 88 
     | 
    
         
            +
                    // Higher priority at the top of the queue
         
     | 
| 
      
 89 
     | 
    
         
            +
                    const priority = itemB.priority - itemA.priority;
         
     | 
| 
      
 90 
     | 
    
         
            +
                    if (priority !== 0) {
         
     | 
| 
      
 91 
     | 
    
         
            +
                        return priority;
         
     | 
| 
      
 92 
     | 
    
         
            +
                    }
         
     | 
| 
      
 93 
     | 
    
         
            +
                    const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_FOLLOWING : Node.DOCUMENT_POSITION_PRECEDING;
         
     | 
| 
      
 94 
     | 
    
         
            +
                    // equal priority, use DOM order
         
     | 
| 
      
 95 
     | 
    
         
            +
                    // eslint-disable-next-line no-bitwise
         
     | 
| 
      
 96 
     | 
    
         
            +
                    return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
         
     | 
| 
       103 
97 
     | 
    
         
             
                });
         
     | 
| 
       104 
     | 
    
         
            -
                 
     | 
| 
       105 
     | 
    
         
            -
             
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
             
     | 
| 
      
 98 
     | 
    
         
            +
                const visibleItemQueue = createPriorityQueue((a, b)=>{
         
     | 
| 
      
 99 
     | 
    
         
            +
                    const itemA = overflowItems[a];
         
     | 
| 
      
 100 
     | 
    
         
            +
                    const itemB = overflowItems[b];
         
     | 
| 
      
 101 
     | 
    
         
            +
                    // Lower priority at the top of the queue
         
     | 
| 
      
 102 
     | 
    
         
            +
                    const priority = itemA.priority - itemB.priority;
         
     | 
| 
      
 103 
     | 
    
         
            +
                    if (priority !== 0) {
         
     | 
| 
      
 104 
     | 
    
         
            +
                        return priority;
         
     | 
| 
      
 105 
     | 
    
         
            +
                    }
         
     | 
| 
      
 106 
     | 
    
         
            +
                    const positionStatusBit = options.overflowDirection === 'end' ? Node.DOCUMENT_POSITION_PRECEDING : Node.DOCUMENT_POSITION_FOLLOWING;
         
     | 
| 
      
 107 
     | 
    
         
            +
                    // equal priority, use DOM order
         
     | 
| 
      
 108 
     | 
    
         
            +
                    // eslint-disable-next-line no-bitwise
         
     | 
| 
      
 109 
     | 
    
         
            +
                    return itemA.element.compareDocumentPosition(itemB.element) & positionStatusBit ? -1 : 1;
         
     | 
| 
       108 
110 
     | 
    
         
             
                });
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
             
     | 
| 
       111 
     | 
    
         
            -
                 
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
                const overflowMenuOffset = overflowMenu ? getOffsetSize(overflowMenu) : 0;
         
     | 
| 
       116 
     | 
    
         
            -
                // Snapshot of the visible/invisible state to compare for updates
         
     | 
| 
       117 
     | 
    
         
            -
                const visibleTop = visibleItemQueue.peek();
         
     | 
| 
       118 
     | 
    
         
            -
                const invisibleTop = invisibleItemQueue.peek();
         
     | 
| 
       119 
     | 
    
         
            -
                const visibleItemIds = visibleItemQueue.all();
         
     | 
| 
       120 
     | 
    
         
            -
                let currentWidth = visibleItemIds.reduce((sum, visibleItemId) => {
         
     | 
| 
       121 
     | 
    
         
            -
                  const child = overflowItems[visibleItemId].element;
         
     | 
| 
       122 
     | 
    
         
            -
                  return sum + getOffsetSize(child);
         
     | 
| 
       123 
     | 
    
         
            -
                }, 0);
         
     | 
| 
       124 
     | 
    
         
            -
                // Add items until available width is filled - can result in overflow
         
     | 
| 
       125 
     | 
    
         
            -
                while (currentWidth < availableSize && invisibleItemQueue.size() > 0) {
         
     | 
| 
       126 
     | 
    
         
            -
                  currentWidth += makeItemVisible();
         
     | 
| 
       127 
     | 
    
         
            -
                }
         
     | 
| 
       128 
     | 
    
         
            -
                // Remove items until there's no more overflow
         
     | 
| 
       129 
     | 
    
         
            -
                while (currentWidth > availableSize && visibleItemQueue.size() > 0) {
         
     | 
| 
       130 
     | 
    
         
            -
                  if (visibleItemQueue.size() <= options.minimumVisible) {
         
     | 
| 
       131 
     | 
    
         
            -
                    break;
         
     | 
| 
       132 
     | 
    
         
            -
                  }
         
     | 
| 
       133 
     | 
    
         
            -
                  currentWidth -= makeItemInvisible();
         
     | 
| 
       134 
     | 
    
         
            -
                }
         
     | 
| 
       135 
     | 
    
         
            -
                // make sure the overflow menu can fit
         
     | 
| 
       136 
     | 
    
         
            -
                if (visibleItemQueue.size() > options.minimumVisible && invisibleItemQueue.size() > 0 && currentWidth + overflowMenuOffset > availableSize) {
         
     | 
| 
       137 
     | 
    
         
            -
                  makeItemInvisible();
         
     | 
| 
       138 
     | 
    
         
            -
                }
         
     | 
| 
       139 
     | 
    
         
            -
                // only update when the state of visible/invisible items has changed
         
     | 
| 
       140 
     | 
    
         
            -
                if (visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop) {
         
     | 
| 
       141 
     | 
    
         
            -
                  return true;
         
     | 
| 
       142 
     | 
    
         
            -
                }
         
     | 
| 
       143 
     | 
    
         
            -
                return false;
         
     | 
| 
       144 
     | 
    
         
            -
              };
         
     | 
| 
       145 
     | 
    
         
            -
              const forceUpdate = () => {
         
     | 
| 
       146 
     | 
    
         
            -
                if (processOverflowItems() || forceDispatch) {
         
     | 
| 
       147 
     | 
    
         
            -
                  forceDispatch = false;
         
     | 
| 
       148 
     | 
    
         
            -
                  dispatchOverflowUpdate();
         
     | 
| 
       149 
     | 
    
         
            -
                }
         
     | 
| 
       150 
     | 
    
         
            -
              };
         
     | 
| 
       151 
     | 
    
         
            -
              const update = debounce(forceUpdate);
         
     | 
| 
       152 
     | 
    
         
            -
              const observe = (observedContainer, userOptions) => {
         
     | 
| 
       153 
     | 
    
         
            -
                Object.assign(options, userOptions);
         
     | 
| 
       154 
     | 
    
         
            -
                observing = true;
         
     | 
| 
       155 
     | 
    
         
            -
                Object.values(overflowItems).forEach(item => visibleItemQueue.enqueue(item.id));
         
     | 
| 
       156 
     | 
    
         
            -
                container = observedContainer;
         
     | 
| 
       157 
     | 
    
         
            -
                resizeObserver.observe(container);
         
     | 
| 
       158 
     | 
    
         
            -
              };
         
     | 
| 
       159 
     | 
    
         
            -
              const disconnect = () => {
         
     | 
| 
       160 
     | 
    
         
            -
                observing = false;
         
     | 
| 
       161 
     | 
    
         
            -
                resizeObserver.disconnect();
         
     | 
| 
       162 
     | 
    
         
            -
              };
         
     | 
| 
       163 
     | 
    
         
            -
              const addItem = item => {
         
     | 
| 
       164 
     | 
    
         
            -
                if (overflowItems[item.id]) {
         
     | 
| 
       165 
     | 
    
         
            -
                  return;
         
     | 
| 
       166 
     | 
    
         
            -
                }
         
     | 
| 
       167 
     | 
    
         
            -
                overflowItems[item.id] = item;
         
     | 
| 
       168 
     | 
    
         
            -
                // some options can affect priority which are only set on `observe`
         
     | 
| 
       169 
     | 
    
         
            -
                if (observing) {
         
     | 
| 
       170 
     | 
    
         
            -
                  // Updates to elements might not change the queue tops
         
     | 
| 
       171 
     | 
    
         
            -
                  // i.e. new element is enqueued but the top of the queue stays the same
         
     | 
| 
       172 
     | 
    
         
            -
                  // force a dispatch on the next batched update
         
     | 
| 
       173 
     | 
    
         
            -
                  forceDispatch = true;
         
     | 
| 
       174 
     | 
    
         
            -
                  visibleItemQueue.enqueue(item.id);
         
     | 
| 
       175 
     | 
    
         
            -
                }
         
     | 
| 
       176 
     | 
    
         
            -
                if (item.groupId) {
         
     | 
| 
       177 
     | 
    
         
            -
                  if (!overflowGroups[item.groupId]) {
         
     | 
| 
       178 
     | 
    
         
            -
                    overflowGroups[item.groupId] = {
         
     | 
| 
       179 
     | 
    
         
            -
                      visibleItemIds: new Set(),
         
     | 
| 
       180 
     | 
    
         
            -
                      invisibleItemIds: new Set()
         
     | 
| 
       181 
     | 
    
         
            -
                    };
         
     | 
| 
       182 
     | 
    
         
            -
                  }
         
     | 
| 
       183 
     | 
    
         
            -
                  overflowGroups[item.groupId].visibleItemIds.add(item.id);
         
     | 
| 
       184 
     | 
    
         
            -
                }
         
     | 
| 
       185 
     | 
    
         
            -
                update();
         
     | 
| 
       186 
     | 
    
         
            -
              };
         
     | 
| 
       187 
     | 
    
         
            -
              const addOverflowMenu = el => {
         
     | 
| 
       188 
     | 
    
         
            -
                overflowMenu = el;
         
     | 
| 
       189 
     | 
    
         
            -
              };
         
     | 
| 
       190 
     | 
    
         
            -
              const removeOverflowMenu = () => {
         
     | 
| 
       191 
     | 
    
         
            -
                overflowMenu = undefined;
         
     | 
| 
       192 
     | 
    
         
            -
              };
         
     | 
| 
       193 
     | 
    
         
            -
              const removeItem = itemId => {
         
     | 
| 
       194 
     | 
    
         
            -
                if (!overflowItems[itemId]) {
         
     | 
| 
       195 
     | 
    
         
            -
                  return;
         
     | 
| 
       196 
     | 
    
         
            -
                }
         
     | 
| 
       197 
     | 
    
         
            -
                const item = overflowItems[itemId];
         
     | 
| 
       198 
     | 
    
         
            -
                visibleItemQueue.remove(itemId);
         
     | 
| 
       199 
     | 
    
         
            -
                invisibleItemQueue.remove(itemId);
         
     | 
| 
       200 
     | 
    
         
            -
                if (item.groupId) {
         
     | 
| 
       201 
     | 
    
         
            -
                  overflowGroups[item.groupId].visibleItemIds.delete(item.id);
         
     | 
| 
       202 
     | 
    
         
            -
                  overflowGroups[item.groupId].invisibleItemIds.delete(item.id);
         
     | 
| 
      
 111 
     | 
    
         
            +
                const getOffsetSize = (el)=>{
         
     | 
| 
      
 112 
     | 
    
         
            +
                    return options.overflowAxis === 'horizontal' ? el.offsetWidth : el.offsetHeight;
         
     | 
| 
      
 113 
     | 
    
         
            +
                };
         
     | 
| 
      
 114 
     | 
    
         
            +
                function computeSizeChange(entry) {
         
     | 
| 
      
 115 
     | 
    
         
            +
                    const dividerWidth = entry.groupId && groupManager.isSingleItemVisible(entry.id, entry.groupId) && overflowDividers[entry.groupId] ? getOffsetSize(overflowDividers[entry.groupId].element) : 0;
         
     | 
| 
      
 116 
     | 
    
         
            +
                    return getOffsetSize(entry.element) + dividerWidth;
         
     | 
| 
       203 
117 
     | 
    
         
             
                }
         
     | 
| 
       204 
     | 
    
         
            -
                 
     | 
| 
       205 
     | 
    
         
            -
             
     | 
| 
       206 
     | 
    
         
            -
             
     | 
| 
       207 
     | 
    
         
            -
             
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
       210 
     | 
    
         
            -
             
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
             
     | 
| 
       213 
     | 
    
         
            -
             
     | 
| 
       214 
     | 
    
         
            -
             
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
      
 118 
     | 
    
         
            +
                const showItem = ()=>{
         
     | 
| 
      
 119 
     | 
    
         
            +
                    const item = getNextItem(invisibleItemQueue, visibleItemQueue);
         
     | 
| 
      
 120 
     | 
    
         
            +
                    options.onUpdateItemVisibility({
         
     | 
| 
      
 121 
     | 
    
         
            +
                        item,
         
     | 
| 
      
 122 
     | 
    
         
            +
                        visible: true
         
     | 
| 
      
 123 
     | 
    
         
            +
                    });
         
     | 
| 
      
 124 
     | 
    
         
            +
                    if (item.groupId) {
         
     | 
| 
      
 125 
     | 
    
         
            +
                        groupManager.showItem(item.id, item.groupId);
         
     | 
| 
      
 126 
     | 
    
         
            +
                        if (groupManager.isSingleItemVisible(item.id, item.groupId)) {
         
     | 
| 
      
 127 
     | 
    
         
            +
                            var _overflowDividers_item_groupId;
         
     | 
| 
      
 128 
     | 
    
         
            +
                            (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.removeAttribute(DATA_OVERFLOWING);
         
     | 
| 
      
 129 
     | 
    
         
            +
                        }
         
     | 
| 
      
 130 
     | 
    
         
            +
                    }
         
     | 
| 
      
 131 
     | 
    
         
            +
                    return computeSizeChange(item);
         
     | 
| 
      
 132 
     | 
    
         
            +
                };
         
     | 
| 
      
 133 
     | 
    
         
            +
                const hideItem = ()=>{
         
     | 
| 
      
 134 
     | 
    
         
            +
                    const item = getNextItem(visibleItemQueue, invisibleItemQueue);
         
     | 
| 
      
 135 
     | 
    
         
            +
                    const width = computeSizeChange(item);
         
     | 
| 
      
 136 
     | 
    
         
            +
                    options.onUpdateItemVisibility({
         
     | 
| 
      
 137 
     | 
    
         
            +
                        item,
         
     | 
| 
      
 138 
     | 
    
         
            +
                        visible: false
         
     | 
| 
      
 139 
     | 
    
         
            +
                    });
         
     | 
| 
      
 140 
     | 
    
         
            +
                    if (item.groupId) {
         
     | 
| 
      
 141 
     | 
    
         
            +
                        if (groupManager.isSingleItemVisible(item.id, item.groupId)) {
         
     | 
| 
      
 142 
     | 
    
         
            +
                            var _overflowDividers_item_groupId;
         
     | 
| 
      
 143 
     | 
    
         
            +
                            (_overflowDividers_item_groupId = overflowDividers[item.groupId]) === null || _overflowDividers_item_groupId === void 0 ? void 0 : _overflowDividers_item_groupId.element.setAttribute(DATA_OVERFLOWING, '');
         
     | 
| 
      
 144 
     | 
    
         
            +
                        }
         
     | 
| 
      
 145 
     | 
    
         
            +
                        groupManager.hideItem(item.id, item.groupId);
         
     | 
| 
      
 146 
     | 
    
         
            +
                    }
         
     | 
| 
      
 147 
     | 
    
         
            +
                    return width;
         
     | 
| 
      
 148 
     | 
    
         
            +
                };
         
     | 
| 
      
 149 
     | 
    
         
            +
                const dispatchOverflowUpdate = ()=>{
         
     | 
| 
      
 150 
     | 
    
         
            +
                    const visibleItemIds = visibleItemQueue.all();
         
     | 
| 
      
 151 
     | 
    
         
            +
                    const invisibleItemIds = invisibleItemQueue.all();
         
     | 
| 
      
 152 
     | 
    
         
            +
                    const visibleItems = visibleItemIds.map((itemId)=>overflowItems[itemId]);
         
     | 
| 
      
 153 
     | 
    
         
            +
                    const invisibleItems = invisibleItemIds.map((itemId)=>overflowItems[itemId]);
         
     | 
| 
      
 154 
     | 
    
         
            +
                    options.onUpdateOverflow({
         
     | 
| 
      
 155 
     | 
    
         
            +
                        visibleItems,
         
     | 
| 
      
 156 
     | 
    
         
            +
                        invisibleItems,
         
     | 
| 
      
 157 
     | 
    
         
            +
                        groupVisibility: groupManager.groupVisibility()
         
     | 
| 
      
 158 
     | 
    
         
            +
                    });
         
     | 
| 
      
 159 
     | 
    
         
            +
                };
         
     | 
| 
      
 160 
     | 
    
         
            +
                const processOverflowItems = ()=>{
         
     | 
| 
      
 161 
     | 
    
         
            +
                    if (!container) {
         
     | 
| 
      
 162 
     | 
    
         
            +
                        return false;
         
     | 
| 
      
 163 
     | 
    
         
            +
                    }
         
     | 
| 
      
 164 
     | 
    
         
            +
                    const totalDividersWidth = Object.values(overflowDividers).map((dvdr)=>dvdr.groupId ? getOffsetSize(dvdr.element) : 0).reduce((prev, current)=>prev + current, 0);
         
     | 
| 
      
 165 
     | 
    
         
            +
                    const availableSize = getOffsetSize(container) - options.padding - totalDividersWidth - (overflowMenu ? getOffsetSize(overflowMenu) : 0);
         
     | 
| 
      
 166 
     | 
    
         
            +
                    // Snapshot of the visible/invisible state to compare for updates
         
     | 
| 
      
 167 
     | 
    
         
            +
                    const visibleTop = visibleItemQueue.peek();
         
     | 
| 
      
 168 
     | 
    
         
            +
                    const invisibleTop = invisibleItemQueue.peek();
         
     | 
| 
      
 169 
     | 
    
         
            +
                    let currentWidth = visibleItemQueue.all().map((id)=>overflowItems[id].element).map(getOffsetSize).reduce((prev, current)=>prev + current, 0);
         
     | 
| 
      
 170 
     | 
    
         
            +
                    // Add items until available width is filled - can result in overflow
         
     | 
| 
      
 171 
     | 
    
         
            +
                    while(currentWidth < availableSize && invisibleItemQueue.size() > 0){
         
     | 
| 
      
 172 
     | 
    
         
            +
                        currentWidth += showItem();
         
     | 
| 
      
 173 
     | 
    
         
            +
                    }
         
     | 
| 
      
 174 
     | 
    
         
            +
                    // Remove items until there's no more overflow
         
     | 
| 
      
 175 
     | 
    
         
            +
                    while(currentWidth > availableSize && visibleItemQueue.size() > options.minimumVisible){
         
     | 
| 
      
 176 
     | 
    
         
            +
                        currentWidth -= hideItem();
         
     | 
| 
      
 177 
     | 
    
         
            +
                    }
         
     | 
| 
      
 178 
     | 
    
         
            +
                    // only update when the state of visible/invisible items has changed
         
     | 
| 
      
 179 
     | 
    
         
            +
                    return visibleItemQueue.peek() !== visibleTop || invisibleItemQueue.peek() !== invisibleTop;
         
     | 
| 
      
 180 
     | 
    
         
            +
                };
         
     | 
| 
      
 181 
     | 
    
         
            +
                const forceUpdate = ()=>{
         
     | 
| 
      
 182 
     | 
    
         
            +
                    if (processOverflowItems() || forceDispatch) {
         
     | 
| 
      
 183 
     | 
    
         
            +
                        forceDispatch = false;
         
     | 
| 
      
 184 
     | 
    
         
            +
                        dispatchOverflowUpdate();
         
     | 
| 
      
 185 
     | 
    
         
            +
                    }
         
     | 
| 
      
 186 
     | 
    
         
            +
                };
         
     | 
| 
      
 187 
     | 
    
         
            +
                const update = debounce(forceUpdate);
         
     | 
| 
      
 188 
     | 
    
         
            +
                const observe = (observedContainer, userOptions)=>{
         
     | 
| 
      
 189 
     | 
    
         
            +
                    Object.assign(options, userOptions);
         
     | 
| 
      
 190 
     | 
    
         
            +
                    observing = true;
         
     | 
| 
      
 191 
     | 
    
         
            +
                    Object.values(overflowItems).forEach((item)=>visibleItemQueue.enqueue(item.id));
         
     | 
| 
      
 192 
     | 
    
         
            +
                    container = observedContainer;
         
     | 
| 
      
 193 
     | 
    
         
            +
                    resizeObserver.observe(container);
         
     | 
| 
      
 194 
     | 
    
         
            +
                };
         
     | 
| 
      
 195 
     | 
    
         
            +
                const disconnect = ()=>{
         
     | 
| 
      
 196 
     | 
    
         
            +
                    observing = false;
         
     | 
| 
      
 197 
     | 
    
         
            +
                    resizeObserver.disconnect();
         
     | 
| 
      
 198 
     | 
    
         
            +
                };
         
     | 
| 
      
 199 
     | 
    
         
            +
                const addItem = (item)=>{
         
     | 
| 
      
 200 
     | 
    
         
            +
                    if (overflowItems[item.id]) {
         
     | 
| 
      
 201 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 202 
     | 
    
         
            +
                    }
         
     | 
| 
      
 203 
     | 
    
         
            +
                    overflowItems[item.id] = item;
         
     | 
| 
      
 204 
     | 
    
         
            +
                    // some options can affect priority which are only set on `observe`
         
     | 
| 
      
 205 
     | 
    
         
            +
                    if (observing) {
         
     | 
| 
      
 206 
     | 
    
         
            +
                        // Updates to elements might not change the queue tops
         
     | 
| 
      
 207 
     | 
    
         
            +
                        // i.e. new element is enqueued but the top of the queue stays the same
         
     | 
| 
      
 208 
     | 
    
         
            +
                        // force a dispatch on the next batched update
         
     | 
| 
      
 209 
     | 
    
         
            +
                        forceDispatch = true;
         
     | 
| 
      
 210 
     | 
    
         
            +
                        visibleItemQueue.enqueue(item.id);
         
     | 
| 
      
 211 
     | 
    
         
            +
                    }
         
     | 
| 
      
 212 
     | 
    
         
            +
                    if (item.groupId) {
         
     | 
| 
      
 213 
     | 
    
         
            +
                        groupManager.addItem(item.id, item.groupId);
         
     | 
| 
      
 214 
     | 
    
         
            +
                        item.element.setAttribute(DATA_OVERFLOW_GROUP, item.groupId);
         
     | 
| 
      
 215 
     | 
    
         
            +
                    }
         
     | 
| 
      
 216 
     | 
    
         
            +
                    update();
         
     | 
| 
      
 217 
     | 
    
         
            +
                };
         
     | 
| 
      
 218 
     | 
    
         
            +
                const addOverflowMenu = (el)=>{
         
     | 
| 
      
 219 
     | 
    
         
            +
                    overflowMenu = el;
         
     | 
| 
      
 220 
     | 
    
         
            +
                };
         
     | 
| 
      
 221 
     | 
    
         
            +
                const addDivider = (divider)=>{
         
     | 
| 
      
 222 
     | 
    
         
            +
                    if (!divider.groupId || overflowDividers[divider.groupId]) {
         
     | 
| 
      
 223 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 224 
     | 
    
         
            +
                    }
         
     | 
| 
      
 225 
     | 
    
         
            +
                    divider.element.setAttribute(DATA_OVERFLOW_GROUP, divider.groupId);
         
     | 
| 
      
 226 
     | 
    
         
            +
                    overflowDividers[divider.groupId] = divider;
         
     | 
| 
      
 227 
     | 
    
         
            +
                };
         
     | 
| 
      
 228 
     | 
    
         
            +
                const removeOverflowMenu = ()=>{
         
     | 
| 
      
 229 
     | 
    
         
            +
                    overflowMenu = undefined;
         
     | 
| 
      
 230 
     | 
    
         
            +
                };
         
     | 
| 
      
 231 
     | 
    
         
            +
                const removeDivider = (groupId)=>{
         
     | 
| 
      
 232 
     | 
    
         
            +
                    if (!overflowDividers[groupId]) {
         
     | 
| 
      
 233 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 234 
     | 
    
         
            +
                    }
         
     | 
| 
      
 235 
     | 
    
         
            +
                    const divider = overflowDividers[groupId];
         
     | 
| 
      
 236 
     | 
    
         
            +
                    if (divider.groupId) {
         
     | 
| 
      
 237 
     | 
    
         
            +
                        delete overflowDividers[groupId];
         
     | 
| 
      
 238 
     | 
    
         
            +
                        divider.element.removeAttribute(DATA_OVERFLOW_GROUP);
         
     | 
| 
      
 239 
     | 
    
         
            +
                    }
         
     | 
| 
      
 240 
     | 
    
         
            +
                };
         
     | 
| 
      
 241 
     | 
    
         
            +
                const removeItem = (itemId)=>{
         
     | 
| 
      
 242 
     | 
    
         
            +
                    if (!overflowItems[itemId]) {
         
     | 
| 
      
 243 
     | 
    
         
            +
                        return;
         
     | 
| 
      
 244 
     | 
    
         
            +
                    }
         
     | 
| 
      
 245 
     | 
    
         
            +
                    const item = overflowItems[itemId];
         
     | 
| 
      
 246 
     | 
    
         
            +
                    visibleItemQueue.remove(itemId);
         
     | 
| 
      
 247 
     | 
    
         
            +
                    invisibleItemQueue.remove(itemId);
         
     | 
| 
      
 248 
     | 
    
         
            +
                    if (item.groupId) {
         
     | 
| 
      
 249 
     | 
    
         
            +
                        groupManager.removeItem(item.id, item.groupId);
         
     | 
| 
      
 250 
     | 
    
         
            +
                        item.element.removeAttribute(DATA_OVERFLOW_GROUP);
         
     | 
| 
      
 251 
     | 
    
         
            +
                    }
         
     | 
| 
      
 252 
     | 
    
         
            +
                    delete overflowItems[itemId];
         
     | 
| 
      
 253 
     | 
    
         
            +
                    update();
         
     | 
| 
      
 254 
     | 
    
         
            +
                };
         
     | 
| 
      
 255 
     | 
    
         
            +
                return {
         
     | 
| 
      
 256 
     | 
    
         
            +
                    addItem,
         
     | 
| 
      
 257 
     | 
    
         
            +
                    disconnect,
         
     | 
| 
      
 258 
     | 
    
         
            +
                    forceUpdate,
         
     | 
| 
      
 259 
     | 
    
         
            +
                    observe,
         
     | 
| 
      
 260 
     | 
    
         
            +
                    removeItem,
         
     | 
| 
      
 261 
     | 
    
         
            +
                    update,
         
     | 
| 
      
 262 
     | 
    
         
            +
                    addOverflowMenu,
         
     | 
| 
      
 263 
     | 
    
         
            +
                    removeOverflowMenu,
         
     | 
| 
      
 264 
     | 
    
         
            +
                    addDivider,
         
     | 
| 
      
 265 
     | 
    
         
            +
                    removeDivider
         
     | 
| 
      
 266 
     | 
    
         
            +
                };
         
     | 
| 
       217 
267 
     | 
    
         
             
            }
         
     | 
| 
       218 
     | 
    
         
            -
            //# sourceMappingURL=overflowManager.js.map
         
     |