Skip to content

Commit 54556ca

Browse files
authored
fix(ai): no more scrolling to top when opening AI menu (#2503)
1 parent 7082884 commit 54556ca

22 files changed

+241
-130
lines changed

packages/react/src/components/Comments/FloatingComposerController.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ export default function FloatingComposerController<
6262
middleware: [offset(10), shift(), flip()],
6363
...props.floatingUIOptions?.useFloatingOptions,
6464
},
65+
focusManagerProps: {
66+
disabled: false,
67+
},
6568
elementProps: {
6669
style: {
6770
zIndex: 60,

packages/react/src/components/Comments/FloatingThreadController.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ export default function FloatingThreadController(props: {
5858
middleware: [offset(10), shift(), flip()],
5959
...props.floatingUIOptions?.useFloatingOptions,
6060
},
61+
focusManagerProps: {
62+
disabled: true,
63+
...props.floatingUIOptions?.focusManagerProps,
64+
},
6165
elementProps: {
6266
style: {
6367
zIndex: 30,

packages/react/src/components/FilePanel/FilePanelController.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { FilePanelExtension } from "@blocknote/core/extensions";
22
import { flip, offset } from "@floating-ui/react";
33
import { FC, useMemo } from "react";
44

5-
import { FilePanel } from "./FilePanel.js";
6-
import { FilePanelProps } from "./FilePanelProps.js";
5+
import { useBlockNoteEditor } from "../../hooks/useBlockNoteEditor.js";
6+
import { useExtension, useExtensionState } from "../../hooks/useExtension.js";
77
import { BlockPopover } from "../Popovers/BlockPopover.js";
88
import { FloatingUIOptions } from "../Popovers/FloatingUIOptions.js";
9-
import { useExtension, useExtensionState } from "../../hooks/useExtension.js";
10-
import { useBlockNoteEditor } from "../../hooks/useBlockNoteEditor.js";
9+
import { FilePanel } from "./FilePanel.js";
10+
import { FilePanelProps } from "./FilePanelProps.js";
1111

1212
export const FilePanelController = (props: {
1313
filePanel?: FC<FilePanelProps>;
@@ -37,6 +37,10 @@ export const FilePanelController = (props: {
3737
middleware: [offset(10), flip()],
3838
...props.floatingUIOptions?.useFloatingOptions,
3939
},
40+
focusManagerProps: {
41+
disabled: true,
42+
...props.floatingUIOptions?.focusManagerProps,
43+
},
4044
elementProps: {
4145
style: {
4246
zIndex: 90,

packages/react/src/components/FormattingToolbar/FormattingToolbarController.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ export const FormattingToolbarController = (props: {
9595
middleware: [offset(10), shift(), flip()],
9696
...props.floatingUIOptions?.useFloatingOptions,
9797
},
98+
focusManagerProps: {
99+
disabled: true,
100+
...props.floatingUIOptions?.focusManagerProps,
101+
},
98102
elementProps: {
99103
style: {
100104
zIndex: 40,

packages/react/src/components/LinkToolbar/LinkToolbarController.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ export const LinkToolbarController = (props: {
150150
handleClose: safePolygon(),
151151
...props.floatingUIOptions?.useHoverProps,
152152
},
153+
focusManagerProps: {
154+
disabled: true,
155+
...props.floatingUIOptions?.focusManagerProps,
156+
},
153157
elementProps: {
154158
style: {
155159
zIndex: 50,

packages/react/src/components/Popovers/FloatingUIOptions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import {
2+
FloatingFocusManagerProps,
23
UseDismissProps,
34
UseFloatingOptions,
45
UseHoverProps,
@@ -14,4 +15,8 @@ export type FloatingUIOptions = {
1415
useDismissProps?: UseDismissProps;
1516
useHoverProps?: UseHoverProps;
1617
elementProps?: HTMLAttributes<HTMLDivElement>;
18+
/**
19+
* Props to pass to the `FloatingFocusManager` component.
20+
*/
21+
focusManagerProps?: Omit<FloatingFocusManagerProps, "context" | "children">;
1722
};

packages/react/src/components/Popovers/GenericPopover.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import {
2-
useFloating,
3-
useTransitionStyles,
2+
autoUpdate,
3+
FloatingFocusManager,
44
useDismiss,
5+
useFloating,
6+
useHover,
57
useInteractions,
68
useMergeRefs,
79
useTransitionStatus,
8-
autoUpdate,
9-
useHover,
10+
useTransitionStyles,
1011
} from "@floating-ui/react";
1112
import { HTMLAttributes, ReactNode, useEffect, useRef } from "react";
1213

@@ -175,6 +176,16 @@ export const GenericPopover = (
175176
);
176177
}
177178

179+
if (!props.focusManagerProps?.disabled) {
180+
return (
181+
<FloatingFocusManager {...props.focusManagerProps} context={context}>
182+
<div ref={mergedRefs} {...mergedProps}>
183+
{props.children}
184+
</div>
185+
</FloatingFocusManager>
186+
);
187+
}
188+
178189
return (
179190
<div ref={mergedRefs} {...mergedProps}>
180191
{props.children}

packages/react/src/components/Popovers/TableCellPopover.tsx

Lines changed: 0 additions & 57 deletions
This file was deleted.

packages/react/src/components/SideMenu/SideMenuController.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ export const SideMenuController = (props: {
3636
enabled: false,
3737
...props.floatingUIOptions?.useDismissProps,
3838
},
39+
focusManagerProps: {
40+
disabled: true,
41+
...props.floatingUIOptions?.focusManagerProps,
42+
},
3943
elementProps: {
4044
style: {
4145
zIndex: 20,

packages/react/src/components/SuggestionMenu/GridSuggestionMenu/GridSuggestionMenuController.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ export function GridSuggestionMenuController<
133133
],
134134
...props.floatingUIOptions?.useFloatingOptions,
135135
},
136+
focusManagerProps: {
137+
disabled: true,
138+
...props.floatingUIOptions?.focusManagerProps,
139+
},
136140
elementProps: {
137141
// Prevents editor blurring when clicking the scroll bar.
138142
onMouseDownCapture: (event) => event.preventDefault(),

0 commit comments

Comments
 (0)