import { IMAGE_MIME_TYPES, MIME_TYPES } from "@excalidraw/common"; import type { ValueOf } from "@excalidraw/common/utility-types"; import type { ExcalidrawElement, FileId } from "@excalidraw/element/types"; import type { AppState, DataURL, LibraryItem } from "../types"; import type { FileSystemHandle } from "browser-fs-access"; import type { ImportedLibraryData } from "./types"; export declare const getMimeType: (blob: Blob | string) => string; export declare const getFileHandleType: (handle: FileSystemHandle | null) => string | null; export declare const isImageFileHandleType: (type: string | null) => type is "png" | "svg"; export declare const isImageFileHandle: (handle: FileSystemHandle | null) => boolean; export declare const isSupportedImageFileType: (type: string | null | undefined) => boolean; export declare const isSupportedImageFile: (blob: Blob | null | undefined) => blob is Blob & { type: ValueOf; }; export declare const loadSceneOrLibraryFromBlob: (blob: Blob | File, /** @see restore.localAppState */ localAppState: AppState | null, localElements: readonly ExcalidrawElement[] | null, /** FileSystemHandle. Defaults to `blob.handle` if defined, otherwise null. */ fileHandle?: FileSystemHandle | null) => Promise<{ type: "application/vnd.excalidraw+json"; data: { elements: import("@excalidraw/element/types").OrderedExcalidrawElement[]; appState: { theme: import("@excalidraw/element/types").Theme; frameRendering: { enabled: boolean; name: boolean; outline: boolean; clip: boolean; }; viewBackgroundColor: string; scrollX: number; scrollY: number; zoom: import("../types").Zoom; contextMenu: { items: import("../components/ContextMenu").ContextMenuItems; top: number; left: number; } | null; showWelcomeScreen: boolean; isLoading: boolean; errorMessage: React.ReactNode; activeEmbeddable: { element: import("@excalidraw/element/types").NonDeletedExcalidrawElement; state: "hover" | "active"; } | null; newElement: import("@excalidraw/element/types").NonDeleted | null; resizingElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null; multiElement: import("@excalidraw/element/types").NonDeleted | null; selectionElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null; isBindingEnabled: boolean; boxSelectionMode: import("../types").BoxSelectionMode; bindingPreference: "enabled" | "disabled"; isMidpointSnappingEnabled: boolean; startBoundElement: import("@excalidraw/element/types").NonDeleted | null; suggestedBinding: { element: import("@excalidraw/element/types").NonDeleted; midPoint?: import("@excalidraw/math").GlobalPoint; } | null; frameToHighlight: import("@excalidraw/element/types").NonDeleted | null; editingFrame: string | null; elementsToHighlight: import("@excalidraw/element/types").NonDeleted[] | null; editingTextElement: import("@excalidraw/element/types").ExcalidrawTextElement | null; activeTool: { lastActiveTool: import("../types").ActiveTool | null; locked: boolean; fromSelection: boolean; } & import("../types").ActiveTool; preferredSelectionTool: { type: "selection" | "lasso"; initialized: boolean; }; penMode: boolean; penDetected: boolean; exportBackground: boolean; exportEmbedScene: boolean; exportWithDarkMode: boolean; exportScale: number; currentItemStrokeColor: string; currentItemBackgroundColor: string; currentItemFillStyle: ExcalidrawElement["fillStyle"]; currentItemStrokeWidth: number; currentItemStrokeStyle: ExcalidrawElement["strokeStyle"]; currentItemRoughness: number; currentItemOpacity: number; currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues; currentItemFontSize: number; currentItemTextAlign: import("@excalidraw/element/types").TextAlign; currentItemStartArrowhead: import("@excalidraw/element/types").Arrowhead | null; currentItemEndArrowhead: import("@excalidraw/element/types").Arrowhead | null; currentHoveredFontFamily: import("@excalidraw/element/types").FontFamilyValues | null; currentItemRoundness: import("@excalidraw/element/types").StrokeRoundness; currentItemArrowType: "sharp" | "round" | "elbow"; cursorButton: "up" | "down"; scrolledOutside: boolean; name: string | null; isResizing: boolean; isRotating: boolean; openMenu: "canvas" | null; openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | "compactTextProperties" | "compactStrokeStyles" | "compactOtherProperties" | "compactArrowProperties" | null; openSidebar: { name: import("../types").SidebarName; tab?: import("../types").SidebarTabName; } | null; openDialog: null | { name: "imageExport" | "help" | "jsonExport"; } | { name: "ttd"; tab: "text-to-diagram" | "mermaid"; } | { name: "commandPalette"; } | { name: "settings"; } | { name: "elementLinkSelector"; sourceElementId: ExcalidrawElement["id"]; } | { name: "charts"; data: import("../charts").Spreadsheet; rawText: string; }; defaultSidebarDockedPreference: boolean; lastPointerDownWith: import("@excalidraw/element/types").PointerType; selectedElementIds: Readonly<{ [id: string]: true; }>; hoveredElementIds: Readonly<{ [id: string]: true; }>; previousSelectedElementIds: { [id: string]: true; }; selectedElementsAreBeingDragged: boolean; shouldCacheIgnoreZoom: boolean; toast: { message: string; closable?: boolean; duration?: number; } | null; zenModeEnabled: boolean; gridSize: number; gridStep: number; gridModeEnabled: boolean; viewModeEnabled: boolean; selectedGroupIds: { [groupId: string]: boolean; }; editingGroupId: import("@excalidraw/element/types").GroupId | null; fileHandle: FileSystemHandle | null; collaborators: Map; stats: { open: boolean; panels: number; }; showHyperlinkPopup: false | "info" | "editor"; selectedLinearElement: import("@excalidraw/element").LinearElementEditor | null; snapLines: readonly import("../snapping").SnapLine[]; originSnapOffset: { x: number; y: number; } | null; objectsSnapModeEnabled: boolean; userToFollow: import("../types").UserToFollow | null; followedBy: Set; isCropping: boolean; croppingElementId: ExcalidrawElement["id"] | null; searchMatches: Readonly<{ focusedId: ExcalidrawElement["id"] | null; matches: readonly import("../types").SearchMatch[]; }> | null; activeLockedId: string | null; lockedMultiSelections: { [groupId: string]: true; }; bindMode: import("@excalidraw/element/types").BindMode; }; files: import("../types").BinaryFiles; }; } | { type: "application/vnd.excalidrawlib+json"; data: ImportedLibraryData; }>; export declare const loadFromBlob: (blob: Blob, /** @see restore.localAppState */ localAppState: AppState | null, localElements: readonly ExcalidrawElement[] | null, /** FileSystemHandle. Defaults to `blob.handle` if defined, otherwise null. */ fileHandle?: FileSystemHandle | null) => Promise<{ elements: import("@excalidraw/element/types").OrderedExcalidrawElement[]; appState: { theme: import("@excalidraw/element/types").Theme; frameRendering: { enabled: boolean; name: boolean; outline: boolean; clip: boolean; }; viewBackgroundColor: string; scrollX: number; scrollY: number; zoom: import("../types").Zoom; contextMenu: { items: import("../components/ContextMenu").ContextMenuItems; top: number; left: number; } | null; showWelcomeScreen: boolean; isLoading: boolean; errorMessage: React.ReactNode; activeEmbeddable: { element: import("@excalidraw/element/types").NonDeletedExcalidrawElement; state: "hover" | "active"; } | null; newElement: import("@excalidraw/element/types").NonDeleted | null; resizingElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null; multiElement: import("@excalidraw/element/types").NonDeleted | null; selectionElement: import("@excalidraw/element/types").NonDeletedExcalidrawElement | null; isBindingEnabled: boolean; boxSelectionMode: import("../types").BoxSelectionMode; bindingPreference: "enabled" | "disabled"; isMidpointSnappingEnabled: boolean; startBoundElement: import("@excalidraw/element/types").NonDeleted | null; suggestedBinding: { element: import("@excalidraw/element/types").NonDeleted; midPoint?: import("@excalidraw/math").GlobalPoint; } | null; frameToHighlight: import("@excalidraw/element/types").NonDeleted | null; editingFrame: string | null; elementsToHighlight: import("@excalidraw/element/types").NonDeleted[] | null; editingTextElement: import("@excalidraw/element/types").ExcalidrawTextElement | null; activeTool: { lastActiveTool: import("../types").ActiveTool | null; locked: boolean; fromSelection: boolean; } & import("../types").ActiveTool; preferredSelectionTool: { type: "selection" | "lasso"; initialized: boolean; }; penMode: boolean; penDetected: boolean; exportBackground: boolean; exportEmbedScene: boolean; exportWithDarkMode: boolean; exportScale: number; currentItemStrokeColor: string; currentItemBackgroundColor: string; currentItemFillStyle: ExcalidrawElement["fillStyle"]; currentItemStrokeWidth: number; currentItemStrokeStyle: ExcalidrawElement["strokeStyle"]; currentItemRoughness: number; currentItemOpacity: number; currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues; currentItemFontSize: number; currentItemTextAlign: import("@excalidraw/element/types").TextAlign; currentItemStartArrowhead: import("@excalidraw/element/types").Arrowhead | null; currentItemEndArrowhead: import("@excalidraw/element/types").Arrowhead | null; currentHoveredFontFamily: import("@excalidraw/element/types").FontFamilyValues | null; currentItemRoundness: import("@excalidraw/element/types").StrokeRoundness; currentItemArrowType: "sharp" | "round" | "elbow"; cursorButton: "up" | "down"; scrolledOutside: boolean; name: string | null; isResizing: boolean; isRotating: boolean; openMenu: "canvas" | null; openPopup: "canvasBackground" | "elementBackground" | "elementStroke" | "fontFamily" | "compactTextProperties" | "compactStrokeStyles" | "compactOtherProperties" | "compactArrowProperties" | null; openSidebar: { name: import("../types").SidebarName; tab?: import("../types").SidebarTabName; } | null; openDialog: null | { name: "imageExport" | "help" | "jsonExport"; } | { name: "ttd"; tab: "text-to-diagram" | "mermaid"; } | { name: "commandPalette"; } | { name: "settings"; } | { name: "elementLinkSelector"; sourceElementId: ExcalidrawElement["id"]; } | { name: "charts"; data: import("../charts").Spreadsheet; rawText: string; }; defaultSidebarDockedPreference: boolean; lastPointerDownWith: import("@excalidraw/element/types").PointerType; selectedElementIds: Readonly<{ [id: string]: true; }>; hoveredElementIds: Readonly<{ [id: string]: true; }>; previousSelectedElementIds: { [id: string]: true; }; selectedElementsAreBeingDragged: boolean; shouldCacheIgnoreZoom: boolean; toast: { message: string; closable?: boolean; duration?: number; } | null; zenModeEnabled: boolean; gridSize: number; gridStep: number; gridModeEnabled: boolean; viewModeEnabled: boolean; selectedGroupIds: { [groupId: string]: boolean; }; editingGroupId: import("@excalidraw/element/types").GroupId | null; fileHandle: FileSystemHandle | null; collaborators: Map; stats: { open: boolean; panels: number; }; showHyperlinkPopup: false | "info" | "editor"; selectedLinearElement: import("@excalidraw/element").LinearElementEditor | null; snapLines: readonly import("../snapping").SnapLine[]; originSnapOffset: { x: number; y: number; } | null; objectsSnapModeEnabled: boolean; userToFollow: import("../types").UserToFollow | null; followedBy: Set; isCropping: boolean; croppingElementId: ExcalidrawElement["id"] | null; searchMatches: Readonly<{ focusedId: ExcalidrawElement["id"] | null; matches: readonly import("../types").SearchMatch[]; }> | null; activeLockedId: string | null; lockedMultiSelections: { [groupId: string]: true; }; bindMode: import("@excalidraw/element/types").BindMode; }; files: import("../types").BinaryFiles; }>; export declare const parseLibraryJSON: (json: string, defaultStatus?: LibraryItem["status"]) => LibraryItem[]; export declare const loadLibraryFromBlob: (blob: Blob, defaultStatus?: LibraryItem["status"]) => Promise; export declare const canvasToBlob: (canvas: HTMLCanvasElement | Promise) => Promise; /** generates SHA-1 digest from supplied file (if not supported, falls back to a 40-char base64 random id) */ export declare const generateIdFromFile: (file: File) => Promise; /** async. For sync variant, use getDataURL_sync */ export declare const getDataURL: (file: Blob | File) => Promise; export declare const getDataURL_sync: (data: string | Uint8Array | ArrayBuffer, mimeType: ValueOf) => DataURL; export declare const dataURLToFile: (dataURL: DataURL, filename?: string) => File; export declare const dataURLToString: (dataURL: DataURL) => string; export declare const resizeImageFile: (file: File, opts: { /** undefined indicates auto */ outputType?: (typeof MIME_TYPES)["jpg"]; maxWidthOrHeight: number; }) => Promise; export declare const SVGStringToFile: (SVGString: string, filename?: string) => File & { type: typeof MIME_TYPES.svg; }; export declare const ImageURLToFile: (imageUrl: string, filename?: string) => Promise; export declare const getFileHandle: (event: DragEvent | React.DragEvent | DataTransferItem) => Promise; export declare const createFile: (blob: File | Blob | ArrayBuffer, mimeType: string, name: string | undefined) => File; /** attempts to detect correct mimeType if none is set, or if an image * has an incorrect extension. * Note: doesn't handle missing .excalidraw/.excalidrawlib extension */ export declare const normalizeFile: (file: File) => Promise; export declare const blobToArrayBuffer: (blob: Blob) => Promise;