@excalidraw/math 0.18.0-4a5c9e9 → 0.18.0-4ce8305
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/index.js +313 -115
- package/dist/dev/index.js.map +4 -4
- package/dist/prod/index.js +1 -1
- package/dist/types/common/src/colors.d.ts +23 -1
- package/dist/types/common/src/constants.d.ts +66 -7
- 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 +13 -44
- package/dist/types/element/src/Scene.d.ts +7 -5
- package/dist/types/element/src/align.d.ts +5 -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 +64 -13
- package/dist/types/element/src/bounds.d.ts +31 -8
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +21 -5
- 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/cropElement.d.ts +36 -4
- package/dist/types/element/src/delta.d.ts +30 -2
- package/dist/types/element/src/distribute.d.ts +5 -2
- package/dist/types/element/src/dragElements.d.ts +34 -2
- package/dist/types/element/src/duplicate.d.ts +64 -3
- package/dist/types/element/src/elbowArrow.d.ts +5 -0
- package/dist/types/element/src/embeddable.d.ts +3 -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 +10 -15
- package/dist/types/element/src/image.d.ts +5 -2
- package/dist/types/element/src/index.d.ts +7 -1
- package/dist/types/element/src/linearElementEditor.d.ts +31 -11
- package/dist/types/element/src/listMarker.d.ts +39 -0
- package/dist/types/element/src/mutateElement.d.ts +1 -1
- package/dist/types/element/src/newElement.d.ts +55 -3
- package/dist/types/element/src/renderElement.d.ts +31 -7
- package/dist/types/element/src/renderEnvironment.d.ts +66 -0
- package/dist/types/element/src/resizeElements.d.ts +14 -4
- package/dist/types/element/src/selection.d.ts +6 -12
- package/dist/types/element/src/shape.d.ts +29 -1
- 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 +191 -0
- package/dist/types/element/src/textElement.d.ts +22 -10
- package/dist/types/element/src/textMeasurements.d.ts +15 -11
- package/dist/types/element/src/textWrapping.d.ts +3 -2
- package/dist/types/element/src/transform.d.ts +31 -8
- package/dist/types/element/src/typeChecks.d.ts +29 -27
- package/dist/types/element/src/types.d.ts +43 -7
- package/dist/types/element/src/utils.d.ts +15 -4
- package/dist/types/element/src/zindex.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +87 -18
- package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +74 -203
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +271 -946
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +58 -12
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +29 -6
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +4 -518
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +31 -8
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +29 -6
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +59 -13
- package/dist/types/excalidraw/actions/actionExport.d.ts +66 -20
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +114 -651
- package/dist/types/excalidraw/actions/actionGroup.d.ts +73 -27
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +84 -9
- package/dist/types/excalidraw/actions/actionLink.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionMenu.d.ts +29 -6
- package/dist/types/excalidraw/actions/actionProperties.d.ts +96 -34
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +35 -12
- package/dist/types/excalidraw/actions/actionStyles.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +33 -11
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +33 -11
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
- package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionToggleShowHints.d.ts} +45 -19
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +30 -7
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +31 -8
- package/dist/types/excalidraw/actions/actionToggleWrap.d.ts +12 -0
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +30 -7
- package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
- package/dist/types/excalidraw/actions/index.d.ts +3 -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 +36 -12
- package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -1
- package/dist/types/excalidraw/charts/charts.helpers.d.ts +6 -5
- package/dist/types/excalidraw/charts/charts.line.d.ts +2 -1
- package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -1
- package/dist/types/excalidraw/charts/index.d.ts +2 -1
- package/dist/types/excalidraw/components/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.clipboard.d.ts +31 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
- package/dist/types/excalidraw/components/App.d.ts +332 -110
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.duplicate.d.ts +101 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.host.d.ts +102 -0
- package/dist/types/excalidraw/components/App.modifiers.d.ts +38 -0
- package/dist/types/excalidraw/components/App.pan.d.ts +62 -0
- package/dist/types/excalidraw/components/App.selection.d.ts +265 -0
- package/dist/types/excalidraw/components/App.selectionTool.d.ts +93 -0
- package/dist/types/excalidraw/components/App.text.d.ts +146 -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 +123 -0
- package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
- package/dist/types/excalidraw/components/App.wrap.d.ts +31 -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/ConvertElementTypePopup.d.ts +4 -3
- 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/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/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 +4 -2
- package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +4 -4
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +5 -2
- package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +2 -1
- package/dist/types/excalidraw/components/TTDDialog/common.d.ts +4 -1
- package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +3 -2
- package/dist/types/excalidraw/components/TTDDialog/types.d.ts +14 -1
- package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +3 -3
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +27 -1
- 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 +26 -2
- 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 +3 -2
- 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/DropdownMenuItemContentRadio.d.ts +2 -1
- package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
- package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +3 -2
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +15 -4
- package/dist/types/excalidraw/components/icons.d.ts +7 -1
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +10 -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 +74 -28
- package/dist/types/excalidraw/data/index.d.ts +7 -7
- package/dist/types/excalidraw/data/json.d.ts +43 -20
- 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/fonts/Fonts.d.ts +12 -8
- package/dist/types/excalidraw/history.d.ts +10 -4
- 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/reactUtils.d.ts +1 -1
- package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
- package/dist/types/excalidraw/renderer/animation.d.ts +15 -4
- package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +2 -4
- package/dist/types/excalidraw/renderer/staticScene.d.ts +11 -6
- package/dist/types/excalidraw/scene/Renderer.d.ts +490 -21
- package/dist/types/excalidraw/scene/export.d.ts +344 -21
- package/dist/types/excalidraw/scene/index.d.ts +2 -2
- package/dist/types/excalidraw/scene/types.d.ts +30 -5
- package/dist/types/excalidraw/snapping.d.ts +7 -7
- package/dist/types/excalidraw/types.d.ts +579 -29
- package/dist/types/excalidraw/viewport.d.ts +302 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +13 -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 +1 -0
- package/dist/types/math/src/polygon.d.ts +25 -1
- package/dist/types/math/src/segment.d.ts +6 -0
- package/dist/types/utils/src/index.d.ts +4 -3
- package/dist/types/utils/src/shape.d.ts +2 -2
- package/package.json +2 -2
- package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
- 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/MobileToolBar.d.ts +0 -10
- package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
- 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/export.d.ts +0 -35
- package/dist/types/utils/src/withinBounds.d.ts +0 -19
|
@@ -1,24 +1,19 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
export declare const selectGroup: (groupId: GroupId, appState: InteractiveCanvasAppState, elements: readonly NonDeleted<ExcalidrawElement>[]) => Pick<InteractiveCanvasAppState, "selectedGroupIds" | "selectedElementIds" | "editingGroupId">;
|
|
5
|
-
export declare const selectGroupsForSelectedElements: {
|
|
6
|
-
(appState: Pick<AppState, "selectedElementIds" | "editingGroupId">, elements: readonly NonDeletedExcalidrawElement[], prevAppState: InteractiveCanvasAppState, app: AppClassProperties | null): Mutable<Pick<InteractiveCanvasAppState, "selectedGroupIds" | "editingGroupId" | "selectedElementIds">>;
|
|
7
|
-
clearCache(): void;
|
|
8
|
-
};
|
|
1
|
+
import type { AppState, InteractiveCanvasAppState } from "@excalidraw/excalidraw/types";
|
|
2
|
+
import type { GroupId, ExcalidrawElement, NonDeleted, ElementsMapOrArray, ElementsMap, NonDeletedExcalidrawElement, NonDeletedElementsMapOrArray } from "./types";
|
|
3
|
+
export declare const selectGroup: (groupId: GroupId, appState: InteractiveCanvasAppState, elements: readonly NonDeletedExcalidrawElement[]) => Pick<InteractiveCanvasAppState, "selectedGroupIds" | "selectedElementIds" | "editingGroupId">;
|
|
9
4
|
/**
|
|
10
5
|
* If the element's group is selected, don't render an individual
|
|
11
6
|
* selection border around it.
|
|
12
7
|
*/
|
|
13
|
-
export declare const isSelectedViaGroup: (appState: InteractiveCanvasAppState, element: ExcalidrawElement) => boolean;
|
|
8
|
+
export declare const isSelectedViaGroup: (appState: Pick<InteractiveCanvasAppState, "editingGroupId" | "selectedGroupIds">, element: ExcalidrawElement) => boolean;
|
|
14
9
|
export declare const getSelectedGroupForElement: (appState: Pick<InteractiveCanvasAppState, "editingGroupId" | "selectedGroupIds">, element: ExcalidrawElement) => string | undefined;
|
|
15
|
-
export declare const getSelectedGroupIds: (appState: InteractiveCanvasAppState) => GroupId[];
|
|
16
|
-
export declare const selectGroupsFromGivenElements: (elements: readonly
|
|
10
|
+
export declare const getSelectedGroupIds: (appState: Pick<InteractiveCanvasAppState, "selectedGroupIds">) => GroupId[];
|
|
11
|
+
export declare const selectGroupsFromGivenElements: (elements: readonly NonDeletedExcalidrawElement[], appState: InteractiveCanvasAppState) => {
|
|
17
12
|
[groupId: string]: boolean;
|
|
18
13
|
};
|
|
19
14
|
export declare const editGroupForSelectedElement: (appState: AppState, element: NonDeleted<ExcalidrawElement>) => AppState;
|
|
20
15
|
export declare const isElementInGroup: (element: ExcalidrawElement, groupId: string) => boolean;
|
|
21
|
-
export declare const getElementsInGroup: (elements: ElementsMapOrArray, groupId: string) =>
|
|
16
|
+
export declare const getElementsInGroup: <P extends NonDeletedExcalidrawElement | ExcalidrawElement>(elements: P extends NonDeletedExcalidrawElement ? NonDeletedElementsMapOrArray : ElementsMapOrArray, groupId: string) => P[];
|
|
22
17
|
export declare const getSelectedGroupIdForElement: (element: ExcalidrawElement, selectedGroupIds: {
|
|
23
18
|
[groupId: string]: boolean;
|
|
24
19
|
}) => string | undefined;
|
|
@@ -26,9 +21,9 @@ export declare const addToGroup: (prevGroupIds: ExcalidrawElement["groupIds"], n
|
|
|
26
21
|
export declare const removeFromSelectedGroups: (groupIds: ExcalidrawElement["groupIds"], selectedGroupIds: {
|
|
27
22
|
[groupId: string]: boolean;
|
|
28
23
|
}) => string[];
|
|
29
|
-
export declare const getMaximumGroups: (elements:
|
|
24
|
+
export declare const getMaximumGroups: <T extends NonDeletedExcalidrawElement | ExcalidrawElement>(elements: T[], elementsMap: ElementsMap) => T[][];
|
|
30
25
|
export declare const getNonDeletedGroupIds: (elements: ElementsMap) => Set<string>;
|
|
31
26
|
export declare const elementsAreInSameGroup: (elements: readonly ExcalidrawElement[]) => boolean;
|
|
32
|
-
export declare const isInGroup: (element:
|
|
27
|
+
export declare const isInGroup: (element: ExcalidrawElement) => boolean;
|
|
33
28
|
export declare const getNewGroupIdsForDuplication: (groupIds: ExcalidrawElement["groupIds"], editingGroupId: AppState["editingGroupId"], mapper: (groupId: GroupId) => GroupId) => string[];
|
|
34
|
-
export declare const getSelectedElementsByGroup: (selectedElements:
|
|
29
|
+
export declare const getSelectedElementsByGroup: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, appState: Readonly<Pick<AppState, "selectedGroupIds" | "editingGroupId">>) => NonDeletedExcalidrawElement[][];
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import type { AppClassProperties, DataURL, BinaryFiles } from "@excalidraw/excalidraw/types";
|
|
2
2
|
import type { ExcalidrawElement, FileId, InitializedExcalidrawImageElement } from "./types";
|
|
3
|
-
export declare const loadHTMLImageElement: (dataURL: DataURL) => Promise<HTMLImageElement>;
|
|
3
|
+
export declare const loadHTMLImageElement: (dataURL: DataURL, createImage?: () => HTMLImageElement) => Promise<HTMLImageElement>;
|
|
4
4
|
/** NOTE: updates cache even if already populated with given image. Thus,
|
|
5
5
|
* you should filter out the images upstream if you want to optimize this. */
|
|
6
|
-
export declare const updateImageCache: ({ fileIds, files, imageCache, }: {
|
|
6
|
+
export declare const updateImageCache: ({ fileIds, files, imageCache, createImage, }: {
|
|
7
7
|
fileIds: FileId[];
|
|
8
8
|
files: BinaryFiles;
|
|
9
9
|
imageCache: AppClassProperties["imageCache"];
|
|
10
|
+
/** creates images in the owner window so cross-document scenes keep
|
|
11
|
+
* runtime ownership of their HTMLImageElements */
|
|
12
|
+
createImage?: () => HTMLImageElement;
|
|
10
13
|
}) => Promise<{
|
|
11
14
|
imageCache: Map<FileId, {
|
|
12
15
|
image: HTMLImageElement | Promise<HTMLImageElement>;
|
|
@@ -8,12 +8,14 @@ export declare const getSceneVersion: (elements: readonly ExcalidrawElement[]) =
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const hashElementsVersion: (elements: ElementsMapOrArray) => number;
|
|
10
10
|
export declare const hashString: (s: string) => number;
|
|
11
|
+
export declare const isNonDeletedElement: <T extends ExcalidrawElement>(element: T) => element is NonDeleted<T>;
|
|
11
12
|
export declare const getVisibleElements: (elements: readonly ExcalidrawElement[]) => readonly NonDeletedExcalidrawElement[];
|
|
12
13
|
export declare const getNonDeletedElements: <T extends ExcalidrawElement>(elements: readonly T[]) => readonly NonDeleted<T>[];
|
|
13
|
-
export declare const isNonDeletedElement: <T extends ExcalidrawElement>(element: T) => element is NonDeleted<T>;
|
|
14
14
|
export * from "./align";
|
|
15
|
+
export * from "./arrowEndpointText";
|
|
15
16
|
export * from "./binding";
|
|
16
17
|
export * from "./bounds";
|
|
18
|
+
export * from "./bucketFill";
|
|
17
19
|
export * from "./collision";
|
|
18
20
|
export * from "./comparisons";
|
|
19
21
|
export * from "./containerCache";
|
|
@@ -34,10 +36,12 @@ export * from "./groups";
|
|
|
34
36
|
export * from "./heading";
|
|
35
37
|
export * from "./image";
|
|
36
38
|
export * from "./linearElementEditor";
|
|
39
|
+
export * from "./listMarker";
|
|
37
40
|
export * from "./mutateElement";
|
|
38
41
|
export * from "./newElement";
|
|
39
42
|
export * from "./positionElementsOnGrid";
|
|
40
43
|
export * from "./renderElement";
|
|
44
|
+
export * from "./renderEnvironment";
|
|
41
45
|
export * from "./resizeElements";
|
|
42
46
|
export * from "./resizeTest";
|
|
43
47
|
export * from "./Scene";
|
|
@@ -47,6 +51,7 @@ export * from "./showSelectedShapeActions";
|
|
|
47
51
|
export * from "./sizeHelpers";
|
|
48
52
|
export * from "./sortElements";
|
|
49
53
|
export * from "./store";
|
|
54
|
+
export * from "./stickyNote";
|
|
50
55
|
export * from "./textElement";
|
|
51
56
|
export * from "./textMeasurements";
|
|
52
57
|
export * from "./textWrapping";
|
|
@@ -57,3 +62,4 @@ export * from "./utils";
|
|
|
57
62
|
export * from "./zindex";
|
|
58
63
|
export * from "./arrows/helpers";
|
|
59
64
|
export * from "./arrowheads";
|
|
65
|
+
export * from "./convertToShape";
|
|
@@ -22,6 +22,7 @@ export declare class LinearElementEditor {
|
|
|
22
22
|
};
|
|
23
23
|
arrowStartIsInside: boolean;
|
|
24
24
|
altFocusPoint: Readonly<GlobalPoint> | null;
|
|
25
|
+
arrowOtherEndpointInitialBinding: FixedPointBinding | null;
|
|
25
26
|
}>;
|
|
26
27
|
/** whether you're dragging a point */
|
|
27
28
|
readonly isDragging: boolean;
|
|
@@ -45,18 +46,18 @@ export declare class LinearElementEditor {
|
|
|
45
46
|
* @param id the `elementId` from the instance of this class (so that we can
|
|
46
47
|
* statically guarantee this method returns an ExcalidrawLinearElement)
|
|
47
48
|
*/
|
|
48
|
-
static getElement<T extends ExcalidrawLinearElement>(id: InstanceType<typeof LinearElementEditor>["elementId"], elementsMap: ElementsMap): T | null;
|
|
49
|
+
static getElement<T extends ExcalidrawLinearElement>(id: InstanceType<typeof LinearElementEditor>["elementId"], elementsMap: ElementsMap): NonDeleted<T> | null;
|
|
49
50
|
static handleBoxSelection(event: PointerEvent, appState: AppState, setState: React.Component<any, AppState>["setState"], elementsMap: NonDeletedSceneElementsMap): false | undefined;
|
|
50
51
|
static handlePointerMove(event: PointerEvent, app: AppClassProperties, scenePointerX: number, scenePointerY: number, linearElementEditor: LinearElementEditor): Pick<AppState, "suggestedBinding" | "selectedLinearElement"> | null;
|
|
51
52
|
static handlePointDragging(event: PointerEvent, app: AppClassProperties, scenePointerX: number, scenePointerY: number, linearElementEditor: LinearElementEditor): Pick<AppState, "suggestedBinding" | "selectedLinearElement"> | null;
|
|
52
53
|
static handlePointerUp(event: PointerEvent, editingLinearElement: LinearElementEditor, appState: AppState, scene: Scene): LinearElementEditor;
|
|
53
|
-
static getEditorMidPoints: (element:
|
|
54
|
+
static getEditorMidPoints: (element: ExcalidrawLinearElement, elementsMap: ElementsMap, appState: InteractiveCanvasAppState) => (GlobalPoint | null)[];
|
|
54
55
|
static getSegmentMidpointHitCoords: (linearElementEditor: LinearElementEditor, scenePointer: {
|
|
55
56
|
x: number;
|
|
56
57
|
y: number;
|
|
57
58
|
}, appState: AppState, elementsMap: ElementsMap) => GlobalPoint | null;
|
|
58
|
-
static isSegmentTooShort<P extends GlobalPoint | LocalPoint>(element:
|
|
59
|
-
static getSegmentMidPoint(element:
|
|
59
|
+
static isSegmentTooShort<P extends GlobalPoint | LocalPoint>(element: ExcalidrawLinearElement, startPoint: P, endPoint: P, index: number, zoom: Zoom, elementsMap: ElementsMap): boolean;
|
|
60
|
+
static getSegmentMidPoint(element: ExcalidrawLinearElement, index: number, elementsMap: ElementsMap): GlobalPoint;
|
|
60
61
|
static getSegmentMidPointIndex(linearElementEditor: LinearElementEditor, appState: AppState, midPoint: GlobalPoint, elementsMap: ElementsMap): number;
|
|
61
62
|
static handlePointerDown(event: React.PointerEvent<HTMLElement>, app: AppClassProperties, store: Store, scenePointer: {
|
|
62
63
|
x: number;
|
|
@@ -64,19 +65,26 @@ export declare class LinearElementEditor {
|
|
|
64
65
|
}, linearElementEditor: LinearElementEditor, scene: Scene): {
|
|
65
66
|
didAddPoint: boolean;
|
|
66
67
|
hitElement: NonDeleted<ExcalidrawElement> | null;
|
|
68
|
+
/** the pointer went down on the arrow's label, grabbing it for a drag */
|
|
69
|
+
hitBoundText: boolean;
|
|
67
70
|
linearElementEditor: LinearElementEditor | null;
|
|
68
71
|
};
|
|
69
72
|
static arePointsEqual<Point extends LocalPoint | GlobalPoint>(point1: Point | null, point2: Point | null): boolean;
|
|
70
73
|
static handlePointerMoveInEditMode(event: React.PointerEvent<HTMLCanvasElement>, scenePointerX: number, scenePointerY: number, app: AppClassProperties): LinearElementEditor | null;
|
|
71
74
|
/** scene coords */
|
|
72
|
-
static getPointGlobalCoordinates(element:
|
|
75
|
+
static getPointGlobalCoordinates(element: ExcalidrawLinearElement, p: LocalPoint, elementsMap: ElementsMap): GlobalPoint;
|
|
73
76
|
/** scene coords */
|
|
74
|
-
static getPointsGlobalCoordinates(element:
|
|
75
|
-
static getPointAtIndexGlobalCoordinates(element:
|
|
77
|
+
static getPointsGlobalCoordinates(element: ExcalidrawLinearElement, elementsMap: ElementsMap): GlobalPoint[];
|
|
78
|
+
static getPointAtIndexGlobalCoordinates(element: ExcalidrawLinearElement, indexMaybeFromEnd: number, // -1 for last element
|
|
76
79
|
elementsMap: ElementsMap): GlobalPoint;
|
|
77
|
-
static pointFromAbsoluteCoords(element:
|
|
78
|
-
|
|
79
|
-
|
|
80
|
+
static pointFromAbsoluteCoords(element: ExcalidrawLinearElement, absoluteCoords: GlobalPoint, elementsMap: ElementsMap): LocalPoint;
|
|
81
|
+
/**
|
|
82
|
+
* Whether the point at `index` is an interactive handle. Elbow arrows only
|
|
83
|
+
* expose their endpoints; their intermediate route points are not draggable.
|
|
84
|
+
*/
|
|
85
|
+
static isPointHandle(element: ExcalidrawLinearElement, index: number): boolean;
|
|
86
|
+
static getPointIndexUnderCursor(element: ExcalidrawLinearElement, elementsMap: ElementsMap, zoom: AppState["zoom"], x: number, y: number): number;
|
|
87
|
+
static createPointAt(element: ExcalidrawLinearElement, elementsMap: ElementsMap, scenePointerX: number, scenePointerY: number, gridSize: NullableGridSize): LocalPoint;
|
|
80
88
|
/**
|
|
81
89
|
* Normalizes line points so that the start point is at [0,0]. This is
|
|
82
90
|
* expected in various parts of the codebase.
|
|
@@ -95,10 +103,10 @@ export declare class LinearElementEditor {
|
|
|
95
103
|
static movePoints(element: NonDeleted<ExcalidrawLinearElement>, scene: Scene, pointUpdates: PointsPositionUpdates, otherUpdates?: {
|
|
96
104
|
startBinding?: FixedPointBinding | null;
|
|
97
105
|
endBinding?: FixedPointBinding | null;
|
|
98
|
-
moveMidPointsWithElement?: boolean | null;
|
|
99
106
|
}, options?: {
|
|
100
107
|
isBindingEnabled?: boolean;
|
|
101
108
|
isMidpointSnappingEnabled?: boolean;
|
|
109
|
+
moveMidPointsWithElement?: boolean;
|
|
102
110
|
}): void;
|
|
103
111
|
static shouldAddMidpoint(linearElementEditor: LinearElementEditor, pointerCoords: PointerCoords, appState: AppState, elementsMap: ElementsMap): boolean;
|
|
104
112
|
static addMidpoint(linearElementEditor: LinearElementEditor, pointerCoords: PointerCoords, app: AppClassProperties, snapToGrid: boolean, scene: Scene): {
|
|
@@ -107,10 +115,22 @@ export declare class LinearElementEditor {
|
|
|
107
115
|
} | undefined;
|
|
108
116
|
private static _updatePoints;
|
|
109
117
|
private static _getShiftLockedDelta;
|
|
118
|
+
/**
|
|
119
|
+
* The point a bound text label is centered on — the middle of the linear
|
|
120
|
+
* element, whether that's an actual point or the midpoint of the middle
|
|
121
|
+
* segment.
|
|
122
|
+
*/
|
|
123
|
+
static getBoundTextElementCenter: (element: ExcalidrawLinearElement, elementsMap: ElementsMap) => GlobalPoint;
|
|
124
|
+
static handleBoundTextDragging(linearElementEditor: LinearElementEditor, scene: Scene, pointerX: number, pointerY: number): LinearElementEditor | null;
|
|
125
|
+
static getPathLength(element: ExcalidrawLinearElement, elementsMap: ElementsMap): number;
|
|
126
|
+
/** the path parameter (0-1) of the point on the path closest to `point` */
|
|
127
|
+
static getPathParameterAtPoint(element: ExcalidrawLinearElement, point: GlobalPoint, elementsMap: ElementsMap): number | null;
|
|
128
|
+
static getPointAtPathParameter(container: ExcalidrawLinearElement, pathParameter: number, elementsMap: ElementsMap): GlobalPoint | null;
|
|
110
129
|
static getBoundTextElementPosition: (element: ExcalidrawLinearElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
|
|
111
130
|
x: number;
|
|
112
131
|
y: number;
|
|
113
132
|
};
|
|
133
|
+
private static computeBoundTextElementPosition;
|
|
114
134
|
static getMinMaxXYWithBoundText: (element: ExcalidrawLinearElement, elementsMap: ElementsMap, elementBounds: Bounds, boundTextElement: ExcalidrawTextElementWithContainer) => [number, number, number, number, number, number];
|
|
115
135
|
static getElementAbsoluteCoords: (element: ExcalidrawLinearElement, elementsMap: ElementsMap, includeBoundText?: boolean) => [number, number, number, number, number, number];
|
|
116
136
|
static moveFixedSegment(linearElement: LinearElementEditor, index: number, x: number, y: number, scene: Scene): Pick<LinearElementEditor, "segmentMidPointHoveredCoords" | "initialState">;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
2
|
+
import type { Scene } from "./Scene";
|
|
3
|
+
import type { ExcalidrawElement, ExcalidrawTextElement } from "./types";
|
|
4
|
+
/** a list marker advanced by duplication, to go back and forth */
|
|
5
|
+
export type ListMarkerAdvance = {
|
|
6
|
+
elementId: ExcalidrawTextElement["id"];
|
|
7
|
+
prevOriginalText: string;
|
|
8
|
+
nextOriginalText: string;
|
|
9
|
+
/**
|
|
10
|
+
* where the item's text (after the marker and whitespace) starts in
|
|
11
|
+
* `nextOriginalText` (its length if there's none)
|
|
12
|
+
*/
|
|
13
|
+
contentStart: number;
|
|
14
|
+
/** the label's container before the label (may have) grown it */
|
|
15
|
+
prevContainerSize: {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
} | null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Advances the list markers of the duplicated texts and labels, so that
|
|
22
|
+
* duplicating `1. foo` gives `2. foo` (and `1` gives `2`).
|
|
23
|
+
*
|
|
24
|
+
* Duplicating several list items at once continues the list from the
|
|
25
|
+
* highest of them: duplicating `1.`, `3.`, `5.` gives `6.`, `7.`, `8.` (only
|
|
26
|
+
* if they're just markers, i.e. without text).
|
|
27
|
+
*
|
|
28
|
+
* Only if nothing but list items (texts, or containers with list item labels)
|
|
29
|
+
* is duplicated.
|
|
30
|
+
*/
|
|
31
|
+
export declare const advanceDuplicatedListMarkers: (duplicatedElements: readonly ExcalidrawElement[], scene: Scene,
|
|
32
|
+
/** measures the re-numbered texts */
|
|
33
|
+
renderEnvironment?: RenderEnvironment) => ListMarkerAdvance[];
|
|
34
|
+
/**
|
|
35
|
+
* Sets the advanced list markers back (`"prev"`), or forth again (`"next"`).
|
|
36
|
+
*/
|
|
37
|
+
export declare const applyListMarkerAdvances: (advances: readonly ListMarkerAdvance[], direction: "prev" | "next", scene: Scene,
|
|
38
|
+
/** measures the re-numbered texts */
|
|
39
|
+
renderEnvironment?: RenderEnvironment) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Mutable } from "@excalidraw/common/utility-types";
|
|
2
2
|
import type { ElementsMap, ExcalidrawElement } from "./types";
|
|
3
|
-
export type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "updated">;
|
|
3
|
+
export type ElementUpdate<TElement extends ExcalidrawElement> = Omit<Partial<TElement>, "id" | "updated" | "created">;
|
|
4
4
|
/**
|
|
5
5
|
* This function tracks updates of text elements for the purposes for collaboration.
|
|
6
6
|
* The version is used to compare updates when more than one user is working in
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import type { MarkOptional } from "@excalidraw/common/utility-types";
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
3
|
+
import type { ExcalidrawImageElement, ExcalidrawTextElement, ExcalidrawLinearElement, ExcalidrawGenericElement, NonDeleted, TextAlign, VerticalAlign, Arrowhead, ExcalidrawFreeDrawElement, FontFamilyValues, ExcalidrawTextContainer, ExcalidrawFrameElement, ExcalidrawEmbeddableElement, ExcalidrawMagicFrameElement, ExcalidrawIframeElement, ElementsMap, ExcalidrawArrowElement, ExcalidrawElbowArrowElement, ExcalidrawLineElement, ExcalidrawStickyNoteElement } from "./types";
|
|
4
|
+
export type ElementConstructorOpts = MarkOptional<Omit<ExcalidrawGenericElement, "id" | "type" | "isDeleted" | "updated">, "width" | "height" | "angle" | "groupIds" | "frameId" | "index" | "boundElements" | "seed" | "version" | "versionNonce" | "link" | "strokeStyle" | "fillStyle" | "strokeColor" | "backgroundColor" | "roughness" | "strokeWidth" | "roundness" | "locked" | "opacity" | "customData" | "created">;
|
|
4
5
|
export declare const newElement: (opts: {
|
|
5
6
|
type: ExcalidrawGenericElement["type"];
|
|
6
7
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawGenericElement>;
|
|
8
|
+
/**
|
|
9
|
+
* Style invariants of a sticky note: never-transparent colors, solid fill.
|
|
10
|
+
* Applied by the constructor and by every normalization pass. Returns the
|
|
11
|
+
* same object when nothing needs fixing.
|
|
12
|
+
*/
|
|
13
|
+
export declare const normalizeStickyNoteStyle: <T extends ExcalidrawStickyNoteElement>(element: T) => T;
|
|
14
|
+
/**
|
|
15
|
+
* Geometry invariants of a *finalized* sticky note: minimum size and
|
|
16
|
+
* `baseHeight ≤ height`. Deliberately not part of the constructor — a
|
|
17
|
+
* pointer-down draft starts at 0×0 like every other tool and is previewed at
|
|
18
|
+
* its true dragged size; pointer-up, restore, the skeleton path and the
|
|
19
|
+
* action post-passes enforce this.
|
|
20
|
+
*/
|
|
21
|
+
export declare const normalizeStickyNoteGeometry: <T extends ExcalidrawStickyNoteElement>(element: T) => T;
|
|
22
|
+
/** all sticky note invariants (style + finalized geometry) */
|
|
23
|
+
export declare const normalizeStickyNote: <T extends ExcalidrawStickyNoteElement>(element: T) => T;
|
|
24
|
+
export declare const newStickyNoteElement: (opts: {
|
|
25
|
+
type: "stickynote";
|
|
26
|
+
baseHeight?: number;
|
|
27
|
+
} & ElementConstructorOpts) => NonDeleted<ExcalidrawStickyNoteElement>;
|
|
7
28
|
export declare const newEmbeddableElement: (opts: {
|
|
8
29
|
type: "embeddable";
|
|
9
30
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawEmbeddableElement>;
|
|
@@ -16,6 +37,19 @@ export declare const newFrameElement: (opts: {
|
|
|
16
37
|
export declare const newMagicFrameElement: (opts: {
|
|
17
38
|
name?: string;
|
|
18
39
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawMagicFrameElement>;
|
|
40
|
+
/**
|
|
41
|
+
* The point of the text box its alignment pins, as ratios of width/height.
|
|
42
|
+
*
|
|
43
|
+
* This is the point that stays put as the text grows — see the sides passed to
|
|
44
|
+
* `adjustXYWithRotation` in `getAdjustedDimensions`.
|
|
45
|
+
*/
|
|
46
|
+
export declare const getTextAnchorRatios: (opts: {
|
|
47
|
+
textAlign: ExcalidrawTextElement["textAlign"];
|
|
48
|
+
verticalAlign: ExcalidrawTextElement["verticalAlign"];
|
|
49
|
+
}) => {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
};
|
|
19
53
|
export declare const newTextElement: (opts: {
|
|
20
54
|
text: string;
|
|
21
55
|
originalText?: string;
|
|
@@ -26,8 +60,25 @@ export declare const newTextElement: (opts: {
|
|
|
26
60
|
containerId?: ExcalidrawTextContainer["id"] | null;
|
|
27
61
|
lineHeight?: ExcalidrawTextElement["lineHeight"];
|
|
28
62
|
autoResize?: ExcalidrawTextElement["autoResize"];
|
|
63
|
+
labelPosition?: ExcalidrawTextElement["labelPosition"];
|
|
64
|
+
baseFontSize?: ExcalidrawTextElement["baseFontSize"];
|
|
65
|
+
renderEnvironment?: RenderEnvironment;
|
|
29
66
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawTextElement>;
|
|
30
|
-
export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, text?: string
|
|
67
|
+
export declare const refreshTextDimensions: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null, elementsMap: ElementsMap, text?: string,
|
|
68
|
+
/**
|
|
69
|
+
* For a free text that grows with its content (`autoResize`): the widest
|
|
70
|
+
* it may grow to. Crossing it, the text stops growing and wraps at this
|
|
71
|
+
* width from then on (`autoResize: false`), anchored as its growth was. A
|
|
72
|
+
* text that is already wider keeps growing.
|
|
73
|
+
*/
|
|
74
|
+
maxWidth?: number, renderEnvironment?: RenderEnvironment) => {
|
|
75
|
+
x: number;
|
|
76
|
+
y: number;
|
|
77
|
+
width: number;
|
|
78
|
+
height: number;
|
|
79
|
+
text: string;
|
|
80
|
+
autoResize: boolean;
|
|
81
|
+
} | {
|
|
31
82
|
x: number;
|
|
32
83
|
y: number;
|
|
33
84
|
width: number;
|
|
@@ -38,6 +89,7 @@ export declare const newFreeDrawElement: (opts: {
|
|
|
38
89
|
type: "freedraw";
|
|
39
90
|
points?: ExcalidrawFreeDrawElement["points"];
|
|
40
91
|
simulatePressure: boolean;
|
|
92
|
+
strokeOptions?: ExcalidrawFreeDrawElement["strokeOptions"];
|
|
41
93
|
pressures?: ExcalidrawFreeDrawElement["pressures"];
|
|
42
94
|
} & ElementConstructorOpts) => NonDeleted<ExcalidrawFreeDrawElement>;
|
|
43
95
|
export declare const newLinearElement: (opts: {
|
|
@@ -1,25 +1,49 @@
|
|
|
1
1
|
import { type GlobalPoint } from "@excalidraw/math";
|
|
2
|
-
import type { AppState, StaticCanvasAppState, InteractiveCanvasAppState,
|
|
2
|
+
import type { AppState, StaticCanvasAppState, InteractiveCanvasAppState, ElementRenderOverrides } from "@excalidraw/excalidraw/types";
|
|
3
3
|
import type { StaticCanvasRenderConfig, RenderableElementsMap, InteractiveCanvasRenderConfig } from "@excalidraw/excalidraw/scene/types";
|
|
4
|
-
import type {
|
|
4
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
5
|
+
import type { ExcalidrawElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, ExcalidrawFreeDrawElement, ExcalidrawImageElement, NonDeletedSceneElementsMap, ElementsMap } from "./types";
|
|
5
6
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
|
6
|
-
export
|
|
7
|
+
export type RenderPositionOffset = Readonly<{
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
}>;
|
|
11
|
+
/** Bound labels follow their container; a label's own offset is ignored. */
|
|
12
|
+
export declare const getElementRenderOffset: (element: ExcalidrawElement, elementsMap: ElementsMap, overrides: ElementRenderOverrides | undefined) => RenderPositionOffset | undefined;
|
|
13
|
+
export declare const getRenderElementWithPositionOverride: <TElement extends ExcalidrawElement>(element: TElement, positionOffset: RenderPositionOffset) => TElement;
|
|
14
|
+
export type ElementRenderState = Readonly<{
|
|
15
|
+
/** Alpha including frame opacity and pending erasure; selection dimming is separate. */
|
|
16
|
+
opacity: number;
|
|
17
|
+
offset: RenderPositionOffset;
|
|
18
|
+
}>;
|
|
19
|
+
/** Resolve visual state at the drawing boundary, preserving document cache keys. */
|
|
20
|
+
export declare const resolveElementRenderState: (element: ExcalidrawElement, elementsMap: ElementsMap, renderConfig: Pick<StaticCanvasRenderConfig, "elementRenderOverrides" | "elementsPendingErasure" | "pendingFlowchartNodes">, allElementsMap?: ElementsMap) => ElementRenderState;
|
|
7
21
|
export interface ExcalidrawElementWithCanvas {
|
|
8
22
|
element: ExcalidrawElement | ExcalidrawTextElement;
|
|
9
23
|
canvas: HTMLCanvasElement;
|
|
10
24
|
theme: AppState["theme"];
|
|
11
25
|
scale: number;
|
|
12
|
-
|
|
26
|
+
/** backing-store scale the bitmap was rasterized at, see StaticCanvasRenderConfig["scale"] */
|
|
27
|
+
deviceScale: number;
|
|
28
|
+
environment: RenderEnvironment;
|
|
13
29
|
zoomValue: AppState["zoom"]["value"];
|
|
14
30
|
canvasOffsetX: number;
|
|
15
31
|
canvasOffsetY: number;
|
|
16
|
-
boundTextElementVersion: number | null;
|
|
17
32
|
imageCrop: ExcalidrawImageElement["crop"] | null;
|
|
18
33
|
containingFrameOpacity: number;
|
|
19
|
-
boundTextCanvas: HTMLCanvasElement;
|
|
20
34
|
}
|
|
21
35
|
export declare const DEFAULT_LINK_SIZE = 14;
|
|
36
|
+
/**
|
|
37
|
+
* `save()`s the context around `draw`, restoring it even when `draw` throws:
|
|
38
|
+
* the scene renderer logs a failing element and carries on, and the element
|
|
39
|
+
* mustn't leave its transforms and clips behind for the next one.
|
|
40
|
+
*/
|
|
41
|
+
export declare const withSavedContext: (context: CanvasRenderingContext2D, draw: () => void) => void;
|
|
22
42
|
export declare const elementWithCanvasCache: WeakMap<ExcalidrawElement, ExcalidrawElementWithCanvas>;
|
|
23
43
|
export declare const renderSelectionElement: (element: NonDeletedExcalidrawElement, context: CanvasRenderingContext2D, appState: InteractiveCanvasAppState, selectionColor: InteractiveCanvasRenderConfig["selectionColor"]) => void;
|
|
24
|
-
export declare const renderElement: (element: NonDeletedExcalidrawElement, elementsMap: RenderableElementsMap, allElementsMap: NonDeletedSceneElementsMap, rc: RoughCanvas, context: CanvasRenderingContext2D, renderConfig: StaticCanvasRenderConfig, appState: StaticCanvasAppState | InteractiveCanvasAppState
|
|
44
|
+
export declare const renderElement: (element: NonDeletedExcalidrawElement, elementsMap: RenderableElementsMap, allElementsMap: NonDeletedSceneElementsMap, rc: RoughCanvas, context: CanvasRenderingContext2D, renderConfig: StaticCanvasRenderConfig, appState: StaticCanvasAppState | InteractiveCanvasAppState, renderState?: Readonly<{
|
|
45
|
+
/** Alpha including frame opacity and pending erasure; selection dimming is separate. */
|
|
46
|
+
opacity: number;
|
|
47
|
+
offset: RenderPositionOffset;
|
|
48
|
+
}>) => void;
|
|
25
49
|
export declare function getFreedrawOutlineAsSegments(element: ExcalidrawFreeDrawElement, points: [number, number][], elementsMap: ElementsMap): import("@excalidraw/math").LineSegment<GlobalPoint>[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host environment used by the renderer and export pipeline.
|
|
3
|
+
*
|
|
4
|
+
* The default is the browser's. An explicit environment (see
|
|
5
|
+
* `StaticCanvasRenderConfig["renderEnvironment"]`) scopes canvas and image
|
|
6
|
+
* creation to one render target -- e.g. the editor's owner window, so that
|
|
7
|
+
* one process can host editors in multiple realms (popouts, multi-tenant
|
|
8
|
+
* embeds), or an export running where `document`/`window` don't exist (Node
|
|
9
|
+
* with `node-canvas` / `@napi-rs/canvas`, passed in `config.environment`).
|
|
10
|
+
* There is deliberately no process-wide override: every render and export
|
|
11
|
+
* takes its environment explicitly.
|
|
12
|
+
*
|
|
13
|
+
* `document` is the DOM side of the same host: what SVG exports are built in
|
|
14
|
+
* (a DOM implementation such as `linkedom` under Node).
|
|
15
|
+
*/
|
|
16
|
+
import type { TextMetricsProvider } from "./textMeasurements";
|
|
17
|
+
export type RenderEnvironment = {
|
|
18
|
+
/** Creates a blank canvas. Callers set `width`/`height` themselves. */
|
|
19
|
+
createCanvas: () => HTMLCanvasElement;
|
|
20
|
+
/**
|
|
21
|
+
* Creates an image to be decoded from a data URL and later used as a
|
|
22
|
+
* `drawImage` source.
|
|
23
|
+
*
|
|
24
|
+
* NOTE: typed as `HTMLImageElement` because the renderer is typed against
|
|
25
|
+
* the DOM lib throughout. Non-DOM implementations (node-canvas et al) need
|
|
26
|
+
* to cast; they must support `src`, `onload`, `onerror`, `naturalWidth`,
|
|
27
|
+
* `naturalHeight` and be accepted by their canvas' `drawImage`.
|
|
28
|
+
*/
|
|
29
|
+
createImage: () => HTMLImageElement;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a fillable path from an SVG path string -- freedraw elements are
|
|
32
|
+
* filled through one.
|
|
33
|
+
*
|
|
34
|
+
* Optional, because browsers always have the global `Path2D` this falls back
|
|
35
|
+
* to. A Node host MUST supply it (e.g. `@napi-rs/canvas`'s `Path2D`) or
|
|
36
|
+
* install `globalThis.Path2D` itself: Node has no such global, and without
|
|
37
|
+
* one every freedraw element fails to render.
|
|
38
|
+
*/
|
|
39
|
+
createPath?: (svgPath: string) => Path2D;
|
|
40
|
+
/**
|
|
41
|
+
* The document SVG exports are built in: the editor's owner document, or
|
|
42
|
+
* outside the browser a DOM implementation's (e.g. `linkedom`).
|
|
43
|
+
*
|
|
44
|
+
* Optional; falls back to the global `document`.
|
|
45
|
+
*/
|
|
46
|
+
document?: Document;
|
|
47
|
+
/**
|
|
48
|
+
* Measures text (line widths, for wrapping and layout).
|
|
49
|
+
*
|
|
50
|
+
* Optional; falls back to the global provider set with
|
|
51
|
+
* `setCustomTextMetricsProvider`, else to measuring on a canvas from
|
|
52
|
+
* `createCanvas`.
|
|
53
|
+
*/
|
|
54
|
+
textMetrics?: TextMetricsProvider;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Resolves the host environment for a render: the explicitly scoped one (e.g.
|
|
58
|
+
* the editor's owner window, or an export's), else the browser default.
|
|
59
|
+
*/
|
|
60
|
+
export declare const getRenderEnvironment: (env?: RenderEnvironment) => RenderEnvironment;
|
|
61
|
+
/**
|
|
62
|
+
* Resolves the path factory for a render. `createPath` is the one optional
|
|
63
|
+
* member of the contract, so this fills in the global-`Path2D` default for
|
|
64
|
+
* environments that omit it.
|
|
65
|
+
*/
|
|
66
|
+
export declare const getCreatePath: (env?: RenderEnvironment) => ((svgPath: string) => Path2D);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type LocalPoint } from "@excalidraw/math";
|
|
2
2
|
import type { PointerDownState } from "@excalidraw/excalidraw/types";
|
|
3
|
+
import type { RenderEnvironment } from "./renderEnvironment";
|
|
3
4
|
import type { Scene } from "./Scene";
|
|
4
5
|
import type { BoundingBox } from "./bounds";
|
|
5
6
|
import type { MaybeTransformHandleType, TransformHandleDirection } from "./transformHandles";
|
|
6
7
|
import type { ExcalidrawLinearElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawElement, ElementsMap } from "./types";
|
|
7
|
-
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], scene: Scene, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number) => boolean;
|
|
8
|
+
export declare const transformElements: (originalElements: PointerDownState["originalElements"], transformHandleType: MaybeTransformHandleType, selectedElements: readonly NonDeletedExcalidrawElement[], scene: Scene, shouldRotateWithDiscreteAngle: boolean, shouldResizeFromCenter: boolean, shouldMaintainAspectRatio: boolean, pointerX: number, pointerY: number, centerX: number, centerY: number, renderEnvironment?: RenderEnvironment) => boolean;
|
|
8
9
|
export declare const rescalePointsInElement: (element: NonDeletedExcalidrawElement, width: number, height: number, normalizePoints: boolean) => {
|
|
9
10
|
points: LocalPoint[];
|
|
10
11
|
} | {
|
|
@@ -13,15 +14,23 @@ export declare const rescalePointsInElement: (element: NonDeletedExcalidrawEleme
|
|
|
13
14
|
export declare const measureFontSizeFromWidth: (element: NonDeleted<ExcalidrawTextElement>, elementsMap: ElementsMap, nextWidth: number) => {
|
|
14
15
|
size: number;
|
|
15
16
|
} | null;
|
|
16
|
-
export declare const resizeSingleTextElement: (origElement: NonDeleted<ExcalidrawTextElement>, element: NonDeleted<ExcalidrawTextElement>, scene: Scene, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, nextWidth: number, nextHeight: number) => void;
|
|
17
|
+
export declare const resizeSingleTextElement: (origElement: NonDeleted<ExcalidrawTextElement>, element: NonDeleted<ExcalidrawTextElement>, scene: Scene, transformHandleType: TransformHandleDirection, shouldResizeFromCenter: boolean, nextWidth: number, nextHeight: number, renderEnvironment?: RenderEnvironment) => void;
|
|
17
18
|
export declare const getResizeOffsetXY: (transformHandleType: MaybeTransformHandleType, selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap, x: number, y: number) => [number, number];
|
|
18
19
|
export declare const getResizeArrowDirection: (transformHandleType: MaybeTransformHandleType, element: NonDeleted<ExcalidrawLinearElement>) => "origin" | "end";
|
|
19
|
-
export declare const resizeSingleElement: (nextWidth: number, nextHeight: number, latestElement:
|
|
20
|
+
export declare const resizeSingleElement: (nextWidth: number, nextHeight: number, latestElement: NonDeletedExcalidrawElement, origElement: NonDeletedExcalidrawElement, originalElementsMap: ElementsMap, scene: Scene, handleDirection: TransformHandleDirection, { shouldInformMutation, shouldMaintainAspectRatio, shouldResizeFromCenter, renderEnvironment, }?: {
|
|
20
21
|
shouldMaintainAspectRatio?: boolean;
|
|
21
22
|
shouldResizeFromCenter?: boolean;
|
|
22
23
|
shouldInformMutation?: boolean;
|
|
24
|
+
renderEnvironment?: RenderEnvironment;
|
|
23
25
|
}) => void;
|
|
24
|
-
export declare const
|
|
26
|
+
export declare const getNextSingleWidthAndHeightFromPointer: (latestElement: ExcalidrawElement, origElement: ExcalidrawElement, handleDirection: TransformHandleDirection, pointerX: number, pointerY: number, { shouldMaintainAspectRatio, shouldResizeFromCenter, }?: {
|
|
27
|
+
shouldMaintainAspectRatio?: boolean;
|
|
28
|
+
shouldResizeFromCenter?: boolean;
|
|
29
|
+
}) => {
|
|
30
|
+
nextWidth: number;
|
|
31
|
+
nextHeight: number;
|
|
32
|
+
};
|
|
33
|
+
export declare const resizeMultipleElements: (selectedElements: readonly NonDeletedExcalidrawElement[], elementsMap: ElementsMap, handleDirection: TransformHandleDirection, scene: Scene, originalElementsMap: ElementsMap, { shouldMaintainAspectRatio, shouldResizeFromCenter, flipByX, flipByY, nextHeight, nextWidth, originalBoundingBox, renderEnvironment, }?: {
|
|
25
34
|
nextWidth?: number;
|
|
26
35
|
nextHeight?: number;
|
|
27
36
|
shouldMaintainAspectRatio?: boolean;
|
|
@@ -29,4 +38,5 @@ export declare const resizeMultipleElements: (selectedElements: readonly NonDele
|
|
|
29
38
|
flipByX?: boolean;
|
|
30
39
|
flipByY?: boolean;
|
|
31
40
|
originalBoundingBox?: BoundingBox;
|
|
41
|
+
renderEnvironment?: RenderEnvironment;
|
|
32
42
|
}) => void;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { AppState, InteractiveCanvasAppState } from "@excalidraw/excalidraw/types";
|
|
2
|
-
import { LinearElementEditor } from "./linearElementEditor";
|
|
1
|
+
import type { AppState, BoxSelectionMode, InteractiveCanvasAppState } from "@excalidraw/excalidraw/types";
|
|
3
2
|
import type { ElementsMap, ElementsMapOrArray, ExcalidrawElement, NonDeleted, NonDeletedExcalidrawElement } from "./types";
|
|
3
|
+
export declare const shouldIgnoreElementFromSelection: (element: ExcalidrawElement) => boolean;
|
|
4
4
|
/**
|
|
5
5
|
* Frames and their containing elements are not to be selected at the same time.
|
|
6
6
|
* Given an array of selected elements, if there are frames and their containing elements
|
|
@@ -8,8 +8,8 @@ import type { ElementsMap, ElementsMapOrArray, ExcalidrawElement, NonDeleted, No
|
|
|
8
8
|
* @param selectedElements
|
|
9
9
|
*/
|
|
10
10
|
export declare const excludeElementsInFramesFromSelection: <T extends ExcalidrawElement>(selectedElements: readonly T[]) => T[];
|
|
11
|
-
export declare const getElementsWithinSelection: (elements: readonly
|
|
12
|
-
export declare const getVisibleAndNonSelectedElements: (elements: readonly
|
|
11
|
+
export declare const getElementsWithinSelection: <T extends ExcalidrawElement>(elements: readonly T[], selection: ExcalidrawElement, elementsMap: ElementsMap, excludeElementsInFrames?: boolean, boxSelectionMode?: BoxSelectionMode) => T[];
|
|
12
|
+
export declare const getVisibleAndNonSelectedElements: <T extends NonDeletedExcalidrawElement>(elements: readonly T[], selectedElements: readonly ExcalidrawElement[], appState: AppState, elementsMap: ElementsMap) => T[];
|
|
13
13
|
export declare const isSomeElementSelected: {
|
|
14
14
|
(elements: readonly NonDeletedExcalidrawElement[], appState: Pick<AppState, "selectedElementIds">): boolean;
|
|
15
15
|
clearCache(): void;
|
|
@@ -17,8 +17,8 @@ export declare const isSomeElementSelected: {
|
|
|
17
17
|
export declare const getSelectedElements: (elements: ElementsMapOrArray, appState: Pick<InteractiveCanvasAppState, "selectedElementIds">, opts?: {
|
|
18
18
|
includeBoundTextElement?: boolean;
|
|
19
19
|
includeElementsInFrames?: boolean;
|
|
20
|
-
}) =>
|
|
21
|
-
export declare const getTargetElements: (elements: ElementsMapOrArray, appState: Pick<AppState, "selectedElementIds" | "editingTextElement" | "newElement">) =>
|
|
20
|
+
}) => NonDeletedExcalidrawElement[];
|
|
21
|
+
export declare const getTargetElements: (elements: ElementsMapOrArray, appState: Pick<AppState, "selectedElementIds" | "editingTextElement" | "newElement" | "activeTool">) => NonDeletedExcalidrawElement[] | import("./types").ExcalidrawTextElement[];
|
|
22
22
|
/**
|
|
23
23
|
* returns prevState's selectedElementids if no change from previous, so as to
|
|
24
24
|
* retain reference identity for memoization
|
|
@@ -26,12 +26,6 @@ export declare const getTargetElements: (elements: ElementsMapOrArray, appState:
|
|
|
26
26
|
export declare const makeNextSelectedElementIds: (nextSelectedElementIds: AppState["selectedElementIds"], prevState: Pick<AppState, "selectedElementIds">) => Readonly<{
|
|
27
27
|
[id: string]: true;
|
|
28
28
|
}>;
|
|
29
|
-
export declare const getSelectionStateForElements: (targetElements: readonly ExcalidrawElement[], allElements: readonly NonDeletedExcalidrawElement[], appState: AppState) => {
|
|
30
|
-
editingGroupId: AppState["editingGroupId"];
|
|
31
|
-
selectedElementIds: AppState["selectedElementIds"];
|
|
32
|
-
selectedGroupIds: AppState["selectedGroupIds"];
|
|
33
|
-
selectedLinearElement: LinearElementEditor | null;
|
|
34
|
-
};
|
|
35
29
|
/**
|
|
36
30
|
* Returns editing or single-selected text element, if any.
|
|
37
31
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type GeometricShape } from "@excalidraw/utils/shape";
|
|
2
2
|
import { type LocalPoint } from "@excalidraw/math";
|
|
3
|
-
import type { GlobalPoint } from "@excalidraw/math";
|
|
3
|
+
import type { GlobalPoint, Polygon } from "@excalidraw/math";
|
|
4
4
|
import type { AppState, EmbedsValidationStatus } from "@excalidraw/excalidraw/types";
|
|
5
5
|
import type { ElementShape, ElementShapes } from "@excalidraw/excalidraw/scene/types";
|
|
6
6
|
import type { ExcalidrawElement, ExcalidrawSelectionElement, ExcalidrawLinearElement, ExcalidrawFreeDrawElement, ElementsMap, ExcalidrawLineElement } from "./types";
|
|
@@ -27,10 +27,17 @@ export declare class ShapeCache {
|
|
|
27
27
|
} | null) => ((T["type"] extends keyof ElementShapes ? ElementShapes[T["type"]] | undefined : ElementShape | undefined) & {}) | (T["type"] extends keyof ElementShapes ? ElementShapes[T["type"]] : Drawable | null);
|
|
28
28
|
}
|
|
29
29
|
export declare const generateRoughOptions: (element: ExcalidrawElement, continuousPath?: boolean, isDarkMode?: boolean) => Options;
|
|
30
|
+
/**
|
|
31
|
+
* Returns the flattened fill contour of a freedraw loop in local, unrotated
|
|
32
|
+
* coordinates, following the rendered fill rather than the stroke outline.
|
|
33
|
+
*/
|
|
34
|
+
export declare const getFreedrawFillPolygon: (element: ExcalidrawFreeDrawElement) => Polygon<LocalPoint>;
|
|
30
35
|
export declare const generateLinearCollisionShape: (element: ExcalidrawLinearElement | ExcalidrawFreeDrawElement, elementsMap: ElementsMap) => {
|
|
31
36
|
op: string;
|
|
32
37
|
data: number[];
|
|
33
38
|
}[];
|
|
39
|
+
export declare const ELBOW_ARROW_CORNER_RADIUS = 16;
|
|
40
|
+
export declare const generateElbowArrowShape: (routePoints: readonly LocalPoint[], radius: number) => string;
|
|
34
41
|
/**
|
|
35
42
|
* get the pure geometric shape of an excalidraw elementw
|
|
36
43
|
* which is then used for hit detection
|
|
@@ -41,3 +48,24 @@ export declare const toggleLinePolygonState: (element: ExcalidrawLineElement, ne
|
|
|
41
48
|
points: ExcalidrawLineElement["points"];
|
|
42
49
|
} | null;
|
|
43
50
|
export declare const getFreedrawOutlinePoints: (element: ExcalidrawFreeDrawElement) => [number, number][];
|
|
51
|
+
/**
|
|
52
|
+
* Upper bound on how far a freedraw stroke's ink reaches past its centerline
|
|
53
|
+
* points. Both stroke generators scale the stroke size by at most 1 (easing
|
|
54
|
+
* or pressure), so the size itself bounds the radius, except for
|
|
55
|
+
* perfect-freehand's short strokes: under 3px long, the start cap is drawn
|
|
56
|
+
* around the first point from an outline point of the last one (reaching
|
|
57
|
+
* sqrt(size² + 3²)), and a single point gets a synthetic neighbor 1px away.
|
|
58
|
+
*/
|
|
59
|
+
export declare const getFreedrawMaxStrokeRadius: (element: ExcalidrawFreeDrawElement) => number;
|
|
60
|
+
/**
|
|
61
|
+
* The streamline-smoothed centerline the freedraw stroke is rendered
|
|
62
|
+
* around, in element-local coordinates. Boundary-sensitive consumers (e.g.
|
|
63
|
+
* bucket fill) should use this instead of `element.points`: raw input
|
|
64
|
+
* points can sit 20px+ apart and the rendered stroke is smoothed between
|
|
65
|
+
* them, so raw chords visibly deviate from what's on screen.
|
|
66
|
+
*
|
|
67
|
+
* Constant-width ("laser geometry") strokes technically smooth via
|
|
68
|
+
* `LaserPointer` instead; the perfect-freehand centerline with the same
|
|
69
|
+
* `streamline` is a close approximation the stroke width hides.
|
|
70
|
+
*/
|
|
71
|
+
export declare const getFreedrawStrokeCenterPoints: (element: ExcalidrawFreeDrawElement) => [number, number][];
|