@excalidraw/math 0.18.0-a9ca16e → 0.18.0-ab0255f
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/dev/index.js +297 -99
- package/dist/dev/index.js.map +4 -4
- package/dist/prod/index.js +1 -1
- package/dist/types/common/src/colors.d.ts +17 -1
- package/dist/types/common/src/constants.d.ts +12 -7
- package/dist/types/common/src/keys.d.ts +2 -0
- package/dist/types/common/src/points.d.ts +1 -1
- package/dist/types/common/src/utils.d.ts +1 -43
- package/dist/types/element/src/Scene.d.ts +6 -4
- package/dist/types/element/src/align.d.ts +2 -2
- package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
- package/dist/types/element/src/arrows/focus.d.ts +5 -2
- package/dist/types/element/src/binding.d.ts +17 -8
- package/dist/types/element/src/bounds.d.ts +22 -7
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +1 -1
- package/dist/types/element/src/comparisons.d.ts +5 -4
- package/dist/types/element/src/convertToShape.d.ts +23 -0
- package/dist/types/element/src/distribute.d.ts +2 -2
- package/dist/types/element/src/dragElements.d.ts +27 -0
- package/dist/types/element/src/duplicate.d.ts +4 -3
- package/dist/types/element/src/embeddable.d.ts +2 -2
- package/dist/types/element/src/flowchart.d.ts +7 -7
- package/dist/types/element/src/fractionalIndex.d.ts +2 -2
- package/dist/types/element/src/frame.d.ts +9 -8
- package/dist/types/element/src/groups.d.ts +9 -9
- package/dist/types/element/src/index.d.ts +4 -1
- package/dist/types/element/src/linearElementEditor.d.ts +17 -10
- package/dist/types/element/src/newElement.d.ts +14 -0
- package/dist/types/element/src/renderElement.d.ts +0 -3
- package/dist/types/element/src/resizeElements.d.ts +2 -2
- package/dist/types/element/src/selection.d.ts +6 -6
- package/dist/types/element/src/shape.d.ts +13 -1
- package/dist/types/element/src/textElement.d.ts +12 -9
- package/dist/types/element/src/transform.d.ts +2 -2
- package/dist/types/element/src/typeChecks.d.ts +26 -25
- package/dist/types/element/src/types.d.ts +8 -1
- package/dist/types/element/src/utils.d.ts +1 -1
- package/dist/types/element/src/zindex.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +30 -12
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +20 -8
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +132 -926
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +20 -8
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +10 -4
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +32 -13
- package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionDeselect.d.ts} +24 -33
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +10 -4
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +21 -9
- package/dist/types/excalidraw/actions/actionExport.d.ts +22 -10
- package/dist/types/excalidraw/actions/actionFrame.d.ts +42 -196
- package/dist/types/excalidraw/actions/actionGroup.d.ts +35 -23
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +14 -6
- package/dist/types/excalidraw/actions/actionLink.d.ts +11 -5
- package/dist/types/excalidraw/actions/actionMenu.d.ts +10 -4
- package/dist/types/excalidraw/actions/actionProperties.d.ts +50 -26
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +15 -9
- package/dist/types/excalidraw/actions/actionStyles.d.ts +10 -4
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +11 -5
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +14 -9
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +11 -5
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +11 -5
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +14 -9
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +11 -5
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +12 -6
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +11 -5
- package/dist/types/excalidraw/actions/index.d.ts +2 -2
- package/dist/types/excalidraw/actions/manager.d.ts +1 -0
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +8 -4
- package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
- package/dist/types/excalidraw/appState.d.ts +7 -5
- package/dist/types/excalidraw/components/Actions.d.ts +17 -12
- package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/App.arrowText.d.ts +72 -0
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +34 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +31 -0
- package/dist/types/excalidraw/components/App.d.ts +355 -65
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +73 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +5 -3
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +1 -0
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +6 -1
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -1
- package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -2
- package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
- package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
- package/dist/types/excalidraw/components/{ToolButton.d.ts → IconButton.d.ts} +16 -19
- package/dist/types/excalidraw/components/Island.d.ts +7 -0
- package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
- package/dist/types/excalidraw/components/LayerUI.d.ts +4 -2
- package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
- package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
- package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
- package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
- package/dist/types/excalidraw/components/Popover.d.ts +1 -3
- package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
- package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
- package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
- package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
- package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +4 -4
- package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +3 -3
- package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
- package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
- package/dist/types/excalidraw/components/Tools.d.ts +146 -0
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -1
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +1 -0
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -1
- package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
- package/dist/types/excalidraw/components/icons.d.ts +3 -1
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +8 -4
- package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
- package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
- package/dist/types/excalidraw/data/blob.d.ts +24 -12
- package/dist/types/excalidraw/data/index.d.ts +4 -4
- package/dist/types/excalidraw/data/json.d.ts +18 -12
- package/dist/types/excalidraw/data/library.d.ts +1 -1
- package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
- package/dist/types/excalidraw/eraser/index.d.ts +2 -3
- package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
- package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
- package/dist/types/excalidraw/lasso/index.d.ts +2 -3
- package/dist/types/excalidraw/renderer/animation.d.ts +5 -1
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -3
- package/dist/types/excalidraw/scene/Renderer.d.ts +426 -19
- package/dist/types/excalidraw/scene/export.d.ts +3 -3
- package/dist/types/excalidraw/scene/index.d.ts +2 -2
- package/dist/types/excalidraw/scene/types.d.ts +4 -3
- package/dist/types/excalidraw/snapping.d.ts +7 -7
- package/dist/types/excalidraw/types.d.ts +368 -19
- package/dist/types/excalidraw/viewport.d.ts +272 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +2 -3
- package/dist/types/fractional-indexing/src/index.d.ts +29 -0
- package/dist/types/laser-pointer/src/index.d.ts +2 -0
- package/dist/types/laser-pointer/src/math.d.ts +16 -0
- package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
- package/dist/types/laser-pointer/src/state.d.ts +36 -0
- package/dist/types/math/src/constants.d.ts +0 -1
- package/dist/types/math/src/curve.d.ts +4 -1
- package/dist/types/math/src/index.d.ts +1 -0
- package/dist/types/math/src/pca.d.ts +79 -0
- package/dist/types/math/src/point.d.ts +1 -0
- package/dist/types/math/src/polygon.d.ts +25 -1
- package/dist/types/utils/src/export.d.ts +3 -3
- package/dist/types/utils/src/index.d.ts +1 -2
- package/package.json +2 -2
- package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
- package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
- package/dist/types/excalidraw/components/shapes.d.ts +0 -263
- package/dist/types/excalidraw/cursor.d.ts +0 -5
- package/dist/types/excalidraw/scene/scroll.d.ts +0 -18
- package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
- package/dist/types/utils/src/bbox.d.ts +0 -9
- package/dist/types/utils/src/withinBounds.d.ts +0 -19
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { AppEventBus, type EXPORT_IMAGE_TYPES, Emitter, type EditorInterface, type StylesPanelMode } from "@excalidraw/common";
|
|
3
|
-
import { LinearElementEditor,
|
|
4
|
-
import type {
|
|
3
|
+
import { LinearElementEditor, Scene, Store, type ElementUpdate, StoreDelta, type ApplyToOptions } from "@excalidraw/element";
|
|
4
|
+
import type { LocalPoint, Radians } from "@excalidraw/math";
|
|
5
|
+
import type { ExcalidrawElement, ExcalidrawTextElement, NonDeleted, NonDeletedExcalidrawElement, ExcalidrawTextContainer, ExcalidrawFrameLikeElement, ExcalidrawIframeElement, ExcalidrawEmbeddableElement, Ordered, SceneElementsMap } from "@excalidraw/element/types";
|
|
5
6
|
import type { Mutable } from "@excalidraw/common/utility-types";
|
|
6
7
|
import { ActionManager } from "../actions/manager";
|
|
7
|
-
import { AnimationFrameHandler } from "../animation-frame-handler";
|
|
8
8
|
import { History } from "../history";
|
|
9
9
|
import { Fonts } from "../fonts";
|
|
10
10
|
import { type WritableAtom } from "../editor-jotai";
|
|
11
11
|
import { Renderer } from "../scene/Renderer";
|
|
12
|
-
import {
|
|
12
|
+
import { type SetViewportOptions } from "../viewport";
|
|
13
|
+
import { LaserTrails } from "../laserTrails";
|
|
13
14
|
import { isOverScrollBars } from "../scene/scrollbars";
|
|
14
15
|
import { LassoTrail } from "../lasso";
|
|
15
16
|
import { EraserTrail } from "../eraser";
|
|
17
|
+
import { AppArrowText } from "./App.arrowText";
|
|
18
|
+
import { AppBucketFill } from "./App.bucketFill";
|
|
19
|
+
import { AppCursor } from "./App.cursor";
|
|
20
|
+
import { AppDrawShape } from "./App.drawshape";
|
|
21
|
+
import { AppFlowchart } from "./App.flowchart";
|
|
22
|
+
import { AppViewport } from "./App.viewport";
|
|
23
|
+
import { CursorHints } from "./CursorHint";
|
|
16
24
|
import { type OnStateChange } from "./AppStateObserver";
|
|
17
25
|
import type { ExportedElements } from "../data";
|
|
18
|
-
import type { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, FrameNameBoundsCache, SidebarName, SidebarTabName, ToolType, OnUserFollowedPayload, ExcalidrawImperativeAPIEventMap, GenerateDiagramToCode, NullableGridSize,
|
|
26
|
+
import type { AppClassProperties, AppProps, AppState, ExcalidrawImperativeAPI, BinaryFiles, LibraryItems, SceneData, FrameNameBoundsCache, SidebarName, SidebarTabName, ToolType, OnUserFollowedPayload, ExcalidrawImperativeAPIEventMap, GenerateDiagramToCode, NullableGridSize, UIConfig } from "../types";
|
|
19
27
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
|
20
28
|
import type { ActionResult } from "../actions/types";
|
|
21
29
|
declare const editorLifecycleEventBehavior: {
|
|
@@ -78,6 +86,9 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
78
86
|
fonts: Fonts;
|
|
79
87
|
renderer: Renderer;
|
|
80
88
|
visibleElements: readonly NonDeletedExcalidrawElement[];
|
|
89
|
+
/** whether the last render had any renderable elements (excludes e.g. the
|
|
90
|
+
* in-progress `newElement` and the edited text element) */
|
|
91
|
+
private hasRenderableElements;
|
|
81
92
|
private resizeObserver;
|
|
82
93
|
library: AppClassProperties["library"];
|
|
83
94
|
libraryItemsFromStorage: LibraryItems | undefined;
|
|
@@ -107,9 +118,13 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
107
118
|
onEvent: AppEventBus<ExcalidrawImperativeAPIEventMap, typeof editorLifecycleEventBehavior>["on"];
|
|
108
119
|
private appStateObserver;
|
|
109
120
|
onStateChange: OnStateChange;
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
bucketFill: AppBucketFill;
|
|
122
|
+
flowchart: AppFlowchart;
|
|
123
|
+
cursor: AppCursor;
|
|
124
|
+
arrowText: AppArrowText;
|
|
125
|
+
viewport: AppViewport;
|
|
112
126
|
bindModeHandler: ReturnType<typeof setTimeout> | null;
|
|
127
|
+
private textWysiwygSubmitHandler;
|
|
113
128
|
hitLinkElement?: NonDeletedExcalidrawElement;
|
|
114
129
|
lastPointerDownEvent: React.PointerEvent<HTMLElement> | null;
|
|
115
130
|
lastPointerUpEvent: React.PointerEvent<HTMLElement> | PointerEvent | null;
|
|
@@ -126,14 +141,11 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
126
141
|
x: number;
|
|
127
142
|
y: number;
|
|
128
143
|
} | null;
|
|
129
|
-
|
|
130
|
-
x: number;
|
|
131
|
-
y: number;
|
|
132
|
-
};
|
|
133
|
-
animationFrameHandler: AnimationFrameHandler;
|
|
144
|
+
drawShape: AppDrawShape;
|
|
134
145
|
laserTrails: LaserTrails;
|
|
135
146
|
eraserTrail: EraserTrail;
|
|
136
147
|
lassoTrail: LassoTrail;
|
|
148
|
+
cursorHints: CursorHints;
|
|
137
149
|
onChangeEmitter: Emitter<[elements: readonly ExcalidrawElement[], appState: AppState, files: BinaryFiles]>;
|
|
138
150
|
onPointerDownEmitter: Emitter<[activeTool: {
|
|
139
151
|
lastActiveTool: import("../types").ActiveTool | null;
|
|
@@ -268,6 +280,74 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
268
280
|
api: ExcalidrawImperativeAPI;
|
|
269
281
|
private createExcalidrawAPI;
|
|
270
282
|
constructor(props: AppProps);
|
|
283
|
+
/**
|
|
284
|
+
* Whether the editor accepts user input (pointer, keyboard, wheel, touch,
|
|
285
|
+
* clipboard, drag&drop). When `false`, the editor is fully inert for the
|
|
286
|
+
* user, but remains controllable through the imperative API.
|
|
287
|
+
*
|
|
288
|
+
* All user-input entry points must consult this getter (directly or by
|
|
289
|
+
* not being attached/rendered at all).
|
|
290
|
+
*/
|
|
291
|
+
isInteractionEnabled(props?: Pick<AppProps, "interaction">): boolean;
|
|
292
|
+
/**
|
|
293
|
+
* Whether element links render their link icon and are clickable.
|
|
294
|
+
* True when fully interactive, or when `interaction: { enabled: { links:
|
|
295
|
+
* true } }`
|
|
296
|
+
* (in which case clicking anywhere on a linked element opens the link,
|
|
297
|
+
* same as in view mode).
|
|
298
|
+
*/
|
|
299
|
+
isLinksEnabled(props?: Pick<AppProps, "interaction">): boolean;
|
|
300
|
+
/**
|
|
301
|
+
* Whether canvas navigation — panning & zooming, view-mode style — is
|
|
302
|
+
* enabled. True when fully interactive, or when `interaction: { enabled:
|
|
303
|
+
* { navigation: true } }`. Respects `appState.scrollConstraints`.
|
|
304
|
+
*/
|
|
305
|
+
isNavigationEnabled(props?: Pick<AppProps, "interaction">): boolean;
|
|
306
|
+
/**
|
|
307
|
+
* Whether embeddable & iframe elements are interactive (hover & click to
|
|
308
|
+
* activate, view-mode style). True when fully interactive, or when
|
|
309
|
+
* allowed via `interaction.enabled.embeds` / `.interactiveContent`.
|
|
310
|
+
*/
|
|
311
|
+
isEmbedsEnabled(props?: Pick<AppProps, "interaction">): boolean;
|
|
312
|
+
/**
|
|
313
|
+
* Whether the browser's own zoom (ctrl/cmd + wheel, pinch, keyboard
|
|
314
|
+
* shortcuts) stays available over the non-interactive editor.
|
|
315
|
+
* Prevented by default.
|
|
316
|
+
*/
|
|
317
|
+
isBrowserZoomEnabled(props?: Pick<AppProps, "interaction">): boolean;
|
|
318
|
+
/**
|
|
319
|
+
* Whether the tool can be activated & driven by user input. False when
|
|
320
|
+
* disabled via `UIOptions.tools`, or when the editor is non-interactive
|
|
321
|
+
* and the tool isn't kept user-driven via `interaction.enabled.tools`.
|
|
322
|
+
*
|
|
323
|
+
* (Once UI tool availability is split from input availability — e.g.
|
|
324
|
+
* `props.ui.tools` vs `interaction.disabled.tools` — the UI axis moves
|
|
325
|
+
* out into its own predicate.)
|
|
326
|
+
*
|
|
327
|
+
* We purposely widen the `tool` type so this helper can be called with
|
|
328
|
+
* any tool without having to type check it.
|
|
329
|
+
*/
|
|
330
|
+
isToolSupported: <T extends ToolType | "custom">(tool: T, props?: Pick<AppProps, "interaction" | "UIOptions">) => boolean;
|
|
331
|
+
/**
|
|
332
|
+
* Whether the active tool is locked in place — via the tool lock
|
|
333
|
+
* (padlock / Q) or by being host-forced (`props.activeTool`). A locked
|
|
334
|
+
* tool doesn't revert to the selection tool after use, and elements drawn
|
|
335
|
+
* with it aren't selected. Forcing deliberately does not mutate
|
|
336
|
+
* `activeTool.locked`, which is the user's persisted padlock preference.
|
|
337
|
+
*/
|
|
338
|
+
isToolLocked(): boolean;
|
|
339
|
+
/**
|
|
340
|
+
* Whether the active tool captures the primary pointer instead of the
|
|
341
|
+
* view-mode drag-to-pan — the laser always does; while non-interactive,
|
|
342
|
+
* any tool allowed via `interaction.enabled.tools` does. (Editing tools
|
|
343
|
+
* capture the pointer trivially since view mode implies they're not
|
|
344
|
+
* active; this predicate only matters where view-mode gates apply.)
|
|
345
|
+
*/
|
|
346
|
+
isActiveToolPointerCapturing(): boolean;
|
|
347
|
+
/** Whether Excalidraw's full default UI is rendered. */
|
|
348
|
+
isDefaultUIEnabled(props?: Pick<AppProps, "ui">): boolean;
|
|
349
|
+
/** Whether an individual default UI control is rendered. */
|
|
350
|
+
isUIControlEnabled(control: keyof UIConfig["enabled"], props?: Pick<AppProps, "ui">): boolean;
|
|
271
351
|
updateEditorAtom: <Value, Args extends unknown[], Result>(atom: WritableAtom<Value, Args, Result>, ...args: Args) => Result;
|
|
272
352
|
private onWindowMessage;
|
|
273
353
|
private handleSkipBindMode;
|
|
@@ -302,7 +382,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
302
382
|
getSceneElements: () => readonly Ordered<NonDeletedExcalidrawElement>[];
|
|
303
383
|
onInsertElements: (elements: readonly ExcalidrawElement[]) => void;
|
|
304
384
|
onExportImage: (type: keyof typeof EXPORT_IMAGE_TYPES, elements: ExportedElements, opts: {
|
|
305
|
-
exportingFrame: ExcalidrawFrameLikeElement | null;
|
|
385
|
+
exportingFrame: NonDeleted<ExcalidrawFrameLikeElement> | null;
|
|
306
386
|
}) => Promise<void>;
|
|
307
387
|
private magicGenerations;
|
|
308
388
|
private updateMagicGeneration;
|
|
@@ -318,9 +398,34 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
318
398
|
private openEyeDropper;
|
|
319
399
|
dismissLinearEditor: () => void;
|
|
320
400
|
syncActionResult: (actionResult: ActionResult) => void;
|
|
401
|
+
scheduleCapture: () => void;
|
|
321
402
|
private onBlur;
|
|
322
403
|
private onUnload;
|
|
323
404
|
private disableEvent;
|
|
405
|
+
private preventBrowserZoomWheel;
|
|
406
|
+
private handleNavigationModeKeyDown;
|
|
407
|
+
/**
|
|
408
|
+
* PageUp/PageDown scroll the canvas by a page — vertically, or
|
|
409
|
+
* horizontally with shift. Respects `appState.scrollConstraints`
|
|
410
|
+
* (via `viewport.translate`).
|
|
411
|
+
*/
|
|
412
|
+
private maybeHandlePageScrollKeyDown;
|
|
413
|
+
private preventBrowserZoomKeyDown;
|
|
414
|
+
/** Ends active input sessions before switching to a view-mode/non-interactive
|
|
415
|
+
* mode. */
|
|
416
|
+
private terminateActiveInteraction;
|
|
417
|
+
private handleInteractionStateChange;
|
|
418
|
+
/** whether the two values reference the same tool (incl. custom subtype) */
|
|
419
|
+
private isSameForcedTool;
|
|
420
|
+
/**
|
|
421
|
+
* Keeps `state.activeTool` synced to the host-controlled
|
|
422
|
+
* `props.activeTool`. `setActiveTool` refuses non-matching activations
|
|
423
|
+
* while forced (user input, API); this backstop covers the writers that
|
|
424
|
+
* bypass the funnel (`actionFinalize`/`actionDeselect`, `restore()` on
|
|
425
|
+
* scene load, ...) and re-applies the tool once it becomes activatable
|
|
426
|
+
* (e.g. `interaction` config changes).
|
|
427
|
+
*/
|
|
428
|
+
private handleForcedToolChange;
|
|
324
429
|
private resetHistory;
|
|
325
430
|
private resetStore;
|
|
326
431
|
/**
|
|
@@ -360,7 +465,8 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
360
465
|
clientY: number;
|
|
361
466
|
} | "cursor" | "center";
|
|
362
467
|
retainSeed?: boolean;
|
|
363
|
-
|
|
468
|
+
fit?: SetViewportOptions["fit"];
|
|
469
|
+
preserveFrameChildrenOrder?: boolean;
|
|
364
470
|
}) => void;
|
|
365
471
|
private addElementsFromMixedContentPaste;
|
|
366
472
|
private addTextFromPaste;
|
|
@@ -369,47 +475,8 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
369
475
|
toggleLock: (source?: "keyboard" | "ui") => void;
|
|
370
476
|
updateFrameRendering: (opts: Partial<AppState["frameRendering"]> | ((prevState: AppState["frameRendering"]) => Partial<AppState["frameRendering"]>)) => void;
|
|
371
477
|
togglePenMode: (force: boolean | null) => void;
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* Zooms on canvas viewport center
|
|
375
|
-
*/
|
|
376
|
-
zoomCanvas: (
|
|
377
|
-
/**
|
|
378
|
-
* Decimal fraction, auto-clamped between MIN_ZOOM and MAX_ZOOM.
|
|
379
|
-
* 1 = 100% zoom, 2 = 200% zoom, 0.5 = 50% zoom
|
|
380
|
-
*/
|
|
381
|
-
value: number) => void;
|
|
382
|
-
private cancelInProgressAnimation;
|
|
383
|
-
scrollToContent: (
|
|
384
|
-
/**
|
|
385
|
-
* target to scroll to
|
|
386
|
-
*
|
|
387
|
-
* - string - id of element or group, or url containing elementLink
|
|
388
|
-
* - ExcalidrawElement | ExcalidrawElement[] - element(s) objects
|
|
389
|
-
*/
|
|
390
|
-
target?: string | ExcalidrawElement | readonly ExcalidrawElement[], opts?: ({
|
|
391
|
-
fitToContent?: boolean;
|
|
392
|
-
fitToViewport?: never;
|
|
393
|
-
viewportZoomFactor?: number;
|
|
394
|
-
animate?: boolean;
|
|
395
|
-
duration?: number;
|
|
396
|
-
} | {
|
|
397
|
-
fitToContent?: never;
|
|
398
|
-
fitToViewport?: boolean;
|
|
399
|
-
/** when fitToViewport=true, how much screen should the content cover,
|
|
400
|
-
* between 0.1 (10%) and 1 (100%)
|
|
401
|
-
*/
|
|
402
|
-
viewportZoomFactor?: number;
|
|
403
|
-
animate?: boolean;
|
|
404
|
-
duration?: number;
|
|
405
|
-
}) & {
|
|
406
|
-
minZoom?: number;
|
|
407
|
-
maxZoom?: number;
|
|
408
|
-
canvasOffsets?: Offsets;
|
|
409
|
-
}) => void;
|
|
478
|
+
revealIfHidden: (elements: NonDeletedExcalidrawElement[]) => void;
|
|
410
479
|
private maybeUnfollowRemoteUser;
|
|
411
|
-
/** use when changing scrollX/scrollY/zoom based on user interaction */
|
|
412
|
-
private translateCanvas;
|
|
413
480
|
setToast: (toast: AppState["toast"]) => void;
|
|
414
481
|
restoreFileFromShare: () => Promise<void>;
|
|
415
482
|
/**
|
|
@@ -437,7 +504,9 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
437
504
|
}) => void;
|
|
438
505
|
applyDeltas: (deltas: StoreDelta[], options?: ApplyToOptions) => [SceneElementsMap, AppState, boolean];
|
|
439
506
|
mutateElement: <TElement extends Mutable<ExcalidrawElement>>(element: TElement, updates: ElementUpdate<TElement>, informMutation?: boolean) => TElement;
|
|
440
|
-
|
|
507
|
+
triggerRender: (
|
|
508
|
+
/** force always re-renders canvas even if no change */
|
|
509
|
+
force?: boolean) => void;
|
|
441
510
|
/**
|
|
442
511
|
* @returns whether the menu was toggled on or off
|
|
443
512
|
*/
|
|
@@ -447,10 +516,8 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
447
516
|
force?: boolean;
|
|
448
517
|
}) => boolean;
|
|
449
518
|
private updateCurrentCursorPosition;
|
|
450
|
-
getEditorUIOffsets: () => Offsets;
|
|
451
519
|
private onKeyDown;
|
|
452
520
|
private onKeyUp;
|
|
453
|
-
private isToolSupported;
|
|
454
521
|
setActiveTool: (tool: ({
|
|
455
522
|
type: ToolType;
|
|
456
523
|
} | {
|
|
@@ -459,10 +526,18 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
459
526
|
}) & {
|
|
460
527
|
locked?: boolean;
|
|
461
528
|
fromSelection?: boolean;
|
|
462
|
-
},
|
|
529
|
+
}, opts?: {
|
|
530
|
+
keepSelection?: boolean;
|
|
531
|
+
/**
|
|
532
|
+
* When `true`, re-activating an already-active toggle tool (see
|
|
533
|
+
* `TOGGLE_TOOLS`) switches back to the previously active tool.
|
|
534
|
+
* Activation is idempotent by default; toggle tools always record the
|
|
535
|
+
* previously active tool regardless (so ESC and the next `toggle`
|
|
536
|
+
* activation can switch back to it).
|
|
537
|
+
*/
|
|
538
|
+
toggle?: boolean;
|
|
539
|
+
}) => void;
|
|
463
540
|
setOpenDialog: (dialogType: AppState["openDialog"]) => void;
|
|
464
|
-
private setCursor;
|
|
465
|
-
private resetCursor;
|
|
466
541
|
/**
|
|
467
542
|
* returns whether user is making a gesture with >= 2 fingers (points)
|
|
468
543
|
* on o touch screen (not on a trackpad). Currently only relates to Darwin
|
|
@@ -478,14 +553,177 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
478
553
|
private deselectElements;
|
|
479
554
|
private getSelectedTextElement;
|
|
480
555
|
private getSelectedTextEditingContainerAtPosition;
|
|
481
|
-
|
|
556
|
+
getTextElementAtPosition(x: number, y: number): NonDeleted<ExcalidrawTextElement> | null;
|
|
482
557
|
private isHittingTextAutoResizeHandle;
|
|
483
558
|
private handleTextAutoResizeHandlePointerDown;
|
|
484
|
-
|
|
559
|
+
getElementAtPosition(x: number, y: number, opts?: ({
|
|
560
|
+
includeBoundTextElement?: boolean;
|
|
561
|
+
includeLockedElements?: boolean;
|
|
562
|
+
} | {
|
|
563
|
+
allHitElements: NonDeleted<ExcalidrawElement>[];
|
|
564
|
+
}) & {
|
|
565
|
+
preferSelected?: boolean;
|
|
566
|
+
}): NonDeleted<ExcalidrawElement> | null;
|
|
485
567
|
private getElementsAtPosition;
|
|
486
568
|
getElementHitThreshold(element: ExcalidrawElement): number;
|
|
487
569
|
private hitElement;
|
|
488
|
-
|
|
570
|
+
getTextBindableContainerAtPosition(x: number, y: number): (Readonly<{
|
|
571
|
+
id: string;
|
|
572
|
+
x: number;
|
|
573
|
+
y: number;
|
|
574
|
+
strokeColor: string;
|
|
575
|
+
backgroundColor: string;
|
|
576
|
+
fillStyle: import("@excalidraw/element/types").FillStyle;
|
|
577
|
+
strokeWidth: number;
|
|
578
|
+
strokeStyle: import("@excalidraw/element/types").StrokeStyle;
|
|
579
|
+
roundness: null | {
|
|
580
|
+
type: import("@excalidraw/element/types").RoundnessType;
|
|
581
|
+
value?: number;
|
|
582
|
+
};
|
|
583
|
+
roughness: number;
|
|
584
|
+
opacity: number;
|
|
585
|
+
width: number;
|
|
586
|
+
height: number;
|
|
587
|
+
angle: Radians;
|
|
588
|
+
seed: number;
|
|
589
|
+
version: number;
|
|
590
|
+
versionNonce: number;
|
|
591
|
+
index: import("@excalidraw/element/types").FractionalIndex | null;
|
|
592
|
+
isDeleted: boolean;
|
|
593
|
+
groupIds: readonly import("@excalidraw/element/types").GroupId[];
|
|
594
|
+
frameId: string | null;
|
|
595
|
+
boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
|
|
596
|
+
updated: number;
|
|
597
|
+
link: string | null;
|
|
598
|
+
locked: boolean;
|
|
599
|
+
customData?: Record<string, any>;
|
|
600
|
+
}> & {
|
|
601
|
+
type: "rectangle";
|
|
602
|
+
} & {
|
|
603
|
+
isDeleted: false;
|
|
604
|
+
}) | (Readonly<{
|
|
605
|
+
id: string;
|
|
606
|
+
x: number;
|
|
607
|
+
y: number;
|
|
608
|
+
strokeColor: string;
|
|
609
|
+
backgroundColor: string;
|
|
610
|
+
fillStyle: import("@excalidraw/element/types").FillStyle;
|
|
611
|
+
strokeWidth: number;
|
|
612
|
+
strokeStyle: import("@excalidraw/element/types").StrokeStyle;
|
|
613
|
+
roundness: null | {
|
|
614
|
+
type: import("@excalidraw/element/types").RoundnessType;
|
|
615
|
+
value?: number;
|
|
616
|
+
};
|
|
617
|
+
roughness: number;
|
|
618
|
+
opacity: number;
|
|
619
|
+
width: number;
|
|
620
|
+
height: number;
|
|
621
|
+
angle: Radians;
|
|
622
|
+
seed: number;
|
|
623
|
+
version: number;
|
|
624
|
+
versionNonce: number;
|
|
625
|
+
index: import("@excalidraw/element/types").FractionalIndex | null;
|
|
626
|
+
isDeleted: boolean;
|
|
627
|
+
groupIds: readonly import("@excalidraw/element/types").GroupId[];
|
|
628
|
+
frameId: string | null;
|
|
629
|
+
boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
|
|
630
|
+
updated: number;
|
|
631
|
+
link: string | null;
|
|
632
|
+
locked: boolean;
|
|
633
|
+
customData?: Record<string, any>;
|
|
634
|
+
}> & {
|
|
635
|
+
type: "diamond";
|
|
636
|
+
} & {
|
|
637
|
+
isDeleted: false;
|
|
638
|
+
}) | (Readonly<{
|
|
639
|
+
id: string;
|
|
640
|
+
x: number;
|
|
641
|
+
y: number;
|
|
642
|
+
strokeColor: string;
|
|
643
|
+
backgroundColor: string;
|
|
644
|
+
fillStyle: import("@excalidraw/element/types").FillStyle;
|
|
645
|
+
strokeWidth: number;
|
|
646
|
+
strokeStyle: import("@excalidraw/element/types").StrokeStyle;
|
|
647
|
+
roundness: null | {
|
|
648
|
+
type: import("@excalidraw/element/types").RoundnessType;
|
|
649
|
+
value?: number;
|
|
650
|
+
};
|
|
651
|
+
roughness: number;
|
|
652
|
+
opacity: number;
|
|
653
|
+
width: number;
|
|
654
|
+
height: number;
|
|
655
|
+
angle: Radians;
|
|
656
|
+
seed: number;
|
|
657
|
+
version: number;
|
|
658
|
+
versionNonce: number;
|
|
659
|
+
index: import("@excalidraw/element/types").FractionalIndex | null;
|
|
660
|
+
isDeleted: boolean;
|
|
661
|
+
groupIds: readonly import("@excalidraw/element/types").GroupId[];
|
|
662
|
+
frameId: string | null;
|
|
663
|
+
boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
|
|
664
|
+
updated: number;
|
|
665
|
+
link: string | null;
|
|
666
|
+
locked: boolean;
|
|
667
|
+
customData?: Record<string, any>;
|
|
668
|
+
}> & {
|
|
669
|
+
type: "ellipse";
|
|
670
|
+
} & {
|
|
671
|
+
isDeleted: false;
|
|
672
|
+
}) | (Readonly<{
|
|
673
|
+
id: string;
|
|
674
|
+
x: number;
|
|
675
|
+
y: number;
|
|
676
|
+
strokeColor: string;
|
|
677
|
+
backgroundColor: string;
|
|
678
|
+
fillStyle: import("@excalidraw/element/types").FillStyle;
|
|
679
|
+
strokeWidth: number;
|
|
680
|
+
strokeStyle: import("@excalidraw/element/types").StrokeStyle;
|
|
681
|
+
roundness: null | {
|
|
682
|
+
type: import("@excalidraw/element/types").RoundnessType;
|
|
683
|
+
value?: number;
|
|
684
|
+
};
|
|
685
|
+
roughness: number;
|
|
686
|
+
opacity: number;
|
|
687
|
+
width: number;
|
|
688
|
+
height: number;
|
|
689
|
+
angle: Radians;
|
|
690
|
+
seed: number;
|
|
691
|
+
version: number;
|
|
692
|
+
versionNonce: number;
|
|
693
|
+
index: import("@excalidraw/element/types").FractionalIndex | null;
|
|
694
|
+
isDeleted: boolean;
|
|
695
|
+
groupIds: readonly import("@excalidraw/element/types").GroupId[];
|
|
696
|
+
frameId: string | null;
|
|
697
|
+
boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
|
|
698
|
+
updated: number;
|
|
699
|
+
link: string | null;
|
|
700
|
+
locked: boolean;
|
|
701
|
+
customData?: Record<string, any>;
|
|
702
|
+
}> & Readonly<{
|
|
703
|
+
type: "line" | "arrow";
|
|
704
|
+
points: readonly LocalPoint[];
|
|
705
|
+
startBinding: import("@excalidraw/element/types").FixedPointBinding | null;
|
|
706
|
+
endBinding: import("@excalidraw/element/types").FixedPointBinding | null;
|
|
707
|
+
startArrowhead: import("@excalidraw/element/types").Arrowhead | null;
|
|
708
|
+
endArrowhead: import("@excalidraw/element/types").Arrowhead | null;
|
|
709
|
+
}> & Readonly<{
|
|
710
|
+
type: "arrow";
|
|
711
|
+
elbowed: boolean;
|
|
712
|
+
}> & {
|
|
713
|
+
isDeleted: false;
|
|
714
|
+
}) | null;
|
|
715
|
+
/**
|
|
716
|
+
* Whether a text element's content is still being authored.
|
|
717
|
+
*
|
|
718
|
+
* Creating a text reverts the tool to selection during pointerdown, so the
|
|
719
|
+
* pointerup that follows looks like an ordinary canvas click and would
|
|
720
|
+
* capture the still-empty element as a history entry of its own. Undo would
|
|
721
|
+
* then rewind only the typing, restoring an invisible, zero-content element
|
|
722
|
+
* (and, for an endpoint label, leaving the arrow bound to it) rather than
|
|
723
|
+
* removing it. The editor's own submit captures the finished text instead,
|
|
724
|
+
* so the whole create-and-type lands in a single entry.
|
|
725
|
+
*/
|
|
726
|
+
private isEditingTextContent;
|
|
489
727
|
private startTextEditing;
|
|
490
728
|
private startImageCropping;
|
|
491
729
|
private finishImageCropping;
|
|
@@ -494,7 +732,48 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
494
732
|
private handleCanvasClick;
|
|
495
733
|
private getElementLinkAtPosition;
|
|
496
734
|
private handleElementLinkClick;
|
|
497
|
-
|
|
735
|
+
/**
|
|
736
|
+
* Applies (or clears) the element-link hover affordances — pointer cursor
|
|
737
|
+
* and tooltip — based on the current `hitLinkElement`. Returns whether a
|
|
738
|
+
* link is being hovered.
|
|
739
|
+
*/
|
|
740
|
+
private applyElementLinkHoverAffordance;
|
|
741
|
+
/**
|
|
742
|
+
* On touchscreens (where no hover precedes the tap) re-derives
|
|
743
|
+
* `hitLinkElement`, then opens the hit element link, if any.
|
|
744
|
+
* Returns whether a link click was handled.
|
|
745
|
+
*/
|
|
746
|
+
private maybeHandleElementLinkClick;
|
|
747
|
+
/**
|
|
748
|
+
* Restricted pointer handling for the non-interactive editor with links
|
|
749
|
+
* and/or embeds allowed (`interaction.enabled.links` / `.embeds` /
|
|
750
|
+
* `.interactiveContent`) — runs only the element-link & embed concerns
|
|
751
|
+
* (shared with the full pointer handlers above) so they behave like in
|
|
752
|
+
* view mode without the rest of the canvas pointer machinery.
|
|
753
|
+
*/
|
|
754
|
+
private handleInteractiveContentPointerMove;
|
|
755
|
+
private handleInteractiveContentPointerUp;
|
|
756
|
+
/**
|
|
757
|
+
* finds candidate frame under cursor (when dragging frame children/elements
|
|
758
|
+
* inside frames)
|
|
759
|
+
*/
|
|
760
|
+
getTopLayerFrameAtSceneCoords: (
|
|
761
|
+
/**
|
|
762
|
+
* should be already grid aligned (basically should be what the call site
|
|
763
|
+
* sets the element's coords to, if applicable)
|
|
764
|
+
*/
|
|
765
|
+
sceneCoords: {
|
|
766
|
+
x: number;
|
|
767
|
+
y: number;
|
|
768
|
+
}, opts?: {
|
|
769
|
+
/** to exclude selected elements when dragging, etc. */
|
|
770
|
+
excludeElementIds?: AppState["selectedElementIds"];
|
|
771
|
+
currentFrameId?: ExcalidrawElement["frameId"];
|
|
772
|
+
}) => NonDeleted<ExcalidrawFrameLikeElement> | null;
|
|
773
|
+
private updateFrameToHighlight;
|
|
774
|
+
private maybeUpdateFrameToHighlightOnPointerMove;
|
|
775
|
+
insertNewElements: (elements: readonly ExcalidrawElement[]) => void;
|
|
776
|
+
insertNewElement: (element: ExcalidrawElement) => void;
|
|
498
777
|
private handleCanvasPointerMove;
|
|
499
778
|
private handleEraser;
|
|
500
779
|
private handleTouchMove;
|
|
@@ -511,6 +790,11 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
511
790
|
private maybeCleanupAfterMissingPointerUp;
|
|
512
791
|
handleCanvasPanUsingWheelOrSpaceDrag: (event: React.PointerEvent<HTMLElement> | MouseEvent) => boolean;
|
|
513
792
|
private updateGestureOnPointerDown;
|
|
793
|
+
/**
|
|
794
|
+
* Tracks the pointer within the ongoing multi-touch gesture and applies
|
|
795
|
+
* the two-finger pinch zoom/pan, if any.
|
|
796
|
+
*/
|
|
797
|
+
private updateMultiTouchGesture;
|
|
514
798
|
private initialPointerDownState;
|
|
515
799
|
private handleDraggingScrollBar;
|
|
516
800
|
private clearSelectionIfNotUsingSelection;
|
|
@@ -536,6 +820,7 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
536
820
|
private newImagePlaceholder;
|
|
537
821
|
private handleLinearElementOnPointerDown;
|
|
538
822
|
private getCurrentItemRoundness;
|
|
823
|
+
private getCurrentItemStrokeWidth;
|
|
539
824
|
private createGenericElementOnPointerDown;
|
|
540
825
|
private createFrameElementOnPointerDown;
|
|
541
826
|
private maybeCacheReferenceSnapPoints;
|
|
@@ -575,7 +860,12 @@ declare class App extends React.Component<AppProps, AppState> {
|
|
|
575
860
|
private maybeHandleResize;
|
|
576
861
|
private getContextMenuItems;
|
|
577
862
|
private handleWheel;
|
|
578
|
-
|
|
863
|
+
getTextWysiwygSnappedToCenterPosition(x: number, y: number, appState: AppState, container?: ExcalidrawTextContainer | null): {
|
|
864
|
+
viewportX: number;
|
|
865
|
+
viewportY: number;
|
|
866
|
+
elementCenterX: number;
|
|
867
|
+
elementCenterY: number;
|
|
868
|
+
} | undefined;
|
|
579
869
|
private savePointer;
|
|
580
870
|
private resetShouldCacheIgnoreZoomDebounced;
|
|
581
871
|
private updateDOMRect;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { DrawShapeTrail } from "../drawShapeTrail";
|
|
2
|
+
import type App from "./App";
|
|
3
|
+
import type { PointerDownState } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Captures the App state management for the drawShape tool (free-form
|
|
6
|
+
* sketch converted into a recognized excalidraw element). Pointer events
|
|
7
|
+
* are piped here from App.
|
|
8
|
+
*
|
|
9
|
+
* The gesture is committed by `finalize()` — recognize → (maybe upgrade
|
|
10
|
+
* line to arrow) → insert → bind endpoints — which is invoked from within
|
|
11
|
+
* `actionFinalize`, the editor's single finalization funnel. Whatever
|
|
12
|
+
* triggers a finalize (the gesture's own pointerup, a mid-gesture paste
|
|
13
|
+
* switching tools, …), the pending sketch resolves there exactly once.
|
|
14
|
+
*/
|
|
15
|
+
export declare class AppDrawShape {
|
|
16
|
+
private app;
|
|
17
|
+
trail: DrawShapeTrail;
|
|
18
|
+
/** a pointerdown started a sketch that `finalize()` hasn't resolved yet */
|
|
19
|
+
private gestureInProgress;
|
|
20
|
+
constructor(app: App);
|
|
21
|
+
stop: () => void;
|
|
22
|
+
hasPendingGesture: () => boolean;
|
|
23
|
+
handlePointerDown: (pointerDownState: PointerDownState) => void;
|
|
24
|
+
/** returns true when the pointermove was consumed by the shape preview */
|
|
25
|
+
handlePointerMove: (pointerCoords: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
}) => boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Binds both endpoints of a freshly inserted drawShape arrow to the
|
|
31
|
+
* bindable elements they hover, if any.
|
|
32
|
+
*
|
|
33
|
+
* Endpoints bind in "orbit" mode — the arrow starts/ends at the target's
|
|
34
|
+
* outline — even when the stroke was started or released inside the shape
|
|
35
|
+
* (a sketched connector aims at the shape, not at a point inside it). The
|
|
36
|
+
* exception is a sketch contained in a single shape: both ends then bind
|
|
37
|
+
* "inside" and stay where they were drawn, like the interactive
|
|
38
|
+
* inside→inside flow.
|
|
39
|
+
*/
|
|
40
|
+
private bindRecognizedArrow;
|
|
41
|
+
/**
|
|
42
|
+
* A sketched line that connects a bindable element with something else —
|
|
43
|
+
* another element or blank canvas — was meant as a connector: upgrade it
|
|
44
|
+
* to an arrow (called before insertion). A line touching no shape, or
|
|
45
|
+
* contained in a single shape (an annotation, not a connector), stays a
|
|
46
|
+
* line.
|
|
47
|
+
*/
|
|
48
|
+
private maybeUpgradeLineToArrow;
|
|
49
|
+
/**
|
|
50
|
+
* Commits the pending sketch, if any, and clears the trail. Invoked from
|
|
51
|
+
* within `actionFinalize` — never call directly, execute `actionFinalize`
|
|
52
|
+
* instead so element insertion flows into the action's returned elements.
|
|
53
|
+
*/
|
|
54
|
+
finalize: () => void;
|
|
55
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type App from "./App";
|
|
3
|
+
import type { PendingExcalidrawElements } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Captures the App state management for the flowchart functionality.
|
|
6
|
+
*/
|
|
7
|
+
export declare class AppFlowchart {
|
|
8
|
+
private app;
|
|
9
|
+
private creator;
|
|
10
|
+
private navigator;
|
|
11
|
+
constructor(app: App);
|
|
12
|
+
get pendingNodes(): PendingExcalidrawElements | null;
|
|
13
|
+
get isCreatingChart(): boolean;
|
|
14
|
+
/** ends any in-progress flowchart creation/navigation session */
|
|
15
|
+
clear: () => void;
|
|
16
|
+
handleKeyEvent: (event: React.KeyboardEvent | KeyboardEvent) => boolean;
|
|
17
|
+
private resolveKeyboardEventToOperation;
|
|
18
|
+
private selectAndReveal;
|
|
19
|
+
private captureUpdate;
|
|
20
|
+
private static getLinkDirectionFromKey;
|
|
21
|
+
}
|