import type { Drawing } from "../types"; export interface ExportData { type: "excalidraw"; version: 2; source: string; elements: any[]; appState: any; files: Record; } /** * Export a drawing to a .excalidraw file and trigger download */ export const exportDrawingToFile = ( drawing: Drawing, filename?: string ): void => { const exportData: ExportData = { type: "excalidraw", version: 2, source: window.location.origin, elements: drawing.elements || [], appState: { gridSize: drawing.appState?.gridSize ?? null, viewBackgroundColor: drawing.appState?.viewBackgroundColor ?? "#ffffff", }, files: drawing.files || {}, }; const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: "application/json", }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = filename || `${drawing.name}.excalidraw`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); }; /** * Export drawing from Editor with current state */ export const exportFromEditor = ( name: string, elements: readonly any[], appState: any, files: Record ): void => { const exportData: ExportData = { type: "excalidraw", version: 2, source: window.location.origin, elements: Array.from(elements), appState: { gridSize: appState?.gridSize ?? null, viewBackgroundColor: appState?.viewBackgroundColor ?? "#ffffff", }, files: files || {}, }; const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: "application/json", }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = `${name}.excalidraw`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); };