@myoc/excalidraw 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.
- package/CHANGELOG.md +53 -0
- package/dist/dev/{chunk-RIK6B6HD.js → chunk-FQHULQ5P.js} +62 -26
- package/dist/dev/chunk-FQHULQ5P.js.map +7 -0
- package/dist/dev/{chunk-ZGRXNVW4.js → chunk-IU2VFRFU.js} +4 -1
- package/dist/dev/chunk-IU2VFRFU.js.map +7 -0
- package/dist/dev/{chunk-MCPNWEHU.js → chunk-SJJUXTTF.js} +2 -2
- package/dist/dev/data/{image-IRC25PM5.js → image-X3JCQEUX.js} +3 -3
- package/dist/dev/index.css +12 -0
- package/dist/dev/index.css.map +2 -2
- package/dist/dev/index.js +1315 -395
- package/dist/dev/index.js.map +4 -4
- package/dist/dev/locales/{en-RQFAMS2U.js → en-25BPHB4T.js} +2 -2
- package/dist/dev/subset-shared.chunk.js +1 -1
- package/dist/dev/subset-worker.chunk.js +1 -1
- package/dist/prod/{chunk-QW7MIEK6.js → chunk-3QXZ5NQO.js} +1 -1
- package/dist/prod/{chunk-VHQT4IVX.js → chunk-3UXKIWVY.js} +2 -2
- package/dist/prod/chunk-YJSNILE6.js +4 -0
- package/dist/prod/data/image-OBEPGJLJ.js +1 -0
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +20 -20
- package/dist/prod/locales/{en-6UCVDQQ7.js → en-AH5BYWXT.js} +1 -1
- package/dist/prod/subset-shared.chunk.js +1 -1
- package/dist/prod/subset-worker.chunk.js +1 -1
- package/dist/types/common/src/constants.d.ts +8 -5
- package/dist/types/common/src/utils.d.ts +0 -42
- package/dist/types/element/src/comparisons.d.ts +1 -0
- package/dist/types/element/src/image.d.ts +5 -0
- package/dist/types/element/src/newElement.d.ts +2 -0
- package/dist/types/element/src/types.d.ts +8 -0
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +22 -11
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +6 -3
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionExport.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionFrame.d.ts +10 -4
- package/dist/types/excalidraw/actions/actionGroup.d.ts +4 -2
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +4 -1
- package/dist/types/excalidraw/actions/actionLink.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionMenu.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionProperties.d.ts +16 -5
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionStyles.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +2 -1
- package/dist/types/excalidraw/actions/index.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +1 -1
- package/dist/types/excalidraw/appState.d.ts +2 -1
- package/dist/types/excalidraw/components/App.d.ts +12 -28
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +1 -1
- package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +2 -1
- package/dist/types/excalidraw/components/icons.d.ts +2 -0
- package/dist/types/excalidraw/data/blob.d.ts +2 -1
- package/dist/types/excalidraw/data/json.d.ts +2 -1
- package/dist/types/excalidraw/index.d.ts +2 -2
- package/dist/types/excalidraw/renderer/animation.d.ts +1 -0
- package/dist/types/excalidraw/scene/Renderer.d.ts +2 -0
- package/dist/types/excalidraw/scene/index.d.ts +1 -1
- package/dist/types/excalidraw/scene/types.d.ts +1 -0
- package/dist/types/excalidraw/scroll.d.ts +46 -0
- package/dist/types/excalidraw/types.d.ts +16 -3
- package/dist/types/laser-pointer/src/index.d.ts +2 -0
- package/dist/types/laser-pointer/src/math.d.ts +16 -0
- package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
- package/dist/types/laser-pointer/src/state.d.ts +35 -0
- package/package.json +4 -4
- package/dist/dev/chunk-RIK6B6HD.js.map +0 -7
- package/dist/dev/chunk-ZGRXNVW4.js.map +0 -7
- package/dist/prod/chunk-FL5QOM6C.js +0 -4
- package/dist/prod/data/image-7LG744DI.js +0 -1
- /package/dist/dev/{chunk-MCPNWEHU.js.map → chunk-SJJUXTTF.js.map} +0 -0
- /package/dist/dev/data/{image-IRC25PM5.js.map → image-X3JCQEUX.js.map} +0 -0
- /package/dist/dev/locales/{en-RQFAMS2U.js.map → en-25BPHB4T.js.map} +0 -0
|
@@ -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,
|
|
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<
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { applyDarkModeFilter } from "@excalidraw/common";
|
|
2
|
+
import { applyDarkModeFilter, getStrokeWidthByKey } from "@excalidraw/common";
|
|
3
3
|
import Footer from "./components/footer/FooterCenter";
|
|
4
4
|
import LiveCollaborationTrigger from "./components/live-collaboration/LiveCollaborationTrigger";
|
|
5
5
|
import MainMenu from "./components/main-menu/MainMenu";
|
|
@@ -61,4 +61,4 @@ export declare function useExcalidrawStateValue<K extends keyof AppState>(prop:
|
|
|
61
61
|
export declare function useExcalidrawStateValue<T extends keyof AppState>(props: T[]): AppState | undefined;
|
|
62
62
|
export declare function useExcalidrawStateValue<T>(selector: (appState: AppState) => T): T | undefined;
|
|
63
63
|
export { _useOnAppStateChange as useOnExcalidrawStateChange };
|
|
64
|
-
export { applyDarkModeFilter };
|
|
64
|
+
export { applyDarkModeFilter, getStrokeWidthByKey };
|
|
@@ -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
|
-
|
|
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,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;
|