@dwelle/excalidraw 0.3.73 → 0.3.76-react18
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/dist/excalidraw.development.js +25 -14
- package/dist/excalidraw.production.min.js +1 -1
- package/package.json +1 -1
- package/types/components/App.d.ts +159 -2
- package/types/components/Card.d.ts +1 -0
- package/types/components/CheckboxItem.d.ts +1 -0
- package/types/components/LayerUI.d.ts +1 -4
- package/types/components/MobileMenu.d.ts +1 -2
- package/types/components/Section.d.ts +4 -5
- package/types/emitter.d.ts +21 -0
- package/types/renderer/renderScene.d.ts +7 -5
- package/types/types.d.ts +4 -0
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { RoughCanvas } from "roughjs/bin/canvas";
|
|
3
3
|
import { ActionManager } from "../actions/manager";
|
|
4
|
-
import { ExcalidrawElement, NonDeletedExcalidrawElement } from "../element/types";
|
|
4
|
+
import { ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement } from "../element/types";
|
|
5
5
|
import History from "../history";
|
|
6
6
|
import Scene from "../scene/Scene";
|
|
7
7
|
import { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, Device } from "../types";
|
|
8
8
|
import { FileSystemHandle } from "../data/filesystem";
|
|
9
|
+
import { Emitter } from "../emitter";
|
|
9
10
|
export declare const useDevice: () => Readonly<{
|
|
10
11
|
isSmScreen: boolean;
|
|
11
12
|
isMobile: boolean;
|
|
@@ -43,6 +44,163 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
43
44
|
x: number;
|
|
44
45
|
y: number;
|
|
45
46
|
} | null;
|
|
47
|
+
onChangeEmitter: Emitter<[elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles]>;
|
|
48
|
+
onPointerDownEmitter: Emitter<[activeTool: {
|
|
49
|
+
type: "line" | "arrow" | "text" | "selection" | "rectangle" | "diamond" | "ellipse" | "image" | "freedraw" | "eraser";
|
|
50
|
+
lastActiveToolBeforeEraser: import("../types").LastActiveToolBeforeEraser;
|
|
51
|
+
locked: boolean;
|
|
52
|
+
customType: null;
|
|
53
|
+
} | {
|
|
54
|
+
type: "custom";
|
|
55
|
+
customType: string;
|
|
56
|
+
lastActiveToolBeforeEraser: import("../types").LastActiveToolBeforeEraser;
|
|
57
|
+
locked: boolean;
|
|
58
|
+
}, pointerDownState: Readonly<{
|
|
59
|
+
origin: Readonly<{
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
}>;
|
|
63
|
+
originInGrid: Readonly<{
|
|
64
|
+
x: number;
|
|
65
|
+
y: number;
|
|
66
|
+
}>;
|
|
67
|
+
scrollbars: {
|
|
68
|
+
isOverEither: boolean;
|
|
69
|
+
isOverHorizontal: boolean;
|
|
70
|
+
isOverVertical: boolean;
|
|
71
|
+
};
|
|
72
|
+
lastCoords: {
|
|
73
|
+
x: number;
|
|
74
|
+
y: number;
|
|
75
|
+
};
|
|
76
|
+
originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
|
|
77
|
+
resize: {
|
|
78
|
+
handleType: import("../element/transformHandles").MaybeTransformHandleType;
|
|
79
|
+
isResizing: boolean;
|
|
80
|
+
offset: {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
};
|
|
84
|
+
arrowDirection: "end" | "origin";
|
|
85
|
+
center: {
|
|
86
|
+
x: number;
|
|
87
|
+
y: number;
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
hit: {
|
|
91
|
+
element: NonDeleted<ExcalidrawElement> | null;
|
|
92
|
+
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
93
|
+
wasAddedToSelection: boolean;
|
|
94
|
+
hasBeenDuplicated: boolean;
|
|
95
|
+
hasHitCommonBoundingBoxOfSelectedElements: boolean;
|
|
96
|
+
hasHitElementInside: boolean;
|
|
97
|
+
};
|
|
98
|
+
withCmdOrCtrl: boolean;
|
|
99
|
+
drag: {
|
|
100
|
+
hasOccurred: boolean;
|
|
101
|
+
offset: {
|
|
102
|
+
x: number;
|
|
103
|
+
y: number;
|
|
104
|
+
} | null;
|
|
105
|
+
};
|
|
106
|
+
eventListeners: {
|
|
107
|
+
onMove: {
|
|
108
|
+
(...args: any[]): void;
|
|
109
|
+
flush(): void;
|
|
110
|
+
cancel(): void;
|
|
111
|
+
} | null;
|
|
112
|
+
onUp: ((event: PointerEvent) => void) | null;
|
|
113
|
+
onKeyDown: ((event: KeyboardEvent) => void) | null;
|
|
114
|
+
onKeyUp: ((event: KeyboardEvent) => void) | null;
|
|
115
|
+
};
|
|
116
|
+
boxSelection: {
|
|
117
|
+
hasOccurred: boolean;
|
|
118
|
+
};
|
|
119
|
+
elementIdsToErase: {
|
|
120
|
+
[key: string]: {
|
|
121
|
+
opacity: number;
|
|
122
|
+
erase: boolean;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
}>, event: React.PointerEvent<HTMLCanvasElement>]>;
|
|
126
|
+
onPointerUpEmitter: Emitter<[activeTool: {
|
|
127
|
+
type: "line" | "arrow" | "text" | "selection" | "rectangle" | "diamond" | "ellipse" | "image" | "freedraw" | "eraser";
|
|
128
|
+
lastActiveToolBeforeEraser: import("../types").LastActiveToolBeforeEraser;
|
|
129
|
+
locked: boolean;
|
|
130
|
+
customType: null;
|
|
131
|
+
} | {
|
|
132
|
+
type: "custom";
|
|
133
|
+
customType: string;
|
|
134
|
+
lastActiveToolBeforeEraser: import("../types").LastActiveToolBeforeEraser;
|
|
135
|
+
locked: boolean;
|
|
136
|
+
}, pointerDownState: Readonly<{
|
|
137
|
+
origin: Readonly<{
|
|
138
|
+
x: number;
|
|
139
|
+
y: number;
|
|
140
|
+
}>;
|
|
141
|
+
originInGrid: Readonly<{
|
|
142
|
+
x: number;
|
|
143
|
+
y: number;
|
|
144
|
+
}>;
|
|
145
|
+
scrollbars: {
|
|
146
|
+
isOverEither: boolean;
|
|
147
|
+
isOverHorizontal: boolean;
|
|
148
|
+
isOverVertical: boolean;
|
|
149
|
+
};
|
|
150
|
+
lastCoords: {
|
|
151
|
+
x: number;
|
|
152
|
+
y: number;
|
|
153
|
+
};
|
|
154
|
+
originalElements: Map<string, NonDeleted<ExcalidrawElement>>;
|
|
155
|
+
resize: {
|
|
156
|
+
handleType: import("../element/transformHandles").MaybeTransformHandleType;
|
|
157
|
+
isResizing: boolean;
|
|
158
|
+
offset: {
|
|
159
|
+
x: number;
|
|
160
|
+
y: number;
|
|
161
|
+
};
|
|
162
|
+
arrowDirection: "end" | "origin";
|
|
163
|
+
center: {
|
|
164
|
+
x: number;
|
|
165
|
+
y: number;
|
|
166
|
+
};
|
|
167
|
+
};
|
|
168
|
+
hit: {
|
|
169
|
+
element: NonDeleted<ExcalidrawElement> | null;
|
|
170
|
+
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
171
|
+
wasAddedToSelection: boolean;
|
|
172
|
+
hasBeenDuplicated: boolean;
|
|
173
|
+
hasHitCommonBoundingBoxOfSelectedElements: boolean;
|
|
174
|
+
hasHitElementInside: boolean;
|
|
175
|
+
};
|
|
176
|
+
withCmdOrCtrl: boolean;
|
|
177
|
+
drag: {
|
|
178
|
+
hasOccurred: boolean;
|
|
179
|
+
offset: {
|
|
180
|
+
x: number;
|
|
181
|
+
y: number;
|
|
182
|
+
} | null;
|
|
183
|
+
};
|
|
184
|
+
eventListeners: {
|
|
185
|
+
onMove: {
|
|
186
|
+
(...args: any[]): void;
|
|
187
|
+
flush(): void;
|
|
188
|
+
cancel(): void;
|
|
189
|
+
} | null;
|
|
190
|
+
onUp: ((event: PointerEvent) => void) | null;
|
|
191
|
+
onKeyDown: ((event: KeyboardEvent) => void) | null;
|
|
192
|
+
onKeyUp: ((event: KeyboardEvent) => void) | null;
|
|
193
|
+
};
|
|
194
|
+
boxSelection: {
|
|
195
|
+
hasOccurred: boolean;
|
|
196
|
+
};
|
|
197
|
+
elementIdsToErase: {
|
|
198
|
+
[key: string]: {
|
|
199
|
+
opacity: number;
|
|
200
|
+
erase: boolean;
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
}>, event: PointerEvent]>;
|
|
46
204
|
constructor(props: AppProps);
|
|
47
205
|
private renderCanvas;
|
|
48
206
|
render(): JSX.Element;
|
|
@@ -84,7 +242,6 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
84
242
|
removePointer: (event: React.PointerEvent<HTMLElement> | PointerEvent) => void;
|
|
85
243
|
toggleLock: (source?: "keyboard" | "ui") => void;
|
|
86
244
|
togglePenMode: () => void;
|
|
87
|
-
toggleZenMode: () => void;
|
|
88
245
|
scrollToContent: (target?: ExcalidrawElement | readonly ExcalidrawElement[]) => void;
|
|
89
246
|
setToast: (toast: {
|
|
90
247
|
message: string;
|
|
@@ -18,16 +18,13 @@ interface LayerUIProps {
|
|
|
18
18
|
onLockToggle: () => void;
|
|
19
19
|
onPenModeToggle: () => void;
|
|
20
20
|
onInsertElements: (elements: readonly NonDeletedExcalidrawElement[]) => void;
|
|
21
|
-
zenModeEnabled: boolean;
|
|
22
21
|
showExitZenModeBtn: boolean;
|
|
23
22
|
showThemeBtn: boolean;
|
|
24
|
-
toggleZenMode: () => void;
|
|
25
23
|
langCode: Language["code"];
|
|
26
24
|
isCollaborating: boolean;
|
|
27
25
|
renderTopRightUI?: ExcalidrawProps["renderTopRightUI"];
|
|
28
26
|
renderCustomFooter?: ExcalidrawProps["renderFooter"];
|
|
29
27
|
renderCustomStats?: ExcalidrawProps["renderCustomStats"];
|
|
30
|
-
viewModeEnabled: boolean;
|
|
31
28
|
libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
|
|
32
29
|
UIOptions: AppProps["UIOptions"];
|
|
33
30
|
focusContainer: () => void;
|
|
@@ -37,5 +34,5 @@ interface LayerUIProps {
|
|
|
37
34
|
insertOnCanvasDirectly: boolean;
|
|
38
35
|
}) => void;
|
|
39
36
|
}
|
|
40
|
-
declare const _default: React.MemoExoticComponent<({ onHomeButtonClick, actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements,
|
|
37
|
+
declare const _default: React.MemoExoticComponent<({ onHomeButtonClick, actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }: LayerUIProps) => JSX.Element>;
|
|
41
38
|
export default _default;
|
|
@@ -17,7 +17,6 @@ declare type MobileMenuProps = {
|
|
|
17
17
|
canvas: HTMLCanvasElement | null;
|
|
18
18
|
isCollaborating: boolean;
|
|
19
19
|
renderCustomFooter?: (isMobile: boolean, appState: AppState) => JSX.Element | null;
|
|
20
|
-
viewModeEnabled: boolean;
|
|
21
20
|
showThemeBtn: boolean;
|
|
22
21
|
onImageAction: (data: {
|
|
23
22
|
insertOnCanvasDirectly: boolean;
|
|
@@ -26,5 +25,5 @@ declare type MobileMenuProps = {
|
|
|
26
25
|
renderStats: () => JSX.Element | null;
|
|
27
26
|
UIOptions: AppProps["UIOptions"];
|
|
28
27
|
};
|
|
29
|
-
export declare const MobileMenu: ({ onHomeButtonClick, appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter,
|
|
28
|
+
export declare const MobileMenu: ({ onHomeButtonClick, appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, UIOptions, }: MobileMenuProps) => JSX.Element;
|
|
30
29
|
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
|
|
2
|
+
export declare const Section: React.FC<{
|
|
3
3
|
heading: string;
|
|
4
|
-
children
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export {};
|
|
4
|
+
children?: React.ReactNode | ((heading: React.ReactNode) => React.ReactNode);
|
|
5
|
+
className?: string;
|
|
6
|
+
}>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare type Subscriber<T extends any[]> = (...payload: T) => void;
|
|
2
|
+
export declare class Emitter<T extends any[] = []> {
|
|
3
|
+
subscribers: Subscriber<T>[];
|
|
4
|
+
value: T | undefined;
|
|
5
|
+
private updateOnChangeOnly;
|
|
6
|
+
constructor(opts?: {
|
|
7
|
+
initialState?: T;
|
|
8
|
+
updateOnChangeOnly?: boolean;
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Attaches subscriber
|
|
12
|
+
*
|
|
13
|
+
* @returns unsubscribe function
|
|
14
|
+
*/
|
|
15
|
+
on(...handlers: Subscriber<T>[] | Subscriber<T>[][]): () => void;
|
|
16
|
+
once(...handlers: Subscriber<T>[] | Subscriber<T>[][]): () => void;
|
|
17
|
+
off(...handlers: Subscriber<T>[] | Subscriber<T>[][]): void;
|
|
18
|
+
trigger(...payload: T): any[];
|
|
19
|
+
destroy(): void;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -3,7 +3,7 @@ import { RoughSVG } from "roughjs/bin/svg";
|
|
|
3
3
|
import { AppState, BinaryFiles } from "../types";
|
|
4
4
|
import { NonDeletedExcalidrawElement } from "../element/types";
|
|
5
5
|
import { RenderConfig } from "../scene/types";
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const _renderScene: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, renderConfig: RenderConfig) => {
|
|
7
7
|
atLeastOneVisibleElement: boolean;
|
|
8
8
|
scrollBars?: undefined;
|
|
9
9
|
} | {
|
|
@@ -11,10 +11,12 @@ export declare const renderScene: (elements: readonly NonDeletedExcalidrawElemen
|
|
|
11
11
|
scrollBars: import("../scene/types").ScrollBars | undefined;
|
|
12
12
|
};
|
|
13
13
|
/** renderScene throttled to animation framerate */
|
|
14
|
-
export declare const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
export declare const renderScene: <T extends boolean = false>(elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, renderConfig: RenderConfig, callback?: ((data: ReturnType<typeof _renderScene>) => void) | undefined, throttle?: T | undefined) => T extends true ? void : {
|
|
15
|
+
atLeastOneVisibleElement: boolean;
|
|
16
|
+
scrollBars?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
atLeastOneVisibleElement: boolean;
|
|
19
|
+
scrollBars: import("../scene/types").ScrollBars | undefined;
|
|
18
20
|
};
|
|
19
21
|
export declare const renderSceneToSvg: (elements: readonly NonDeletedExcalidrawElement[], rsvg: RoughSVG, svgRoot: SVGElement, files: BinaryFiles, { offsetX, offsetY, exportWithDarkMode, }?: {
|
|
20
22
|
offsetX?: number | undefined;
|
package/types/types.d.ts
CHANGED
|
@@ -356,6 +356,7 @@ export declare type PointerDownState = Readonly<{
|
|
|
356
356
|
};
|
|
357
357
|
};
|
|
358
358
|
}>;
|
|
359
|
+
declare type UnsubscribeCallback = () => void;
|
|
359
360
|
export declare type ExcalidrawImperativeAPI = {
|
|
360
361
|
updateScene: InstanceType<typeof App>["updateScene"];
|
|
361
362
|
updateLibrary: InstanceType<typeof Library>["updateLibrary"];
|
|
@@ -378,6 +379,9 @@ export declare type ExcalidrawImperativeAPI = {
|
|
|
378
379
|
setCursor: InstanceType<typeof App>["setCursor"];
|
|
379
380
|
resetCursor: InstanceType<typeof App>["resetCursor"];
|
|
380
381
|
app: InstanceType<typeof App>;
|
|
382
|
+
onChange: (callback: (elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles) => void) => UnsubscribeCallback;
|
|
383
|
+
onPointerDown: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: React.PointerEvent<HTMLCanvasElement>) => void) => UnsubscribeCallback;
|
|
384
|
+
onPointerUp: (callback: (activeTool: AppState["activeTool"], pointerDownState: PointerDownState, event: PointerEvent) => void) => UnsubscribeCallback;
|
|
381
385
|
};
|
|
382
386
|
export declare type Device = Readonly<{
|
|
383
387
|
isSmScreen: boolean;
|