| 
					
				 | 
			
			
				@@ -38,6 +38,7 @@ import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   loadFromBlob, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SOCKET_SERVER, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   SocketUpdateDataSource, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  exportCanvas, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } from "../data"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { restore } from "../data/restore"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -72,7 +73,11 @@ import { ActionResult } from "../actions/types"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { getDefaultAppState } from "../appState"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { t, getLanguage } from "../i18n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { copyToAppClipboard, getClipboardContent } from "../clipboard"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  copyToAppClipboard, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  getClipboardContent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  probablySupportsClipboardBlob, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} from "../clipboard"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { normalizeScroll } from "../scene"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { getCenter, getDistance } from "../gesture"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { createUndoAction, createRedoAction } from "../actions/actionHistory"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -582,6 +587,12 @@ export class App extends React.Component<any, AppState> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (event.code === "KeyC" && event.altKey && event.shiftKey) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.copyToClipboardAsPng(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      event.preventDefault(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (this.actionManager.handleKeyDown(event)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -643,6 +654,17 @@ export class App extends React.Component<any, AppState> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     copyToAppClipboard(elements, this.state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  private copyToClipboardAsPng = () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    const selectedElements = getSelectedElements(elements, this.state); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    exportCanvas( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      "clipboard", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      selectedElements.length ? selectedElements : elements, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.state, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.canvas!, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.state, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   private pasteFromClipboard = async (event: ClipboardEvent | null) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // #686 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const target = document.activeElement; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -817,6 +839,11 @@ export class App extends React.Component<any, AppState> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       label: t("labels.paste"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       action: () => this.pasteFromClipboard(null), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    probablySupportsClipboardBlob && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      elements.length > 0 && { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        label: t("labels.copyAsPng"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        action: this.copyToClipboardAsPng, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ...this.actionManager.getContextMenuItems(action => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       this.canvasOnlyActions.includes(action.name), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     ), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -841,6 +868,10 @@ export class App extends React.Component<any, AppState> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     label: t("labels.paste"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     action: () => this.pasteFromClipboard(null), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  probablySupportsClipboardBlob && { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    label: t("labels.copyAsPng"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    action: this.copyToClipboardAsPng, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   ...this.actionManager.getContextMenuItems( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     action => !this.canvasOnlyActions.includes(action.name), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   ), 
			 |