Pre-built menus
Drop-in menus for common use cases. Each one handles its own trigger logic and plugin key.BubbleMenu.LinkDefault
Link editing menu that appears when clicking a link.Actions to hide from the toolbar.
Position relative to the link.
Distance from the link in pixels.
Called when the bubble menu is hidden.
Custom URL validator. Return the valid URL string or
null.Called after a link is applied.
Called after a link is removed.
BubbleMenu.ButtonDefault
Button link editing menu that appears when clicking a button.LinkDefault (except excludeItems).
BubbleMenu.ImageDefault
Image editing menu that appears when clicking an image.Actions to hide from the toolbar.
Position relative to the image.
Distance from the image in pixels.
Called when the bubble menu is hidden.
Custom URL validator. Return the valid URL string or
null.Called after a link is applied to the image.
Called after a link is removed from the image.
Combining menus
A typical email editor uses multiple bubble menus together. UsehideWhenActiveNodes and hideWhenActiveMarks
to prevent overlapping menus:
Compound components
Build fully custom menus using the compound API.BubbleMenu
Base container for all custom bubble menus. Provides editor context to children. When rendered without children, it automatically renders the default text formatting toolbar.Controls when the menu is visible. Defaults to showing on text selection.
Use
bubbleMenuTriggers for common patterns.Unique key for the ProseMirror plugin backing this menu. Required when
rendering multiple
BubbleMenu instances to avoid collisions.
Import PluginKey from @tiptap/pm/state.Node types that prevent the menu from showing.
Mark types that prevent the menu from showing.
Position relative to the selection.
Distance from the selection in pixels.
Called when the bubble menu is hidden.
bubbleMenuTriggers
Factory for commontrigger functions:
Text formatting items
Link components
Button components
Image components
Custom menu example
Here’s a complete custom link bubble menu built from compound components:LinkToolbar automatically hides when LinkEditLink is clicked, and LinkForm
appears in its place. When the user submits or cancels, the toolbar reappears.
Context
UseuseBubbleMenuContext() inside any child of BubbleMenu to access the editor and editing state: