Skip to content

fix: portal floating UI elements to document.body to prevent overflow clipping#2591

Open
YousefED wants to merge 3 commits intomainfrom
fix/portal-floating-ui-overflow-clipping
Open

fix: portal floating UI elements to document.body to prevent overflow clipping#2591
YousefED wants to merge 3 commits intomainfrom
fix/portal-floating-ui-overflow-clipping

Conversation

@YousefED
Copy link
Collaborator

@YousefED YousefED commented Mar 24, 2026

Summary

Floating UI elements (slash menu, formatting toolbar, link toolbar, side menu, file panel, table handles, emoji picker) are now portaled to a dedicated container at document.body, preventing them from being clipped by overflow: hidden ancestors.

Rationale

When BlockNote is rendered inside a container with overflow: hidden (e.g., a sidebar, modal, or scrollable panel), floating UI elements get clipped and become partially or fully invisible. Portaling to document.body is the standard fix.

Closes #2543
Closes #2544
Closes #2558
Closes #2578
Supersedes the approach from #2092

Changes

Portal infrastructure

  • BlockNoteView renders a portal container at document.body via createPortal. This container gets bn-root + color scheme + user className for theming, but NOT bn-container (layout only).
  • portalRoot exposed via BlockNoteContext so all floating elements can access it.
  • GenericPopover (the single component all floating UI elements flow through) wraps all render paths with <FloatingPortal root={portalRoot}>.

CSS architecture: bn-root vs bn-container

  • bn-root: theming class (CSS variables, font-family). Applied to both the editor container and the portal container, so floating elements inherit the correct theme.
  • bn-container: layout class (width, height). Only on the editor container.
  • Theme CSS variables in styles.css moved from .bn-container to .bn-root.
  • Removed dead .bn-root box-sizing reset from core (was never applied to any element).

Popover portalRoot prop (for EmojiPicker)

  • Added portalRoot to the generic Popover.Root component interface.
  • Mantine: uses native withinPortal + portalProps.
  • shadcn: threads portalRoot via React context from Root to Content, uses createPortal (avoids modifying user's shadcn primitives).
  • Ariakit: threads portalRoot via React context, uses native portalElement prop.

Z-index handling

  • When portaling to portalRoot, hardcoded z-index: 10000 is dropped (unnecessary at document.body level).
  • When NOT portaling (e.g., portalRoot is undefined from other call sites), the original z-index: 10000 is preserved.
  • Users can configure --bn-ui-base-z-index on .bn-root for GenericPopover-based elements.

EmojiPicker simplification

  • Removed manual createPortal — now passes portalRoot to Popover.Root and lets each UI library handle portaling.

Minor fixes

  • shadcn/ariakit Comment: emojiPickerOpen prop is now used (was previously ignored) to keep action buttons visible while emoji picker is open, matching mantine.
  • SideMenu: uses .closest(".bn-root") instead of editor wrapper containment check, so hovering portaled floating elements doesn't dismiss the side menu.
  • Emoji picker: scoped em-emoji-picker styles to .bn-root, removed stale z-index: 11000.

Impact

  • Breaking (CSS): Users customizing themes via .bn-container[data-color-scheme] selectors need to update to .bn-root[data-color-scheme]. .bn-container still exists but is for layout only.
  • All floating UI elements now escape overflow: hidden ancestors.
  • No changes to the public JS/React API.

Testing

  • Manual testing with editor inside overflow: hidden containers.
  • TypeScript checks pass for all packages (react, mantine, shadcn, ariakit).

Checklist

  • Code follows the project's coding standards.
  • Unit tests covering the new feature have been added.
  • All existing tests pass.
  • The documentation has been updated to reflect the new feature

Additional Notes

  • The multi-editor example was updated to pass explicit theme props to verify theming works correctly on the portal container.
  • The SideMenu .closest(".bn-root") check is broader than the original editor-wrapper containment check, but mouseOverEditor bounding-box guard mitigates multi-editor edge cases.

Summary by CodeRabbit

  • New Features

    • Floating UI can render into a custom portal container to avoid overflow clipping.
    • Editors can be rendered with an explicit light/dark theme.
  • Bug Fixes

    • Emoji picker now reliably keeps action controls visible while open.
  • Style

    • Theming and layout scoping moved to a root-level selector and introduced a root z-index variable.
  • Documentation

    • Updated docs to target root-level theming selectors instead of container-based selectors.

… clipping

Floating UI elements (menus, toolbars, emoji picker) are now portaled to a
dedicated container at document.body, preventing them from being clipped by
overflow:hidden ancestors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@vercel
Copy link

vercel bot commented Mar 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
blocknote Ready Ready Preview Mar 25, 2026 1:18pm
blocknote-website Ready Ready Preview Mar 25, 2026 1:18pm

Request Review

@coderabbitai
Copy link

coderabbitai bot commented Mar 24, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 4d8ddb7f-ba98-4c8c-91b3-113b6df8282f

📥 Commits

Reviewing files that changed from the base of the PR and between 11bdffd and 1358d89.

📒 Files selected for processing (4)
  • .claude/worktrees/emoji-fixes
  • .claude/worktrees/fix-pr-2553-port
  • .claude/worktrees/toggle-block-bugs-blo-1018
  • examples/05-interoperability/10-static-html-render/src/App.tsx
✅ Files skipped from review due to trivial changes (4)
  • .claude/worktrees/emoji-fixes
  • examples/05-interoperability/10-static-html-render/src/App.tsx
  • .claude/worktrees/fix-pr-2553-port
  • .claude/worktrees/toggle-block-bugs-blo-1018

📝 Walkthrough

Walkthrough

Adds a portal-root system to render floating UI outside the editor DOM and updates theme/layout scoping from .bn-container to .bn-root; multiple components, extensions, examples, and CSS were changed to accept, provide, or use a portalRoot and to rely on .bn-root for theming and z-index variables.

Changes

Cohort / File(s) Summary
Docs & Theming Examples
docs/content/docs/react/styling-theming/themes.mdx, examples/04-theming/02-changing-font/src/styles.css, examples/04-theming/03-theming-css/src/styles.css, examples/04-theming/04-theming-css-variables/src/styles.css
Re-scoped CSS selectors and documentation guidance from .bn-container[...] to .bn-root[...] for theme/demos.
Example wrapper class updates
examples/02-backend/04-rendering-static-documents/src/App.tsx, examples/05-interoperability/09-blocks-to-html-static-render/src/App.tsx, examples/05-interoperability/10-static-html-render/src/App.tsx
Added bn-root class alongside bn-container on wrapper divs.
Multi‑editor example prop change
examples/01-basic/12-multi-editor/src/App.tsx
Editor now requires `theme: "dark"
Portal root context & view
packages/react/src/editor/BlockNoteContext.ts, packages/react/src/editor/BlockNoteView.tsx, packages/react/src/editor/ComponentsContext.tsx, packages/react/src/editor/styles.css
Added optional portalRoot to BlockNoteContext and Components types; BlockNoteView creates a bn-root portal div mounted to document.body, exposes portalRoot in context; CSS scoping moved to .bn-root.
Generic popover integration
packages/react/src/components/Popovers/GenericPopover.tsx, packages/react/src/components/Comments/EmojiPicker.tsx
Popovers read portalRoot from context and render via FloatingPortal/root; EmojiPicker removed manual createPortal and passes portalRoot into Popover root.
Third‑party popover adaptors
packages/ariakit/src/popover/Popover.tsx, packages/mantine/src/popover/Popover.tsx, packages/shadcn/src/popover/popover.tsx
Added portalRoot prop/context propagation; PopoverContent forwards/uses portal target and adjusts z-index/portal props when portaled.
Editor core: portal awareness
packages/core/src/editor/BlockNoteEditor.ts, packages/core/src/extensions/SideMenu/SideMenu.ts, packages/core/src/extensions/tiptap-extensions/UniqueID/UniqueID.ts, packages/core/src/editor/managers/ExtensionManager/extensions.ts
Added portalElement property and isWithinEditor() method to editor; side menu and UniqueID use isWithinEditor to detect events originating inside editor or its portal; extension manager wires option through.
Comment components: emoji visibility
packages/ariakit/src/comments/Comment.tsx, packages/shadcn/src/comments/Comment.tsx
doShowActions logic now includes emojiPickerOpen so actions render when emoji picker is open.
Core/UI CSS updates
packages/core/src/editor/editor.css, packages/react/src/editor/styles.css, playground/src/style.css
Shifted theme/layout rules to .bn-root; removed .bn-root box-sizing rule from core CSS; added --bn-ui-base-z-index on .bn-root in playground; adjusted emoji picker selector/z-index handling.
Examples: static rendering & blocks-to-html
examples/.../*App.tsx (render wrappers)
Updated wrapper className to include bn-root where appropriate.
Submodule pointers
.claude/worktrees/*
Advanced several git submodule commit references (no app code changes).

Sequence Diagram

sequenceDiagram
    participant User
    participant BlockNoteView as BlockNoteView
    participant Context as BlockNoteContext
    participant Popover as PopoverComponent
    participant FloatingPortal as FloatingPortal
    participant Body as document.body

    User->>BlockNoteView: mount editor
    BlockNoteView->>Body: createPortal(<div class="bn-root">) -> portalRoot
    BlockNoteView->>Context: provide portalRoot
    User->>BlockNoteView: trigger floating UI (select / ":" / click)
    BlockNoteView->>Popover: render Popover (reads context)
    Popover->>Context: read portalRoot
    Popover->>FloatingPortal: render content into portalRoot
    FloatingPortal->>Body: mount floating UI outside editor
    Body->>User: floating UI visible (not clipped)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • nperez0111

Poem

🐰 I tunneled a portal, light and neat,
Menus now dance where roots and body meet,
No clip, no cut, the floats can roam,
Themes move roots and find a home,
Hooray — the UI hops free and sweet!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'fix: portal floating UI elements to document.body to prevent overflow clipping' clearly and concisely describes the main change: portaling floating UI elements to document.body to resolve overflow clipping issues.
Description check ✅ Passed The description is comprehensive and well-structured, covering Summary, Rationale, detailed Changes, Impact, Testing, and a completed Checklist. It thoroughly explains the portal infrastructure, CSS architecture changes, and breaking changes.
Linked Issues check ✅ Passed The PR successfully addresses all four linked issues (#2543, #2544, #2558, #2578) by implementing portal infrastructure that prevents floating UI elements (slash menu, formatting toolbar, drag handle menu, emoji picker) from being clipped by overflow:hidden ancestors.
Out of Scope Changes check ✅ Passed All changes are directly related to the portal infrastructure objective. CSS updates separate theming (bn-root) from layout (bn-container), popover components gain portalRoot support, and minor fixes address emojiPickerOpen and SideMenu containment checks—all scope-aligned with floating UI portaling.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/portal-floating-ui-overflow-clipping

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Mar 24, 2026

Open in StackBlitz

@blocknote/ariakit

npm i https://pkg.pr.new/@blocknote/ariakit@2591

@blocknote/code-block

npm i https://pkg.pr.new/@blocknote/code-block@2591

@blocknote/core

npm i https://pkg.pr.new/@blocknote/core@2591

@blocknote/mantine

npm i https://pkg.pr.new/@blocknote/mantine@2591

@blocknote/react

npm i https://pkg.pr.new/@blocknote/react@2591

@blocknote/server-util

npm i https://pkg.pr.new/@blocknote/server-util@2591

@blocknote/shadcn

npm i https://pkg.pr.new/@blocknote/shadcn@2591

@blocknote/xl-ai

npm i https://pkg.pr.new/@blocknote/xl-ai@2591

@blocknote/xl-docx-exporter

npm i https://pkg.pr.new/@blocknote/xl-docx-exporter@2591

@blocknote/xl-email-exporter

npm i https://pkg.pr.new/@blocknote/xl-email-exporter@2591

@blocknote/xl-multi-column

npm i https://pkg.pr.new/@blocknote/xl-multi-column@2591

@blocknote/xl-odt-exporter

npm i https://pkg.pr.new/@blocknote/xl-odt-exporter@2591

@blocknote/xl-pdf-exporter

npm i https://pkg.pr.new/@blocknote/xl-pdf-exporter@2591

commit: 1358d89

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/core/src/extensions/SideMenu/SideMenu.ts (1)

615-626: ⚠️ Potential issue | 🟡 Minor

Scope the .bn-root exemption to the current editor instance.

closest(".bn-root") now treats any BlockNote root as local UI. On multi-editor pages, a portaled toolbar from editor B hovering over editor A can keep editor A's side menu active because the target still has a .bn-root ancestor. This check needs an instance-scoped marker for the current editor/root pair, not a global class match.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/core/src/extensions/SideMenu/SideMenu.ts` around lines 615 - 626,
The current check uses (event.target as HTMLElement).closest(".bn-root") which
matches any editor root on the page; change it to an instance-scoped check so
only the current editor/root keeps the side menu active. Use the SideMenu
instance's root reference (e.g. this.rootElement or this.editorRoot) and replace
the global closest(".bn-root") logic with an instance-scoped test such as using
this.rootElement.contains(event.target as Node) or matching a unique root
identifier/data-attribute (e.g. data-bn-root-id === this.rootId) on ancestor
lookup; update the closestBNRoot usage and the conditional that references
cursorWithinEditor so it only treats elements within this specific editor root
as local UI.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/mantine/src/popover/Popover.tsx`:
- Line 26: Popover.tsx currently clears zIndex when portalRoot exists which lets
Mantine's default z-index win; change the zIndex logic to use the CSS variable
fallback pattern from GenericPopover.tsx by assigning zIndex to the CSS variable
--bn-ui-base-z-index with a 10000 fallback when portalRoot is truthy (and keep
10000 when not portaled) so portaled popovers respect the app's base z-index
system; update the zIndex prop usage in the Popover component (the zIndex prop
set at the repository diff line) accordingly to use the
var(--bn-ui-base-z-index, 10000) approach.

In `@packages/react/src/editor/BlockNoteView.tsx`:
- Around line 216-227: The portaled root created by createPortal currently only
forwards className and data-color-scheme, causing loss of important attributes
from the editor container; update the BlockNoteView portaling logic (the element
created where setPortalRoot is used) to derive and forward explicit props from
...rest (e.g., dir, any data-* attributes used for theming like data-theming-*,
data-mantine-color-scheme, and inline style/CSS variable overrides) instead of
relying on className alone, and avoid forwarding layout-only classes by either
whitelisting these attributes or picking them out from rest (preserve
editorColorScheme and className via mergeCSSClasses, but also copy dir, style,
and any data-* theming attributes into the portaled div so floating UI retains
same theme/context as the editor).

---

Outside diff comments:
In `@packages/core/src/extensions/SideMenu/SideMenu.ts`:
- Around line 615-626: The current check uses (event.target as
HTMLElement).closest(".bn-root") which matches any editor root on the page;
change it to an instance-scoped check so only the current editor/root keeps the
side menu active. Use the SideMenu instance's root reference (e.g.
this.rootElement or this.editorRoot) and replace the global closest(".bn-root")
logic with an instance-scoped test such as using
this.rootElement.contains(event.target as Node) or matching a unique root
identifier/data-attribute (e.g. data-bn-root-id === this.rootId) on ancestor
lookup; update the closestBNRoot usage and the conditional that references
cursorWithinEditor so it only treats elements within this specific editor root
as local UI.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c2308343-2a71-42d8-9eee-c0b1fdf5b028

📥 Commits

Reviewing files that changed from the base of the PR and between af3737a and 50ebffb.

📒 Files selected for processing (21)
  • docs/content/docs/react/styling-theming/themes.mdx
  • examples/01-basic/12-multi-editor/src/App.tsx
  • examples/02-backend/04-rendering-static-documents/src/App.tsx
  • examples/04-theming/02-changing-font/src/styles.css
  • examples/04-theming/03-theming-css/src/styles.css
  • examples/04-theming/04-theming-css-variables/src/styles.css
  • examples/05-interoperability/09-blocks-to-html-static-render/src/App.tsx
  • packages/ariakit/src/comments/Comment.tsx
  • packages/ariakit/src/popover/Popover.tsx
  • packages/core/src/editor/editor.css
  • packages/core/src/extensions/SideMenu/SideMenu.ts
  • packages/mantine/src/popover/Popover.tsx
  • packages/react/src/components/Comments/EmojiPicker.tsx
  • packages/react/src/components/Popovers/GenericPopover.tsx
  • packages/react/src/editor/BlockNoteContext.ts
  • packages/react/src/editor/BlockNoteView.tsx
  • packages/react/src/editor/ComponentsContext.tsx
  • packages/react/src/editor/styles.css
  • packages/shadcn/src/comments/Comment.tsx
  • packages/shadcn/src/popover/popover.tsx
  • playground/src/style.css
💤 Files with no reviewable changes (1)
  • packages/core/src/editor/editor.css

onChange={onOpenChange}
position={position}
zIndex={10000}
zIndex={portalRoot ? undefined : 10000}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify z-index handling for Mantine popovers and bn root variable wiring.

# 1) Confirm changed Mantine popover behavior in this file.
rg -nP -C3 'withinPortal=|portalProps=|zIndex=' packages/mantine/src/popover/Popover.tsx

# 2) Check whether bn-ui-base-z-index is consumed anywhere in styling/code.
rg -nP -C2 'bn-ui-base-z-index|--bn-ui-base-z-index|z-index' packages/react packages/mantine

# 3) Inspect portal root creation context for explicit stacking styles.
rg -nP -C8 'createPortal\\(|className=|data-color-scheme|bn-root' packages/react/src/editor/BlockNoteView.tsx

Repository: TypeCellOS/BlockNote

Length of output: 2993


🏁 Script executed:

# Find the portal root creation and its styling context
rg -nA15 -B5 'createPortal|portalRoot.*=' packages/react/src/editor/BlockNoteView.tsx | head -100

Repository: TypeCellOS/BlockNote

Length of output: 2391


🏁 Script executed:

# Check if there's z-index styling on the portal root or bn-root specifically
rg -nP 'bn-root|portal.*root' packages/react/src/editor/styles.css packages/react/src/editor/BlockNoteView.tsx -A3 -B3

Repository: TypeCellOS/BlockNote

Length of output: 4550


🏁 Script executed:

# Check Mantine Popover implementation or types to see how zIndex behaves
fd -t f -e tsx -e ts packages/mantine | xargs grep -l "zIndex" | head -5

Repository: TypeCellOS/BlockNote

Length of output: 433


🏁 Script executed:

# Find Mantine Popover files
fd -t f --full-path 'packages/mantine' -e tsx -e ts | head -20

Repository: TypeCellOS/BlockNote

Length of output: 856


🏁 Script executed:

# Check if there's any handling of zIndex prop for Popover in Mantine code
rg -n 'zIndex|z-index' packages/mantine/src/popover/ -B3 -A3

Repository: TypeCellOS/BlockNote

Length of output: 538


🏁 Script executed:

# Verify what Mantine's default z-index behavior is for portaled popovers
rg -n 'const.*Popover|export.*Popover' packages/mantine/src/popover/ -A20 | head -80

Repository: TypeCellOS/BlockNote

Length of output: 3408


Portaled popovers lose stacking control with Mantine's default z-index.

At line 26, zIndex is set to undefined when portalRoot exists. The portal root (created in packages/react/src/editor/BlockNoteView.tsx:217-226) has no explicit z-index styling and inherits --bn-ui-base-z-index: 0 from the .bn-root CSS rule. This causes Mantine to apply its default z-index (300 via CSS variables), which can fall behind fixed/sticky app chrome without explicit stacking control.

The fix aligns with the established pattern used in GenericPopover.tsx and other UI components, which leverage the --bn-ui-base-z-index CSS variable for consistent z-index management:

Proposed fix
-      zIndex={portalRoot ? undefined : 10000}
+      zIndex={portalRoot ? "var(--bn-ui-base-z-index, 10000)" : 10000}

This ensures portaled popovers respect the base z-index system while maintaining fallback to 10000 when the variable is not defined.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
zIndex={portalRoot ? undefined : 10000}
zIndex={portalRoot ? "var(--bn-ui-base-z-index, 10000)" : 10000}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/mantine/src/popover/Popover.tsx` at line 26, Popover.tsx currently
clears zIndex when portalRoot exists which lets Mantine's default z-index win;
change the zIndex logic to use the CSS variable fallback pattern from
GenericPopover.tsx by assigning zIndex to the CSS variable --bn-ui-base-z-index
with a 10000 fallback when portalRoot is truthy (and keep 10000 when not
portaled) so portaled popovers respect the app's base z-index system; update the
zIndex prop usage in the Popover component (the zIndex prop set at the
repository diff line) accordingly to use the var(--bn-ui-base-z-index, 10000)
approach.

Comment on lines +216 to +227
{createPortal(
<div
ref={setPortalRoot}
className={mergeCSSClasses(
"bn-root",
editorColorScheme,
className,
)}
data-color-scheme={editorColorScheme}
/>,
document.body,
)}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

The portal root needs the same theme/context attrs as the editor root.

Only className and data-color-scheme are mirrored here. The editor container at Lines 207-213 still owns ...rest, so portaled UI loses things like dir, custom data-*, and inline CSS variable overrides. That means the new .bn-root[data-theming-*] demos and Mantine's data-mantine-color-scheme passthrough in packages/mantine/src/BlockNoteView.tsx:82-107 will not fully apply to floating UI. className alone is also not a safe proxy here, because layout classes can leak onto the body-level portal container. Please derive explicit portal-root props from ...rest instead of relying on className alone.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/react/src/editor/BlockNoteView.tsx` around lines 216 - 227, The
portaled root created by createPortal currently only forwards className and
data-color-scheme, causing loss of important attributes from the editor
container; update the BlockNoteView portaling logic (the element created where
setPortalRoot is used) to derive and forward explicit props from ...rest (e.g.,
dir, any data-* attributes used for theming like data-theming-*,
data-mantine-color-scheme, and inline style/CSS variable overrides) instead of
relying on className alone, and avoid forwarding layout-only classes by either
whitelisting these attributes or picking them out from rest (preserve
editorColorScheme and className via mergeCSSClasses, but also copy dir, style,
and any data-* theming attributes into the portaled div so floating UI retains
same theme/context as the editor).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant