types.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. shouldAddWatermark: boolean;
  27. currentItemStrokeColor: string;
  28. currentItemBackgroundColor: string;
  29. currentItemFillStyle: string;
  30. currentItemStrokeWidth: number;
  31. currentItemRoughness: number;
  32. currentItemOpacity: number;
  33. currentItemFont: string;
  34. currentItemTextAlign: TextAlign;
  35. viewBackgroundColor: string;
  36. scrollX: FlooredNumber;
  37. scrollY: FlooredNumber;
  38. cursorX: number;
  39. cursorY: number;
  40. cursorButton: "up" | "down";
  41. scrolledOutside: boolean;
  42. name: string;
  43. username: string;
  44. isCollaborating: boolean;
  45. isResizing: boolean;
  46. isRotating: boolean;
  47. zoom: number;
  48. openMenu: "canvas" | "shape" | null;
  49. lastPointerDownWith: PointerType;
  50. selectedElementIds: { [id: string]: boolean };
  51. collaborators: Map<
  52. string,
  53. {
  54. pointer?: {
  55. x: number;
  56. y: number;
  57. };
  58. button?: "up" | "down";
  59. selectedElementIds?: AppState["selectedElementIds"];
  60. username?: string | null;
  61. }
  62. >;
  63. shouldCacheIgnoreZoom: boolean;
  64. showShortcutsDialog: boolean;
  65. zenModeEnabled: boolean;
  66. };
  67. export type PointerCoords = Readonly<{
  68. x: number;
  69. y: number;
  70. }>;
  71. export type Gesture = {
  72. pointers: Map<number, PointerCoords>;
  73. lastCenter: { x: number; y: number } | null;
  74. initialDistance: number | null;
  75. initialScale: number | null;
  76. };
  77. export declare class GestureEvent extends UIEvent {
  78. readonly rotation: number;
  79. readonly scale: number;
  80. }
  81. export type SocketUpdateData = SocketUpdateDataSource[keyof SocketUpdateDataSource] & {
  82. _brand: "socketUpdateData";
  83. };