@excalidraw/math 0.18.0-4ce38fb → 0.18.0-4ce8305

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/types/common/src/utils.d.ts +7 -1
  2. package/dist/types/element/src/align.d.ts +4 -1
  3. package/dist/types/element/src/binding.d.ts +36 -0
  4. package/dist/types/element/src/bounds.d.ts +10 -2
  5. package/dist/types/element/src/collision.d.ts +7 -0
  6. package/dist/types/element/src/cropElement.d.ts +36 -4
  7. package/dist/types/element/src/delta.d.ts +7 -1
  8. package/dist/types/element/src/distribute.d.ts +4 -1
  9. package/dist/types/element/src/dragElements.d.ts +8 -3
  10. package/dist/types/element/src/elbowArrow.d.ts +5 -0
  11. package/dist/types/element/src/embeddable.d.ts +2 -1
  12. package/dist/types/element/src/groups.d.ts +1 -6
  13. package/dist/types/element/src/image.d.ts +5 -2
  14. package/dist/types/element/src/index.d.ts +1 -0
  15. package/dist/types/element/src/linearElementEditor.d.ts +4 -1
  16. package/dist/types/element/src/listMarker.d.ts +7 -2
  17. package/dist/types/element/src/newElement.d.ts +3 -1
  18. package/dist/types/element/src/renderElement.d.ts +10 -0
  19. package/dist/types/element/src/renderEnvironment.d.ts +66 -0
  20. package/dist/types/element/src/resizeElements.d.ts +15 -5
  21. package/dist/types/element/src/selection.d.ts +1 -7
  22. package/dist/types/element/src/shape.d.ts +2 -0
  23. package/dist/types/element/src/stickyNote.d.ts +8 -0
  24. package/dist/types/element/src/textElement.d.ts +3 -2
  25. package/dist/types/element/src/textMeasurements.d.ts +15 -11
  26. package/dist/types/element/src/textWrapping.d.ts +3 -2
  27. package/dist/types/element/src/transform.d.ts +5 -1
  28. package/dist/types/excalidraw/actions/actionBoundText.d.ts +46 -221
  29. package/dist/types/excalidraw/actions/actionCanvas.d.ts +6 -6
  30. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +4 -588
  31. package/dist/types/excalidraw/actions/actionDeselect.d.ts +1 -1
  32. package/dist/types/excalidraw/actions/actionExport.d.ts +7 -7
  33. package/dist/types/excalidraw/actions/actionFrame.d.ts +41 -525
  34. package/dist/types/excalidraw/actions/actionGroup.d.ts +2 -2
  35. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +1 -1
  36. package/dist/types/excalidraw/actions/actionToggleWrap.d.ts +12 -0
  37. package/dist/types/excalidraw/actions/index.d.ts +1 -0
  38. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  39. package/dist/types/excalidraw/actions/types.d.ts +1 -1
  40. package/dist/types/excalidraw/appState.d.ts +7 -7
  41. package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -1
  42. package/dist/types/excalidraw/charts/charts.helpers.d.ts +6 -5
  43. package/dist/types/excalidraw/charts/charts.line.d.ts +2 -1
  44. package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -1
  45. package/dist/types/excalidraw/charts/index.d.ts +2 -1
  46. package/dist/types/excalidraw/components/App.d.ts +34 -20
  47. package/dist/types/excalidraw/components/App.host.d.ts +102 -0
  48. package/dist/types/excalidraw/components/App.modifiers.d.ts +38 -0
  49. package/dist/types/excalidraw/components/App.selection.d.ts +265 -0
  50. package/dist/types/excalidraw/components/App.selectionTool.d.ts +93 -0
  51. package/dist/types/excalidraw/components/App.viewport.d.ts +13 -3
  52. package/dist/types/excalidraw/components/App.wrap.d.ts +31 -0
  53. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -1
  54. package/dist/types/excalidraw/components/Stats/utils.d.ts +4 -2
  55. package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +2 -1
  56. package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
  57. package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +5 -2
  58. package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +2 -1
  59. package/dist/types/excalidraw/components/TTDDialog/common.d.ts +4 -1
  60. package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +3 -2
  61. package/dist/types/excalidraw/components/TTDDialog/types.d.ts +14 -1
  62. package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +27 -1
  63. package/dist/types/excalidraw/components/Tooltip.d.ts +11 -1
  64. package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +1 -1
  65. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +0 -1
  66. package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +3 -2
  67. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +13 -2
  68. package/dist/types/excalidraw/data/blob.d.ts +14 -14
  69. package/dist/types/excalidraw/data/index.d.ts +3 -3
  70. package/dist/types/excalidraw/data/json.d.ts +7 -7
  71. package/dist/types/excalidraw/fonts/Fonts.d.ts +9 -6
  72. package/dist/types/excalidraw/history.d.ts +10 -4
  73. package/dist/types/excalidraw/reactUtils.d.ts +1 -1
  74. package/dist/types/excalidraw/renderer/animation.d.ts +11 -4
  75. package/dist/types/excalidraw/renderer/staticScene.d.ts +11 -6
  76. package/dist/types/excalidraw/scene/Renderer.d.ts +1 -1
  77. package/dist/types/excalidraw/scene/export.d.ts +343 -20
  78. package/dist/types/excalidraw/scene/types.d.ts +23 -1
  79. package/dist/types/excalidraw/types.d.ts +49 -1
  80. package/dist/types/utils/src/index.d.ts +3 -1
  81. package/package.json +2 -2
  82. package/dist/types/utils/src/export.d.ts +0 -36
@@ -17,7 +17,7 @@ export type TopPicksDragState<T> = {
17
17
  slotSpan: number;
18
18
  } | null;
19
19
  export type TopPicksGhost = {
20
- /** the ghost's visual. Rendered into `document.body` — outside the
20
+ /** the ghost's visual. Rendered into the source's `document.body` — outside the
21
21
  * editor's CSS scope, so theme-dependent styling must be resolved from the
22
22
  * rendered DOM (computed styles) rather than CSS variables */
23
23
  content: HTMLElement;
@@ -31,6 +31,5 @@ type InteractiveCanvasProps = {
31
31
  onPointerDown: Exclude<DOMAttributes<HTMLCanvasElement>["onPointerDown"], undefined>;
32
32
  onDoubleClick: Exclude<DOMAttributes<HTMLCanvasElement>["onDoubleClick"], undefined>;
33
33
  };
34
- export declare const INTERACTIVE_SCENE_ANIMATION_KEY = "animateInteractiveScene";
35
34
  declare const _default: React.MemoExoticComponent<(props: InteractiveCanvasProps) => import("react/jsx-runtime").JSX.Element>;
36
35
  export default _default;
@@ -2,6 +2,7 @@ import type { Scene } from "@excalidraw/element";
2
2
  import type { ElementsMap, ExcalidrawEmbeddableElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
3
3
  import "./Hyperlink.scss";
4
4
  import type { AppState, ExcalidrawProps, UIAppState } from "../../types";
5
+ export type HyperlinkTooltipOwner = Record<string, unknown>;
5
6
  export declare const Hyperlink: ({ element, scene, setAppState, onLinkOpen, setToast, updateEmbedValidationStatus, }: {
6
7
  element: NonDeletedExcalidrawElement;
7
8
  scene: Scene;
@@ -15,5 +16,5 @@ export declare const Hyperlink: ({ element, scene, setAppState, onLinkOpen, setT
15
16
  updateEmbedValidationStatus: (element: ExcalidrawEmbeddableElement, status: boolean) => void;
16
17
  }) => import("react/jsx-runtime").JSX.Element | null;
17
18
  export declare const getContextMenuLabel: (elements: readonly NonDeletedExcalidrawElement[], appState: UIAppState) => "labels.link.editEmbed" | "labels.link.edit" | "labels.link.create";
18
- export declare const showHyperlinkTooltip: (element: NonDeletedExcalidrawElement, appState: AppState, elementsMap: ElementsMap) => void;
19
- export declare const hideHyperlinkToolip: () => void;
19
+ export declare const showHyperlinkTooltip: (element: NonDeletedExcalidrawElement, appState: AppState, elementsMap: ElementsMap, ownerDocument: Document, owner: HyperlinkTooltipOwner) => void;
20
+ export declare const hideHyperlinkToolip: (owner?: HyperlinkTooltipOwner) => void;
@@ -1,10 +1,21 @@
1
+ import type { RenderEnvironment } from "@excalidraw/element/renderEnvironment";
1
2
  import type { GlobalPoint, Radians } from "@excalidraw/math";
2
3
  import type { Bounds } from "@excalidraw/common";
3
4
  import type { ElementsMap, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
4
5
  import type { AppState } from "../../types";
5
6
  export declare const DEFAULT_LINK_SIZE = 12;
6
- export declare const EXTERNAL_LINK_IMG: HTMLImageElement;
7
- export declare const ELEMENT_LINK_IMG: HTMLImageElement;
7
+ type SettledLinkImgStatus = Exclude<LinkImgStatus, "decoding">;
8
+ export type LinkImgStatus = "decoding" | "decoded" | "failed";
9
+ export type LinkImg = {
10
+ /** Only safe as a `drawImage` source while `status` is `decoded`. */
11
+ img: HTMLImageElement;
12
+ status: LinkImgStatus;
13
+ settled: Promise<SettledLinkImgStatus>;
14
+ };
15
+ export declare const getExternalLinkImg: (renderEnvironment: RenderEnvironment) => LinkImg;
16
+ export declare const getElementLinkImg: (renderEnvironment: RenderEnvironment) => LinkImg;
17
+ export declare const startLinkImgDecoding: (renderEnvironment: RenderEnvironment) => Promise<boolean>;
8
18
  export declare const getLinkHandleFromCoords: ([x1, y1, x2, y2]: Bounds, angle: Radians, appState: Pick<AppState, "zoom">) => Bounds;
9
19
  export declare const isPointHittingLinkIcon: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, [x, y]: GlobalPoint) => boolean;
10
20
  export declare const isPointHittingLink: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, [x, y]: GlobalPoint, isMobile: boolean) => boolean;
21
+ export {};
@@ -30,6 +30,11 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
30
30
  };
31
31
  name: string | null;
32
32
  zoom: import("../types").Zoom;
33
+ isBindingEnabled: boolean;
34
+ isMidpointSnappingEnabled: boolean;
35
+ selectedElementIds: Readonly<{
36
+ [id: string]: true;
37
+ }>;
33
38
  scrollX: number;
34
39
  scrollY: number;
35
40
  viewModeEnabled: boolean;
@@ -51,9 +56,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
51
56
  rawText: string;
52
57
  };
53
58
  editingGroupId: import("@excalidraw/element/types").GroupId | null;
54
- selectedElementIds: Readonly<{
55
- [id: string]: true;
56
- }>;
57
59
  frameToHighlight: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
58
60
  activeTool: {
59
61
  lastActiveTool: import("../types").ActiveTool | null;
@@ -71,8 +73,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
71
73
  selectedLinearElement: import("@excalidraw/element").LinearElementEditor | null;
72
74
  multiElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawLinearElement> | null;
73
75
  newElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawNonSelectionElement> | null;
74
- isBindingEnabled: boolean;
75
- isMidpointSnappingEnabled: boolean;
76
76
  gridModeEnabled: boolean;
77
77
  suggestedBinding: {
78
78
  element: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement>;
@@ -108,8 +108,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
108
108
  shouldCacheIgnoreZoom: boolean;
109
109
  exportScale: number;
110
110
  currentItemArrowType: "sharp" | "round" | "elbow";
111
- gridSize: number;
112
- bindMode: import("@excalidraw/element/types").BindMode;
113
111
  contextMenu: {
114
112
  items: import("../components/ContextMenu").ContextMenuItems;
115
113
  top: number;
@@ -171,6 +169,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
171
169
  closable?: boolean;
172
170
  duration?: number;
173
171
  } | null;
172
+ gridSize: number;
174
173
  gridStep: number;
175
174
  fileHandle: FileSystemFileHandle | null;
176
175
  stats: {
@@ -186,6 +185,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
186
185
  lockedMultiSelections: {
187
186
  [groupId: string]: true;
188
187
  };
188
+ bindMode: import("@excalidraw/element/types").BindMode;
189
189
  colorTopPicks: {
190
190
  elementStroke: readonly string[] | null;
191
191
  elementBackground: readonly string[] | null;
@@ -218,6 +218,11 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
218
218
  };
219
219
  name: string | null;
220
220
  zoom: import("../types").Zoom;
221
+ isBindingEnabled: boolean;
222
+ isMidpointSnappingEnabled: boolean;
223
+ selectedElementIds: Readonly<{
224
+ [id: string]: true;
225
+ }>;
221
226
  scrollX: number;
222
227
  scrollY: number;
223
228
  viewModeEnabled: boolean;
@@ -239,9 +244,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
239
244
  rawText: string;
240
245
  };
241
246
  editingGroupId: import("@excalidraw/element/types").GroupId | null;
242
- selectedElementIds: Readonly<{
243
- [id: string]: true;
244
- }>;
245
247
  frameToHighlight: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
246
248
  activeTool: {
247
249
  lastActiveTool: import("../types").ActiveTool | null;
@@ -259,8 +261,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
259
261
  selectedLinearElement: import("@excalidraw/element").LinearElementEditor | null;
260
262
  multiElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawLinearElement> | null;
261
263
  newElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawNonSelectionElement> | null;
262
- isBindingEnabled: boolean;
263
- isMidpointSnappingEnabled: boolean;
264
264
  gridModeEnabled: boolean;
265
265
  suggestedBinding: {
266
266
  element: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement>;
@@ -296,8 +296,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
296
296
  shouldCacheIgnoreZoom: boolean;
297
297
  exportScale: number;
298
298
  currentItemArrowType: "sharp" | "round" | "elbow";
299
- gridSize: number;
300
- bindMode: import("@excalidraw/element/types").BindMode;
301
299
  contextMenu: {
302
300
  items: import("../components/ContextMenu").ContextMenuItems;
303
301
  top: number;
@@ -359,6 +357,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
359
357
  closable?: boolean;
360
358
  duration?: number;
361
359
  } | null;
360
+ gridSize: number;
362
361
  gridStep: number;
363
362
  fileHandle: FileSystemFileHandle | null;
364
363
  stats: {
@@ -374,6 +373,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
374
373
  lockedMultiSelections: {
375
374
  [groupId: string]: true;
376
375
  };
376
+ bindMode: import("@excalidraw/element/types").BindMode;
377
377
  colorTopPicks: {
378
378
  elementStroke: readonly string[] | null;
379
379
  elementBackground: readonly string[] | null;
@@ -1,4 +1,5 @@
1
1
  import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
+ import type { RenderEnvironment } from "@excalidraw/element";
2
3
  import type { ExportType } from "../scene/types";
3
4
  import type { AppState, BinaryFiles } from "../types";
4
5
  export { loadFromBlob } from "./blob";
@@ -10,12 +11,11 @@ export declare const prepareElementsForExport: (allElements: readonly Excalidraw
10
11
  exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
11
12
  exportedElements: ExportedElements;
12
13
  };
13
- export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements: ExportedElements, appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, name, fileHandle, exportingFrame, }: {
14
- exportBackground: boolean;
14
+ export declare const exportCanvas: (type: Omit<ExportType, "backend">, elements: ExportedElements, appState: AppState, files: BinaryFiles, { exportPadding, name, fileHandle, exportingFrame, renderEnvironment, }: {
15
15
  exportPadding?: number;
16
- viewBackgroundColor: string;
17
16
  /** filename, if applicable */
18
17
  name?: string;
19
18
  fileHandle?: FileSystemFileHandle | null;
20
19
  exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
20
+ renderEnvironment?: RenderEnvironment;
21
21
  }) => Promise<FileSystemFileHandle | null | undefined>;
@@ -28,6 +28,11 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
28
28
  };
29
29
  name: string | null;
30
30
  zoom: import("../types").Zoom;
31
+ isBindingEnabled: boolean;
32
+ isMidpointSnappingEnabled: boolean;
33
+ selectedElementIds: Readonly<{
34
+ [id: string]: true;
35
+ }>;
31
36
  scrollX: number;
32
37
  scrollY: number;
33
38
  viewModeEnabled: boolean;
@@ -49,9 +54,6 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
49
54
  rawText: string;
50
55
  };
51
56
  editingGroupId: import("@excalidraw/element/types").GroupId | null;
52
- selectedElementIds: Readonly<{
53
- [id: string]: true;
54
- }>;
55
57
  frameToHighlight: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
56
58
  activeTool: {
57
59
  lastActiveTool: import("../types").ActiveTool | null;
@@ -69,8 +71,6 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
69
71
  selectedLinearElement: import("@excalidraw/element").LinearElementEditor | null;
70
72
  multiElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawLinearElement> | null;
71
73
  newElement: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawNonSelectionElement> | null;
72
- isBindingEnabled: boolean;
73
- isMidpointSnappingEnabled: boolean;
74
74
  gridModeEnabled: boolean;
75
75
  suggestedBinding: {
76
76
  element: import("@excalidraw/element/types").NonDeleted<import("@excalidraw/element/types").ExcalidrawBindableElement>;
@@ -106,8 +106,6 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
106
106
  shouldCacheIgnoreZoom: boolean;
107
107
  exportScale: number;
108
108
  currentItemArrowType: "sharp" | "round" | "elbow";
109
- gridSize: number;
110
- bindMode: import("@excalidraw/element/types").BindMode;
111
109
  contextMenu: {
112
110
  items: import("../components/ContextMenu").ContextMenuItems;
113
111
  top: number;
@@ -169,6 +167,7 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
169
167
  closable?: boolean;
170
168
  duration?: number;
171
169
  } | null;
170
+ gridSize: number;
172
171
  gridStep: number;
173
172
  fileHandle: FileSystemFileHandle | null;
174
173
  stats: {
@@ -184,6 +183,7 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
184
183
  lockedMultiSelections: {
185
184
  [groupId: string]: true;
186
185
  };
186
+ bindMode: import("@excalidraw/element/types").BindMode;
187
187
  colorTopPicks: {
188
188
  elementStroke: readonly string[] | null;
189
189
  elementBackground: readonly string[] | null;
@@ -1,5 +1,5 @@
1
1
  import { type FontMetadata } from "@excalidraw/common";
2
- import type { ExcalidrawElement } from "@excalidraw/element/types";
2
+ import type { ExcalidrawElement, ExcalidrawTextElement } from "@excalidraw/element/types";
3
3
  import type { Scene } from "@excalidraw/element";
4
4
  import { ExcalidrawFontFace } from "./ExcalidrawFontFace";
5
5
  export declare class Fonts {
@@ -16,6 +16,7 @@ export declare class Fonts {
16
16
  }>;
17
17
  private readonly scene;
18
18
  private readonly ownerDocument;
19
+ private readonly loadedFonts;
19
20
  constructor(scene: Scene, ownerDocument?: Document);
20
21
  /**
21
22
  * Get all the font families for the given scene.
@@ -33,9 +34,15 @@ export declare class Fonts {
33
34
  /**
34
35
  * Load font faces for a given scene and trigger scene update.
35
36
  */
36
- loadSceneFonts: () => Promise<FontFace[]>;
37
+ loadSceneFonts: (defaultFontFamily?: ExcalidrawTextElement["fontFamily"]) => Promise<FontFace[]>;
37
38
  /**
38
39
  * Load font faces for passed elements - use when the scene is unavailable (i.e. export).
40
+ *
41
+ * Loads into the document's font set, or in a worker into the worker's own
42
+ * (`self.fonts`, what an `OffscreenCanvas` there measures with). Where there
43
+ * is neither -- e.g. a DOM shim without `FontFaceSet` (`linkedom`), or Node
44
+ * -- nothing is loaded: the host makes the fonts available itself, and is
45
+ * warned once if the elements use fonts that would need loading.
39
46
  */
40
47
  static loadElementsFonts: (elements: readonly ExcalidrawElement[], ownerDocument?: Document) => Promise<FontFace[]>;
41
48
  /**
@@ -69,10 +76,6 @@ export declare class Fonts {
69
76
  * Get characters for a given family.
70
77
  */
71
78
  private static getCharacters;
72
- /**
73
- * Get all registered font families.
74
- */
75
- private static getAllFamilies;
76
79
  }
77
80
  export interface ExcalidrawFontFaceDescriptor {
78
81
  uri: string;
@@ -1,13 +1,15 @@
1
1
  import { Emitter } from "@excalidraw/common";
2
2
  import { StoreDelta } from "@excalidraw/element";
3
- import type { StoreSnapshot, Store } from "@excalidraw/element";
3
+ import type { RenderEnvironment, StoreSnapshot, Store } from "@excalidraw/element";
4
4
  import type { SceneElementsMap } from "@excalidraw/element/types";
5
5
  import type { AppState } from "./types";
6
6
  export declare class HistoryDelta extends StoreDelta {
7
7
  /**
8
8
  * Apply the delta to the passed elements and appState, does not modify the snapshot.
9
9
  */
10
- applyTo(elements: SceneElementsMap, appState: AppState, snapshot: StoreSnapshot): [SceneElementsMap, AppState, boolean];
10
+ applyTo(elements: SceneElementsMap, appState: AppState, snapshot: StoreSnapshot,
11
+ /** measures the labels re-laid out after applying */
12
+ renderEnvironment?: RenderEnvironment): [SceneElementsMap, AppState, boolean];
11
13
  /**
12
14
  * Overriding once to avoid type casting everywhere.
13
15
  */
@@ -40,8 +42,12 @@ export declare class History {
40
42
  * Do not re-record history entries, which were already pushed to undo / redo stack, as part of history action.
41
43
  */
42
44
  record(delta: StoreDelta): void;
43
- undo(elements: SceneElementsMap, appState: AppState): void | [SceneElementsMap, AppState];
44
- redo(elements: SceneElementsMap, appState: AppState): void | [SceneElementsMap, AppState];
45
+ undo(elements: SceneElementsMap, appState: AppState,
46
+ /** measures the labels re-laid out after undoing (the host's, in the editor) */
47
+ renderEnvironment?: RenderEnvironment): void | [SceneElementsMap, AppState];
48
+ redo(elements: SceneElementsMap, appState: AppState,
49
+ /** measures the labels re-laid out after redoing (the host's, in the editor) */
50
+ renderEnvironment?: RenderEnvironment): void | [SceneElementsMap, AppState];
45
51
  private perform;
46
52
  private static pop;
47
53
  private static push;
@@ -6,7 +6,7 @@ export declare const withBatchedUpdates: <TFunction extends ((event: any) => voi
6
6
  * barches React state updates and throttles the calls to a single call per
7
7
  * animation frame
8
8
  */
9
- export declare const withBatchedUpdatesThrottled: <TFunction extends ((event: any) => void) | (() => void)>(func: Parameters<TFunction>["length"] extends 0 | 1 ? TFunction : never) => {
9
+ export declare const withBatchedUpdatesThrottled: <TFunction extends ((event: any) => void) | (() => void)>(func: Parameters<TFunction>["length"] extends 0 | 1 ? TFunction : never, ownerWindow?: Window) => {
10
10
  (...args: Parameters<TFunction>): void;
11
11
  flush(): void;
12
12
  cancel(): void;
@@ -1,16 +1,23 @@
1
+ /** String keys are shared process-wide; symbols are created per owning
2
+ * instance, which lets concurrent instances run the same named animation
3
+ * independently. */
4
+ export type AnimationKey = string | symbol;
1
5
  export type Animation<R extends object> = (params: {
2
6
  deltaTime: number;
3
7
  state?: R;
4
8
  }) => R | null | undefined;
9
+ export type AnimationScheduler = Pick<Window, "requestAnimationFrame" | "cancelAnimationFrame" | "setTimeout" | "clearTimeout">;
5
10
  export declare class AnimationController {
6
- private static scheduledFrame;
11
+ private static scheduledFrames;
7
12
  private static animations;
8
- static start<R extends object>(key: string, animation: Animation<R>): void;
13
+ private static readonly schedulerCleanups;
14
+ static start<R extends object>(key: AnimationKey, animation: Animation<R>, scheduler?: AnimationScheduler): void;
9
15
  private static scheduleNextFrame;
10
16
  private static cancelScheduledFrame;
11
17
  private static cancelScheduledFrameIfIdle;
18
+ private static registerSchedulerCleanup;
12
19
  private static tick;
13
- static running(key: string): boolean;
14
- static cancel(key: string): void;
20
+ static running(key: AnimationKey): boolean;
21
+ static cancel(key: AnimationKey): void;
15
22
  static reset(): void;
16
23
  }
@@ -2,12 +2,17 @@ import type { ExcalidrawFrameLikeElement } from "@excalidraw/element/types";
2
2
  import type { StaticCanvasRenderConfig, StaticSceneRenderConfig } from "../scene/types";
3
3
  import type { StaticCanvasAppState } from "../types";
4
4
  export declare const frameClip: (frame: ExcalidrawFrameLikeElement, context: CanvasRenderingContext2D, renderConfig: StaticCanvasRenderConfig, appState: StaticCanvasAppState) => void;
5
- /** throttled to animation framerate */
6
- export declare const renderStaticSceneThrottled: {
7
- (config: StaticSceneRenderConfig): void;
8
- flush(): void;
9
- cancel(): void;
10
- };
5
+ /**
6
+ * Throttled to animation framerate, one throttle per canvas. A shared
7
+ * throttle drops all but the last caller's pending frame when multiple
8
+ * editors render in the same frame, and a module-realm scheduler would run
9
+ * popout renders on the main window's rAF, which freezes while that window
10
+ * is hidden.
11
+ */
12
+ export declare const renderStaticSceneThrottled: (config: StaticSceneRenderConfig) => void;
13
+ /** Drops the canvas' pending frame; the throttle itself is dropped with the
14
+ * canvas. */
15
+ export declare const cancelStaticSceneThrottle: (canvas: HTMLCanvasElement) => void;
11
16
  /**
12
17
  * Static scene is the non-ui canvas where we render elements.
13
18
  */
@@ -494,6 +494,6 @@ export declare class Renderer {
494
494
  }) | null;
495
495
  canvasNonce: string;
496
496
  };
497
- destroy(): void;
497
+ destroy(staticCanvas: HTMLCanvasElement): void;
498
498
  }
499
499
  export {};