import { ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawGenericElement, ExcalidrawImageElement, ExcalidrawLinearElement, ExcalidrawSelectionElement, ExcalidrawTextElement, FontFamilyValues, TextAlign, VerticalAlign, } from "../element/types"; import { AppState, BinaryFiles, LibraryItems, LibraryItems_anyVersion, } from "../types"; import type { cleanAppStateForExport } from "../appState"; import { VERSIONS } from "../constants"; import { MarkOptional } from "../utility-types"; import { ElementConstructorOpts } from "../element/newElement"; export interface ExportedDataState { type: string; version: number; source: string; elements: readonly ExcalidrawElement[]; appState: ReturnType; files: BinaryFiles | undefined; } /** * Map of legacy AppState keys, with values of: * [, ] * * This is a helper type used in downstream abstractions. * Don't consume on its own. */ export type LegacyAppState = { /** @deprecated #6213 TODO remove 23-06-01 */ isSidebarDocked: [boolean, "defaultSidebarDockedPreference"]; }; export type ValidLinearElement = { type: "arrow" | "line"; x: number; y: number; label?: { text: string; fontSize?: number; fontFamily?: FontFamilyValues; textAlign?: TextAlign; verticalAlign?: VerticalAlign; } & MarkOptional; end?: | ( | { type: Exclude< ExcalidrawBindableElement["type"], "image" | "selection" | "text" >; id?: ExcalidrawGenericElement["id"]; } | ({ type: "text"; text: string; id?: ExcalidrawTextElement["id"]; } & Partial) ) & MarkOptional; start?: | ( | { type: Exclude< ExcalidrawBindableElement["type"], "image" | "selection" | "text" >; id?: ExcalidrawGenericElement["id"]; } | ({ type: "text"; text: string; id?: ExcalidrawTextElement["id"]; } & Partial) ) & MarkOptional; } & Partial; export type ValidContainer = | { type: Exclude; id?: ExcalidrawGenericElement["id"]; label?: { text: string; fontSize?: number; fontFamily?: FontFamilyValues; textAlign?: TextAlign; verticalAlign?: VerticalAlign; } & MarkOptional; } & ElementConstructorOpts; export interface ImportedDataState { type?: string; version?: number; source?: string; elements?: | readonly ( | Extract< ExcalidrawElement, | ExcalidrawSelectionElement | ExcalidrawImageElement | ExcalidrawFreeDrawElement > | ({ type: Extract; x: number; y: number; } & Partial) | ValidContainer | ValidLinearElement | ({ type: "text"; text: string; x: number; y: number; id?: ExcalidrawTextElement["id"]; } & Partial) )[] | null; appState?: Readonly< Partial< AppState & { [T in keyof LegacyAppState]: LegacyAppState[T][0]; } > > | null; scrollToContent?: boolean; libraryItems?: LibraryItems_anyVersion; files?: BinaryFiles; } export interface ExportedLibraryData { type: string; version: typeof VERSIONS.excalidrawLibrary; source: string; libraryItems: LibraryItems; } export interface ImportedLibraryData extends Partial { /** @deprecated v1 */ library?: LibraryItems; }