@fluentui-copilot/react-preview 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.json CHANGED
@@ -2,7 +2,52 @@
2
2
  "name": "@fluentui-copilot/react-preview",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 21 Aug 2024 00:24:51 GMT",
5
+ "date": "Fri, 06 Sep 2024 19:17:40 GMT",
6
+ "tag": "@fluentui-copilot/react-preview_v0.5.4",
7
+ "version": "0.5.4",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "author": "makotom@microsoft.com",
12
+ "package": "@fluentui-copilot/react-preview",
13
+ "commit": "2a0f7bac90a8e65fa591a660f107ab8a79bee774",
14
+ "comment": "feat: Adding showDelay and hideDelay props to Preview component to control the delay in opening/closing it when opened by hover."
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 04 Sep 2024 18:11:50 GMT",
21
+ "tag": "@fluentui-copilot/react-preview_v0.5.3",
22
+ "version": "0.5.3",
23
+ "comments": {
24
+ "none": [
25
+ {
26
+ "author": "makotom@microsoft.com",
27
+ "package": "@fluentui-copilot/react-preview",
28
+ "commit": "6c540d99d0a351ca0b736ea12c1e3b0c5730984f",
29
+ "comment": "chore: Cherry-picking package updates from 0.18.1 release back to main."
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Fri, 23 Aug 2024 01:05:09 GMT",
36
+ "tag": "@fluentui-copilot/react-preview_v0.5.3",
37
+ "version": "0.5.3",
38
+ "comments": {
39
+ "patch": [
40
+ {
41
+ "author": "makotom@microsoft.com",
42
+ "package": "@fluentui-copilot/react-preview",
43
+ "commit": "32a2c49c4a177e9348d522b4700644d16c535007",
44
+ "comment": "feat: Setting autoSize to true by default for Preview."
45
+ }
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "date": "Wed, 21 Aug 2024 00:26:06 GMT",
6
51
  "tag": "@fluentui-copilot/react-preview_v0.5.2",
7
52
  "version": "0.5.2",
8
53
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,30 @@
1
1
  # Change Log - @fluentui-copilot/react-preview
2
2
 
3
- This log was last generated on Wed, 21 Aug 2024 00:24:51 GMT and should not be manually modified.
3
+ This log was last generated on Fri, 06 Sep 2024 19:17:40 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
+ ## [0.5.4](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/react-preview_v0.5.4)
8
+
9
+ Fri, 06 Sep 2024 19:17:40 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/react-preview_v0.5.3..@fluentui-copilot/react-preview_v0.5.4)
11
+
12
+ ### Patches
13
+
14
+ - feat: Adding showDelay and hideDelay props to Preview component to control the delay in opening/closing it when opened by hover. ([PR #2137](https://github.com/microsoft/fluentai/pull/2137) by makotom@microsoft.com)
15
+
16
+ ## [0.5.3](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/react-preview_v0.5.3)
17
+
18
+ Fri, 23 Aug 2024 01:05:09 GMT
19
+ [Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/react-preview_v0.5.2..@fluentui-copilot/react-preview_v0.5.3)
20
+
21
+ ### Patches
22
+
23
+ - feat: Setting autoSize to true by default for Preview. ([PR #2083](https://github.com/microsoft/fluentai/pull/2083) by makotom@microsoft.com)
24
+
7
25
  ## [0.5.2](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/react-preview_v0.5.2)
8
26
 
9
- Wed, 21 Aug 2024 00:24:51 GMT
27
+ Wed, 21 Aug 2024 00:26:06 GMT
10
28
  [Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/react-preview_v0.5.1..@fluentui-copilot/react-preview_v0.5.2)
11
29
 
12
30
  ### Patches
package/dist/index.d.ts CHANGED
@@ -119,7 +119,18 @@ export declare type PreviewMetadataState = ComponentState<PreviewMetadataSlots>;
119
119
  /**
120
120
  * Preview Props
121
121
  */
122
- export declare type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'>;
122
+ export declare type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'> & {
123
+ /**
124
+ * Sets the delay in milliseconds for closing the Preview on mouse leaving its trigger or popover surface when it was opened by hover.
125
+ * @default 250
126
+ */
127
+ hideDelay?: number;
128
+ /**
129
+ * Sets the delay in milliseconds for opening the Preview on hovering its trigger.
130
+ * @default 250
131
+ */
132
+ showDelay?: number;
133
+ };
123
134
 
124
135
  /**
125
136
  * State used in rendering Preview
@@ -1 +1 @@
1
- {"version":3,"sources":["Preview.types.ts"],"sourcesContent":["import type { PopoverProps, PopoverState } from '@fluentui/react-components';\n\n/**\n * Preview Props\n */\nexport type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'>;\n\n/**\n * State used in rendering Preview\n */\nexport type PreviewState = PopoverState & {\n /**\n * Whether the Preview was opened by click or keyboard and is therefore locked until intentional interaction to close it.\n */\n isPreviewLocked: boolean;\n};\n"],"names":[],"rangeMappings":";;","mappings":"AAOA;;CAEC,GACD,WAKE"}
1
+ {"version":3,"sources":["Preview.types.ts"],"sourcesContent":["import type { PopoverProps, PopoverState } from '@fluentui/react-components';\n\n/**\n * Preview Props\n */\nexport type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'> & {\n /**\n * Sets the delay in milliseconds for closing the Preview on mouse leaving its trigger or popover surface when it was opened by hover.\n * @default 250\n */\n hideDelay?: number;\n\n /**\n * Sets the delay in milliseconds for opening the Preview on hovering its trigger.\n * @default 250\n */\n showDelay?: number;\n};\n\n/**\n * State used in rendering Preview\n */\nexport type PreviewState = PopoverState & {\n /**\n * Whether the Preview was opened by click or keyboard and is therefore locked until intentional interaction to close it.\n */\n isPreviewLocked: boolean;\n};\n"],"names":[],"rangeMappings":";;","mappings":"AAmBA;;CAEC,GACD,WAKE"}
@@ -1,15 +1,15 @@
1
1
  import * as React from 'react';
2
2
  import { Enter, Escape } from '@fluentui/keyboard-keys';
3
- import { mergeCallbacks, useFluent, useId, useIsomorphicLayoutEffect, usePopover_unstable } from '@fluentui/react-components';
3
+ import { mergeCallbacks, resolvePositioningShorthand, useFluent, useId, useIsomorphicLayoutEffect, usePopover_unstable } from '@fluentui/react-components';
4
4
  import { useTimeout } from '@fluentui/react-utilities';
5
5
  import { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';
6
- const POPOVER_MOUSE_HIDE_DELAY = 500;
6
+ const POPOVER_MOUSE_DELAY = 250;
7
7
  const POPOVER_KEYBOARD_HIDE_DELAY = 0;
8
- const getDelay = type => {
8
+ const getDelay = (type, popoverMouseHideDelay) => {
9
9
  if (type === 'focus' || type === 'blur') {
10
10
  return POPOVER_KEYBOARD_HIDE_DELAY;
11
11
  }
12
- return POPOVER_MOUSE_HIDE_DELAY;
12
+ return popoverMouseHideDelay;
13
13
  };
14
14
  /**
15
15
  * Create the state required to render Preview.
@@ -22,15 +22,19 @@ const getDelay = type => {
22
22
  */
23
23
  export const usePreview_unstable = props => {
24
24
  const {
25
+ hideDelay = POPOVER_MOUSE_DELAY,
25
26
  onOpenChange,
26
27
  open,
28
+ positioning,
29
+ showDelay = POPOVER_MOUSE_DELAY,
27
30
  unstable_disableAutoFocus
28
31
  } = props;
29
32
  const children = React.Children.toArray(props.children);
30
33
  const {
31
34
  targetDocument
32
35
  } = useFluent();
33
- const [setTimeout, clearTimeout] = useTimeout();
36
+ const [setEnterTimeout, clearEnterTimeout] = useTimeout();
37
+ const [setLeaveTimeout, clearLeaveTimeout] = useTimeout();
34
38
  const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);
35
39
  const {
36
40
  current: previewInternalState
@@ -61,6 +65,7 @@ export const usePreview_unstable = props => {
61
65
  previewInternalState.openByHoverOverPopover = false;
62
66
  previewInternalState.openByKeyboard = false;
63
67
  setIsPopoverOpen(isOpen());
68
+ clearEnterTimeout();
64
69
  };
65
70
  React.useEffect(() => {
66
71
  return () => {
@@ -81,12 +86,14 @@ export const usePreview_unstable = props => {
81
86
  closeAllOpenedByHoverPreviews(popoverSurfaceId);
82
87
  addOpenedByHoverPreview(popoverSurfaceId, closeCallback);
83
88
  }
84
- setIsPopoverOpen(isOpen());
89
+ setEnterTimeout(() => {
90
+ setIsPopoverOpen(isOpen());
91
+ }, showDelay);
85
92
  };
86
93
  const handleTriggerTargetLeave = e => {
87
94
  previewInternalState.openByHoverOverTrigger = false;
88
95
  triggerMousedOver.current = false;
89
- setTimeout(() => {
96
+ setLeaveTimeout(() => {
90
97
  setIsPopoverOpen(isOpen());
91
98
  // We want to call onOpenChange only if the popover is actually closing when leaving the trigger
92
99
  if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverPopover && isPopoverOpen) {
@@ -95,7 +102,7 @@ export const usePreview_unstable = props => {
95
102
  });
96
103
  removeOpenedByHoverPreview(popoverSurfaceId);
97
104
  }
98
- }, getDelay(e.type));
105
+ }, getDelay(e.type, hideDelay));
99
106
  };
100
107
  const handleTriggerClick = e => {
101
108
  // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.
@@ -127,7 +134,7 @@ export const usePreview_unstable = props => {
127
134
  };
128
135
  const handleTriggerKeyDown = e => {
129
136
  if (e.key === Enter) {
130
- clearTimeout();
137
+ clearLeaveTimeout();
131
138
  // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.
132
139
  e.preventDefault();
133
140
  // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.
@@ -155,7 +162,7 @@ export const usePreview_unstable = props => {
155
162
  };
156
163
  const handlePopoverTargetLeave = e => {
157
164
  previewInternalState.openByHoverOverPopover = false;
158
- setTimeout(() => {
165
+ setLeaveTimeout(() => {
159
166
  setIsPopoverOpen(isOpen());
160
167
  // We want to call onOpenChange only if the popover is actually closing when leaving the popover
161
168
  if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverTrigger) {
@@ -164,7 +171,7 @@ export const usePreview_unstable = props => {
164
171
  });
165
172
  removeOpenedByHoverPreview(popoverSurfaceId);
166
173
  }
167
- }, getDelay(e.type));
174
+ }, getDelay(e.type, hideDelay));
168
175
  };
169
176
  popoverTrigger = React.cloneElement(popoverTrigger, {
170
177
  ...popoverTrigger.props,
@@ -194,7 +201,7 @@ export const usePreview_unstable = props => {
194
201
  const onDocumentKeyDown = e => {
195
202
  const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;
196
203
  if (openedByHover && e.key === Escape) {
197
- clearTimeout();
204
+ clearLeaveTimeout();
198
205
  // We set state back to its default if the Escape key has been pressed
199
206
  setDisableAutoFocus(true);
200
207
  closeCallback();
@@ -219,7 +226,7 @@ export const usePreview_unstable = props => {
219
226
  if (!preventDefaultClose.current) {
220
227
  // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.
221
228
  if (!data.open) {
222
- clearTimeout();
229
+ clearLeaveTimeout();
223
230
  closeCallback();
224
231
  removeOpenedByHoverPreview(popoverSurfaceId);
225
232
  }
@@ -240,6 +247,13 @@ export const usePreview_unstable = props => {
240
247
  children: resolvedChildren,
241
248
  onOpenChange: onPopoverOpenChange,
242
249
  open: open !== null && open !== void 0 ? open : isPopoverOpen,
250
+ positioning: typeof positioning === 'string' ? {
251
+ autoSize: true,
252
+ ...resolvePositioningShorthand(positioning)
253
+ } : {
254
+ autoSize: true,
255
+ ...positioning
256
+ },
243
257
  unstable_disableAutoFocus: unstable_disableAutoFocus !== null && unstable_disableAutoFocus !== void 0 ? unstable_disableAutoFocus : disableAutoFocus
244
258
  });
245
259
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["usePreview.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Enter, Escape } from '@fluentui/keyboard-keys';\nimport {\n mergeCallbacks,\n useFluent,\n useId,\n useIsomorphicLayoutEffect,\n usePopover_unstable,\n} from '@fluentui/react-components';\nimport { useTimeout } from '@fluentui/react-utilities';\nimport type { OnOpenChangeData, OpenPopoverEvents } from '@fluentui/react-components';\n\nimport { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';\nimport type { PreviewProps, PreviewState } from './Preview.types';\n\ntype PreviewInternalState = {\n openByClick: boolean;\n openByHoverOverTrigger: boolean;\n openByHoverOverPopover: boolean;\n openByKeyboard: boolean;\n};\n\nconst POPOVER_MOUSE_HIDE_DELAY = 500;\nconst POPOVER_KEYBOARD_HIDE_DELAY = 0;\n\nconst getDelay = (type: string): number => {\n if (type === 'focus' || type === 'blur') {\n return POPOVER_KEYBOARD_HIDE_DELAY;\n }\n\n return POPOVER_MOUSE_HIDE_DELAY;\n};\n\ntype TargetEvent<T> = React.MouseEvent<T> | React.FocusEvent<T>;\n\n/**\n * Create the state required to render Preview.\n *\n * The returned state can be modified with hooks such as usePreviewStyles_unstable,\n * before being passed to renderPreview_unstable.\n *\n * @param props - props from this instance of Preview\n * @param ref - reference to root HTMLElement of Preview\n */\nexport const usePreview_unstable = (props: PreviewProps): PreviewState => {\n const { onOpenChange, open, unstable_disableAutoFocus } = props;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n const { targetDocument } = useFluent();\n const [setTimeout, clearTimeout] = useTimeout();\n\n const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);\n\n const { current: previewInternalState } = React.useRef<PreviewInternalState>({\n openByClick: false,\n openByHoverOverTrigger: false,\n openByHoverOverPopover: false,\n openByKeyboard: false,\n });\n const triggerMousedOver = React.useRef(false);\n\n const isOpen = () => {\n return (\n previewInternalState.openByClick ||\n previewInternalState.openByHoverOverTrigger ||\n previewInternalState.openByHoverOverPopover ||\n previewInternalState.openByKeyboard\n );\n };\n\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n const preventDefaultClose = React.useRef(false);\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 popoverSurfaceId = useId('preview-surface', popoverSurface?.props.id);\n\n const closeCallback = () => {\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n setIsPopoverOpen(isOpen());\n };\n\n React.useEffect(() => {\n return () => {\n // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.\n removeOpenedByHoverPreview(popoverSurfaceId);\n };\n }, [popoverSurfaceId]);\n\n if (popoverSurface && popoverTrigger) {\n const handleTriggerTargetEnter = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = true;\n triggerMousedOver.current = true;\n\n // We want to disable auto focus only if the popover is being opened by hovering over the trigger\n if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {\n setDisableAutoFocus(true);\n onOpenChange?.(e, { open: true });\n closeAllOpenedByHoverPreviews(popoverSurfaceId);\n addOpenedByHoverPreview(popoverSurfaceId, closeCallback);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerTargetLeave = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = false;\n triggerMousedOver.current = false;\n\n setTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the trigger\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverPopover &&\n isPopoverOpen\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type));\n };\n\n const handleTriggerClick = (e: TargetEvent<HTMLSpanElement>): void => {\n // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.\n preventDefaultClose.current = true;\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.\n previewInternalState.openByClick = previewInternalState.openByKeyboard\n ? false\n : !previewInternalState.openByClick;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n\n // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.\n if (triggerMousedOver.current) {\n previewInternalState.openByClick = false;\n triggerMousedOver.current = false;\n }\n // If it was not moused over, we want to prevent the default click action from opening a link, so the preview can open first\n else {\n e.preventDefault();\n }\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByClick });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === Enter) {\n clearTimeout();\n\n // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.\n e.preventDefault();\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByClick is true, then the popover was already opened via click and we always want to close it.\n previewInternalState.openByKeyboard = previewInternalState.openByClick\n ? false\n : !previewInternalState.openByKeyboard;\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByKeyboard });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n }\n };\n\n const handlePopoverTargetEnter = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = true;\n setIsPopoverOpen(isOpen());\n };\n\n const handlePopoverTargetLeave = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = false;\n setTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the popover\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverTrigger\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type));\n };\n\n popoverTrigger = React.cloneElement(popoverTrigger, {\n ...popoverTrigger.props,\n children: React.cloneElement(popoverTrigger.props.children as React.ReactElement, {\n ...popoverTrigger.props.children.props,\n onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),\n onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),\n onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),\n onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),\n onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave),\n }),\n });\n\n popoverSurface = React.cloneElement(popoverSurface, {\n ...popoverSurface.props,\n 'aria-labelledby':\n popoverSurface.props['aria-labelledby'] ?? popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,\n id: popoverSurfaceId,\n onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),\n onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),\n onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter),\n });\n }\n\n // Hitting Escape key should close the popover if it was opened by hover.\n // This is necessary to attach to the document because focus is likely not within the trigger or popover.\n useIsomorphicLayoutEffect(() => {\n if (isPopoverOpen) {\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;\n\n if (openedByHover && e.key === Escape) {\n clearTimeout();\n\n // We set state back to its default if the Escape key has been pressed\n setDisableAutoFocus(true);\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n\n onOpenChange?.(e as unknown as OpenPopoverEvents, { open: false });\n\n e.stopPropagation();\n }\n };\n\n targetDocument?.addEventListener('keydown', onDocumentKeyDown, { capture: true });\n\n return () => {\n targetDocument?.removeEventListener('keydown', onDocumentKeyDown, { capture: true });\n };\n }\n }, [targetDocument, isPopoverOpen]);\n\n const onPopoverOpenChange = (e: OpenPopoverEvents, data: OnOpenChangeData): void => {\n if (!preventDefaultClose.current) {\n // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.\n if (!data.open) {\n clearTimeout();\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n onOpenChange?.(e, data);\n }\n\n preventDefaultClose.current = false;\n };\n\n let resolvedChildren = children as [JSX.Element, JSX.Element] | JSX.Element;\n if (popoverSurface) {\n if (popoverTrigger) {\n resolvedChildren = [popoverTrigger, popoverSurface];\n } else {\n resolvedChildren = popoverSurface;\n }\n }\n\n const popoverState = usePopover_unstable({\n ...props,\n children: resolvedChildren,\n onOpenChange: onPopoverOpenChange,\n open: open ?? isPopoverOpen,\n unstable_disableAutoFocus: unstable_disableAutoFocus ?? disableAutoFocus,\n });\n\n return {\n ...popoverState,\n isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard,\n };\n};\n"],"names":["React","Enter","Escape","mergeCallbacks","useFluent","useId","useIsomorphicLayoutEffect","usePopover_unstable","useTimeout","addOpenedByHoverPreview","closeAllOpenedByHoverPreviews","removeOpenedByHoverPreview","POPOVER_MOUSE_HIDE_DELAY","POPOVER_KEYBOARD_HIDE_DELAY","getDelay","type","usePreview_unstable","props","onOpenChange","open","unstable_disableAutoFocus","children","Children","toArray","targetDocument","setTimeout","clearTimeout","disableAutoFocus","setDisableAutoFocus","useState","current","previewInternalState","useRef","openByClick","openByHoverOverTrigger","openByHoverOverPopover","openByKeyboard","triggerMousedOver","isOpen","isPopoverOpen","setIsPopoverOpen","preventDefaultClose","popoverTrigger","undefined","popoverSurface","length","popoverSurfaceId","id","closeCallback","useEffect","handleTriggerTargetEnter","e","handleTriggerTargetLeave","handleTriggerClick","tmpOpenByHoverOverTrigger","preventDefault","handleTriggerKeyDown","key","handlePopoverTargetEnter","handlePopoverTargetLeave","cloneElement","onBlur","onClick","onKeyDown","onMouseEnter","onMouseLeave","onFocus","onDocumentKeyDown","openedByHover","stopPropagation","addEventListener","capture","removeEventListener","onPopoverOpenChange","data","resolvedChildren","popoverState","isPreviewLocked"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["usePreview.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Enter, Escape } from '@fluentui/keyboard-keys';\nimport {\n mergeCallbacks,\n resolvePositioningShorthand,\n useFluent,\n useId,\n useIsomorphicLayoutEffect,\n usePopover_unstable,\n} from '@fluentui/react-components';\nimport { useTimeout } from '@fluentui/react-utilities';\nimport type { OnOpenChangeData, OpenPopoverEvents } from '@fluentui/react-components';\n\nimport { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';\nimport type { PreviewProps, PreviewState } from './Preview.types';\n\ntype PreviewInternalState = {\n openByClick: boolean;\n openByHoverOverTrigger: boolean;\n openByHoverOverPopover: boolean;\n openByKeyboard: boolean;\n};\n\nconst POPOVER_MOUSE_DELAY = 250;\nconst POPOVER_KEYBOARD_HIDE_DELAY = 0;\n\nconst getDelay = (type: string, popoverMouseHideDelay: number): number => {\n if (type === 'focus' || type === 'blur') {\n return POPOVER_KEYBOARD_HIDE_DELAY;\n }\n\n return popoverMouseHideDelay;\n};\n\ntype TargetEvent<T> = React.MouseEvent<T> | React.FocusEvent<T>;\n\n/**\n * Create the state required to render Preview.\n *\n * The returned state can be modified with hooks such as usePreviewStyles_unstable,\n * before being passed to renderPreview_unstable.\n *\n * @param props - props from this instance of Preview\n * @param ref - reference to root HTMLElement of Preview\n */\nexport const usePreview_unstable = (props: PreviewProps): PreviewState => {\n const {\n hideDelay = POPOVER_MOUSE_DELAY,\n onOpenChange,\n open,\n positioning,\n showDelay = POPOVER_MOUSE_DELAY,\n unstable_disableAutoFocus,\n } = props;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n const { targetDocument } = useFluent();\n const [setEnterTimeout, clearEnterTimeout] = useTimeout();\n const [setLeaveTimeout, clearLeaveTimeout] = useTimeout();\n\n const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);\n\n const { current: previewInternalState } = React.useRef<PreviewInternalState>({\n openByClick: false,\n openByHoverOverTrigger: false,\n openByHoverOverPopover: false,\n openByKeyboard: false,\n });\n const triggerMousedOver = React.useRef(false);\n\n const isOpen = () => {\n return (\n previewInternalState.openByClick ||\n previewInternalState.openByHoverOverTrigger ||\n previewInternalState.openByHoverOverPopover ||\n previewInternalState.openByKeyboard\n );\n };\n\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n const preventDefaultClose = React.useRef(false);\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 popoverSurfaceId = useId('preview-surface', popoverSurface?.props.id);\n\n const closeCallback = () => {\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n setIsPopoverOpen(isOpen());\n clearEnterTimeout();\n };\n\n React.useEffect(() => {\n return () => {\n // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.\n removeOpenedByHoverPreview(popoverSurfaceId);\n };\n }, [popoverSurfaceId]);\n\n if (popoverSurface && popoverTrigger) {\n const handleTriggerTargetEnter = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = true;\n triggerMousedOver.current = true;\n\n // We want to disable auto focus only if the popover is being opened by hovering over the trigger\n if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {\n setDisableAutoFocus(true);\n onOpenChange?.(e, { open: true });\n closeAllOpenedByHoverPreviews(popoverSurfaceId);\n addOpenedByHoverPreview(popoverSurfaceId, closeCallback);\n }\n\n setEnterTimeout(() => {\n setIsPopoverOpen(isOpen());\n }, showDelay);\n };\n\n const handleTriggerTargetLeave = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = false;\n triggerMousedOver.current = false;\n\n setLeaveTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the trigger\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverPopover &&\n isPopoverOpen\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type, hideDelay));\n };\n\n const handleTriggerClick = (e: TargetEvent<HTMLSpanElement>): void => {\n // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.\n preventDefaultClose.current = true;\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.\n previewInternalState.openByClick = previewInternalState.openByKeyboard\n ? false\n : !previewInternalState.openByClick;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n\n // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.\n if (triggerMousedOver.current) {\n previewInternalState.openByClick = false;\n triggerMousedOver.current = false;\n }\n // If it was not moused over, we want to prevent the default click action from opening a link, so the preview can open first\n else {\n e.preventDefault();\n }\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByClick });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === Enter) {\n clearLeaveTimeout();\n\n // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.\n e.preventDefault();\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByClick is true, then the popover was already opened via click and we always want to close it.\n previewInternalState.openByKeyboard = previewInternalState.openByClick\n ? false\n : !previewInternalState.openByKeyboard;\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByKeyboard });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n }\n };\n\n const handlePopoverTargetEnter = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = true;\n setIsPopoverOpen(isOpen());\n };\n\n const handlePopoverTargetLeave = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = false;\n setLeaveTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the popover\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverTrigger\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type, hideDelay));\n };\n\n popoverTrigger = React.cloneElement(popoverTrigger, {\n ...popoverTrigger.props,\n children: React.cloneElement(popoverTrigger.props.children as React.ReactElement, {\n ...popoverTrigger.props.children.props,\n onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),\n onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),\n onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),\n onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),\n onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave),\n }),\n });\n\n popoverSurface = React.cloneElement(popoverSurface, {\n ...popoverSurface.props,\n 'aria-labelledby':\n popoverSurface.props['aria-labelledby'] ?? popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,\n id: popoverSurfaceId,\n onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),\n onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),\n onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter),\n });\n }\n\n // Hitting Escape key should close the popover if it was opened by hover.\n // This is necessary to attach to the document because focus is likely not within the trigger or popover.\n useIsomorphicLayoutEffect(() => {\n if (isPopoverOpen) {\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;\n\n if (openedByHover && e.key === Escape) {\n clearLeaveTimeout();\n\n // We set state back to its default if the Escape key has been pressed\n setDisableAutoFocus(true);\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n\n onOpenChange?.(e as unknown as OpenPopoverEvents, { open: false });\n\n e.stopPropagation();\n }\n };\n\n targetDocument?.addEventListener('keydown', onDocumentKeyDown, { capture: true });\n\n return () => {\n targetDocument?.removeEventListener('keydown', onDocumentKeyDown, { capture: true });\n };\n }\n }, [targetDocument, isPopoverOpen]);\n\n const onPopoverOpenChange = (e: OpenPopoverEvents, data: OnOpenChangeData): void => {\n if (!preventDefaultClose.current) {\n // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.\n if (!data.open) {\n clearLeaveTimeout();\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n onOpenChange?.(e, data);\n }\n\n preventDefaultClose.current = false;\n };\n\n let resolvedChildren = children as [JSX.Element, JSX.Element] | JSX.Element;\n if (popoverSurface) {\n if (popoverTrigger) {\n resolvedChildren = [popoverTrigger, popoverSurface];\n } else {\n resolvedChildren = popoverSurface;\n }\n }\n\n const popoverState = usePopover_unstable({\n ...props,\n children: resolvedChildren,\n onOpenChange: onPopoverOpenChange,\n open: open ?? isPopoverOpen,\n positioning:\n typeof positioning === 'string'\n ? { autoSize: true, ...resolvePositioningShorthand(positioning) }\n : { autoSize: true, ...positioning },\n unstable_disableAutoFocus: unstable_disableAutoFocus ?? disableAutoFocus,\n });\n\n return {\n ...popoverState,\n isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard,\n };\n};\n"],"names":["React","Enter","Escape","mergeCallbacks","resolvePositioningShorthand","useFluent","useId","useIsomorphicLayoutEffect","usePopover_unstable","useTimeout","addOpenedByHoverPreview","closeAllOpenedByHoverPreviews","removeOpenedByHoverPreview","POPOVER_MOUSE_DELAY","POPOVER_KEYBOARD_HIDE_DELAY","getDelay","type","popoverMouseHideDelay","usePreview_unstable","props","hideDelay","onOpenChange","open","positioning","showDelay","unstable_disableAutoFocus","children","Children","toArray","targetDocument","setEnterTimeout","clearEnterTimeout","setLeaveTimeout","clearLeaveTimeout","disableAutoFocus","setDisableAutoFocus","useState","current","previewInternalState","useRef","openByClick","openByHoverOverTrigger","openByHoverOverPopover","openByKeyboard","triggerMousedOver","isOpen","isPopoverOpen","setIsPopoverOpen","preventDefaultClose","popoverTrigger","undefined","popoverSurface","length","popoverSurfaceId","id","closeCallback","useEffect","handleTriggerTargetEnter","e","handleTriggerTargetLeave","handleTriggerClick","tmpOpenByHoverOverTrigger","preventDefault","handleTriggerKeyDown","key","handlePopoverTargetEnter","handlePopoverTargetLeave","cloneElement","onBlur","onClick","onKeyDown","onMouseEnter","onMouseLeave","onFocus","onDocumentKeyDown","openedByHover","stopPropagation","addEventListener","capture","removeEventListener","onPopoverOpenChange","data","resolvedChildren","popoverState","autoSize","isPreviewLocked"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["Preview.types.ts"],"sourcesContent":["import type { PopoverProps, PopoverState } from '@fluentui/react-components';\n\n/**\n * Preview Props\n */\nexport type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'>;\n\n/**\n * State used in rendering Preview\n */\nexport type PreviewState = PopoverState & {\n /**\n * Whether the Preview was opened by click or keyboard and is therefore locked until intentional interaction to close it.\n */\n isPreviewLocked: boolean;\n};\n"],"names":[],"rangeMappings":";;","mappings":"AAOA;;CAEC"}
1
+ {"version":3,"sources":["Preview.types.ts"],"sourcesContent":["import type { PopoverProps, PopoverState } from '@fluentui/react-components';\n\n/**\n * Preview Props\n */\nexport type PreviewProps = Omit<PopoverProps, 'mouseLeaveDelay' | 'openOnHover'> & {\n /**\n * Sets the delay in milliseconds for closing the Preview on mouse leaving its trigger or popover surface when it was opened by hover.\n * @default 250\n */\n hideDelay?: number;\n\n /**\n * Sets the delay in milliseconds for opening the Preview on hovering its trigger.\n * @default 250\n */\n showDelay?: number;\n};\n\n/**\n * State used in rendering Preview\n */\nexport type PreviewState = PopoverState & {\n /**\n * Whether the Preview was opened by click or keyboard and is therefore locked until intentional interaction to close it.\n */\n isPreviewLocked: boolean;\n};\n"],"names":[],"rangeMappings":";;","mappings":"AAmBA;;CAEC"}
@@ -14,19 +14,20 @@ const _keyboardkeys = require("@fluentui/keyboard-keys");
14
14
  const _reactcomponents = require("@fluentui/react-components");
15
15
  const _reactutilities = require("@fluentui/react-utilities");
16
16
  const _utils = require("../../utils");
17
- const POPOVER_MOUSE_HIDE_DELAY = 500;
17
+ const POPOVER_MOUSE_DELAY = 250;
18
18
  const POPOVER_KEYBOARD_HIDE_DELAY = 0;
19
- const getDelay = (type)=>{
19
+ const getDelay = (type, popoverMouseHideDelay)=>{
20
20
  if (type === 'focus' || type === 'blur') {
21
21
  return POPOVER_KEYBOARD_HIDE_DELAY;
22
22
  }
23
- return POPOVER_MOUSE_HIDE_DELAY;
23
+ return popoverMouseHideDelay;
24
24
  };
25
25
  const usePreview_unstable = (props)=>{
26
- const { onOpenChange, open, unstable_disableAutoFocus } = props;
26
+ const { hideDelay = POPOVER_MOUSE_DELAY, onOpenChange, open, positioning, showDelay = POPOVER_MOUSE_DELAY, unstable_disableAutoFocus } = props;
27
27
  const children = _react.Children.toArray(props.children);
28
28
  const { targetDocument } = (0, _reactcomponents.useFluent)();
29
- const [setTimeout, clearTimeout] = (0, _reactutilities.useTimeout)();
29
+ const [setEnterTimeout, clearEnterTimeout] = (0, _reactutilities.useTimeout)();
30
+ const [setLeaveTimeout, clearLeaveTimeout] = (0, _reactutilities.useTimeout)();
30
31
  const [disableAutoFocus, setDisableAutoFocus] = _react.useState(true);
31
32
  const { current: previewInternalState } = _react.useRef({
32
33
  openByClick: false,
@@ -55,6 +56,7 @@ const usePreview_unstable = (props)=>{
55
56
  previewInternalState.openByHoverOverPopover = false;
56
57
  previewInternalState.openByKeyboard = false;
57
58
  setIsPopoverOpen(isOpen());
59
+ clearEnterTimeout();
58
60
  };
59
61
  _react.useEffect(()=>{
60
62
  return ()=>{
@@ -77,12 +79,14 @@ const usePreview_unstable = (props)=>{
77
79
  (0, _utils.closeAllOpenedByHoverPreviews)(popoverSurfaceId);
78
80
  (0, _utils.addOpenedByHoverPreview)(popoverSurfaceId, closeCallback);
79
81
  }
80
- setIsPopoverOpen(isOpen());
82
+ setEnterTimeout(()=>{
83
+ setIsPopoverOpen(isOpen());
84
+ }, showDelay);
81
85
  };
82
86
  const handleTriggerTargetLeave = (e)=>{
83
87
  previewInternalState.openByHoverOverTrigger = false;
84
88
  triggerMousedOver.current = false;
85
- setTimeout(()=>{
89
+ setLeaveTimeout(()=>{
86
90
  setIsPopoverOpen(isOpen());
87
91
  // We want to call onOpenChange only if the popover is actually closing when leaving the trigger
88
92
  if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverPopover && isPopoverOpen) {
@@ -91,7 +95,7 @@ const usePreview_unstable = (props)=>{
91
95
  });
92
96
  (0, _utils.removeOpenedByHoverPreview)(popoverSurfaceId);
93
97
  }
94
- }, getDelay(e.type));
98
+ }, getDelay(e.type, hideDelay));
95
99
  };
96
100
  const handleTriggerClick = (e)=>{
97
101
  // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.
@@ -123,7 +127,7 @@ const usePreview_unstable = (props)=>{
123
127
  };
124
128
  const handleTriggerKeyDown = (e)=>{
125
129
  if (e.key === _keyboardkeys.Enter) {
126
- clearTimeout();
130
+ clearLeaveTimeout();
127
131
  // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.
128
132
  e.preventDefault();
129
133
  // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.
@@ -151,7 +155,7 @@ const usePreview_unstable = (props)=>{
151
155
  };
152
156
  const handlePopoverTargetLeave = (e)=>{
153
157
  previewInternalState.openByHoverOverPopover = false;
154
- setTimeout(()=>{
158
+ setLeaveTimeout(()=>{
155
159
  setIsPopoverOpen(isOpen());
156
160
  // We want to call onOpenChange only if the popover is actually closing when leaving the popover
157
161
  if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverTrigger) {
@@ -160,7 +164,7 @@ const usePreview_unstable = (props)=>{
160
164
  });
161
165
  (0, _utils.removeOpenedByHoverPreview)(popoverSurfaceId);
162
166
  }
163
- }, getDelay(e.type));
167
+ }, getDelay(e.type, hideDelay));
164
168
  };
165
169
  popoverTrigger = /*#__PURE__*/ _react.cloneElement(popoverTrigger, {
166
170
  ...popoverTrigger.props,
@@ -190,7 +194,7 @@ const usePreview_unstable = (props)=>{
190
194
  const onDocumentKeyDown = (e)=>{
191
195
  const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;
192
196
  if (openedByHover && e.key === _keyboardkeys.Escape) {
193
- clearTimeout();
197
+ clearLeaveTimeout();
194
198
  // We set state back to its default if the Escape key has been pressed
195
199
  setDisableAutoFocus(true);
196
200
  closeCallback();
@@ -218,7 +222,7 @@ const usePreview_unstable = (props)=>{
218
222
  if (!preventDefaultClose.current) {
219
223
  // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.
220
224
  if (!data.open) {
221
- clearTimeout();
225
+ clearLeaveTimeout();
222
226
  closeCallback();
223
227
  (0, _utils.removeOpenedByHoverPreview)(popoverSurfaceId);
224
228
  }
@@ -242,6 +246,13 @@ const usePreview_unstable = (props)=>{
242
246
  children: resolvedChildren,
243
247
  onOpenChange: onPopoverOpenChange,
244
248
  open: open !== null && open !== void 0 ? open : isPopoverOpen,
249
+ positioning: typeof positioning === 'string' ? {
250
+ autoSize: true,
251
+ ...(0, _reactcomponents.resolvePositioningShorthand)(positioning)
252
+ } : {
253
+ autoSize: true,
254
+ ...positioning
255
+ },
245
256
  unstable_disableAutoFocus: unstable_disableAutoFocus !== null && unstable_disableAutoFocus !== void 0 ? unstable_disableAutoFocus : disableAutoFocus
246
257
  });
247
258
  return {
@@ -1 +1 @@
1
- {"version":3,"sources":["usePreview.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Enter, Escape } from '@fluentui/keyboard-keys';\nimport {\n mergeCallbacks,\n useFluent,\n useId,\n useIsomorphicLayoutEffect,\n usePopover_unstable,\n} from '@fluentui/react-components';\nimport { useTimeout } from '@fluentui/react-utilities';\nimport type { OnOpenChangeData, OpenPopoverEvents } from '@fluentui/react-components';\n\nimport { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';\nimport type { PreviewProps, PreviewState } from './Preview.types';\n\ntype PreviewInternalState = {\n openByClick: boolean;\n openByHoverOverTrigger: boolean;\n openByHoverOverPopover: boolean;\n openByKeyboard: boolean;\n};\n\nconst POPOVER_MOUSE_HIDE_DELAY = 500;\nconst POPOVER_KEYBOARD_HIDE_DELAY = 0;\n\nconst getDelay = (type: string): number => {\n if (type === 'focus' || type === 'blur') {\n return POPOVER_KEYBOARD_HIDE_DELAY;\n }\n\n return POPOVER_MOUSE_HIDE_DELAY;\n};\n\ntype TargetEvent<T> = React.MouseEvent<T> | React.FocusEvent<T>;\n\n/**\n * Create the state required to render Preview.\n *\n * The returned state can be modified with hooks such as usePreviewStyles_unstable,\n * before being passed to renderPreview_unstable.\n *\n * @param props - props from this instance of Preview\n * @param ref - reference to root HTMLElement of Preview\n */\nexport const usePreview_unstable = (props: PreviewProps): PreviewState => {\n const { onOpenChange, open, unstable_disableAutoFocus } = props;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n const { targetDocument } = useFluent();\n const [setTimeout, clearTimeout] = useTimeout();\n\n const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);\n\n const { current: previewInternalState } = React.useRef<PreviewInternalState>({\n openByClick: false,\n openByHoverOverTrigger: false,\n openByHoverOverPopover: false,\n openByKeyboard: false,\n });\n const triggerMousedOver = React.useRef(false);\n\n const isOpen = () => {\n return (\n previewInternalState.openByClick ||\n previewInternalState.openByHoverOverTrigger ||\n previewInternalState.openByHoverOverPopover ||\n previewInternalState.openByKeyboard\n );\n };\n\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n const preventDefaultClose = React.useRef(false);\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 popoverSurfaceId = useId('preview-surface', popoverSurface?.props.id);\n\n const closeCallback = () => {\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n setIsPopoverOpen(isOpen());\n };\n\n React.useEffect(() => {\n return () => {\n // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.\n removeOpenedByHoverPreview(popoverSurfaceId);\n };\n }, [popoverSurfaceId]);\n\n if (popoverSurface && popoverTrigger) {\n const handleTriggerTargetEnter = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = true;\n triggerMousedOver.current = true;\n\n // We want to disable auto focus only if the popover is being opened by hovering over the trigger\n if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {\n setDisableAutoFocus(true);\n onOpenChange?.(e, { open: true });\n closeAllOpenedByHoverPreviews(popoverSurfaceId);\n addOpenedByHoverPreview(popoverSurfaceId, closeCallback);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerTargetLeave = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = false;\n triggerMousedOver.current = false;\n\n setTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the trigger\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverPopover &&\n isPopoverOpen\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type));\n };\n\n const handleTriggerClick = (e: TargetEvent<HTMLSpanElement>): void => {\n // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.\n preventDefaultClose.current = true;\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.\n previewInternalState.openByClick = previewInternalState.openByKeyboard\n ? false\n : !previewInternalState.openByClick;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n\n // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.\n if (triggerMousedOver.current) {\n previewInternalState.openByClick = false;\n triggerMousedOver.current = false;\n }\n // If it was not moused over, we want to prevent the default click action from opening a link, so the preview can open first\n else {\n e.preventDefault();\n }\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByClick });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === Enter) {\n clearTimeout();\n\n // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.\n e.preventDefault();\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByClick is true, then the popover was already opened via click and we always want to close it.\n previewInternalState.openByKeyboard = previewInternalState.openByClick\n ? false\n : !previewInternalState.openByKeyboard;\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByKeyboard });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n }\n };\n\n const handlePopoverTargetEnter = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = true;\n setIsPopoverOpen(isOpen());\n };\n\n const handlePopoverTargetLeave = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = false;\n setTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the popover\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverTrigger\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type));\n };\n\n popoverTrigger = React.cloneElement(popoverTrigger, {\n ...popoverTrigger.props,\n children: React.cloneElement(popoverTrigger.props.children as React.ReactElement, {\n ...popoverTrigger.props.children.props,\n onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),\n onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),\n onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),\n onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),\n onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave),\n }),\n });\n\n popoverSurface = React.cloneElement(popoverSurface, {\n ...popoverSurface.props,\n 'aria-labelledby':\n popoverSurface.props['aria-labelledby'] ?? popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,\n id: popoverSurfaceId,\n onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),\n onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),\n onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter),\n });\n }\n\n // Hitting Escape key should close the popover if it was opened by hover.\n // This is necessary to attach to the document because focus is likely not within the trigger or popover.\n useIsomorphicLayoutEffect(() => {\n if (isPopoverOpen) {\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;\n\n if (openedByHover && e.key === Escape) {\n clearTimeout();\n\n // We set state back to its default if the Escape key has been pressed\n setDisableAutoFocus(true);\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n\n onOpenChange?.(e as unknown as OpenPopoverEvents, { open: false });\n\n e.stopPropagation();\n }\n };\n\n targetDocument?.addEventListener('keydown', onDocumentKeyDown, { capture: true });\n\n return () => {\n targetDocument?.removeEventListener('keydown', onDocumentKeyDown, { capture: true });\n };\n }\n }, [targetDocument, isPopoverOpen]);\n\n const onPopoverOpenChange = (e: OpenPopoverEvents, data: OnOpenChangeData): void => {\n if (!preventDefaultClose.current) {\n // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.\n if (!data.open) {\n clearTimeout();\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n onOpenChange?.(e, data);\n }\n\n preventDefaultClose.current = false;\n };\n\n let resolvedChildren = children as [JSX.Element, JSX.Element] | JSX.Element;\n if (popoverSurface) {\n if (popoverTrigger) {\n resolvedChildren = [popoverTrigger, popoverSurface];\n } else {\n resolvedChildren = popoverSurface;\n }\n }\n\n const popoverState = usePopover_unstable({\n ...props,\n children: resolvedChildren,\n onOpenChange: onPopoverOpenChange,\n open: open ?? isPopoverOpen,\n unstable_disableAutoFocus: unstable_disableAutoFocus ?? disableAutoFocus,\n });\n\n return {\n ...popoverState,\n isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard,\n };\n};\n"],"names":["onOpenChange","POPOVER_MOUSE_HIDE_DELAY","POPOVER_KEYBOARD_HIDE_DELAY","getDelay","type","unstable_disableAutoFocus","targetDocument","open","setDisableAutoFocus","props","openByClick","Children","toArray","children","openByHoverOverTrigger","openByHoverOverPopover","openByKeyboard","setTimeout","clearTimeout","useTimeout","disableAutoFocus","triggerMousedOver","React","useState","previewInternalState","useRef","isPopoverOpen","preventDefaultClose","undefined","popoverSurface","popoverTrigger","setIsPopoverOpen","useId","closeCallback","isOpen","popoverSurfaceId","id","removeOpenedByHoverPreview","useEffect","handleTriggerTargetEnter","e","closeAllOpenedByHoverPreviews","handleTriggerTargetLeave","current","handleTriggerClick","tmpOpenByHoverOverTrigger","preventDefault","Enter","handlePopoverTargetLeave","cloneElement","onClick","onMouseEnter","mergeCallbacks","onMouseLeave","onKeyDown","handleTriggerKeyDown","_popoverSurface_props_arialabelledby","useIsomorphicLayoutEffect","handlePopoverTargetEnter","onDocumentKeyDown","key","Escape","addEventListener","capture","resolvedChildren","popoverState","usePopover_unstable","isPreviewLocked"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["usePreview.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { Enter, Escape } from '@fluentui/keyboard-keys';\nimport {\n mergeCallbacks,\n resolvePositioningShorthand,\n useFluent,\n useId,\n useIsomorphicLayoutEffect,\n usePopover_unstable,\n} from '@fluentui/react-components';\nimport { useTimeout } from '@fluentui/react-utilities';\nimport type { OnOpenChangeData, OpenPopoverEvents } from '@fluentui/react-components';\n\nimport { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';\nimport type { PreviewProps, PreviewState } from './Preview.types';\n\ntype PreviewInternalState = {\n openByClick: boolean;\n openByHoverOverTrigger: boolean;\n openByHoverOverPopover: boolean;\n openByKeyboard: boolean;\n};\n\nconst POPOVER_MOUSE_DELAY = 250;\nconst POPOVER_KEYBOARD_HIDE_DELAY = 0;\n\nconst getDelay = (type: string, popoverMouseHideDelay: number): number => {\n if (type === 'focus' || type === 'blur') {\n return POPOVER_KEYBOARD_HIDE_DELAY;\n }\n\n return popoverMouseHideDelay;\n};\n\ntype TargetEvent<T> = React.MouseEvent<T> | React.FocusEvent<T>;\n\n/**\n * Create the state required to render Preview.\n *\n * The returned state can be modified with hooks such as usePreviewStyles_unstable,\n * before being passed to renderPreview_unstable.\n *\n * @param props - props from this instance of Preview\n * @param ref - reference to root HTMLElement of Preview\n */\nexport const usePreview_unstable = (props: PreviewProps): PreviewState => {\n const {\n hideDelay = POPOVER_MOUSE_DELAY,\n onOpenChange,\n open,\n positioning,\n showDelay = POPOVER_MOUSE_DELAY,\n unstable_disableAutoFocus,\n } = props;\n\n const children = React.Children.toArray(props.children) as React.ReactElement[];\n\n const { targetDocument } = useFluent();\n const [setEnterTimeout, clearEnterTimeout] = useTimeout();\n const [setLeaveTimeout, clearLeaveTimeout] = useTimeout();\n\n const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);\n\n const { current: previewInternalState } = React.useRef<PreviewInternalState>({\n openByClick: false,\n openByHoverOverTrigger: false,\n openByHoverOverPopover: false,\n openByKeyboard: false,\n });\n const triggerMousedOver = React.useRef(false);\n\n const isOpen = () => {\n return (\n previewInternalState.openByClick ||\n previewInternalState.openByHoverOverTrigger ||\n previewInternalState.openByHoverOverPopover ||\n previewInternalState.openByKeyboard\n );\n };\n\n const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);\n const preventDefaultClose = React.useRef(false);\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 popoverSurfaceId = useId('preview-surface', popoverSurface?.props.id);\n\n const closeCallback = () => {\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n setIsPopoverOpen(isOpen());\n clearEnterTimeout();\n };\n\n React.useEffect(() => {\n return () => {\n // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.\n removeOpenedByHoverPreview(popoverSurfaceId);\n };\n }, [popoverSurfaceId]);\n\n if (popoverSurface && popoverTrigger) {\n const handleTriggerTargetEnter = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = true;\n triggerMousedOver.current = true;\n\n // We want to disable auto focus only if the popover is being opened by hovering over the trigger\n if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {\n setDisableAutoFocus(true);\n onOpenChange?.(e, { open: true });\n closeAllOpenedByHoverPreviews(popoverSurfaceId);\n addOpenedByHoverPreview(popoverSurfaceId, closeCallback);\n }\n\n setEnterTimeout(() => {\n setIsPopoverOpen(isOpen());\n }, showDelay);\n };\n\n const handleTriggerTargetLeave = (e: TargetEvent<HTMLSpanElement>): void => {\n previewInternalState.openByHoverOverTrigger = false;\n triggerMousedOver.current = false;\n\n setLeaveTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the trigger\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverPopover &&\n isPopoverOpen\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type, hideDelay));\n };\n\n const handleTriggerClick = (e: TargetEvent<HTMLSpanElement>): void => {\n // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.\n preventDefaultClose.current = true;\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.\n previewInternalState.openByClick = previewInternalState.openByKeyboard\n ? false\n : !previewInternalState.openByClick;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n previewInternalState.openByKeyboard = false;\n\n // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.\n if (triggerMousedOver.current) {\n previewInternalState.openByClick = false;\n triggerMousedOver.current = false;\n }\n // If it was not moused over, we want to prevent the default click action from opening a link, so the preview can open first\n else {\n e.preventDefault();\n }\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByClick });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n };\n\n const handleTriggerKeyDown = (e: React.KeyboardEvent<HTMLSpanElement>): void => {\n if (e.key === Enter) {\n clearLeaveTimeout();\n\n // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.\n e.preventDefault();\n\n // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.\n setDisableAutoFocus(false);\n\n const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;\n\n // If openByClick is true, then the popover was already opened via click and we always want to close it.\n previewInternalState.openByKeyboard = previewInternalState.openByClick\n ? false\n : !previewInternalState.openByKeyboard;\n previewInternalState.openByClick = false;\n previewInternalState.openByHoverOverTrigger = false;\n previewInternalState.openByHoverOverPopover = false;\n\n if (!tmpOpenByHoverOverTrigger) {\n onOpenChange?.(e, { open: previewInternalState.openByKeyboard });\n }\n\n if (!isOpen()) {\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n setIsPopoverOpen(isOpen());\n }\n };\n\n const handlePopoverTargetEnter = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = true;\n setIsPopoverOpen(isOpen());\n };\n\n const handlePopoverTargetLeave = (e: TargetEvent<HTMLDivElement>): void => {\n previewInternalState.openByHoverOverPopover = false;\n setLeaveTimeout(() => {\n setIsPopoverOpen(isOpen());\n\n // We want to call onOpenChange only if the popover is actually closing when leaving the popover\n if (\n !previewInternalState.openByClick &&\n !previewInternalState.openByKeyboard &&\n !previewInternalState.openByHoverOverTrigger\n ) {\n onOpenChange?.(e, { open: false });\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n }, getDelay(e.type, hideDelay));\n };\n\n popoverTrigger = React.cloneElement(popoverTrigger, {\n ...popoverTrigger.props,\n children: React.cloneElement(popoverTrigger.props.children as React.ReactElement, {\n ...popoverTrigger.props.children.props,\n onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),\n onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),\n onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),\n onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),\n onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave),\n }),\n });\n\n popoverSurface = React.cloneElement(popoverSurface, {\n ...popoverSurface.props,\n 'aria-labelledby':\n popoverSurface.props['aria-labelledby'] ?? popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,\n id: popoverSurfaceId,\n onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),\n onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),\n onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter),\n });\n }\n\n // Hitting Escape key should close the popover if it was opened by hover.\n // This is necessary to attach to the document because focus is likely not within the trigger or popover.\n useIsomorphicLayoutEffect(() => {\n if (isPopoverOpen) {\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;\n\n if (openedByHover && e.key === Escape) {\n clearLeaveTimeout();\n\n // We set state back to its default if the Escape key has been pressed\n setDisableAutoFocus(true);\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n\n onOpenChange?.(e as unknown as OpenPopoverEvents, { open: false });\n\n e.stopPropagation();\n }\n };\n\n targetDocument?.addEventListener('keydown', onDocumentKeyDown, { capture: true });\n\n return () => {\n targetDocument?.removeEventListener('keydown', onDocumentKeyDown, { capture: true });\n };\n }\n }, [targetDocument, isPopoverOpen]);\n\n const onPopoverOpenChange = (e: OpenPopoverEvents, data: OnOpenChangeData): void => {\n if (!preventDefaultClose.current) {\n // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.\n if (!data.open) {\n clearLeaveTimeout();\n closeCallback();\n removeOpenedByHoverPreview(popoverSurfaceId);\n }\n\n onOpenChange?.(e, data);\n }\n\n preventDefaultClose.current = false;\n };\n\n let resolvedChildren = children as [JSX.Element, JSX.Element] | JSX.Element;\n if (popoverSurface) {\n if (popoverTrigger) {\n resolvedChildren = [popoverTrigger, popoverSurface];\n } else {\n resolvedChildren = popoverSurface;\n }\n }\n\n const popoverState = usePopover_unstable({\n ...props,\n children: resolvedChildren,\n onOpenChange: onPopoverOpenChange,\n open: open ?? isPopoverOpen,\n positioning:\n typeof positioning === 'string'\n ? { autoSize: true, ...resolvePositioningShorthand(positioning) }\n : { autoSize: true, ...positioning },\n unstable_disableAutoFocus: unstable_disableAutoFocus ?? disableAutoFocus,\n });\n\n return {\n ...popoverState,\n isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard,\n };\n};\n"],"names":["hideDelay","POPOVER_MOUSE_DELAY","POPOVER_KEYBOARD_HIDE_DELAY","getDelay","type","popoverMouseHideDelay","targetDocument","useFluent","onOpenChange","setEnterTimeout","open","positioning","disableAutoFocus","showDelay","current","previewInternalState","openByHoverOverPopover","toArray","props","children","openByKeyboard","triggerMousedOver","clearEnterTimeout","useTimeout","setLeaveTimeout","openByClick","setDisableAutoFocus","React","useState","preventDefaultClose","popoverTrigger","popoverSurface","openByHoverOverTrigger","useRef","isOpen","popoverSurfaceId","useId","setIsPopoverOpen","useEffect","length","removeOpenedByHoverPreview","closeCallback","handleTriggerTargetEnter","closeAllOpenedByHoverPreviews","addOpenedByHoverPreview","handleTriggerTargetLeave","e","handleTriggerClick","isPopoverOpen","tmpOpenByHoverOverTrigger","clearLeaveTimeout","handlePopoverTargetEnter","handlePopoverTargetLeave","cloneElement","onBlur","mergeCallbacks","onMouseLeave","onMouseEnter","onFocus","_popoverSurface_props_arialabelledby","useIsomorphicLayoutEffect","undefined","openedByHover","Escape","stopPropagation","key","onPopoverOpenChange","removeEventListener","onDocumentKeyDown","data","resolvedChildren","popoverState","autoSize","resolvePositioningShorthand","unstable_disableAutoFocus"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui-copilot/react-preview",
3
- "version": "0.5.2",
3
+ "version": "0.5.4",
4
4
  "description": "Preview components.",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",