@fluentui/react-overflow 9.7.2 → 9.9.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.
Files changed (95) hide show
  1. package/CHANGELOG.md +33 -4
  2. package/dist/index.d.ts +120 -17
  3. package/lib/components/Overflow/Overflow.js +14 -0
  4. package/lib/components/Overflow/Overflow.js.map +1 -0
  5. package/lib/components/Overflow/Overflow.types.js +3 -0
  6. package/lib/components/Overflow/Overflow.types.js.map +1 -0
  7. package/lib/components/Overflow/index.js +4 -0
  8. package/lib/components/Overflow/index.js.map +1 -0
  9. package/lib/components/Overflow/renderOverflow.js +19 -0
  10. package/lib/components/Overflow/renderOverflow.js.map +1 -0
  11. package/lib/components/Overflow/useOverflow.js +42 -0
  12. package/lib/components/Overflow/useOverflow.js.map +1 -0
  13. package/lib/components/Overflow/useOverflowStyles.styles.js +22 -0
  14. package/lib/components/Overflow/useOverflowStyles.styles.js.map +1 -0
  15. package/lib/components/Overflow/useOverflowStyles.styles.raw.js +23 -0
  16. package/lib/components/Overflow/useOverflowStyles.styles.raw.js.map +1 -0
  17. package/lib/components/OverflowReorderObserver/OverflowReorderObserver.js +43 -0
  18. package/lib/components/OverflowReorderObserver/OverflowReorderObserver.js.map +1 -0
  19. package/lib/components/OverflowReorderObserver/index.js +1 -0
  20. package/lib/components/OverflowReorderObserver/index.js.map +1 -0
  21. package/lib/index.js +4 -2
  22. package/lib/index.js.map +1 -1
  23. package/lib/overflowContext.js +23 -10
  24. package/lib/overflowContext.js.map +1 -1
  25. package/lib/types.js +1 -1
  26. package/lib/types.js.map +1 -1
  27. package/lib/useIsOverflowGroupVisible.js +2 -2
  28. package/lib/useIsOverflowGroupVisible.js.map +1 -1
  29. package/lib/useIsOverflowItemVisible.js +2 -2
  30. package/lib/useIsOverflowItemVisible.js.map +1 -1
  31. package/lib/useOverflowContainer.js +64 -55
  32. package/lib/useOverflowContainer.js.map +1 -1
  33. package/lib/useOverflowContextValues.js +35 -0
  34. package/lib/useOverflowContextValues.js.map +1 -0
  35. package/lib/useOverflowCount.js +3 -9
  36. package/lib/useOverflowCount.js.map +1 -1
  37. package/lib/useOverflowMenu.js +10 -12
  38. package/lib/useOverflowMenu.js.map +1 -1
  39. package/lib/useOverflowSnapshot.js +23 -0
  40. package/lib/useOverflowSnapshot.js.map +1 -0
  41. package/lib/useOverflowVisibility.js +6 -11
  42. package/lib/useOverflowVisibility.js.map +1 -1
  43. package/lib-commonjs/components/Overflow/Overflow.js +23 -0
  44. package/lib-commonjs/components/Overflow/Overflow.js.map +1 -0
  45. package/lib-commonjs/components/Overflow/Overflow.types.js +6 -0
  46. package/lib-commonjs/components/Overflow/Overflow.types.js.map +1 -0
  47. package/lib-commonjs/components/Overflow/index.js +28 -0
  48. package/lib-commonjs/components/Overflow/index.js.map +1 -0
  49. package/lib-commonjs/components/Overflow/renderOverflow.js +25 -0
  50. package/lib-commonjs/components/Overflow/renderOverflow.js.map +1 -0
  51. package/lib-commonjs/components/Overflow/useOverflow.js +47 -0
  52. package/lib-commonjs/components/Overflow/useOverflow.js.map +1 -0
  53. package/lib-commonjs/components/Overflow/useOverflowStyles.styles.js +41 -0
  54. package/lib-commonjs/components/Overflow/useOverflowStyles.styles.js.map +1 -0
  55. package/lib-commonjs/components/Overflow/useOverflowStyles.styles.raw.js +41 -0
  56. package/lib-commonjs/components/Overflow/useOverflowStyles.styles.raw.js.map +1 -0
  57. package/lib-commonjs/components/OverflowReorderObserver/OverflowReorderObserver.js +37 -0
  58. package/lib-commonjs/components/OverflowReorderObserver/OverflowReorderObserver.js.map +1 -0
  59. package/lib-commonjs/components/OverflowReorderObserver/index.js +11 -0
  60. package/lib-commonjs/components/OverflowReorderObserver/index.js.map +1 -0
  61. package/lib-commonjs/index.js +20 -0
  62. package/lib-commonjs/index.js.map +1 -1
  63. package/lib-commonjs/overflowContext.js +23 -8
  64. package/lib-commonjs/overflowContext.js.map +1 -1
  65. package/lib-commonjs/types.js +1 -1
  66. package/lib-commonjs/types.js.map +1 -1
  67. package/lib-commonjs/useIsOverflowGroupVisible.js +2 -2
  68. package/lib-commonjs/useIsOverflowGroupVisible.js.map +1 -1
  69. package/lib-commonjs/useIsOverflowItemVisible.js +2 -2
  70. package/lib-commonjs/useIsOverflowItemVisible.js.map +1 -1
  71. package/lib-commonjs/useOverflowContainer.js +62 -53
  72. package/lib-commonjs/useOverflowContainer.js.map +1 -1
  73. package/lib-commonjs/useOverflowContextValues.js +41 -0
  74. package/lib-commonjs/useOverflowContextValues.js.map +1 -0
  75. package/lib-commonjs/useOverflowCount.js +3 -9
  76. package/lib-commonjs/useOverflowCount.js.map +1 -1
  77. package/lib-commonjs/useOverflowMenu.js +10 -12
  78. package/lib-commonjs/useOverflowMenu.js.map +1 -1
  79. package/lib-commonjs/useOverflowSnapshot.js +30 -0
  80. package/lib-commonjs/useOverflowSnapshot.js.map +1 -0
  81. package/lib-commonjs/useOverflowVisibility.js +6 -12
  82. package/lib-commonjs/useOverflowVisibility.js.map +1 -1
  83. package/package.json +4 -4
  84. package/lib/components/Overflow.js +0 -60
  85. package/lib/components/Overflow.js.map +0 -1
  86. package/lib/components/useOverflowStyles.styles.js +0 -14
  87. package/lib/components/useOverflowStyles.styles.js.map +0 -1
  88. package/lib/components/useOverflowStyles.styles.raw.js +0 -15
  89. package/lib/components/useOverflowStyles.styles.raw.js.map +0 -1
  90. package/lib-commonjs/components/Overflow.js +0 -69
  91. package/lib-commonjs/components/Overflow.js.map +0 -1
  92. package/lib-commonjs/components/useOverflowStyles.styles.js +0 -25
  93. package/lib-commonjs/components/useOverflowStyles.styles.js.map +0 -1
  94. package/lib-commonjs/components/useOverflowStyles.styles.raw.js +0 -25
  95. package/lib-commonjs/components/useOverflowStyles.styles.raw.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useOverflowContainer.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createOverflowManager } from '@fluentui/priority-overflow';\n\n/**\n * @internal\n */\nimport type {\n OnUpdateItemVisibility,\n OnUpdateOverflow,\n OverflowItemEntry,\n OverflowDividerEntry,\n OverflowManager,\n ObserveOptions,\n} from '@fluentui/priority-overflow';\nimport { canUseDOM, useEventCallback, useFirstMount, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport type { UseOverflowContainerReturn } from './types';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_DIVIDER, DATA_OVERFLOW_ITEM, DATA_OVERFLOW_MENU } from './constants';\n\nconst noop = () => null;\n\n/**\n * @internal\n * @param update - Callback when overflow state changes\n * @param options - Options to configure the overflow container\n * @returns - ref to attach to an intrinsic HTML element and imperative functions\n */\nexport const useOverflowContainer = <TElement extends HTMLElement>(\n update: OnUpdateOverflow,\n options: Omit<ObserveOptions, 'onUpdateOverflow'>,\n): UseOverflowContainerReturn<TElement> => {\n 'use no memo';\n\n const {\n overflowAxis = 'horizontal',\n overflowDirection = 'end',\n padding = 10,\n minimumVisible = 0,\n onUpdateItemVisibility = noop,\n hasHiddenItems = false,\n } = options;\n\n const onUpdateOverflow = useEventCallback(update);\n\n const overflowOptions = React.useMemo(\n () => ({\n overflowAxis,\n overflowDirection,\n padding,\n minimumVisible,\n onUpdateItemVisibility,\n onUpdateOverflow,\n hasHiddenItems,\n }),\n [\n minimumVisible,\n onUpdateItemVisibility,\n overflowAxis,\n overflowDirection,\n padding,\n onUpdateOverflow,\n hasHiddenItems,\n ],\n );\n\n const firstMount = useFirstMount();\n\n // DOM ref to the overflow container element\n const containerRef = React.useRef<TElement>(null);\n\n const [overflowManager, setOverflowManager] = React.useState<OverflowManager | null>(() =>\n canUseDOM() ? createOverflowManager() : null,\n );\n\n // On first mount there is no need to create an overflow manager and re-render\n useIsomorphicLayoutEffect(() => {\n if (firstMount && containerRef.current) {\n overflowManager?.observe(containerRef.current, overflowOptions);\n }\n }, [firstMount, overflowManager, overflowOptions]);\n\n useIsomorphicLayoutEffect(() => {\n if (!containerRef.current || !canUseDOM() || firstMount) {\n return;\n }\n\n const newOverflowManager = createOverflowManager();\n newOverflowManager.observe(containerRef.current, overflowOptions);\n setOverflowManager(newOverflowManager);\n // We don't want to re-create the overflow manager when the first mount flag changes from true to false\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [overflowOptions]);\n\n /* Clean up overflow manager on unmount */\n React.useEffect(\n () => () => {\n overflowManager?.disconnect();\n },\n [overflowManager],\n );\n\n const registerItem = React.useCallback(\n (item: OverflowItemEntry) => {\n overflowManager?.addItem(item);\n item.element.setAttribute(DATA_OVERFLOW_ITEM, '');\n\n return () => {\n item.element.removeAttribute(DATA_OVERFLOWING);\n item.element.removeAttribute(DATA_OVERFLOW_ITEM);\n overflowManager?.removeItem(item.id);\n };\n },\n [overflowManager],\n );\n\n const registerDivider = React.useCallback(\n (divider: OverflowDividerEntry) => {\n const el = divider.element;\n overflowManager?.addDivider(divider);\n el.setAttribute(DATA_OVERFLOW_DIVIDER, '');\n\n return () => {\n divider.groupId && overflowManager?.removeDivider(divider.groupId);\n el.removeAttribute(DATA_OVERFLOW_DIVIDER);\n };\n },\n [overflowManager],\n );\n\n const registerOverflowMenu = React.useCallback(\n (el: HTMLElement) => {\n overflowManager?.addOverflowMenu(el);\n el.setAttribute(DATA_OVERFLOW_MENU, '');\n\n return () => {\n overflowManager?.removeOverflowMenu();\n el.removeAttribute(DATA_OVERFLOW_MENU);\n };\n },\n [overflowManager],\n );\n\n const updateOverflow = React.useCallback(() => {\n overflowManager?.update();\n }, [overflowManager]);\n\n return {\n registerItem,\n registerDivider,\n registerOverflowMenu,\n updateOverflow,\n containerRef,\n };\n};\n\nexport const updateVisibilityAttribute: OnUpdateItemVisibility = ({ item, visible }) => {\n if (visible) {\n item.element.removeAttribute(DATA_OVERFLOWING);\n } else {\n item.element.setAttribute(DATA_OVERFLOWING, '');\n }\n};\n"],"names":["React","createOverflowManager","canUseDOM","useEventCallback","useFirstMount","useIsomorphicLayoutEffect","DATA_OVERFLOWING","DATA_OVERFLOW_DIVIDER","DATA_OVERFLOW_ITEM","DATA_OVERFLOW_MENU","noop","useOverflowContainer","update","options","overflowAxis","overflowDirection","padding","minimumVisible","onUpdateItemVisibility","hasHiddenItems","onUpdateOverflow","overflowOptions","useMemo","firstMount","containerRef","useRef","overflowManager","setOverflowManager","useState","current","observe","newOverflowManager","useEffect","disconnect","registerItem","useCallback","item","addItem","element","setAttribute","removeAttribute","removeItem","id","registerDivider","divider","el","addDivider","groupId","removeDivider","registerOverflowMenu","addOverflowMenu","removeOverflowMenu","updateOverflow","updateVisibilityAttribute","visible"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/useOverflowContainer.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { createOverflowManager, EMPTY_SNAPSHOT } from '@fluentui/priority-overflow';\n\n/**\n * @internal\n */\nimport type {\n OnUpdateItemVisibility,\n OnUpdateOverflow,\n OverflowItemEntry,\n OverflowDividerEntry,\n OverflowManager,\n OverflowOptions,\n} from '@fluentui/priority-overflow';\nimport { canUseDOM, useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport type { UseOverflowContainerReturn } from './types';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_DIVIDER, DATA_OVERFLOW_ITEM, DATA_OVERFLOW_MENU } from './constants';\n\n/**\n * @internal\n * @param update - Callback when overflow state changes\n * @param options - Options to configure the overflow container\n * @returns - ref to attach to an intrinsic HTML element and imperative functions\n */\nexport const useOverflowContainer = <TElement extends HTMLElement>(\n update: OnUpdateOverflow,\n options: Omit<OverflowOptions, 'onUpdateOverflow'>,\n): UseOverflowContainerReturn<TElement> => {\n const {\n overflowAxis = 'horizontal',\n overflowDirection = 'end',\n padding = 10,\n minimumVisible = 0,\n onUpdateItemVisibility = noop,\n hasHiddenItems = false,\n } = options;\n\n const onUpdateItemVisibilityCallback = useEventCallback(onUpdateItemVisibility);\n\n const observeOptions: Required<OverflowOptions> = React.useMemo(\n () => ({\n overflowAxis,\n overflowDirection,\n padding,\n minimumVisible,\n onUpdateItemVisibility: onUpdateItemVisibilityCallback,\n onUpdateOverflow: update,\n hasHiddenItems,\n }),\n [minimumVisible, onUpdateItemVisibilityCallback, overflowAxis, overflowDirection, padding, update, hasHiddenItems],\n );\n\n const containerRef = React.useRef<TElement>(null);\n\n const managerRef = React.useRef<OverflowManager | null>(null);\n\n if (managerRef.current === null) {\n managerRef.current = canUseDOM() ? createOverflowManager(observeOptions) : null;\n }\n\n useIsomorphicLayoutEffect(() => {\n if (managerRef.current && containerRef.current) {\n // forceUpdate resolves overflow synchronously for a correct first paint; the manager guards it\n // on the container being measured.\n managerRef.current.observe(containerRef.current, { forceUpdate: true });\n return () => managerRef.current?.disconnect();\n }\n }, []);\n\n useIsomorphicLayoutEffect(() => {\n managerRef.current?.setOptions(observeOptions);\n }, [observeOptions]);\n\n const registerItem = React.useCallback((item: OverflowItemEntry) => {\n managerRef.current?.addItem(item);\n item.element.setAttribute(DATA_OVERFLOW_ITEM, '');\n\n return () => {\n item.element.removeAttribute(DATA_OVERFLOWING);\n item.element.removeAttribute(DATA_OVERFLOW_ITEM);\n managerRef.current?.removeItem(item.id);\n };\n }, []);\n\n const registerDivider = React.useCallback((divider: OverflowDividerEntry) => {\n const el = divider.element;\n managerRef.current?.addDivider(divider);\n el.setAttribute(DATA_OVERFLOW_DIVIDER, '');\n\n return () => {\n managerRef.current?.removeDivider(divider.groupId);\n el.removeAttribute(DATA_OVERFLOW_DIVIDER);\n };\n }, []);\n\n const registerOverflowMenu = React.useCallback((el: HTMLElement) => {\n managerRef.current?.addOverflowMenu(el);\n el.setAttribute(DATA_OVERFLOW_MENU, '');\n\n return () => {\n managerRef.current?.removeOverflowMenu();\n el.removeAttribute(DATA_OVERFLOW_MENU);\n };\n }, []);\n\n const updateOverflow = React.useCallback(() => {\n managerRef.current?.update();\n }, []);\n\n const getSnapshot = React.useCallback<OverflowManager['getSnapshot']>(\n () => managerRef.current?.getSnapshot() ?? EMPTY_SNAPSHOT,\n [],\n );\n\n const subscribe = React.useCallback<OverflowManager['subscribe']>(\n listener => managerRef.current?.subscribe(listener) ?? noop,\n [],\n );\n\n const forceUpdateOverflow = React.useCallback(() => {\n managerRef.current?.forceUpdate();\n }, []);\n\n return {\n registerItem,\n registerDivider,\n registerOverflowMenu,\n updateOverflow,\n forceUpdateOverflow,\n containerRef,\n getSnapshot,\n subscribe,\n };\n};\n\nconst noop = () => {\n /* noop */\n};\n\nexport const updateVisibilityAttribute: OnUpdateItemVisibility = ({ item, visible }) => {\n if (visible) {\n item.element.removeAttribute(DATA_OVERFLOWING);\n } else {\n item.element.setAttribute(DATA_OVERFLOWING, '');\n }\n};\n"],"names":["React","createOverflowManager","EMPTY_SNAPSHOT","canUseDOM","useEventCallback","useIsomorphicLayoutEffect","DATA_OVERFLOWING","DATA_OVERFLOW_DIVIDER","DATA_OVERFLOW_ITEM","DATA_OVERFLOW_MENU","useOverflowContainer","update","options","overflowAxis","overflowDirection","padding","minimumVisible","onUpdateItemVisibility","noop","hasHiddenItems","onUpdateItemVisibilityCallback","observeOptions","useMemo","onUpdateOverflow","containerRef","useRef","managerRef","current","observe","forceUpdate","disconnect","setOptions","registerItem","useCallback","item","addItem","element","setAttribute","removeAttribute","removeItem","id","registerDivider","divider","el","addDivider","removeDivider","groupId","registerOverflowMenu","addOverflowMenu","removeOverflowMenu","updateOverflow","getSnapshot","subscribe","listener","forceUpdateOverflow","updateVisibilityAttribute","visible"],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useOverflowContextValues_unstable", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return useOverflowContextValues_unstable;
10
+ }
11
+ });
12
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
+ const useOverflowContextValues_unstable = (state)=>{
15
+ const { registerItem, registerDivider, registerOverflowMenu, updateOverflow, forceUpdateOverflow, containerRef, getSnapshot, subscribe } = state;
16
+ const overflow = _react.useMemo(()=>({
17
+ groupVisibility: {},
18
+ itemVisibility: {},
19
+ hasOverflow: false,
20
+ registerItem,
21
+ registerDivider,
22
+ registerOverflowMenu,
23
+ updateOverflow,
24
+ forceUpdateOverflow,
25
+ containerRef,
26
+ getSnapshot,
27
+ subscribe
28
+ }), [
29
+ registerItem,
30
+ registerDivider,
31
+ registerOverflowMenu,
32
+ updateOverflow,
33
+ forceUpdateOverflow,
34
+ containerRef,
35
+ getSnapshot,
36
+ subscribe
37
+ ]);
38
+ return {
39
+ overflow
40
+ };
41
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/useOverflowContextValues.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { OverflowContextValue } from './overflowContext';\nimport type { OverflowComponentState, OverflowContextValues } from './components/Overflow/Overflow.types';\n\n/**\n * Assembles the overflow context values provided to descendants, from the state returned by\n * {@link useOverflow_unstable}.\n *\n * @internal\n */\nexport const useOverflowContextValues_unstable = (state: OverflowComponentState): OverflowContextValues => {\n const {\n registerItem,\n registerDivider,\n registerOverflowMenu,\n updateOverflow,\n forceUpdateOverflow,\n containerRef,\n getSnapshot,\n subscribe,\n } = state;\n\n const overflow = React.useMemo<OverflowContextValue>(\n () => ({\n groupVisibility: {},\n itemVisibility: {},\n hasOverflow: false,\n registerItem,\n registerDivider,\n registerOverflowMenu,\n updateOverflow,\n forceUpdateOverflow,\n containerRef,\n getSnapshot,\n subscribe,\n }),\n [\n registerItem,\n registerDivider,\n registerOverflowMenu,\n updateOverflow,\n forceUpdateOverflow,\n containerRef,\n getSnapshot,\n subscribe,\n ],\n );\n\n return { overflow };\n};\n"],"names":["React","useOverflowContextValues_unstable","state","registerItem","registerDivider","registerOverflowMenu","updateOverflow","forceUpdateOverflow","containerRef","getSnapshot","subscribe","overflow","useMemo","groupVisibility","itemVisibility","hasOverflow"],"mappings":"AAAA;;;;;+BAYaC;;;;;;;iEAVU,QAAQ;AAUxB,0CAA0C,CAACC;IAChD,MAAM,EACJC,YAAY,EACZC,eAAe,EACfC,oBAAoB,EACpBC,cAAc,EACdC,mBAAmB,EACnBC,YAAY,EACZC,WAAW,EACXC,SAAS,EACV,GAAGR;IAEJ,MAAMS,WAAWX,OAAMY,OAAO,CAC5B,IAAO,CAAA;YACLC,iBAAiB,CAAC;YAClBC,gBAAgB,CAAC;YACjBC,aAAa;YACbZ;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;YACAC;SACF,CAAA,EACA;QACEP;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;QACAC;KACD;IAGH,OAAO;QAAEC;IAAS;AACpB,EAAE"}
@@ -9,12 +9,6 @@ Object.defineProperty(exports, "useOverflowCount", {
9
9
  return useOverflowCount;
10
10
  }
11
11
  });
12
- const _overflowContext = require("./overflowContext");
13
- const useOverflowCount = ()=>(0, _overflowContext.useOverflowContext)((v)=>{
14
- return Object.entries(v.itemVisibility).reduce((acc, [id, visible])=>{
15
- if (!visible) {
16
- acc++;
17
- }
18
- return acc;
19
- }, 0);
20
- });
12
+ const _useOverflowSnapshot = require("./useOverflowSnapshot");
13
+ const useOverflowCount = ()=>(0, _useOverflowSnapshot.useOverflowSnapshot)(selectInvisibleItemCount);
14
+ const selectInvisibleItemCount = (snapshot)=>snapshot.invisibleItemCount;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useOverflowCount.ts"],"sourcesContent":["'use client';\n\nimport { useOverflowContext } from './overflowContext';\n\n/**\n * @returns Number of items that are overflowing\n */\nexport const useOverflowCount = (): number =>\n useOverflowContext(v => {\n return Object.entries(v.itemVisibility).reduce((acc, [id, visible]) => {\n if (!visible) {\n acc++;\n }\n\n return acc;\n }, 0);\n });\n"],"names":["useOverflowContext","useOverflowCount","v","Object","entries","itemVisibility","reduce","acc","id","visible"],"mappings":"AAAA;;;;;;;;;;;iCAEmC,oBAAoB;AAKhD,MAAMC,mBAAmB,QAC9BD,mCAAAA,EAAmBE,CAAAA;QACjB,OAAOC,OAAOC,OAAO,CAACF,EAAEG,cAAc,EAAEC,MAAM,CAAC,CAACC,KAAK,CAACC,IAAIC,QAAQ;YAChE,IAAI,CAACA,SAAS;gBACZF;YACF;YAEA,OAAOA;QACT,GAAG;IACL,GAAG"}
1
+ {"version":3,"sources":["../src/useOverflowCount.ts"],"sourcesContent":["'use client';\n\nimport type { OverflowSnapshot } from '@fluentui/priority-overflow';\nimport { useOverflowSnapshot } from './useOverflowSnapshot';\n\n/**\n * @returns Number of items that are overflowing\n */\nexport const useOverflowCount = (): number => useOverflowSnapshot(selectInvisibleItemCount);\n\nconst selectInvisibleItemCount = (snapshot: OverflowSnapshot): number => snapshot.invisibleItemCount;\n"],"names":["useOverflowSnapshot","useOverflowCount","selectInvisibleItemCount","snapshot","invisibleItemCount"],"mappings":"AAAA;;;;;;;;;;;qCAGoC,wBAAwB;AAKrD,MAAMC,mBAAmB,QAAcD,wCAAAA,EAAoBE,0BAA0B;AAE5F,MAAMA,2BAA2B,CAACC,WAAuCA,SAASC,kBAAkB"}
@@ -17,28 +17,26 @@ const _useOverflowCount = require("./useOverflowCount");
17
17
  function useOverflowMenu(id) {
18
18
  const elementId = (0, _reactutilities.useId)('overflow-menu', id);
19
19
  const overflowCount = (0, _useOverflowCount.useOverflowCount)();
20
- const registerOverflowMenu = (0, _overflowContext.useOverflowContext)((v)=>v.registerOverflowMenu);
21
- const updateOverflow = (0, _overflowContext.useOverflowContext)((v)=>v.updateOverflow);
20
+ const { registerOverflowMenu, forceUpdateOverflow } = (0, _overflowContext.useOverflowContext)();
22
21
  const ref = _react.useRef(null);
23
22
  const isOverflowing = overflowCount > 0;
24
23
  (0, _reactutilities.useIsomorphicLayoutEffect)(()=>{
25
24
  if (ref.current) {
26
- return registerOverflowMenu(ref.current);
25
+ const unregister = registerOverflowMenu(ref.current);
26
+ if (isOverflowing) {
27
+ forceUpdateOverflow();
28
+ }
29
+ return ()=>{
30
+ unregister();
31
+ forceUpdateOverflow();
32
+ };
27
33
  }
28
34
  }, [
29
35
  registerOverflowMenu,
36
+ forceUpdateOverflow,
30
37
  isOverflowing,
31
38
  elementId
32
39
  ]);
33
- (0, _reactutilities.useIsomorphicLayoutEffect)(()=>{
34
- if (isOverflowing) {
35
- updateOverflow();
36
- }
37
- }, [
38
- isOverflowing,
39
- updateOverflow,
40
- ref
41
- ]);
42
40
  return {
43
41
  ref,
44
42
  overflowCount,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useOverflowMenu.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useId, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport { useOverflowContext } from './overflowContext';\nimport { useOverflowCount } from './useOverflowCount';\n\nexport function useOverflowMenu<TElement extends HTMLElement>(\n id?: string,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n): { ref: React.MutableRefObject<TElement | null>; overflowCount: number; isOverflowing: boolean } {\n const elementId = useId('overflow-menu', id);\n const overflowCount = useOverflowCount();\n const registerOverflowMenu = useOverflowContext(v => v.registerOverflowMenu);\n const updateOverflow = useOverflowContext(v => v.updateOverflow);\n const ref = React.useRef<TElement | null>(null);\n const isOverflowing = overflowCount > 0;\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n return registerOverflowMenu(ref.current);\n }\n }, [registerOverflowMenu, isOverflowing, elementId]);\n\n useIsomorphicLayoutEffect(() => {\n if (isOverflowing) {\n updateOverflow();\n }\n }, [isOverflowing, updateOverflow, ref]);\n\n return { ref, overflowCount, isOverflowing };\n}\n"],"names":["React","useId","useIsomorphicLayoutEffect","useOverflowContext","useOverflowCount","useOverflowMenu","id","elementId","overflowCount","registerOverflowMenu","v","updateOverflow","ref","useRef","isOverflowing","current"],"mappings":"AAAA;;;;;+BAOgBK;;;;;;;iEALO,QAAQ;gCACkB,4BAA4B;iCAC1C,oBAAoB;kCACtB,qBAAqB;AAE/C,yBACLC,EAAW;IAGX,MAAMC,gBAAYN,qBAAAA,EAAM,iBAAiBK;IACzC,MAAME,oBAAgBJ,kCAAAA;IACtB,MAAMK,2BAAuBN,mCAAAA,EAAmBO,CAAAA,IAAKA,EAAED,oBAAoB;IAC3E,MAAME,qBAAiBR,mCAAAA,EAAmBO,CAAAA,IAAKA,EAAEC,cAAc;IAC/D,MAAMC,MAAMZ,OAAMa,MAAM,CAAkB;IAC1C,MAAMC,gBAAgBN,gBAAgB;IAEtCN,6CAAAA,EAA0B;QACxB,IAAIU,IAAIG,OAAO,EAAE;YACf,OAAON,qBAAqBG,IAAIG,OAAO;QACzC;IACF,GAAG;QAACN;QAAsBK;QAAeP;KAAU;QAEnDL,yCAAAA,EAA0B;QACxB,IAAIY,eAAe;YACjBH;QACF;IACF,GAAG;QAACG;QAAeH;QAAgBC;KAAI;IAEvC,OAAO;QAAEA;QAAKJ;QAAeM;IAAc;AAC7C"}
1
+ {"version":3,"sources":["../src/useOverflowMenu.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useId, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport { useOverflowContext } from './overflowContext';\nimport { useOverflowCount } from './useOverflowCount';\n\nexport function useOverflowMenu<TElement extends HTMLElement>(\n id?: string,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n): { ref: React.MutableRefObject<TElement | null>; overflowCount: number; isOverflowing: boolean } {\n const elementId = useId('overflow-menu', id);\n const overflowCount = useOverflowCount();\n const { registerOverflowMenu, forceUpdateOverflow } = useOverflowContext();\n const ref = React.useRef<TElement | null>(null);\n const isOverflowing = overflowCount > 0;\n\n useIsomorphicLayoutEffect(() => {\n if (ref.current) {\n const unregister = registerOverflowMenu(ref.current);\n if (isOverflowing) {\n forceUpdateOverflow();\n }\n return () => {\n unregister();\n forceUpdateOverflow();\n };\n }\n }, [registerOverflowMenu, forceUpdateOverflow, isOverflowing, elementId]);\n\n return { ref, overflowCount, isOverflowing };\n}\n"],"names":["React","useId","useIsomorphicLayoutEffect","useOverflowContext","useOverflowCount","useOverflowMenu","id","elementId","overflowCount","registerOverflowMenu","forceUpdateOverflow","ref","useRef","isOverflowing","current","unregister"],"mappings":"AAAA;;;;;+BAOgBK;;;;;;;iEALO,QAAQ;gCACkB,4BAA4B;iCAC1C,oBAAoB;kCACtB,qBAAqB;AAE/C,yBACLC,EAAW;IAGX,MAAMC,gBAAYN,qBAAAA,EAAM,iBAAiBK;IACzC,MAAME,gBAAgBJ,sCAAAA;IACtB,MAAM,EAAEK,oBAAoB,EAAEC,mBAAmB,EAAE,OAAGP,mCAAAA;IACtD,MAAMQ,MAAMX,OAAMY,MAAM,CAAkB;IAC1C,MAAMC,gBAAgBL,gBAAgB;IAEtCN,6CAAAA,EAA0B;QACxB,IAAIS,IAAIG,OAAO,EAAE;YACf,MAAMC,aAAaN,qBAAqBE,IAAIG,OAAO;YACnD,IAAID,eAAe;gBACjBH;YACF;YACA,OAAO;gBACLK;gBACAL;YACF;QACF;IACF,GAAG;QAACD;QAAsBC;QAAqBG;QAAeN;KAAU;IAExE,OAAO;QAAEI;QAAKH;QAAeK;IAAc;AAC7C"}
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "useOverflowSnapshot", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return useOverflowSnapshot;
10
+ }
11
+ });
12
+ const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
+ const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
+ const _reactutilities = require("@fluentui/react-utilities");
15
+ const _overflowContext = require("./overflowContext");
16
+ function useOverflowSnapshot(selector) {
17
+ const { getSnapshot, subscribe } = (0, _overflowContext.useOverflowContext)();
18
+ const select = (0, _reactutilities.useEventCallback)(selector);
19
+ const [selected, setSelected] = _react.useState(()=>selector(getSnapshot()));
20
+ (0, _reactutilities.useIsomorphicLayoutEffect)(()=>{
21
+ const checkForUpdates = ()=>setSelected(select(getSnapshot()));
22
+ checkForUpdates();
23
+ return subscribe(checkForUpdates);
24
+ }, [
25
+ subscribe,
26
+ getSnapshot,
27
+ select
28
+ ]);
29
+ return selected;
30
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/useOverflowSnapshot.ts"],"sourcesContent":["'use client';\n\nimport type { OverflowSnapshot } from '@fluentui/priority-overflow';\nimport * as React from 'react';\nimport { useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport { useOverflowContext } from './overflowContext';\n\n/**\n * Subscribes to the overflow snapshot and returns a derived slice of it.\n *\n * @param selector - derives the slice of the snapshot the consumer depends on\n */\nexport function useOverflowSnapshot<Selected>(selector: (snapshot: OverflowSnapshot) => Selected): Selected {\n const { getSnapshot, subscribe } = useOverflowContext();\n const select = useEventCallback(selector);\n\n const [selected, setSelected] = React.useState(() => selector(getSnapshot()));\n\n useIsomorphicLayoutEffect(() => {\n const checkForUpdates = () => setSelected(select(getSnapshot()));\n checkForUpdates();\n return subscribe(checkForUpdates);\n }, [subscribe, getSnapshot, select]);\n\n return selected;\n}\n"],"names":["React","useEventCallback","useIsomorphicLayoutEffect","useOverflowContext","useOverflowSnapshot","selector","getSnapshot","subscribe","select","selected","setSelected","useState","checkForUpdates"],"mappings":"AAAA;;;;;;;;;;;;iEAGuB,QAAQ;gCAC6B,4BAA4B;iCACrD,oBAAoB;AAOhD,SAASI,oBAA8BC,QAAkD;IAC9F,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAE,OAAGJ,mCAAAA;IACnC,MAAMK,aAASP,gCAAAA,EAAiBI;IAEhC,MAAM,CAACI,UAAUC,YAAY,GAAGV,OAAMW,QAAQ,CAAC,IAAMN,SAASC;QAE9DJ,yCAAAA,EAA0B;QACxB,MAAMU,kBAAkB,IAAMF,YAAYF,OAAOF;QACjDM;QACA,OAAOL,UAAUK;IACnB,GAAG;QAACL;QAAWD;QAAaE;KAAO;IAEnC,OAAOC;AACT"}
@@ -9,17 +9,11 @@ Object.defineProperty(exports, "useOverflowVisibility", {
9
9
  return useOverflowVisibility;
10
10
  }
11
11
  });
12
- const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
- const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
- const _overflowContext = require("./overflowContext");
12
+ const _useOverflowSnapshot = require("./useOverflowSnapshot");
15
13
  function useOverflowVisibility() {
16
- const itemVisibility = (0, _overflowContext.useOverflowContext)((ctx)=>ctx.itemVisibility);
17
- const groupVisibility = (0, _overflowContext.useOverflowContext)((ctx)=>ctx.groupVisibility);
18
- return _react.useMemo(()=>({
19
- itemVisibility,
20
- groupVisibility
21
- }), [
22
- itemVisibility,
23
- groupVisibility
24
- ]);
14
+ return (0, _useOverflowSnapshot.useOverflowSnapshot)(selectVisibility);
25
15
  }
16
+ const selectVisibility = (snapshot)=>({
17
+ itemVisibility: snapshot.itemVisibility,
18
+ groupVisibility: snapshot.groupVisibility
19
+ });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/useOverflowVisibility.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useOverflowContext } from './overflowContext';\n\n/**\n * A hook that returns the visibility status of all items and groups.\n *\n * ⚠️ Heads up!\n *\n * This hook will cause the component it is in to re-render for every single time an item overflows or becomes\n * visible - use with caution\n * @returns visibility status of all items and groups\n */\nexport function useOverflowVisibility(): {\n itemVisibility: Record<string, boolean>;\n groupVisibility: Record<string, import('@fluentui/priority-overflow').OverflowGroupState>;\n} {\n const itemVisibility = useOverflowContext(ctx => ctx.itemVisibility);\n const groupVisibility = useOverflowContext(ctx => ctx.groupVisibility);\n\n return React.useMemo(() => ({ itemVisibility, groupVisibility }), [itemVisibility, groupVisibility]);\n}\n"],"names":["React","useOverflowContext","useOverflowVisibility","itemVisibility","ctx","groupVisibility","useMemo"],"mappings":"AAAA;;;;;;;;;;;;iEAEuB,QAAQ;iCACI,oBAAoB;AAWhD,SAASE;IAId,MAAMC,qBAAiBF,mCAAAA,EAAmBG,CAAAA,MAAOA,IAAID,cAAc;IACnE,MAAME,kBAAkBJ,uCAAAA,EAAmBG,CAAAA,MAAOA,IAAIC,eAAe;IAErE,OAAOL,OAAMM,OAAO,CAAC,IAAO,CAAA;YAAEH;YAAgBE;SAAgB,CAAA,EAAI;QAACF;QAAgBE;KAAgB;AACrG"}
1
+ {"version":3,"sources":["../src/useOverflowVisibility.ts"],"sourcesContent":["'use client';\n\nimport type { OverflowGroupState, OverflowSnapshot } from '@fluentui/priority-overflow';\nimport { useOverflowSnapshot } from './useOverflowSnapshot';\n\n/**\n * A hook that returns the visibility status of all items and groups.\n *\n * ⚠️ Heads up!\n *\n * This hook will cause the component it is in to re-render for every single time an item overflows or becomes\n * visible - use with caution\n * @returns visibility status of all items and groups\n */\nexport function useOverflowVisibility(): {\n itemVisibility: Record<string, boolean>;\n groupVisibility: Record<string, OverflowGroupState>;\n} {\n return useOverflowSnapshot(selectVisibility);\n}\n\nconst selectVisibility = (\n snapshot: OverflowSnapshot,\n): {\n itemVisibility: Record<string, boolean>;\n groupVisibility: Record<string, OverflowGroupState>;\n} => ({\n itemVisibility: snapshot.itemVisibility,\n groupVisibility: snapshot.groupVisibility,\n});\n"],"names":["useOverflowSnapshot","useOverflowVisibility","selectVisibility","snapshot","itemVisibility","groupVisibility"],"mappings":"AAAA;;;;;;;;;;;qCAGoC,wBAAwB;AAWrD,SAASC;IAId,WAAOD,wCAAAA,EAAoBE;AAC7B;AAEA,MAAMA,mBAAmB,CACvBC,WAII,CAAA;QACJC,gBAAgBD,SAASC,cAAc;QACvCC,iBAAiBF,SAASE,eAAe;KAC3C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-overflow",
3
- "version": "9.7.2",
3
+ "version": "9.9.0",
4
4
  "description": "React bindings for @fluentui/priority-overflow",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -12,10 +12,10 @@
12
12
  },
13
13
  "license": "MIT",
14
14
  "dependencies": {
15
- "@fluentui/priority-overflow": "^9.3.0",
16
- "@fluentui/react-context-selector": "^9.2.16",
15
+ "@fluentui/priority-overflow": "^9.4.0",
16
+ "@fluentui/react-shared-contexts": "^9.26.2",
17
17
  "@fluentui/react-theme": "^9.2.1",
18
- "@fluentui/react-utilities": "^9.26.3",
18
+ "@fluentui/react-utilities": "^9.26.5",
19
19
  "@griffel/react": "^1.5.32",
20
20
  "@swc/helpers": "^0.5.1"
21
21
  },
@@ -1,60 +0,0 @@
1
- 'use client';
2
- import * as React from 'react';
3
- import { mergeClasses } from '@griffel/react';
4
- import { applyTriggerPropsToChildren, getTriggerChild, getReactElementRef, useMergedRefs } from '@fluentui/react-utilities';
5
- import { OverflowContext } from '../overflowContext';
6
- import { updateVisibilityAttribute, useOverflowContainer } from '../useOverflowContainer';
7
- import { useOverflowStyles } from './useOverflowStyles.styles';
8
- /**
9
- * Provides an OverflowContext for OverflowItem descendants.
10
- */ export const Overflow = /*#__PURE__*/ React.forwardRef((props, ref)=>{
11
- const styles = useOverflowStyles();
12
- const { children, minimumVisible, overflowAxis = 'horizontal', overflowDirection, padding, onOverflowChange, hasHiddenItems } = props;
13
- const [overflowState, setOverflowState] = React.useState({
14
- hasOverflow: false,
15
- itemVisibility: {},
16
- groupVisibility: {}
17
- });
18
- // useOverflowContainer wraps this method in a useEventCallback.
19
- const update = (data)=>{
20
- const { visibleItems, invisibleItems, groupVisibility } = data;
21
- const itemVisibility = {};
22
- visibleItems.forEach((item)=>{
23
- itemVisibility[item.id] = true;
24
- });
25
- invisibleItems.forEach((x)=>itemVisibility[x.id] = false);
26
- const newState = {
27
- hasOverflow: data.invisibleItems.length > 0,
28
- itemVisibility,
29
- groupVisibility
30
- };
31
- onOverflowChange === null || onOverflowChange === void 0 ? void 0 : onOverflowChange(null, {
32
- ...newState
33
- });
34
- setOverflowState(newState);
35
- };
36
- const { containerRef, registerItem, updateOverflow, registerOverflowMenu, registerDivider } = useOverflowContainer(update, {
37
- overflowDirection,
38
- overflowAxis,
39
- padding,
40
- minimumVisible,
41
- hasHiddenItems,
42
- onUpdateItemVisibility: updateVisibilityAttribute
43
- });
44
- const child = getTriggerChild(children);
45
- const clonedChild = applyTriggerPropsToChildren(children, {
46
- ref: useMergedRefs(containerRef, ref, getReactElementRef(child)),
47
- className: mergeClasses('fui-Overflow', styles.overflowMenu, styles.overflowingItems, child === null || child === void 0 ? void 0 : child.props.className)
48
- });
49
- return /*#__PURE__*/ React.createElement(OverflowContext.Provider, {
50
- value: {
51
- itemVisibility: overflowState.itemVisibility,
52
- groupVisibility: overflowState.groupVisibility,
53
- hasOverflow: overflowState.hasOverflow,
54
- registerItem,
55
- updateOverflow,
56
- registerOverflowMenu,
57
- registerDivider
58
- }
59
- }, clonedChild);
60
- });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Overflow.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeClasses } from '@griffel/react';\nimport type { OnUpdateOverflow, OverflowGroupState, ObserveOptions } from '@fluentui/priority-overflow';\nimport {\n applyTriggerPropsToChildren,\n getTriggerChild,\n getReactElementRef,\n useMergedRefs,\n} from '@fluentui/react-utilities';\n\nimport { OverflowContext } from '../overflowContext';\nimport { updateVisibilityAttribute, useOverflowContainer } from '../useOverflowContainer';\nimport { useOverflowStyles } from './useOverflowStyles.styles';\n\ninterface OverflowState {\n hasOverflow: boolean;\n itemVisibility: Record<string, boolean>;\n groupVisibility: Record<string, OverflowGroupState>;\n}\n\nexport interface OnOverflowChangeData extends OverflowState {}\n\n/**\n * Overflow Props\n */\nexport type OverflowProps = Partial<\n Pick<ObserveOptions, 'overflowAxis' | 'overflowDirection' | 'padding' | 'minimumVisible' | 'hasHiddenItems'>\n> & {\n children: React.ReactElement;\n\n // overflow is not caused by DOM event\n // eslint-disable-next-line @nx/workspace-consistent-callback-type\n onOverflowChange?: (ev: null, data: OverflowState) => void;\n};\n\n/**\n * Provides an OverflowContext for OverflowItem descendants.\n */\nexport const Overflow = React.forwardRef((props: OverflowProps, ref) => {\n const styles = useOverflowStyles();\n\n const {\n children,\n minimumVisible,\n overflowAxis = 'horizontal',\n overflowDirection,\n padding,\n onOverflowChange,\n hasHiddenItems,\n } = props;\n\n const [overflowState, setOverflowState] = React.useState<OverflowState>({\n hasOverflow: false,\n itemVisibility: {},\n groupVisibility: {},\n });\n\n // useOverflowContainer wraps this method in a useEventCallback.\n const update: OnUpdateOverflow = data => {\n const { visibleItems, invisibleItems, groupVisibility } = data;\n\n const itemVisibility: Record<string, boolean> = {};\n visibleItems.forEach(item => {\n itemVisibility[item.id] = true;\n });\n invisibleItems.forEach(x => (itemVisibility[x.id] = false));\n const newState = {\n hasOverflow: data.invisibleItems.length > 0,\n itemVisibility,\n groupVisibility,\n };\n onOverflowChange?.(null, { ...newState });\n\n setOverflowState(newState);\n };\n\n const { containerRef, registerItem, updateOverflow, registerOverflowMenu, registerDivider } = useOverflowContainer(\n update,\n {\n overflowDirection,\n overflowAxis,\n padding,\n minimumVisible,\n hasHiddenItems,\n onUpdateItemVisibility: updateVisibilityAttribute,\n },\n );\n\n const child = getTriggerChild<HTMLElement>(children);\n const clonedChild = applyTriggerPropsToChildren(children, {\n ref: useMergedRefs(containerRef, ref, getReactElementRef(child)),\n className: mergeClasses('fui-Overflow', styles.overflowMenu, styles.overflowingItems, child?.props.className),\n });\n\n return (\n <OverflowContext.Provider\n value={{\n itemVisibility: overflowState.itemVisibility,\n groupVisibility: overflowState.groupVisibility,\n hasOverflow: overflowState.hasOverflow,\n registerItem,\n updateOverflow,\n registerOverflowMenu,\n registerDivider,\n }}\n >\n {clonedChild}\n </OverflowContext.Provider>\n );\n});\n"],"names":["React","mergeClasses","applyTriggerPropsToChildren","getTriggerChild","getReactElementRef","useMergedRefs","OverflowContext","updateVisibilityAttribute","useOverflowContainer","useOverflowStyles","Overflow","forwardRef","props","ref","styles","children","minimumVisible","overflowAxis","overflowDirection","padding","onOverflowChange","hasHiddenItems","overflowState","setOverflowState","useState","hasOverflow","itemVisibility","groupVisibility","update","data","visibleItems","invisibleItems","forEach","item","id","x","newState","length","containerRef","registerItem","updateOverflow","registerOverflowMenu","registerDivider","onUpdateItemVisibility","child","clonedChild","className","overflowMenu","overflowingItems","Provider","value"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,SACEC,2BAA2B,EAC3BC,eAAe,EACfC,kBAAkB,EAClBC,aAAa,QACR,4BAA4B;AAEnC,SAASC,eAAe,QAAQ,qBAAqB;AACrD,SAASC,yBAAyB,EAAEC,oBAAoB,QAAQ,0BAA0B;AAC1F,SAASC,iBAAiB,QAAQ,6BAA6B;AAuB/D;;CAEC,GACD,OAAO,MAAMC,yBAAWV,MAAMW,UAAU,CAAC,CAACC,OAAsBC;IAC9D,MAAMC,SAASL;IAEf,MAAM,EACJM,QAAQ,EACRC,cAAc,EACdC,eAAe,YAAY,EAC3BC,iBAAiB,EACjBC,OAAO,EACPC,gBAAgB,EAChBC,cAAc,EACf,GAAGT;IAEJ,MAAM,CAACU,eAAeC,iBAAiB,GAAGvB,MAAMwB,QAAQ,CAAgB;QACtEC,aAAa;QACbC,gBAAgB,CAAC;QACjBC,iBAAiB,CAAC;IACpB;IAEA,gEAAgE;IAChE,MAAMC,SAA2BC,CAAAA;QAC/B,MAAM,EAAEC,YAAY,EAAEC,cAAc,EAAEJ,eAAe,EAAE,GAAGE;QAE1D,MAAMH,iBAA0C,CAAC;QACjDI,aAAaE,OAAO,CAACC,CAAAA;YACnBP,cAAc,CAACO,KAAKC,EAAE,CAAC,GAAG;QAC5B;QACAH,eAAeC,OAAO,CAACG,CAAAA,IAAMT,cAAc,CAACS,EAAED,EAAE,CAAC,GAAG;QACpD,MAAME,WAAW;YACfX,aAAaI,KAAKE,cAAc,CAACM,MAAM,GAAG;YAC1CX;YACAC;QACF;QACAP,6BAAAA,uCAAAA,iBAAmB,MAAM;YAAE,GAAGgB,QAAQ;QAAC;QAEvCb,iBAAiBa;IACnB;IAEA,MAAM,EAAEE,YAAY,EAAEC,YAAY,EAAEC,cAAc,EAAEC,oBAAoB,EAAEC,eAAe,EAAE,GAAGlC,qBAC5FoB,QACA;QACEV;QACAD;QACAE;QACAH;QACAK;QACAsB,wBAAwBpC;IAC1B;IAGF,MAAMqC,QAAQzC,gBAA6BY;IAC3C,MAAM8B,cAAc3C,4BAA4Ba,UAAU;QACxDF,KAAKR,cAAciC,cAAczB,KAAKT,mBAAmBwC;QACzDE,WAAW7C,aAAa,gBAAgBa,OAAOiC,YAAY,EAAEjC,OAAOkC,gBAAgB,EAAEJ,kBAAAA,4BAAAA,MAAOhC,KAAK,CAACkC,SAAS;IAC9G;IAEA,qBACE,oBAACxC,gBAAgB2C,QAAQ;QACvBC,OAAO;YACLxB,gBAAgBJ,cAAcI,cAAc;YAC5CC,iBAAiBL,cAAcK,eAAe;YAC9CF,aAAaH,cAAcG,WAAW;YACtCc;YACAC;YACAC;YACAC;QACF;OAECG;AAGP,GAAG"}
@@ -1,14 +0,0 @@
1
- 'use client';
2
-
3
- import { __styles } from '@griffel/react';
4
- import { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';
5
- export const useOverflowStyles = /*#__PURE__*/__styles({
6
- overflowMenu: {
7
- Brvla84: "fyfkpbf"
8
- },
9
- overflowingItems: {
10
- zb22lx: "f10570jf"
11
- }
12
- }, {
13
- d: [".fyfkpbf [data-overflow-menu]{flex-shrink:0;}", ".f10570jf [data-overflowing]{display:none;}"]
14
- });
@@ -1 +0,0 @@
1
- {"version":3,"names":["__styles","DATA_OVERFLOWING","DATA_OVERFLOW_MENU","useOverflowStyles","overflowMenu","Brvla84","overflowingItems","zb22lx","d"],"sources":["useOverflowStyles.styles.js"],"sourcesContent":["'use client';\nimport { makeStyles } from '@griffel/react';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';\nexport const useOverflowStyles = makeStyles({\n overflowMenu: {\n [`& [${DATA_OVERFLOW_MENU}]`]: {\n flexShrink: 0\n }\n },\n overflowingItems: {\n [`& [${DATA_OVERFLOWING}]`]: {\n display: 'none'\n }\n }\n});\n"],"mappings":"AAAA,YAAY;;AACZ,SAAAA,QAAA,QAA2B,gBAAgB;AAC3C,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,cAAc;AACnE,OAAO,MAAMC,iBAAiB,gBAAGH,QAAA;EAAAI,YAAA;IAAAC,OAAA;EAAA;EAAAC,gBAAA;IAAAC,MAAA;EAAA;AAAA;EAAAC,CAAA;AAAA,CAWhC,CAAC","ignoreList":[]}
@@ -1,15 +0,0 @@
1
- 'use client';
2
- import { makeStyles } from '@griffel/react';
3
- import { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';
4
- export const useOverflowStyles = makeStyles({
5
- overflowMenu: {
6
- [`& [${DATA_OVERFLOW_MENU}]`]: {
7
- flexShrink: 0
8
- }
9
- },
10
- overflowingItems: {
11
- [`& [${DATA_OVERFLOWING}]`]: {
12
- display: 'none'
13
- }
14
- }
15
- });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/useOverflowStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles } from '@griffel/react';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';\n\nexport const useOverflowStyles = makeStyles({\n overflowMenu: {\n [`& [${DATA_OVERFLOW_MENU}]`]: {\n flexShrink: 0,\n },\n },\n\n overflowingItems: {\n [`& [${DATA_OVERFLOWING}]`]: {\n display: 'none',\n },\n },\n});\n"],"names":["makeStyles","DATA_OVERFLOWING","DATA_OVERFLOW_MENU","useOverflowStyles","overflowMenu","flexShrink","overflowingItems","display"],"mappings":"AAAA;AAEA,SAASA,UAAU,QAAQ,iBAAiB;AAC5C,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,eAAe;AAEpE,OAAO,MAAMC,oBAAoBH,WAAW;IAC1CI,cAAc;QACZ,CAAC,CAAC,GAAG,EAAEF,mBAAmB,CAAC,CAAC,CAAC,EAAE;YAC7BG,YAAY;QACd;IACF;IAEAC,kBAAkB;QAChB,CAAC,CAAC,GAAG,EAAEL,iBAAiB,CAAC,CAAC,CAAC,EAAE;YAC3BM,SAAS;QACX;IACF;AACF,GAAG"}
@@ -1,69 +0,0 @@
1
- 'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "Overflow", {
7
- enumerable: true,
8
- get: function() {
9
- return Overflow;
10
- }
11
- });
12
- const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
13
- const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
- const _react1 = require("@griffel/react");
15
- const _reactutilities = require("@fluentui/react-utilities");
16
- const _overflowContext = require("../overflowContext");
17
- const _useOverflowContainer = require("../useOverflowContainer");
18
- const _useOverflowStylesstyles = require("./useOverflowStyles.styles");
19
- const Overflow = /*#__PURE__*/ _react.forwardRef((props, ref)=>{
20
- const styles = (0, _useOverflowStylesstyles.useOverflowStyles)();
21
- const { children, minimumVisible, overflowAxis = 'horizontal', overflowDirection, padding, onOverflowChange, hasHiddenItems } = props;
22
- const [overflowState, setOverflowState] = _react.useState({
23
- hasOverflow: false,
24
- itemVisibility: {},
25
- groupVisibility: {}
26
- });
27
- // useOverflowContainer wraps this method in a useEventCallback.
28
- const update = (data)=>{
29
- const { visibleItems, invisibleItems, groupVisibility } = data;
30
- const itemVisibility = {};
31
- visibleItems.forEach((item)=>{
32
- itemVisibility[item.id] = true;
33
- });
34
- invisibleItems.forEach((x)=>itemVisibility[x.id] = false);
35
- const newState = {
36
- hasOverflow: data.invisibleItems.length > 0,
37
- itemVisibility,
38
- groupVisibility
39
- };
40
- onOverflowChange === null || onOverflowChange === void 0 ? void 0 : onOverflowChange(null, {
41
- ...newState
42
- });
43
- setOverflowState(newState);
44
- };
45
- const { containerRef, registerItem, updateOverflow, registerOverflowMenu, registerDivider } = (0, _useOverflowContainer.useOverflowContainer)(update, {
46
- overflowDirection,
47
- overflowAxis,
48
- padding,
49
- minimumVisible,
50
- hasHiddenItems,
51
- onUpdateItemVisibility: _useOverflowContainer.updateVisibilityAttribute
52
- });
53
- const child = (0, _reactutilities.getTriggerChild)(children);
54
- const clonedChild = (0, _reactutilities.applyTriggerPropsToChildren)(children, {
55
- ref: (0, _reactutilities.useMergedRefs)(containerRef, ref, (0, _reactutilities.getReactElementRef)(child)),
56
- className: (0, _react1.mergeClasses)('fui-Overflow', styles.overflowMenu, styles.overflowingItems, child === null || child === void 0 ? void 0 : child.props.className)
57
- });
58
- return /*#__PURE__*/ _react.createElement(_overflowContext.OverflowContext.Provider, {
59
- value: {
60
- itemVisibility: overflowState.itemVisibility,
61
- groupVisibility: overflowState.groupVisibility,
62
- hasOverflow: overflowState.hasOverflow,
63
- registerItem,
64
- updateOverflow,
65
- registerOverflowMenu,
66
- registerDivider
67
- }
68
- }, clonedChild);
69
- });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/Overflow.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { mergeClasses } from '@griffel/react';\nimport type { OnUpdateOverflow, OverflowGroupState, ObserveOptions } from '@fluentui/priority-overflow';\nimport {\n applyTriggerPropsToChildren,\n getTriggerChild,\n getReactElementRef,\n useMergedRefs,\n} from '@fluentui/react-utilities';\n\nimport { OverflowContext } from '../overflowContext';\nimport { updateVisibilityAttribute, useOverflowContainer } from '../useOverflowContainer';\nimport { useOverflowStyles } from './useOverflowStyles.styles';\n\ninterface OverflowState {\n hasOverflow: boolean;\n itemVisibility: Record<string, boolean>;\n groupVisibility: Record<string, OverflowGroupState>;\n}\n\nexport interface OnOverflowChangeData extends OverflowState {}\n\n/**\n * Overflow Props\n */\nexport type OverflowProps = Partial<\n Pick<ObserveOptions, 'overflowAxis' | 'overflowDirection' | 'padding' | 'minimumVisible' | 'hasHiddenItems'>\n> & {\n children: React.ReactElement;\n\n // overflow is not caused by DOM event\n // eslint-disable-next-line @nx/workspace-consistent-callback-type\n onOverflowChange?: (ev: null, data: OverflowState) => void;\n};\n\n/**\n * Provides an OverflowContext for OverflowItem descendants.\n */\nexport const Overflow = React.forwardRef((props: OverflowProps, ref) => {\n const styles = useOverflowStyles();\n\n const {\n children,\n minimumVisible,\n overflowAxis = 'horizontal',\n overflowDirection,\n padding,\n onOverflowChange,\n hasHiddenItems,\n } = props;\n\n const [overflowState, setOverflowState] = React.useState<OverflowState>({\n hasOverflow: false,\n itemVisibility: {},\n groupVisibility: {},\n });\n\n // useOverflowContainer wraps this method in a useEventCallback.\n const update: OnUpdateOverflow = data => {\n const { visibleItems, invisibleItems, groupVisibility } = data;\n\n const itemVisibility: Record<string, boolean> = {};\n visibleItems.forEach(item => {\n itemVisibility[item.id] = true;\n });\n invisibleItems.forEach(x => (itemVisibility[x.id] = false));\n const newState = {\n hasOverflow: data.invisibleItems.length > 0,\n itemVisibility,\n groupVisibility,\n };\n onOverflowChange?.(null, { ...newState });\n\n setOverflowState(newState);\n };\n\n const { containerRef, registerItem, updateOverflow, registerOverflowMenu, registerDivider } = useOverflowContainer(\n update,\n {\n overflowDirection,\n overflowAxis,\n padding,\n minimumVisible,\n hasHiddenItems,\n onUpdateItemVisibility: updateVisibilityAttribute,\n },\n );\n\n const child = getTriggerChild<HTMLElement>(children);\n const clonedChild = applyTriggerPropsToChildren(children, {\n ref: useMergedRefs(containerRef, ref, getReactElementRef(child)),\n className: mergeClasses('fui-Overflow', styles.overflowMenu, styles.overflowingItems, child?.props.className),\n });\n\n return (\n <OverflowContext.Provider\n value={{\n itemVisibility: overflowState.itemVisibility,\n groupVisibility: overflowState.groupVisibility,\n hasOverflow: overflowState.hasOverflow,\n registerItem,\n updateOverflow,\n registerOverflowMenu,\n registerDivider,\n }}\n >\n {clonedChild}\n </OverflowContext.Provider>\n );\n});\n"],"names":["React","mergeClasses","applyTriggerPropsToChildren","getTriggerChild","getReactElementRef","useMergedRefs","OverflowContext","updateVisibilityAttribute","useOverflowContainer","useOverflowStyles","Overflow","forwardRef","props","ref","styles","children","minimumVisible","overflowAxis","overflowDirection","padding","onOverflowChange","hasHiddenItems","overflowState","setOverflowState","useState","hasOverflow","itemVisibility","groupVisibility","update","data","visibleItems","invisibleItems","forEach","item","id","x","newState","length","containerRef","registerItem","updateOverflow","registerOverflowMenu","registerDivider","onUpdateItemVisibility","child","clonedChild","className","overflowMenu","overflowingItems","Provider","value"],"mappings":"AAAA;;;;;+BAwCaU;;;;;;;iEAtCU,QAAQ;wBACF,iBAAiB;gCAOvC,4BAA4B;iCAEH,qBAAqB;sCACW,0BAA0B;yCACxD,6BAA6B;AA0BxD,iBAAMA,WAAAA,GAAWV,OAAMW,UAAU,CAAC,CAACC,OAAsBC;IAC9D,MAAMC,aAASL,0CAAAA;IAEf,MAAM,EACJM,QAAQ,EACRC,cAAc,EACdC,eAAe,YAAY,EAC3BC,iBAAiB,EACjBC,OAAO,EACPC,gBAAgB,EAChBC,cAAc,EACf,GAAGT;IAEJ,MAAM,CAACU,eAAeC,iBAAiB,GAAGvB,OAAMwB,QAAQ,CAAgB;QACtEC,aAAa;QACbC,gBAAgB,CAAC;QACjBC,iBAAiB,CAAC;IACpB;IAEA,gEAAgE;IAChE,MAAMC,SAA2BC,CAAAA;QAC/B,MAAM,EAAEC,YAAY,EAAEC,cAAc,EAAEJ,eAAe,EAAE,GAAGE;QAE1D,MAAMH,iBAA0C,CAAC;QACjDI,aAAaE,OAAO,CAACC,CAAAA;YACnBP,cAAc,CAACO,KAAKC,EAAE,CAAC,GAAG;QAC5B;QACAH,eAAeC,OAAO,CAACG,CAAAA,IAAMT,cAAc,CAACS,EAAED,EAAE,CAAC,GAAG;QACpD,MAAME,WAAW;YACfX,aAAaI,KAAKE,cAAc,CAACM,MAAM,GAAG;YAC1CX;YACAC;QACF;QACAP,qBAAAA,QAAAA,qBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,iBAAmB,MAAM;YAAE,GAAGgB,QAAQ;QAAC;QAEvCb,iBAAiBa;IACnB;IAEA,MAAM,EAAEE,YAAY,EAAEC,YAAY,EAAEC,cAAc,EAAEC,oBAAoB,EAAEC,eAAe,EAAE,OAAGlC,0CAAAA,EAC5FoB,QACA;QACEV;QACAD;QACAE;QACAH;QACAK;QACAsB,wBAAwBpC,+CAAAA;IAC1B;IAGF,MAAMqC,YAAQzC,+BAAAA,EAA6BY;IAC3C,MAAM8B,kBAAc3C,2CAAAA,EAA4Ba,UAAU;QACxDF,SAAKR,6BAAAA,EAAciC,cAAczB,SAAKT,kCAAAA,EAAmBwC;QACzDE,eAAW7C,oBAAAA,EAAa,gBAAgBa,OAAOiC,YAAY,EAAEjC,OAAOkC,gBAAgB,EAAEJ,UAAAA,QAAAA,UAAAA,KAAAA,IAAAA,KAAAA,IAAAA,MAAOhC,KAAK,CAACkC,SAAS;IAC9G;IAEA,OAAA,WAAA,GACE,OAAA,aAAA,CAACxC,gCAAAA,CAAgB2C,QAAQ,EAAA;QACvBC,OAAO;YACLxB,gBAAgBJ,cAAcI,cAAc;YAC5CC,iBAAiBL,cAAcK,eAAe;YAC9CF,aAAaH,cAAcG,WAAW;YACtCc;YACAC;YACAC;YACAC;QACF;OAECG;AAGP,GAAG"}
@@ -1,25 +0,0 @@
1
- 'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "useOverflowStyles", {
7
- enumerable: true,
8
- get: function() {
9
- return useOverflowStyles;
10
- }
11
- });
12
- const _react = require("@griffel/react");
13
- const useOverflowStyles = /*#__PURE__*/ (0, _react.__styles)({
14
- overflowMenu: {
15
- Brvla84: "fyfkpbf"
16
- },
17
- overflowingItems: {
18
- zb22lx: "f10570jf"
19
- }
20
- }, {
21
- d: [
22
- ".fyfkpbf [data-overflow-menu]{flex-shrink:0;}",
23
- ".f10570jf [data-overflowing]{display:none;}"
24
- ]
25
- });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["useOverflowStyles.styles.js"],"sourcesContent":["'use client';\nimport { makeStyles } from '@griffel/react';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';\nexport const useOverflowStyles = makeStyles({\n overflowMenu: {\n [`& [${DATA_OVERFLOW_MENU}]`]: {\n flexShrink: 0\n }\n },\n overflowingItems: {\n [`& [${DATA_OVERFLOWING}]`]: {\n display: 'none'\n }\n }\n});\n"],"names":["__styles","DATA_OVERFLOWING","DATA_OVERFLOW_MENU","useOverflowStyles","overflowMenu","Brvla84","overflowingItems","zb22lx","d"],"mappings":"AAAA,YAAY;;;;;;;;;;;uBACe,gBAAgB;AAEpC,MAAMG,iBAAiB,GAAA,WAAA,OAAGH,eAAA,EAAA;IAAAI,YAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;IAAAC,gBAAA,EAAA;QAAAC,MAAA,EAAA;IAAA;AAAA,GAAA;IAAAC,CAAA,EAAA;QAAA;QAAA;KAAA;AAAA,CAWhC,CAAC"}
@@ -1,25 +0,0 @@
1
- 'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "useOverflowStyles", {
7
- enumerable: true,
8
- get: function() {
9
- return useOverflowStyles;
10
- }
11
- });
12
- const _react = require("@griffel/react");
13
- const _constants = require("../constants");
14
- const useOverflowStyles = (0, _react.makeStyles)({
15
- overflowMenu: {
16
- [`& [${_constants.DATA_OVERFLOW_MENU}]`]: {
17
- flexShrink: 0
18
- }
19
- },
20
- overflowingItems: {
21
- [`& [${_constants.DATA_OVERFLOWING}]`]: {
22
- display: 'none'
23
- }
24
- }
25
- });
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/useOverflowStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles } from '@griffel/react';\nimport { DATA_OVERFLOWING, DATA_OVERFLOW_MENU } from '../constants';\n\nexport const useOverflowStyles = makeStyles({\n overflowMenu: {\n [`& [${DATA_OVERFLOW_MENU}]`]: {\n flexShrink: 0,\n },\n },\n\n overflowingItems: {\n [`& [${DATA_OVERFLOWING}]`]: {\n display: 'none',\n },\n },\n});\n"],"names":["makeStyles","DATA_OVERFLOWING","DATA_OVERFLOW_MENU","useOverflowStyles","overflowMenu","flexShrink","overflowingItems","display"],"mappings":"AAAA;;;;;;;;;;;uBAE2B,iBAAiB;2BACS,eAAe;AAE7D,MAAMG,wBAAoBH,iBAAAA,EAAW;IAC1CI,cAAc;QACZ,CAAC,CAAC,GAAG,EAAEF,6BAAAA,CAAmB,CAAC,CAAC,CAAC,EAAE;YAC7BG,YAAY;QACd;IACF;IAEAC,kBAAkB;QAChB,CAAC,CAAC,GAAG,EAAEL,2BAAAA,CAAiB,CAAC,CAAC,CAAC,EAAE;YAC3BM,SAAS;QACX;IACF;AACF,GAAG"}