@excalidraw/math 0.18.0-4ce38fb → 0.18.0-4ce8305
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/common/src/utils.d.ts +7 -1
- package/dist/types/element/src/align.d.ts +4 -1
- package/dist/types/element/src/binding.d.ts +36 -0
- package/dist/types/element/src/bounds.d.ts +10 -2
- package/dist/types/element/src/collision.d.ts +7 -0
- package/dist/types/element/src/cropElement.d.ts +36 -4
- package/dist/types/element/src/delta.d.ts +7 -1
- package/dist/types/element/src/distribute.d.ts +4 -1
- package/dist/types/element/src/dragElements.d.ts +8 -3
- package/dist/types/element/src/elbowArrow.d.ts +5 -0
- package/dist/types/element/src/embeddable.d.ts +2 -1
- package/dist/types/element/src/groups.d.ts +1 -6
- package/dist/types/element/src/image.d.ts +5 -2
- package/dist/types/element/src/index.d.ts +1 -0
- package/dist/types/element/src/linearElementEditor.d.ts +4 -1
- package/dist/types/element/src/listMarker.d.ts +7 -2
- package/dist/types/element/src/newElement.d.ts +3 -1
- package/dist/types/element/src/renderElement.d.ts +10 -0
- package/dist/types/element/src/renderEnvironment.d.ts +66 -0
- package/dist/types/element/src/resizeElements.d.ts +15 -5
- package/dist/types/element/src/selection.d.ts +1 -7
- package/dist/types/element/src/shape.d.ts +2 -0
- package/dist/types/element/src/stickyNote.d.ts +8 -0
- package/dist/types/element/src/textElement.d.ts +3 -2
- package/dist/types/element/src/textMeasurements.d.ts +15 -11
- package/dist/types/element/src/textWrapping.d.ts +3 -2
- package/dist/types/element/src/transform.d.ts +5 -1
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +46 -221
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +4 -588
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionExport.d.ts +7 -7
- package/dist/types/excalidraw/actions/actionFrame.d.ts +41 -525
- package/dist/types/excalidraw/actions/actionGroup.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleWrap.d.ts +12 -0
- package/dist/types/excalidraw/actions/index.d.ts +1 -0
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +1 -1
- package/dist/types/excalidraw/appState.d.ts +7 -7
- package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -1
- package/dist/types/excalidraw/charts/charts.helpers.d.ts +6 -5
- package/dist/types/excalidraw/charts/charts.line.d.ts +2 -1
- package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -1
- package/dist/types/excalidraw/charts/index.d.ts +2 -1
- package/dist/types/excalidraw/components/App.d.ts +34 -20
- package/dist/types/excalidraw/components/App.host.d.ts +102 -0
- package/dist/types/excalidraw/components/App.modifiers.d.ts +38 -0
- package/dist/types/excalidraw/components/App.selection.d.ts +265 -0
- package/dist/types/excalidraw/components/App.selectionTool.d.ts +93 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +13 -3
- package/dist/types/excalidraw/components/App.wrap.d.ts +31 -0
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -1
- package/dist/types/excalidraw/components/Stats/utils.d.ts +4 -2
- package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +5 -2
- package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/common.d.ts +4 -1
- package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +3 -2
- package/dist/types/excalidraw/components/TTDDialog/types.d.ts +14 -1
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +27 -1
- package/dist/types/excalidraw/components/Tooltip.d.ts +11 -1
- package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +1 -1
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +0 -1
- package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +3 -2
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +13 -2
- package/dist/types/excalidraw/data/blob.d.ts +14 -14
- package/dist/types/excalidraw/data/index.d.ts +3 -3
- package/dist/types/excalidraw/data/json.d.ts +7 -7
- package/dist/types/excalidraw/fonts/Fonts.d.ts +9 -6
- package/dist/types/excalidraw/history.d.ts +10 -4
- package/dist/types/excalidraw/reactUtils.d.ts +1 -1
- package/dist/types/excalidraw/renderer/animation.d.ts +11 -4
- package/dist/types/excalidraw/renderer/staticScene.d.ts +11 -6
- package/dist/types/excalidraw/scene/Renderer.d.ts +1 -1
- package/dist/types/excalidraw/scene/export.d.ts +343 -20
- package/dist/types/excalidraw/scene/types.d.ts +23 -1
- package/dist/types/excalidraw/types.d.ts +49 -1
- package/dist/types/utils/src/index.d.ts +3 -1
- package/package.json +2 -2
- package/dist/types/utils/src/export.d.ts +0 -36
|
@@ -1,31 +1,299 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { MIME_TYPES } from "@excalidraw/common";
|
|
2
|
+
import type { RenderEnvironment } from "@excalidraw/element";
|
|
3
|
+
import type { ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement, Theme } from "@excalidraw/element/types";
|
|
4
|
+
import { cleanAppStateForExport } from "../appState";
|
|
2
5
|
import type { AppState, BinaryFiles } from "../types";
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
export type ExportSceneData = {
|
|
7
|
+
elements: readonly NonDeletedExcalidrawElement[];
|
|
8
|
+
/**
|
|
9
|
+
* The scene settings a `.excalidraw` file stores (`viewBackgroundColor`,
|
|
10
|
+
* grid settings) — not editor state. Used as the default background
|
|
11
|
+
* (`canvasBackgroundColor`) and embedded with the scene (`embedScene`).
|
|
12
|
+
* Anything else passed in is ignored; rendering options go to `config`.
|
|
13
|
+
*/
|
|
14
|
+
appState?: ReturnType<typeof cleanAppStateForExport>;
|
|
15
|
+
files?: BinaryFiles | null;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* The host capabilities an export uses, shared by every format: e.g. for test
|
|
19
|
+
* environments, Node.js or another window.
|
|
20
|
+
*
|
|
21
|
+
* Unlike the editor's `renderEnvironment` prop, this needn't be the same
|
|
22
|
+
* object across exports (e.g. on a server): exports draw without the element
|
|
23
|
+
* caches keyed by an environment, and measure little text. Passing a complete
|
|
24
|
+
* one (`createCanvas` and `createImage`) as-is, as the editor does, only keeps
|
|
25
|
+
* its measuring caches warm.
|
|
26
|
+
*/
|
|
27
|
+
type ExportEnvironment = {
|
|
28
|
+
/**
|
|
29
|
+
* Creates the canvas a canvas/PNG/JPEG export renders into, and any canvas
|
|
30
|
+
* the export measures text with (e.g. frame labels, embed placeholders).
|
|
31
|
+
*
|
|
32
|
+
* Do not set `canvas.width/height` or modify the canvas context as that's
|
|
33
|
+
* handled by Excalidraw.
|
|
34
|
+
*
|
|
35
|
+
* Defaults to `document.createElement("canvas")`.
|
|
36
|
+
*/
|
|
37
|
+
createCanvas?: RenderEnvironment["createCanvas"];
|
|
38
|
+
/**
|
|
39
|
+
* Creates the images that image elements are decoded into.
|
|
40
|
+
*
|
|
41
|
+
* Defaults to `new Image()`.
|
|
42
|
+
*/
|
|
43
|
+
createImage?: RenderEnvironment["createImage"];
|
|
44
|
+
/**
|
|
45
|
+
* Creates the paths that freedraw elements are filled through.
|
|
46
|
+
*
|
|
47
|
+
* Defaults to the global `Path2D`.
|
|
48
|
+
*/
|
|
49
|
+
createPath?: RenderEnvironment["createPath"];
|
|
50
|
+
/**
|
|
51
|
+
* The document an SVG export is built in, e.g. a popout window's or,
|
|
52
|
+
* outside the browser, a DOM implementation's (such as `linkedom`).
|
|
53
|
+
*
|
|
54
|
+
* Defaults to the global `document`.
|
|
55
|
+
*/
|
|
56
|
+
document?: RenderEnvironment["document"];
|
|
57
|
+
/**
|
|
58
|
+
* Measures text (frame labels, embed placeholders), e.g. where there is no
|
|
59
|
+
* canvas to measure on.
|
|
60
|
+
*
|
|
61
|
+
* Defaults to the global provider set with `setCustomTextMetricsProvider`,
|
|
62
|
+
* else to measuring on a canvas from `createCanvas`.
|
|
63
|
+
*/
|
|
64
|
+
textMetrics?: RenderEnvironment["textMetrics"];
|
|
65
|
+
/**
|
|
66
|
+
* Loads the fonts the exported elements use, before rendering.
|
|
67
|
+
*
|
|
68
|
+
* Defaults to loading them through the browser's
|
|
69
|
+
* [FontFace API](https://developer.mozilla.org/en-US/docs/Web/API/FontFace).
|
|
70
|
+
*/
|
|
71
|
+
loadFonts?: () => Promise<void>;
|
|
72
|
+
};
|
|
73
|
+
type ExportSceneBaseConfig = {
|
|
74
|
+
/**
|
|
75
|
+
* @default "light"
|
|
76
|
+
*/
|
|
77
|
+
theme?: Theme;
|
|
78
|
+
/**
|
|
79
|
+
* Canvas background. Valid values are:
|
|
80
|
+
*
|
|
81
|
+
* - `undefined` - the background of "appState.viewBackgroundColor" is used.
|
|
82
|
+
* - `false` - no background is used (transparent). Not supported for JPEG,
|
|
83
|
+
* which falls back to the default.
|
|
84
|
+
* - `string` - should be a valid CSS color.
|
|
85
|
+
*
|
|
86
|
+
* Specified in light-theme terms: `theme: "dark"` transforms it like any
|
|
87
|
+
* other scene color. Only affects the rendered image, not the embedded
|
|
88
|
+
* scene (`embedScene`).
|
|
89
|
+
*
|
|
90
|
+
* @default undefined
|
|
91
|
+
*/
|
|
92
|
+
canvasBackgroundColor?: string | false;
|
|
93
|
+
/**
|
|
94
|
+
* Canvas padding in pixels. Affected by `scale`.
|
|
95
|
+
*
|
|
96
|
+
* When `fit` is `none`, padding is added around the content bounding box,
|
|
97
|
+
* or around the `width`/`height` frame if set — in which case the content
|
|
98
|
+
* may overflow the frame, thus right or bottom padding may be ignored.
|
|
99
|
+
*
|
|
100
|
+
* When `fit` is `contain`, or `maxWidthOrHeight`/`widthOrHeight` is set,
|
|
101
|
+
* padding is subtracted from the target size (so the export doesn't exceed
|
|
102
|
+
* it, `scale` aside), and serves as a minimum distance between the content
|
|
103
|
+
* and the canvas edges — it may be exceeded on one axis to maintain the
|
|
104
|
+
* aspect ratio. It is recommended to set `position` to `center` when using
|
|
105
|
+
* `fit: "contain"`.
|
|
106
|
+
*
|
|
107
|
+
* @default 10
|
|
108
|
+
*/
|
|
109
|
+
padding?: number;
|
|
110
|
+
/**
|
|
111
|
+
* A multiplier to increase/decrease the frame dimensions
|
|
112
|
+
* (content resolution).
|
|
113
|
+
*
|
|
114
|
+
* For example, if your canvas is 300x150 and you set scale to 2, the
|
|
115
|
+
* resulting size will be 600x300.
|
|
116
|
+
*
|
|
117
|
+
* Can be a function, which receives the export dimensions at scale 1
|
|
118
|
+
* (padding included) and returns the multiplier — e.g. to cap the output
|
|
119
|
+
* by a pixel budget.
|
|
120
|
+
*
|
|
121
|
+
* @default 1
|
|
122
|
+
*/
|
|
123
|
+
scale?: number | ((width: number, height: number) => number);
|
|
124
|
+
/**
|
|
125
|
+
* Host environment overrides, e.g. for test environments or Node.js.
|
|
126
|
+
*/
|
|
127
|
+
environment?: ExportEnvironment;
|
|
7
128
|
exportingFrame?: NonDeleted<ExcalidrawFrameLikeElement> | null;
|
|
8
|
-
|
|
9
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Which frame decorations to render. Ignored when exporting a single frame
|
|
131
|
+
* (`exportingFrame`), which renders neither its name nor outline, and clips
|
|
132
|
+
* to it.
|
|
133
|
+
*
|
|
134
|
+
* @default { name: true, outline: true, clip: true }
|
|
135
|
+
*/
|
|
136
|
+
frames?: {
|
|
137
|
+
name?: boolean;
|
|
138
|
+
outline?: boolean;
|
|
139
|
+
clip?: boolean;
|
|
140
|
+
};
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* The ways to size the export — only one can be used. The positioning options
|
|
144
|
+
* (`fit`, `position`, `x`, `y`, `origin`) belong to `width`/`height` (or no
|
|
145
|
+
* size option).
|
|
146
|
+
*/
|
|
147
|
+
type ExportSizeOptions = {
|
|
148
|
+
/**
|
|
149
|
+
* Makes sure the canvas content fits into a frame of width/height no larger
|
|
150
|
+
* than this value, while maintaining the aspect ratio.
|
|
151
|
+
*
|
|
152
|
+
* Final dimensions can get smaller/larger if used in conjunction with
|
|
153
|
+
* `scale`.
|
|
154
|
+
*
|
|
155
|
+
* Can't be combined with `width`/`height`, `widthOrHeight`, or the
|
|
156
|
+
* positioning options (`fit`, `position`, `x`, `y`, `origin`).
|
|
157
|
+
*/
|
|
158
|
+
maxWidthOrHeight?: number;
|
|
159
|
+
/**
|
|
160
|
+
* Scale the canvas content to be exactly this many pixels wide/tall,
|
|
161
|
+
* maintaining the aspect ratio.
|
|
162
|
+
*
|
|
163
|
+
* Final dimensions can get smaller/larger if used in conjunction with
|
|
164
|
+
* `scale`.
|
|
165
|
+
*
|
|
166
|
+
* Can't be combined with `width`/`height`, `maxWidthOrHeight`, or the
|
|
167
|
+
* positioning options (`fit`, `position`, `x`, `y`, `origin`).
|
|
168
|
+
*/
|
|
169
|
+
widthOrHeight?: number;
|
|
170
|
+
/**
|
|
171
|
+
* Width of the frame. Supply `x` or `y` if you want to offset the canvas
|
|
172
|
+
* content.
|
|
173
|
+
*
|
|
174
|
+
* If `width` omitted but `height` supplied, `width` is calculated from the
|
|
175
|
+
* content's aspect ratio when `fit` is `contain` (the default), or is the
|
|
176
|
+
* content bounding box width when `fit` is `none`.
|
|
177
|
+
*
|
|
178
|
+
* Defaults to the content bounding box width when both `width` and `height`
|
|
179
|
+
* are omitted.
|
|
180
|
+
*
|
|
181
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`.
|
|
182
|
+
*/
|
|
183
|
+
width?: number;
|
|
184
|
+
/**
|
|
185
|
+
* Height of the frame.
|
|
186
|
+
*
|
|
187
|
+
* If `height` omitted but `width` supplied, `height` is calculated from the
|
|
188
|
+
* content's aspect ratio when `fit` is `contain` (the default), or is the
|
|
189
|
+
* content bounding box height when `fit` is `none`.
|
|
190
|
+
*
|
|
191
|
+
* Defaults to the content bounding box height when both `width` and `height`
|
|
192
|
+
* are omitted.
|
|
193
|
+
*
|
|
194
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`.
|
|
195
|
+
*/
|
|
196
|
+
height?: number;
|
|
197
|
+
/**
|
|
198
|
+
* Left edge of the exported region (`padding` is added around it). By
|
|
199
|
+
* default the coordinate is relative to the canvas. You can switch to
|
|
200
|
+
* content coordinates by setting `origin` to `content`.
|
|
201
|
+
*
|
|
202
|
+
* Defaults to the `x` position of the content bounding box.
|
|
203
|
+
*
|
|
204
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`, and is
|
|
205
|
+
* ignored with `fit: "contain"`, so setting `x` or `y` makes `fit` default
|
|
206
|
+
* to `none` (cropping the region).
|
|
207
|
+
*/
|
|
208
|
+
x?: number;
|
|
209
|
+
/**
|
|
210
|
+
* Top edge of the exported region (`padding` is added around it). By
|
|
211
|
+
* default the coordinate is relative to the canvas. You can switch to
|
|
212
|
+
* content coordinates by setting `origin` to `content`.
|
|
213
|
+
*
|
|
214
|
+
* Defaults to the `y` position of the content bounding box.
|
|
215
|
+
*
|
|
216
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`, and is
|
|
217
|
+
* ignored with `fit: "contain"`, so setting `x` or `y` makes `fit` default
|
|
218
|
+
* to `none` (cropping the region).
|
|
219
|
+
*/
|
|
220
|
+
y?: number;
|
|
221
|
+
/**
|
|
222
|
+
* Indicates the coordinate system of the `x` and `y` values.
|
|
223
|
+
*
|
|
224
|
+
* - `canvas` - `x` and `y` are relative to the canvas [0, 0] position.
|
|
225
|
+
* - `content` - `x` and `y` are relative to the content bounding box.
|
|
226
|
+
*
|
|
227
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`.
|
|
228
|
+
*
|
|
229
|
+
* @default "canvas"
|
|
230
|
+
*/
|
|
231
|
+
origin?: "canvas" | "content";
|
|
232
|
+
/**
|
|
233
|
+
* How the content should be scaled into the `width`/`height` frame.
|
|
234
|
+
*
|
|
235
|
+
* Behavior aligns with the `object-fit` CSS property.
|
|
236
|
+
*
|
|
237
|
+
* - `none` - no scaling.
|
|
238
|
+
* - `contain` - scale to fit the frame. Includes `padding`.
|
|
239
|
+
*
|
|
240
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`.
|
|
241
|
+
*
|
|
242
|
+
* @default "contain" if `width` or `height` is set (and `x`/`y` aren't),
|
|
243
|
+
* otherwise "none"
|
|
244
|
+
*/
|
|
245
|
+
fit?: "none" | "contain";
|
|
246
|
+
/**
|
|
247
|
+
* When either `x` or `y` are not specified, indicates how the canvas should
|
|
248
|
+
* be aligned on the respective axis.
|
|
249
|
+
*
|
|
250
|
+
* - `topLeft` - canvas aligned to top left.
|
|
251
|
+
* - `center` - canvas is centered on the axis which is not specified
|
|
252
|
+
* (or both).
|
|
253
|
+
*
|
|
254
|
+
* Can't be combined with `maxWidthOrHeight` or `widthOrHeight`.
|
|
255
|
+
*
|
|
256
|
+
* @default "center"
|
|
257
|
+
*/
|
|
258
|
+
position?: "center" | "topLeft";
|
|
259
|
+
};
|
|
260
|
+
type ExportSizeOption<K extends keyof ExportSizeOptions> = Pick<ExportSizeOptions, K> & {
|
|
261
|
+
[P in keyof ExportSizeOptions as P extends K ? never : P]?: never;
|
|
262
|
+
};
|
|
263
|
+
type ExportSizeConfig = ExportSizeOption<"width" | "height" | "fit" | "position" | "x" | "y" | "origin"> | ExportSizeOption<"maxWidthOrHeight"> | ExportSizeOption<"widthOrHeight">;
|
|
264
|
+
export type ExportSceneConfig = ExportSceneBaseConfig & ExportSizeConfig;
|
|
265
|
+
/**
|
|
266
|
+
* The export config the editor's export settings translate to. Internal: hosts
|
|
267
|
+
* pass their own config.
|
|
268
|
+
*/
|
|
269
|
+
export declare const getExportConfigFromAppState: (appState: Pick<AppState, "exportWithDarkMode" | "exportBackground" | "viewBackgroundColor" | "exportScale" | "frameRendering">) => {
|
|
270
|
+
theme: "light" | "dark";
|
|
271
|
+
canvasBackgroundColor: string | false;
|
|
10
272
|
scale: number;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
273
|
+
frames: {
|
|
274
|
+
enabled: boolean;
|
|
275
|
+
name: boolean;
|
|
276
|
+
outline: boolean;
|
|
277
|
+
clip: boolean;
|
|
278
|
+
} | {
|
|
279
|
+
name: boolean;
|
|
280
|
+
outline: boolean;
|
|
281
|
+
clip: boolean;
|
|
282
|
+
};
|
|
283
|
+
};
|
|
284
|
+
type ExportToSvgConfig = Pick<ExportSceneBaseConfig, "canvasBackgroundColor" | "padding" | "theme" | "exportingFrame" | "scale" | "frames" | "environment"> & ExportSizeConfig & {
|
|
21
285
|
/**
|
|
22
286
|
* if true, all embeddables passed in will be rendered when possible.
|
|
23
287
|
*/
|
|
24
288
|
renderEmbeddables?: boolean;
|
|
25
|
-
exportingFrame?: NonDeleted<ExcalidrawFrameLikeElement> | null;
|
|
26
289
|
skipInliningFonts?: true;
|
|
27
290
|
reuseImages?: boolean;
|
|
28
|
-
|
|
291
|
+
/**
|
|
292
|
+
* Embeds the scene into the SVG, so that it can be imported back into
|
|
293
|
+
* Excalidraw.
|
|
294
|
+
*/
|
|
295
|
+
embedScene?: boolean;
|
|
296
|
+
};
|
|
29
297
|
export declare const encodeSvgBase64Payload: ({ payload, metadataElement, }: {
|
|
30
298
|
payload: string;
|
|
31
299
|
metadataElement: SVGMetadataElement;
|
|
@@ -33,4 +301,59 @@ export declare const encodeSvgBase64Payload: ({ payload, metadataElement, }: {
|
|
|
33
301
|
export declare const decodeSvgBase64Payload: ({ svg }: {
|
|
34
302
|
svg: string;
|
|
35
303
|
}) => string;
|
|
36
|
-
export
|
|
304
|
+
export { MIME_TYPES };
|
|
305
|
+
type ExportToPngConfig = ExportSceneConfig & {
|
|
306
|
+
/**
|
|
307
|
+
* Embeds the scene into the PNG metadata, so that it can be imported back
|
|
308
|
+
* into Excalidraw.
|
|
309
|
+
*/
|
|
310
|
+
embedScene?: boolean;
|
|
311
|
+
};
|
|
312
|
+
type ExportToJpegConfig = ExportSceneConfig & {
|
|
313
|
+
/**
|
|
314
|
+
* Encoding quality between 0 and 1.
|
|
315
|
+
*
|
|
316
|
+
* @default 0.92
|
|
317
|
+
*/
|
|
318
|
+
quality?: number;
|
|
319
|
+
};
|
|
320
|
+
export type ExportSceneOptions = {
|
|
321
|
+
data: ExportSceneData;
|
|
322
|
+
} & ({
|
|
323
|
+
type: "canvas";
|
|
324
|
+
config?: ExportSceneConfig;
|
|
325
|
+
} | {
|
|
326
|
+
type: "png";
|
|
327
|
+
config?: ExportToPngConfig;
|
|
328
|
+
} | {
|
|
329
|
+
type: "jpeg";
|
|
330
|
+
config?: ExportToJpegConfig;
|
|
331
|
+
} | {
|
|
332
|
+
type: "svg";
|
|
333
|
+
config?: ExportToSvgConfig;
|
|
334
|
+
});
|
|
335
|
+
/**
|
|
336
|
+
* Exports the scene to a canvas, a PNG or JPEG blob, or an SVG element.
|
|
337
|
+
*/
|
|
338
|
+
export declare function exportScene(opts: Extract<ExportSceneOptions, {
|
|
339
|
+
type: "canvas";
|
|
340
|
+
}>): Promise<HTMLCanvasElement>;
|
|
341
|
+
export declare function exportScene(opts: Extract<ExportSceneOptions, {
|
|
342
|
+
type: "png" | "jpeg";
|
|
343
|
+
}>): Promise<Blob>;
|
|
344
|
+
export declare function exportScene(opts: Extract<ExportSceneOptions, {
|
|
345
|
+
type: "svg";
|
|
346
|
+
}>): Promise<SVGSVGElement>;
|
|
347
|
+
export declare function exportScene(opts: ExportSceneOptions): Promise<HTMLCanvasElement | Blob | SVGSVGElement>;
|
|
348
|
+
export declare const exportToClipboard: (opts: {
|
|
349
|
+
data: ExportSceneData;
|
|
350
|
+
} & ({
|
|
351
|
+
type: "png";
|
|
352
|
+
config?: ExportToPngConfig;
|
|
353
|
+
} | {
|
|
354
|
+
type: "svg";
|
|
355
|
+
config?: ExportToSvgConfig;
|
|
356
|
+
} | {
|
|
357
|
+
type: "json";
|
|
358
|
+
config?: never;
|
|
359
|
+
})) => Promise<void>;
|
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import type { UserIdleState, EditorInterface } from "@excalidraw/common";
|
|
2
|
-
import type { ExcalidrawElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
|
|
2
|
+
import type { ExcalidrawElement, ExcalidrawFrameLikeElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
|
|
3
3
|
import type { MakeBrand } from "@excalidraw/common/utility-types";
|
|
4
|
+
import type { RenderEnvironment } from "@excalidraw/element/renderEnvironment";
|
|
4
5
|
import type { AppClassProperties, AppState, EmbedsValidationStatus, ElementRenderOverrides, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, PendingExcalidrawElements } from "../types";
|
|
5
6
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
|
6
7
|
import type { Drawable } from "roughjs/bin/core";
|
|
7
8
|
export type RenderableElementsMap = NonDeletedElementsMap & MakeBrand<"RenderableElementsMap">;
|
|
8
9
|
export type StaticCanvasRenderConfig = {
|
|
9
10
|
canvasBackgroundColor: AppState["viewBackgroundColor"];
|
|
11
|
+
/**
|
|
12
|
+
* Backing-store scale the target canvas was bootstrapped with -- the owner
|
|
13
|
+
* window's devicePixelRatio when rendering into the editor, exportScale when
|
|
14
|
+
* exporting. Element caches are built and blitted at this ratio, so it must
|
|
15
|
+
* be the same value passed as `StaticSceneRenderConfig["scale"]`.
|
|
16
|
+
*/
|
|
17
|
+
scale: number;
|
|
18
|
+
/**
|
|
19
|
+
* Host environment that creates the canvases and images this render
|
|
20
|
+
* rasterizes (per-editor owner window in the app; the export's
|
|
21
|
+
* `config.environment` when exporting). Defaults to the browser's.
|
|
22
|
+
*/
|
|
23
|
+
renderEnvironment?: RenderEnvironment;
|
|
24
|
+
/** export only: clips everything drawn to this frame (square corners) */
|
|
25
|
+
clipToFrame?: ExcalidrawFrameLikeElement | null;
|
|
10
26
|
imageCache: AppClassProperties["imageCache"];
|
|
11
27
|
renderGrid: boolean;
|
|
12
28
|
/** whether to render link icons on elements with links (never rendered
|
|
@@ -22,6 +38,12 @@ export type StaticCanvasRenderConfig = {
|
|
|
22
38
|
elementRenderOverrides?: ElementRenderOverrides;
|
|
23
39
|
};
|
|
24
40
|
export type SVGRenderConfig = {
|
|
41
|
+
/**
|
|
42
|
+
* Host environment used for the text measurements this render needs (the
|
|
43
|
+
* SVG itself is built through `exportToSvg`'s owner document). Defaults to
|
|
44
|
+
* the browser's.
|
|
45
|
+
*/
|
|
46
|
+
renderEnvironment?: RenderEnvironment;
|
|
25
47
|
offsetX: number;
|
|
26
48
|
offsetY: number;
|
|
27
49
|
isExporting: boolean;
|
|
@@ -3,7 +3,7 @@ import type { LinearElementEditor } from "@excalidraw/element";
|
|
|
3
3
|
import type { ListMarkerAdvance, MaybeTransformHandleType } from "@excalidraw/element";
|
|
4
4
|
import type { PointerType, ExcalidrawLinearElement, NonDeletedExcalidrawElement, NonDeleted, TextAlign, ExcalidrawElement, GroupId, ExcalidrawBindableElement, ExcalidrawArrowElement, Arrowhead, FontFamilyValues, FileId, Theme, StrokeRoundness, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawFrameLikeElement, ExcalidrawElementType, ExcalidrawIframeLikeElement, OrderedExcalidrawElement, ExcalidrawNonSelectionElement, BindMode, ExcalidrawTextElement, StrokeVariability } from "@excalidraw/element/types";
|
|
5
5
|
import type { Merge, MaybePromise, ValueOf, MakeBrand } from "@excalidraw/common/utility-types";
|
|
6
|
-
import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement, OnDuplicateData } from "@excalidraw/element";
|
|
6
|
+
import type { CaptureUpdateActionType, DurableIncrement, EphemeralIncrement, RenderEnvironment, OnDuplicateData } from "@excalidraw/element";
|
|
7
7
|
import type { GlobalPoint } from "@excalidraw/math";
|
|
8
8
|
import type { Action } from "./actions/types";
|
|
9
9
|
import type { Spreadsheet } from "./charts";
|
|
@@ -692,6 +692,30 @@ export interface ExcalidrawProps {
|
|
|
692
692
|
* @default document
|
|
693
693
|
*/
|
|
694
694
|
ownerDocument?: Document;
|
|
695
|
+
/**
|
|
696
|
+
* Host environment used by the renderer and export pipeline to create
|
|
697
|
+
* canvases and images. Supply a custom implementation to redirect canvas
|
|
698
|
+
* creation and image decoding to e.g. a host canvas pool, an
|
|
699
|
+
* `OffscreenCanvas`, or a non-DOM image decoder. When omitted, canvas and
|
|
700
|
+
* image creation fall back to `ownerDocument` / `ownerWindow`.
|
|
701
|
+
*
|
|
702
|
+
* The value must be referentially stable -- every render cache (element
|
|
703
|
+
* canvases, text metrics, char widths, link icons) is keyed by this
|
|
704
|
+
* object's identity, so a new identity is a full cache miss. Passing an
|
|
705
|
+
* inline object literal mints a fresh identity on every React render,
|
|
706
|
+
* which silently re-rasterizes every element on every frame; hoist it to a
|
|
707
|
+
* module constant or memoize it (e.g. `useMemo`) instead.
|
|
708
|
+
*
|
|
709
|
+
* Only `createCanvas` and `createImage` are required. `createPath` (used to
|
|
710
|
+
* fill freedraw strokes) falls back to the global `Path2D`, which every
|
|
711
|
+
* browser has -- a non-browser host without one must supply it. Pass
|
|
712
|
+
* `document` (the owner document) for SVG exports to be built in it rather
|
|
713
|
+
* than in the global `document`, and `textMetrics` to measure the editor's
|
|
714
|
+
* text with your own provider.
|
|
715
|
+
*
|
|
716
|
+
* @default { createCanvas: () => ownerDocument.createElement("canvas"), createImage: () => new ownerWindow.Image(), createPath: (d) => new ownerWindow.Path2D(d), document: ownerDocument }
|
|
717
|
+
*/
|
|
718
|
+
renderEnvironment?: RenderEnvironment;
|
|
695
719
|
onChange?: (elements: readonly OrderedExcalidrawElement[], appState: AppState, files: BinaryFiles) => void;
|
|
696
720
|
onThemeChange?: (theme: Theme | "system") => void;
|
|
697
721
|
/**
|
|
@@ -960,6 +984,7 @@ export type AppClassProperties = {
|
|
|
960
984
|
state: AppState;
|
|
961
985
|
readonly ownerDocument: Document;
|
|
962
986
|
readonly ownerWindow: Window & typeof globalThis;
|
|
987
|
+
renderEnvironment: RenderEnvironment;
|
|
963
988
|
api: App["api"];
|
|
964
989
|
sessionExportThemeOverride: App["sessionExportThemeOverride"];
|
|
965
990
|
interactiveCanvas: HTMLCanvasElement | null;
|
|
@@ -1000,6 +1025,9 @@ export type AppClassProperties = {
|
|
|
1000
1025
|
duplicate: App["duplicate"];
|
|
1001
1026
|
toolDrag: App["toolDrag"];
|
|
1002
1027
|
activeResizeHandle: App["activeResizeHandle"];
|
|
1028
|
+
selectionTool: App["selectionTool"];
|
|
1029
|
+
wrap: App["wrap"];
|
|
1030
|
+
modifiers: App["modifiers"];
|
|
1003
1031
|
isToolLocked: App["isToolLocked"];
|
|
1004
1032
|
getEffectiveGridSize: App["getEffectiveGridSize"];
|
|
1005
1033
|
setPlugins: App["setPlugins"];
|
|
@@ -1052,6 +1080,7 @@ export type PointerDownState = Readonly<{
|
|
|
1052
1080
|
element: NonDeleted<ExcalidrawElement> | null;
|
|
1053
1081
|
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
1054
1082
|
wasAddedToSelection: boolean;
|
|
1083
|
+
cycleTarget: NonDeleted<ExcalidrawElement> | null;
|
|
1055
1084
|
hasBeenDuplicated: boolean;
|
|
1056
1085
|
advancedListMarkers: readonly ListMarkerAdvance[];
|
|
1057
1086
|
editedTextId: ExcalidrawTextElement["id"] | null;
|
|
@@ -1069,6 +1098,10 @@ export type PointerDownState = Readonly<{
|
|
|
1069
1098
|
x: number;
|
|
1070
1099
|
y: number;
|
|
1071
1100
|
};
|
|
1101
|
+
lastOffset: {
|
|
1102
|
+
x: number;
|
|
1103
|
+
y: number;
|
|
1104
|
+
};
|
|
1072
1105
|
blockDragging: boolean;
|
|
1073
1106
|
};
|
|
1074
1107
|
eventListeners: {
|
|
@@ -1104,6 +1137,21 @@ export interface ExcalidrawImperativeAPI {
|
|
|
1104
1137
|
history: {
|
|
1105
1138
|
clear: InstanceType<typeof App>["resetHistory"];
|
|
1106
1139
|
};
|
|
1140
|
+
/**
|
|
1141
|
+
* Selects elements (or their ids — one or many), adds them to or removes
|
|
1142
|
+
* them from the selection, or clears it — as the editor does: an element is
|
|
1143
|
+
* selected with its group (unless `deep`), a frame and its children aren't
|
|
1144
|
+
* selected at the same time, and locked elements are skipped (unless
|
|
1145
|
+
* `includeLocked`). Text editing and cropping end, and the link popup of a
|
|
1146
|
+
* lone selected element shows. Missing and deleted elements are skipped.
|
|
1147
|
+
*
|
|
1148
|
+
* By default the change is recorded for undo along with the next undoable
|
|
1149
|
+
* change — pass `captureUpdate` as for `updateScene()` otherwise. Like
|
|
1150
|
+
* `updateScene()`, it applies on the next render: read it back through
|
|
1151
|
+
* `onChange()` or `getAppState()` after that. Works in view mode too, where
|
|
1152
|
+
* the selection shows without transform handles.
|
|
1153
|
+
*/
|
|
1154
|
+
selection: Pick<InstanceType<typeof App>["selection"], "select" | "add" | "remove" | "clear">;
|
|
1107
1155
|
getSceneElements: InstanceType<typeof App>["getSceneElements"];
|
|
1108
1156
|
getAppState: () => InstanceType<typeof App>["state"];
|
|
1109
1157
|
getFiles: () => InstanceType<typeof App>["files"];
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { exportScene, exportToClipboard, MIME_TYPES, } from "@excalidraw/excalidraw/scene/export";
|
|
2
|
+
export type { ExportSceneData, ExportSceneConfig, ExportSceneOptions, } from "@excalidraw/excalidraw/scene/export";
|
|
2
3
|
export { elementsOverlappingBBox } from "@excalidraw/element";
|
|
3
4
|
export { getCommonBounds } from "@excalidraw/element";
|
|
5
|
+
export type { RenderEnvironment } from "@excalidraw/element";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@excalidraw/math",
|
|
3
|
-
"version": "0.18.0-
|
|
3
|
+
"version": "0.18.0-4ce8305",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"types": "./dist/types/math/src/index.d.ts",
|
|
6
6
|
"main": "./dist/prod/index.js",
|
|
@@ -61,6 +61,6 @@
|
|
|
61
61
|
"build:esm": "rimraf dist && node ../../scripts/buildBase.js && yarn gen:types"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@excalidraw/common": "0.18.0-
|
|
64
|
+
"@excalidraw/common": "0.18.0-4ce8305"
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { MIME_TYPES } from "@excalidraw/common";
|
|
2
|
-
import type { ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
|
|
3
|
-
import type { AppState, BinaryFiles } from "@excalidraw/excalidraw/types";
|
|
4
|
-
export { MIME_TYPES };
|
|
5
|
-
type ExportOpts = {
|
|
6
|
-
/** restored before exporting */
|
|
7
|
-
elements: readonly NonDeletedExcalidrawElement[];
|
|
8
|
-
appState?: Partial<Omit<AppState, "offsetTop" | "offsetLeft">>;
|
|
9
|
-
files: BinaryFiles | null;
|
|
10
|
-
maxWidthOrHeight?: number;
|
|
11
|
-
exportingFrame?: NonDeleted<ExcalidrawFrameLikeElement> | null;
|
|
12
|
-
getDimensions?: (width: number, height: number) => {
|
|
13
|
-
width: number;
|
|
14
|
-
height: number;
|
|
15
|
-
scale?: number;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
export declare const exportToCanvas: ({ elements, appState, files, maxWidthOrHeight, getDimensions, exportPadding, exportingFrame, }: ExportOpts & {
|
|
19
|
-
exportPadding?: number;
|
|
20
|
-
}) => Promise<HTMLCanvasElement>;
|
|
21
|
-
export declare const exportToBlob: (opts: ExportOpts & {
|
|
22
|
-
mimeType?: string;
|
|
23
|
-
quality?: number;
|
|
24
|
-
exportPadding?: number;
|
|
25
|
-
}) => Promise<Blob>;
|
|
26
|
-
export declare const exportToSvg: ({ elements, appState, files, exportPadding, renderEmbeddables, exportingFrame, skipInliningFonts, reuseImages, }: Omit<ExportOpts, "getDimensions"> & {
|
|
27
|
-
exportPadding?: number;
|
|
28
|
-
renderEmbeddables?: boolean;
|
|
29
|
-
skipInliningFonts?: true;
|
|
30
|
-
reuseImages?: boolean;
|
|
31
|
-
}) => Promise<SVGSVGElement>;
|
|
32
|
-
export declare const exportToClipboard: (opts: ExportOpts & {
|
|
33
|
-
mimeType?: string;
|
|
34
|
-
quality?: number;
|
|
35
|
-
type: "png" | "svg" | "json";
|
|
36
|
-
}) => Promise<void>;
|