import { Point } from "../types"; import { FONT_FAMILY } from "../constants"; export type GroupId = string; type _ExcalidrawElementBase = Readonly<{ id: string; x: number; y: number; strokeColor: string; backgroundColor: string; fillStyle: string; strokeWidth: number; strokeStyle: "solid" | "dashed" | "dotted"; strokeSharpness: "round" | "sharp"; roughness: number; opacity: number; width: number; height: number; angle: number; seed: number; version: number; versionNonce: number; isDeleted: boolean; groupIds: readonly GroupId[]; boundElementIds: readonly ExcalidrawLinearElement["id"][] | null; }>; export type ExcalidrawSelectionElement = _ExcalidrawElementBase & { type: "selection"; }; export type ExcalidrawRectangleElement = _ExcalidrawElementBase & { type: "rectangle"; }; export type ExcalidrawDiamondElement = _ExcalidrawElementBase & { type: "diamond"; }; export type ExcalidrawEllipseElement = _ExcalidrawElementBase & { type: "ellipse"; }; /** * These are elements that don't have any additional properties. */ export type ExcalidrawGenericElement = | ExcalidrawSelectionElement | ExcalidrawRectangleElement | ExcalidrawDiamondElement | ExcalidrawEllipseElement; /** * ExcalidrawElement should be JSON serializable and (eventually) contain * no computed data. The list of all ExcalidrawElements should be shareable * between peers and contain no state local to the peer. */ export type ExcalidrawElement = | ExcalidrawGenericElement | ExcalidrawTextElement | ExcalidrawLinearElement; export type NonDeleted = TElement & { isDeleted: false; }; export type NonDeletedExcalidrawElement = NonDeleted; export type ExcalidrawTextElement = _ExcalidrawElementBase & Readonly<{ type: "text"; fontSize: number; fontFamily: FontFamily; text: string; baseline: number; textAlign: TextAlign; verticalAlign: VerticalAlign; }>; export type ExcalidrawBindableElement = | ExcalidrawRectangleElement | ExcalidrawDiamondElement | ExcalidrawEllipseElement | ExcalidrawTextElement; export type PointBinding = { elementId: ExcalidrawBindableElement["id"]; focus: number; gap: number; }; export type ExcalidrawLinearElement = _ExcalidrawElementBase & Readonly<{ type: "arrow" | "line" | "draw"; points: readonly Point[]; lastCommittedPoint: Point | null; startBinding: PointBinding | null; endBinding: PointBinding | null; }>; export type PointerType = "mouse" | "pen" | "touch"; export type TextAlign = "left" | "center" | "right"; export type VerticalAlign = "top" | "middle"; export type FontFamily = keyof typeof FONT_FAMILY; export type FontString = string & { _brand: "fontString" };