@excalidraw/excalidraw 0.17.1-7441-4e2c539 → 0.17.1-a38e82f
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/CHANGELOG.md +52 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-5VWQDKDR.js +20279 -0
- package/dist/browser/dev/excalidraw-assets-dev/chunk-5VWQDKDR.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-2W5GQUR4.js → chunk-IM4WTX2M.js} +12 -6
- package/dist/browser/dev/excalidraw-assets-dev/chunk-IM4WTX2M.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-OC6JWP3X.js → en-IOBA4CS2.js} +4 -2
- package/dist/browser/dev/excalidraw-assets-dev/image-LK4UNFRZ.css +6 -0
- package/dist/browser/dev/excalidraw-assets-dev/image-LK4UNFRZ.css.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{image-HYNUJ3XL.js → image-VKDAL6BQ.js} +2 -4
- package/dist/browser/dev/excalidraw-assets-dev/roundRect-T5BX56ZF.js +161 -0
- package/dist/browser/dev/excalidraw-assets-dev/roundRect-T5BX56ZF.js.map +7 -0
- package/dist/browser/dev/index.css +189 -129
- package/dist/browser/dev/index.css.map +3 -3
- package/dist/browser/dev/index.js +34707 -26
- package/dist/browser/dev/index.js.map +4 -4
- package/dist/browser/prod/excalidraw-assets/chunk-LIG3S5TN.js +11 -0
- package/dist/browser/prod/excalidraw-assets/chunk-N2C5DK3B.js +55 -0
- package/dist/browser/prod/excalidraw-assets/en-WFZVQ7I6.js +1 -0
- package/dist/browser/prod/excalidraw-assets/image-4AT7LYMR.js +1 -0
- package/dist/browser/prod/excalidraw-assets/image-X66R2EM5.css +1 -0
- package/dist/browser/prod/excalidraw-assets/roundRect-2ACQK4DA.js +1 -0
- package/dist/browser/prod/index.css +1 -1
- package/dist/browser/prod/index.js +203 -1
- package/dist/{prod/en-RLIAOBCI.json → dev/en-TDNWCAOT.json} +9 -5
- package/dist/dev/index.css +189 -129
- package/dist/dev/index.css.map +3 -3
- package/dist/dev/index.js +38445 -39402
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +12 -12
- package/dist/excalidraw/actions/actionAlign.d.ts +6 -6
- package/dist/excalidraw/actions/actionAlign.js +2 -1
- package/dist/excalidraw/actions/actionBoundText.d.ts +8 -8
- package/dist/excalidraw/actions/actionBoundText.js +8 -8
- package/dist/excalidraw/actions/actionCanvas.d.ts +46 -46
- package/dist/excalidraw/actions/actionClipboard.d.ts +27 -27
- package/dist/excalidraw/actions/actionClipboard.js +9 -2
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +12 -12
- package/dist/excalidraw/actions/actionDeleteSelected.js +3 -2
- package/dist/excalidraw/actions/actionDistribute.d.ts +2 -2
- package/dist/excalidraw/actions/actionDistribute.js +1 -1
- package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +1 -1
- package/dist/excalidraw/actions/actionDuplicateSelection.js +4 -3
- package/dist/excalidraw/actions/actionElementLock.d.ts +8 -8
- package/dist/excalidraw/actions/actionExport.d.ts +35 -35
- package/dist/excalidraw/actions/actionExport.js +4 -4
- package/dist/excalidraw/actions/actionFinalize.d.ts +7 -7
- package/dist/excalidraw/actions/actionFinalize.js +7 -6
- package/dist/excalidraw/actions/actionFlip.d.ts +2 -2
- package/dist/excalidraw/actions/actionFlip.js +11 -11
- package/dist/excalidraw/actions/actionFrame.d.ts +13 -13
- package/dist/excalidraw/actions/actionFrame.js +1 -1
- package/dist/excalidraw/actions/actionGroup.d.ts +8 -8
- package/dist/excalidraw/actions/actionGroup.js +3 -2
- package/dist/excalidraw/actions/actionLinearEditor.d.ts +4 -4
- package/dist/excalidraw/actions/actionLinearEditor.js +1 -1
- package/dist/excalidraw/{element/Hyperlink.d.ts → actions/actionLink.d.ts} +28 -50
- package/dist/excalidraw/actions/actionLink.js +40 -0
- package/dist/excalidraw/actions/actionMenu.d.ts +11 -11
- package/dist/excalidraw/actions/actionNavigate.d.ts +8 -8
- package/dist/excalidraw/actions/actionNavigate.js +1 -1
- package/dist/excalidraw/actions/actionProperties.d.ts +64 -64
- package/dist/excalidraw/actions/actionProperties.js +32 -27
- package/dist/excalidraw/actions/actionSelectAll.d.ts +4 -4
- package/dist/excalidraw/actions/actionSelectAll.js +1 -1
- package/dist/excalidraw/actions/actionStyles.d.ts +6 -6
- package/dist/excalidraw/actions/actionStyles.js +4 -4
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleStats.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +4 -4
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +4 -4
- package/dist/excalidraw/actions/index.d.ts +1 -1
- package/dist/excalidraw/actions/index.js +1 -1
- package/dist/excalidraw/actions/manager.js +2 -1
- package/dist/excalidraw/align.d.ts +2 -2
- package/dist/excalidraw/align.js +2 -2
- package/dist/excalidraw/animated-trail.d.ts +33 -0
- package/dist/excalidraw/animated-trail.js +96 -0
- package/dist/excalidraw/animation-frame-handler.d.ts +16 -0
- package/dist/excalidraw/animation-frame-handler.js +55 -0
- package/dist/excalidraw/appState.d.ts +1 -1
- package/dist/excalidraw/appState.js +1 -3
- package/dist/excalidraw/clipboard.js +5 -5
- package/dist/excalidraw/components/Actions.d.ts +3 -3
- package/dist/excalidraw/components/Actions.js +18 -7
- package/dist/excalidraw/components/App.d.ts +32 -17
- package/dist/excalidraw/components/App.js +474 -339
- package/dist/excalidraw/components/Button.d.ts +1 -1
- package/dist/excalidraw/components/FilledButton.d.ts +2 -2
- package/dist/excalidraw/components/FilledButton.js +27 -3
- package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
- package/dist/excalidraw/components/ImageExportDialog.d.ts +2 -1
- package/dist/excalidraw/components/ImageExportDialog.js +16 -12
- package/dist/excalidraw/components/JSONExportDialog.js +1 -1
- package/dist/excalidraw/components/{LaserTool/LaserPointerButton.d.ts → LaserPointerButton.d.ts} +1 -1
- package/dist/excalidraw/components/{LaserTool/LaserPointerButton.js → LaserPointerButton.js} +2 -2
- package/dist/excalidraw/components/LayerUI.js +3 -3
- package/dist/excalidraw/components/MobileMenu.js +1 -1
- package/dist/excalidraw/components/ProjectName.d.ts +0 -1
- package/dist/excalidraw/components/ProjectName.js +1 -1
- package/dist/excalidraw/components/SVGLayer.d.ts +8 -0
- package/dist/excalidraw/components/SVGLayer.js +20 -0
- package/dist/excalidraw/components/ShareableLinkDialog.js +10 -10
- package/dist/excalidraw/components/Stack.d.ts +2 -2
- package/dist/excalidraw/components/TTDDialog/common.js +10 -1
- package/dist/excalidraw/components/TextField.d.ts +5 -2
- package/dist/excalidraw/components/TextField.js +6 -3
- package/dist/excalidraw/components/Toast.d.ts +3 -2
- package/dist/excalidraw/components/Toast.js +2 -2
- package/dist/excalidraw/components/ToolButton.js +2 -1
- package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -2
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +6 -5
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +4 -3
- package/dist/excalidraw/components/canvases/StaticCanvas.js +7 -5
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuContent.js +22 -2
- package/dist/excalidraw/components/dropdownMenu/common.d.ts +1 -1
- package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +19 -0
- package/dist/excalidraw/{element → components/hyperlink}/Hyperlink.js +40 -115
- package/dist/excalidraw/components/hyperlink/helpers.d.ts +7 -0
- package/dist/excalidraw/components/hyperlink/helpers.js +49 -0
- package/dist/excalidraw/components/icons.d.ts +2 -1
- package/dist/excalidraw/components/icons.js +2 -1
- package/dist/excalidraw/components/live-collaboration/LiveCollaborationTrigger.js +3 -2
- package/dist/excalidraw/components/main-menu/DefaultItems.js +5 -2
- package/dist/excalidraw/constants.d.ts +8 -0
- package/dist/excalidraw/constants.js +10 -0
- package/dist/excalidraw/data/blob.js +13 -14
- package/dist/excalidraw/data/filesystem.d.ts +1 -1
- package/dist/excalidraw/data/index.d.ts +2 -1
- package/dist/excalidraw/data/index.js +20 -16
- package/dist/excalidraw/data/json.d.ts +1 -1
- package/dist/excalidraw/data/json.js +5 -3
- package/dist/excalidraw/data/resave.d.ts +1 -1
- package/dist/excalidraw/data/resave.js +2 -2
- package/dist/excalidraw/data/restore.js +8 -13
- package/dist/excalidraw/data/transform.js +13 -9
- package/dist/excalidraw/distribute.d.ts +2 -2
- package/dist/excalidraw/distribute.js +2 -2
- package/dist/excalidraw/element/ElementCanvasButtons.d.ts +3 -2
- package/dist/excalidraw/element/ElementCanvasButtons.js +4 -4
- package/dist/excalidraw/element/binding.d.ts +9 -9
- package/dist/excalidraw/element/binding.js +61 -59
- package/dist/excalidraw/element/bounds.d.ts +5 -5
- package/dist/excalidraw/element/bounds.js +29 -32
- package/dist/excalidraw/element/collision.d.ts +11 -11
- package/dist/excalidraw/element/collision.js +49 -46
- package/dist/excalidraw/element/containerCache.d.ts +11 -0
- package/dist/excalidraw/element/containerCache.js +14 -0
- package/dist/excalidraw/element/dragElements.js +10 -19
- package/dist/excalidraw/element/embeddable.d.ts +11 -12
- package/dist/excalidraw/element/embeddable.js +17 -27
- package/dist/excalidraw/element/image.js +1 -2
- package/dist/excalidraw/element/index.d.ts +0 -1
- package/dist/excalidraw/element/index.js +0 -1
- package/dist/excalidraw/element/linearElementEditor.d.ts +35 -35
- package/dist/excalidraw/element/linearElementEditor.js +79 -80
- package/dist/excalidraw/element/newElement.d.ts +4 -6
- package/dist/excalidraw/element/newElement.js +11 -16
- package/dist/excalidraw/element/resizeElements.d.ts +6 -6
- package/dist/excalidraw/element/resizeElements.js +40 -46
- package/dist/excalidraw/element/resizeTest.d.ts +3 -3
- package/dist/excalidraw/element/resizeTest.js +4 -4
- package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
- package/dist/excalidraw/element/sizeHelpers.js +2 -2
- package/dist/excalidraw/element/textElement.d.ts +18 -20
- package/dist/excalidraw/element/textElement.js +80 -111
- package/dist/excalidraw/element/textWysiwyg.d.ts +1 -6
- package/dist/excalidraw/element/textWysiwyg.js +15 -37
- package/dist/excalidraw/element/transformHandles.d.ts +4 -4
- package/dist/excalidraw/element/transformHandles.js +6 -6
- package/dist/excalidraw/element/typeChecks.js +4 -1
- package/dist/excalidraw/element/types.d.ts +24 -11
- package/dist/excalidraw/emitter.d.ts +5 -9
- package/dist/excalidraw/emitter.js +12 -12
- package/dist/excalidraw/frame.d.ts +26 -20
- package/dist/excalidraw/frame.js +157 -84
- package/dist/excalidraw/groups.d.ts +3 -3
- package/dist/excalidraw/groups.js +11 -3
- package/dist/excalidraw/history.d.ts +1 -1
- package/dist/excalidraw/index.d.ts +7 -3
- package/dist/excalidraw/index.js +14 -5
- package/dist/excalidraw/laser-trails.d.ts +19 -0
- package/dist/excalidraw/laser-trails.js +95 -0
- package/dist/excalidraw/locales/en.json +9 -5
- package/dist/excalidraw/reactUtils.d.ts +14 -0
- package/dist/excalidraw/reactUtils.js +45 -0
- package/dist/excalidraw/renderer/helpers.d.ts +13 -0
- package/dist/excalidraw/renderer/helpers.js +39 -0
- package/dist/excalidraw/renderer/interactiveScene.d.ts +20 -0
- package/dist/excalidraw/renderer/{renderScene.js → interactiveScene.js} +199 -474
- package/dist/excalidraw/renderer/renderElement.d.ts +6 -6
- package/dist/excalidraw/renderer/renderElement.js +54 -366
- package/dist/excalidraw/renderer/staticScene.d.ts +11 -0
- package/dist/excalidraw/renderer/staticScene.js +205 -0
- package/dist/excalidraw/renderer/staticSvgScene.d.ts +5 -0
- package/dist/excalidraw/renderer/staticSvgScene.js +385 -0
- package/dist/excalidraw/scene/Fonts.js +2 -1
- package/dist/excalidraw/scene/Renderer.d.ts +1 -1
- package/dist/excalidraw/scene/Renderer.js +32 -20
- package/dist/excalidraw/scene/Scene.d.ts +10 -9
- package/dist/excalidraw/scene/Scene.js +45 -21
- package/dist/excalidraw/scene/Shape.d.ts +3 -1
- package/dist/excalidraw/scene/Shape.js +7 -5
- package/dist/excalidraw/scene/ShapeCache.d.ts +2 -1
- package/dist/excalidraw/scene/ShapeCache.js +1 -0
- package/dist/excalidraw/scene/comparisons.js +2 -1
- package/dist/excalidraw/scene/export.d.ts +3 -0
- package/dist/excalidraw/scene/export.js +20 -40
- package/dist/excalidraw/scene/index.d.ts +0 -1
- package/dist/excalidraw/scene/index.js +0 -1
- package/dist/excalidraw/scene/scrollbars.d.ts +1 -1
- package/dist/excalidraw/scene/scrollbars.js +1 -1
- package/dist/excalidraw/scene/selection.d.ts +5 -5
- package/dist/excalidraw/scene/selection.js +16 -14
- package/dist/excalidraw/scene/types.d.ts +11 -5
- package/dist/excalidraw/snapping.d.ts +7 -7
- package/dist/excalidraw/snapping.js +21 -20
- package/dist/excalidraw/types.d.ts +11 -12
- package/dist/excalidraw/utility-types.d.ts +5 -0
- package/dist/excalidraw/utils.d.ts +25 -16
- package/dist/excalidraw/utils.js +52 -45
- package/dist/{dev/en-RLIAOBCI.json → prod/en-TDNWCAOT.json} +9 -5
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +45 -45
- package/dist/utils/export.d.ts +0 -6
- package/dist/utils/export.js +0 -6
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/withinBounds.js +2 -1
- package/package.json +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/chunk-2W5GQUR4.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-SUHLFFEF.js +0 -53449
- package/dist/browser/dev/excalidraw-assets-dev/chunk-SUHLFFEF.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/image-NOPDRTTM.css +0 -5797
- package/dist/browser/dev/excalidraw-assets-dev/image-NOPDRTTM.css.map +0 -7
- package/dist/browser/prod/excalidraw-assets/chunk-HE2P7BQ6.js +0 -257
- package/dist/browser/prod/excalidraw-assets/chunk-OWLL6VOG.js +0 -11
- package/dist/browser/prod/excalidraw-assets/en-ERQOR3OC.js +0 -1
- package/dist/browser/prod/excalidraw-assets/image-DZ6B4AID.js +0 -1
- package/dist/browser/prod/excalidraw-assets/image-J2QCCYAR.css +0 -1
- package/dist/excalidraw/components/LaserTool/LaserPathManager.d.ts +0 -28
- package/dist/excalidraw/components/LaserTool/LaserPathManager.js +0 -225
- package/dist/excalidraw/components/LaserTool/LaserTool.d.ts +0 -8
- package/dist/excalidraw/components/LaserTool/LaserTool.js +0 -15
- package/dist/excalidraw/renderer/renderScene.d.ts +0 -25
- package/dist/excalidraw/vite.config.d.mts +0 -2
- package/dist/excalidraw/vite.config.mjs +0 -13
- /package/dist/browser/dev/excalidraw-assets-dev/{en-OC6JWP3X.js.map → en-IOBA4CS2.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-HYNUJ3XL.js.map → image-VKDAL6BQ.js.map} +0 -0
|
@@ -7,7 +7,7 @@ import { mutateElement } from "./mutateElement";
|
|
|
7
7
|
import { getFontString } from "../utils";
|
|
8
8
|
import { updateBoundElements } from "./binding";
|
|
9
9
|
import Scene from "../scene/Scene";
|
|
10
|
-
import { getApproxMinLineWidth, getBoundTextElement, getBoundTextElementId, getContainerElement, handleBindTextResize, getBoundTextMaxWidth, getApproxMinLineHeight,
|
|
10
|
+
import { getApproxMinLineWidth, getBoundTextElement, getBoundTextElementId, getContainerElement, handleBindTextResize, getBoundTextMaxWidth, getApproxMinLineHeight, } from "./textElement";
|
|
11
11
|
import { LinearElementEditor } from "./linearElementEditor";
|
|
12
12
|
export const normalizeAngle = (angle) => {
|
|
13
13
|
if (angle < 0) {
|
|
@@ -19,43 +19,43 @@ export const normalizeAngle = (angle) => {
|
|
|
19
19
|
return angle;
|
|
20
20
|
};
|
|
21
21
|
// Returns true when transform (resizing/rotation) happened
|
|
22
|
-
export const transformElements = (
|
|
22
|
+
export const transformElements = (originalElements, transformHandleType, selectedElements, elementsMap, shouldRotateWithDiscreteAngle, shouldResizeFromCenter, shouldMaintainAspectRatio, pointerX, pointerY, centerX, centerY) => {
|
|
23
23
|
if (selectedElements.length === 1) {
|
|
24
24
|
const [element] = selectedElements;
|
|
25
25
|
if (transformHandleType === "rotation") {
|
|
26
|
-
rotateSingleElement(element, pointerX, pointerY, shouldRotateWithDiscreteAngle
|
|
27
|
-
updateBoundElements(element);
|
|
26
|
+
rotateSingleElement(element, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle);
|
|
27
|
+
updateBoundElements(element, elementsMap);
|
|
28
28
|
}
|
|
29
29
|
else if (isTextElement(element) &&
|
|
30
30
|
(transformHandleType === "nw" ||
|
|
31
31
|
transformHandleType === "ne" ||
|
|
32
32
|
transformHandleType === "sw" ||
|
|
33
33
|
transformHandleType === "se")) {
|
|
34
|
-
resizeSingleTextElement(element, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
|
|
35
|
-
updateBoundElements(element);
|
|
34
|
+
resizeSingleTextElement(element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
|
|
35
|
+
updateBoundElements(element, elementsMap);
|
|
36
36
|
}
|
|
37
37
|
else if (transformHandleType) {
|
|
38
|
-
resizeSingleElement(
|
|
38
|
+
resizeSingleElement(originalElements, shouldMaintainAspectRatio, element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
|
|
39
39
|
}
|
|
40
40
|
return true;
|
|
41
41
|
}
|
|
42
42
|
else if (selectedElements.length > 1) {
|
|
43
43
|
if (transformHandleType === "rotation") {
|
|
44
|
-
rotateMultipleElements(
|
|
44
|
+
rotateMultipleElements(originalElements, selectedElements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY);
|
|
45
45
|
return true;
|
|
46
46
|
}
|
|
47
47
|
else if (transformHandleType === "nw" ||
|
|
48
48
|
transformHandleType === "ne" ||
|
|
49
49
|
transformHandleType === "sw" ||
|
|
50
50
|
transformHandleType === "se") {
|
|
51
|
-
resizeMultipleElements(
|
|
51
|
+
resizeMultipleElements(originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY);
|
|
52
52
|
return true;
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
return false;
|
|
56
56
|
};
|
|
57
|
-
const rotateSingleElement = (element, pointerX, pointerY, shouldRotateWithDiscreteAngle
|
|
58
|
-
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
|
57
|
+
const rotateSingleElement = (element, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle) => {
|
|
58
|
+
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
59
59
|
const cx = (x1 + x2) / 2;
|
|
60
60
|
const cy = (y1 + y2) / 2;
|
|
61
61
|
let angle;
|
|
@@ -84,24 +84,22 @@ const rescalePointsInElement = (element, width, height, normalizePoints) => isLi
|
|
|
84
84
|
points: rescalePoints(0, width, rescalePoints(1, height, element.points, normalizePoints), normalizePoints),
|
|
85
85
|
}
|
|
86
86
|
: {};
|
|
87
|
-
const measureFontSizeFromWidth = (element,
|
|
87
|
+
const measureFontSizeFromWidth = (element, elementsMap, nextWidth) => {
|
|
88
88
|
// We only use width to scale font on resize
|
|
89
89
|
let width = element.width;
|
|
90
90
|
const hasContainer = isBoundToContainer(element);
|
|
91
91
|
if (hasContainer) {
|
|
92
|
-
const container = getContainerElement(element);
|
|
92
|
+
const container = getContainerElement(element, elementsMap);
|
|
93
93
|
if (container) {
|
|
94
|
-
width = getBoundTextMaxWidth(container);
|
|
94
|
+
width = getBoundTextMaxWidth(container, element);
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
const nextFontSize = element.fontSize * (nextWidth / width);
|
|
98
98
|
if (nextFontSize < MIN_FONT_SIZE) {
|
|
99
99
|
return null;
|
|
100
100
|
}
|
|
101
|
-
const metrics = measureText(element.text, getFontString({ fontSize: nextFontSize, fontFamily: element.fontFamily }), element.lineHeight);
|
|
102
101
|
return {
|
|
103
102
|
size: nextFontSize,
|
|
104
|
-
baseline: metrics.baseline + (nextHeight - metrics.height),
|
|
105
103
|
};
|
|
106
104
|
};
|
|
107
105
|
const getSidesForTransformHandle = (transformHandleType, shouldResizeFromCenter) => {
|
|
@@ -116,8 +114,8 @@ const getSidesForTransformHandle = (transformHandleType, shouldResizeFromCenter)
|
|
|
116
114
|
(shouldResizeFromCenter && /^(w|nw|sw)$/.test(transformHandleType)),
|
|
117
115
|
};
|
|
118
116
|
};
|
|
119
|
-
const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
120
|
-
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
|
117
|
+
const resizeSingleTextElement = (element, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
118
|
+
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
121
119
|
const cx = (x1 + x2) / 2;
|
|
122
120
|
const cy = (y1 + y2) / 2;
|
|
123
121
|
// rotation pointer with reverse angle
|
|
@@ -140,7 +138,7 @@ const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromC
|
|
|
140
138
|
if (scale > 0) {
|
|
141
139
|
const nextWidth = element.width * scale;
|
|
142
140
|
const nextHeight = element.height * scale;
|
|
143
|
-
const metrics = measureFontSizeFromWidth(element,
|
|
141
|
+
const metrics = measureFontSizeFromWidth(element, elementsMap, nextWidth);
|
|
144
142
|
if (metrics === null) {
|
|
145
143
|
return;
|
|
146
144
|
}
|
|
@@ -154,13 +152,12 @@ const resizeSingleTextElement = (element, transformHandleType, shouldResizeFromC
|
|
|
154
152
|
fontSize: metrics.size,
|
|
155
153
|
width: nextWidth,
|
|
156
154
|
height: nextHeight,
|
|
157
|
-
baseline: metrics.baseline,
|
|
158
155
|
x: nextElementX,
|
|
159
156
|
y: nextElementY,
|
|
160
157
|
});
|
|
161
158
|
}
|
|
162
159
|
};
|
|
163
|
-
export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio, element, transformHandleDirection, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
160
|
+
export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio, element, elementsMap, transformHandleDirection, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
164
161
|
const stateAtResizeStart = originalElements.get(element.id);
|
|
165
162
|
// Gets bounds corners
|
|
166
163
|
const [x1, y1, x2, y2] = getResizedElementAbsoluteCoords(stateAtResizeStart, stateAtResizeStart.width, stateAtResizeStart.height, true);
|
|
@@ -180,7 +177,7 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
|
|
|
180
177
|
let scaleX = atStartBoundsWidth / boundsCurrentWidth;
|
|
181
178
|
let scaleY = atStartBoundsHeight / boundsCurrentHeight;
|
|
182
179
|
let boundTextFont = {};
|
|
183
|
-
const boundTextElement = getBoundTextElement(element);
|
|
180
|
+
const boundTextElement = getBoundTextElement(element, elementsMap);
|
|
184
181
|
if (transformHandleDirection.includes("e")) {
|
|
185
182
|
scaleX = (rotatedPointer[0] - startTopLeft[0]) / boundsCurrentWidth;
|
|
186
183
|
}
|
|
@@ -224,7 +221,6 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
|
|
|
224
221
|
if (stateOfBoundTextElementAtResize) {
|
|
225
222
|
boundTextFont = {
|
|
226
223
|
fontSize: stateOfBoundTextElementAtResize.fontSize,
|
|
227
|
-
baseline: stateOfBoundTextElementAtResize.baseline,
|
|
228
224
|
};
|
|
229
225
|
}
|
|
230
226
|
if (shouldMaintainAspectRatio) {
|
|
@@ -233,13 +229,12 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
|
|
|
233
229
|
width: eleNewWidth,
|
|
234
230
|
height: eleNewHeight,
|
|
235
231
|
};
|
|
236
|
-
const nextFont = measureFontSizeFromWidth(boundTextElement,
|
|
232
|
+
const nextFont = measureFontSizeFromWidth(boundTextElement, elementsMap, getBoundTextMaxWidth(updatedElement, boundTextElement));
|
|
237
233
|
if (nextFont === null) {
|
|
238
234
|
return;
|
|
239
235
|
}
|
|
240
236
|
boundTextFont = {
|
|
241
237
|
fontSize: nextFont.size,
|
|
242
|
-
baseline: nextFont.baseline,
|
|
243
238
|
};
|
|
244
239
|
}
|
|
245
240
|
else {
|
|
@@ -358,25 +353,24 @@ export const resizeSingleElement = (originalElements, shouldMaintainAspectRatio,
|
|
|
358
353
|
Number.isFinite(resizedElement.x) &&
|
|
359
354
|
Number.isFinite(resizedElement.y)) {
|
|
360
355
|
mutateElement(element, resizedElement);
|
|
361
|
-
updateBoundElements(element, {
|
|
356
|
+
updateBoundElements(element, elementsMap, {
|
|
362
357
|
newSize: { width: resizedElement.width, height: resizedElement.height },
|
|
363
358
|
});
|
|
364
359
|
if (boundTextElement && boundTextFont != null) {
|
|
365
360
|
mutateElement(boundTextElement, {
|
|
366
361
|
fontSize: boundTextFont.fontSize,
|
|
367
|
-
baseline: boundTextFont.baseline,
|
|
368
362
|
});
|
|
369
363
|
}
|
|
370
|
-
handleBindTextResize(element, transformHandleDirection, shouldMaintainAspectRatio);
|
|
364
|
+
handleBindTextResize(element, elementsMap, transformHandleDirection, shouldMaintainAspectRatio);
|
|
371
365
|
}
|
|
372
366
|
};
|
|
373
|
-
export const resizeMultipleElements = (
|
|
367
|
+
export const resizeMultipleElements = (originalElements, selectedElements, elementsMap, transformHandleType, shouldResizeFromCenter, pointerX, pointerY) => {
|
|
374
368
|
// map selected elements to the original elements. While it never should
|
|
375
369
|
// happen that pointerDownState.originalElements won't contain the selected
|
|
376
370
|
// elements during resize, this coupling isn't guaranteed, so to ensure
|
|
377
371
|
// type safety we need to transform only those elements we filter.
|
|
378
372
|
const targetElements = selectedElements.reduce((acc, element) => {
|
|
379
|
-
const origElement =
|
|
373
|
+
const origElement = originalElements.get(element.id);
|
|
380
374
|
if (origElement) {
|
|
381
375
|
acc.push({ orig: origElement, latest: element });
|
|
382
376
|
}
|
|
@@ -394,11 +388,11 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
|
|
|
394
388
|
if (!textId) {
|
|
395
389
|
return acc;
|
|
396
390
|
}
|
|
397
|
-
const text =
|
|
391
|
+
const text = originalElements.get(textId) ?? null;
|
|
398
392
|
if (!isBoundToContainer(text)) {
|
|
399
393
|
return acc;
|
|
400
394
|
}
|
|
401
|
-
const xy = LinearElementEditor.getBoundTextElementPosition(orig, text);
|
|
395
|
+
const xy = LinearElementEditor.getBoundTextElementPosition(orig, text, elementsMap);
|
|
402
396
|
return [...acc, { ...text, ...xy }];
|
|
403
397
|
}, []);
|
|
404
398
|
const { minX, minY, maxX, maxY, midX, midY } = getCommonBoundingBox(targetElements.map(({ orig }) => orig).concat(boundTextElements));
|
|
@@ -487,14 +481,13 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
|
|
|
487
481
|
}
|
|
488
482
|
}
|
|
489
483
|
if (isTextElement(orig)) {
|
|
490
|
-
const metrics = measureFontSizeFromWidth(orig,
|
|
484
|
+
const metrics = measureFontSizeFromWidth(orig, elementsMap, width);
|
|
491
485
|
if (!metrics) {
|
|
492
486
|
return;
|
|
493
487
|
}
|
|
494
488
|
update.fontSize = metrics.size;
|
|
495
|
-
update.baseline = metrics.baseline;
|
|
496
489
|
}
|
|
497
|
-
const boundTextElement =
|
|
490
|
+
const boundTextElement = originalElements.get(getBoundTextElementId(orig) ?? "");
|
|
498
491
|
if (boundTextElement) {
|
|
499
492
|
const newFontSize = boundTextElement.fontSize * scale;
|
|
500
493
|
if (newFontSize < MIN_FONT_SIZE) {
|
|
@@ -511,22 +504,22 @@ export const resizeMultipleElements = (pointerDownState, selectedElements, trans
|
|
|
511
504
|
for (const { element, update: { boundTextFontSize, ...update }, } of elementsAndUpdates) {
|
|
512
505
|
const { width, height, angle } = update;
|
|
513
506
|
mutateElement(element, update, false);
|
|
514
|
-
updateBoundElements(element, {
|
|
507
|
+
updateBoundElements(element, elementsMap, {
|
|
515
508
|
simultaneouslyUpdated: elementsToUpdate,
|
|
516
509
|
newSize: { width, height },
|
|
517
510
|
});
|
|
518
|
-
const boundTextElement = getBoundTextElement(element);
|
|
511
|
+
const boundTextElement = getBoundTextElement(element, elementsMap);
|
|
519
512
|
if (boundTextElement && boundTextFontSize) {
|
|
520
513
|
mutateElement(boundTextElement, {
|
|
521
514
|
fontSize: boundTextFontSize,
|
|
522
515
|
angle: isLinearElement(element) ? undefined : angle,
|
|
523
516
|
}, false);
|
|
524
|
-
handleBindTextResize(element, transformHandleType, true);
|
|
517
|
+
handleBindTextResize(element, elementsMap, transformHandleType, true);
|
|
525
518
|
}
|
|
526
519
|
}
|
|
527
520
|
Scene.getScene(elementsAndUpdates[0].element)?.informMutation();
|
|
528
521
|
};
|
|
529
|
-
const rotateMultipleElements = (
|
|
522
|
+
const rotateMultipleElements = (originalElements, elements, elementsMap, pointerX, pointerY, shouldRotateWithDiscreteAngle, centerX, centerY) => {
|
|
530
523
|
let centerAngle = (5 * Math.PI) / 2 + Math.atan2(pointerY - centerY, pointerX - centerX);
|
|
531
524
|
if (shouldRotateWithDiscreteAngle) {
|
|
532
525
|
centerAngle += SHIFT_LOCKING_ANGLE / 2;
|
|
@@ -535,19 +528,20 @@ const rotateMultipleElements = (pointerDownState, elements, pointerX, pointerY,
|
|
|
535
528
|
elements
|
|
536
529
|
.filter((element) => !isFrameLikeElement(element))
|
|
537
530
|
.forEach((element) => {
|
|
538
|
-
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
|
|
531
|
+
const [x1, y1, x2, y2] = getElementAbsoluteCoords(element, elementsMap);
|
|
539
532
|
const cx = (x1 + x2) / 2;
|
|
540
533
|
const cy = (y1 + y2) / 2;
|
|
541
|
-
const origAngle =
|
|
542
|
-
element.angle;
|
|
534
|
+
const origAngle = originalElements.get(element.id)?.angle ?? element.angle;
|
|
543
535
|
const [rotatedCX, rotatedCY] = rotate(cx, cy, centerX, centerY, centerAngle + origAngle - element.angle);
|
|
544
536
|
mutateElement(element, {
|
|
545
537
|
x: element.x + (rotatedCX - cx),
|
|
546
538
|
y: element.y + (rotatedCY - cy),
|
|
547
539
|
angle: normalizeAngle(centerAngle + origAngle),
|
|
548
540
|
}, false);
|
|
549
|
-
updateBoundElements(element, {
|
|
550
|
-
|
|
541
|
+
updateBoundElements(element, elementsMap, {
|
|
542
|
+
simultaneouslyUpdated: elements,
|
|
543
|
+
});
|
|
544
|
+
const boundText = getBoundTextElement(element, elementsMap);
|
|
551
545
|
if (boundText && !isArrowElement(element)) {
|
|
552
546
|
mutateElement(boundText, {
|
|
553
547
|
x: boundText.x + (rotatedCX - cx),
|
|
@@ -558,9 +552,9 @@ const rotateMultipleElements = (pointerDownState, elements, pointerX, pointerY,
|
|
|
558
552
|
});
|
|
559
553
|
Scene.getScene(elements[0])?.informMutation();
|
|
560
554
|
};
|
|
561
|
-
export const getResizeOffsetXY = (transformHandleType, selectedElements, x, y) => {
|
|
555
|
+
export const getResizeOffsetXY = (transformHandleType, selectedElements, elementsMap, x, y) => {
|
|
562
556
|
const [x1, y1, x2, y2] = selectedElements.length === 1
|
|
563
|
-
? getElementAbsoluteCoords(selectedElements[0])
|
|
557
|
+
? getElementAbsoluteCoords(selectedElements[0], elementsMap)
|
|
564
558
|
: getCommonBounds(selectedElements);
|
|
565
559
|
const cx = (x1 + x2) / 2;
|
|
566
560
|
const cy = (y1 + y2) / 2;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement } from "./types";
|
|
1
|
+
import { ExcalidrawElement, PointerType, NonDeletedExcalidrawElement, ElementsMap } from "./types";
|
|
2
2
|
import { MaybeTransformHandleType } from "./transformHandles";
|
|
3
3
|
import { AppState, Zoom } from "../types";
|
|
4
4
|
import { Bounds } from "./bounds";
|
|
5
|
-
export declare const resizeTest: (element: NonDeletedExcalidrawElement, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
|
|
6
|
-
export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType) => {
|
|
5
|
+
export declare const resizeTest: (element: NonDeletedExcalidrawElement, elementsMap: ElementsMap, appState: AppState, x: number, y: number, zoom: Zoom, pointerType: PointerType) => MaybeTransformHandleType;
|
|
6
|
+
export declare const getElementWithTransformHandleType: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, scenePointerX: number, scenePointerY: number, zoom: Zoom, pointerType: PointerType, elementsMap: ElementsMap) => {
|
|
7
7
|
element: NonDeletedExcalidrawElement;
|
|
8
8
|
transformHandleType: MaybeTransformHandleType;
|
|
9
9
|
} | null;
|
|
@@ -3,11 +3,11 @@ const isInsideTransformHandle = (transformHandle, x, y) => x >= transformHandle[
|
|
|
3
3
|
x <= transformHandle[0] + transformHandle[2] &&
|
|
4
4
|
y >= transformHandle[1] &&
|
|
5
5
|
y <= transformHandle[1] + transformHandle[3];
|
|
6
|
-
export const resizeTest = (element, appState, x, y, zoom, pointerType) => {
|
|
6
|
+
export const resizeTest = (element, elementsMap, appState, x, y, zoom, pointerType) => {
|
|
7
7
|
if (!appState.selectedElementIds[element.id]) {
|
|
8
8
|
return false;
|
|
9
9
|
}
|
|
10
|
-
const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, pointerType);
|
|
10
|
+
const { rotation: rotationTransformHandle, ...transformHandles } = getTransformHandles(element, zoom, elementsMap, pointerType);
|
|
11
11
|
if (rotationTransformHandle &&
|
|
12
12
|
isInsideTransformHandle(rotationTransformHandle, x, y)) {
|
|
13
13
|
return "rotation";
|
|
@@ -24,12 +24,12 @@ export const resizeTest = (element, appState, x, y, zoom, pointerType) => {
|
|
|
24
24
|
}
|
|
25
25
|
return false;
|
|
26
26
|
};
|
|
27
|
-
export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType) => {
|
|
27
|
+
export const getElementWithTransformHandleType = (elements, appState, scenePointerX, scenePointerY, zoom, pointerType, elementsMap) => {
|
|
28
28
|
return elements.reduce((result, element) => {
|
|
29
29
|
if (result) {
|
|
30
30
|
return result;
|
|
31
31
|
}
|
|
32
|
-
const transformHandleType = resizeTest(element, appState, scenePointerX, scenePointerY, zoom, pointerType);
|
|
32
|
+
const transformHandleType = resizeTest(element, elementsMap, appState, scenePointerX, scenePointerY, zoom, pointerType);
|
|
33
33
|
return transformHandleType ? { element, transformHandleType } : null;
|
|
34
34
|
}, null);
|
|
35
35
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ExcalidrawElement } from "./types";
|
|
1
|
+
import { ElementsMap, ExcalidrawElement } from "./types";
|
|
2
2
|
import { AppState, Zoom } from "../types";
|
|
3
3
|
export declare const isInvisiblySmallElement: (element: ExcalidrawElement) => boolean;
|
|
4
4
|
export declare const isElementInViewport: (element: ExcalidrawElement, width: number, height: number, viewTransformations: {
|
|
@@ -7,7 +7,7 @@ export declare const isElementInViewport: (element: ExcalidrawElement, width: nu
|
|
|
7
7
|
offsetTop: number;
|
|
8
8
|
scrollX: number;
|
|
9
9
|
scrollY: number;
|
|
10
|
-
}) => boolean;
|
|
10
|
+
}, elementsMap: ElementsMap) => boolean;
|
|
11
11
|
/**
|
|
12
12
|
* Makes a perfect shape or diagonal/horizontal/vertical line
|
|
13
13
|
*/
|
|
@@ -9,8 +9,8 @@ export const isInvisiblySmallElement = (element) => {
|
|
|
9
9
|
}
|
|
10
10
|
return element.width === 0 && element.height === 0;
|
|
11
11
|
};
|
|
12
|
-
export const isElementInViewport = (element, width, height, viewTransformations) => {
|
|
13
|
-
const [x1, y1, x2, y2] = getElementBounds(element); // scene coordinates
|
|
12
|
+
export const isElementInViewport = (element, width, height, viewTransformations, elementsMap) => {
|
|
13
|
+
const [x1, y1, x2, y2] = getElementBounds(element, elementsMap); // scene coordinates
|
|
14
14
|
const topLeftSceneCoords = viewportCoordsToSceneCoords({
|
|
15
15
|
clientX: viewTransformations.offsetLeft,
|
|
16
16
|
clientY: viewTransformations.offsetTop,
|
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
import { ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
|
|
1
|
+
import { ElementsMap, ExcalidrawElement, ExcalidrawElementType, ExcalidrawTextContainer, ExcalidrawTextElement, ExcalidrawTextElementWithContainer, FontFamilyValues, FontString, NonDeletedExcalidrawElement } from "./types";
|
|
2
2
|
import { MaybeTransformHandleType } from "./transformHandles";
|
|
3
3
|
import { AppState } from "../types";
|
|
4
4
|
import { ExtractSetType } from "../utility-types";
|
|
5
5
|
export declare const normalizeText: (text: string) => string;
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => {
|
|
6
|
+
export declare const redrawTextBoundingBox: (textElement: ExcalidrawTextElement, container: ExcalidrawElement | null, elementsMap: ElementsMap) => void;
|
|
7
|
+
export declare const bindTextToShapeAfterDuplication: (newElements: ExcalidrawElement[], oldElements: ExcalidrawElement[], oldIdToDuplicatedId: Map<ExcalidrawElement["id"], ExcalidrawElement["id"]>) => void;
|
|
8
|
+
export declare const handleBindTextResize: (container: NonDeletedExcalidrawElement, elementsMap: ElementsMap, transformHandleType: MaybeTransformHandleType, shouldMaintainAspectRatio?: boolean) => void;
|
|
9
|
+
export declare const computeBoundTextPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
|
|
11
10
|
x: number;
|
|
12
11
|
y: number;
|
|
13
12
|
};
|
|
14
13
|
export declare const measureText: (text: string, font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"]) => {
|
|
15
14
|
width: number;
|
|
16
15
|
height: number;
|
|
17
|
-
baseline: number;
|
|
18
16
|
};
|
|
19
|
-
export declare const measureBaseline: (text: string, font: FontString, lineHeight: ExcalidrawTextElement["lineHeight"], wrapInContainer?: boolean) => number;
|
|
20
17
|
/**
|
|
21
18
|
* To get unitless line-height (if unknown) we can calculate it by dividing
|
|
22
19
|
* height-per-line by fontSize.
|
|
@@ -29,6 +26,10 @@ export declare const detectLineHeight: (textElement: ExcalidrawTextElement) => n
|
|
|
29
26
|
* aligning with the W3C spec.
|
|
30
27
|
*/
|
|
31
28
|
export declare const getLineHeightInPx: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
|
|
29
|
+
/**
|
|
30
|
+
* Calculates vertical offset for a text with alphabetic baseline.
|
|
31
|
+
*/
|
|
32
|
+
export declare const getVerticalOffset: (fontFamily: ExcalidrawTextElement["fontFamily"], fontSize: ExcalidrawTextElement["fontSize"], lineHeightPx: number) => number;
|
|
32
33
|
export declare const getApproxMinLineHeight: (fontSize: ExcalidrawTextElement["fontSize"], lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
|
|
33
34
|
export declare const getTextWidth: (text: string, font: FontString) => number;
|
|
34
35
|
export declare const getTextHeight: (text: string, fontSize: number, lineHeight: ExcalidrawTextElement["lineHeight"]) => number;
|
|
@@ -43,11 +44,9 @@ export declare const getMinCharWidth: (font: FontString) => number;
|
|
|
43
44
|
export declare const getMaxCharWidth: (font: FontString) => number;
|
|
44
45
|
export declare const getApproxCharsToFitInWidth: (font: FontString, width: number) => number;
|
|
45
46
|
export declare const getBoundTextElementId: (container: ExcalidrawElement | null) => string | null;
|
|
46
|
-
export declare const getBoundTextElement: (element: ExcalidrawElement | null) => ExcalidrawTextElementWithContainer | null;
|
|
47
|
-
export declare const getContainerElement: (element:
|
|
48
|
-
|
|
49
|
-
}) | null) => ExcalidrawElement | null;
|
|
50
|
-
export declare const getContainerCenter: (container: ExcalidrawElement, appState: AppState) => {
|
|
47
|
+
export declare const getBoundTextElement: (element: ExcalidrawElement | null, elementsMap: ElementsMap) => ExcalidrawTextElementWithContainer | null;
|
|
48
|
+
export declare const getContainerElement: (element: ExcalidrawTextElement | null, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
|
|
49
|
+
export declare const getContainerCenter: (container: ExcalidrawElement, appState: AppState, elementsMap: ElementsMap) => {
|
|
51
50
|
x: number;
|
|
52
51
|
y: number;
|
|
53
52
|
};
|
|
@@ -55,21 +54,20 @@ export declare const getContainerCoords: (container: NonDeletedExcalidrawElement
|
|
|
55
54
|
x: number;
|
|
56
55
|
y: number;
|
|
57
56
|
};
|
|
58
|
-
export declare const getTextElementAngle: (textElement: ExcalidrawTextElement) => number;
|
|
59
|
-
export declare const
|
|
60
|
-
export declare const getBoundTextElementPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => {
|
|
57
|
+
export declare const getTextElementAngle: (textElement: ExcalidrawTextElement, container: ExcalidrawTextContainer | null) => number;
|
|
58
|
+
export declare const getBoundTextElementPosition: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer, elementsMap: ElementsMap) => {
|
|
61
59
|
x: number;
|
|
62
60
|
y: number;
|
|
63
61
|
} | undefined;
|
|
64
|
-
export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[]) => boolean;
|
|
65
|
-
export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[]) => boolean;
|
|
66
|
-
export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number) => ExcalidrawTextContainer | null;
|
|
62
|
+
export declare const shouldAllowVerticalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
|
|
63
|
+
export declare const suppportsHorizontalAlign: (selectedElements: NonDeletedExcalidrawElement[], elementsMap: ElementsMap) => boolean;
|
|
64
|
+
export declare const getTextBindableContainerAtPosition: (elements: readonly ExcalidrawElement[], appState: AppState, x: number, y: number, elementsMap: ElementsMap) => ExcalidrawTextContainer | null;
|
|
67
65
|
declare const VALID_CONTAINER_TYPES: Set<string>;
|
|
68
66
|
export declare const isValidTextContainer: (element: {
|
|
69
67
|
type: ExcalidrawElementType;
|
|
70
68
|
}) => boolean;
|
|
71
69
|
export declare const computeContainerDimensionForBoundText: (dimension: number, containerType: ExtractSetType<typeof VALID_CONTAINER_TYPES>) => number;
|
|
72
|
-
export declare const getBoundTextMaxWidth: (container: ExcalidrawElement, boundTextElement
|
|
70
|
+
export declare const getBoundTextMaxWidth: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElement | null) => number;
|
|
73
71
|
export declare const getBoundTextMaxHeight: (container: ExcalidrawElement, boundTextElement: ExcalidrawTextElementWithContainer) => number;
|
|
74
72
|
export declare const isMeasureTextSupported: () => boolean;
|
|
75
73
|
export declare const getDefaultLineHeight: (fontFamily: FontFamilyValues) => number & {
|