@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
|
@@ -6,6 +6,12 @@ import type { EVENT } from "./constants";
|
|
|
6
6
|
export declare const setDateTimeForTests: (dateTime: string) => void;
|
|
7
7
|
export declare const getDateTime: () => string;
|
|
8
8
|
export declare const capitalizeString: (str: string) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the window owning `target`, so that we keep working when the editor
|
|
11
|
+
* is rendered into another document. Accepts a `Document` as well, in which
|
|
12
|
+
* case its `defaultView` is used. Falls back to the module realm's window.
|
|
13
|
+
*/
|
|
14
|
+
export declare const getTargetWindow: (target: Element | EventTarget | Document | null) => (Window & typeof globalThis) | null;
|
|
9
15
|
export declare const isToolIcon: (target: Element | EventTarget | null) => target is HTMLElement;
|
|
10
16
|
export declare const isInputLike: (target: Element | EventTarget | null) => target is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement | HTMLBRElement | HTMLDivElement;
|
|
11
17
|
export declare const isInteractive: (target: Element | EventTarget | null) => boolean;
|
|
@@ -25,7 +31,7 @@ export declare const debounce: <T extends any[]>(fn: (...args: T) => void, timeo
|
|
|
25
31
|
flush(): void;
|
|
26
32
|
cancel(): void;
|
|
27
33
|
};
|
|
28
|
-
export declare const throttleRAF: <T extends any[]>(fn: (...args: T) => void) => {
|
|
34
|
+
export declare const throttleRAF: <T extends any[]>(fn: (...args: T) => void, ownerWindow?: Pick<Window, "requestAnimationFrame" | "cancelAnimationFrame">) => {
|
|
29
35
|
(...args: T): void;
|
|
30
36
|
flush(): void;
|
|
31
37
|
cancel(): void;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { AppState } from "@excalidraw/excalidraw/types";
|
|
2
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
2
3
|
import type { Scene } from "./Scene";
|
|
3
4
|
import type { NonDeletedExcalidrawElement } from "./types";
|
|
4
5
|
export interface Alignment {
|
|
5
6
|
position: "start" | "center" | "end";
|
|
6
7
|
axis: "x" | "y";
|
|
7
8
|
}
|
|
8
|
-
export declare const alignElements: (selectedElements: NonDeletedExcalidrawElement[], alignment: Alignment, scene: Scene, appState: Readonly<AppState
|
|
9
|
+
export declare const alignElements: (selectedElements: NonDeletedExcalidrawElement[], alignment: Alignment, scene: Scene, appState: Readonly<AppState>,
|
|
10
|
+
/** measures the labels of the bound arrows the alignment moves */
|
|
11
|
+
renderEnvironment?: RenderEnvironment) => NonDeletedExcalidrawElement[];
|
|
@@ -3,6 +3,7 @@ import type { LineSegment, LocalPoint } from "@excalidraw/math";
|
|
|
3
3
|
import type { AppState, NullableGridSize } from "@excalidraw/excalidraw/types";
|
|
4
4
|
import type { Bounds } from "@excalidraw/common";
|
|
5
5
|
import { type Heading } from "./heading";
|
|
6
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
6
7
|
import type { Scene } from "./Scene";
|
|
7
8
|
import type { ElementUpdate } from "./mutateElement";
|
|
8
9
|
import type { BindMode, ElementsMap, ExcalidrawArrowElement, ExcalidrawBindableElement, ExcalidrawElbowArrowElement, ExcalidrawElement, FixedPoint, FixedPointBinding, NonDeleted, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap, Ordered, PointsPositionUpdates } from "./types";
|
|
@@ -55,12 +56,45 @@ export declare const getBindingStrategyForDraggingBindingElementEndpoints: (arro
|
|
|
55
56
|
};
|
|
56
57
|
export declare const bindOrUnbindBindingElements: (selectedArrows: NonDeleted<ExcalidrawArrowElement>[], scene: Scene, appState: AppState) => void;
|
|
57
58
|
export declare const bindBindingElement: (arrow: NonDeleted<ExcalidrawArrowElement>, hoveredElement: NonDeleted<ExcalidrawBindableElement>, mode: BindMode, startOrEnd: "start" | "end", scene: Scene, zoom: AppState["zoom"], focusPoint?: GlobalPoint, shouldSnapToOutline?: boolean, isMidpointSnappingEnabled?: boolean) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Whether the arrow's end is bound to an element it's beyond the binding area
|
|
61
|
+
* of, i.e. that it couldn't be bound to in the editor (e.g. a participant's
|
|
62
|
+
* header in a sequence diagram, as laid out by mermaid)
|
|
63
|
+
*/
|
|
64
|
+
export declare const isEndBoundBeyondBindingArea: (arrow: ExcalidrawArrowElement, startOrEnd: "start" | "end", elementsMap: NonDeletedSceneElementsMap, zoom: AppState["zoom"]) => boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Extends the arrow's bound end along its end segment, by the segment's length
|
|
67
|
+
* (at least MIN_BOUND_END_EXTENSION), to find where it would reach the element
|
|
68
|
+
* it's bound to, off the element by the binding gap. Moving the end there
|
|
69
|
+
* restores bindings given to arrows that just fall short of their elements.
|
|
70
|
+
*
|
|
71
|
+
* @returns where to move the end to, or null if it doesn't reach the element
|
|
72
|
+
*/
|
|
73
|
+
export declare const getBoundEndExtension: (arrow: ExcalidrawArrowElement, startOrEnd: "start" | "end", elementsMap: NonDeletedSceneElementsMap) => GlobalPoint | null;
|
|
58
74
|
export declare const unbindBindingElement: (arrow: ExcalidrawArrowElement, startOrEnd: "start" | "end", scene: Scene) => ExcalidrawBindableElement["id"] | null;
|
|
59
75
|
export declare const reanchorBindingsToOutline: (changedElement: NonDeleted<ExcalidrawBindableElement>, scene: Scene, zoom: AppState["zoom"]) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Places both bound ends of `arrow` where its bindings put them on the elements
|
|
78
|
+
* in `elementsMap` they're bound to, and rewraps its label along it as placed.
|
|
79
|
+
* Leaves the label's x/y as they were (the editor derives arrow labels' x/y as
|
|
80
|
+
* it renders them), so callers returning the elements as data must store them
|
|
81
|
+
* (see `LinearElementEditor.getBoundTextElementPosition`).
|
|
82
|
+
*/
|
|
83
|
+
export declare const updateBoundArrow: (arrow: NonDeleted<ExcalidrawArrowElement>, scene: Scene, elementsMap: ElementsMap,
|
|
84
|
+
/** measures the arrow's label */
|
|
85
|
+
renderEnvironment?: RenderEnvironment,
|
|
86
|
+
/**
|
|
87
|
+
* whether it's placed as what it's bound to moved: an arrow bound to one
|
|
88
|
+
* element at both ends then moves with it whole (its midpoints with its
|
|
89
|
+
* start), rather than only at its ends
|
|
90
|
+
*/
|
|
91
|
+
boundElementMoved?: boolean) => void;
|
|
60
92
|
export declare const updateBoundElements: (changedElement: NonDeletedExcalidrawElement, scene: Scene, options?: {
|
|
61
93
|
/** see `getSimultaneouslyUpdatedElementIds` for how to pass it */
|
|
62
94
|
simultaneouslyUpdated?: readonly NonDeletedExcalidrawElement[];
|
|
63
95
|
changedElements?: Map<string, ExcalidrawElement>;
|
|
96
|
+
/** measures the labels of the arrows it updates (the host's, in the editor) */
|
|
97
|
+
renderEnvironment?: RenderEnvironment;
|
|
64
98
|
}) => void;
|
|
65
99
|
export declare const updateBindings: (latestElement: NonDeletedExcalidrawElement, scene: Scene, appState: AppState, options?: {
|
|
66
100
|
simultaneouslyUpdated?: readonly NonDeletedExcalidrawElement[];
|
|
@@ -68,6 +102,8 @@ export declare const updateBindings: (latestElement: NonDeletedExcalidrawElement
|
|
|
68
102
|
width: number;
|
|
69
103
|
height: number;
|
|
70
104
|
};
|
|
105
|
+
/** measures the labels of the bound arrows it updates */
|
|
106
|
+
renderEnvironment?: RenderEnvironment;
|
|
71
107
|
}) => void;
|
|
72
108
|
/**
|
|
73
109
|
* The id set of `simultaneouslyUpdated`, shared by every `updateBoundElements()`
|
|
@@ -39,10 +39,16 @@ export declare const getDiamondPoints: (element: ExcalidrawElement) => number[];
|
|
|
39
39
|
export declare const getCubicBezierCurveBound: (p0: GlobalPoint, p1: GlobalPoint, p2: GlobalPoint, p3: GlobalPoint) => Bounds;
|
|
40
40
|
export declare const getMinMaxXYFromCurvePathOps: (ops: Op[], transformXY?: (p: GlobalPoint) => GlobalPoint) => Bounds;
|
|
41
41
|
export declare const getBoundsFromPoints: <P extends GlobalPoint | LocalPoint>(points: readonly P[], padding?: number) => Bounds;
|
|
42
|
+
export declare const CARDINALITY_ONE_OR_MANY_BAR_OFFSET = -0.25;
|
|
43
|
+
export declare const CARDINALITY_INNER_BAR_OFFSET = -0.5;
|
|
44
|
+
export declare const CARDINALITY_ZERO_CIRCLE_OFFSET = 1.5;
|
|
45
|
+
export declare const CARDINALITY_ZERO_CIRCLE_SCALE = 0.8;
|
|
42
46
|
/** @returns number in pixels */
|
|
43
47
|
export declare const getArrowheadSize: (arrowhead: Arrowhead) => number;
|
|
44
48
|
/** @returns number in degrees */
|
|
45
|
-
export declare const getArrowheadAngle: (arrowhead: Arrowhead
|
|
49
|
+
export declare const getArrowheadAngle: (arrowhead: Arrowhead,
|
|
50
|
+
/** size the arrowhead is drawn at, if scaled down */
|
|
51
|
+
size?: number) => Degrees;
|
|
46
52
|
export declare const getArrowheadPoints: (element: ExcalidrawLinearElement, shape: Drawable[], position: "start" | "end", arrowhead: Arrowhead, offsetMultiplier?: number) => number[] | null;
|
|
47
53
|
export declare const getElementBounds: (element: ExcalidrawElement, elementsMap: ElementsMap, nonRotated?: boolean) => Bounds;
|
|
48
54
|
export declare const getCommonBounds: (elements: ElementsMapOrArray, elementsMap?: ElementsMap) => Bounds;
|
|
@@ -81,7 +87,7 @@ export declare const boundsContainBounds: (outerBounds: Bounds, innerBounds: Bou
|
|
|
81
87
|
* It can be used to get elements overlapping a selection box, for example.
|
|
82
88
|
*
|
|
83
89
|
*/
|
|
84
|
-
export declare const elementsOverlappingBBox: <T extends ExcalidrawElement>({ elements, elementsMap, bounds, type, excludeElementsInFrames, shouldIgnoreElementFromSelection, }: {
|
|
90
|
+
export declare const elementsOverlappingBBox: <T extends ExcalidrawElement>({ elements, elementsMap, bounds, type, excludeElementsInFrames, shouldIgnoreElementFromSelection, includeStroke, }: {
|
|
85
91
|
elements: readonly T[];
|
|
86
92
|
elementsMap?: ElementsMap;
|
|
87
93
|
bounds: Bounds | ExcalidrawElement;
|
|
@@ -92,5 +98,7 @@ export declare const elementsOverlappingBBox: <T extends ExcalidrawElement>({ el
|
|
|
92
98
|
type: "contain" | "overlap";
|
|
93
99
|
excludeElementsInFrames?: boolean;
|
|
94
100
|
shouldIgnoreElementFromSelection?: (element: T) => boolean;
|
|
101
|
+
/** whether elements extend by their stroke, as they render */
|
|
102
|
+
includeStroke?: boolean;
|
|
95
103
|
}) => T[];
|
|
96
104
|
export declare const elementCenterPoint: (element: ExcalidrawElement, elementsMap: ElementsMap, xOffset?: number, yOffset?: number) => GlobalPoint;
|
|
@@ -14,6 +14,13 @@ export declare const hitElementItself: ({ point, element, threshold, elementsMap
|
|
|
14
14
|
export declare const hitElementBoundingBox: (point: GlobalPoint, element: ExcalidrawElement, elementsMap: ElementsMap, tolerance?: number) => boolean;
|
|
15
15
|
export declare const hitElementBoundingBoxOnly: (hitArgs: HitTestArgs, elementsMap: ElementsMap) => boolean;
|
|
16
16
|
export declare const hitElementBoundText: (point: GlobalPoint, element: ExcalidrawElement, elementsMap: ElementsMap) => boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Whether an arrow endpoint at the point could bind to the element: inside it,
|
|
19
|
+
* or within binding distance of its outline. Unlike `getBindingCandidates`,
|
|
20
|
+
* it ignores frame clipping, as frames may not be sized yet (e.g. while
|
|
21
|
+
* converting skeletons, where frames are sized around their children last)
|
|
22
|
+
*/
|
|
23
|
+
export declare const isPointInBindingArea: (point: GlobalPoint, element: NonDeleted<ExcalidrawBindableElement>, elementsMap: ElementsMap, zoom: AppState["zoom"]) => boolean;
|
|
17
24
|
/**
|
|
18
25
|
* Whether the element hides what is behind it from binding — an arrow's or a
|
|
19
26
|
* text label's. Images count as opaque, and frames once they support a
|
|
@@ -1,13 +1,45 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { ElementsMap, ExcalidrawImageElement
|
|
1
|
+
import type { TransformHandleDirection } from "./transformHandles";
|
|
2
|
+
import type { ElementsMap, ExcalidrawImageElement } from "./types";
|
|
3
3
|
export declare const MINIMAL_CROP_SIZE = 10;
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Crops the image (as it was at the drag's start) as resizing it would
|
|
6
|
+
* resize it, as far as the image reaches.
|
|
7
|
+
*/
|
|
8
|
+
export declare const cropElement: (element: ExcalidrawImageElement, elementsMap: ElementsMap, transformHandle: TransformHandleDirection, naturalWidth: number, naturalHeight: number, pointerX: number, pointerY: number, { shouldMaintainAspectRatio, shouldResizeFromCenter, }?: {
|
|
9
|
+
shouldMaintainAspectRatio?: boolean;
|
|
10
|
+
shouldResizeFromCenter?: boolean;
|
|
11
|
+
}) => {
|
|
5
12
|
x: number;
|
|
6
13
|
y: number;
|
|
7
14
|
width: number;
|
|
8
15
|
height: number;
|
|
9
|
-
crop:
|
|
16
|
+
crop: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
naturalWidth: number;
|
|
22
|
+
naturalHeight: number;
|
|
23
|
+
} | null;
|
|
10
24
|
};
|
|
25
|
+
/**
|
|
26
|
+
* Uncrops the image on the handle's side (a corner's two); mirrored, on the
|
|
27
|
+
* opposite side(s) too.
|
|
28
|
+
*/
|
|
29
|
+
export declare const uncropElementSides: (element: ExcalidrawImageElement, elementsMap: ElementsMap, handle: TransformHandleDirection, mirrored?: boolean) => {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
crop: {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
width: number;
|
|
38
|
+
height: number;
|
|
39
|
+
naturalWidth: number;
|
|
40
|
+
naturalHeight: number;
|
|
41
|
+
} | null;
|
|
42
|
+
} | null;
|
|
11
43
|
export declare const getUncroppedImageElement: (element: ExcalidrawImageElement, elementsMap: ElementsMap) => ExcalidrawImageElement;
|
|
12
44
|
export declare const getUncroppedWidthAndHeight: (element: ExcalidrawImageElement) => {
|
|
13
45
|
width: number;
|
|
@@ -2,6 +2,7 @@ import type { ExcalidrawElement, Ordered, OrderedExcalidrawElement, SceneElement
|
|
|
2
2
|
import type { DTO, ValueOf } from "@excalidraw/common/utility-types";
|
|
3
3
|
import type { AppState, ObservedAppState } from "@excalidraw/excalidraw/types";
|
|
4
4
|
import { StoreSnapshot } from "./store";
|
|
5
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
5
6
|
/**
|
|
6
7
|
* Represents the difference between two objects of the same type.
|
|
7
8
|
*
|
|
@@ -146,6 +147,11 @@ export declare class AppStateDelta implements DeltaContainer<AppState> {
|
|
|
146
147
|
type ElementPartial<TElement extends ExcalidrawElement = ExcalidrawElement> = Omit<Partial<Ordered<TElement>>, "id" | "updated" | "seed">;
|
|
147
148
|
export type ApplyToOptions = {
|
|
148
149
|
excludedProperties?: Set<keyof ElementPartial>;
|
|
150
|
+
/**
|
|
151
|
+
* measures the labels re-laid out after applying (bound texts, and the
|
|
152
|
+
* labels of bound arrows) -- the editor passes the host's
|
|
153
|
+
*/
|
|
154
|
+
renderEnvironment?: RenderEnvironment;
|
|
149
155
|
};
|
|
150
156
|
/**
|
|
151
157
|
* Elements change is a low level primitive to capture a change between two sets of elements.
|
|
@@ -236,7 +242,7 @@ export declare class ElementsDelta implements DeltaContainer<SceneElementsMap> {
|
|
|
236
242
|
* should be rebound (if possible) with the current element ~ bindings should be bidirectional.
|
|
237
243
|
*/
|
|
238
244
|
private static rebindAffected;
|
|
239
|
-
static redrawElements(nextElements: SceneElementsMap, changedElements: Map<string, OrderedExcalidrawElement
|
|
245
|
+
static redrawElements(nextElements: SceneElementsMap, changedElements: Map<string, OrderedExcalidrawElement>, renderEnvironment?: RenderEnvironment): SceneElementsMap;
|
|
240
246
|
private static redrawTextBoundingBoxes;
|
|
241
247
|
private static redrawBoundArrows;
|
|
242
248
|
private static reorderElements;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { AppState } from "@excalidraw/excalidraw/types";
|
|
2
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
2
3
|
import type { Scene } from "./Scene";
|
|
3
4
|
import type { ElementsMap, NonDeletedExcalidrawElement } from "./types";
|
|
4
5
|
export interface Distribution {
|
|
5
6
|
space: "between";
|
|
6
7
|
axis: "x" | "y";
|
|
7
8
|
}
|
|
8
|
-
export declare const distributeElements: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, distribution: Distribution, appState: Readonly<AppState>, scene: Scene
|
|
9
|
+
export declare const distributeElements: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, distribution: Distribution, appState: Readonly<AppState>, scene: Scene,
|
|
10
|
+
/** measures the labels of the bound arrows the distribution moves */
|
|
11
|
+
renderEnvironment?: RenderEnvironment) => NonDeletedExcalidrawElement[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { AppState, NormalizedZoomValue, NullableGridSize, PointerDownState } from "@excalidraw/excalidraw/types";
|
|
2
2
|
import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
|
|
3
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
3
4
|
import type { Scene } from "./Scene";
|
|
4
5
|
import type { ExcalidrawTextElement } from "./types";
|
|
5
6
|
export declare const dragSelectedElements: (pointerDownState: PointerDownState, _selectedElements: NonDeletedExcalidrawElement[], offset: {
|
|
@@ -8,7 +9,9 @@ export declare const dragSelectedElements: (pointerDownState: PointerDownState,
|
|
|
8
9
|
}, scene: Scene, snapOffset: {
|
|
9
10
|
x: number;
|
|
10
11
|
y: number;
|
|
11
|
-
}, gridSize: NullableGridSize
|
|
12
|
+
}, gridSize: NullableGridSize,
|
|
13
|
+
/** measures the labels of the bound arrows the drag moves */
|
|
14
|
+
renderEnvironment?: RenderEnvironment) => void;
|
|
12
15
|
export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawElement[], x: number, y: number) => [number, number];
|
|
13
16
|
/**
|
|
14
17
|
* Sizes a text element as it is dragged out.
|
|
@@ -24,7 +27,7 @@ export declare const getDragOffsetXY: (selectedElements: NonDeletedExcalidrawEle
|
|
|
24
27
|
* over the arrow, since dragging that way makes no progress rather than
|
|
25
28
|
* flipping the box around.
|
|
26
29
|
*/
|
|
27
|
-
export declare const dragNewTextElement: ({ newElement, anchorX, anchorRatio, pointerX, nextY, zoom, scene, informMutation, }: {
|
|
30
|
+
export declare const dragNewTextElement: ({ newElement, anchorX, anchorRatio, pointerX, nextY, zoom, scene, renderEnvironment, informMutation, }: {
|
|
28
31
|
newElement: ExcalidrawTextElement;
|
|
29
32
|
anchorX: number;
|
|
30
33
|
/** 0 = anchored by its left edge, 1 = by its right, 0.5 = by its centre */
|
|
@@ -34,9 +37,10 @@ export declare const dragNewTextElement: ({ newElement, anchorX, anchorRatio, po
|
|
|
34
37
|
nextY?: number;
|
|
35
38
|
zoom: NormalizedZoomValue;
|
|
36
39
|
scene: Scene;
|
|
40
|
+
renderEnvironment?: RenderEnvironment;
|
|
37
41
|
informMutation?: boolean;
|
|
38
42
|
}) => void;
|
|
39
|
-
export declare const dragNewElement: ({ newElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio, shouldResizeFromCenter, zoom, scene, widthAspectRatio, originOffset, informMutation, }: {
|
|
43
|
+
export declare const dragNewElement: ({ newElement, elementType, originX, originY, x, y, width, height, shouldMaintainAspectRatio, shouldResizeFromCenter, zoom, scene, renderEnvironment, widthAspectRatio, originOffset, informMutation, }: {
|
|
40
44
|
newElement: NonDeletedExcalidrawElement;
|
|
41
45
|
elementType: AppState["activeTool"]["type"];
|
|
42
46
|
originX: number;
|
|
@@ -49,6 +53,7 @@ export declare const dragNewElement: ({ newElement, elementType, originX, origin
|
|
|
49
53
|
shouldResizeFromCenter: boolean;
|
|
50
54
|
zoom: NormalizedZoomValue;
|
|
51
55
|
scene: Scene;
|
|
56
|
+
renderEnvironment?: RenderEnvironment;
|
|
52
57
|
/** whether to keep given aspect ratio when `isResizeWithSidesSameLength` is
|
|
53
58
|
true */
|
|
54
59
|
widthAspectRatio?: number | null;
|
|
@@ -16,4 +16,9 @@ export declare const updateElbowArrowPoints: (arrow: Readonly<ExcalidrawElbowArr
|
|
|
16
16
|
isBindingEnabled?: boolean;
|
|
17
17
|
isMidpointSnappingEnabled?: boolean;
|
|
18
18
|
}) => ElementUpdate<ExcalidrawElbowArrowElement>;
|
|
19
|
+
/**
|
|
20
|
+
* The update routing an elbow arrow again where it is, e.g. once its
|
|
21
|
+
* arrowheads change, as its route makes room for them
|
|
22
|
+
*/
|
|
23
|
+
export declare const updateElbowArrowRoute: <T extends ExcalidrawElbowArrowElement>(arrow: Readonly<T>, elementsMap: NonDeletedSceneElementsMap) => ElementUpdate<T>;
|
|
19
24
|
export declare const validateElbowPoints: <P extends GlobalPoint | LocalPoint>(points: readonly P[], tolerance?: number) => boolean;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { ExcalidrawProps } from "@excalidraw/excalidraw/types";
|
|
2
2
|
import type { MarkRequired } from "@excalidraw/common/utility-types";
|
|
3
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
3
4
|
import type { ExcalidrawIframeLikeElement, IframeData, NonDeletedExcalidrawElement } from "./types";
|
|
4
5
|
type IframeDataWithSandbox = MarkRequired<IframeData, "sandbox">;
|
|
5
6
|
export declare const createSrcDoc: (body: string) => string;
|
|
6
7
|
export declare const getEmbedLink: (link: string | null | undefined) => IframeDataWithSandbox | null;
|
|
7
|
-
export declare const createPlaceholderEmbeddableLabel: (element: ExcalidrawIframeLikeElement) => NonDeletedExcalidrawElement;
|
|
8
|
+
export declare const createPlaceholderEmbeddableLabel: (element: ExcalidrawIframeLikeElement, renderEnvironment?: RenderEnvironment) => NonDeletedExcalidrawElement;
|
|
8
9
|
export declare const maybeParseEmbedSrc: (str: string) => string;
|
|
9
10
|
export declare const embeddableURLValidator: (url: string | null | undefined, validateEmbeddable: ExcalidrawProps["validateEmbeddable"]) => boolean;
|
|
10
11
|
export {};
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { Mutable } from "@excalidraw/common/utility-types";
|
|
1
|
+
import type { AppState, InteractiveCanvasAppState } from "@excalidraw/excalidraw/types";
|
|
3
2
|
import type { GroupId, ExcalidrawElement, NonDeleted, ElementsMapOrArray, ElementsMap, NonDeletedExcalidrawElement, NonDeletedElementsMapOrArray } from "./types";
|
|
4
3
|
export declare const selectGroup: (groupId: GroupId, appState: InteractiveCanvasAppState, elements: readonly NonDeletedExcalidrawElement[]) => Pick<InteractiveCanvasAppState, "selectedGroupIds" | "selectedElementIds" | "editingGroupId">;
|
|
5
|
-
export declare const selectGroupsForSelectedElements: {
|
|
6
|
-
(appState: Pick<AppState, "selectedElementIds" | "editingGroupId">, elements: readonly NonDeletedExcalidrawElement[], prevAppState: InteractiveCanvasAppState, app: AppClassProperties | null): Mutable<Pick<InteractiveCanvasAppState, "selectedGroupIds" | "editingGroupId" | "selectedElementIds">>;
|
|
7
|
-
clearCache(): void;
|
|
8
|
-
};
|
|
9
4
|
/**
|
|
10
5
|
* If the element's group is selected, don't render an individual
|
|
11
6
|
* selection border around it.
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { AppClassProperties, DataURL, BinaryFiles } from "@excalidraw/excalidraw/types";
|
|
2
2
|
import type { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
|
|
3
|
-
export declare const loadHTMLImageElement: (dataURL: DataURL) => Promise<HTMLImageElement>;
|
|
3
|
+
export declare const loadHTMLImageElement: (dataURL: DataURL, createImage?: () => HTMLImageElement) => Promise<HTMLImageElement>;
|
|
4
4
|
/** NOTE: updates cache even if already populated with given image. Thus,
|
|
5
5
|
* you should filter out the images upstream if you want to optimize this. */
|
|
6
|
-
export declare const updateImageCache: ({ fileIds, files, imageCache, }: {
|
|
6
|
+
export declare const updateImageCache: ({ fileIds, files, imageCache, createImage, }: {
|
|
7
7
|
fileIds: FileId[];
|
|
8
8
|
files: BinaryFiles;
|
|
9
9
|
imageCache: AppClassProperties["imageCache"];
|
|
10
|
+
/** creates images in the owner window so cross-document scenes keep
|
|
11
|
+
* runtime ownership of their HTMLImageElements */
|
|
12
|
+
createImage?: () => HTMLImageElement;
|
|
10
13
|
}) => Promise<{
|
|
11
14
|
imageCache: Map<FileId, {
|
|
12
15
|
image: HTMLImageElement | Promise<HTMLImageElement>;
|
|
@@ -41,6 +41,7 @@ export * from "./mutateElement";
|
|
|
41
41
|
export * from "./newElement";
|
|
42
42
|
export * from "./positionElementsOnGrid";
|
|
43
43
|
export * from "./renderElement";
|
|
44
|
+
export * from "./renderEnvironment";
|
|
44
45
|
export * from "./resizeElements";
|
|
45
46
|
export * from "./resizeTest";
|
|
46
47
|
export * from "./Scene";
|
|
@@ -103,10 +103,10 @@ export declare class LinearElementEditor {
|
|
|
103
103
|
static movePoints(element: NonDeleted<ExcalidrawLinearElement>, scene: Scene, pointUpdates: PointsPositionUpdates, otherUpdates?: {
|
|
104
104
|
startBinding?: FixedPointBinding | null;
|
|
105
105
|
endBinding?: FixedPointBinding | null;
|
|
106
|
-
moveMidPointsWithElement?: boolean | null;
|
|
107
106
|
}, options?: {
|
|
108
107
|
isBindingEnabled?: boolean;
|
|
109
108
|
isMidpointSnappingEnabled?: boolean;
|
|
109
|
+
moveMidPointsWithElement?: boolean;
|
|
110
110
|
}): void;
|
|
111
111
|
static shouldAddMidpoint(linearElementEditor: LinearElementEditor, pointerCoords: PointerCoords, appState: AppState, elementsMap: ElementsMap): boolean;
|
|
112
112
|
static addMidpoint(linearElementEditor: LinearElementEditor, pointerCoords: PointerCoords, app: AppClassProperties, snapToGrid: boolean, scene: Scene): {
|
|
@@ -122,6 +122,9 @@ export declare class LinearElementEditor {
|
|
|
122
122
|
*/
|
|
123
123
|
static getBoundTextElementCenter: (element: ExcalidrawLinearElement, elementsMap: ElementsMap) => GlobalPoint;
|
|
124
124
|
static handleBoundTextDragging(linearElementEditor: LinearElementEditor, scene: Scene, pointerX: number, pointerY: number): LinearElementEditor | null;
|
|
125
|
+
static getPathLength(element: ExcalidrawLinearElement, elementsMap: ElementsMap): number;
|
|
126
|
+
/** the path parameter (0-1) of the point on the path closest to `point` */
|
|
127
|
+
static getPathParameterAtPoint(element: ExcalidrawLinearElement, point: GlobalPoint, elementsMap: ElementsMap): number | null;
|
|
125
128
|
static getPointAtPathParameter(container: ExcalidrawLinearElement, pathParameter: number, elementsMap: ElementsMap): GlobalPoint | null;
|
|
126
129
|
static getBoundTextElementPosition: (element: ExcalidrawLinearElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
|
|
127
130
|
x: number;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
1
2
|
import type { Scene } from "./Scene";
|
|
2
3
|
import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
|
|
3
4
|
/** a list marker advanced by duplication, to go back and forth */
|
|
@@ -27,8 +28,12 @@ export type ListMarkerAdvance = {
|
|
|
27
28
|
* Only if nothing but list items (texts, or containers with list item labels)
|
|
28
29
|
* is duplicated.
|
|
29
30
|
*/
|
|
30
|
-
export declare const advanceDuplicatedListMarkers: (duplicatedElements: readonly ExcalidrawElement[], scene: Scene
|
|
31
|
+
export declare const advanceDuplicatedListMarkers: (duplicatedElements: readonly ExcalidrawElement[], scene: Scene,
|
|
32
|
+
/** measures the re-numbered texts */
|
|
33
|
+
renderEnvironment?: RenderEnvironment) => ListMarkerAdvance[];
|
|
31
34
|
/**
|
|
32
35
|
* Sets the advanced list markers back (`"prev"`), or forth again (`"next"`).
|
|
33
36
|
*/
|
|
34
|
-
export declare const applyListMarkerAdvances: (advances: readonly ListMarkerAdvance[], direction: "prev" | "next", scene: Scene
|
|
37
|
+
export declare const applyListMarkerAdvances: (advances: readonly ListMarkerAdvance[], direction: "prev" | "next", scene: Scene,
|
|
38
|
+
/** measures the re-numbered texts */
|
|
39
|
+
renderEnvironment?: RenderEnvironment) => void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { MarkOptional } from "@excalidraw/common/utility-types";
|
|
2
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
2
3
|
import type { ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement, ExcalidrawElbowArrowElement, ExcalidrawLineElement, ExcalidrawStickyNoteElement } from "./types";
|
|
3
4
|
export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData" | "created">;
|
|
4
5
|
export declare const newElement: (opts: {
|
|
@@ -61,6 +62,7 @@ export declare const newTextElement: (opts: {
|
|
|
61
62
|
autoResize?: ExcalidrawTextElement["autoResize"];
|
|
62
63
|
labelPosition?: ExcalidrawTextElement["labelPosition"];
|
|
63
64
|
baseFontSize?: ExcalidrawTextElement["baseFontSize"];
|
|
65
|
+
renderEnvironment?: RenderEnvironment;
|
|
64
66
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawTextElement>;
|
|
65
67
|
export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, text?: string,
|
|
66
68
|
/**
|
|
@@ -69,7 +71,7 @@ export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement,
|
|
|
69
71
|
* width from then on (`autoResize: false`), anchored as its growth was. A
|
|
70
72
|
* text that is already wider keeps growing.
|
|
71
73
|
*/
|
|
72
|
-
maxWidth?: number) => {
|
|
74
|
+
maxWidth?: number, renderEnvironment?: RenderEnvironment) => {
|
|
73
75
|
x: number;
|
|
74
76
|
y: number;
|
|
75
77
|
width: number;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type GlobalPoint } from "@excalidraw/math";
|
|
2
2
|
import type { AppState, StaticCanvasAppState, InteractiveCanvasAppState, ElementRenderOverrides } from "@excalidraw/excalidraw/types";
|
|
3
3
|
import type { StaticCanvasRenderConfig, RenderableElementsMap, InteractiveCanvasRenderConfig } from "@excalidraw/excalidraw/scene/types";
|
|
4
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
4
5
|
import type { ExcalidrawElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawImageElement, NonDeletedSceneElementsMap, ElementsMap } from "./types";
|
|
5
6
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
|
6
7
|
export type RenderPositionOffset = Readonly<{
|
|
@@ -22,6 +23,9 @@ export interface ExcalidrawElementWithCanvas {
|
|
|
22
23
|
canvas: HTMLCanvasElement;
|
|
23
24
|
theme: AppState["theme"];
|
|
24
25
|
scale: number;
|
|
26
|
+
/** backing-store scale the bitmap was rasterized at, see StaticCanvasRenderConfig["scale"] */
|
|
27
|
+
deviceScale: number;
|
|
28
|
+
environment: RenderEnvironment;
|
|
25
29
|
zoomValue: AppState["zoom"]["value"];
|
|
26
30
|
canvasOffsetX: number;
|
|
27
31
|
canvasOffsetY: number;
|
|
@@ -29,6 +33,12 @@ export interface ExcalidrawElementWithCanvas {
|
|
|
29
33
|
containingFrameOpacity: number;
|
|
30
34
|
}
|
|
31
35
|
export declare const DEFAULT_LINK_SIZE = 14;
|
|
36
|
+
/**
|
|
37
|
+
* `save()`s the context around `draw`, restoring it even when `draw` throws:
|
|
38
|
+
* the scene renderer logs a failing element and carries on, and the element
|
|
39
|
+
* mustn't leave its transforms and clips behind for the next one.
|
|
40
|
+
*/
|
|
41
|
+
export declare const withSavedContext: (context: CanvasRenderingContext2D, draw: () => void) => void;
|
|
32
42
|
export declare const elementWithCanvasCache: WeakMap<ExcalidrawElement, ExcalidrawElementWithCanvas>;
|
|
33
43
|
export declare const renderSelectionElement: (element: NonDeletedExcalidrawElement, context: CanvasRenderingContext2D, appState: InteractiveCanvasAppState, selectionColor: InteractiveCanvasRenderConfig["selectionColor"]) => void;
|
|
34
44
|
export declare const renderElement: (element: NonDeletedExcalidrawElement, elementsMap: RenderableElementsMap, allElementsMap: NonDeletedSceneElementsMap, rc: RoughCanvas, context: CanvasRenderingContext2D, renderConfig: StaticCanvasRenderConfig, appState: StaticCanvasAppState | InteractiveCanvasAppState, renderState?: Readonly<{
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host environment used by the renderer and export pipeline.
|
|
3
|
+
*
|
|
4
|
+
* The default is the browser's. An explicit environment (see
|
|
5
|
+
* `StaticCanvasRenderConfig["renderEnvironment"]`) scopes canvas and image
|
|
6
|
+
* creation to one render target -- e.g. the editor's owner window, so that
|
|
7
|
+
* one process can host editors in multiple realms (popouts, multi-tenant
|
|
8
|
+
* embeds), or an export running where `document`/`window` don't exist (Node
|
|
9
|
+
* with `node-canvas` / `@napi-rs/canvas`, passed in `config.environment`).
|
|
10
|
+
* There is deliberately no process-wide override: every render and export
|
|
11
|
+
* takes its environment explicitly.
|
|
12
|
+
*
|
|
13
|
+
* `document` is the DOM side of the same host: what SVG exports are built in
|
|
14
|
+
* (a DOM implementation such as `linkedom` under Node).
|
|
15
|
+
*/
|
|
16
|
+
import type { TextMetricsProvider } from "./textMeasurements";
|
|
17
|
+
export type RenderEnvironment = {
|
|
18
|
+
/** Creates a blank canvas. Callers set `width`/`height` themselves. */
|
|
19
|
+
createCanvas: () => HTMLCanvasElement;
|
|
20
|
+
/**
|
|
21
|
+
* Creates an image to be decoded from a data URL and later used as a
|
|
22
|
+
* `drawImage` source.
|
|
23
|
+
*
|
|
24
|
+
* NOTE: typed as `HTMLImageElement` because the renderer is typed against
|
|
25
|
+
* the DOM lib throughout. Non-DOM implementations (node-canvas et al) need
|
|
26
|
+
* to cast; they must support `src`, `onload`, `onerror`, `naturalWidth`,
|
|
27
|
+
* `naturalHeight` and be accepted by their canvas' `drawImage`.
|
|
28
|
+
*/
|
|
29
|
+
createImage: () => HTMLImageElement;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a fillable path from an SVG path string -- freedraw elements are
|
|
32
|
+
* filled through one.
|
|
33
|
+
*
|
|
34
|
+
* Optional, because browsers always have the global `Path2D` this falls back
|
|
35
|
+
* to. A Node host MUST supply it (e.g. `@napi-rs/canvas`'s `Path2D`) or
|
|
36
|
+
* install `globalThis.Path2D` itself: Node has no such global, and without
|
|
37
|
+
* one every freedraw element fails to render.
|
|
38
|
+
*/
|
|
39
|
+
createPath?: (svgPath: string) => Path2D;
|
|
40
|
+
/**
|
|
41
|
+
* The document SVG exports are built in: the editor's owner document, or
|
|
42
|
+
* outside the browser a DOM implementation's (e.g. `linkedom`).
|
|
43
|
+
*
|
|
44
|
+
* Optional; falls back to the global `document`.
|
|
45
|
+
*/
|
|
46
|
+
document?: Document;
|
|
47
|
+
/**
|
|
48
|
+
* Measures text (line widths, for wrapping and layout).
|
|
49
|
+
*
|
|
50
|
+
* Optional; falls back to the global provider set with
|
|
51
|
+
* `setCustomTextMetricsProvider`, else to measuring on a canvas from
|
|
52
|
+
* `createCanvas`.
|
|
53
|
+
*/
|
|
54
|
+
textMetrics?: TextMetricsProvider;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Resolves the host environment for a render: the explicitly scoped one (e.g.
|
|
58
|
+
* the editor's owner window, or an export's), else the browser default.
|
|
59
|
+
*/
|
|
60
|
+
export declare const getRenderEnvironment: (env?: RenderEnvironment) => RenderEnvironment;
|
|
61
|
+
/**
|
|
62
|
+
* Resolves the path factory for a render. `createPath` is the one optional
|
|
63
|
+
* member of the contract, so this fills in the global-`Path2D` default for
|
|
64
|
+
* environments that omit it.
|
|
65
|
+
*/
|
|
66
|
+
export declare const getCreatePath: (env?: RenderEnvironment) => ((svgPath: string) => Path2D);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type LocalPoint } from "@excalidraw/math";
|
|
2
2
|
import type { PointerDownState } from "@excalidraw/excalidraw/types";
|
|
3
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
3
4
|
import type { Scene } from "./Scene";
|
|
4
5
|
import type { BoundingBox } from "./bounds";
|
|
5
6
|
import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
6
|
-
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ElementsMap } from "./types";
|
|
7
|
-
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], scene: Scene, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
|
|
7
|
+
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawElement, ElementsMap } from "./types";
|
|
8
|
+
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], scene: Scene, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number, renderEnvironment?: RenderEnvironment) => boolean;
|
|
8
9
|
export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
|
|
9
10
|
points: LocalPoint[];
|
|
10
11
|
} | {
|
|
@@ -13,15 +14,23 @@ export declare const rescalePointsInElement: (element: NonDeletedExcalidrawEleme
|
|
|
13
14
|
export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
|
|
14
15
|
size: number;
|
|
15
16
|
} | null;
|
|
16
|
-
export declare const resizeSingleTextElement: (origElement: NonDeleted<ExcalidrawTextElement>, element: NonDeleted<ExcalidrawTextElement>, scene: Scene, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, nextWidth: number, nextHeight: number) => void;
|
|
17
|
+
export declare const resizeSingleTextElement: (origElement: NonDeleted<ExcalidrawTextElement>, element: NonDeleted<ExcalidrawTextElement>, scene: Scene, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, nextWidth: number, nextHeight: number, renderEnvironment?: RenderEnvironment) => void;
|
|
17
18
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
|
|
18
19
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|
|
19
|
-
export declare const resizeSingleElement: (nextWidth: number, nextHeight: number, latestElement: NonDeletedExcalidrawElement, origElement: NonDeletedExcalidrawElement, originalElementsMap: ElementsMap, scene: Scene, handleDirection: TransformHandleDirection, { shouldInformMutation, shouldMaintainAspectRatio, shouldResizeFromCenter, }?: {
|
|
20
|
+
export declare const resizeSingleElement: (nextWidth: number, nextHeight: number, latestElement: NonDeletedExcalidrawElement, origElement: NonDeletedExcalidrawElement, originalElementsMap: ElementsMap, scene: Scene, handleDirection: TransformHandleDirection, { shouldInformMutation, shouldMaintainAspectRatio, shouldResizeFromCenter, renderEnvironment, }?: {
|
|
20
21
|
shouldMaintainAspectRatio?: boolean;
|
|
21
22
|
shouldResizeFromCenter?: boolean;
|
|
22
23
|
shouldInformMutation?: boolean;
|
|
24
|
+
renderEnvironment?: RenderEnvironment;
|
|
23
25
|
}) => void;
|
|
24
|
-
export declare const
|
|
26
|
+
export declare const getNextSingleWidthAndHeightFromPointer: (latestElement: ExcalidrawElement, origElement: ExcalidrawElement, handleDirection: TransformHandleDirection, pointerX: number, pointerY: number, { shouldMaintainAspectRatio, shouldResizeFromCenter, }?: {
|
|
27
|
+
shouldMaintainAspectRatio?: boolean;
|
|
28
|
+
shouldResizeFromCenter?: boolean;
|
|
29
|
+
}) => {
|
|
30
|
+
nextWidth: number;
|
|
31
|
+
nextHeight: number;
|
|
32
|
+
};
|
|
33
|
+
export declare const resizeMultipleElements: (selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, handleDirection: TransformHandleDirection, scene: Scene, originalElementsMap: ElementsMap, { shouldMaintainAspectRatio, shouldResizeFromCenter, flipByX, flipByY, nextHeight, nextWidth, originalBoundingBox, renderEnvironment, }?: {
|
|
25
34
|
nextWidth?: number;
|
|
26
35
|
nextHeight?: number;
|
|
27
36
|
shouldMaintainAspectRatio?: boolean;
|
|
@@ -29,4 +38,5 @@ export declare const resizeMultipleElements: (selectedElements: readonly NonDele
|
|
|
29
38
|
flipByX?: boolean;
|
|
30
39
|
flipByY?: boolean;
|
|
31
40
|
originalBoundingBox?: BoundingBox;
|
|
41
|
+
renderEnvironment?: RenderEnvironment;
|
|
32
42
|
}) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AppState, BoxSelectionMode, InteractiveCanvasAppState } from "@excalidraw/excalidraw/types";
|
|
2
|
-
import { LinearElementEditor } from "./linearElementEditor";
|
|
3
2
|
import type { ElementsMap, ElementsMapOrArray, ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement } from "./types";
|
|
3
|
+
export declare const shouldIgnoreElementFromSelection: (element: ExcalidrawElement) => boolean;
|
|
4
4
|
/**
|
|
5
5
|
* Frames and their containing elements are not to be selected at the same time.
|
|
6
6
|
* Given an array of selected elements, if there are frames and their containing elements
|
|
@@ -26,12 +26,6 @@ export declare const getTargetElements: (elements: ElementsMapOrArray, appState:
|
|
|
26
26
|
export declare const makeNextSelectedElementIds: (nextSelectedElementIds: AppState["selectedElementIds"], prevState: Pick<AppState, "selectedElementIds">) => Readonly<{
|
|
27
27
|
[id: string]: true;
|
|
28
28
|
}>;
|
|
29
|
-
export declare const getSelectionStateForElements: (targetElements: readonly NonDeletedExcalidrawElement[], allElements: readonly NonDeletedExcalidrawElement[], appState: AppState) => {
|
|
30
|
-
editingGroupId: AppState["editingGroupId"];
|
|
31
|
-
selectedElementIds: AppState["selectedElementIds"];
|
|
32
|
-
selectedGroupIds: AppState["selectedGroupIds"];
|
|
33
|
-
selectedLinearElement: LinearElementEditor | null;
|
|
34
|
-
};
|
|
35
29
|
/**
|
|
36
30
|
* Returns editing or single-selected text element, if any.
|
|
37
31
|
*/
|
|
@@ -36,6 +36,8 @@ export declare const generateLinearCollisionShape: (element: ExcalidrawLinearEle
|
|
|
36
36
|
op: string;
|
|
37
37
|
data: number[];
|
|
38
38
|
}[];
|
|
39
|
+
export declare const ELBOW_ARROW_CORNER_RADIUS = 16;
|
|
40
|
+
export declare const generateElbowArrowShape: (routePoints: readonly LocalPoint[], radius: number) => string;
|
|
39
41
|
/**
|
|
40
42
|
* get the pure geometric shape of an excalidraw elementw
|
|
41
43
|
* which is then used for hit detection
|