types.ts 2.4 KB

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