|  | @@ -1,29 +1,25 @@
 | 
	
		
			
				|  |  | -import {
 | 
	
		
			
				|  |  | -  ExcalidrawElement,
 | 
	
		
			
				|  |  | -  NonDeletedExcalidrawElement,
 | 
	
		
			
				|  |  | -} from "../element/types";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import { getDefaultAppState } from "../appState";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import { AppState } from "../types";
 | 
	
		
			
				|  |  | -import { exportToCanvas, exportToSvg } from "../scene/export";
 | 
	
		
			
				|  |  |  import { fileSave } from "browser-nativefs";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import { t } from "../i18n";
 | 
	
		
			
				|  |  | +import { EVENT_IO, trackEvent } from "../analytics";
 | 
	
		
			
				|  |  | +import { getDefaultAppState } from "../appState";
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    copyCanvasToClipboardAsPng,
 | 
	
		
			
				|  |  |    copyTextToSystemClipboard,
 | 
	
		
			
				|  |  |  } from "../clipboard";
 | 
	
		
			
				|  |  | -import { serializeAsJSON } from "./json";
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  ExcalidrawElement,
 | 
	
		
			
				|  |  | +  NonDeletedExcalidrawElement,
 | 
	
		
			
				|  |  | +} from "../element/types";
 | 
	
		
			
				|  |  | +import { t } from "../i18n";
 | 
	
		
			
				|  |  | +import { exportToCanvas, exportToSvg } from "../scene/export";
 | 
	
		
			
				|  |  |  import { ExportType } from "../scene/types";
 | 
	
		
			
				|  |  | +import { AppState } from "../types";
 | 
	
		
			
				|  |  | +import { canvasToBlob } from "./blob";
 | 
	
		
			
				|  |  | +import { serializeAsJSON } from "./json";
 | 
	
		
			
				|  |  |  import { restore } from "./restore";
 | 
	
		
			
				|  |  |  import { ImportedDataState } from "./types";
 | 
	
		
			
				|  |  | -import { canvasToBlob } from "./blob";
 | 
	
		
			
				|  |  | -import { EVENT_ACTION, trackEvent } from "../analytics";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export { loadFromBlob } from "./blob";
 | 
	
		
			
				|  |  | -export { saveAsJSON, loadFromJSON } from "./json";
 | 
	
		
			
				|  |  | +export { loadFromJSON, saveAsJSON } from "./json";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const BACKEND_GET = process.env.REACT_APP_BACKEND_V1_GET_URL;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -218,7 +214,7 @@ export const exportToBackend = async (
 | 
	
		
			
				|  |  |        url.hash = `json=${json.id},${exportedKey.k!}`;
 | 
	
		
			
				|  |  |        const urlString = url.toString();
 | 
	
		
			
				|  |  |        window.prompt(`🔒${t("alerts.uploadedSecurly")}`, urlString);
 | 
	
		
			
				|  |  | -      trackEvent(EVENT_ACTION, "export", "backend");
 | 
	
		
			
				|  |  | +      trackEvent(EVENT_IO, "export", "backend");
 | 
	
		
			
				|  |  |      } else if (json.error_class === "RequestTooLargeError") {
 | 
	
		
			
				|  |  |        window.alert(t("alerts.couldNotCreateShareableLinkTooBig"));
 | 
	
		
			
				|  |  |      } else {
 | 
	
	
		
			
				|  | @@ -265,7 +261,7 @@ const importFromBackend = async (
 | 
	
		
			
				|  |  |        data = await response.json();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    trackEvent(EVENT_ACTION, "import");
 | 
	
		
			
				|  |  | +    trackEvent(EVENT_IO, "import");
 | 
	
		
			
				|  |  |      return {
 | 
	
		
			
				|  |  |        elements: data.elements || null,
 | 
	
		
			
				|  |  |        appState: data.appState || null,
 | 
	
	
		
			
				|  | @@ -322,10 +318,10 @@ export const exportCanvas = async (
 | 
	
		
			
				|  |  |          fileName: `${name}.svg`,
 | 
	
		
			
				|  |  |          extensions: [".svg"],
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  | -      trackEvent(EVENT_ACTION, "export", "svg");
 | 
	
		
			
				|  |  | +      trackEvent(EVENT_IO, "export", "svg");
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      } else if (type === "clipboard-svg") {
 | 
	
		
			
				|  |  | -      trackEvent(EVENT_ACTION, "export", "clipboard-svg");
 | 
	
		
			
				|  |  | +      trackEvent(EVENT_IO, "export", "clipboard-svg");
 | 
	
		
			
				|  |  |        copyTextToSystemClipboard(tempSvg.outerHTML);
 | 
	
		
			
				|  |  |        return;
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -357,11 +353,11 @@ export const exportCanvas = async (
 | 
	
		
			
				|  |  |        fileName,
 | 
	
		
			
				|  |  |        extensions: [".png"],
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | -    trackEvent(EVENT_ACTION, "export", "png");
 | 
	
		
			
				|  |  | +    trackEvent(EVENT_IO, "export", "png");
 | 
	
		
			
				|  |  |    } else if (type === "clipboard") {
 | 
	
		
			
				|  |  |      try {
 | 
	
		
			
				|  |  |        await copyCanvasToClipboardAsPng(tempCanvas);
 | 
	
		
			
				|  |  | -      trackEvent(EVENT_ACTION, "export", "clipboard-png");
 | 
	
		
			
				|  |  | +      trackEvent(EVENT_IO, "export", "clipboard-png");
 | 
	
		
			
				|  |  |      } catch (error) {
 | 
	
		
			
				|  |  |        if (error.name === "CANVAS_POSSIBLY_TOO_BIG") {
 | 
	
		
			
				|  |  |          throw error;
 |