-
-
Notifications
You must be signed in to change notification settings - Fork 749
refactor: portal floating UI elements to document.body to prevent overflow clipping BLO-1115 #2591
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 10 commits
50ebffb
11bdffd
1358d89
5756910
303eab2
eaae887
0d114d6
6550e46
670dffc
c6fbfec
73d3e51
3e13fa9
c93b468
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,3 @@ | ||
| .bn-container[data-changing-font-demo] .bn-editor * { | ||
| .bn-root[data-changing-font-demo] .bn-editor * { | ||
| font-family: "Comic Sans MS", sans-serif; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,11 +1,10 @@ | ||
| /* Adds border and shadow to editor */ | ||
| .bn-container[data-theming-css-demo] .bn-editor * { | ||
| .bn-root[data-theming-css-demo] .bn-editor * { | ||
| color: blue; | ||
| } | ||
|
|
||
| /* Makes slash menu hovered items blue */ | ||
| .bn-container[data-theming-css-demo] | ||
| .bn-suggestion-menu-item[aria-selected="true"], | ||
| .bn-container[data-theming-css-demo] .bn-suggestion-menu-item:hover { | ||
| .bn-root[data-theming-css-demo] .bn-suggestion-menu-item[aria-selected="true"], | ||
| .bn-root[data-theming-css-demo] .bn-suggestion-menu-item:hover { | ||
| background-color: blue; | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -714,6 +714,25 @@ export class BlockNoteEditor< | |
| return this.prosemirrorView?.dom as HTMLDivElement | undefined; | ||
| } | ||
|
|
||
| /** | ||
| * The portal container element at `document.body` used by floating UI | ||
| * elements (menus, toolbars) to escape overflow:hidden ancestors. | ||
| * Set by BlockNoteView; undefined in headless mode. | ||
| */ | ||
| public portalElement: HTMLElement | undefined; | ||
|
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @nperez0111 not sure about setting this on the editor. We need it for the UniqueID and SideMenu extensions though. wdyt?
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nope, I would not put this on the editor, much less public. Need to find a workaround here |
||
|
|
||
| /** | ||
| * Checks whether a DOM element belongs to this editor — either inside the | ||
| * editor's DOM tree or inside its portal container (used for floating UI | ||
| * elements like menus and toolbars). | ||
| */ | ||
| public isWithinEditor = (element: Element): boolean => { | ||
| return !!( | ||
| this.domElement?.parentElement?.contains(element) || | ||
| this.portalElement?.contains(element) | ||
| ); | ||
| }; | ||
|
YousefED marked this conversation as resolved.
|
||
|
|
||
| public isFocused() { | ||
| if (this.headless) { | ||
| return false; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -20,26 +20,6 @@ | |
| padding: 0; | ||
| } | ||
|
|
||
| /* | ||
|
Collaborator
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this was unused, lingering code that I removed in this PR |
||
| bn-root should be applied to all top-level elements | ||
|
|
||
| This includes the Prosemirror editor, but also <div> element such as | ||
| Tippy popups that are appended to document.body directly | ||
| */ | ||
| .bn-root { | ||
| -webkit-box-sizing: border-box; | ||
| -moz-box-sizing: border-box; | ||
| box-sizing: border-box; | ||
| } | ||
|
|
||
| .bn-root *, | ||
| .bn-root *::before, | ||
| .bn-root *::after { | ||
| -webkit-box-sizing: inherit; | ||
| -moz-box-sizing: inherit; | ||
| box-sizing: inherit; | ||
| } | ||
|
|
||
| /* reset styles, they will be set on blockContent */ | ||
| .bn-default-styles p, | ||
| .bn-default-styles h1, | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fyi, this was not implemented in ariakit / shadcn, so decided to fix