@@ -9,16 +9,11 @@ import {
99 uploadToTmpFilesDotOrg_DEV_ONLY ,
1010} from "@blocknote/core" ;
1111import {
12+ BlockNoteDefaultUI ,
1213 BlockNoteView ,
1314 createReactInlineContentSpec ,
14- DefaultSlashMenu ,
15- FormattingToolbarPositioner ,
16- HyperlinkToolbarPositioner ,
17- ImageToolbarPositioner ,
18- SideMenuPositioner ,
19- SlashMenuPositioner ,
20- SuggestionMenuPositioner ,
21- TableHandlesPositioner ,
15+ DefaultPositionedSuggestionMenu ,
16+ SuggestionMenuItemProps ,
2217 useBlockNote ,
2318} from "@blocknote/react" ;
2419import "@blocknote/react/style.css" ;
@@ -53,17 +48,23 @@ const customInlineContentSchema = {
5348 mention : MentionInlineContent . config ,
5449} satisfies InlineContentSchema ;
5550
56- async function getMentionMenuItems ( query : string ) {
51+ async function getMentionMenuItems (
52+ editor : BlockNoteEditor <
53+ DefaultBlockSchema ,
54+ typeof customInlineContentSchema ,
55+ DefaultStyleSchema
56+ > ,
57+ query : string ,
58+ closeMenu : ( ) => void ,
59+ clearQuery : ( ) => void
60+ ) : Promise < SuggestionMenuItemProps [ ] > {
5761 const users = [ "Steve" , "Bob" , "Joe" , "Mike" ] ;
58- const items = users . map ( ( user ) => ( {
62+ const items : SuggestionMenuItemProps [ ] = users . map ( ( user ) => ( {
5963 name : user ,
60- execute : (
61- editor : BlockNoteEditor <
62- DefaultBlockSchema ,
63- typeof customInlineContentSchema ,
64- DefaultStyleSchema
65- >
66- ) => {
64+ execute : ( ) => {
65+ closeMenu ( ) ;
66+ clearQuery ( ) ;
67+
6768 editor . _tiptapEditor . commands . insertContent ( {
6869 type : "mention" ,
6970 attrs : {
@@ -94,32 +95,21 @@ export function App() {
9495 } ,
9596 } ,
9697 uploadFile : uploadToTmpFilesDotOrg_DEV_ONLY ,
97- extraSuggestionMenus : [
98- {
99- name : "mentions" ,
100- triggerCharacter : "@" ,
101- getItems : getMentionMenuItems ,
102- } ,
103- ] ,
10498 } ) ;
10599
106100 // Give tests a way to get prosemirror instance
107101 ( window as WindowWithProseMirror ) . ProseMirror = editor ?. _tiptapEditor ;
108102
103+ // TODO: Figure out cleaner API for adding/changing/removing menus & toolbars
109104 return (
110105 < BlockNoteView className = "root" editor = { editor } >
111- < FormattingToolbarPositioner editor = { editor } />
112- < HyperlinkToolbarPositioner editor = { editor } />
113- < SlashMenuPositioner editor = { editor } />
114- < SideMenuPositioner editor = { editor } />
115- < ImageToolbarPositioner editor = { editor } />
116- { editor . blockSchema . table && (
117- < TableHandlesPositioner editor = { editor as any } />
118- ) }
119- < SuggestionMenuPositioner
120- editor = { editor as any }
121- suggestionsMenuName = { "mentions" }
122- suggestionsMenuComponent = { DefaultSlashMenu }
106+ < BlockNoteDefaultUI editor = { editor } />
107+ < DefaultPositionedSuggestionMenu
108+ editor = { editor }
109+ triggerCharacter = { "@" }
110+ getItems = { ( query , closeMenu , clearQuery ) =>
111+ getMentionMenuItems ( editor , query , closeMenu , clearQuery )
112+ }
123113 />
124114 </ BlockNoteView >
125115 ) ;
0 commit comments