@myoc/math 0.19.519 → 0.19.520

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 (57) hide show
  1. package/dist/types/common/src/constants.d.ts +8 -5
  2. package/dist/types/common/src/utils.d.ts +0 -42
  3. package/dist/types/element/src/comparisons.d.ts +1 -0
  4. package/dist/types/element/src/image.d.ts +5 -0
  5. package/dist/types/element/src/newElement.d.ts +2 -0
  6. package/dist/types/element/src/types.d.ts +8 -0
  7. package/dist/types/excalidraw/actions/actionBoundText.d.ts +4 -2
  8. package/dist/types/excalidraw/actions/actionCanvas.d.ts +22 -11
  9. package/dist/types/excalidraw/actions/actionClipboard.d.ts +4 -2
  10. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +2 -1
  11. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +6 -3
  12. package/dist/types/excalidraw/actions/actionDeselect.d.ts +2 -1
  13. package/dist/types/excalidraw/actions/actionElementLink.d.ts +2 -1
  14. package/dist/types/excalidraw/actions/actionElementLock.d.ts +4 -2
  15. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +2 -1
  16. package/dist/types/excalidraw/actions/actionExport.d.ts +4 -2
  17. package/dist/types/excalidraw/actions/actionFrame.d.ts +10 -4
  18. package/dist/types/excalidraw/actions/actionGroup.d.ts +4 -2
  19. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +4 -1
  20. package/dist/types/excalidraw/actions/actionLink.d.ts +2 -1
  21. package/dist/types/excalidraw/actions/actionMenu.d.ts +2 -1
  22. package/dist/types/excalidraw/actions/actionProperties.d.ts +16 -5
  23. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +2 -1
  24. package/dist/types/excalidraw/actions/actionStyles.d.ts +2 -1
  25. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +2 -1
  26. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +2 -1
  27. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +2 -1
  28. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +2 -1
  29. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +2 -1
  30. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +2 -1
  31. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +2 -1
  32. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +2 -1
  33. package/dist/types/excalidraw/actions/index.d.ts +1 -1
  34. package/dist/types/excalidraw/actions/types.d.ts +1 -1
  35. package/dist/types/excalidraw/appState.d.ts +2 -1
  36. package/dist/types/excalidraw/components/App.d.ts +12 -28
  37. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
  38. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +1 -1
  39. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
  40. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  41. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  42. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
  43. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +2 -1
  44. package/dist/types/excalidraw/components/icons.d.ts +2 -0
  45. package/dist/types/excalidraw/data/blob.d.ts +2 -1
  46. package/dist/types/excalidraw/data/json.d.ts +2 -1
  47. package/dist/types/excalidraw/renderer/animation.d.ts +1 -0
  48. package/dist/types/excalidraw/scene/Renderer.d.ts +2 -0
  49. package/dist/types/excalidraw/scene/index.d.ts +1 -1
  50. package/dist/types/excalidraw/scene/types.d.ts +1 -0
  51. package/dist/types/excalidraw/scroll.d.ts +46 -0
  52. package/dist/types/excalidraw/types.d.ts +16 -3
  53. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  54. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  55. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  56. package/dist/types/laser-pointer/src/state.d.ts +35 -0
  57. package/package.json +2 -2
@@ -1,8 +1,14 @@
1
+ import { type StrokeWidthKey } from "@excalidraw/common";
1
2
  import { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
2
- import type { Arrowhead, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawLinearElement, ExcalidrawTextElement, FontFamilyValues, TextAlign } from "@excalidraw/element/types";
3
+ import type { Arrowhead, ExcalidrawBindableElement, ExcalidrawElement, ExcalidrawLinearElement, ExcalidrawTextElement, FontFamilyValues, StrokeVariability, TextAlign } from "@excalidraw/element/types";
3
4
  import type { AppClassProperties, AppState, Primitive } from "../types";
4
5
  export declare const changeProperty: (elements: readonly ExcalidrawElement[], appState: AppState, callback: (element: ExcalidrawElement) => ExcalidrawElement, includeBoundText?: boolean) => ExcalidrawElement[];
5
- export declare const getFormValue: <T extends Primitive>(elements: readonly ExcalidrawElement[], app: AppClassProperties, getAttribute: (element: ExcalidrawElement) => T, elementPredicate: true | ((element: ExcalidrawElement) => boolean), defaultValue: T | ((isSomeElementSelected: boolean) => T)) => T;
6
+ export declare const getFormValue: <T extends Primitive>(elements: readonly ExcalidrawElement[], app: AppClassProperties,
7
+ /**
8
+ * input value (usually the element attribute value,
9
+ * but depends on what the action's PanelComponent input expects)
10
+ */
11
+ getValue: (element: ExcalidrawElement) => T, elementPredicate: true | ((element: ExcalidrawElement) => boolean), defaultValue: T | ((isSomeElementSelected: boolean) => T)) => T;
6
12
  export declare const actionChangeStrokeColor: import("./types").Action<Pick<AppState, "currentItemStrokeColor">> & {
7
13
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
8
14
  };
@@ -12,12 +18,15 @@ export declare const actionChangeBackgroundColor: import("./types").Action<Pick<
12
18
  export declare const actionChangeFillStyle: import("./types").Action<import("@excalidraw/element/types").FillStyle> & {
13
19
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
14
20
  };
15
- export declare const actionChangeStrokeWidth: import("./types").Action<number> & {
21
+ export declare const actionChangeStrokeWidth: import("./types").Action<StrokeWidthKey> & {
16
22
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
17
23
  };
18
24
  export declare const actionChangeSloppiness: import("./types").Action<number> & {
19
25
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
20
26
  };
27
+ export declare const actionChangeFreedrawMode: import("./types").Action<StrokeVariability> & {
28
+ keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
29
+ };
21
30
  export declare const actionChangeStrokeStyle: import("./types").Action<import("@excalidraw/element/types").StrokeStyle> & {
22
31
  keyTest?: ((event: React.KeyboardEvent | KeyboardEvent, appState: AppState, elements: readonly ExcalidrawElement[], app: AppClassProperties) => boolean) | undefined;
23
32
  };
@@ -100,9 +109,10 @@ export declare const actionDecreaseFontSize: {
100
109
  currentItemStrokeColor: string;
101
110
  currentItemBackgroundColor: string;
102
111
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
103
- currentItemStrokeWidth: number;
112
+ currentItemStrokeWidthKey: StrokeWidthKey;
104
113
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
105
114
  currentItemRoughness: number;
115
+ currentItemStrokeVariability: StrokeVariability;
106
116
  currentItemOpacity: number;
107
117
  currentItemFontFamily: FontFamilyValues;
108
118
  currentItemTextAlign: TextAlign;
@@ -278,9 +288,10 @@ export declare const actionIncreaseFontSize: {
278
288
  currentItemStrokeColor: string;
279
289
  currentItemBackgroundColor: string;
280
290
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
281
- currentItemStrokeWidth: number;
291
+ currentItemStrokeWidthKey: StrokeWidthKey;
282
292
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
283
293
  currentItemRoughness: number;
294
+ currentItemStrokeVariability: StrokeVariability;
284
295
  currentItemOpacity: number;
285
296
  currentItemFontFamily: FontFamilyValues;
286
297
  currentItemTextAlign: TextAlign;
@@ -78,9 +78,10 @@ export declare const actionSelectAll: {
78
78
  currentItemStrokeColor: string;
79
79
  currentItemBackgroundColor: string;
80
80
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
81
- currentItemStrokeWidth: number;
81
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
82
82
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
83
83
  currentItemRoughness: number;
84
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
84
85
  currentItemOpacity: number;
85
86
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
86
87
  currentItemFontSize: number;
@@ -76,9 +76,10 @@ export declare const actionCopyStyles: {
76
76
  currentItemStrokeColor: string;
77
77
  currentItemBackgroundColor: string;
78
78
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
79
- currentItemStrokeWidth: number;
79
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
80
80
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
81
81
  currentItemRoughness: number;
82
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
82
83
  currentItemOpacity: number;
83
84
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
84
85
  currentItemFontSize: number;
@@ -72,9 +72,10 @@ export declare const actionToggleArrowBinding: {
72
72
  currentItemStrokeColor: string;
73
73
  currentItemBackgroundColor: string;
74
74
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
75
- currentItemStrokeWidth: number;
75
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
76
76
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
77
77
  currentItemRoughness: number;
78
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
78
79
  currentItemOpacity: number;
79
80
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
80
81
  currentItemFontSize: number;
@@ -77,9 +77,10 @@ export declare const actionToggleGridMode: {
77
77
  currentItemStrokeColor: string;
78
78
  currentItemBackgroundColor: string;
79
79
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
80
- currentItemStrokeWidth: number;
80
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
81
81
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
82
82
  currentItemRoughness: number;
83
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
83
84
  currentItemOpacity: number;
84
85
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
85
86
  currentItemFontSize: number;
@@ -72,9 +72,10 @@ export declare const actionToggleMidpointSnapping: {
72
72
  currentItemStrokeColor: string;
73
73
  currentItemBackgroundColor: string;
74
74
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
75
- currentItemStrokeWidth: number;
75
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
76
76
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
77
77
  currentItemRoughness: number;
78
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
78
79
  currentItemOpacity: number;
79
80
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
80
81
  currentItemFontSize: number;
@@ -75,9 +75,10 @@ export declare const actionToggleObjectsSnapMode: {
75
75
  currentItemStrokeColor: string;
76
76
  currentItemBackgroundColor: string;
77
77
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
78
- currentItemStrokeWidth: number;
78
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
79
79
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
80
80
  currentItemRoughness: number;
81
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
81
82
  currentItemOpacity: number;
82
83
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
83
84
  currentItemFontSize: number;
@@ -81,9 +81,10 @@ export declare const actionToggleSearchMenu: {
81
81
  currentItemStrokeColor: string;
82
82
  currentItemBackgroundColor: string;
83
83
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
84
- currentItemStrokeWidth: number;
84
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
85
85
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
86
86
  currentItemRoughness: number;
87
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
87
88
  currentItemOpacity: number;
88
89
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
89
90
  currentItemFontSize: number;
@@ -77,9 +77,10 @@ export declare const actionToggleStats: {
77
77
  currentItemStrokeColor: string;
78
78
  currentItemBackgroundColor: string;
79
79
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
80
- currentItemStrokeWidth: number;
80
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
81
81
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
82
82
  currentItemRoughness: number;
83
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
83
84
  currentItemOpacity: number;
84
85
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
85
86
  currentItemFontSize: number;
@@ -74,9 +74,10 @@ export declare const actionToggleViewMode: {
74
74
  currentItemStrokeColor: string;
75
75
  currentItemBackgroundColor: string;
76
76
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
77
- currentItemStrokeWidth: number;
77
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
78
78
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
79
79
  currentItemRoughness: number;
80
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
80
81
  currentItemOpacity: number;
81
82
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
82
83
  currentItemFontSize: number;
@@ -74,9 +74,10 @@ export declare const actionToggleZenMode: {
74
74
  currentItemStrokeColor: string;
75
75
  currentItemBackgroundColor: string;
76
76
  currentItemFillStyle: import("@excalidraw/element/types").ExcalidrawElement["fillStyle"];
77
- currentItemStrokeWidth: number;
77
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
78
78
  currentItemStrokeStyle: import("@excalidraw/element/types").ExcalidrawElement["strokeStyle"];
79
79
  currentItemRoughness: number;
80
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
80
81
  currentItemOpacity: number;
81
82
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
82
83
  currentItemFontSize: number;
@@ -2,7 +2,7 @@ export { actionDeleteSelected } from "./actionDeleteSelected";
2
2
  export { actionBringForward, actionBringToFront, actionSendBackward, actionSendToBack, } from "./actionZindex";
3
3
  export { actionSelectAll } from "./actionSelectAll";
4
4
  export { actionDuplicateSelection } from "./actionDuplicateSelection";
5
- export { actionChangeStrokeColor, actionChangeBackgroundColor, actionChangeStrokeWidth, actionChangeFillStyle, actionChangeSloppiness, actionChangeOpacity, actionChangeFontSize, actionChangeFontFamily, actionChangeTextAlign, actionChangeVerticalAlign, actionChangeArrowProperties, } from "./actionProperties";
5
+ export { actionChangeStrokeColor, actionChangeBackgroundColor, actionChangeStrokeWidth, actionChangeFillStyle, actionChangeSloppiness, actionChangeFreedrawMode, actionChangeOpacity, actionChangeFontSize, actionChangeFontFamily, actionChangeTextAlign, actionChangeVerticalAlign, actionChangeArrowProperties, } from "./actionProperties";
6
6
  export { actionChangeViewBackgroundColor, actionZoomIn, actionZoomOut, actionResetZoom, actionZoomToFit, actionToggleTheme, } from "./actionCanvas";
7
7
  export { actionSetEmbeddableAsActiveTool } from "./actionEmbeddable";
8
8
  export { actionFinalize } from "./actionFinalize";
@@ -14,7 +14,7 @@ export type ActionResult = {
14
14
  type ActionFn<TData = any> = (elements: readonly OrderedExcalidrawElement[], appState: Readonly<AppState>, formData: TData | undefined, app: AppClassProperties) => ActionResult | Promise<ActionResult>;
15
15
  export type UpdaterFn = (res: ActionResult) => void;
16
16
  export type ActionFilterFn = (action: Action) => void;
17
- export type ActionName = "copy" | "cut" | "paste" | "copyAsPng" | "copyAsSvg" | "copyText" | "sendBackward" | "bringForward" | "sendToBack" | "bringToFront" | "copyStyles" | "selectAll" | "pasteStyles" | "gridMode" | "zenMode" | "objectsSnapMode" | "arrowBinding" | "midpointSnapping" | "stats" | "changeStrokeColor" | "changeBackgroundColor" | "changeFillStyle" | "changeStrokeWidth" | "changeStrokeShape" | "changeSloppiness" | "changeStrokeStyle" | "changeArrowhead" | "changeArrowType" | "changeArrowProperties" | "changeOpacity" | "changeFontSize" | "undo" | "redo" | "finalize" | "changeProjectName" | "changeExportBackground" | "changeExportEmbedScene" | "changeExportScale" | "saveToActiveFile" | "saveFileToDisk" | "loadScene" | "duplicateSelection" | "deleteSelectedElements" | "changeViewBackgroundColor" | "zoomIn" | "zoomOut" | "resetZoom" | "zoomToFit" | "zoomToFitSelection" | "zoomToFitSelectionInViewport" | "changeFontFamily" | "changeTextAlign" | "changeVerticalAlign" | "toggleFullScreen" | "toggleShortcuts" | "group" | "ungroup" | "goToCollaborator" | "changeRoundness" | "alignTop" | "alignBottom" | "alignLeft" | "alignRight" | "alignVerticallyCentered" | "alignHorizontallyCentered" | "distributeHorizontally" | "distributeVertically" | "arrangeElements" | "normaliseElements" | "flipHorizontal" | "flipVertical" | "deselect" | "viewMode" | "exportWithDarkMode" | "toggleTheme" | "increaseFontSize" | "decreaseFontSize" | "unbindText" | "hyperlink" | "bindText" | "unlockAllElements" | "toggleElementLock" | "toggleLinearEditor" | "toggleEraserTool" | "toggleHandTool" | "selectAllElementsInFrame" | "removeAllElementsFromFrame" | "updateFrameRendering" | "setFrameAsActiveTool" | "setEmbeddableAsActiveTool" | "createContainerFromText" | "wrapTextInContainer" | "autoResize" | "elementStats" | "searchMenu" | "copyElementLink" | "linkToElement" | "cropEditor" | "wrapSelectionInFrame" | "smartZoom" | "toggleLassoTool" | "toggleShapeSwitch" | "togglePolygon";
17
+ export type ActionName = "copy" | "cut" | "paste" | "copyAsPng" | "copyAsSvg" | "copyText" | "sendBackward" | "bringForward" | "sendToBack" | "bringToFront" | "copyStyles" | "selectAll" | "pasteStyles" | "gridMode" | "zenMode" | "objectsSnapMode" | "arrowBinding" | "midpointSnapping" | "stats" | "changeStrokeColor" | "changeBackgroundColor" | "changeFillStyle" | "changeStrokeWidth" | "changeStrokeShape" | "changeSloppiness" | "changeFreedrawMode" | "changeStrokeStyle" | "changeArrowhead" | "changeArrowType" | "changeArrowProperties" | "changeOpacity" | "changeFontSize" | "undo" | "redo" | "finalize" | "changeProjectName" | "changeExportBackground" | "changeExportEmbedScene" | "changeExportScale" | "saveToActiveFile" | "saveFileToDisk" | "loadScene" | "duplicateSelection" | "deleteSelectedElements" | "changeViewBackgroundColor" | "zoomIn" | "zoomOut" | "resetZoom" | "zoomToFit" | "zoomToFitSelection" | "zoomToFitSelectionInViewport" | "changeFontFamily" | "changeTextAlign" | "changeVerticalAlign" | "toggleFullScreen" | "toggleShortcuts" | "group" | "ungroup" | "goToCollaborator" | "changeRoundness" | "alignTop" | "alignBottom" | "alignLeft" | "alignRight" | "alignVerticallyCentered" | "alignHorizontallyCentered" | "distributeHorizontally" | "distributeVertically" | "arrangeElements" | "normaliseElements" | "flipHorizontal" | "flipVertical" | "deselect" | "viewMode" | "exportWithDarkMode" | "toggleTheme" | "increaseFontSize" | "decreaseFontSize" | "unbindText" | "hyperlink" | "bindText" | "unlockAllElements" | "toggleElementLock" | "toggleLinearEditor" | "toggleEraserTool" | "toggleHandTool" | "selectAllElementsInFrame" | "removeAllElementsFromFrame" | "updateFrameRendering" | "setFrameAsActiveTool" | "setEmbeddableAsActiveTool" | "createContainerFromText" | "wrapTextInContainer" | "autoResize" | "elementStats" | "searchMenu" | "copyElementLink" | "linkToElement" | "cropEditor" | "wrapSelectionInFrame" | "smartZoom" | "toggleLassoTool" | "toggleShapeSwitch" | "togglePolygon";
18
18
  export type PanelComponentProps = {
19
19
  elements: readonly ExcalidrawElement[];
20
20
  appState: AppState;
@@ -60,9 +60,10 @@ export declare const clearAppStateForLocalStorage: (appState: Partial<AppState>)
60
60
  currentItemStrokeColor?: string | undefined;
61
61
  currentItemBackgroundColor?: string | undefined;
62
62
  currentItemFillStyle?: import("@excalidraw/element/types").FillStyle | undefined;
63
- currentItemStrokeWidth?: number | undefined;
63
+ currentItemStrokeWidthKey?: import("@excalidraw/common").StrokeWidthKey | undefined;
64
64
  currentItemStrokeStyle?: import("@excalidraw/element/types").StrokeStyle | undefined;
65
65
  currentItemRoughness?: number | undefined;
66
+ currentItemStrokeVariability?: import("@excalidraw/element/types").StrokeVariability | undefined;
66
67
  currentItemOpacity?: number | undefined;
67
68
  currentItemFontFamily?: number | undefined;
68
69
  currentItemFontSize?: number | undefined;
@@ -2,13 +2,14 @@ import React from "react";
2
2
  import { AppEventBus, type EXPORT_IMAGE_TYPES, Emitter, type EditorInterface, type StylesPanelMode } from "@excalidraw/common";
3
3
  import { FlowChartCreator, Scene, Store, type ElementUpdate, StoreDelta, type ApplyToOptions } from "@excalidraw/element";
4
4
  import { LinearElementEditor } from "@excalidraw/element/linearElementEditor";
5
- import type { ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
5
+ import type { ExcalidrawElement, NonDeleted, FileId, NonDeletedExcalidrawElement, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
6
6
  import type { Mutable } from "@excalidraw/common/utility-types";
7
7
  import { ActionManager } from "../actions/manager";
8
8
  import { History } from "../history";
9
9
  import { Fonts } from "../fonts";
10
10
  import { type WritableAtom } from "../editor-jotai";
11
11
  import { Renderer } from "../scene/Renderer";
12
+ import { type ScrollToContentOptions } from "../scroll";
12
13
  import { LaserTrails } from "../laserTrails";
13
14
  import { isOverScrollBars } from "../scene/scrollbars";
14
15
  import { LassoTrail } from "../lasso";
@@ -88,6 +89,10 @@ declare class App extends React.Component<AppProps, AppState> {
88
89
  };
89
90
  files: BinaryFiles;
90
91
  imageCache: AppClassProperties["imageCache"];
92
+ imageLoadingProgress: Map<FileId, number>;
93
+ imageLoadingProgressEmitter: Emitter<[]>;
94
+ imagePlaceholderUpdateEmitter: Emitter<[]>;
95
+ private imageTransitionPlaceholders;
91
96
  private iFrameRefs;
92
97
  /**
93
98
  * Indicates whether the embeddable's url has been validated for rendering.
@@ -387,33 +392,7 @@ declare class App extends React.Component<AppProps, AppState> {
387
392
  animate?: boolean;
388
393
  duration?: number;
389
394
  }) => void;
390
- scrollToContent: (
391
- /**
392
- * target to scroll to
393
- *
394
- * - string - id of element or group, or url containing elementLink
395
- * - ExcalidrawElement | ExcalidrawElement[] - element(s) objects
396
- */
397
- target?: string | ExcalidrawElement | readonly ExcalidrawElement[], opts?: ({
398
- fitToContent?: boolean;
399
- fitToViewport?: never;
400
- viewportZoomFactor?: number;
401
- animate?: boolean;
402
- duration?: number;
403
- } | {
404
- fitToContent?: never;
405
- fitToViewport?: boolean;
406
- /** when fitToViewport=true, how much screen should the content cover,
407
- * between 0.1 (10%) and 1 (100%)
408
- */
409
- viewportZoomFactor?: number;
410
- animate?: boolean;
411
- duration?: number;
412
- }) & {
413
- minZoom?: number;
414
- maxZoom?: number;
415
- canvasOffsets?: Offsets;
416
- }) => void;
395
+ scrollToContent: (target?: string | ExcalidrawElement | readonly NonDeletedExcalidrawElement[], opts?: ScrollToContentOptions) => void;
417
396
  private maybeUnfollowRemoteUser;
418
397
  /** use when changing scrollX/scrollY/zoom based on user interaction */
419
398
  private translateCanvas;
@@ -425,6 +404,10 @@ declare class App extends React.Component<AppProps, AppState> {
425
404
  * NOTE if file already exists in editor state, the file data is not updated
426
405
  * */
427
406
  addFiles: ExcalidrawImperativeAPI["addFiles"];
407
+ addImagePlaceholder: ExcalidrawImperativeAPI["addImagePlaceholder"];
408
+ setImageLoadingProgress: ExcalidrawImperativeAPI["setImageLoadingProgress"];
409
+ private clearImageLoadingProgress;
410
+ private clearImageShapeCacheForFileId;
428
411
  private addMissingFiles;
429
412
  updateScene: <K extends keyof AppState>(sceneData: {
430
413
  elements?: SceneData["elements"];
@@ -555,6 +538,7 @@ declare class App extends React.Component<AppProps, AppState> {
555
538
  private newImagePlaceholder;
556
539
  private handleLinearElementOnPointerDown;
557
540
  private getCurrentItemRoundness;
541
+ private getCurrentItemStrokeWidth;
558
542
  private createGenericElementOnPointerDown;
559
543
  private createFrameElementOnPointerDown;
560
544
  private maybeCacheReferenceSnapPoints;
@@ -14,7 +14,7 @@ export declare const isCustomColor: ({ color, palette, }: {
14
14
  }) => boolean;
15
15
  export declare const getMostUsedCustomColors: (elements: readonly ExcalidrawElement[], type: "elementBackground" | "elementStroke", palette: ColorPaletteCustom) => string[];
16
16
  export type ActiveColorPickerSectionAtomType = "custom" | "baseColors" | "shades" | "hex" | null;
17
- export declare const activeColorPickerSectionAtom: import("jotai/vanilla/atom").PrimitiveAtom<ActiveColorPickerSectionAtomType> & {
17
+ export declare const activeColorPickerSectionAtom: import("jotai").PrimitiveAtom<ActiveColorPickerSectionAtomType> & {
18
18
  init: ActiveColorPickerSectionAtomType;
19
19
  };
20
20
  export type ColorPickerType = "canvasBackground" | "elementBackground" | "elementStroke";
@@ -2,7 +2,7 @@ import type { ConvertibleTypes, ExcalidrawElement, ExcalidrawTextContainer, Exca
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import "./ConvertElementTypePopup.scss";
4
4
  import type App from "./App";
5
- export declare const convertElementTypePopupAtom: import("jotai/vanilla/atom").PrimitiveAtom<{
5
+ export declare const convertElementTypePopupAtom: import("jotai").PrimitiveAtom<{
6
6
  type: "panel";
7
7
  } | null> & {
8
8
  init: {
@@ -13,7 +13,7 @@ export type EyeDropperProperties = {
13
13
  **/
14
14
  colorPickerType: ColorPickerType;
15
15
  };
16
- export declare const activeEyeDropperAtom: import("jotai/vanilla/atom").PrimitiveAtom<EyeDropperProperties | null> & {
16
+ export declare const activeEyeDropperAtom: import("jotai").PrimitiveAtom<EyeDropperProperties | null> & {
17
17
  init: EyeDropperProperties | null;
18
18
  };
19
19
  export declare const EyeDropper: React.FC<{
@@ -11,7 +11,7 @@ export type OverwriteConfirmState = {
11
11
  } | {
12
12
  active: false;
13
13
  };
14
- export declare const overwriteConfirmStateAtom: import("jotai/vanilla/atom").PrimitiveAtom<OverwriteConfirmState> & {
14
+ export declare const overwriteConfirmStateAtom: import("jotai").PrimitiveAtom<OverwriteConfirmState> & {
15
15
  init: OverwriteConfirmState;
16
16
  };
17
17
  export declare function openConfirmModal({ title, description, actionLabel, color, }: {
@@ -1,5 +1,5 @@
1
1
  import "./SearchMenu.scss";
2
- export declare const searchItemInFocusAtom: import("jotai/vanilla/atom").PrimitiveAtom<number | null> & {
2
+ export declare const searchItemInFocusAtom: import("jotai").PrimitiveAtom<number | null> & {
3
3
  init: number | null;
4
4
  };
5
5
  export declare const SearchMenu: () => import("react/jsx-runtime").JSX.Element;
@@ -8,7 +8,7 @@ import "./Sidebar.scss";
8
8
  *
9
9
  * Since we can only render one Sidebar at a time, we can use a simple flag.
10
10
  */
11
- export declare const isSidebarDockedAtom: import("jotai/vanilla/atom").PrimitiveAtom<boolean> & {
11
+ export declare const isSidebarDockedAtom: import("jotai").PrimitiveAtom<boolean> & {
12
12
  init: boolean;
13
13
  };
14
14
  export declare const SidebarInner: React.ForwardRefExoticComponent<Omit<{
@@ -1,9 +1,10 @@
1
1
  import React from "react";
2
2
  import type { NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
3
3
  import type { RenderableElementsMap, StaticCanvasRenderConfig } from "../../scene/types";
4
- import type { StaticCanvasAppState } from "../../types";
4
+ import type { AppClassProperties, StaticCanvasAppState } from "../../types";
5
5
  import type { RoughCanvas } from "roughjs/bin/canvas";
6
6
  type StaticCanvasProps = {
7
+ app: AppClassProperties;
7
8
  canvas: HTMLCanvasElement;
8
9
  rc: RoughCanvas;
9
10
  elementsMap: RenderableElementsMap;
@@ -113,6 +113,8 @@ export declare const StrokeStyleDottedIcon: import("react/jsx-runtime").JSX.Elem
113
113
  export declare const SloppinessArchitectIcon: import("react/jsx-runtime").JSX.Element;
114
114
  export declare const SloppinessArtistIcon: import("react/jsx-runtime").JSX.Element;
115
115
  export declare const SloppinessCartoonistIcon: import("react/jsx-runtime").JSX.Element;
116
+ export declare const strokeVariabilityConstantIcon: import("react/jsx-runtime").JSX.Element;
117
+ export declare const strokeVariabilityVariableIcon: import("react/jsx-runtime").JSX.Element;
116
118
  export declare const EdgeSharpIcon: import("react/jsx-runtime").JSX.Element;
117
119
  export declare const EdgeRoundIcon: import("react/jsx-runtime").JSX.Element;
118
120
  export declare const ArrowheadNoneIcon: React.MemoExoticComponent<({ flip }: {
@@ -132,9 +132,10 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
132
132
  currentItemStrokeColor: string;
133
133
  currentItemBackgroundColor: string;
134
134
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
135
- currentItemStrokeWidth: number;
135
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
136
136
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
137
137
  currentItemRoughness: number;
138
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
138
139
  currentItemOpacity: number;
139
140
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
140
141
  currentItemFontSize: number;
@@ -133,9 +133,10 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
133
133
  currentItemStrokeColor: string;
134
134
  currentItemBackgroundColor: string;
135
135
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
136
- currentItemStrokeWidth: number;
136
+ currentItemStrokeWidthKey: import("@excalidraw/common").StrokeWidthKey;
137
137
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
138
138
  currentItemRoughness: number;
139
+ currentItemStrokeVariability: import("@excalidraw/element/types").StrokeVariability;
139
140
  currentItemOpacity: number;
140
141
  currentItemFontFamily: import("@excalidraw/element/types").FontFamilyValues;
141
142
  currentItemFontSize: number;
@@ -12,4 +12,5 @@ export declare class AnimationController {
12
12
  private static tick;
13
13
  static running(key: string): boolean;
14
14
  static cancel(key: string): void;
15
+ static reset(): void;
15
16
  }
@@ -272,6 +272,7 @@ export declare class Renderer {
272
272
  type: "image";
273
273
  fileId: import("@excalidraw/element/types").FileId | null;
274
274
  fileName: string | null;
275
+ thumbHash: string | null;
275
276
  status: "pending" | "saved" | "error";
276
277
  scale: [number, number];
277
278
  crop: import("@excalidraw/element/types").ImageCrop | null;
@@ -427,6 +428,7 @@ export declare class Renderer {
427
428
  points: readonly import("@excalidraw/math").LocalPoint[];
428
429
  pressures: readonly number[];
429
430
  simulatePressure: boolean;
431
+ strokeOptions: import("@excalidraw/element/types").StrokeOptions;
430
432
  }> & {
431
433
  isDeleted: boolean;
432
434
  }) | null;
@@ -1,4 +1,4 @@
1
1
  export { isSomeElementSelected, getElementsWithinSelection, getSelectedElements, getTargetElements, } from "@excalidraw/element";
2
2
  export { calculateScrollCenter } from "./scroll";
3
- export { hasBackground, hasStrokeWidth, hasStrokeStyle, canHaveArrowheads, canChangeRoundness, } from "@excalidraw/element";
3
+ export { hasBackground, hasStrokeWidth, hasStrokeStyle, hasFreedrawMode, canHaveArrowheads, canChangeRoundness, } from "@excalidraw/element";
4
4
  export { getNormalizedZoom, getNormalizedGridSize, getNormalizedGridStep, } from "./normalize";
@@ -8,6 +8,7 @@ export type RenderableElementsMap = NonDeletedElementsMap & MakeBrand<"Renderabl
8
8
  export type StaticCanvasRenderConfig = {
9
9
  canvasBackgroundColor: AppState["viewBackgroundColor"];
10
10
  imageCache: AppClassProperties["imageCache"];
11
+ imageTransitionDuration?: number;
11
12
  renderGrid: boolean;
12
13
  /** when exporting the behavior is slightly different (e.g. we can't use
13
14
  CSS filters), and we disable render optimizations for best output */
@@ -0,0 +1,46 @@
1
+ import type { ExcalidrawElement } from "@excalidraw/element/types";
2
+ import type { AppState, Offsets } from "./types";
3
+ export declare const SCROLL_TO_CONTENT_ANIMATION_KEY = "animateScrollToContent";
4
+ export type ScrollToContentOptions = ({
5
+ fitToContent?: boolean;
6
+ fitToViewport?: never;
7
+ viewportZoomFactor?: number;
8
+ animate?: boolean;
9
+ duration?: number;
10
+ } | {
11
+ fitToContent?: never;
12
+ fitToViewport?: boolean;
13
+ /** when fitToViewport=true, how much screen should the content cover,
14
+ * between 0.1 (10%) and 1 (100%) */
15
+ viewportZoomFactor?: number;
16
+ animate?: boolean;
17
+ duration?: number;
18
+ }) & {
19
+ minZoom?: number;
20
+ maxZoom?: number;
21
+ canvasOffsets?: Offsets;
22
+ };
23
+ type Viewport = Pick<AppState, "scrollX" | "scrollY" | "zoom">;
24
+ /**
25
+ * Scrolls (and optionally zooms) the viewport so that the given target is in
26
+ * view, optionally animating the transition.
27
+ */
28
+ export declare const scrollToElements: (state: AppState, target: readonly ExcalidrawElement[], onFrame: (state: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "shouldCacheIgnoreZoom">) => void, opts?: ScrollToContentOptions) => void;
29
+ /**
30
+ * Interpolates the viewport from `from` to `target` at the (already-eased)
31
+ * blend amount `factor` (0 = `from`, 1 = `target`).
32
+ *
33
+ * Zoom is interpolated geometrically (so it feels uniform), and rather than
34
+ * tweening scrollX/scrollY directly we tween the *focal point* — the scene
35
+ * point under the viewport center — and derive scroll from it. Mixing a linear
36
+ * scroll with a geometric zoom makes the focal point swoop sideways
37
+ * mid-animation (most visible when zooming out); gliding the focal point keeps
38
+ * it steady. `width/2/zoom - scroll` is the inverse of `centerScrollOn` without
39
+ * offsets, so factor 0/1 land exactly on `from`/`target`.
40
+ */
41
+ export declare const interpolateViewport: ({ from, target, factor, }: {
42
+ from: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "width" | "height">;
43
+ target: Viewport;
44
+ factor: number;
45
+ }) => Viewport;
46
+ export {};
@@ -1,7 +1,7 @@
1
- import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES, ColorTuple, EditorInterface } from "@excalidraw/common";
1
+ import type { IMAGE_MIME_TYPES, UserIdleState, throttleRAF, MIME_TYPES, ColorTuple, EditorInterface, StrokeWidthKey } from "@excalidraw/common";
2
2
  import type { LinearElementEditor } from "@excalidraw/element";
3
3
  import type { MaybeTransformHandleType } from "@excalidraw/element";
4
- import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, FontFamilyValues, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, ArrangeAlgorithms, BindMode, ExcalidrawTextElement } from "@excalidraw/element/types";
4
+ import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, Arrowhead, FontFamilyValues, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, ArrangeAlgorithms, BindMode, ExcalidrawTextElement, StrokeVariability } from "@excalidraw/element/types";
5
5
  import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
6
6
  import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement } from "@excalidraw/element";
7
7
  import type { GlobalPoint } from "@excalidraw/math";
@@ -64,6 +64,8 @@ export type BinaryFileData = {
64
64
  id: FileId;
65
65
  fileName: string;
66
66
  dataURL: DataURL;
67
+ /** compact image placeholder, also stored on the corresponding image element */
68
+ thumbHash?: string;
67
69
  /**
68
70
  * Epoch timestamp in milliseconds
69
71
  */
@@ -294,9 +296,10 @@ export interface AppState {
294
296
  currentItemStrokeColor: string;
295
297
  currentItemBackgroundColor: string;
296
298
  currentItemFillStyle: ExcalidrawElement["fillStyle"];
297
- currentItemStrokeWidth: number;
299
+ currentItemStrokeWidthKey: StrokeWidthKey;
298
300
  currentItemStrokeStyle: ExcalidrawElement["strokeStyle"];
299
301
  currentItemRoughness: number;
302
+ currentItemStrokeVariability: StrokeVariability;
300
303
  currentItemOpacity: number;
301
304
  currentItemFontFamily: FontFamilyValues;
302
305
  currentItemFontSize: number;
@@ -590,6 +593,8 @@ export type ExportOpts = {
590
593
  export type ImageOptions = Partial<{
591
594
  maxWidthOrHeight: number;
592
595
  maxFileSizeBytes: number;
596
+ /** duration of the placeholder-to-full-image crossfade in milliseconds */
597
+ placeholderTransitionDuration: number;
593
598
  }>;
594
599
  export type CanvasActions = Partial<{
595
600
  changeViewBackgroundColor: boolean;
@@ -645,7 +650,13 @@ export type AppClassProperties = {
645
650
  imageCache: Map<FileId, {
646
651
  image: HTMLImageElement | Promise<HTMLImageElement>;
647
652
  mimeType: ValueOf<typeof IMAGE_MIME_TYPES>;
653
+ isPlaceholder?: boolean;
654
+ placeholderImage?: HTMLImageElement;
655
+ transitionStart?: number;
648
656
  }>;
657
+ imageLoadingProgress: App["imageLoadingProgress"];
658
+ imageLoadingProgressEmitter: App["imageLoadingProgressEmitter"];
659
+ imagePlaceholderUpdateEmitter: App["imagePlaceholderUpdateEmitter"];
649
660
  files: BinaryFiles;
650
661
  editorInterface: App["editorInterface"];
651
662
  scene: App["scene"];
@@ -774,6 +785,8 @@ export interface ExcalidrawImperativeAPI {
774
785
  refresh: InstanceType<typeof App>["refresh"];
775
786
  setToast: InstanceType<typeof App>["setToast"];
776
787
  addFiles: (data: BinaryFileData[]) => void;
788
+ addImagePlaceholder: (fileId: FileId, file: File) => Promise<void>;
789
+ setImageLoadingProgress: (fileId: FileId, progress: number | null) => void;
777
790
  addImageElementsToScene: (imageFiles: {
778
791
  file: File;
779
792
  customData: Record<string, any>;
@@ -0,0 +1,2 @@
1
+ export * from "./state";
2
+ export type { Point } from "./math";
@@ -0,0 +1,16 @@
1
+ export type Point = [x: number, y: number, r: number];
2
+ export declare function add([ax, ay, ar]: Point, [bx, by, br]: Point): Point;
3
+ export declare function sub([ax, ay, ar]: Point, [bx, by, br]: Point): Point;
4
+ export declare function smul([x, y, r]: Point, s: number): Point;
5
+ export declare function norm([x, y, r]: Point): Point;
6
+ export declare function rot([x, y, r]: Point, rad: number): Point;
7
+ export declare function plerp(a: Point, b: Point, t: number): Point;
8
+ export declare function lerp(a: number, b: number, t: number): number;
9
+ export declare function angle(p: Point, p1: Point, p2: Point): number;
10
+ export declare function normAngle(a: number): number;
11
+ export declare function mag([x, y]: Point): number;
12
+ export declare function dist([ax, ay]: Point, [bx, by]: Point): number;
13
+ export declare function getCircleAndPerpendicularLineIntersectionsAtPoint(point: Point, direction: Point, radius: number): [Point, Point];
14
+ export declare function runLength(ps: Point[]): number;
15
+ export declare const clamp: (v: number, min: number, max: number) => number;
16
+ export declare function distancePointToSegment(p3: Point, p1: Point, p2: Point): number;
@@ -0,0 +1,2 @@
1
+ import { type Point } from "./math";
2
+ export declare function douglasPeucker(points: Point[], epsilon: number): Point[];