types.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { ExcalidrawElement, PointerType } from "./element/types";
  2. import { SHAPES } from "./shapes";
  3. export type FlooredNumber = number & { _brand: "FlooredNumber" };
  4. export type AppState = {
  5. draggingElement: ExcalidrawElement | null;
  6. resizingElement: ExcalidrawElement | null;
  7. multiElement: ExcalidrawElement | null;
  8. selectionElement: ExcalidrawElement | null;
  9. // element being edited, but not necessarily added to elements array yet
  10. // (e.g. text element when typing into the input)
  11. editingElement: ExcalidrawElement | null;
  12. elementType: typeof SHAPES[number]["value"];
  13. elementLocked: boolean;
  14. exportBackground: boolean;
  15. currentItemStrokeColor: string;
  16. currentItemBackgroundColor: string;
  17. currentItemFillStyle: string;
  18. currentItemStrokeWidth: number;
  19. currentItemRoughness: number;
  20. currentItemOpacity: number;
  21. currentItemFont: string;
  22. viewBackgroundColor: string;
  23. scrollX: FlooredNumber;
  24. scrollY: FlooredNumber;
  25. cursorX: number;
  26. cursorY: number;
  27. scrolledOutside: boolean;
  28. name: string;
  29. selectedId?: string;
  30. isCollaborating: boolean;
  31. isResizing: boolean;
  32. zoom: number;
  33. openMenu: "canvas" | "shape" | null;
  34. lastPointerDownWith: PointerType;
  35. selectedElementIds: { [id: string]: boolean };
  36. collaborators: Map<string, { pointer?: { x: number; y: number } }>;
  37. };
  38. export type PointerCoords = Readonly<{
  39. x: number;
  40. y: number;
  41. }>;
  42. export type Gesture = {
  43. pointers: Map<number, PointerCoords>;
  44. lastCenter: { x: number; y: number } | null;
  45. initialDistance: number | null;
  46. initialScale: number | null;
  47. };
  48. export declare class GestureEvent extends UIEvent {
  49. readonly rotation: number;
  50. readonly scale: number;
  51. }