@@ -3,14 +3,18 @@ import { ReactNode, useState } from "react";
33import { useComponentsContext } from "../../editor/ComponentsContext.js" ;
44import { useBlockNoteContext } from "../../editor/BlockNoteContext.js" ;
55import Picker from "./EmojiMartPicker.js" ;
6+ import { createPortal } from "react-dom" ;
7+ import { useBlockNoteEditor } from "../../hooks/useBlockNoteEditor.js" ;
68
79export const EmojiPicker = ( props : {
810 onEmojiSelect : ( emoji : { native : string } ) => void ;
11+ onOpenChange ?: ( open : boolean ) => void ;
912 children : ReactNode ;
1013} ) => {
1114 const [ open , setOpen ] = useState ( false ) ;
1215
1316 const Components = useComponentsContext ( ) ! ;
17+ const editor = useBlockNoteEditor ( ) ;
1418 const blockNoteContext = useBlockNoteContext ( ) ;
1519
1620 return (
@@ -24,6 +28,7 @@ export const EmojiPicker = (props: {
2428 event . preventDefault ( ) ;
2529 event . stopPropagation ( ) ;
2630 setOpen ( ! open ) ;
31+ props . onOpenChange ?.( ! open ) ;
2732 } }
2833 style = { {
2934 display : "flex" ,
@@ -34,17 +39,27 @@ export const EmojiPicker = (props: {
3439 { props . children }
3540 </ div >
3641 </ Components . Generic . Popover . Trigger >
37- < Components . Generic . Popover . Content variant = { "panel-popover" } >
38- < Picker
39- perLine = { 7 }
40- onClickOutside = { ( ) => setOpen ( false ) }
41- onEmojiSelect = { ( emoji : { native : string } ) => {
42- props . onEmojiSelect ( emoji ) ;
43- setOpen ( false ) ;
44- } }
45- theme = { blockNoteContext ?. colorSchemePreference }
46- />
47- </ Components . Generic . Popover . Content >
42+ { createPortal (
43+ < Components . Generic . Popover . Content
44+ className = { "bn-emoji-picker-popover" }
45+ variant = { "panel-popover" }
46+ >
47+ < Picker
48+ perLine = { 7 }
49+ onClickOutside = { ( ) => {
50+ setOpen ( false ) ;
51+ props . onOpenChange ?.( false ) ;
52+ } }
53+ onEmojiSelect = { ( emoji : { native : string } ) => {
54+ props . onEmojiSelect ( emoji ) ;
55+ setOpen ( false ) ;
56+ props . onOpenChange ?.( false ) ;
57+ } }
58+ theme = { blockNoteContext ?. colorSchemePreference }
59+ />
60+ </ Components . Generic . Popover . Content > ,
61+ editor . domElement ! . parentElement ! ,
62+ ) }
4863 </ Components . Generic . Popover . Root >
4964 ) ;
5065} ;
0 commit comments