diff --git a/src/actions/actionClipboard.tsx b/src/actions/actionClipboard.tsx index cceaf353..473c56e3 100644 --- a/src/actions/actionClipboard.tsx +++ b/src/actions/actionClipboard.tsx @@ -4,9 +4,8 @@ import { copyTextToSystemClipboard, copyToClipboard } from "../clipboard"; import { actionDeleteSelected } from "./actionDeleteSelected"; import { getSelectedElements } from "../scene/selection"; import { exportCanvas } from "../data/index"; -import { getNonDeletedElements } from "../element"; +import { getNonDeletedElements, isTextElement } from "../element"; import { t } from "../i18n"; -import { ExcalidrawTextElement } from "../element/types"; export const actionCopy = register({ name: "copy", @@ -131,10 +130,19 @@ export const actionCopyAsPng = register({ export const copyAllTextNodesAsText = register({ name: "copyAllTextNodesAsText", trackEvent: { category: "element" }, - perform: (elements) => { - const text = ( - getNonDeletedElements(elements) as ExcalidrawTextElement[] - ).reduce((acc, element) => `${acc}${element.text}\n`, ""); + perform: (elements, appState) => { + const selectedElements = getSelectedElements( + getNonDeletedElements(elements), + appState, + true, + ); + + const text = selectedElements.reduce((acc, element) => { + if (isTextElement(element)) { + return `${acc}${element.text}\n\n`; + } + return acc; + }, ""); copyTextToSystemClipboard(text); return { commitToHistory: false, diff --git a/src/components/App.tsx b/src/components/App.tsx index a59a45d4..c9a141f3 100644 --- a/src/components/App.tsx +++ b/src/components/App.tsx @@ -5476,7 +5476,10 @@ class App extends React.Component { const elements = this.scene.getElements(); - const isTextNodesOnly = elements.every((element) => isTextElement(element)); + const selectedElements = getSelectedElements( + this.scene.getElements(), + this.state, + ); const options: ContextMenuOption[] = []; if (probablySupportsClipboardBlob && elements.length > 0) { @@ -5487,11 +5490,7 @@ class App extends React.Component { options.push(actionCopyAsSvg); } - if ( - probablySupportsClipboardWriteText && - elements.length > 0 && - isTextNodesOnly - ) { + if (probablySupportsClipboardWriteText && selectedElements.length > 0) { options.push(copyAllTextNodesAsText); } if (type === "canvas") { @@ -5538,8 +5537,7 @@ class App extends React.Component { elements.length > 0 && actionCopyAsSvg, probablySupportsClipboardWriteText && - elements.length > 0 && - isTextNodesOnly && + selectedElements.length > 0 && copyAllTextNodesAsText, ((probablySupportsClipboardBlob && elements.length > 0) || (probablySupportsClipboardWriteText && elements.length > 0)) &&