@@ -296,7 +296,12 @@ export function MdEditor() {
296296 editorElement ?. addEventListener ( 'click' , handleClick )
297297
298298 // 监听失焦事件,隐藏浮动工具栏并取消正在进行的补全
299+ let isClickingFloatBar = false
299300 const handleBlur = ( e : FocusEvent ) => {
301+ // 如果正在点击浮动工具栏,不隐藏
302+ if ( isClickingFloatBar ) {
303+ return
304+ }
300305 // 检查失焦是否不是因为点击了浮动工具栏本身
301306 const floatBarElement = document . querySelector ( '[data-float-bar="true"]' )
302307 if ( floatBarElement && floatBarElement . contains ( e . relatedTarget as Node ) ) {
@@ -306,6 +311,18 @@ export function MdEditor() {
306311 // 取消正在进行的补全
307312 cancelCompletion ( )
308313 }
314+
315+ // 监听浮动工具栏的点击事件
316+ const handleFloatBarMouseDown = ( ) => {
317+ isClickingFloatBar = true
318+ }
319+ const handleFloatBarMouseUp = ( ) => {
320+ isClickingFloatBar = false
321+ }
322+
323+ emitter . on ( 'floatbar-mousedown' , handleFloatBarMouseDown )
324+ emitter . on ( 'floatbar-mouseup' , handleFloatBarMouseUp )
325+
309326 editorElement ?. addEventListener ( 'blur' , handleBlur , true )
310327
311328 // 监听 beforeinput 事件,在输入前就清除补全预览
@@ -324,6 +341,8 @@ export function MdEditor() {
324341 editorElement ?. removeEventListener ( 'click' , handleClick )
325342 editorElement ?. removeEventListener ( 'blur' , handleBlur , true )
326343 editorElement ?. removeEventListener ( 'beforeinput' , handleBeforeInput )
344+ emitter . off ( 'floatbar-mousedown' , handleFloatBarMouseDown )
345+ emitter . off ( 'floatbar-mouseup' , handleFloatBarMouseUp )
327346 }
328347 } ,
329348 input : async ( value ) => {
0 commit comments