@excalidraw/element 0.18.0-9ba0f5d → 0.18.0-a52cd20
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 +13141 -8453
- package/dist/dev/index.js.map +4 -4
- package/dist/prod/index.js +20 -19
- package/dist/types/common/debug.d.ts +21 -0
- package/dist/types/common/src/appEventBus.d.ts +27 -0
- package/dist/types/common/src/colors.d.ts +24 -2
- package/dist/types/common/src/constants.d.ts +70 -7
- package/dist/types/common/src/index.d.ts +3 -0
- package/dist/types/common/src/keys.d.ts +4 -0
- package/dist/types/common/src/points.d.ts +1 -1
- package/dist/types/common/src/random.d.ts +7 -0
- package/dist/types/common/src/utils.d.ts +10 -50
- package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
- package/dist/types/element/src/Scene.d.ts +9 -5
- 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/arrowheads.d.ts +3 -0
- package/dist/types/element/src/arrows/focus.d.ts +30 -0
- package/dist/types/element/src/arrows/helpers.d.ts +5 -0
- package/dist/types/element/src/binding.d.ts +37 -17
- package/dist/types/element/src/bounds.d.ts +23 -8
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +7 -3
- package/dist/types/element/src/comparisons.d.ts +8 -5
- package/dist/types/element/src/convertToShape.d.ts +23 -0
- package/dist/types/element/src/delta.d.ts +23 -1
- package/dist/types/element/src/distribute.d.ts +3 -2
- package/dist/types/element/src/dragElements.d.ts +27 -0
- package/dist/types/element/src/duplicate.d.ts +64 -3
- package/dist/types/element/src/elbowArrow.d.ts +2 -0
- package/dist/types/element/src/embeddable.d.ts +2 -2
- package/dist/types/element/src/flowchart.d.ts +11 -7
- package/dist/types/element/src/fractionalIndex.d.ts +2 -2
- package/dist/types/element/src/frame.d.ts +11 -10
- package/dist/types/element/src/groups.d.ts +9 -9
- package/dist/types/element/src/index.d.ts +8 -1
- package/dist/types/element/src/linearElementEditor.d.ts +32 -10
- package/dist/types/element/src/mutateElement.d.ts +3 -1
- package/dist/types/element/src/newElement.d.ts +53 -3
- package/dist/types/element/src/renderElement.d.ts +21 -7
- package/dist/types/element/src/resizeElements.d.ts +2 -2
- package/dist/types/element/src/selection.d.ts +11 -7
- package/dist/types/element/src/shape.d.ts +28 -2
- package/dist/types/element/src/sizeHelpers.d.ts +6 -0
- package/dist/types/element/src/sortElements.d.ts +10 -0
- package/dist/types/element/src/stickyNote.d.ts +183 -0
- package/dist/types/element/src/textElement.d.ts +21 -10
- package/dist/types/element/src/textWrapping.d.ts +26 -0
- package/dist/types/element/src/transform.d.ts +26 -7
- package/dist/types/element/src/typeChecks.d.ts +29 -27
- package/dist/types/element/src/types.d.ts +48 -9
- package/dist/types/element/src/utils.d.ts +19 -6
- package/dist/types/element/src/visualdebug.d.ts +1 -2
- package/dist/types/element/src/zindex.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +125 -53
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +85 -37
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +356 -1019
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +84 -36
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +42 -18
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +130 -55
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +182 -0
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +38 -18
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +85 -37
- package/dist/types/excalidraw/actions/actionExport.d.ts +133 -359
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +187 -236
- package/dist/types/excalidraw/actions/actionGroup.d.ts +100 -52
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +99 -21
- package/dist/types/excalidraw/actions/actionLink.d.ts +43 -19
- package/dist/types/excalidraw/actions/actionMenu.d.ts +38 -18
- package/dist/types/excalidraw/actions/actionProperties.d.ts +120 -56
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +46 -22
- package/dist/types/excalidraw/actions/actionStyles.d.ts +43 -18
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +3 -3
- package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionToggleArrowBinding.d.ts} +57 -32
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +46 -23
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +195 -0
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +43 -19
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +42 -23
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +43 -19
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +44 -20
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +43 -19
- package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
- package/dist/types/excalidraw/actions/index.d.ts +4 -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 +39 -13
- package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.constants.d.ts +48 -0
- package/dist/types/excalidraw/charts/charts.helpers.d.ts +32 -0
- package/dist/types/excalidraw/charts/charts.line.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.parse.d.ts +10 -0
- package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.types.d.ts +18 -0
- package/dist/types/excalidraw/charts/index.d.ts +7 -0
- package/dist/types/excalidraw/clipboard.d.ts +6 -7
- 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 +70 -0
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
- package/dist/types/excalidraw/components/App.d.ts +604 -89
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.duplicate.d.ts +51 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.pan.d.ts +62 -0
- package/dist/types/excalidraw/components/App.textTool.d.ts +140 -0
- package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +113 -0
- package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
- package/dist/types/excalidraw/components/AppStateObserver.d.ts +37 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -3
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +5 -1
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +9 -2
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
- package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
- package/dist/types/excalidraw/components/ColorPicker/colorTopPicksDnD.d.ts +11 -0
- 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/CommandPalette/types.d.ts +1 -1
- 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/FileDropOverlay.d.ts +2 -0
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +4 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +6 -1
- package/dist/types/excalidraw/components/FontPicker/fontTopPicksDnD.d.ts +12 -0
- package/dist/types/excalidraw/components/IconButton.d.ts +48 -0
- package/dist/types/excalidraw/components/IconPicker.d.ts +14 -9
- 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 +5 -2
- package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +6 -2
- package/dist/types/excalidraw/components/LibraryUnit.d.ts +7 -2
- 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/PasteChartDialog.d.ts +4 -5
- 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/PropertiesPopover.d.ts +1 -1
- package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
- package/dist/types/excalidraw/components/Range.d.ts +10 -4
- 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/Chat/ChatInterface.d.ts +2 -6
- package/dist/types/excalidraw/components/TTDDialog/Chat/TTDChatPanel.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/CodeMirrorEditor.d.ts +11 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +4 -4
- package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +11 -7
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +3 -3
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +4 -1
- package/dist/types/excalidraw/components/TTDDialog/TTDWelcomeMessage.d.ts +1 -0
- package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/mermaid-lang-lite.d.ts +2 -0
- package/dist/types/excalidraw/components/TTDDialog/types.d.ts +4 -0
- package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +3 -3
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidAutoFix.d.ts +1 -0
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +10 -0
- package/dist/types/excalidraw/components/Toast.d.ts +8 -4
- 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 +151 -0
- package/dist/types/excalidraw/components/Tooltip.d.ts +15 -1
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksContextMenu.d.ts +14 -0
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksTip.d.ts +11 -0
- package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +58 -0
- package/dist/types/excalidraw/components/UserList.d.ts +3 -2
- package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +4 -1
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +3 -0
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +30 -16
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +3 -2
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +11 -12
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCheckbox.d.ts +5 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +2 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSub.d.ts +23 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubContent.d.ts +8 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubTrigger.d.ts +12 -0
- package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +2 -0
- 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 +30 -10
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +26 -3
- package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +23 -14
- 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 +107 -60
- package/dist/types/excalidraw/data/filesystem.d.ts +3 -5
- package/dist/types/excalidraw/data/index.d.ts +6 -7
- package/dist/types/excalidraw/data/json.d.ts +62 -30
- package/dist/types/excalidraw/data/library.d.ts +1 -1
- package/dist/types/excalidraw/data/resave.d.ts +7 -2
- package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
- package/dist/types/excalidraw/eraser/index.d.ts +2 -3
- package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
- package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
- package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
- 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/lasso/utils.d.ts +2 -0
- package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
- package/dist/types/excalidraw/renderer/animation.d.ts +5 -1
- package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +2 -4
- package/dist/types/excalidraw/scene/Renderer.d.ts +489 -20
- 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 +7 -4
- package/dist/types/excalidraw/snapping.d.ts +7 -7
- package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
- package/dist/types/excalidraw/types.d.ts +619 -42
- package/dist/types/excalidraw/viewport.d.ts +302 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +12 -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 +23 -13
- 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 +8 -2
- package/dist/types/math/src/polygon.d.ts +25 -1
- package/dist/types/math/src/segment.d.ts +6 -0
- package/dist/types/math/src/types.d.ts +25 -1
- package/dist/types/utils/src/export.d.ts +4 -3
- package/dist/types/utils/src/index.d.ts +1 -2
- package/dist/types/utils/src/shape.d.ts +2 -2
- package/package.json +4 -3
- package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
- package/dist/types/excalidraw/charts.d.ts +0 -27
- package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -4
- package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +0 -15
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
- package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
- package/dist/types/excalidraw/components/InitializeApp.d.ts +0 -10
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -8
- package/dist/types/excalidraw/components/TTDDialog/utils/TTDStreamFetch.d.ts +0 -24
- package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
- package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
- package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -11
- package/dist/types/excalidraw/components/shapes.d.ts +0 -190
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -58
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -19
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -84
- package/dist/types/excalidraw/cursor.d.ts +0 -5
- package/dist/types/excalidraw/data/reconcile.d.ts +0 -7
- package/dist/types/excalidraw/index.d.ts +0 -46
- package/dist/types/excalidraw/polyfill.d.ts +0 -2
- 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
|
@@ -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,51 @@
|
|
|
1
|
+
import { duplicateElements } from "@excalidraw/element";
|
|
2
|
+
import type { ExcalidrawElement } from "@excalidraw/element/types";
|
|
3
|
+
import type { PointerDownState } from "../types";
|
|
4
|
+
import type App from "./App";
|
|
5
|
+
type Duplication = Pick<ReturnType<typeof duplicateElements>, "duplicatedElements" | "duplicateElementsMap" | "origElementsMap" | "origIdToDuplicateId" | "duplicateIdToOrigId">;
|
|
6
|
+
/**
|
|
7
|
+
* Owns the duplication paths which involve the host (`props.onDuplicate`):
|
|
8
|
+
* duplicating elements into the scene (paste, library insert etc.), and
|
|
9
|
+
* duplicating the dragged selection (alt-drag). The duplicate action shares
|
|
10
|
+
* `runOnDuplicate()`.
|
|
11
|
+
*/
|
|
12
|
+
export declare class AppDuplicate {
|
|
13
|
+
private app;
|
|
14
|
+
constructor(app: App);
|
|
15
|
+
/**
|
|
16
|
+
* Hands the duplication over to the host's `props.onDuplicate` (if any),
|
|
17
|
+
* and reconciles what it returned with the duplicates.
|
|
18
|
+
*
|
|
19
|
+
* @returns next elements, and the duplicates that weren't vetoed
|
|
20
|
+
*/
|
|
21
|
+
runOnDuplicate: (duplication: Duplication, nextElements: ExcalidrawElement[],
|
|
22
|
+
/** excludes the duplicated elements */
|
|
23
|
+
prevElements: readonly ExcalidrawElement[]) => {
|
|
24
|
+
elements: ExcalidrawElement[];
|
|
25
|
+
duplicatedElements: import("@excalidraw/element/types").NonDeletedExcalidrawElement[];
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Duplicates elements so that they end up centered at the scene coords
|
|
29
|
+
* (and in the frame at that point, if any). Doesn't update the scene.
|
|
30
|
+
*
|
|
31
|
+
* @returns `null` if the host vetoed the duplication
|
|
32
|
+
*/
|
|
33
|
+
duplicateAtSceneCoords: (elements: readonly ExcalidrawElement[], { x, y }: {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
}, opts?: {
|
|
37
|
+
retainSeed?: boolean;
|
|
38
|
+
preserveFrameChildrenOrder?: boolean;
|
|
39
|
+
}) => {
|
|
40
|
+
nextElements: ExcalidrawElement[];
|
|
41
|
+
duplicatedElements: import("@excalidraw/element/types").NonDeletedExcalidrawElement[];
|
|
42
|
+
} | null;
|
|
43
|
+
/**
|
|
44
|
+
* Duplicates the selection being dragged: the originals go back to where
|
|
45
|
+
* the drag started, and the drag continues with the duplicates.
|
|
46
|
+
*
|
|
47
|
+
* If the host vetoes the duplication, the originals keep being dragged.
|
|
48
|
+
*/
|
|
49
|
+
duplicateDraggedSelection: (pointerDownState: PointerDownState, event: PointerEvent) => void;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type App from "./App";
|
|
3
|
+
/**
|
|
4
|
+
* The drag-pan: a pointer drag that moves the canvas — the wheel or the
|
|
5
|
+
* secondary button, the main button while space is held or the hand tool
|
|
6
|
+
* is active, or any button in view mode. One session at a time, owning its
|
|
7
|
+
* window listeners and teardown; wheel input is gated on it (see
|
|
8
|
+
* `AppWheel`).
|
|
9
|
+
*
|
|
10
|
+
* A secondary-button session is a pan only once the pointer travels past
|
|
11
|
+
* the drag threshold; released before that, it is a right-click. The
|
|
12
|
+
* platform's `contextmenu` event opens the menu for a right-click where it
|
|
13
|
+
* follows the release (Windows), as it always has; where it comes with the
|
|
14
|
+
* press (macOS, Linux) it is swallowed — a drag cannot be told from a
|
|
15
|
+
* click yet — and the session opens the menu on release instead.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AppPan {
|
|
18
|
+
private app;
|
|
19
|
+
private dependencies;
|
|
20
|
+
/** space held down turns a main-button drag into a pan */
|
|
21
|
+
private spaceHeld;
|
|
22
|
+
private active;
|
|
23
|
+
/** the secondary-button session, while one is active */
|
|
24
|
+
private secondary;
|
|
25
|
+
/** the platform fires `contextmenu` on mouseup (Windows) or on mousedown
|
|
26
|
+
* (macOS, Linux); the one belonging to a secondary-button session is not a
|
|
27
|
+
* new click, whichever side of the session it lands on */
|
|
28
|
+
private suppressNextContextMenu;
|
|
29
|
+
/** applies the pointer move the session is holding back for its next
|
|
30
|
+
* frame, if any */
|
|
31
|
+
private pendingMoveFlush;
|
|
32
|
+
private teardown;
|
|
33
|
+
constructor(app: App, dependencies: {
|
|
34
|
+
/** pointers currently down (a two-finger gesture is not a pan) */
|
|
35
|
+
getPointerCount: () => number;
|
|
36
|
+
/** a scrollbar being dragged (App's own drag, not a pan session) */
|
|
37
|
+
isDraggingScrollBar: () => boolean;
|
|
38
|
+
});
|
|
39
|
+
isActive: () => boolean;
|
|
40
|
+
isSpaceHeld: () => boolean;
|
|
41
|
+
setSpaceHeld: (held: boolean) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Whether the pointer is navigating the viewport rather than acting on the
|
|
44
|
+
* scene — space held to pan, a pan in progress, a scrollbar drag, or the
|
|
45
|
+
* hand tool. Hover and cursor then belong to the navigation.
|
|
46
|
+
*/
|
|
47
|
+
isNavigating: () => boolean;
|
|
48
|
+
/** applies the pointer move still waiting for its frame, if any */
|
|
49
|
+
flushMove: () => void;
|
|
50
|
+
/** ends the active session, if any — pointerup may never arrive (the user
|
|
51
|
+
* tabs away, a new pointerdown lands first) */
|
|
52
|
+
end: () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Whether a `contextmenu` event belongs to a secondary-button session and
|
|
55
|
+
* must not open the menu: it came with the press (the session decides on
|
|
56
|
+
* release), or it follows a release that turned out to be a drag.
|
|
57
|
+
*/
|
|
58
|
+
consumesContextMenuEvent: () => boolean;
|
|
59
|
+
/** starts a session for the pointerdown if it qualifies; returns whether
|
|
60
|
+
* it did */
|
|
61
|
+
start: (event: React.PointerEvent<HTMLElement> | MouseEvent) => boolean;
|
|
62
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import type { ArrowEndpoint } from "@excalidraw/element";
|
|
2
|
+
import type { ExcalidrawTextContainer, ExcalidrawTextElement, NonDeleted } from "@excalidraw/element/types";
|
|
3
|
+
import type React from "react";
|
|
4
|
+
import type App from "./App";
|
|
5
|
+
import type { PointerDownState } from "../types";
|
|
6
|
+
type ScenePoint = {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
/** the modifier state a target depends on — off a pointer or keyboard event */
|
|
11
|
+
export type Modifiers = Pick<KeyboardEvent, "ctrlKey" | "metaKey">;
|
|
12
|
+
/** What a text-tool click at a position does. */
|
|
13
|
+
export type TextToolTarget =
|
|
14
|
+
/** binds a new text to a free arrow endpoint */
|
|
15
|
+
{
|
|
16
|
+
type: "endpoint";
|
|
17
|
+
endpoint: ArrowEndpoint;
|
|
18
|
+
}
|
|
19
|
+
/** edits this text (a label included, at its derived position) */
|
|
20
|
+
| {
|
|
21
|
+
type: "text";
|
|
22
|
+
element: NonDeleted<ExcalidrawTextElement>;
|
|
23
|
+
}
|
|
24
|
+
/** binds a new label to this empty container (an arrow included) */
|
|
25
|
+
| {
|
|
26
|
+
type: "container";
|
|
27
|
+
element: NonDeleted<ExcalidrawTextContainer>;
|
|
28
|
+
}
|
|
29
|
+
/** creates free text at the pointer */
|
|
30
|
+
| {
|
|
31
|
+
type: "free";
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The text tool's pointer interaction.
|
|
35
|
+
*
|
|
36
|
+
* Everything hangs off one question — what would a click at this position
|
|
37
|
+
* do (`getTargetAt`)? — answered once and used for the hover affordance
|
|
38
|
+
* (`appState.textToolHover`), the cursor and the pointerdown itself, so the
|
|
39
|
+
* affordance can never promise something the click won't deliver.
|
|
40
|
+
*
|
|
41
|
+
* A click on an empty container's center is armed on pointerdown and
|
|
42
|
+
* committed on pointerup as a bound label; dragging past the autowrap
|
|
43
|
+
* threshold first turns it into a free fixed-width text at the origin
|
|
44
|
+
* instead.
|
|
45
|
+
*
|
|
46
|
+
* Text editing itself (`app.startTextEditing`) is shared with Enter,
|
|
47
|
+
* double-click and the other entry points and stays in `App`.
|
|
48
|
+
*/
|
|
49
|
+
export declare class AppTextTool {
|
|
50
|
+
private app;
|
|
51
|
+
constructor(app: App);
|
|
52
|
+
/**
|
|
53
|
+
* A click on an empty container's center, armed on pointerdown and decided
|
|
54
|
+
* on the pointer's way out: a click binds a label, a drag creates free
|
|
55
|
+
* text instead. Deferring is what keeps the drag from first binding to
|
|
56
|
+
* (and provisionally enlarging) the container.
|
|
57
|
+
*/
|
|
58
|
+
private pending;
|
|
59
|
+
/**
|
|
60
|
+
* The modifiers the hover was last resolved with — what a refresh without
|
|
61
|
+
* an event of its own (the viewport moving under a still pointer) uses.
|
|
62
|
+
*/
|
|
63
|
+
private lastModifiers;
|
|
64
|
+
/**
|
|
65
|
+
* What a click at this position would do, in the order the click resolves
|
|
66
|
+
* it: a free arrow endpoint (the smaller, more deliberate target; z-aware,
|
|
67
|
+
* and off while ctrl/cmd disables binding) → the text under the pointer,
|
|
68
|
+
* which the click edits → an empty container near its center, which gets
|
|
69
|
+
* a label unless ctrl/cmd opts out → free text at the pointer.
|
|
70
|
+
*
|
|
71
|
+
* Ctrl/cmd is "no binding" throughout the tool, as elsewhere in the
|
|
72
|
+
* editor. For the container it is read off the event rather than the
|
|
73
|
+
* arrow-binding preference: a label is not an arrow binding.
|
|
74
|
+
*/
|
|
75
|
+
getTargetAt: (scenePointer: ScenePoint, modifiers: Modifiers) => TextToolTarget;
|
|
76
|
+
/**
|
|
77
|
+
* Keeps `appState.textToolHover` — the affordance for what a click would
|
|
78
|
+
* do — in sync with the pointer, and returns the target (for the cursor).
|
|
79
|
+
* Suppressed while something else owns the interaction: a text being
|
|
80
|
+
* edited or drag-sized, a multi-point element, a box selection, a drag of
|
|
81
|
+
* the selection, or the pointer over a scrollbar.
|
|
82
|
+
*/
|
|
83
|
+
updateHover: (scenePointer: ScenePoint, modifiers: Modifiers, isOverScrollBar?: boolean) => TextToolTarget | null;
|
|
84
|
+
/**
|
|
85
|
+
* Re-resolves the hover — and the cursor that goes with it — where the
|
|
86
|
+
* pointer last was, for what changes a click's outcome without the pointer
|
|
87
|
+
* moving: the ctrl/cmd toggle (pass its event), or the viewport scrolling
|
|
88
|
+
* or zooming under the pointer (no event; the last modifiers stand). The
|
|
89
|
+
* scene position is re-derived from the pointer's viewport position, so a
|
|
90
|
+
* moved viewport resolves what is under the pointer now.
|
|
91
|
+
*
|
|
92
|
+
* Nothing to refresh with another tool or without a hovering pointer — a
|
|
93
|
+
* finger never hovers (its last move is where it lifted), and the
|
|
94
|
+
* affordance a press armed is cleared when the press resolves or is
|
|
95
|
+
* canceled. The cursor is left to viewport navigation (space/wheel
|
|
96
|
+
* panning, a scrollbar drag, the hand tool), as on pointermove.
|
|
97
|
+
*/
|
|
98
|
+
refresh: (modifiers?: Modifiers) => void;
|
|
99
|
+
/**
|
|
100
|
+
* Drops a pending center click without acting on it — the tool was left,
|
|
101
|
+
* the browser took the pointer (pointercancel), or a second finger turned
|
|
102
|
+
* the press into a pinch/pan — so no pointerup of ours will decide it. The
|
|
103
|
+
* outline it armed goes with it: while pending, the hover is that click's.
|
|
104
|
+
*/
|
|
105
|
+
cancel: () => void;
|
|
106
|
+
clearHover: () => void;
|
|
107
|
+
private setHover;
|
|
108
|
+
/**
|
|
109
|
+
* The cursor for what a click would do: a pointer over the arrow anchors
|
|
110
|
+
* text would attach to, a text cursor over text the click would edit, the
|
|
111
|
+
* tool's crosshair otherwise — also while the affordance is suppressed
|
|
112
|
+
* (editing, drag-sizing), where a click has nothing to point at.
|
|
113
|
+
*/
|
|
114
|
+
cursorFor: (target: TextToolTarget | null) => string;
|
|
115
|
+
handlePointerDown: (event: React.PointerEvent<HTMLElement>, pointerDownState: PointerDownState) => void;
|
|
116
|
+
/**
|
|
117
|
+
* The pointer-move half of a pending center click. Once the pointer has
|
|
118
|
+
* moved past the autowrap threshold the click is a drag: free text is
|
|
119
|
+
* created at the origin and sized by the drag from here on. Horizontal
|
|
120
|
+
* only (a text is only ever sized that way) and in screen space, and
|
|
121
|
+
* deliberately wider than the generic drag threshold so a jittery click
|
|
122
|
+
* still binds. Returns whether a pending click owned the move.
|
|
123
|
+
*/
|
|
124
|
+
handlePointerMove: (event: PointerEvent, pointerDownState: PointerDownState) => boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The pointer-up half: a genuine pointerup binds the label. The
|
|
127
|
+
* missing-pointerup cleanup replays this with the pointerdown event (a
|
|
128
|
+
* second finger landing mid-press), and a tool switch orphans the click —
|
|
129
|
+
* both discard it instead.
|
|
130
|
+
*/
|
|
131
|
+
handlePointerUp: (event: PointerEvent, pointerDownState: PointerDownState) => void;
|
|
132
|
+
private isDrag;
|
|
133
|
+
private resolvePending;
|
|
134
|
+
/**
|
|
135
|
+
* The click has been acted on: drop the affordance, revert the tool unless
|
|
136
|
+
* it is locked, restore the cursor.
|
|
137
|
+
*/
|
|
138
|
+
private finish;
|
|
139
|
+
}
|
|
140
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ExcalidrawNonSelectionElement, NonDeleted } from "@excalidraw/element/types";
|
|
2
|
+
import type App from "./App";
|
|
3
|
+
import type { ToolType } from "../types";
|
|
4
|
+
type ScenePoint = {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
/** what a drag places: any element the new-element canvas can preview */
|
|
9
|
+
type DraggedElement = NonDeleted<ExcalidrawNonSelectionElement>;
|
|
10
|
+
/**
|
|
11
|
+
* A tool the user can drag out of the toolbar to drop a default-sized element
|
|
12
|
+
* where the pointer is released.
|
|
13
|
+
*/
|
|
14
|
+
type DraggableTool = {
|
|
15
|
+
/** the element the drop creates, centered on the pointer */
|
|
16
|
+
createElement: (app: App, center: ScenePoint) => DraggedElement;
|
|
17
|
+
/** what the tool does once its element is on the canvas (e.g. start editing) */
|
|
18
|
+
onDrop?: (app: App, element: DraggedElement) => void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The tools that can be dragged out of the toolbar. Add an entry to make a
|
|
22
|
+
* tool's button draggable — the gesture, preview and drop are shared.
|
|
23
|
+
*/
|
|
24
|
+
export declare const DRAGGABLE_TOOLS: Partial<Record<ToolType, DraggableTool>>;
|
|
25
|
+
/** CSS opacity of the preview canvas while dragging */
|
|
26
|
+
export declare const TOOL_DRAG_PREVIEW_OPACITY = 0.5;
|
|
27
|
+
/**
|
|
28
|
+
* Dragging a tool out of the toolbar. The preview element exists only here
|
|
29
|
+
* until the drop — it is not in the scene, the store or the history, so
|
|
30
|
+
* collaborators never see it and an aborted drag leaves nothing behind. It
|
|
31
|
+
* is painted by the `NewElementCanvas`, drawn exactly as it will land, with
|
|
32
|
+
* the canvas itself made translucent.
|
|
33
|
+
*
|
|
34
|
+
* The button arms on pointerdown; the drag starts once the pointer has
|
|
35
|
+
* moved `DRAGGING_THRESHOLD`, so a plain click still selects the tool. The
|
|
36
|
+
* gesture lives on the owner window (the pointer leaves the button at once),
|
|
37
|
+
* like the other pointer gestures in `App`.
|
|
38
|
+
*/
|
|
39
|
+
export declare class AppToolDrag {
|
|
40
|
+
private app;
|
|
41
|
+
constructor(app: App);
|
|
42
|
+
/** the element under the pointer while dragging, `null` otherwise */
|
|
43
|
+
preview: DraggedElement | null;
|
|
44
|
+
private armed;
|
|
45
|
+
private tool;
|
|
46
|
+
private type;
|
|
47
|
+
static isDraggable: (type: ToolType) => boolean;
|
|
48
|
+
isDragging: () => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Arm a drag from a tool button's pointerdown. Returns whether the tool is
|
|
51
|
+
* draggable (the caller lets a non-draggable press fall through).
|
|
52
|
+
*/
|
|
53
|
+
handleButtonPointerDown: (type: ToolType, event: PointerEvent) => boolean;
|
|
54
|
+
private onPointerMove;
|
|
55
|
+
private onPointerUp;
|
|
56
|
+
private onKeyDown;
|
|
57
|
+
/** drop the gesture without a trace */
|
|
58
|
+
cancel: () => void;
|
|
59
|
+
private isOverCanvas;
|
|
60
|
+
private addListeners;
|
|
61
|
+
private removeListeners;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { type StylesPanelMode } from "@excalidraw/common";
|
|
2
|
+
import type { NonDeletedSceneElementsMap } from "@excalidraw/element/types";
|
|
3
|
+
import { type SetViewportOptions } from "../viewport";
|
|
4
|
+
import type { AppProps, AppState, Offsets, ScrollConstraints, ViewportOffsets, ViewportOffsetsOptions, ViewportUIName } from "../types";
|
|
5
|
+
import type App from "./App";
|
|
6
|
+
export declare const SCROLL_TO_CONTENT_ANIMATION_KEY = "animateScrollToContent";
|
|
7
|
+
export declare const SCROLL_CONSTRAINTS_SNAP_BACK_ANIMATION_KEY = "animateScrollConstraintsSnapBack";
|
|
8
|
+
/** single source of truth for the `--right-sidebar-width` CSS variable */
|
|
9
|
+
export declare const RIGHT_SIDEBAR_WIDTH = 302;
|
|
10
|
+
type Viewport = Pick<AppState, "scrollX" | "scrollY" | "zoom">;
|
|
11
|
+
type AppViewportDependencies = {
|
|
12
|
+
getContainer: () => HTMLDivElement | null;
|
|
13
|
+
getStylesPanelMode: () => StylesPanelMode;
|
|
14
|
+
isGestureActive: () => boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Rubberband snap-back: animates the viewport from its current (possibly
|
|
18
|
+
* overscrolled) position back inside the lock box via the shared
|
|
19
|
+
* AnimationController. No-op when already within the hard bounds (or when
|
|
20
|
+
* there is no lock).
|
|
21
|
+
*/
|
|
22
|
+
export declare const snapBackToConstraints: (state: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "width" | "height" | "scrollConstraints">, onFrame: (updater: (state: Pick<AppState, "scrollX" | "scrollY" | "zoom" | "width" | "height" | "scrollConstraints">) => Viewport | null) => void, duration?: number) => void;
|
|
23
|
+
/**
|
|
24
|
+
* Owns viewport state transitions and App-bound viewport concerns. Pure
|
|
25
|
+
* viewport geometry remains in `viewport.ts` so actions and public helpers can
|
|
26
|
+
* calculate state without an App instance.
|
|
27
|
+
*/
|
|
28
|
+
export declare class AppViewport {
|
|
29
|
+
private app;
|
|
30
|
+
private dependencies;
|
|
31
|
+
lastPosition: {
|
|
32
|
+
x: number;
|
|
33
|
+
y: number;
|
|
34
|
+
};
|
|
35
|
+
private activeTransition;
|
|
36
|
+
private uiLastMeasured;
|
|
37
|
+
constructor(app: App, dependencies: AppViewportDependencies);
|
|
38
|
+
get isAnimating(): boolean;
|
|
39
|
+
/** Whether a programmatic transition into a locked viewport currently owns
|
|
40
|
+
* user pan/zoom input. */
|
|
41
|
+
get isLockedTransitionPending(): boolean;
|
|
42
|
+
invalidateUIOffset: (name: ViewportUIName) => void;
|
|
43
|
+
/**
|
|
44
|
+
* The side a rendered side UI (`data-viewport-ui="side"`) docks to, and
|
|
45
|
+
* how far it reaches into the canvas from it, in screen px.
|
|
46
|
+
*/
|
|
47
|
+
private measureSide;
|
|
48
|
+
/**
|
|
49
|
+
* The side a named surface docks to while it's hidden, and how far it
|
|
50
|
+
* reaches into the canvas from it: as last measured, else approximately.
|
|
51
|
+
*/
|
|
52
|
+
private getReservedSide;
|
|
53
|
+
private querySideUI;
|
|
54
|
+
/**
|
|
55
|
+
* Where a rendered side UI is, relative to the editor's container, in
|
|
56
|
+
* screen px; null when it isn't rendered.
|
|
57
|
+
*/
|
|
58
|
+
getSideUIRect: (name: ViewportUIName) => {
|
|
59
|
+
left: number;
|
|
60
|
+
right: number;
|
|
61
|
+
top: number;
|
|
62
|
+
bottom: number;
|
|
63
|
+
} | null;
|
|
64
|
+
/**
|
|
65
|
+
* How far the named side UIs reach into the canvas, in screen px, from
|
|
66
|
+
* the left and the right: the part of the canvas they cover. Zero at a
|
|
67
|
+
* side none of them is rendered at — e.g. with the sidebar closed, or on
|
|
68
|
+
* phones, where it's an overlay that doesn't count as viewport UI — unless
|
|
69
|
+
* a hidden one is reserved (see `ViewportOffsetsOptions.reserve`).
|
|
70
|
+
*/
|
|
71
|
+
getSideInsets: (names: readonly ViewportUIName[], opts?: Pick<ViewportOffsetsOptions, "reserve">) => {
|
|
72
|
+
left: number;
|
|
73
|
+
right: number;
|
|
74
|
+
};
|
|
75
|
+
/** How far the sidebar reaches into the canvas (see `getSideInsets`). */
|
|
76
|
+
getSidebarInsets: () => {
|
|
77
|
+
left: number;
|
|
78
|
+
right: number;
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Resolves user-supplied viewport offsets into concrete per-side pixel
|
|
82
|
+
* values. Static sides take precedence over UI-derived sides.
|
|
83
|
+
*/
|
|
84
|
+
resolveOffsets: (offsets: ViewportOffsets | undefined) => Offsets | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Measures the currently rendered editor UI and returns the usable viewport
|
|
87
|
+
* offsets, including optional padding and reserved hidden surfaces.
|
|
88
|
+
*/
|
|
89
|
+
getOffsets: (opts?: ViewportOffsetsOptions) => Offsets;
|
|
90
|
+
/** Resolves the host-supplied initial viewport against restored scene data. */
|
|
91
|
+
resolveInitialViewport: (opts: Omit<SetViewportOptions, "animation">, elementsMap: NonDeletedSceneElementsMap, appState: AppState) => (Viewport & {
|
|
92
|
+
scrollConstraints: ScrollConstraints | null;
|
|
93
|
+
}) | null;
|
|
94
|
+
/**
|
|
95
|
+
* Navigates to a target and optionally installs scroll/zoom constraints.
|
|
96
|
+
* Navigating stops following a collaborator, as a user's pan does.
|
|
97
|
+
*/
|
|
98
|
+
setViewport: (opts: SetViewportOptions | null) => void;
|
|
99
|
+
/** Use when changing scrollX/scrollY/zoom based on user interaction. */
|
|
100
|
+
translate: <K extends keyof AppState>(state: AppState | Pick<AppState, K> | null | ((prevState: Readonly<AppState>, props: Readonly<AppProps>) => AppState | Pick<AppState, K> | null), opts?: {
|
|
101
|
+
zoomPreConstrained?: boolean;
|
|
102
|
+
preserveScrollConstraintsSnapBack?: boolean;
|
|
103
|
+
}) => boolean;
|
|
104
|
+
/** Clamps the viewport into the active scroll constraints. */
|
|
105
|
+
constrain: (overscroll?: number) => void;
|
|
106
|
+
/** Releases a held rubberband overscroll. */
|
|
107
|
+
releaseOverscroll: () => void;
|
|
108
|
+
private snapBack;
|
|
109
|
+
private snapBackDebounced;
|
|
110
|
+
private cancelTransition;
|
|
111
|
+
destroy: () => void;
|
|
112
|
+
}
|
|
113
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type App from "./App";
|
|
2
|
+
/**
|
|
3
|
+
* Wheel input over the editor: pans the canvas, or zooms it around the
|
|
4
|
+
* pointer (`viewport.lastPosition`) — on ctrl/cmd+wheel (which is also how
|
|
5
|
+
* a trackpad pinch is delivered), while the wheel button itself is held
|
|
6
|
+
* down, or on a plain wheel when the input device is a mouse
|
|
7
|
+
* (`appState.inputDevice`). Shift+wheel pans horizontally;
|
|
8
|
+
* ctrl/cmd+shift+wheel pans vertically.
|
|
9
|
+
*/
|
|
10
|
+
export declare class AppWheel {
|
|
11
|
+
private app;
|
|
12
|
+
constructor(app: App);
|
|
13
|
+
/** the editor surfaces whose wheel input the editor consumes; everywhere
|
|
14
|
+
* else (menus, sidebars, …) the DOM keeps scrolling. The frame-name labels
|
|
15
|
+
* are DOM, but sit inside the container this listener is attached to */
|
|
16
|
+
private isOverEditorSurface;
|
|
17
|
+
handle: (event: WheelEvent) => void;
|
|
18
|
+
/**
|
|
19
|
+
* Prevents the browser's own zoom over the non-interactive editor while
|
|
20
|
+
* letting regular scroll through (trackpad pinch is delivered as
|
|
21
|
+
* ctrl+wheel).
|
|
22
|
+
*/
|
|
23
|
+
preventBrowserZoom: (event: WheelEvent) => void;
|
|
24
|
+
/** zooms around the pointer by a wheel delta (positive = zoom out) */
|
|
25
|
+
private zoomBy;
|
|
26
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { AppState, UnsubscribeCallback } from "../types";
|
|
2
|
+
type StateChangeSelector = keyof AppState | (keyof AppState)[] | ((appState: AppState) => unknown);
|
|
3
|
+
export type OnStateChange = {
|
|
4
|
+
<K extends keyof AppState>(prop: K, callback: (value: AppState[K], appState: AppState) => void, opts?: {
|
|
5
|
+
once: boolean;
|
|
6
|
+
}): UnsubscribeCallback;
|
|
7
|
+
<K extends keyof AppState>(prop: K): Promise<AppState[K]>;
|
|
8
|
+
(prop: (keyof AppState)[], callback: (appState: AppState, appState2: AppState) => void, opts?: {
|
|
9
|
+
once: boolean;
|
|
10
|
+
}): UnsubscribeCallback;
|
|
11
|
+
(prop: (keyof AppState)[]): Promise<AppState>;
|
|
12
|
+
<T>(prop: (appState: AppState) => T, callback: (value: T, appState: AppState) => void, opts?: {
|
|
13
|
+
once: boolean;
|
|
14
|
+
}): UnsubscribeCallback;
|
|
15
|
+
<T>(prop: (appState: AppState) => T): Promise<T>;
|
|
16
|
+
(opts: {
|
|
17
|
+
predicate: (appState: AppState) => boolean;
|
|
18
|
+
callback: (appState: AppState) => void;
|
|
19
|
+
once?: boolean;
|
|
20
|
+
}): UnsubscribeCallback;
|
|
21
|
+
(opts: {
|
|
22
|
+
predicate: (appState: AppState) => boolean;
|
|
23
|
+
}): Promise<AppState>;
|
|
24
|
+
(selector: StateChangeSelector, callback: (value: any, appState: AppState) => void): any;
|
|
25
|
+
};
|
|
26
|
+
export declare class AppStateObserver {
|
|
27
|
+
private readonly getState;
|
|
28
|
+
private listeners;
|
|
29
|
+
constructor(getState: () => AppState);
|
|
30
|
+
private isStateChangePredicateOptions;
|
|
31
|
+
private subscribe;
|
|
32
|
+
private normalize;
|
|
33
|
+
onStateChange: OnStateChange;
|
|
34
|
+
flush(prevState: AppState): void;
|
|
35
|
+
clear(): void;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -2,7 +2,7 @@ import type { ColorTuple, ColorPaletteCustom } from "@excalidraw/common";
|
|
|
2
2
|
import type { ExcalidrawElement } from "@excalidraw/element/types";
|
|
3
3
|
import "./ColorPicker.scss";
|
|
4
4
|
import type { ColorPickerType } from "./colorPickerUtils";
|
|
5
|
-
import type { AppState } from "../../types";
|
|
5
|
+
import type { AppState, UIAppState } from "../../types";
|
|
6
6
|
interface ColorPickerProps {
|
|
7
7
|
type: ColorPickerType;
|
|
8
8
|
/**
|
|
@@ -13,10 +13,16 @@ interface ColorPickerProps {
|
|
|
13
13
|
onChange: (color: string) => void;
|
|
14
14
|
label: string;
|
|
15
15
|
elements: readonly ExcalidrawElement[];
|
|
16
|
-
appState:
|
|
16
|
+
appState: UIAppState;
|
|
17
17
|
palette?: ColorPaletteCustom | null;
|
|
18
18
|
topPicks?: ColorTuple;
|
|
19
19
|
updateData: (formData?: any) => void;
|
|
20
|
+
/** palette colors to hide from the popup, keeping hotkey positions */
|
|
21
|
+
excludedColors?: readonly string[];
|
|
22
|
+
/** allow users to customize the top picks strip by drag & dropping colors
|
|
23
|
+
* from the picker popup onto it. The value names the
|
|
24
|
+
* `appState.colorTopPicks` slot the customization is stored in */
|
|
25
|
+
customizableTopPicks?: keyof AppState["colorTopPicks"];
|
|
20
26
|
}
|
|
21
|
-
export declare const ColorPicker: ({ type, color, onChange, label, elements, palette, topPicks, updateData, appState, }: ColorPickerProps) => import("react/jsx-runtime").JSX.Element
|
|
27
|
+
export declare const ColorPicker: import("react").MemoExoticComponent<({ type, color, onChange, label, elements, palette, topPicks, updateData, appState, excludedColors, customizableTopPicks, }: ColorPickerProps) => import("react/jsx-runtime").JSX.Element>;
|
|
22
28
|
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import type { Theme } from "@excalidraw/element/types";
|
|
1
2
|
interface CustomColorListProps {
|
|
3
|
+
theme: Theme;
|
|
2
4
|
colors: string[];
|
|
3
5
|
color: string | null;
|
|
4
6
|
onChange: (color: string) => void;
|
|
5
7
|
label: string;
|
|
6
8
|
}
|
|
7
|
-
export declare const CustomColorList: ({ colors, color, onChange, label, }: CustomColorListProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare const CustomColorList: ({ theme, colors, color, onChange, label, }: CustomColorListProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
10
|
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { ExcalidrawElement } from "@excalidraw/element/types";
|
|
2
|
+
import type { ExcalidrawElement, Theme } from "@excalidraw/element/types";
|
|
3
3
|
import type { ColorPaletteCustom } from "@excalidraw/common";
|
|
4
4
|
import type { ColorPickerType } from "./colorPickerUtils";
|
|
5
5
|
interface PickerProps {
|
|
6
|
+
theme: Theme;
|
|
6
7
|
color: string | null;
|
|
7
8
|
onChange: (color: string) => void;
|
|
8
9
|
type: ColorPickerType;
|
|
@@ -14,6 +15,9 @@ interface PickerProps {
|
|
|
14
15
|
onEyeDropperToggle: (force?: boolean) => void;
|
|
15
16
|
onEscape: (event: React.KeyboardEvent | KeyboardEvent) => void;
|
|
16
17
|
showHotKey?: boolean;
|
|
18
|
+
excludedColors?: readonly string[];
|
|
19
|
+
/** present only while the top picks are customized */
|
|
20
|
+
onResetTopPicks?: () => void;
|
|
17
21
|
}
|
|
18
22
|
export declare const Picker: React.ForwardRefExoticComponent<PickerProps & React.RefAttributes<unknown>>;
|
|
19
23
|
export {};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ColorPaletteCustom } from "@excalidraw/common";
|
|
2
|
+
import type { Theme } from "@excalidraw/element/types";
|
|
2
3
|
interface PickerColorListProps {
|
|
4
|
+
theme: Theme;
|
|
3
5
|
palette: ColorPaletteCustom;
|
|
4
6
|
color: string | null;
|
|
5
7
|
onChange: (color: string) => void;
|
|
6
8
|
activeShade: number;
|
|
7
9
|
showHotKey?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* palette colors to hide. Hidden entries keep their position in the hotkey
|
|
12
|
+
* order (their hotkey goes dead instead of remapping the colors after them).
|
|
13
|
+
*/
|
|
14
|
+
excludedColors?: readonly string[];
|
|
8
15
|
}
|
|
9
|
-
declare const PickerColorList: ({ palette, color, onChange, activeShade, showHotKey, }: PickerColorListProps) => import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
declare const PickerColorList: ({ theme, palette, color, onChange, activeShade, showHotKey, excludedColors, }: PickerColorListProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
17
|
export default PickerColorList;
|