@fluentui/react-positioning 9.15.3 → 9.15.4
Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md
CHANGED
@@ -1,12 +1,22 @@
|
|
1
1
|
# Change Log - @fluentui/react-positioning
|
2
2
|
|
3
|
-
This log was last generated on
|
3
|
+
This log was last generated on Mon, 01 Jul 2024 20:25:40 GMT and should not be manually modified.
|
4
4
|
|
5
5
|
<!-- Start content -->
|
6
6
|
|
7
|
+
## [9.15.4](https://github.com/microsoft/fluentui/tree/@fluentui/react-positioning_v9.15.4)
|
8
|
+
|
9
|
+
Mon, 01 Jul 2024 20:25:40 GMT
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-positioning_v9.15.3..@fluentui/react-positioning_v9.15.4)
|
11
|
+
|
12
|
+
### Patches
|
13
|
+
|
14
|
+
- chore: add eslint react-compiler ([PR #31457](https://github.com/microsoft/fluentui/pull/31457) by seanmonahan@microsoft.com)
|
15
|
+
- Bump @fluentui/react-utilities to v9.18.11 ([PR #31861](https://github.com/microsoft/fluentui/pull/31861) by beachball)
|
16
|
+
|
7
17
|
## [9.15.3](https://github.com/microsoft/fluentui/tree/@fluentui/react-positioning_v9.15.3)
|
8
18
|
|
9
|
-
Thu, 06 Jun 2024 15:
|
19
|
+
Thu, 06 Jun 2024 15:26:38 GMT
|
10
20
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-positioning_v9.15.2..@fluentui/react-positioning_v9.15.3)
|
11
21
|
|
12
22
|
### Patches
|
package/lib/usePositioning.js
CHANGED
@@ -11,6 +11,7 @@ import { POSITIONING_END_EVENT } from './constants';
|
|
11
11
|
/**
|
12
12
|
* @internal
|
13
13
|
*/ export function usePositioning(options) {
|
14
|
+
'use no memo';
|
14
15
|
const managerRef = React.useRef(null);
|
15
16
|
const targetRef = React.useRef(null);
|
16
17
|
const overrideTargetRef = React.useRef(null);
|
@@ -143,6 +144,7 @@ import { POSITIONING_END_EVENT } from './constants';
|
|
143
144
|
};
|
144
145
|
}
|
145
146
|
function usePositioningOptions(options) {
|
147
|
+
'use no memo';
|
146
148
|
const { align, arrowPadding, autoSize: rawAutoSize, coverTarget, flipBoundary, offset, overflowBoundary, pinned, position, unstable_disableTether: disableTether, // eslint-disable-next-line deprecation/deprecation
|
147
149
|
positionFixed, strategy, overflowBoundaryPadding, fallbackPositions, useTransform, matchTargetSize, disableUpdateOnResize = false } = options;
|
148
150
|
const { dir, targetDocument } = useFluent();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["usePositioning.ts"],"sourcesContent":["import { hide as hideMiddleware, arrow as arrowMiddleware } from '@floating-ui/dom';\nimport type { Middleware, Strategy } from '@floating-ui/dom';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { canUseDOM, useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport type {\n PositioningOptions,\n PositioningProps,\n PositionManager,\n TargetElement,\n UsePositioningReturn,\n} from './types';\nimport { useCallbackRef, toFloatingUIPlacement, hasAutofocusFilter, hasScrollParent, normalizeAutoSize } from './utils';\nimport {\n shift as shiftMiddleware,\n flip as flipMiddleware,\n coverTarget as coverTargetMiddleware,\n maxSize as maxSizeMiddleware,\n resetMaxSize as resetMaxSizeMiddleware,\n offset as offsetMiddleware,\n intersecting as intersectingMiddleware,\n matchTargetSize as matchTargetSizeMiddleware,\n} from './middleware';\nimport { createPositionManager } from './createPositionManager';\nimport { devtools } from '@floating-ui/devtools';\nimport { devtoolsCallback } from './utils/devtools';\nimport { POSITIONING_END_EVENT } from './constants';\n\n/**\n * @internal\n */\nexport function usePositioning(options: PositioningProps & PositioningOptions): UsePositioningReturn {\n const managerRef = React.useRef<PositionManager | null>(null);\n const targetRef = React.useRef<TargetElement | null>(null);\n const overrideTargetRef = React.useRef<TargetElement | null>(null);\n const containerRef = React.useRef<HTMLElement | null>(null);\n const arrowRef = React.useRef<HTMLElement | null>(null);\n\n const { enabled = true } = options;\n const resolvePositioningOptions = usePositioningOptions(options);\n const updatePositionManager = React.useCallback(() => {\n if (managerRef.current) {\n managerRef.current.dispose();\n }\n managerRef.current = null;\n\n const target = overrideTargetRef.current ?? targetRef.current;\n\n if (enabled && canUseDOM() && target && containerRef.current) {\n managerRef.current = createPositionManager({\n container: containerRef.current,\n target,\n arrow: arrowRef.current,\n ...resolvePositioningOptions(containerRef.current, arrowRef.current),\n });\n }\n }, [enabled, resolvePositioningOptions]);\n\n const setOverrideTarget = useEventCallback((target: TargetElement | null) => {\n overrideTargetRef.current = target;\n updatePositionManager();\n });\n\n React.useImperativeHandle(\n options.positioningRef,\n () => ({\n updatePosition: () => managerRef.current?.updatePosition(),\n setTarget: (target: TargetElement | null) => {\n if (options.target && process.env.NODE_ENV !== 'production') {\n const err = new Error();\n // eslint-disable-next-line no-console\n console.warn('Imperative setTarget should not be used at the same time as target option');\n // eslint-disable-next-line no-console\n console.warn(err.stack);\n }\n\n setOverrideTarget(target);\n },\n }),\n [options.target, setOverrideTarget],\n );\n\n useIsomorphicLayoutEffect(() => {\n setOverrideTarget(options.target ?? null);\n }, [options.target, setOverrideTarget]);\n\n useIsomorphicLayoutEffect(() => {\n updatePositionManager();\n }, [updatePositionManager]);\n\n if (process.env.NODE_ENV !== 'production') {\n // This checked should run only in development mode\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (containerRef.current) {\n const contentNode = containerRef.current;\n const treeWalker = contentNode.ownerDocument?.createTreeWalker(contentNode, NodeFilter.SHOW_ELEMENT, {\n acceptNode: hasAutofocusFilter,\n });\n\n while (treeWalker.nextNode()) {\n const node = treeWalker.currentNode;\n // eslint-disable-next-line no-console\n console.warn('<Popper>:', node);\n // eslint-disable-next-line no-console\n console.warn(\n [\n '<Popper>: ^ this node contains \"autoFocus\" prop on a React element. This can break the initial',\n 'positioning of an element and cause a window jump effect. This issue occurs because React polyfills',\n '\"autoFocus\" behavior to solve inconsistencies between different browsers:',\n 'https://github.com/facebook/react/issues/11851#issuecomment-351787078',\n '\\n',\n 'However, \".focus()\" in this case occurs before any other React effects will be executed',\n '(React.useEffect(), componentDidMount(), etc.) and we can not prevent this behavior. If you really',\n 'want to use \"autoFocus\" please add \"position: fixed\" to styles of the element that is wrapped by',\n '\"Popper\".',\n `In general, it's not recommended to use \"autoFocus\" as it may break accessibility aspects:`,\n 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md',\n '\\n',\n 'We suggest to use the \"trapFocus\" prop on Fluent components or a catch \"ref\" and then use',\n '\"ref.current.focus\" in React.useEffect():',\n 'https://reactjs.org/docs/refs-and-the-dom.html#adding-a-ref-to-a-dom-element',\n ].join(' '),\n );\n }\n }\n // We run this check once, no need to add deps here\n // TODO: Should be rework to handle options.enabled and contentRef updates\n }, []);\n }\n\n const setTarget = useCallbackRef<TargetElement>(null, target => {\n if (targetRef.current !== target) {\n targetRef.current = target;\n updatePositionManager();\n }\n });\n\n const onPositioningEnd = useEventCallback(() => options.onPositioningEnd?.());\n const setContainer = useCallbackRef<HTMLElement | null>(null, container => {\n if (containerRef.current !== container) {\n containerRef.current?.removeEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n container?.addEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n containerRef.current = container;\n updatePositionManager();\n }\n });\n\n const setArrow = useCallbackRef<HTMLElement | null>(null, arrow => {\n if (arrowRef.current !== arrow) {\n arrowRef.current = arrow;\n updatePositionManager();\n }\n });\n\n // Let users use callback refs so they feel like 'normal' DOM refs\n return { targetRef: setTarget, containerRef: setContainer, arrowRef: setArrow };\n}\n\nfunction usePositioningOptions(options: PositioningOptions) {\n const {\n align,\n arrowPadding,\n autoSize: rawAutoSize,\n coverTarget,\n flipBoundary,\n offset,\n overflowBoundary,\n pinned,\n position,\n unstable_disableTether: disableTether,\n // eslint-disable-next-line deprecation/deprecation\n positionFixed,\n strategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n disableUpdateOnResize = false,\n } = options;\n\n const { dir, targetDocument } = useFluent();\n const isRtl = dir === 'rtl';\n const positionStrategy: Strategy = strategy ?? positionFixed ? 'fixed' : 'absolute';\n const autoSize = normalizeAutoSize(rawAutoSize);\n\n return React.useCallback(\n (container: HTMLElement | null, arrow: HTMLElement | null) => {\n const hasScrollableElement = hasScrollParent(container);\n\n const middleware = [\n autoSize && resetMaxSizeMiddleware(autoSize),\n matchTargetSize && matchTargetSizeMiddleware(),\n offset && offsetMiddleware(offset),\n coverTarget && coverTargetMiddleware(),\n !pinned && flipMiddleware({ container, flipBoundary, hasScrollableElement, isRtl, fallbackPositions }),\n shiftMiddleware({\n container,\n hasScrollableElement,\n overflowBoundary,\n disableTether,\n overflowBoundaryPadding,\n isRtl,\n }),\n autoSize && maxSizeMiddleware(autoSize, { container, overflowBoundary, overflowBoundaryPadding, isRtl }),\n intersectingMiddleware(),\n arrow && arrowMiddleware({ element: arrow, padding: arrowPadding }),\n hideMiddleware({ strategy: 'referenceHidden' }),\n hideMiddleware({ strategy: 'escaped' }),\n process.env.NODE_ENV !== 'production' && targetDocument && devtools(targetDocument, devtoolsCallback(options)),\n ].filter(Boolean) as Middleware[];\n\n const placement = toFloatingUIPlacement(align, position, isRtl);\n\n return {\n placement,\n middleware,\n strategy: positionStrategy,\n useTransform,\n disableUpdateOnResize,\n };\n },\n // Options is missing here, but it's not required\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n align,\n arrowPadding,\n autoSize,\n coverTarget,\n disableTether,\n flipBoundary,\n isRtl,\n offset,\n overflowBoundary,\n pinned,\n position,\n positionStrategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n targetDocument,\n disableUpdateOnResize,\n ],\n );\n}\n"],"names":["hide","hideMiddleware","arrow","arrowMiddleware","useFluent_unstable","useFluent","canUseDOM","useEventCallback","useIsomorphicLayoutEffect","React","useCallbackRef","toFloatingUIPlacement","hasAutofocusFilter","hasScrollParent","normalizeAutoSize","shift","shiftMiddleware","flip","flipMiddleware","coverTarget","coverTargetMiddleware","maxSize","maxSizeMiddleware","resetMaxSize","resetMaxSizeMiddleware","offset","offsetMiddleware","intersecting","intersectingMiddleware","matchTargetSize","matchTargetSizeMiddleware","createPositionManager","devtools","devtoolsCallback","POSITIONING_END_EVENT","usePositioning","options","managerRef","useRef","targetRef","overrideTargetRef","containerRef","arrowRef","enabled","resolvePositioningOptions","usePositioningOptions","updatePositionManager","useCallback","current","dispose","target","container","setOverrideTarget","useImperativeHandle","positioningRef","updatePosition","setTarget","process","env","NODE_ENV","err","Error","console","warn","stack","useEffect","contentNode","treeWalker","ownerDocument","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","nextNode","node","currentNode","join","onPositioningEnd","setContainer","removeEventListener","addEventListener","setArrow","align","arrowPadding","autoSize","rawAutoSize","flipBoundary","overflowBoundary","pinned","position","unstable_disableTether","disableTether","positionFixed","strategy","overflowBoundaryPadding","fallbackPositions","useTransform","disableUpdateOnResize","dir","targetDocument","isRtl","positionStrategy","hasScrollableElement","middleware","element","padding","filter","Boolean","placement"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["usePositioning.ts"],"sourcesContent":["import { hide as hideMiddleware, arrow as arrowMiddleware } from '@floating-ui/dom';\nimport type { Middleware, Strategy } from '@floating-ui/dom';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { canUseDOM, useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport type {\n PositioningOptions,\n PositioningProps,\n PositionManager,\n TargetElement,\n UsePositioningReturn,\n} from './types';\nimport { useCallbackRef, toFloatingUIPlacement, hasAutofocusFilter, hasScrollParent, normalizeAutoSize } from './utils';\nimport {\n shift as shiftMiddleware,\n flip as flipMiddleware,\n coverTarget as coverTargetMiddleware,\n maxSize as maxSizeMiddleware,\n resetMaxSize as resetMaxSizeMiddleware,\n offset as offsetMiddleware,\n intersecting as intersectingMiddleware,\n matchTargetSize as matchTargetSizeMiddleware,\n} from './middleware';\nimport { createPositionManager } from './createPositionManager';\nimport { devtools } from '@floating-ui/devtools';\nimport { devtoolsCallback } from './utils/devtools';\nimport { POSITIONING_END_EVENT } from './constants';\n\n/**\n * @internal\n */\nexport function usePositioning(options: PositioningProps & PositioningOptions): UsePositioningReturn {\n 'use no memo';\n\n const managerRef = React.useRef<PositionManager | null>(null);\n const targetRef = React.useRef<TargetElement | null>(null);\n const overrideTargetRef = React.useRef<TargetElement | null>(null);\n const containerRef = React.useRef<HTMLElement | null>(null);\n const arrowRef = React.useRef<HTMLElement | null>(null);\n\n const { enabled = true } = options;\n const resolvePositioningOptions = usePositioningOptions(options);\n const updatePositionManager = React.useCallback(() => {\n if (managerRef.current) {\n managerRef.current.dispose();\n }\n managerRef.current = null;\n\n const target = overrideTargetRef.current ?? targetRef.current;\n\n if (enabled && canUseDOM() && target && containerRef.current) {\n managerRef.current = createPositionManager({\n container: containerRef.current,\n target,\n arrow: arrowRef.current,\n ...resolvePositioningOptions(containerRef.current, arrowRef.current),\n });\n }\n }, [enabled, resolvePositioningOptions]);\n\n const setOverrideTarget = useEventCallback((target: TargetElement | null) => {\n overrideTargetRef.current = target;\n updatePositionManager();\n });\n\n React.useImperativeHandle(\n options.positioningRef,\n () => ({\n updatePosition: () => managerRef.current?.updatePosition(),\n setTarget: (target: TargetElement | null) => {\n if (options.target && process.env.NODE_ENV !== 'production') {\n const err = new Error();\n // eslint-disable-next-line no-console\n console.warn('Imperative setTarget should not be used at the same time as target option');\n // eslint-disable-next-line no-console\n console.warn(err.stack);\n }\n\n setOverrideTarget(target);\n },\n }),\n [options.target, setOverrideTarget],\n );\n\n useIsomorphicLayoutEffect(() => {\n setOverrideTarget(options.target ?? null);\n }, [options.target, setOverrideTarget]);\n\n useIsomorphicLayoutEffect(() => {\n updatePositionManager();\n }, [updatePositionManager]);\n\n if (process.env.NODE_ENV !== 'production') {\n // This checked should run only in development mode\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(() => {\n if (containerRef.current) {\n const contentNode = containerRef.current;\n const treeWalker = contentNode.ownerDocument?.createTreeWalker(contentNode, NodeFilter.SHOW_ELEMENT, {\n acceptNode: hasAutofocusFilter,\n });\n\n while (treeWalker.nextNode()) {\n const node = treeWalker.currentNode;\n // eslint-disable-next-line no-console\n console.warn('<Popper>:', node);\n // eslint-disable-next-line no-console\n console.warn(\n [\n '<Popper>: ^ this node contains \"autoFocus\" prop on a React element. This can break the initial',\n 'positioning of an element and cause a window jump effect. This issue occurs because React polyfills',\n '\"autoFocus\" behavior to solve inconsistencies between different browsers:',\n 'https://github.com/facebook/react/issues/11851#issuecomment-351787078',\n '\\n',\n 'However, \".focus()\" in this case occurs before any other React effects will be executed',\n '(React.useEffect(), componentDidMount(), etc.) and we can not prevent this behavior. If you really',\n 'want to use \"autoFocus\" please add \"position: fixed\" to styles of the element that is wrapped by',\n '\"Popper\".',\n `In general, it's not recommended to use \"autoFocus\" as it may break accessibility aspects:`,\n 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md',\n '\\n',\n 'We suggest to use the \"trapFocus\" prop on Fluent components or a catch \"ref\" and then use',\n '\"ref.current.focus\" in React.useEffect():',\n 'https://reactjs.org/docs/refs-and-the-dom.html#adding-a-ref-to-a-dom-element',\n ].join(' '),\n );\n }\n }\n // We run this check once, no need to add deps here\n // TODO: Should be rework to handle options.enabled and contentRef updates\n }, []);\n }\n\n const setTarget = useCallbackRef<TargetElement>(null, target => {\n if (targetRef.current !== target) {\n targetRef.current = target;\n updatePositionManager();\n }\n });\n\n const onPositioningEnd = useEventCallback(() => options.onPositioningEnd?.());\n const setContainer = useCallbackRef<HTMLElement | null>(null, container => {\n if (containerRef.current !== container) {\n containerRef.current?.removeEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n container?.addEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n containerRef.current = container;\n updatePositionManager();\n }\n });\n\n const setArrow = useCallbackRef<HTMLElement | null>(null, arrow => {\n if (arrowRef.current !== arrow) {\n arrowRef.current = arrow;\n updatePositionManager();\n }\n });\n\n // Let users use callback refs so they feel like 'normal' DOM refs\n return { targetRef: setTarget, containerRef: setContainer, arrowRef: setArrow };\n}\n\nfunction usePositioningOptions(options: PositioningOptions) {\n 'use no memo';\n\n const {\n align,\n arrowPadding,\n autoSize: rawAutoSize,\n coverTarget,\n flipBoundary,\n offset,\n overflowBoundary,\n pinned,\n position,\n unstable_disableTether: disableTether,\n // eslint-disable-next-line deprecation/deprecation\n positionFixed,\n strategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n disableUpdateOnResize = false,\n } = options;\n\n const { dir, targetDocument } = useFluent();\n const isRtl = dir === 'rtl';\n const positionStrategy: Strategy = strategy ?? positionFixed ? 'fixed' : 'absolute';\n const autoSize = normalizeAutoSize(rawAutoSize);\n\n return React.useCallback(\n (container: HTMLElement | null, arrow: HTMLElement | null) => {\n const hasScrollableElement = hasScrollParent(container);\n\n const middleware = [\n autoSize && resetMaxSizeMiddleware(autoSize),\n matchTargetSize && matchTargetSizeMiddleware(),\n offset && offsetMiddleware(offset),\n coverTarget && coverTargetMiddleware(),\n !pinned && flipMiddleware({ container, flipBoundary, hasScrollableElement, isRtl, fallbackPositions }),\n shiftMiddleware({\n container,\n hasScrollableElement,\n overflowBoundary,\n disableTether,\n overflowBoundaryPadding,\n isRtl,\n }),\n autoSize && maxSizeMiddleware(autoSize, { container, overflowBoundary, overflowBoundaryPadding, isRtl }),\n intersectingMiddleware(),\n arrow && arrowMiddleware({ element: arrow, padding: arrowPadding }),\n hideMiddleware({ strategy: 'referenceHidden' }),\n hideMiddleware({ strategy: 'escaped' }),\n process.env.NODE_ENV !== 'production' && targetDocument && devtools(targetDocument, devtoolsCallback(options)),\n ].filter(Boolean) as Middleware[];\n\n const placement = toFloatingUIPlacement(align, position, isRtl);\n\n return {\n placement,\n middleware,\n strategy: positionStrategy,\n useTransform,\n disableUpdateOnResize,\n };\n },\n // Options is missing here, but it's not required\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n align,\n arrowPadding,\n autoSize,\n coverTarget,\n disableTether,\n flipBoundary,\n isRtl,\n offset,\n overflowBoundary,\n pinned,\n position,\n positionStrategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n targetDocument,\n disableUpdateOnResize,\n ],\n );\n}\n"],"names":["hide","hideMiddleware","arrow","arrowMiddleware","useFluent_unstable","useFluent","canUseDOM","useEventCallback","useIsomorphicLayoutEffect","React","useCallbackRef","toFloatingUIPlacement","hasAutofocusFilter","hasScrollParent","normalizeAutoSize","shift","shiftMiddleware","flip","flipMiddleware","coverTarget","coverTargetMiddleware","maxSize","maxSizeMiddleware","resetMaxSize","resetMaxSizeMiddleware","offset","offsetMiddleware","intersecting","intersectingMiddleware","matchTargetSize","matchTargetSizeMiddleware","createPositionManager","devtools","devtoolsCallback","POSITIONING_END_EVENT","usePositioning","options","managerRef","useRef","targetRef","overrideTargetRef","containerRef","arrowRef","enabled","resolvePositioningOptions","usePositioningOptions","updatePositionManager","useCallback","current","dispose","target","container","setOverrideTarget","useImperativeHandle","positioningRef","updatePosition","setTarget","process","env","NODE_ENV","err","Error","console","warn","stack","useEffect","contentNode","treeWalker","ownerDocument","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","nextNode","node","currentNode","join","onPositioningEnd","setContainer","removeEventListener","addEventListener","setArrow","align","arrowPadding","autoSize","rawAutoSize","flipBoundary","overflowBoundary","pinned","position","unstable_disableTether","disableTether","positionFixed","strategy","overflowBoundaryPadding","fallbackPositions","useTransform","disableUpdateOnResize","dir","targetDocument","isRtl","positionStrategy","hasScrollableElement","middleware","element","padding","filter","Boolean","placement"],"mappings":"AAAA,SAASA,QAAQC,cAAc,EAAEC,SAASC,eAAe,QAAQ,mBAAmB;AAEpF,SAASC,sBAAsBC,SAAS,QAAQ,kCAAkC;AAClF,SAASC,SAAS,EAAEC,gBAAgB,EAAEC,yBAAyB,QAAQ,4BAA4B;AACnG,YAAYC,WAAW,QAAQ;AAQ/B,SAASC,cAAc,EAAEC,qBAAqB,EAAEC,kBAAkB,EAAEC,eAAe,EAAEC,iBAAiB,QAAQ,UAAU;AACxH,SACEC,SAASC,eAAe,EACxBC,QAAQC,cAAc,EACtBC,eAAeC,qBAAqB,EACpCC,WAAWC,iBAAiB,EAC5BC,gBAAgBC,sBAAsB,EACtCC,UAAUC,gBAAgB,EAC1BC,gBAAgBC,sBAAsB,EACtCC,mBAAmBC,yBAAyB,QACvC,eAAe;AACtB,SAASC,qBAAqB,QAAQ,0BAA0B;AAChE,SAASC,QAAQ,QAAQ,wBAAwB;AACjD,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,qBAAqB,QAAQ,cAAc;AAEpD;;CAEC,GACD,OAAO,SAASC,eAAeC,OAA8C;IAC3E;IAEA,MAAMC,aAAa5B,MAAM6B,MAAM,CAAyB;IACxD,MAAMC,YAAY9B,MAAM6B,MAAM,CAAuB;IACrD,MAAME,oBAAoB/B,MAAM6B,MAAM,CAAuB;IAC7D,MAAMG,eAAehC,MAAM6B,MAAM,CAAqB;IACtD,MAAMI,WAAWjC,MAAM6B,MAAM,CAAqB;IAElD,MAAM,EAAEK,UAAU,IAAI,EAAE,GAAGP;IAC3B,MAAMQ,4BAA4BC,sBAAsBT;IACxD,MAAMU,wBAAwBrC,MAAMsC,WAAW,CAAC;QAC9C,IAAIV,WAAWW,OAAO,EAAE;YACtBX,WAAWW,OAAO,CAACC,OAAO;QAC5B;QACAZ,WAAWW,OAAO,GAAG;YAENR;QAAf,MAAMU,SAASV,CAAAA,6BAAAA,kBAAkBQ,OAAO,cAAzBR,wCAAAA,6BAA6BD,UAAUS,OAAO;QAE7D,IAAIL,WAAWrC,eAAe4C,UAAUT,aAAaO,OAAO,EAAE;YAC5DX,WAAWW,OAAO,GAAGjB,sBAAsB;gBACzCoB,WAAWV,aAAaO,OAAO;gBAC/BE;gBACAhD,OAAOwC,SAASM,OAAO;gBACvB,GAAGJ,0BAA0BH,aAAaO,OAAO,EAAEN,SAASM,OAAO,CAAC;YACtE;QACF;IACF,GAAG;QAACL;QAASC;KAA0B;IAEvC,MAAMQ,oBAAoB7C,iBAAiB,CAAC2C;QAC1CV,kBAAkBQ,OAAO,GAAGE;QAC5BJ;IACF;IAEArC,MAAM4C,mBAAmB,CACvBjB,QAAQkB,cAAc,EACtB,IAAO,CAAA;YACLC,gBAAgB;oBAAMlB;wBAAAA,sBAAAA,WAAWW,OAAO,cAAlBX,0CAAAA,oBAAoBkB,cAAc;;YACxDC,WAAW,CAACN;gBACV,IAAId,QAAQc,MAAM,IAAIO,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;oBAC3D,MAAMC,MAAM,IAAIC;oBAChB,sCAAsC;oBACtCC,QAAQC,IAAI,CAAC;oBACb,sCAAsC;oBACtCD,QAAQC,IAAI,CAACH,IAAII,KAAK;gBACxB;gBAEAZ,kBAAkBF;YACpB;QACF,CAAA,GACA;QAACd,QAAQc,MAAM;QAAEE;KAAkB;IAGrC5C,0BAA0B;YACN4B;QAAlBgB,kBAAkBhB,CAAAA,kBAAAA,QAAQc,MAAM,cAAdd,6BAAAA,kBAAkB;IACtC,GAAG;QAACA,QAAQc,MAAM;QAAEE;KAAkB;IAEtC5C,0BAA0B;QACxBsC;IACF,GAAG;QAACA;KAAsB;IAE1B,IAAIW,QAAQC,GAAG,CAACC,QAAQ,KAAK,cAAc;QACzC,mDAAmD;QACnD,sDAAsD;QACtDlD,MAAMwD,SAAS,CAAC;YACd,IAAIxB,aAAaO,OAAO,EAAE;oBAELkB;gBADnB,MAAMA,cAAczB,aAAaO,OAAO;gBACxC,MAAMmB,cAAaD,6BAAAA,YAAYE,aAAa,cAAzBF,iDAAAA,2BAA2BG,gBAAgB,CAACH,aAAaI,WAAWC,YAAY,EAAE;oBACnGC,YAAY5D;gBACd;gBAEA,MAAOuD,WAAWM,QAAQ,GAAI;oBAC5B,MAAMC,OAAOP,WAAWQ,WAAW;oBACnC,sCAAsC;oBACtCb,QAAQC,IAAI,CAAC,aAAaW;oBAC1B,sCAAsC;oBACtCZ,QAAQC,IAAI,CACV;wBACE;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA,CAAC,0FAA0F,CAAC;wBAC5F;wBACA;wBACA;wBACA;wBACA;qBACD,CAACa,IAAI,CAAC;gBAEX;YACF;QACA,mDAAmD;QACnD,0EAA0E;QAC5E,GAAG,EAAE;IACP;IAEA,MAAMpB,YAAY9C,eAA8B,MAAMwC,CAAAA;QACpD,IAAIX,UAAUS,OAAO,KAAKE,QAAQ;YAChCX,UAAUS,OAAO,GAAGE;YACpBJ;QACF;IACF;IAEA,MAAM+B,mBAAmBtE,iBAAiB;YAAM6B;gBAAAA,4BAAAA,QAAQyC,gBAAgB,cAAxBzC,gDAAAA,+BAAAA;;IAChD,MAAM0C,eAAepE,eAAmC,MAAMyC,CAAAA;QAC5D,IAAIV,aAAaO,OAAO,KAAKG,WAAW;gBACtCV;aAAAA,wBAAAA,aAAaO,OAAO,cAApBP,4CAAAA,sBAAsBsC,mBAAmB,CAAC7C,uBAAuB2C;YACjE1B,sBAAAA,gCAAAA,UAAW6B,gBAAgB,CAAC9C,uBAAuB2C;YACnDpC,aAAaO,OAAO,GAAGG;YACvBL;QACF;IACF;IAEA,MAAMmC,WAAWvE,eAAmC,MAAMR,CAAAA;QACxD,IAAIwC,SAASM,OAAO,KAAK9C,OAAO;YAC9BwC,SAASM,OAAO,GAAG9C;YACnB4C;QACF;IACF;IAEA,kEAAkE;IAClE,OAAO;QAAEP,WAAWiB;QAAWf,cAAcqC;QAAcpC,UAAUuC;IAAS;AAChF;AAEA,SAASpC,sBAAsBT,OAA2B;IACxD;IAEA,MAAM,EACJ8C,KAAK,EACLC,YAAY,EACZC,UAAUC,WAAW,EACrBlE,WAAW,EACXmE,YAAY,EACZ7D,MAAM,EACN8D,gBAAgB,EAChBC,MAAM,EACNC,QAAQ,EACRC,wBAAwBC,aAAa,EACrC,mDAAmD;IACnDC,aAAa,EACbC,QAAQ,EACRC,uBAAuB,EACvBC,iBAAiB,EACjBC,YAAY,EACZnE,eAAe,EACfoE,wBAAwB,KAAK,EAC9B,GAAG7D;IAEJ,MAAM,EAAE8D,GAAG,EAAEC,cAAc,EAAE,GAAG9F;IAChC,MAAM+F,QAAQF,QAAQ;IACtB,MAAMG,mBAA6BR,CAAAA,qBAAAA,sBAAAA,WAAYD,aAAY,IAAI,UAAU;IACzE,MAAMR,WAAWtE,kBAAkBuE;IAEnC,OAAO5E,MAAMsC,WAAW,CACtB,CAACI,WAA+BjD;QAC9B,MAAMoG,uBAAuBzF,gBAAgBsC;QAE7C,MAAMoD,aAAa;YACjBnB,YAAY5D,uBAAuB4D;YACnCvD,mBAAmBC;YACnBL,UAAUC,iBAAiBD;YAC3BN,eAAeC;YACf,CAACoE,UAAUtE,eAAe;gBAAEiC;gBAAWmC;gBAAcgB;gBAAsBF;gBAAOL;YAAkB;YACpG/E,gBAAgB;gBACdmC;gBACAmD;gBACAf;gBACAI;gBACAG;gBACAM;YACF;YACAhB,YAAY9D,kBAAkB8D,UAAU;gBAAEjC;gBAAWoC;gBAAkBO;gBAAyBM;YAAM;YACtGxE;YACA1B,SAASC,gBAAgB;gBAAEqG,SAAStG;gBAAOuG,SAAStB;YAAa;YACjElF,eAAe;gBAAE4F,UAAU;YAAkB;YAC7C5F,eAAe;gBAAE4F,UAAU;YAAU;YACrCpC,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBAAgBwC,kBAAkBnE,SAASmE,gBAAgBlE,iBAAiBG;SACtG,CAACsE,MAAM,CAACC;QAET,MAAMC,YAAYjG,sBAAsBuE,OAAOO,UAAUW;QAEzD,OAAO;YACLQ;YACAL;YACAV,UAAUQ;YACVL;YACAC;QACF;IACF,GACA,iDAAiD;IACjD,uDAAuD;IACvD;QACEf;QACAC;QACAC;QACAjE;QACAwE;QACAL;QACAc;QACA3E;QACA8D;QACAC;QACAC;QACAY;QACAP;QACAC;QACAC;QACAnE;QACAsE;QACAF;KACD;AAEL"}
|
@@ -20,6 +20,7 @@ const _devtools = require("@floating-ui/devtools");
|
|
20
20
|
const _devtools1 = require("./utils/devtools");
|
21
21
|
const _constants = require("./constants");
|
22
22
|
function usePositioning(options) {
|
23
|
+
'use no memo';
|
23
24
|
const managerRef = _react.useRef(null);
|
24
25
|
const targetRef = _react.useRef(null);
|
25
26
|
const overrideTargetRef = _react.useRef(null);
|
@@ -152,6 +153,7 @@ function usePositioning(options) {
|
|
152
153
|
};
|
153
154
|
}
|
154
155
|
function usePositioningOptions(options) {
|
156
|
+
'use no memo';
|
155
157
|
const { align, arrowPadding, autoSize: rawAutoSize, coverTarget, flipBoundary, offset, overflowBoundary, pinned, position, unstable_disableTether: disableTether, positionFixed, strategy, overflowBoundaryPadding, fallbackPositions, useTransform, matchTargetSize, disableUpdateOnResize = false } = options;
|
156
158
|
const { dir, targetDocument } = (0, _reactsharedcontexts.useFluent_unstable)();
|
157
159
|
const isRtl = dir === 'rtl';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["usePositioning.js"],"sourcesContent":["import { hide as hideMiddleware, arrow as arrowMiddleware } from '@floating-ui/dom';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { canUseDOM, useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { useCallbackRef, toFloatingUIPlacement, hasAutofocusFilter, hasScrollParent, normalizeAutoSize } from './utils';\nimport { shift as shiftMiddleware, flip as flipMiddleware, coverTarget as coverTargetMiddleware, maxSize as maxSizeMiddleware, resetMaxSize as resetMaxSizeMiddleware, offset as offsetMiddleware, intersecting as intersectingMiddleware, matchTargetSize as matchTargetSizeMiddleware } from './middleware';\nimport { createPositionManager } from './createPositionManager';\nimport { devtools } from '@floating-ui/devtools';\nimport { devtoolsCallback } from './utils/devtools';\nimport { POSITIONING_END_EVENT } from './constants';\n/**\n * @internal\n */ export function usePositioning(options) {\n const managerRef = React.useRef(null);\n const targetRef = React.useRef(null);\n const overrideTargetRef = React.useRef(null);\n const containerRef = React.useRef(null);\n const arrowRef = React.useRef(null);\n const { enabled = true } = options;\n const resolvePositioningOptions = usePositioningOptions(options);\n const updatePositionManager = React.useCallback(()=>{\n if (managerRef.current) {\n managerRef.current.dispose();\n }\n managerRef.current = null;\n var _overrideTargetRef_current;\n const target = (_overrideTargetRef_current = overrideTargetRef.current) !== null && _overrideTargetRef_current !== void 0 ? _overrideTargetRef_current : targetRef.current;\n if (enabled && canUseDOM() && target && containerRef.current) {\n managerRef.current = createPositionManager({\n container: containerRef.current,\n target,\n arrow: arrowRef.current,\n ...resolvePositioningOptions(containerRef.current, arrowRef.current)\n });\n }\n }, [\n enabled,\n resolvePositioningOptions\n ]);\n const setOverrideTarget = useEventCallback((target)=>{\n overrideTargetRef.current = target;\n updatePositionManager();\n });\n React.useImperativeHandle(options.positioningRef, ()=>({\n updatePosition: ()=>{\n var _managerRef_current;\n return (_managerRef_current = managerRef.current) === null || _managerRef_current === void 0 ? void 0 : _managerRef_current.updatePosition();\n },\n setTarget: (target)=>{\n if (options.target && process.env.NODE_ENV !== 'production') {\n const err = new Error();\n // eslint-disable-next-line no-console\n console.warn('Imperative setTarget should not be used at the same time as target option');\n // eslint-disable-next-line no-console\n console.warn(err.stack);\n }\n setOverrideTarget(target);\n }\n }), [\n options.target,\n setOverrideTarget\n ]);\n useIsomorphicLayoutEffect(()=>{\n var _options_target;\n setOverrideTarget((_options_target = options.target) !== null && _options_target !== void 0 ? _options_target : null);\n }, [\n options.target,\n setOverrideTarget\n ]);\n useIsomorphicLayoutEffect(()=>{\n updatePositionManager();\n }, [\n updatePositionManager\n ]);\n if (process.env.NODE_ENV !== 'production') {\n // This checked should run only in development mode\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(()=>{\n if (containerRef.current) {\n var _contentNode_ownerDocument;\n const contentNode = containerRef.current;\n const treeWalker = (_contentNode_ownerDocument = contentNode.ownerDocument) === null || _contentNode_ownerDocument === void 0 ? void 0 : _contentNode_ownerDocument.createTreeWalker(contentNode, NodeFilter.SHOW_ELEMENT, {\n acceptNode: hasAutofocusFilter\n });\n while(treeWalker.nextNode()){\n const node = treeWalker.currentNode;\n // eslint-disable-next-line no-console\n console.warn('<Popper>:', node);\n // eslint-disable-next-line no-console\n console.warn([\n '<Popper>: ^ this node contains \"autoFocus\" prop on a React element. This can break the initial',\n 'positioning of an element and cause a window jump effect. This issue occurs because React polyfills',\n '\"autoFocus\" behavior to solve inconsistencies between different browsers:',\n 'https://github.com/facebook/react/issues/11851#issuecomment-351787078',\n '\\n',\n 'However, \".focus()\" in this case occurs before any other React effects will be executed',\n '(React.useEffect(), componentDidMount(), etc.) and we can not prevent this behavior. If you really',\n 'want to use \"autoFocus\" please add \"position: fixed\" to styles of the element that is wrapped by',\n '\"Popper\".',\n `In general, it's not recommended to use \"autoFocus\" as it may break accessibility aspects:`,\n 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md',\n '\\n',\n 'We suggest to use the \"trapFocus\" prop on Fluent components or a catch \"ref\" and then use',\n '\"ref.current.focus\" in React.useEffect():',\n 'https://reactjs.org/docs/refs-and-the-dom.html#adding-a-ref-to-a-dom-element'\n ].join(' '));\n }\n }\n // We run this check once, no need to add deps here\n // TODO: Should be rework to handle options.enabled and contentRef updates\n }, []);\n }\n const setTarget = useCallbackRef(null, (target)=>{\n if (targetRef.current !== target) {\n targetRef.current = target;\n updatePositionManager();\n }\n });\n const onPositioningEnd = useEventCallback(()=>{\n var _options_onPositioningEnd;\n return (_options_onPositioningEnd = options.onPositioningEnd) === null || _options_onPositioningEnd === void 0 ? void 0 : _options_onPositioningEnd.call(options);\n });\n const setContainer = useCallbackRef(null, (container)=>{\n if (containerRef.current !== container) {\n var _containerRef_current;\n (_containerRef_current = containerRef.current) === null || _containerRef_current === void 0 ? void 0 : _containerRef_current.removeEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n container === null || container === void 0 ? void 0 : container.addEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n containerRef.current = container;\n updatePositionManager();\n }\n });\n const setArrow = useCallbackRef(null, (arrow)=>{\n if (arrowRef.current !== arrow) {\n arrowRef.current = arrow;\n updatePositionManager();\n }\n });\n // Let users use callback refs so they feel like 'normal' DOM refs\n return {\n targetRef: setTarget,\n containerRef: setContainer,\n arrowRef: setArrow\n };\n}\nfunction usePositioningOptions(options) {\n const { align, arrowPadding, autoSize: rawAutoSize, coverTarget, flipBoundary, offset, overflowBoundary, pinned, position, unstable_disableTether: disableTether, // eslint-disable-next-line deprecation/deprecation\n positionFixed, strategy, overflowBoundaryPadding, fallbackPositions, useTransform, matchTargetSize, disableUpdateOnResize = false } = options;\n const { dir, targetDocument } = useFluent();\n const isRtl = dir === 'rtl';\n const positionStrategy = (strategy !== null && strategy !== void 0 ? strategy : positionFixed) ? 'fixed' : 'absolute';\n const autoSize = normalizeAutoSize(rawAutoSize);\n return React.useCallback((container, arrow)=>{\n const hasScrollableElement = hasScrollParent(container);\n const middleware = [\n autoSize && resetMaxSizeMiddleware(autoSize),\n matchTargetSize && matchTargetSizeMiddleware(),\n offset && offsetMiddleware(offset),\n coverTarget && coverTargetMiddleware(),\n !pinned && flipMiddleware({\n container,\n flipBoundary,\n hasScrollableElement,\n isRtl,\n fallbackPositions\n }),\n shiftMiddleware({\n container,\n hasScrollableElement,\n overflowBoundary,\n disableTether,\n overflowBoundaryPadding,\n isRtl\n }),\n autoSize && maxSizeMiddleware(autoSize, {\n container,\n overflowBoundary,\n overflowBoundaryPadding,\n isRtl\n }),\n intersectingMiddleware(),\n arrow && arrowMiddleware({\n element: arrow,\n padding: arrowPadding\n }),\n hideMiddleware({\n strategy: 'referenceHidden'\n }),\n hideMiddleware({\n strategy: 'escaped'\n }),\n process.env.NODE_ENV !== 'production' && targetDocument && devtools(targetDocument, devtoolsCallback(options))\n ].filter(Boolean);\n const placement = toFloatingUIPlacement(align, position, isRtl);\n return {\n placement,\n middleware,\n strategy: positionStrategy,\n useTransform,\n disableUpdateOnResize\n };\n }, // Options is missing here, but it's not required\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n align,\n arrowPadding,\n autoSize,\n coverTarget,\n disableTether,\n flipBoundary,\n isRtl,\n offset,\n overflowBoundary,\n pinned,\n position,\n positionStrategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n targetDocument,\n disableUpdateOnResize\n ]);\n}\n"],"names":["usePositioning","options","managerRef","React","useRef","targetRef","overrideTargetRef","containerRef","arrowRef","enabled","resolvePositioningOptions","usePositioningOptions","updatePositionManager","useCallback","current","dispose","_overrideTargetRef_current","target","canUseDOM","createPositionManager","container","arrow","setOverrideTarget","useEventCallback","useImperativeHandle","positioningRef","updatePosition","_managerRef_current","setTarget","process","env","NODE_ENV","err","Error","console","warn","stack","useIsomorphicLayoutEffect","_options_target","useEffect","_contentNode_ownerDocument","contentNode","treeWalker","ownerDocument","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","hasAutofocusFilter","nextNode","node","currentNode","join","useCallbackRef","onPositioningEnd","_options_onPositioningEnd","call","setContainer","_containerRef_current","removeEventListener","POSITIONING_END_EVENT","addEventListener","setArrow","align","arrowPadding","autoSize","rawAutoSize","coverTarget","flipBoundary","offset","overflowBoundary","pinned","position","unstable_disableTether","disableTether","positionFixed","strategy","overflowBoundaryPadding","fallbackPositions","useTransform","matchTargetSize","disableUpdateOnResize","dir","targetDocument","useFluent","isRtl","positionStrategy","normalizeAutoSize","hasScrollableElement","hasScrollParent","middleware","resetMaxSizeMiddleware","matchTargetSizeMiddleware","offsetMiddleware","coverTargetMiddleware","flipMiddleware","shiftMiddleware","maxSizeMiddleware","intersectingMiddleware","arrowMiddleware","element","padding","hideMiddleware","devtools","devtoolsCallback","filter","Boolean","placement","toFloatingUIPlacement"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["usePositioning.js"],"sourcesContent":["import { hide as hideMiddleware, arrow as arrowMiddleware } from '@floating-ui/dom';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport { canUseDOM, useEventCallback, useIsomorphicLayoutEffect } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport { useCallbackRef, toFloatingUIPlacement, hasAutofocusFilter, hasScrollParent, normalizeAutoSize } from './utils';\nimport { shift as shiftMiddleware, flip as flipMiddleware, coverTarget as coverTargetMiddleware, maxSize as maxSizeMiddleware, resetMaxSize as resetMaxSizeMiddleware, offset as offsetMiddleware, intersecting as intersectingMiddleware, matchTargetSize as matchTargetSizeMiddleware } from './middleware';\nimport { createPositionManager } from './createPositionManager';\nimport { devtools } from '@floating-ui/devtools';\nimport { devtoolsCallback } from './utils/devtools';\nimport { POSITIONING_END_EVENT } from './constants';\n/**\n * @internal\n */ export function usePositioning(options) {\n 'use no memo';\n const managerRef = React.useRef(null);\n const targetRef = React.useRef(null);\n const overrideTargetRef = React.useRef(null);\n const containerRef = React.useRef(null);\n const arrowRef = React.useRef(null);\n const { enabled = true } = options;\n const resolvePositioningOptions = usePositioningOptions(options);\n const updatePositionManager = React.useCallback(()=>{\n if (managerRef.current) {\n managerRef.current.dispose();\n }\n managerRef.current = null;\n var _overrideTargetRef_current;\n const target = (_overrideTargetRef_current = overrideTargetRef.current) !== null && _overrideTargetRef_current !== void 0 ? _overrideTargetRef_current : targetRef.current;\n if (enabled && canUseDOM() && target && containerRef.current) {\n managerRef.current = createPositionManager({\n container: containerRef.current,\n target,\n arrow: arrowRef.current,\n ...resolvePositioningOptions(containerRef.current, arrowRef.current)\n });\n }\n }, [\n enabled,\n resolvePositioningOptions\n ]);\n const setOverrideTarget = useEventCallback((target)=>{\n overrideTargetRef.current = target;\n updatePositionManager();\n });\n React.useImperativeHandle(options.positioningRef, ()=>({\n updatePosition: ()=>{\n var _managerRef_current;\n return (_managerRef_current = managerRef.current) === null || _managerRef_current === void 0 ? void 0 : _managerRef_current.updatePosition();\n },\n setTarget: (target)=>{\n if (options.target && process.env.NODE_ENV !== 'production') {\n const err = new Error();\n // eslint-disable-next-line no-console\n console.warn('Imperative setTarget should not be used at the same time as target option');\n // eslint-disable-next-line no-console\n console.warn(err.stack);\n }\n setOverrideTarget(target);\n }\n }), [\n options.target,\n setOverrideTarget\n ]);\n useIsomorphicLayoutEffect(()=>{\n var _options_target;\n setOverrideTarget((_options_target = options.target) !== null && _options_target !== void 0 ? _options_target : null);\n }, [\n options.target,\n setOverrideTarget\n ]);\n useIsomorphicLayoutEffect(()=>{\n updatePositionManager();\n }, [\n updatePositionManager\n ]);\n if (process.env.NODE_ENV !== 'production') {\n // This checked should run only in development mode\n // eslint-disable-next-line react-hooks/rules-of-hooks\n React.useEffect(()=>{\n if (containerRef.current) {\n var _contentNode_ownerDocument;\n const contentNode = containerRef.current;\n const treeWalker = (_contentNode_ownerDocument = contentNode.ownerDocument) === null || _contentNode_ownerDocument === void 0 ? void 0 : _contentNode_ownerDocument.createTreeWalker(contentNode, NodeFilter.SHOW_ELEMENT, {\n acceptNode: hasAutofocusFilter\n });\n while(treeWalker.nextNode()){\n const node = treeWalker.currentNode;\n // eslint-disable-next-line no-console\n console.warn('<Popper>:', node);\n // eslint-disable-next-line no-console\n console.warn([\n '<Popper>: ^ this node contains \"autoFocus\" prop on a React element. This can break the initial',\n 'positioning of an element and cause a window jump effect. This issue occurs because React polyfills',\n '\"autoFocus\" behavior to solve inconsistencies between different browsers:',\n 'https://github.com/facebook/react/issues/11851#issuecomment-351787078',\n '\\n',\n 'However, \".focus()\" in this case occurs before any other React effects will be executed',\n '(React.useEffect(), componentDidMount(), etc.) and we can not prevent this behavior. If you really',\n 'want to use \"autoFocus\" please add \"position: fixed\" to styles of the element that is wrapped by',\n '\"Popper\".',\n `In general, it's not recommended to use \"autoFocus\" as it may break accessibility aspects:`,\n 'https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md',\n '\\n',\n 'We suggest to use the \"trapFocus\" prop on Fluent components or a catch \"ref\" and then use',\n '\"ref.current.focus\" in React.useEffect():',\n 'https://reactjs.org/docs/refs-and-the-dom.html#adding-a-ref-to-a-dom-element'\n ].join(' '));\n }\n }\n // We run this check once, no need to add deps here\n // TODO: Should be rework to handle options.enabled and contentRef updates\n }, []);\n }\n const setTarget = useCallbackRef(null, (target)=>{\n if (targetRef.current !== target) {\n targetRef.current = target;\n updatePositionManager();\n }\n });\n const onPositioningEnd = useEventCallback(()=>{\n var _options_onPositioningEnd;\n return (_options_onPositioningEnd = options.onPositioningEnd) === null || _options_onPositioningEnd === void 0 ? void 0 : _options_onPositioningEnd.call(options);\n });\n const setContainer = useCallbackRef(null, (container)=>{\n if (containerRef.current !== container) {\n var _containerRef_current;\n (_containerRef_current = containerRef.current) === null || _containerRef_current === void 0 ? void 0 : _containerRef_current.removeEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n container === null || container === void 0 ? void 0 : container.addEventListener(POSITIONING_END_EVENT, onPositioningEnd);\n containerRef.current = container;\n updatePositionManager();\n }\n });\n const setArrow = useCallbackRef(null, (arrow)=>{\n if (arrowRef.current !== arrow) {\n arrowRef.current = arrow;\n updatePositionManager();\n }\n });\n // Let users use callback refs so they feel like 'normal' DOM refs\n return {\n targetRef: setTarget,\n containerRef: setContainer,\n arrowRef: setArrow\n };\n}\nfunction usePositioningOptions(options) {\n 'use no memo';\n const { align, arrowPadding, autoSize: rawAutoSize, coverTarget, flipBoundary, offset, overflowBoundary, pinned, position, unstable_disableTether: disableTether, // eslint-disable-next-line deprecation/deprecation\n positionFixed, strategy, overflowBoundaryPadding, fallbackPositions, useTransform, matchTargetSize, disableUpdateOnResize = false } = options;\n const { dir, targetDocument } = useFluent();\n const isRtl = dir === 'rtl';\n const positionStrategy = (strategy !== null && strategy !== void 0 ? strategy : positionFixed) ? 'fixed' : 'absolute';\n const autoSize = normalizeAutoSize(rawAutoSize);\n return React.useCallback((container, arrow)=>{\n const hasScrollableElement = hasScrollParent(container);\n const middleware = [\n autoSize && resetMaxSizeMiddleware(autoSize),\n matchTargetSize && matchTargetSizeMiddleware(),\n offset && offsetMiddleware(offset),\n coverTarget && coverTargetMiddleware(),\n !pinned && flipMiddleware({\n container,\n flipBoundary,\n hasScrollableElement,\n isRtl,\n fallbackPositions\n }),\n shiftMiddleware({\n container,\n hasScrollableElement,\n overflowBoundary,\n disableTether,\n overflowBoundaryPadding,\n isRtl\n }),\n autoSize && maxSizeMiddleware(autoSize, {\n container,\n overflowBoundary,\n overflowBoundaryPadding,\n isRtl\n }),\n intersectingMiddleware(),\n arrow && arrowMiddleware({\n element: arrow,\n padding: arrowPadding\n }),\n hideMiddleware({\n strategy: 'referenceHidden'\n }),\n hideMiddleware({\n strategy: 'escaped'\n }),\n process.env.NODE_ENV !== 'production' && targetDocument && devtools(targetDocument, devtoolsCallback(options))\n ].filter(Boolean);\n const placement = toFloatingUIPlacement(align, position, isRtl);\n return {\n placement,\n middleware,\n strategy: positionStrategy,\n useTransform,\n disableUpdateOnResize\n };\n }, // Options is missing here, but it's not required\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n align,\n arrowPadding,\n autoSize,\n coverTarget,\n disableTether,\n flipBoundary,\n isRtl,\n offset,\n overflowBoundary,\n pinned,\n position,\n positionStrategy,\n overflowBoundaryPadding,\n fallbackPositions,\n useTransform,\n matchTargetSize,\n targetDocument,\n disableUpdateOnResize\n ]);\n}\n"],"names":["usePositioning","options","managerRef","React","useRef","targetRef","overrideTargetRef","containerRef","arrowRef","enabled","resolvePositioningOptions","usePositioningOptions","updatePositionManager","useCallback","current","dispose","_overrideTargetRef_current","target","canUseDOM","createPositionManager","container","arrow","setOverrideTarget","useEventCallback","useImperativeHandle","positioningRef","updatePosition","_managerRef_current","setTarget","process","env","NODE_ENV","err","Error","console","warn","stack","useIsomorphicLayoutEffect","_options_target","useEffect","_contentNode_ownerDocument","contentNode","treeWalker","ownerDocument","createTreeWalker","NodeFilter","SHOW_ELEMENT","acceptNode","hasAutofocusFilter","nextNode","node","currentNode","join","useCallbackRef","onPositioningEnd","_options_onPositioningEnd","call","setContainer","_containerRef_current","removeEventListener","POSITIONING_END_EVENT","addEventListener","setArrow","align","arrowPadding","autoSize","rawAutoSize","coverTarget","flipBoundary","offset","overflowBoundary","pinned","position","unstable_disableTether","disableTether","positionFixed","strategy","overflowBoundaryPadding","fallbackPositions","useTransform","matchTargetSize","disableUpdateOnResize","dir","targetDocument","useFluent","isRtl","positionStrategy","normalizeAutoSize","hasScrollableElement","hasScrollParent","middleware","resetMaxSizeMiddleware","matchTargetSizeMiddleware","offsetMiddleware","coverTargetMiddleware","flipMiddleware","shiftMiddleware","maxSizeMiddleware","intersectingMiddleware","arrowMiddleware","element","padding","hideMiddleware","devtools","devtoolsCallback","filter","Boolean","placement","toFloatingUIPlacement"],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fluentui/react-positioning",
|
3
|
-
"version": "9.15.
|
3
|
+
"version": "9.15.4",
|
4
4
|
"description": "A react wrapper around Popper.js for Fluent UI",
|
5
5
|
"main": "lib-commonjs/index.js",
|
6
6
|
"module": "lib/index.js",
|
@@ -33,7 +33,7 @@
|
|
33
33
|
"@floating-ui/devtools": "0.2.1",
|
34
34
|
"@fluentui/react-shared-contexts": "^9.19.0",
|
35
35
|
"@fluentui/react-theme": "^9.1.19",
|
36
|
-
"@fluentui/react-utilities": "^9.18.
|
36
|
+
"@fluentui/react-utilities": "^9.18.11",
|
37
37
|
"@griffel/react": "^1.5.22",
|
38
38
|
"@swc/helpers": "^0.5.1"
|
39
39
|
},
|