diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index a70cb9808..8d99838e4 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -3062,8 +3062,10 @@ class App extends React.Component { this.lastViewportPosition.x, this.lastViewportPosition.y, ); + + const data = await parseClipboard(event, isPlainPaste); if ( - event && + event && data.text && (!(elementUnderCursor instanceof HTMLCanvasElement) || isWritableElement(target)) ) { @@ -3082,7 +3084,6 @@ class App extends React.Component { // event else some browsers (FF...) will clear the clipboardData // (something something security) let file = event?.clipboardData?.files[0]; - const data = await parseClipboard(event, isPlainPaste); if (!file && !isPlainPaste) { if (data.mixedContent) { return this.addElementsFromMixedContentPaste(data.mixedContent, { @@ -3150,12 +3151,18 @@ class App extends React.Component { : data.elements ) as readonly ExcalidrawElement[]; // TODO remove formatting from elements if isPlainPaste + const position = isWritableElement(target) && this.lastPointerDownEvent + ? { clientX: this.lastPointerDownEvent.pageX, clientY: this.lastPointerDownEvent.pageY } + : "cursor"; this.addElementsFromPasteOrLibrary({ elements, files: data.files || null, - position: "cursor", + position, retainSeed: isPlainPaste, }); + if(isWritableElement(target)){ + this.focusContainer(); + } } else if (data.text) { if (data.text && isMaybeMermaidDefinition(data.text)) { const api = await import("@excalidraw/mermaid-to-excalidraw");