types.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import {
  2. ExcalidrawElement,
  3. PointerType,
  4. ExcalidrawLinearElement,
  5. } from "./element/types";
  6. import { SHAPES } from "./shapes";
  7. import { Point as RoughPoint } from "roughjs/bin/geometry";
  8. export type FlooredNumber = number & { _brand: "FlooredNumber" };
  9. export type Point = Readonly<RoughPoint>;
  10. export type AppState = {
  11. isLoading: boolean;
  12. errorMessage: string | null;
  13. draggingElement: ExcalidrawElement | null;
  14. resizingElement: ExcalidrawElement | null;
  15. multiElement: ExcalidrawLinearElement | null;
  16. selectionElement: ExcalidrawElement | null;
  17. // element being edited, but not necessarily added to elements array yet
  18. // (e.g. text element when typing into the input)
  19. editingElement: ExcalidrawElement | null;
  20. elementType: typeof SHAPES[number]["value"];
  21. elementLocked: boolean;
  22. exportBackground: boolean;
  23. currentItemStrokeColor: string;
  24. currentItemBackgroundColor: string;
  25. currentItemFillStyle: string;
  26. currentItemStrokeWidth: number;
  27. currentItemRoughness: number;
  28. currentItemOpacity: number;
  29. currentItemFont: string;
  30. viewBackgroundColor: string;
  31. scrollX: FlooredNumber;
  32. scrollY: FlooredNumber;
  33. cursorX: number;
  34. cursorY: number;
  35. cursorButton: "up" | "down";
  36. scrolledOutside: boolean;
  37. name: string;
  38. username: string;
  39. isCollaborating: boolean;
  40. isResizing: boolean;
  41. isRotating: boolean;
  42. zoom: number;
  43. openMenu: "canvas" | "shape" | null;
  44. lastPointerDownWith: PointerType;
  45. selectedElementIds: { [id: string]: boolean };
  46. collaborators: Map<
  47. string,
  48. {
  49. pointer?: {
  50. x: number;
  51. y: number;
  52. };
  53. button?: "up" | "down";
  54. selectedElementIds?: AppState["selectedElementIds"];
  55. username?: string | null;
  56. }
  57. >;
  58. shouldCacheIgnoreZoom: boolean;
  59. showShortcutsDialog: boolean;
  60. };
  61. export type PointerCoords = Readonly<{
  62. x: number;
  63. y: number;
  64. }>;
  65. export type Gesture = {
  66. pointers: Map<number, PointerCoords>;
  67. lastCenter: { x: number; y: number } | null;
  68. initialDistance: number | null;
  69. initialScale: number | null;
  70. };
  71. export declare class GestureEvent extends UIEvent {
  72. readonly rotation: number;
  73. readonly scale: number;
  74. }