* Use Theme type everywhere * Rename Appearance type to Theme for consistency * Reorder headers in readme The host don't need to pass hardcoded strings any more and instead can use the exported constant
136 lines
4.0 KiB
TypeScript
136 lines
4.0 KiB
TypeScript
import { Point } from "../types";
|
|
import { FONT_FAMILY, THEME } from "../constants";
|
|
|
|
export type ChartType = "bar" | "line";
|
|
export type FillStyle = "hachure" | "cross-hatch" | "solid";
|
|
export type FontFamilyKeys = keyof typeof FONT_FAMILY;
|
|
export type FontFamilyValues = typeof FONT_FAMILY[FontFamilyKeys];
|
|
export type Theme = typeof THEME[keyof typeof THEME];
|
|
export type FontString = string & { _brand: "fontString" };
|
|
export type GroupId = string;
|
|
export type PointerType = "mouse" | "pen" | "touch";
|
|
export type StrokeSharpness = "round" | "sharp";
|
|
export type StrokeStyle = "solid" | "dashed" | "dotted";
|
|
export type TextAlign = "left" | "center" | "right";
|
|
export type VerticalAlign = "top" | "middle";
|
|
|
|
type _ExcalidrawElementBase = Readonly<{
|
|
id: string;
|
|
x: number;
|
|
y: number;
|
|
strokeColor: string;
|
|
backgroundColor: string;
|
|
fillStyle: FillStyle;
|
|
strokeWidth: number;
|
|
strokeStyle: StrokeStyle;
|
|
strokeSharpness: StrokeSharpness;
|
|
roughness: number;
|
|
opacity: number;
|
|
width: number;
|
|
height: number;
|
|
angle: number;
|
|
/** Random integer used to seed shape generation so that the roughjs shape
|
|
doesn't differ across renders. */
|
|
seed: number;
|
|
/** Integer that is sequentially incremented on each change. Used to reconcile
|
|
elements during collaboration or when saving to server. */
|
|
version: number;
|
|
/** Random integer that is regenerated on each change.
|
|
Used for deterministic reconciliation of updates during collaboration,
|
|
in case the versions (see above) are identical. */
|
|
versionNonce: number;
|
|
isDeleted: boolean;
|
|
/** List of groups the element belongs to.
|
|
Ordered from deepest to shallowest. */
|
|
groupIds: readonly GroupId[];
|
|
/** Ids of (linear) elements that are bound to this element. */
|
|
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
|
|
| ExcalidrawFreeDrawElement;
|
|
|
|
export type NonDeleted<TElement extends ExcalidrawElement> = TElement & {
|
|
isDeleted: false;
|
|
};
|
|
|
|
export type NonDeletedExcalidrawElement = NonDeleted<ExcalidrawElement>;
|
|
|
|
export type ExcalidrawTextElement = _ExcalidrawElementBase &
|
|
Readonly<{
|
|
type: "text";
|
|
fontSize: number;
|
|
fontFamily: FontFamilyValues;
|
|
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 Arrowhead = "arrow" | "bar" | "dot";
|
|
|
|
export type ExcalidrawLinearElement = _ExcalidrawElementBase &
|
|
Readonly<{
|
|
type: "line" | "arrow";
|
|
points: readonly Point[];
|
|
lastCommittedPoint: Point | null;
|
|
startBinding: PointBinding | null;
|
|
endBinding: PointBinding | null;
|
|
startArrowhead: Arrowhead | null;
|
|
endArrowhead: Arrowhead | null;
|
|
}>;
|
|
|
|
export type ExcalidrawFreeDrawElement = _ExcalidrawElementBase &
|
|
Readonly<{
|
|
type: "freedraw";
|
|
points: readonly Point[];
|
|
pressures: readonly number[];
|
|
simulatePressure: boolean;
|
|
lastCommittedPoint: Point | null;
|
|
}>;
|