Adding Block Side Menu Buttons
In this example, we replace the button to add a block in the Block Side Menu, with a button to remove the hovered block.
Try it out: Hover a block to open the Block Side Menu, and click the new button!
Relevant Docs:
import "@blocknote/core/fonts/inter.css";import { BlockNoteView } from "@blocknote/mantine";import "@blocknote/mantine/style.css";import { DragHandleButton, SideMenu, SideMenuController, useCreateBlockNote,} from "@blocknote/react";import { RemoveBlockButton } from "./RemoveBlockButton";export default function App() { // Creates a new editor instance. const editor = useCreateBlockNote({ initialContent: [ { type: "paragraph", content: "Welcome to this demo!", }, { type: "paragraph", content: "<- Notice the new button in the side menu", }, { type: "paragraph", content: "Click it to remove the hovered block", }, { type: "paragraph", }, ], }); // Renders the editor instance. return ( <BlockNoteView editor={editor} sideMenu={false}> <SideMenuController sideMenu={(props) => ( <SideMenu {...props}> {/* Button which removes the hovered block. */} <RemoveBlockButton /> <DragHandleButton {...props} /> </SideMenu> )} /> </BlockNoteView> );}import {} from "@blocknote/core";import { SideMenuExtension } from "@blocknote/core/extensions";import { useBlockNoteEditor, useComponentsContext, useExtensionState,} from "@blocknote/react";import { MdDelete } from "react-icons/md";// Custom Side Menu button to remove the hovered block.export function RemoveBlockButton() { const editor = useBlockNoteEditor(); const Components = useComponentsContext()!; const block = useExtensionState(SideMenuExtension, { selector: (state) => state?.block, }); if (!block) { return null; } return ( <Components.SideMenu.Button label="Remove block" icon={ <MdDelete size={24} onClick={() => { editor.removeBlocks([block]); }} /> } /> );}