@ -174,6 +174,7 @@ import {
viewportCoordsToSceneCoords ,
viewportCoordsToSceneCoords ,
withBatchedUpdates ,
withBatchedUpdates ,
} from "../utils" ;
} from "../utils" ;
import { isMobile } from "../is-mobile" ;
import ContextMenu from "./ContextMenu" ;
import ContextMenu from "./ContextMenu" ;
import LayerUI from "./LayerUI" ;
import LayerUI from "./LayerUI" ;
import { Stats } from "./Stats" ;
import { Stats } from "./Stats" ;
@ -3625,22 +3626,25 @@ class App extends React.Component<ExcalidrawProps, AppState> {
const separator = "separator" ;
const separator = "separator" ;
const _isMobile = isMobile ( ) ;
const elements = this . scene . getElements ( ) ;
const elements = this . scene . getElements ( ) ;
const element = this . getElementAtPosition ( x , y ) ;
const element = this . getElementAtPosition ( x , y ) ;
if ( ! element ) {
if ( ! element ) {
ContextMenu . push ( {
ContextMenu . push ( {
options : [
options : [
navigator . clipboard && {
_isMobile &&
name : "paste" ,
navigator . clipboard && {
perform : ( elements , appStates ) = > {
name : "paste" ,
this . pasteFromClipboard ( null ) ;
perform : ( elements , appStates ) = > {
return {
this . pasteFromClipboard ( null ) ;
commitToHistory : false ,
return {
} ;
commitToHistory : false ,
} ;
} ,
contextItemLabel : "labels.paste" ,
} ,
} ,
contextItemLabel : "labels.paste" ,
_isMobile && navigator . clipboard && separator ,
} ,
separator ,
probablySupportsClipboardBlob &&
probablySupportsClipboardBlob &&
elements . length > 0 &&
elements . length > 0 &&
actionCopyAsPng ,
actionCopyAsPng ,
@ -3669,19 +3673,20 @@ class App extends React.Component<ExcalidrawProps, AppState> {
ContextMenu . push ( {
ContextMenu . push ( {
options : [
options : [
actionCut ,
_isMobile && actionCut ,
navigator . clipboard && actionCopy ,
_isMobile && navigator . clipboard && actionCopy ,
navigator . clipboard && {
_isMobile &&
name : "paste" ,
navigator . clipboard && {
perform : ( elements , appStates ) = > {
name : "paste" ,
this . pasteFromClipboard ( null ) ;
perform : ( elements , appStates ) = > {
return {
this . pasteFromClipboard ( null ) ;
commitToHistory : false ,
return {
} ;
commitToHistory : false ,
} ;
} ,
contextItemLabel : "labels.paste" ,
} ,
} ,
contextItemLabel : "labels.paste" ,
_isMobile && separator ,
} ,
separator ,
probablySupportsClipboardBlob && actionCopyAsPng ,
probablySupportsClipboardBlob && actionCopyAsPng ,
probablySupportsClipboardWriteText && actionCopyAsSvg ,
probablySupportsClipboardWriteText && actionCopyAsSvg ,
separator ,
separator ,