@fluentui-copilot/react-preview 0.0.0-nightly-20250708-0404-c05494d1.1 → 0.0.0-nightly-20250708-1433-52f2b6b1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.json +3 -3
  2. package/CHANGELOG.md +4 -4
  3. package/lib/Preview.js +0 -1
  4. package/lib/PreviewContent.js +0 -1
  5. package/lib/PreviewHeader.js +0 -1
  6. package/lib/PreviewMetadata.js +0 -1
  7. package/lib/PreviewSurface.js +0 -1
  8. package/lib/PreviewTrigger.js +0 -1
  9. package/lib/components/Preview/Preview.js +3 -4
  10. package/lib/components/Preview/Preview.types.js +1 -2
  11. package/lib/components/Preview/index.js +0 -1
  12. package/lib/components/Preview/renderPreview.js +22 -41
  13. package/lib/components/Preview/usePreview.js +234 -239
  14. package/lib/components/PreviewContent/PreviewContent.js +4 -5
  15. package/lib/components/PreviewContent/PreviewContent.types.js +1 -2
  16. package/lib/components/PreviewContent/index.js +0 -1
  17. package/lib/components/PreviewContent/renderPreviewContent.js +4 -6
  18. package/lib/components/PreviewContent/usePreviewContent.js +12 -14
  19. package/lib/components/PreviewContent/usePreviewContentStyles.styles.raw.js +26 -0
  20. package/lib/components/PreviewContent/usePreviewContentStyles.styles.raw.js.map +1 -0
  21. package/lib/components/PreviewHeader/PreviewHeader.js +4 -5
  22. package/lib/components/PreviewHeader/PreviewHeader.types.js +1 -2
  23. package/lib/components/PreviewHeader/index.js +0 -1
  24. package/lib/components/PreviewHeader/renderPreviewHeader.js +11 -8
  25. package/lib/components/PreviewHeader/usePreviewHeader.js +48 -56
  26. package/lib/components/PreviewHeader/usePreviewHeaderStyles.styles.raw.js +110 -0
  27. package/lib/components/PreviewHeader/usePreviewHeaderStyles.styles.raw.js.map +1 -0
  28. package/lib/components/PreviewMetadata/PreviewMetadata.js +4 -5
  29. package/lib/components/PreviewMetadata/PreviewMetadata.types.js +1 -2
  30. package/lib/components/PreviewMetadata/index.js +0 -1
  31. package/lib/components/PreviewMetadata/renderPreviewMetadata.js +12 -8
  32. package/lib/components/PreviewMetadata/usePreviewMetadata.js +29 -36
  33. package/lib/components/PreviewMetadata/usePreviewMetadataStyles.styles.raw.js +56 -0
  34. package/lib/components/PreviewMetadata/usePreviewMetadataStyles.styles.raw.js.map +1 -0
  35. package/lib/components/PreviewSurface/PreviewSurface.js +4 -5
  36. package/lib/components/PreviewSurface/PreviewSurface.types.js +1 -2
  37. package/lib/components/PreviewSurface/index.js +0 -1
  38. package/lib/components/PreviewSurface/renderPreviewSurface.js +2 -4
  39. package/lib/components/PreviewSurface/usePreviewSurface.js +6 -8
  40. package/lib/components/PreviewSurface/usePreviewSurfaceStyles.styles.raw.js +29 -0
  41. package/lib/components/PreviewSurface/usePreviewSurfaceStyles.styles.raw.js.map +1 -0
  42. package/lib/components/PreviewTrigger/PreviewTrigger.js +3 -4
  43. package/lib/components/PreviewTrigger/PreviewTrigger.types.js +1 -2
  44. package/lib/components/PreviewTrigger/index.js +0 -1
  45. package/lib/components/PreviewTrigger/renderPreviewTrigger.js +2 -4
  46. package/lib/components/PreviewTrigger/usePreviewTrigger.js +2 -4
  47. package/lib/index.js +0 -1
  48. package/lib/previewContext.js +19 -20
  49. package/lib/utils/index.js +0 -1
  50. package/lib/utils/openedByHoverPreviewManager.js +14 -15
  51. package/lib-commonjs/Preview.js +0 -1
  52. package/lib-commonjs/PreviewContent.js +0 -1
  53. package/lib-commonjs/PreviewHeader.js +0 -1
  54. package/lib-commonjs/PreviewMetadata.js +0 -1
  55. package/lib-commonjs/PreviewSurface.js +0 -1
  56. package/lib-commonjs/PreviewTrigger.js +0 -1
  57. package/lib-commonjs/components/Preview/Preview.js +1 -1
  58. package/lib-commonjs/components/Preview/Preview.js.map +1 -1
  59. package/lib-commonjs/components/Preview/Preview.types.js +0 -1
  60. package/lib-commonjs/components/Preview/index.js +0 -1
  61. package/lib-commonjs/components/Preview/renderPreview.js +1 -1
  62. package/lib-commonjs/components/Preview/renderPreview.js.map +1 -1
  63. package/lib-commonjs/components/Preview/usePreview.js +1 -1
  64. package/lib-commonjs/components/Preview/usePreview.js.map +1 -1
  65. package/lib-commonjs/components/PreviewContent/PreviewContent.js +1 -1
  66. package/lib-commonjs/components/PreviewContent/PreviewContent.js.map +1 -1
  67. package/lib-commonjs/components/PreviewContent/PreviewContent.types.js +0 -1
  68. package/lib-commonjs/components/PreviewContent/index.js +0 -1
  69. package/lib-commonjs/components/PreviewContent/renderPreviewContent.js +1 -1
  70. package/lib-commonjs/components/PreviewContent/renderPreviewContent.js.map +1 -1
  71. package/lib-commonjs/components/PreviewContent/usePreviewContent.js +1 -1
  72. package/lib-commonjs/components/PreviewContent/usePreviewContent.js.map +1 -1
  73. package/lib-commonjs/components/PreviewContent/usePreviewContentStyles.styles.raw.js +42 -0
  74. package/lib-commonjs/components/PreviewContent/usePreviewContentStyles.styles.raw.js.map +1 -0
  75. package/lib-commonjs/components/PreviewHeader/PreviewHeader.js +1 -1
  76. package/lib-commonjs/components/PreviewHeader/PreviewHeader.js.map +1 -1
  77. package/lib-commonjs/components/PreviewHeader/PreviewHeader.types.js +0 -1
  78. package/lib-commonjs/components/PreviewHeader/index.js +0 -1
  79. package/lib-commonjs/components/PreviewHeader/renderPreviewHeader.js +1 -1
  80. package/lib-commonjs/components/PreviewHeader/renderPreviewHeader.js.map +1 -1
  81. package/lib-commonjs/components/PreviewHeader/usePreviewHeader.js +1 -1
  82. package/lib-commonjs/components/PreviewHeader/usePreviewHeader.js.map +1 -1
  83. package/lib-commonjs/components/PreviewHeader/usePreviewHeaderStyles.styles.raw.js +129 -0
  84. package/lib-commonjs/components/PreviewHeader/usePreviewHeaderStyles.styles.raw.js.map +1 -0
  85. package/lib-commonjs/components/PreviewMetadata/PreviewMetadata.js +1 -1
  86. package/lib-commonjs/components/PreviewMetadata/PreviewMetadata.js.map +1 -1
  87. package/lib-commonjs/components/PreviewMetadata/PreviewMetadata.types.js +0 -1
  88. package/lib-commonjs/components/PreviewMetadata/index.js +0 -1
  89. package/lib-commonjs/components/PreviewMetadata/renderPreviewMetadata.js +1 -1
  90. package/lib-commonjs/components/PreviewMetadata/renderPreviewMetadata.js.map +1 -1
  91. package/lib-commonjs/components/PreviewMetadata/usePreviewMetadata.js +1 -1
  92. package/lib-commonjs/components/PreviewMetadata/usePreviewMetadata.js.map +1 -1
  93. package/lib-commonjs/components/PreviewMetadata/usePreviewMetadataStyles.styles.raw.js +72 -0
  94. package/lib-commonjs/components/PreviewMetadata/usePreviewMetadataStyles.styles.raw.js.map +1 -0
  95. package/lib-commonjs/components/PreviewSurface/PreviewSurface.js +1 -1
  96. package/lib-commonjs/components/PreviewSurface/PreviewSurface.js.map +1 -1
  97. package/lib-commonjs/components/PreviewSurface/PreviewSurface.types.js +0 -1
  98. package/lib-commonjs/components/PreviewSurface/index.js +0 -1
  99. package/lib-commonjs/components/PreviewSurface/renderPreviewSurface.js +1 -1
  100. package/lib-commonjs/components/PreviewSurface/renderPreviewSurface.js.map +1 -1
  101. package/lib-commonjs/components/PreviewSurface/usePreviewSurface.js +1 -1
  102. package/lib-commonjs/components/PreviewSurface/usePreviewSurface.js.map +1 -1
  103. package/lib-commonjs/components/PreviewSurface/usePreviewSurfaceStyles.styles.raw.js +45 -0
  104. package/lib-commonjs/components/PreviewSurface/usePreviewSurfaceStyles.styles.raw.js.map +1 -0
  105. package/lib-commonjs/components/PreviewTrigger/PreviewTrigger.js +1 -1
  106. package/lib-commonjs/components/PreviewTrigger/PreviewTrigger.js.map +1 -1
  107. package/lib-commonjs/components/PreviewTrigger/PreviewTrigger.types.js +0 -1
  108. package/lib-commonjs/components/PreviewTrigger/index.js +0 -1
  109. package/lib-commonjs/components/PreviewTrigger/renderPreviewTrigger.js +1 -1
  110. package/lib-commonjs/components/PreviewTrigger/renderPreviewTrigger.js.map +1 -1
  111. package/lib-commonjs/components/PreviewTrigger/usePreviewTrigger.js +1 -1
  112. package/lib-commonjs/components/PreviewTrigger/usePreviewTrigger.js.map +1 -1
  113. package/lib-commonjs/index.js +0 -1
  114. package/lib-commonjs/previewContext.js +1 -1
  115. package/lib-commonjs/previewContext.js.map +1 -1
  116. package/lib-commonjs/utils/index.js +0 -1
  117. package/lib-commonjs/utils/openedByHoverPreviewManager.js +1 -1
  118. package/lib-commonjs/utils/openedByHoverPreviewManager.js.map +1 -1
  119. package/package.json +3 -3
package/CHANGELOG.json CHANGED
@@ -2,9 +2,9 @@
2
2
  "name": "@fluentui-copilot/react-preview",
3
3
  "entries": [
4
4
  {
5
- "date": "Tue, 08 Jul 2025 04:12:16 GMT",
6
- "tag": "@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-0404-c05494d1.1",
7
- "version": "0.0.0-nightly-20250708-0404-c05494d1.1",
5
+ "date": "Tue, 08 Jul 2025 14:40:39 GMT",
6
+ "tag": "@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-1433-52f2b6b1.1",
7
+ "version": "0.0.0-nightly-20250708-1433-52f2b6b1.1",
8
8
  "comments": {
9
9
  "prerelease": [
10
10
  {
package/CHANGELOG.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # Change Log - @fluentui-copilot/react-preview
2
2
 
3
- This log was last generated on Tue, 08 Jul 2025 04:12:16 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 08 Jul 2025 14:40:39 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
- ## [0.0.0-nightly-20250708-0404-c05494d1.1](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-0404-c05494d1.1)
7
+ ## [0.0.0-nightly-20250708-1433-52f2b6b1.1](https://github.com/microsoft/fluentai/tree/@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-1433-52f2b6b1.1)
8
8
 
9
- Tue, 08 Jul 2025 04:12:16 GMT
10
- [Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/react-preview_v0.8.2..@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-0404-c05494d1.1)
9
+ Tue, 08 Jul 2025 14:40:39 GMT
10
+ [Compare changes](https://github.com/microsoft/fluentai/compare/@fluentui-copilot/react-preview_v0.8.2..@fluentui-copilot/react-preview_v0.0.0-nightly-20250708-1433-52f2b6b1.1)
11
11
 
12
12
  ### Changes
13
13
 
package/lib/Preview.js CHANGED
@@ -1,2 +1 @@
1
1
  export { Preview, renderPreview_unstable, usePreview_unstable } from './components/Preview/index';
2
- //# sourceMappingURL=Preview.js.map
@@ -1,2 +1 @@
1
1
  export { PreviewContent, previewContentClassNames, renderPreviewContent_unstable, usePreviewContentStyles_unstable, usePreviewContent_unstable } from './components/PreviewContent/index';
2
- //# sourceMappingURL=PreviewContent.js.map
@@ -1,2 +1 @@
1
1
  export { PreviewHeader, previewHeaderClassNames, previewHeaderExtraClassNames, renderPreviewHeader_unstable, usePreviewHeaderStyles_unstable, usePreviewHeader_unstable } from './components/PreviewHeader/index';
2
- //# sourceMappingURL=PreviewHeader.js.map
@@ -1,2 +1 @@
1
1
  export { PreviewMetadata, previewMetadataClassNames, renderPreviewMetadata_unstable, usePreviewMetadataStyles_unstable, usePreviewMetadata_unstable } from './components/PreviewMetadata/index';
2
- //# sourceMappingURL=PreviewMetadata.js.map
@@ -1,2 +1 @@
1
1
  export { PreviewSurface, previewSurfaceClassNames, renderPreviewSurface_unstable, usePreviewSurfaceStyles_unstable, usePreviewSurface_unstable } from './components/PreviewSurface/index';
2
- //# sourceMappingURL=PreviewSurface.js.map
@@ -1,2 +1 @@
1
1
  export { PreviewTrigger, renderPreviewTrigger_unstable, usePreviewTrigger_unstable } from './components/PreviewTrigger/index';
2
- //# sourceMappingURL=PreviewTrigger.js.map
@@ -1,8 +1,7 @@
1
1
  import { usePreview_unstable } from './usePreview';
2
2
  import { renderPreview_unstable } from './renderPreview';
3
- export const Preview = props => {
4
- const state = usePreview_unstable(props);
5
- return renderPreview_unstable(state);
3
+ export const Preview = (props)=>{
4
+ const state = usePreview_unstable(props);
5
+ return renderPreview_unstable(state);
6
6
  };
7
7
  Preview.displayName = 'Preview';
8
- //# sourceMappingURL=Preview.js.map
@@ -1,4 +1,3 @@
1
1
  /**
2
2
  * State used in rendering Preview
3
- */export {};
4
- //# sourceMappingURL=Preview.types.js.map
3
+ */ export { };
@@ -1,4 +1,3 @@
1
1
  export { Preview } from './Preview';
2
2
  export { renderPreview_unstable } from './renderPreview';
3
3
  export { usePreview_unstable } from './usePreview';
4
- //# sourceMappingURL=index.js.map
@@ -3,45 +3,26 @@ import { renderPopover_unstable } from '@fluentui/react-components';
3
3
  import { PreviewContextProvider } from '../../previewContext';
4
4
  /**
5
5
  * Render the final JSX of Preview
6
- */
7
- export const renderPreview_unstable = state => {
8
- const {
9
- appearance,
10
- arrowRef,
11
- contentRef,
12
- inertTrapFocus,
13
- inline,
14
- isPreviewLocked,
15
- mountNode,
16
- open,
17
- openOnContext,
18
- openOnHover,
19
- setOpen,
20
- size,
21
- toggleOpen,
22
- trapFocus,
23
- triggerRef,
24
- withArrow
25
- } = state;
26
- return /*#__PURE__*/React.createElement(PreviewContextProvider, {
27
- value: {
28
- appearance,
29
- arrowRef,
30
- contentRef,
31
- inertTrapFocus,
32
- inline,
33
- isPreviewLocked,
34
- mountNode,
35
- open,
36
- openOnContext,
37
- openOnHover,
38
- setOpen,
39
- size,
40
- toggleOpen,
41
- trapFocus,
42
- triggerRef,
43
- withArrow
44
- }
45
- }, renderPopover_unstable(state));
6
+ */ export const renderPreview_unstable = (state)=>{
7
+ const { appearance, arrowRef, contentRef, inertTrapFocus, inline, isPreviewLocked, mountNode, open, openOnContext, openOnHover, setOpen, size, toggleOpen, trapFocus, triggerRef, withArrow } = state;
8
+ return /*#__PURE__*/ React.createElement(PreviewContextProvider, {
9
+ value: {
10
+ appearance,
11
+ arrowRef,
12
+ contentRef,
13
+ inertTrapFocus,
14
+ inline,
15
+ isPreviewLocked,
16
+ mountNode,
17
+ open,
18
+ openOnContext,
19
+ openOnHover,
20
+ setOpen,
21
+ size,
22
+ toggleOpen,
23
+ trapFocus,
24
+ triggerRef,
25
+ withArrow
26
+ }
27
+ }, renderPopover_unstable(state));
46
28
  };
47
- //# sourceMappingURL=renderPreview.js.map
@@ -5,11 +5,11 @@ import { useTimeout } from '@fluentui/react-utilities';
5
5
  import { addOpenedByHoverPreview, closeAllOpenedByHoverPreviews, removeOpenedByHoverPreview } from '../../utils';
6
6
  const POPOVER_MOUSE_DELAY = 250;
7
7
  const POPOVER_KEYBOARD_HIDE_DELAY = 0;
8
- const getDelay = (type, popoverMouseHideDelay) => {
9
- if (type === 'focus' || type === 'blur') {
10
- return POPOVER_KEYBOARD_HIDE_DELAY;
11
- }
12
- return popoverMouseHideDelay;
8
+ const getDelay = (type, popoverMouseHideDelay)=>{
9
+ if (type === 'focus' || type === 'blur') {
10
+ return POPOVER_KEYBOARD_HIDE_DELAY;
11
+ }
12
+ return popoverMouseHideDelay;
13
13
  };
14
14
  /**
15
15
  * Create the state required to render Preview.
@@ -19,248 +19,243 @@ const getDelay = (type, popoverMouseHideDelay) => {
19
19
  *
20
20
  * @param props - props from this instance of Preview
21
21
  * @param ref - reference to root HTMLElement of Preview
22
- */
23
- export const usePreview_unstable = props => {
24
- const {
25
- hideDelay = POPOVER_MOUSE_DELAY,
26
- onOpenChange,
27
- open,
28
- positioning,
29
- showDelay = POPOVER_MOUSE_DELAY,
30
- unstable_disableAutoFocus
31
- } = props;
32
- const children = React.Children.toArray(props.children);
33
- const {
34
- targetDocument
35
- } = useFluent();
36
- const [setEnterTimeout, clearEnterTimeout] = useTimeout();
37
- const [setLeaveTimeout, clearLeaveTimeout] = useTimeout();
38
- const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);
39
- const {
40
- current: previewInternalState
41
- } = React.useRef({
42
- openByClick: false,
43
- openByHoverOverTrigger: false,
44
- openByHoverOverPopover: false,
45
- openByKeyboard: false
46
- });
47
- const triggerMousedOver = React.useRef(false);
48
- const isOpen = () => {
49
- return previewInternalState.openByClick || previewInternalState.openByHoverOverTrigger || previewInternalState.openByHoverOverPopover || previewInternalState.openByKeyboard;
50
- };
51
- const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
52
- const preventDefaultClose = React.useRef(false);
53
- let popoverTrigger = undefined;
54
- let popoverSurface = undefined;
55
- if (children.length === 2) {
56
- popoverTrigger = children[0];
57
- popoverSurface = children[1];
58
- } else if (children.length === 1) {
59
- popoverSurface = children[0];
60
- }
61
- const popoverSurfaceId = useId('preview-surface', popoverSurface === null || popoverSurface === void 0 ? void 0 : popoverSurface.props.id);
62
- const closeCallback = () => {
63
- previewInternalState.openByClick = false;
64
- previewInternalState.openByHoverOverTrigger = false;
65
- previewInternalState.openByHoverOverPopover = false;
66
- previewInternalState.openByKeyboard = false;
67
- setIsPopoverOpen(isOpen());
68
- clearEnterTimeout();
69
- };
70
- React.useEffect(() => {
71
- return () => {
72
- // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.
73
- removeOpenedByHoverPreview(popoverSurfaceId);
74
- };
75
- }, [popoverSurfaceId]);
76
- if (popoverSurface && popoverTrigger) {
77
- const handleTriggerTargetEnter = e => {
78
- previewInternalState.openByHoverOverTrigger = true;
79
- triggerMousedOver.current = true;
80
- // We want to disable auto focus only if the popover is being opened by hovering over the trigger
81
- if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {
82
- setDisableAutoFocus(true);
83
- closeAllOpenedByHoverPreviews(popoverSurfaceId);
84
- }
85
- setEnterTimeout(() => {
86
- if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen && isOpen()) {
87
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
88
- open: true
89
- });
90
- addOpenedByHoverPreview(popoverSurfaceId, closeCallback);
91
- }
92
- setIsPopoverOpen(isOpen());
93
- }, showDelay);
94
- };
95
- const handleTriggerTargetLeave = e => {
96
- previewInternalState.openByHoverOverTrigger = false;
97
- triggerMousedOver.current = false;
98
- setLeaveTimeout(() => {
99
- setIsPopoverOpen(isOpen());
100
- // We want to call onOpenChange only if the popover is actually closing when leaving the trigger
101
- if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverPopover && isPopoverOpen) {
102
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
103
- open: false
104
- });
105
- removeOpenedByHoverPreview(popoverSurfaceId);
106
- }
107
- }, getDelay(e.type, hideDelay));
108
- };
109
- const handleTriggerClick = e => {
110
- // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.
111
- preventDefaultClose.current = true;
112
- // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.
113
- setDisableAutoFocus(false);
114
- const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;
115
- // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.
116
- previewInternalState.openByClick = previewInternalState.openByKeyboard ? false : !previewInternalState.openByClick;
117
- previewInternalState.openByHoverOverTrigger = false;
118
- previewInternalState.openByHoverOverPopover = false;
119
- previewInternalState.openByKeyboard = false;
120
- // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.
121
- if (triggerMousedOver.current) {
122
- previewInternalState.openByClick = false;
123
- triggerMousedOver.current = false;
124
- } else {
125
- e.preventDefault();
126
- }
127
- if (!tmpOpenByHoverOverTrigger) {
128
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
129
- open: previewInternalState.openByClick
130
- });
131
- }
132
- if (!isOpen()) {
133
- removeOpenedByHoverPreview(popoverSurfaceId);
134
- }
135
- setIsPopoverOpen(isOpen());
22
+ */ export const usePreview_unstable = (props)=>{
23
+ const { hideDelay = POPOVER_MOUSE_DELAY, onOpenChange, open, positioning, showDelay = POPOVER_MOUSE_DELAY, unstable_disableAutoFocus } = props;
24
+ const children = React.Children.toArray(props.children);
25
+ const { targetDocument } = useFluent();
26
+ const [setEnterTimeout, clearEnterTimeout] = useTimeout();
27
+ const [setLeaveTimeout, clearLeaveTimeout] = useTimeout();
28
+ const [disableAutoFocus, setDisableAutoFocus] = React.useState(true);
29
+ const { current: previewInternalState } = React.useRef({
30
+ openByClick: false,
31
+ openByHoverOverTrigger: false,
32
+ openByHoverOverPopover: false,
33
+ openByKeyboard: false
34
+ });
35
+ const triggerMousedOver = React.useRef(false);
36
+ const isOpen = ()=>{
37
+ return previewInternalState.openByClick || previewInternalState.openByHoverOverTrigger || previewInternalState.openByHoverOverPopover || previewInternalState.openByKeyboard;
136
38
  };
137
- const handleTriggerKeyDown = e => {
138
- if (e.key === Enter) {
139
- clearLeaveTimeout();
140
- // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.
141
- e.preventDefault();
142
- // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.
143
- setDisableAutoFocus(false);
144
- const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;
145
- // If openByClick is true, then the popover was already opened via click and we always want to close it.
146
- previewInternalState.openByKeyboard = previewInternalState.openByClick ? false : !previewInternalState.openByKeyboard;
39
+ const [isPopoverOpen, setIsPopoverOpen] = React.useState(false);
40
+ const preventDefaultClose = React.useRef(false);
41
+ let popoverTrigger = undefined;
42
+ let popoverSurface = undefined;
43
+ if (children.length === 2) {
44
+ popoverTrigger = children[0];
45
+ popoverSurface = children[1];
46
+ } else if (children.length === 1) {
47
+ popoverSurface = children[0];
48
+ }
49
+ const popoverSurfaceId = useId('preview-surface', popoverSurface === null || popoverSurface === void 0 ? void 0 : popoverSurface.props.id);
50
+ const closeCallback = ()=>{
147
51
  previewInternalState.openByClick = false;
148
52
  previewInternalState.openByHoverOverTrigger = false;
149
53
  previewInternalState.openByHoverOverPopover = false;
150
- if (!tmpOpenByHoverOverTrigger) {
151
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
152
- open: previewInternalState.openByKeyboard
153
- });
154
- }
155
- if (!isOpen()) {
156
- removeOpenedByHoverPreview(popoverSurfaceId);
157
- }
54
+ previewInternalState.openByKeyboard = false;
158
55
  setIsPopoverOpen(isOpen());
159
- }
56
+ clearEnterTimeout();
160
57
  };
161
- const handlePopoverTargetEnter = e => {
162
- previewInternalState.openByHoverOverPopover = true;
163
- setIsPopoverOpen(isOpen());
164
- };
165
- const handlePopoverTargetLeave = e => {
166
- previewInternalState.openByHoverOverPopover = false;
167
- setLeaveTimeout(() => {
168
- setIsPopoverOpen(isOpen());
169
- // We want to call onOpenChange only if the popover is actually closing when leaving the popover
170
- if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverTrigger) {
171
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
172
- open: false
173
- });
174
- removeOpenedByHoverPreview(popoverSurfaceId);
58
+ React.useEffect(()=>{
59
+ return ()=>{
60
+ // Remove all instances of the current popover from the openedByHoverPreviewManager when the component is unmounted.
61
+ removeOpenedByHoverPreview(popoverSurfaceId);
62
+ };
63
+ }, [
64
+ popoverSurfaceId
65
+ ]);
66
+ if (popoverSurface && popoverTrigger) {
67
+ const handleTriggerTargetEnter = (e)=>{
68
+ previewInternalState.openByHoverOverTrigger = true;
69
+ triggerMousedOver.current = true;
70
+ // We want to disable auto focus only if the popover is being opened by hovering over the trigger
71
+ if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen) {
72
+ setDisableAutoFocus(true);
73
+ closeAllOpenedByHoverPreviews(popoverSurfaceId);
74
+ }
75
+ setEnterTimeout(()=>{
76
+ if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !isPopoverOpen && isOpen()) {
77
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
78
+ open: true
79
+ });
80
+ addOpenedByHoverPreview(popoverSurfaceId, closeCallback);
81
+ }
82
+ setIsPopoverOpen(isOpen());
83
+ }, showDelay);
84
+ };
85
+ const handleTriggerTargetLeave = (e)=>{
86
+ previewInternalState.openByHoverOverTrigger = false;
87
+ triggerMousedOver.current = false;
88
+ setLeaveTimeout(()=>{
89
+ setIsPopoverOpen(isOpen());
90
+ // We want to call onOpenChange only if the popover is actually closing when leaving the trigger
91
+ if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverPopover && isPopoverOpen) {
92
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
93
+ open: false
94
+ });
95
+ removeOpenedByHoverPreview(popoverSurfaceId);
96
+ }
97
+ }, getDelay(e.type, hideDelay));
98
+ };
99
+ const handleTriggerClick = (e)=>{
100
+ // Setting preventDefaultClose so that onPopoverOpenChange does not apply its logic when click is on the trigger as we want to control that behavior.
101
+ preventDefaultClose.current = true;
102
+ // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via click.
103
+ setDisableAutoFocus(false);
104
+ const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;
105
+ // If openByKeyboard is true, then the popover was already opened via keyboard and we always want to close it.
106
+ previewInternalState.openByClick = previewInternalState.openByKeyboard ? false : !previewInternalState.openByClick;
107
+ previewInternalState.openByHoverOverTrigger = false;
108
+ previewInternalState.openByHoverOverPopover = false;
109
+ previewInternalState.openByKeyboard = false;
110
+ // We set triggerMousedOver to false when clicking, since we just interacted with the trigger via click, and not hover.
111
+ if (triggerMousedOver.current) {
112
+ previewInternalState.openByClick = false;
113
+ triggerMousedOver.current = false;
114
+ } else {
115
+ e.preventDefault();
116
+ }
117
+ if (!tmpOpenByHoverOverTrigger) {
118
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
119
+ open: previewInternalState.openByClick
120
+ });
121
+ }
122
+ if (!isOpen()) {
123
+ removeOpenedByHoverPreview(popoverSurfaceId);
124
+ }
125
+ setIsPopoverOpen(isOpen());
126
+ };
127
+ const handleTriggerKeyDown = (e)=>{
128
+ if (e.key === Enter) {
129
+ clearLeaveTimeout();
130
+ // Setting default prevented so that Enter key does not trigger a click event or onPopoverOpenChange.
131
+ e.preventDefault();
132
+ // We set disableAutoFocus to false so that interactive elements within popover can be focused when it opens via keyboard.
133
+ setDisableAutoFocus(false);
134
+ const tmpOpenByHoverOverTrigger = previewInternalState.openByHoverOverTrigger;
135
+ // If openByClick is true, then the popover was already opened via click and we always want to close it.
136
+ previewInternalState.openByKeyboard = previewInternalState.openByClick ? false : !previewInternalState.openByKeyboard;
137
+ previewInternalState.openByClick = false;
138
+ previewInternalState.openByHoverOverTrigger = false;
139
+ previewInternalState.openByHoverOverPopover = false;
140
+ if (!tmpOpenByHoverOverTrigger) {
141
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
142
+ open: previewInternalState.openByKeyboard
143
+ });
144
+ }
145
+ if (!isOpen()) {
146
+ removeOpenedByHoverPreview(popoverSurfaceId);
147
+ }
148
+ setIsPopoverOpen(isOpen());
149
+ }
150
+ };
151
+ const handlePopoverTargetEnter = (e)=>{
152
+ previewInternalState.openByHoverOverPopover = true;
153
+ setIsPopoverOpen(isOpen());
154
+ };
155
+ const handlePopoverTargetLeave = (e)=>{
156
+ previewInternalState.openByHoverOverPopover = false;
157
+ setLeaveTimeout(()=>{
158
+ setIsPopoverOpen(isOpen());
159
+ // We want to call onOpenChange only if the popover is actually closing when leaving the popover
160
+ if (!previewInternalState.openByClick && !previewInternalState.openByKeyboard && !previewInternalState.openByHoverOverTrigger) {
161
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
162
+ open: false
163
+ });
164
+ removeOpenedByHoverPreview(popoverSurfaceId);
165
+ }
166
+ }, getDelay(e.type, hideDelay));
167
+ };
168
+ popoverTrigger = React.cloneElement(popoverTrigger, {
169
+ ...popoverTrigger.props,
170
+ children: React.cloneElement(popoverTrigger.props.children, {
171
+ ...popoverTrigger.props.children.props,
172
+ onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),
173
+ onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),
174
+ onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),
175
+ onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),
176
+ onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave)
177
+ })
178
+ });
179
+ var _popoverSurface_props_arialabelledby;
180
+ popoverSurface = React.cloneElement(popoverSurface, {
181
+ ...popoverSurface.props,
182
+ 'aria-labelledby': (_popoverSurface_props_arialabelledby = popoverSurface.props['aria-labelledby']) !== null && _popoverSurface_props_arialabelledby !== void 0 ? _popoverSurface_props_arialabelledby : popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,
183
+ id: popoverSurfaceId,
184
+ onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),
185
+ onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),
186
+ onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter)
187
+ });
188
+ }
189
+ // Hitting Escape key should close the popover if it was opened by hover.
190
+ // This is necessary to attach to the document because focus is likely not within the trigger or popover.
191
+ useIsomorphicLayoutEffect(()=>{
192
+ if (isPopoverOpen) {
193
+ const onDocumentKeyDown = (e)=>{
194
+ const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;
195
+ if (openedByHover && e.key === Escape) {
196
+ clearLeaveTimeout();
197
+ // We set state back to its default if the Escape key has been pressed
198
+ setDisableAutoFocus(true);
199
+ closeCallback();
200
+ removeOpenedByHoverPreview(popoverSurfaceId);
201
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
202
+ open: false
203
+ });
204
+ e.stopPropagation();
205
+ }
206
+ };
207
+ targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.addEventListener('keydown', onDocumentKeyDown, {
208
+ capture: true
209
+ });
210
+ return ()=>{
211
+ targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.removeEventListener('keydown', onDocumentKeyDown, {
212
+ capture: true
213
+ });
214
+ };
215
+ }
216
+ }, [
217
+ targetDocument,
218
+ isPopoverOpen
219
+ ]);
220
+ const onPopoverOpenChange = (e, data)=>{
221
+ if (!preventDefaultClose.current) {
222
+ // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.
223
+ if (!data.open) {
224
+ clearLeaveTimeout();
225
+ closeCallback();
226
+ removeOpenedByHoverPreview(popoverSurfaceId);
227
+ }
228
+ onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, data);
175
229
  }
176
- }, getDelay(e.type, hideDelay));
230
+ preventDefaultClose.current = false;
177
231
  };
178
- popoverTrigger = React.cloneElement(popoverTrigger, {
179
- ...popoverTrigger.props,
180
- children: React.cloneElement(popoverTrigger.props.children, {
181
- ...popoverTrigger.props.children.props,
182
- onBlur: mergeCallbacks(popoverTrigger.props.children.props.onBlur, handleTriggerTargetLeave),
183
- onClick: mergeCallbacks(popoverTrigger.props.children.props.onClick, handleTriggerClick),
184
- onKeyDown: mergeCallbacks(popoverTrigger.props.children.props.onKeyDown, handleTriggerKeyDown),
185
- onMouseEnter: mergeCallbacks(popoverTrigger.props.children.props.onMouseEnter, handleTriggerTargetEnter),
186
- onMouseLeave: mergeCallbacks(popoverTrigger.props.children.props.onMouseLeave, handleTriggerTargetLeave)
187
- })
188
- });
189
- var _popoverSurface_props_arialabelledby;
190
- popoverSurface = React.cloneElement(popoverSurface, {
191
- ...popoverSurface.props,
192
- 'aria-labelledby': (_popoverSurface_props_arialabelledby = popoverSurface.props['aria-labelledby']) !== null && _popoverSurface_props_arialabelledby !== void 0 ? _popoverSurface_props_arialabelledby : popoverSurface.props['aria-label'] ? undefined : popoverSurfaceId,
193
- id: popoverSurfaceId,
194
- onMouseEnter: mergeCallbacks(popoverSurface.props.onMouseEnter, handlePopoverTargetEnter),
195
- onMouseLeave: mergeCallbacks(popoverSurface.props.onMouseLeave, handlePopoverTargetLeave),
196
- onFocus: mergeCallbacks(popoverSurface.props.onFocus, handlePopoverTargetEnter)
197
- });
198
- }
199
- // Hitting Escape key should close the popover if it was opened by hover.
200
- // This is necessary to attach to the document because focus is likely not within the trigger or popover.
201
- useIsomorphicLayoutEffect(() => {
202
- if (isPopoverOpen) {
203
- const onDocumentKeyDown = e => {
204
- const openedByHover = !previewInternalState.openByClick && !previewInternalState.openByKeyboard;
205
- if (openedByHover && e.key === Escape) {
206
- clearLeaveTimeout();
207
- // We set state back to its default if the Escape key has been pressed
208
- setDisableAutoFocus(true);
209
- closeCallback();
210
- removeOpenedByHoverPreview(popoverSurfaceId);
211
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, {
212
- open: false
213
- });
214
- e.stopPropagation();
232
+ let resolvedChildren = children;
233
+ if (popoverSurface) {
234
+ if (popoverTrigger) {
235
+ resolvedChildren = [
236
+ popoverTrigger,
237
+ popoverSurface
238
+ ];
239
+ } else {
240
+ resolvedChildren = popoverSurface;
215
241
  }
216
- };
217
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.addEventListener('keydown', onDocumentKeyDown, {
218
- capture: true
219
- });
220
- return () => {
221
- targetDocument === null || targetDocument === void 0 ? void 0 : targetDocument.removeEventListener('keydown', onDocumentKeyDown, {
222
- capture: true
223
- });
224
- };
225
- }
226
- }, [targetDocument, isPopoverOpen]);
227
- const onPopoverOpenChange = (e, data) => {
228
- if (!preventDefaultClose.current) {
229
- // We set all open state to false if preventDefaultClose was not set to true and the popover is closing.
230
- if (!data.open) {
231
- clearLeaveTimeout();
232
- closeCallback();
233
- removeOpenedByHoverPreview(popoverSurfaceId);
234
- }
235
- onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(e, data);
236
242
  }
237
- preventDefaultClose.current = false;
238
- };
239
- let resolvedChildren = children;
240
- if (popoverSurface) {
241
- if (popoverTrigger) {
242
- resolvedChildren = [popoverTrigger, popoverSurface];
243
- } else {
244
- resolvedChildren = popoverSurface;
245
- }
246
- }
247
- const popoverState = usePopover_unstable({
248
- ...props,
249
- children: resolvedChildren,
250
- onOpenChange: onPopoverOpenChange,
251
- open: open !== null && open !== void 0 ? open : isPopoverOpen,
252
- positioning: typeof positioning === 'string' ? {
253
- autoSize: true,
254
- ...resolvePositioningShorthand(positioning)
255
- } : {
256
- autoSize: true,
257
- ...positioning
258
- },
259
- unstable_disableAutoFocus: unstable_disableAutoFocus !== null && unstable_disableAutoFocus !== void 0 ? unstable_disableAutoFocus : disableAutoFocus
260
- });
261
- return {
262
- ...popoverState,
263
- isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard
264
- };
243
+ const popoverState = usePopover_unstable({
244
+ ...props,
245
+ children: resolvedChildren,
246
+ onOpenChange: onPopoverOpenChange,
247
+ open: open !== null && open !== void 0 ? open : isPopoverOpen,
248
+ positioning: typeof positioning === 'string' ? {
249
+ autoSize: true,
250
+ ...resolvePositioningShorthand(positioning)
251
+ } : {
252
+ autoSize: true,
253
+ ...positioning
254
+ },
255
+ unstable_disableAutoFocus: unstable_disableAutoFocus !== null && unstable_disableAutoFocus !== void 0 ? unstable_disableAutoFocus : disableAutoFocus
256
+ });
257
+ return {
258
+ ...popoverState,
259
+ isPreviewLocked: previewInternalState.openByClick || previewInternalState.openByKeyboard
260
+ };
265
261
  };
266
- //# sourceMappingURL=usePreview.js.map