types.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import {
  2. PointerType,
  3. ExcalidrawLinearElement,
  4. NonDeletedExcalidrawElement,
  5. NonDeleted,
  6. TextAlign,
  7. ExcalidrawElement,
  8. FontFamily,
  9. GroupId,
  10. } from "./element/types";
  11. import { SHAPES } from "./shapes";
  12. import { Point as RoughPoint } from "roughjs/bin/geometry";
  13. import { SocketUpdateDataSource } from "./data";
  14. import { LinearElementEditor } from "./element/linearElementEditor";
  15. export type FlooredNumber = number & { _brand: "FlooredNumber" };
  16. export type Point = Readonly<RoughPoint>;
  17. export type Collaborator = {
  18. pointer?: {
  19. x: number;
  20. y: number;
  21. };
  22. button?: "up" | "down";
  23. selectedElementIds?: AppState["selectedElementIds"];
  24. username?: string | null;
  25. };
  26. export type AppState = {
  27. isLoading: boolean;
  28. errorMessage: string | null;
  29. draggingElement: NonDeletedExcalidrawElement | null;
  30. resizingElement: NonDeletedExcalidrawElement | null;
  31. multiElement: NonDeleted<ExcalidrawLinearElement> | null;
  32. selectionElement: NonDeletedExcalidrawElement | null;
  33. // element being edited, but not necessarily added to elements array yet
  34. // (e.g. text element when typing into the input)
  35. editingElement: NonDeletedExcalidrawElement | null;
  36. editingLinearElement: LinearElementEditor | null;
  37. elementType: typeof SHAPES[number]["value"];
  38. elementLocked: boolean;
  39. exportBackground: boolean;
  40. shouldAddWatermark: boolean;
  41. currentItemStrokeColor: string;
  42. currentItemBackgroundColor: string;
  43. currentItemFillStyle: string;
  44. currentItemStrokeWidth: number;
  45. currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
  46. currentItemRoughness: number;
  47. currentItemOpacity: number;
  48. currentItemFontFamily: FontFamily;
  49. currentItemFontSize: number;
  50. currentItemTextAlign: TextAlign;
  51. viewBackgroundColor: string;
  52. scrollX: FlooredNumber;
  53. scrollY: FlooredNumber;
  54. cursorX: number;
  55. cursorY: number;
  56. cursorButton: "up" | "down";
  57. scrolledOutside: boolean;
  58. name: string;
  59. username: string;
  60. isCollaborating: boolean;
  61. isResizing: boolean;
  62. isRotating: boolean;
  63. zoom: number;
  64. openMenu: "canvas" | "shape" | null;
  65. lastPointerDownWith: PointerType;
  66. selectedElementIds: { [id: string]: boolean };
  67. previousSelectedElementIds: { [id: string]: boolean };
  68. collaborators: Map<string, Collaborator>;
  69. shouldCacheIgnoreZoom: boolean;
  70. showShortcutsDialog: boolean;
  71. zenModeEnabled: boolean;
  72. gridSize: number | null;
  73. /** top-most selected groups (i.e. does not include nested groups) */
  74. selectedGroupIds: { [groupId: string]: boolean };
  75. /** group being edited when you drill down to its constituent element
  76. (e.g. when you double-click on a group's element) */
  77. editingGroupId: GroupId | null;
  78. };
  79. export type PointerCoords = Readonly<{
  80. x: number;
  81. y: number;
  82. }>;
  83. export type Gesture = {
  84. pointers: Map<number, PointerCoords>;
  85. lastCenter: { x: number; y: number } | null;
  86. initialDistance: number | null;
  87. initialScale: number | null;
  88. };
  89. export declare class GestureEvent extends UIEvent {
  90. readonly rotation: number;
  91. readonly scale: number;
  92. }
  93. export type SocketUpdateData = SocketUpdateDataSource[keyof SocketUpdateDataSource] & {
  94. _brand: "socketUpdateData";
  95. };