@fluentui/react-popover 9.9.32 → 9.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
@@ -1,12 +1,27 @@
|
|
1
1
|
# Change Log - @fluentui/react-popover
|
2
2
|
|
3
|
-
This log was last generated on
|
3
|
+
This log was last generated on Fri, 21 Feb 2025 14:30:46 GMT and should not be manually modified.
|
4
4
|
|
5
5
|
<!-- Start content -->
|
6
6
|
|
7
|
+
## [9.10.0](https://github.com/microsoft/fluentui/tree/@fluentui/react-popover_v9.10.0)
|
8
|
+
|
9
|
+
Fri, 21 Feb 2025 14:30:46 GMT
|
10
|
+
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-popover_v9.9.32..@fluentui/react-popover_v9.10.0)
|
11
|
+
|
12
|
+
### Minor changes
|
13
|
+
|
14
|
+
- Bump @fluentui/react-aria to v9.14.0 ([PR #33876](https://github.com/microsoft/fluentui/pull/33876) by beachball)
|
15
|
+
- Bump @fluentui/react-portal to v9.5.0 ([PR #33876](https://github.com/microsoft/fluentui/pull/33876) by beachball)
|
16
|
+
- Bump @fluentui/react-tabster to v9.24.0 ([PR #33876](https://github.com/microsoft/fluentui/pull/33876) by beachball)
|
17
|
+
|
18
|
+
### Patches
|
19
|
+
|
20
|
+
- Update to satisfy the bumped Tabster 8.5.0. ([PR #33817](https://github.com/microsoft/fluentui/pull/33817) by marata@microsoft.com)
|
21
|
+
|
7
22
|
## [9.9.32](https://github.com/microsoft/fluentui/tree/@fluentui/react-popover_v9.9.32)
|
8
23
|
|
9
|
-
Mon, 27 Jan 2025 20:
|
24
|
+
Mon, 27 Jan 2025 20:27:35 GMT
|
10
25
|
[Compare changes](https://github.com/microsoft/fluentui/compare/@fluentui/react-popover_v9.9.31..@fluentui/react-popover_v9.9.32)
|
11
26
|
|
12
27
|
### Patches
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
2
2
|
import { useControllableState, useEventCallback, useOnClickOutside, useOnScrollOutside, elementContains, useTimeout } from '@fluentui/react-utilities';
|
3
3
|
import { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';
|
4
4
|
import { usePositioning, resolvePositioningShorthand, mergeArrowOffset, usePositioningMouseTarget } from '@fluentui/react-positioning';
|
5
|
-
import { useFocusFinders } from '@fluentui/react-tabster';
|
5
|
+
import { useFocusFinders, useActivateModal } from '@fluentui/react-tabster';
|
6
6
|
import { arrowHeights } from '../PopoverSurface/index';
|
7
7
|
import { popoverSurfaceBorderRadius } from './constants';
|
8
8
|
/**
|
@@ -92,18 +92,26 @@ import { popoverSurfaceBorderRadius } from './constants';
|
|
92
92
|
disabled: !open || !closeOnScroll
|
93
93
|
});
|
94
94
|
const { findFirstFocusable } = useFocusFinders();
|
95
|
+
const activateModal = useActivateModal();
|
95
96
|
React.useEffect(()=>{
|
96
97
|
if (props.unstable_disableAutoFocus) {
|
97
98
|
return;
|
98
99
|
}
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
const
|
100
|
+
const contentElement = positioningRefs.contentRef.current;
|
101
|
+
if (open && contentElement) {
|
102
|
+
var _contentElement_getAttribute;
|
103
|
+
const shouldFocusContainer = !isNaN((_contentElement_getAttribute = contentElement.getAttribute('tabIndex')) !== null && _contentElement_getAttribute !== void 0 ? _contentElement_getAttribute : undefined);
|
104
|
+
const firstFocusable = shouldFocusContainer ? contentElement : findFirstFocusable(contentElement);
|
103
105
|
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
106
|
+
if (shouldFocusContainer) {
|
107
|
+
// Modal activation happens automatically when something inside the modal is focused programmatically.
|
108
|
+
// When the container is focused, we need to activate the modal manually.
|
109
|
+
activateModal(contentElement);
|
110
|
+
}
|
104
111
|
}
|
105
112
|
}, [
|
106
113
|
findFirstFocusable,
|
114
|
+
activateModal,
|
107
115
|
open,
|
108
116
|
positioningRefs.contentRef,
|
109
117
|
props.unstable_disableAutoFocus
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/Popover/usePopover.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n useControllableState,\n useEventCallback,\n useOnClickOutside,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n usePositioning,\n resolvePositioningShorthand,\n mergeArrowOffset,\n usePositioningMouseTarget,\n} from '@fluentui/react-positioning';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { arrowHeights } from '../PopoverSurface/index';\nimport type { OpenPopoverEvents, PopoverProps, PopoverState } from './Popover.types';\nimport { popoverSurfaceBorderRadius } from './constants';\n\n/**\n * Create the state required to render Popover.\n *\n * The returned state can be modified with hooks such as usePopoverStyles,\n * before being passed to renderPopover_unstable.\n *\n * @param props - props from this instance of Popover\n */\nexport const usePopover_unstable = (props: PopoverProps): PopoverState => {\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n const initialState = {\n size: 'medium',\n contextTarget,\n setContextTarget,\n ...props,\n } as const;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at least one child');\n }\n\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at most two children');\n }\n }\n\n let popoverTrigger: React.ReactElement | undefined = undefined;\n let popoverSurface: React.ReactElement | undefined = undefined;\n if (children.length === 2) {\n popoverTrigger = children[0];\n popoverSurface = children[1];\n } else if (children.length === 1) {\n popoverSurface = children[0];\n }\n\n const [open, setOpenState] = useOpenState(initialState);\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n const setOpen = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n clearOpenTimeout();\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n if (e.type === 'mouseleave') {\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout(() => {\n setOpenState(e, shouldOpen);\n }, props.mouseLeaveDelay ?? 500);\n } else {\n setOpenState(e, shouldOpen);\n }\n });\n\n const toggleOpen = React.useCallback<PopoverState['toggleOpen']>(\n e => {\n setOpen(e, !open);\n },\n [setOpen, open],\n );\n\n const positioningRefs = usePopoverRefs(initialState);\n const { targetDocument } = useFluent();\n\n useOnClickOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open,\n disabledFocusOnIframe: !(props.closeOnIframeFocus ?? true),\n });\n\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = initialState.openOnContext || initialState.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open || !closeOnScroll,\n });\n\n const { findFirstFocusable } = useFocusFinders();\n\n React.useEffect(() => {\n if (props.unstable_disableAutoFocus) {\n return;\n }\n\n if (open && positioningRefs.contentRef.current) {\n const containerTabIndex = positioningRefs.contentRef.current.getAttribute('tabIndex') ?? undefined;\n const firstFocusable = isNaN(containerTabIndex)\n ? findFirstFocusable(positioningRefs.contentRef.current)\n : positioningRefs.contentRef.current;\n firstFocusable?.focus();\n }\n }, [findFirstFocusable, open, positioningRefs.contentRef, props.unstable_disableAutoFocus]);\n\n return {\n ...initialState,\n ...positioningRefs,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n inertTrapFocus: props.inertTrapFocus ?? (props.legacyTrapFocus === undefined ? false : !props.legacyTrapFocus),\n popoverTrigger,\n popoverSurface,\n open,\n setOpen,\n toggleOpen,\n setContextTarget,\n contextTarget,\n inline: props.inline ?? false,\n };\n};\n\n/**\n * Creates and manages the Popover open state\n */\nfunction useOpenState(\n state: Pick<PopoverState, 'setContextTarget' | 'onOpenChange'> & Pick<PopoverProps, 'open' | 'defaultOpen'>,\n) {\n 'use no memo';\n\n const onOpenChange: PopoverState['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false,\n });\n state.open = open !== undefined ? open : state.open;\n const setContextTarget = state.setContextTarget;\n\n const setOpen = React.useCallback(\n (e: OpenPopoverEvents, shouldOpen: boolean) => {\n if (shouldOpen && e.type === 'contextmenu') {\n setContextTarget(e as React.MouseEvent);\n }\n\n if (!shouldOpen) {\n setContextTarget(undefined);\n }\n\n setOpenState(shouldOpen);\n onOpenChange?.(e, { open: shouldOpen });\n },\n [setOpenState, onOpenChange, setContextTarget],\n );\n\n return [open, setOpen] as const;\n}\n\n/**\n * Creates and sets the necessary trigger, target and content refs used by Popover\n */\nfunction usePopoverRefs(\n state: Pick<PopoverState, 'size' | 'contextTarget'> &\n Pick<PopoverProps, 'positioning' | 'openOnContext' | 'withArrow'>,\n) {\n 'use no memo';\n\n const positioningOptions = {\n position: 'above' as const,\n align: 'center' as const,\n arrowPadding: 2 * popoverSurfaceBorderRadius,\n target: state.openOnContext ? state.contextTarget : undefined,\n ...resolvePositioningShorthand(state.positioning),\n };\n\n // no reason to render arrow when covering the target\n if (positioningOptions.coverTarget) {\n state.withArrow = false;\n }\n\n if (state.withArrow) {\n positioningOptions.offset = mergeArrowOffset(positioningOptions.offset, arrowHeights[state.size]);\n }\n\n const { targetRef: triggerRef, containerRef: contentRef, arrowRef } = usePositioning(positioningOptions);\n\n return {\n triggerRef,\n contentRef,\n arrowRef,\n } as const;\n}\n"],"names":["React","useControllableState","useEventCallback","useOnClickOutside","useOnScrollOutside","elementContains","useTimeout","useFluent_unstable","useFluent","usePositioning","resolvePositioningShorthand","mergeArrowOffset","usePositioningMouseTarget","useFocusFinders","arrowHeights","popoverSurfaceBorderRadius","usePopover_unstable","props","contextTarget","setContextTarget","initialState","size","children","Children","toArray","process","env","NODE_ENV","length","console","warn","popoverTrigger","undefined","popoverSurface","open","setOpenState","useOpenState","setOpenTimeout","clearOpenTimeout","setOpen","e","shouldOpen","Event","persist","type","mouseLeaveDelay","toggleOpen","useCallback","positioningRefs","usePopoverRefs","targetDocument","contains","element","callback","ev","refs","triggerRef","contentRef","disabled","disabledFocusOnIframe","closeOnIframeFocus","closeOnScroll","openOnContext","findFirstFocusable","useEffect","unstable_disableAutoFocus","current","containerTabIndex","getAttribute","firstFocusable","isNaN","focus","inertTrapFocus","legacyTrapFocus","inline","state","onOpenChange","data","defaultState","defaultOpen","positioningOptions","position","align","arrowPadding","target","positioning","coverTarget","withArrow","offset","targetRef","containerRef","arrowRef"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/components/Popover/usePopover.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n useControllableState,\n useEventCallback,\n useOnClickOutside,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n usePositioning,\n resolvePositioningShorthand,\n mergeArrowOffset,\n usePositioningMouseTarget,\n} from '@fluentui/react-positioning';\nimport { useFocusFinders, useActivateModal } from '@fluentui/react-tabster';\nimport { arrowHeights } from '../PopoverSurface/index';\nimport type { OpenPopoverEvents, PopoverProps, PopoverState } from './Popover.types';\nimport { popoverSurfaceBorderRadius } from './constants';\n\n/**\n * Create the state required to render Popover.\n *\n * The returned state can be modified with hooks such as usePopoverStyles,\n * before being passed to renderPopover_unstable.\n *\n * @param props - props from this instance of Popover\n */\nexport const usePopover_unstable = (props: PopoverProps): PopoverState => {\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n const initialState = {\n size: 'medium',\n contextTarget,\n setContextTarget,\n ...props,\n } as const;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at least one child');\n }\n\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at most two children');\n }\n }\n\n let popoverTrigger: React.ReactElement | undefined = undefined;\n let popoverSurface: React.ReactElement | undefined = undefined;\n if (children.length === 2) {\n popoverTrigger = children[0];\n popoverSurface = children[1];\n } else if (children.length === 1) {\n popoverSurface = children[0];\n }\n\n const [open, setOpenState] = useOpenState(initialState);\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n const setOpen = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n clearOpenTimeout();\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n if (e.type === 'mouseleave') {\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout(() => {\n setOpenState(e, shouldOpen);\n }, props.mouseLeaveDelay ?? 500);\n } else {\n setOpenState(e, shouldOpen);\n }\n });\n\n const toggleOpen = React.useCallback<PopoverState['toggleOpen']>(\n e => {\n setOpen(e, !open);\n },\n [setOpen, open],\n );\n\n const positioningRefs = usePopoverRefs(initialState);\n const { targetDocument } = useFluent();\n\n useOnClickOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open,\n disabledFocusOnIframe: !(props.closeOnIframeFocus ?? true),\n });\n\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = initialState.openOnContext || initialState.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open || !closeOnScroll,\n });\n\n const { findFirstFocusable } = useFocusFinders();\n const activateModal = useActivateModal();\n\n React.useEffect(() => {\n if (props.unstable_disableAutoFocus) {\n return;\n }\n\n const contentElement = positioningRefs.contentRef.current;\n\n if (open && contentElement) {\n const shouldFocusContainer = !isNaN(contentElement.getAttribute('tabIndex') ?? undefined);\n const firstFocusable = shouldFocusContainer ? contentElement : findFirstFocusable(contentElement);\n\n firstFocusable?.focus();\n\n if (shouldFocusContainer) {\n // Modal activation happens automatically when something inside the modal is focused programmatically.\n // When the container is focused, we need to activate the modal manually.\n activateModal(contentElement);\n }\n }\n }, [findFirstFocusable, activateModal, open, positioningRefs.contentRef, props.unstable_disableAutoFocus]);\n\n return {\n ...initialState,\n ...positioningRefs,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n inertTrapFocus: props.inertTrapFocus ?? (props.legacyTrapFocus === undefined ? false : !props.legacyTrapFocus),\n popoverTrigger,\n popoverSurface,\n open,\n setOpen,\n toggleOpen,\n setContextTarget,\n contextTarget,\n inline: props.inline ?? false,\n };\n};\n\n/**\n * Creates and manages the Popover open state\n */\nfunction useOpenState(\n state: Pick<PopoverState, 'setContextTarget' | 'onOpenChange'> & Pick<PopoverProps, 'open' | 'defaultOpen'>,\n) {\n 'use no memo';\n\n const onOpenChange: PopoverState['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false,\n });\n state.open = open !== undefined ? open : state.open;\n const setContextTarget = state.setContextTarget;\n\n const setOpen = React.useCallback(\n (e: OpenPopoverEvents, shouldOpen: boolean) => {\n if (shouldOpen && e.type === 'contextmenu') {\n setContextTarget(e as React.MouseEvent);\n }\n\n if (!shouldOpen) {\n setContextTarget(undefined);\n }\n\n setOpenState(shouldOpen);\n onOpenChange?.(e, { open: shouldOpen });\n },\n [setOpenState, onOpenChange, setContextTarget],\n );\n\n return [open, setOpen] as const;\n}\n\n/**\n * Creates and sets the necessary trigger, target and content refs used by Popover\n */\nfunction usePopoverRefs(\n state: Pick<PopoverState, 'size' | 'contextTarget'> &\n Pick<PopoverProps, 'positioning' | 'openOnContext' | 'withArrow'>,\n) {\n 'use no memo';\n\n const positioningOptions = {\n position: 'above' as const,\n align: 'center' as const,\n arrowPadding: 2 * popoverSurfaceBorderRadius,\n target: state.openOnContext ? state.contextTarget : undefined,\n ...resolvePositioningShorthand(state.positioning),\n };\n\n // no reason to render arrow when covering the target\n if (positioningOptions.coverTarget) {\n state.withArrow = false;\n }\n\n if (state.withArrow) {\n positioningOptions.offset = mergeArrowOffset(positioningOptions.offset, arrowHeights[state.size]);\n }\n\n const { targetRef: triggerRef, containerRef: contentRef, arrowRef } = usePositioning(positioningOptions);\n\n return {\n triggerRef,\n contentRef,\n arrowRef,\n } as const;\n}\n"],"names":["React","useControllableState","useEventCallback","useOnClickOutside","useOnScrollOutside","elementContains","useTimeout","useFluent_unstable","useFluent","usePositioning","resolvePositioningShorthand","mergeArrowOffset","usePositioningMouseTarget","useFocusFinders","useActivateModal","arrowHeights","popoverSurfaceBorderRadius","usePopover_unstable","props","contextTarget","setContextTarget","initialState","size","children","Children","toArray","process","env","NODE_ENV","length","console","warn","popoverTrigger","undefined","popoverSurface","open","setOpenState","useOpenState","setOpenTimeout","clearOpenTimeout","setOpen","e","shouldOpen","Event","persist","type","mouseLeaveDelay","toggleOpen","useCallback","positioningRefs","usePopoverRefs","targetDocument","contains","element","callback","ev","refs","triggerRef","contentRef","disabled","disabledFocusOnIframe","closeOnIframeFocus","closeOnScroll","openOnContext","findFirstFocusable","activateModal","useEffect","unstable_disableAutoFocus","contentElement","current","shouldFocusContainer","isNaN","getAttribute","firstFocusable","focus","inertTrapFocus","legacyTrapFocus","inline","state","onOpenChange","data","defaultState","defaultOpen","positioningOptions","position","align","arrowPadding","target","positioning","coverTarget","withArrow","offset","targetRef","containerRef","arrowRef"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
@@ -96,18 +96,26 @@ const usePopover_unstable = (props)=>{
|
|
96
96
|
disabled: !open || !closeOnScroll
|
97
97
|
});
|
98
98
|
const { findFirstFocusable } = (0, _reacttabster.useFocusFinders)();
|
99
|
+
const activateModal = (0, _reacttabster.useActivateModal)();
|
99
100
|
_react.useEffect(()=>{
|
100
101
|
if (props.unstable_disableAutoFocus) {
|
101
102
|
return;
|
102
103
|
}
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
const
|
104
|
+
const contentElement = positioningRefs.contentRef.current;
|
105
|
+
if (open && contentElement) {
|
106
|
+
var _contentElement_getAttribute;
|
107
|
+
const shouldFocusContainer = !isNaN((_contentElement_getAttribute = contentElement.getAttribute('tabIndex')) !== null && _contentElement_getAttribute !== void 0 ? _contentElement_getAttribute : undefined);
|
108
|
+
const firstFocusable = shouldFocusContainer ? contentElement : findFirstFocusable(contentElement);
|
107
109
|
firstFocusable === null || firstFocusable === void 0 ? void 0 : firstFocusable.focus();
|
110
|
+
if (shouldFocusContainer) {
|
111
|
+
// Modal activation happens automatically when something inside the modal is focused programmatically.
|
112
|
+
// When the container is focused, we need to activate the modal manually.
|
113
|
+
activateModal(contentElement);
|
114
|
+
}
|
108
115
|
}
|
109
116
|
}, [
|
110
117
|
findFirstFocusable,
|
118
|
+
activateModal,
|
111
119
|
open,
|
112
120
|
positioningRefs.contentRef,
|
113
121
|
props.unstable_disableAutoFocus
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/components/Popover/usePopover.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n useControllableState,\n useEventCallback,\n useOnClickOutside,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n usePositioning,\n resolvePositioningShorthand,\n mergeArrowOffset,\n usePositioningMouseTarget,\n} from '@fluentui/react-positioning';\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { arrowHeights } from '../PopoverSurface/index';\nimport type { OpenPopoverEvents, PopoverProps, PopoverState } from './Popover.types';\nimport { popoverSurfaceBorderRadius } from './constants';\n\n/**\n * Create the state required to render Popover.\n *\n * The returned state can be modified with hooks such as usePopoverStyles,\n * before being passed to renderPopover_unstable.\n *\n * @param props - props from this instance of Popover\n */\nexport const usePopover_unstable = (props: PopoverProps): PopoverState => {\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n const initialState = {\n size: 'medium',\n contextTarget,\n setContextTarget,\n ...props,\n } as const;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at least one child');\n }\n\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at most two children');\n }\n }\n\n let popoverTrigger: React.ReactElement | undefined = undefined;\n let popoverSurface: React.ReactElement | undefined = undefined;\n if (children.length === 2) {\n popoverTrigger = children[0];\n popoverSurface = children[1];\n } else if (children.length === 1) {\n popoverSurface = children[0];\n }\n\n const [open, setOpenState] = useOpenState(initialState);\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n const setOpen = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n clearOpenTimeout();\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n if (e.type === 'mouseleave') {\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout(() => {\n setOpenState(e, shouldOpen);\n }, props.mouseLeaveDelay ?? 500);\n } else {\n setOpenState(e, shouldOpen);\n }\n });\n\n const toggleOpen = React.useCallback<PopoverState['toggleOpen']>(\n e => {\n setOpen(e, !open);\n },\n [setOpen, open],\n );\n\n const positioningRefs = usePopoverRefs(initialState);\n const { targetDocument } = useFluent();\n\n useOnClickOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open,\n disabledFocusOnIframe: !(props.closeOnIframeFocus ?? true),\n });\n\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = initialState.openOnContext || initialState.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open || !closeOnScroll,\n });\n\n const { findFirstFocusable } = useFocusFinders();\n\n React.useEffect(() => {\n if (props.unstable_disableAutoFocus) {\n return;\n }\n\n if (open && positioningRefs.contentRef.current) {\n const containerTabIndex = positioningRefs.contentRef.current.getAttribute('tabIndex') ?? undefined;\n const firstFocusable = isNaN(containerTabIndex)\n ? findFirstFocusable(positioningRefs.contentRef.current)\n : positioningRefs.contentRef.current;\n firstFocusable?.focus();\n }\n }, [findFirstFocusable, open, positioningRefs.contentRef, props.unstable_disableAutoFocus]);\n\n return {\n ...initialState,\n ...positioningRefs,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n inertTrapFocus: props.inertTrapFocus ?? (props.legacyTrapFocus === undefined ? false : !props.legacyTrapFocus),\n popoverTrigger,\n popoverSurface,\n open,\n setOpen,\n toggleOpen,\n setContextTarget,\n contextTarget,\n inline: props.inline ?? false,\n };\n};\n\n/**\n * Creates and manages the Popover open state\n */\nfunction useOpenState(\n state: Pick<PopoverState, 'setContextTarget' | 'onOpenChange'> & Pick<PopoverProps, 'open' | 'defaultOpen'>,\n) {\n 'use no memo';\n\n const onOpenChange: PopoverState['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false,\n });\n state.open = open !== undefined ? open : state.open;\n const setContextTarget = state.setContextTarget;\n\n const setOpen = React.useCallback(\n (e: OpenPopoverEvents, shouldOpen: boolean) => {\n if (shouldOpen && e.type === 'contextmenu') {\n setContextTarget(e as React.MouseEvent);\n }\n\n if (!shouldOpen) {\n setContextTarget(undefined);\n }\n\n setOpenState(shouldOpen);\n onOpenChange?.(e, { open: shouldOpen });\n },\n [setOpenState, onOpenChange, setContextTarget],\n );\n\n return [open, setOpen] as const;\n}\n\n/**\n * Creates and sets the necessary trigger, target and content refs used by Popover\n */\nfunction usePopoverRefs(\n state: Pick<PopoverState, 'size' | 'contextTarget'> &\n Pick<PopoverProps, 'positioning' | 'openOnContext' | 'withArrow'>,\n) {\n 'use no memo';\n\n const positioningOptions = {\n position: 'above' as const,\n align: 'center' as const,\n arrowPadding: 2 * popoverSurfaceBorderRadius,\n target: state.openOnContext ? state.contextTarget : undefined,\n ...resolvePositioningShorthand(state.positioning),\n };\n\n // no reason to render arrow when covering the target\n if (positioningOptions.coverTarget) {\n state.withArrow = false;\n }\n\n if (state.withArrow) {\n positioningOptions.offset = mergeArrowOffset(positioningOptions.offset, arrowHeights[state.size]);\n }\n\n const { targetRef: triggerRef, containerRef: contentRef, arrowRef } = usePositioning(positioningOptions);\n\n return {\n triggerRef,\n contentRef,\n arrowRef,\n } as const;\n}\n"],"names":["usePopover_unstable","props","contextTarget","setContextTarget","usePositioningMouseTarget","initialState","size","children","React","Children","toArray","process","env","NODE_ENV","length","console","warn","popoverTrigger","undefined","popoverSurface","open","setOpenState","useOpenState","setOpenTimeout","clearOpenTimeout","useTimeout","setOpen","useEventCallback","e","shouldOpen","Event","persist","type","mouseLeaveDelay","toggleOpen","useCallback","positioningRefs","usePopoverRefs","targetDocument","useFluent","useOnClickOutside","contains","elementContains","element","callback","ev","refs","triggerRef","contentRef","disabled","disabledFocusOnIframe","closeOnIframeFocus","closeOnScroll","openOnContext","useOnScrollOutside","findFirstFocusable","useFocusFinders","useEffect","unstable_disableAutoFocus","current","containerTabIndex","getAttribute","firstFocusable","isNaN","focus","inertTrapFocus","legacyTrapFocus","inline","state","onOpenChange","data","useControllableState","defaultState","defaultOpen","positioningOptions","position","align","arrowPadding","popoverSurfaceBorderRadius","target","resolvePositioningShorthand","positioning","coverTarget","withArrow","offset","mergeArrowOffset","arrowHeights","targetRef","containerRef","arrowRef","usePositioning"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
1
|
+
{"version":3,"sources":["../src/components/Popover/usePopover.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n useControllableState,\n useEventCallback,\n useOnClickOutside,\n useOnScrollOutside,\n elementContains,\n useTimeout,\n} from '@fluentui/react-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\nimport {\n usePositioning,\n resolvePositioningShorthand,\n mergeArrowOffset,\n usePositioningMouseTarget,\n} from '@fluentui/react-positioning';\nimport { useFocusFinders, useActivateModal } from '@fluentui/react-tabster';\nimport { arrowHeights } from '../PopoverSurface/index';\nimport type { OpenPopoverEvents, PopoverProps, PopoverState } from './Popover.types';\nimport { popoverSurfaceBorderRadius } from './constants';\n\n/**\n * Create the state required to render Popover.\n *\n * The returned state can be modified with hooks such as usePopoverStyles,\n * before being passed to renderPopover_unstable.\n *\n * @param props - props from this instance of Popover\n */\nexport const usePopover_unstable = (props: PopoverProps): PopoverState => {\n const [contextTarget, setContextTarget] = usePositioningMouseTarget();\n const initialState = {\n size: 'medium',\n contextTarget,\n setContextTarget,\n ...props,\n } as const;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n if (process.env.NODE_ENV !== 'production') {\n if (children.length === 0) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at least one child');\n }\n\n if (children.length > 2) {\n // eslint-disable-next-line no-console\n console.warn('Popover must contain at most two children');\n }\n }\n\n let popoverTrigger: React.ReactElement | undefined = undefined;\n let popoverSurface: React.ReactElement | undefined = undefined;\n if (children.length === 2) {\n popoverTrigger = children[0];\n popoverSurface = children[1];\n } else if (children.length === 1) {\n popoverSurface = children[0];\n }\n\n const [open, setOpenState] = useOpenState(initialState);\n\n const [setOpenTimeout, clearOpenTimeout] = useTimeout();\n const setOpen = useEventCallback((e: OpenPopoverEvents, shouldOpen: boolean) => {\n clearOpenTimeout();\n if (!(e instanceof Event) && e.persist) {\n // < React 17 still uses pooled synthetic events\n e.persist();\n }\n\n if (e.type === 'mouseleave') {\n // FIXME leaking Node timeout type\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n setOpenTimeout(() => {\n setOpenState(e, shouldOpen);\n }, props.mouseLeaveDelay ?? 500);\n } else {\n setOpenState(e, shouldOpen);\n }\n });\n\n const toggleOpen = React.useCallback<PopoverState['toggleOpen']>(\n e => {\n setOpen(e, !open);\n },\n [setOpen, open],\n );\n\n const positioningRefs = usePopoverRefs(initialState);\n const { targetDocument } = useFluent();\n\n useOnClickOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open,\n disabledFocusOnIframe: !(props.closeOnIframeFocus ?? true),\n });\n\n // only close on scroll for context, or when closeOnScroll is specified\n const closeOnScroll = initialState.openOnContext || initialState.closeOnScroll;\n useOnScrollOutside({\n contains: elementContains,\n element: targetDocument,\n callback: ev => setOpen(ev, false),\n refs: [positioningRefs.triggerRef, positioningRefs.contentRef],\n disabled: !open || !closeOnScroll,\n });\n\n const { findFirstFocusable } = useFocusFinders();\n const activateModal = useActivateModal();\n\n React.useEffect(() => {\n if (props.unstable_disableAutoFocus) {\n return;\n }\n\n const contentElement = positioningRefs.contentRef.current;\n\n if (open && contentElement) {\n const shouldFocusContainer = !isNaN(contentElement.getAttribute('tabIndex') ?? undefined);\n const firstFocusable = shouldFocusContainer ? contentElement : findFirstFocusable(contentElement);\n\n firstFocusable?.focus();\n\n if (shouldFocusContainer) {\n // Modal activation happens automatically when something inside the modal is focused programmatically.\n // When the container is focused, we need to activate the modal manually.\n activateModal(contentElement);\n }\n }\n }, [findFirstFocusable, activateModal, open, positioningRefs.contentRef, props.unstable_disableAutoFocus]);\n\n return {\n ...initialState,\n ...positioningRefs,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n inertTrapFocus: props.inertTrapFocus ?? (props.legacyTrapFocus === undefined ? false : !props.legacyTrapFocus),\n popoverTrigger,\n popoverSurface,\n open,\n setOpen,\n toggleOpen,\n setContextTarget,\n contextTarget,\n inline: props.inline ?? false,\n };\n};\n\n/**\n * Creates and manages the Popover open state\n */\nfunction useOpenState(\n state: Pick<PopoverState, 'setContextTarget' | 'onOpenChange'> & Pick<PopoverProps, 'open' | 'defaultOpen'>,\n) {\n 'use no memo';\n\n const onOpenChange: PopoverState['onOpenChange'] = useEventCallback((e, data) => state.onOpenChange?.(e, data));\n\n const [open, setOpenState] = useControllableState({\n state: state.open,\n defaultState: state.defaultOpen,\n initialState: false,\n });\n state.open = open !== undefined ? open : state.open;\n const setContextTarget = state.setContextTarget;\n\n const setOpen = React.useCallback(\n (e: OpenPopoverEvents, shouldOpen: boolean) => {\n if (shouldOpen && e.type === 'contextmenu') {\n setContextTarget(e as React.MouseEvent);\n }\n\n if (!shouldOpen) {\n setContextTarget(undefined);\n }\n\n setOpenState(shouldOpen);\n onOpenChange?.(e, { open: shouldOpen });\n },\n [setOpenState, onOpenChange, setContextTarget],\n );\n\n return [open, setOpen] as const;\n}\n\n/**\n * Creates and sets the necessary trigger, target and content refs used by Popover\n */\nfunction usePopoverRefs(\n state: Pick<PopoverState, 'size' | 'contextTarget'> &\n Pick<PopoverProps, 'positioning' | 'openOnContext' | 'withArrow'>,\n) {\n 'use no memo';\n\n const positioningOptions = {\n position: 'above' as const,\n align: 'center' as const,\n arrowPadding: 2 * popoverSurfaceBorderRadius,\n target: state.openOnContext ? state.contextTarget : undefined,\n ...resolvePositioningShorthand(state.positioning),\n };\n\n // no reason to render arrow when covering the target\n if (positioningOptions.coverTarget) {\n state.withArrow = false;\n }\n\n if (state.withArrow) {\n positioningOptions.offset = mergeArrowOffset(positioningOptions.offset, arrowHeights[state.size]);\n }\n\n const { targetRef: triggerRef, containerRef: contentRef, arrowRef } = usePositioning(positioningOptions);\n\n return {\n triggerRef,\n contentRef,\n arrowRef,\n } as const;\n}\n"],"names":["usePopover_unstable","props","contextTarget","setContextTarget","usePositioningMouseTarget","initialState","size","children","React","Children","toArray","process","env","NODE_ENV","length","console","warn","popoverTrigger","undefined","popoverSurface","open","setOpenState","useOpenState","setOpenTimeout","clearOpenTimeout","useTimeout","setOpen","useEventCallback","e","shouldOpen","Event","persist","type","mouseLeaveDelay","toggleOpen","useCallback","positioningRefs","usePopoverRefs","targetDocument","useFluent","useOnClickOutside","contains","elementContains","element","callback","ev","refs","triggerRef","contentRef","disabled","disabledFocusOnIframe","closeOnIframeFocus","closeOnScroll","openOnContext","useOnScrollOutside","findFirstFocusable","useFocusFinders","activateModal","useActivateModal","useEffect","unstable_disableAutoFocus","contentElement","current","shouldFocusContainer","isNaN","getAttribute","firstFocusable","focus","inertTrapFocus","legacyTrapFocus","inline","state","onOpenChange","data","useControllableState","defaultState","defaultOpen","positioningOptions","position","align","arrowPadding","popoverSurfaceBorderRadius","target","resolvePositioningShorthand","positioning","coverTarget","withArrow","offset","mergeArrowOffset","arrowHeights","targetRef","containerRef","arrowRef","usePositioning"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fluentui/react-popover",
|
3
|
-
"version": "9.
|
3
|
+
"version": "9.10.0",
|
4
4
|
"description": "Popover component for Fluent UI",
|
5
5
|
"main": "lib-commonjs/index.js",
|
6
6
|
"module": "lib/index.js",
|
@@ -22,12 +22,12 @@
|
|
22
22
|
},
|
23
23
|
"dependencies": {
|
24
24
|
"@fluentui/keyboard-keys": "^9.0.8",
|
25
|
-
"@fluentui/react-aria": "^9.
|
25
|
+
"@fluentui/react-aria": "^9.14.0",
|
26
26
|
"@fluentui/react-context-selector": "^9.1.72",
|
27
|
-
"@fluentui/react-portal": "^9.
|
27
|
+
"@fluentui/react-portal": "^9.5.0",
|
28
28
|
"@fluentui/react-positioning": "^9.16.3",
|
29
29
|
"@fluentui/react-shared-contexts": "^9.21.2",
|
30
|
-
"@fluentui/react-tabster": "^9.
|
30
|
+
"@fluentui/react-tabster": "^9.24.0",
|
31
31
|
"@fluentui/react-theme": "^9.1.24",
|
32
32
|
"@fluentui/react-utilities": "^9.18.20",
|
33
33
|
"@fluentui/react-jsx-runtime": "^9.0.50",
|