@plait/draw 0.62.0-next.1 → 0.62.0-next.10
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/arrow-line.component.d.ts +26 -0
- package/constants/geometry.d.ts +1 -0
- package/constants/pointer.d.ts +3 -3
- package/esm2022/arrow-line.component.mjs +157 -0
- package/esm2022/constants/geometry.mjs +10 -3
- package/esm2022/constants/pointer.mjs +4 -4
- package/esm2022/engines/basic-shapes/ellipse.mjs +5 -3
- package/esm2022/engines/basic-shapes/round-comment.mjs +5 -3
- package/esm2022/engines/flowchart/note-curly-left.mjs +2 -2
- package/esm2022/engines/flowchart/note-curly-right.mjs +7 -7
- package/esm2022/engines/flowchart/note-square.mjs +2 -2
- package/esm2022/engines/flowchart/or.mjs +5 -3
- package/esm2022/engines/flowchart/summing-junction.mjs +5 -3
- package/esm2022/engines/table/table.mjs +48 -26
- package/esm2022/engines/uml/deletion.mjs +3 -2
- package/esm2022/engines/uml/required-interface.mjs +3 -2
- package/esm2022/generators/arrow-line-active.generator.mjs +81 -0
- package/esm2022/generators/arrow-line-auto-complete.generator.mjs +46 -0
- package/esm2022/generators/arrow-line.generator.mjs +13 -0
- package/esm2022/generators/index.mjs +3 -3
- package/esm2022/geometry.component.mjs +4 -4
- package/esm2022/image.component.mjs +4 -4
- package/esm2022/interfaces/arrow-line.mjs +70 -0
- package/esm2022/interfaces/element.mjs +2 -2
- package/esm2022/interfaces/index.mjs +14 -7
- package/esm2022/interfaces/vector-line.mjs +6 -0
- package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +41 -0
- package/esm2022/plugins/with-arrow-line-auto-complete.mjs +74 -0
- package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-create.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-resize.mjs +158 -0
- package/esm2022/plugins/with-arrow-line-text-move.mjs +53 -0
- package/esm2022/plugins/with-arrow-line-text.mjs +63 -0
- package/esm2022/plugins/with-draw-fragment.mjs +13 -13
- package/esm2022/plugins/with-draw-resize.mjs +12 -5
- package/esm2022/plugins/with-draw.mjs +27 -20
- package/esm2022/plugins/with-geometry-resize.mjs +1 -1
- package/esm2022/plugins/with-swimlane-create.mjs +4 -7
- package/esm2022/plugins/with-swimlane.mjs +1 -20
- package/esm2022/plugins/with-table.mjs +34 -7
- package/esm2022/public-api.mjs +3 -3
- package/esm2022/table.component.mjs +6 -6
- package/esm2022/transforms/arrow-line.mjs +66 -0
- package/esm2022/transforms/common.mjs +36 -0
- package/esm2022/transforms/geometry.mjs +6 -28
- package/esm2022/transforms/index.mjs +15 -13
- package/esm2022/transforms/swimlane.mjs +1 -29
- package/esm2022/transforms/table-text.mjs +5 -5
- package/esm2022/transforms/table.mjs +30 -0
- package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +123 -0
- package/esm2022/utils/arrow-line/arrow-line-basic.mjs +257 -0
- package/esm2022/utils/arrow-line/arrow-line-common.mjs +162 -0
- package/esm2022/utils/arrow-line/arrow-line-resize.mjs +309 -0
- package/esm2022/utils/arrow-line/elbow.mjs +114 -0
- package/esm2022/utils/arrow-line/index.mjs +6 -0
- package/esm2022/utils/clipboard.mjs +10 -10
- package/esm2022/utils/common.mjs +14 -5
- package/esm2022/utils/geometry.mjs +17 -14
- package/esm2022/utils/hit.mjs +67 -44
- package/esm2022/utils/index.mjs +2 -2
- package/esm2022/utils/memorize.mjs +4 -5
- package/esm2022/utils/position/arrow-line.mjs +67 -0
- package/esm2022/utils/position/geometry.mjs +1 -1
- package/esm2022/utils/selected.mjs +3 -3
- package/esm2022/utils/style/stroke.mjs +6 -4
- package/esm2022/utils/swimlane.mjs +16 -7
- package/esm2022/utils/table-selected.mjs +3 -4
- package/esm2022/utils/table.mjs +28 -5
- package/fesm2022/plait-draw.mjs +668 -511
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/arrow-line-active.generator.d.ts +13 -0
- package/generators/{line-auto-complete.generator.d.ts → arrow-line-auto-complete.generator.d.ts} +1 -1
- package/generators/arrow-line.generator.d.ts +8 -0
- package/generators/index.d.ts +2 -2
- package/geometry.component.d.ts +2 -2
- package/image.component.d.ts +2 -2
- package/interfaces/arrow-line.d.ts +75 -0
- package/interfaces/element.d.ts +1 -1
- package/interfaces/index.d.ts +6 -4
- package/interfaces/vector-line.d.ts +16 -0
- package/package.json +12 -4
- package/plugins/with-arrow-line-auto-complete-reaction.d.ts +2 -0
- package/plugins/with-arrow-line-auto-complete.d.ts +7 -0
- package/plugins/with-arrow-line-bound-reaction.d.ts +2 -0
- package/plugins/with-arrow-line-create.d.ts +2 -0
- package/plugins/with-arrow-line-resize.d.ts +2 -0
- package/plugins/with-arrow-line-text-move.d.ts +2 -0
- package/plugins/with-arrow-line-text.d.ts +2 -0
- package/plugins/with-draw-fragment.d.ts +2 -2
- package/plugins/with-swimlane.d.ts +1 -2
- package/public-api.d.ts +2 -2
- package/table.component.d.ts +2 -2
- package/transforms/arrow-line.d.ts +8 -0
- package/transforms/common.d.ts +3 -0
- package/transforms/geometry.d.ts +1 -2
- package/transforms/index.d.ts +9 -9
- package/transforms/swimlane.d.ts +1 -3
- package/transforms/table-text.d.ts +2 -3
- package/transforms/table.d.ts +3 -0
- package/utils/arrow-line/arrow-line-arrow.d.ts +4 -0
- package/utils/arrow-line/arrow-line-basic.d.ts +13 -0
- package/utils/{line/line-common.d.ts → arrow-line/arrow-line-common.d.ts} +8 -4
- package/utils/{line/line-resize.d.ts → arrow-line/arrow-line-resize.d.ts} +3 -3
- package/utils/{line → arrow-line}/elbow.d.ts +7 -7
- package/utils/arrow-line/index.d.ts +5 -0
- package/utils/clipboard.d.ts +4 -4
- package/utils/common.d.ts +1 -0
- package/utils/geometry.d.ts +2 -1
- package/utils/hit.d.ts +7 -4
- package/utils/index.d.ts +1 -1
- package/utils/position/arrow-line.d.ts +16 -0
- package/utils/selected.d.ts +2 -2
- package/utils/swimlane.d.ts +3 -2
- package/utils/table.d.ts +2 -0
- package/esm2022/generators/line-active.generator.mjs +0 -81
- package/esm2022/generators/line-auto-complete.generator.mjs +0 -46
- package/esm2022/generators/line.generator.mjs +0 -13
- package/esm2022/interfaces/line.mjs +0 -70
- package/esm2022/line.component.mjs +0 -155
- package/esm2022/plugins/with-line-auto-complete-reaction.mjs +0 -41
- package/esm2022/plugins/with-line-auto-complete.mjs +0 -75
- package/esm2022/plugins/with-line-bound-reaction.mjs +0 -53
- package/esm2022/plugins/with-line-create.mjs +0 -53
- package/esm2022/plugins/with-line-resize.mjs +0 -158
- package/esm2022/plugins/with-line-text-move.mjs +0 -53
- package/esm2022/plugins/with-line-text.mjs +0 -62
- package/esm2022/transforms/line.mjs +0 -100
- package/esm2022/utils/line/elbow.mjs +0 -114
- package/esm2022/utils/line/index.mjs +0 -6
- package/esm2022/utils/line/line-arrow.mjs +0 -123
- package/esm2022/utils/line/line-basic.mjs +0 -257
- package/esm2022/utils/line/line-common.mjs +0 -123
- package/esm2022/utils/line/line-resize.mjs +0 -309
- package/esm2022/utils/position/line.mjs +0 -67
- package/generators/line-active.generator.d.ts +0 -13
- package/generators/line.generator.d.ts +0 -8
- package/interfaces/line.d.ts +0 -75
- package/line.component.d.ts +0 -26
- package/plugins/with-line-auto-complete-reaction.d.ts +0 -2
- package/plugins/with-line-auto-complete.d.ts +0 -7
- package/plugins/with-line-bound-reaction.d.ts +0 -2
- package/plugins/with-line-create.d.ts +0 -2
- package/plugins/with-line-resize.d.ts +0 -2
- package/plugins/with-line-text-move.d.ts +0 -2
- package/plugins/with-line-text.d.ts +0 -2
- package/transforms/line.d.ts +0 -12
- package/utils/line/index.d.ts +0 -5
- package/utils/line/line-arrow.d.ts +0 -4
- package/utils/line/line-basic.d.ts +0 -13
- package/utils/position/line.d.ts +0 -16
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { BoardTransforms, PRESS_AND_MOVE_BUFFER, PlaitBoard, PlaitPointerType, RectangleClient, Transforms, addSelectedElement, clearSelectedElement, createG, distanceBetweenPointAndPoint, rotateAntiPointsByElement, rotatePointsByElement, temporaryDisableSelection, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { LineShape, PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { getElementShape } from '../utils/shape';
|
|
4
|
-
import { getEngine } from '../engines';
|
|
5
|
-
import { handleLineCreating } from '../utils/line/line-basic';
|
|
6
|
-
import { getSelectedDrawElements } from '../utils/selected';
|
|
7
|
-
import { getAutoCompletePoints, getHitIndexOfAutoCompletePoint } from '../utils/geometry';
|
|
8
|
-
export const WithLineAutoCompletePluginKey = 'plait-line-auto-complete-plugin-key';
|
|
9
|
-
export const withLineAutoComplete = (board) => {
|
|
10
|
-
const { pointerDown, pointerMove, globalPointerUp } = board;
|
|
11
|
-
let autoCompletePoint = null;
|
|
12
|
-
let lineShapeG = null;
|
|
13
|
-
let sourceElement;
|
|
14
|
-
let temporaryElement;
|
|
15
|
-
board.pointerDown = (event) => {
|
|
16
|
-
const selectedElements = getSelectedDrawElements(board);
|
|
17
|
-
const targetElement = selectedElements.length === 1 && selectedElements[0];
|
|
18
|
-
const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
19
|
-
if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {
|
|
20
|
-
const points = getAutoCompletePoints(targetElement);
|
|
21
|
-
const index = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(clickPoint, targetElement) || clickPoint, points);
|
|
22
|
-
const hitPoint = points[index];
|
|
23
|
-
if (hitPoint) {
|
|
24
|
-
temporaryDisableSelection(board);
|
|
25
|
-
autoCompletePoint = hitPoint;
|
|
26
|
-
sourceElement = targetElement;
|
|
27
|
-
BoardTransforms.updatePointerType(board, LineShape.elbow);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
pointerDown(event);
|
|
31
|
-
};
|
|
32
|
-
board.pointerMove = (event) => {
|
|
33
|
-
lineShapeG?.remove();
|
|
34
|
-
lineShapeG = createG();
|
|
35
|
-
let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
36
|
-
if (autoCompletePoint && sourceElement) {
|
|
37
|
-
const distance = distanceBetweenPointAndPoint(...(rotateAntiPointsByElement(movingPoint, sourceElement) || movingPoint), ...autoCompletePoint);
|
|
38
|
-
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
39
|
-
const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);
|
|
40
|
-
const shape = getElementShape(sourceElement);
|
|
41
|
-
const engine = getEngine(shape);
|
|
42
|
-
let sourcePoint = autoCompletePoint;
|
|
43
|
-
if (engine.getNearestCrossingPoint) {
|
|
44
|
-
const crossingPoint = engine.getNearestCrossingPoint(rectangle, autoCompletePoint);
|
|
45
|
-
sourcePoint = crossingPoint;
|
|
46
|
-
}
|
|
47
|
-
// source point must be click point
|
|
48
|
-
const rotatedSourcePoint = rotatePointsByElement(sourcePoint, sourceElement) || sourcePoint;
|
|
49
|
-
temporaryElement = handleLineCreating(board, LineShape.elbow, rotatedSourcePoint, movingPoint, sourceElement, lineShapeG);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
pointerMove(event);
|
|
53
|
-
};
|
|
54
|
-
board.globalPointerUp = event => {
|
|
55
|
-
if (temporaryElement) {
|
|
56
|
-
Transforms.insertNode(board, temporaryElement, [board.children.length]);
|
|
57
|
-
clearSelectedElement(board);
|
|
58
|
-
addSelectedElement(board, temporaryElement);
|
|
59
|
-
const afterComplete = board.getPluginOptions(WithLineAutoCompletePluginKey)
|
|
60
|
-
?.afterComplete;
|
|
61
|
-
afterComplete && afterComplete(temporaryElement);
|
|
62
|
-
}
|
|
63
|
-
if (autoCompletePoint) {
|
|
64
|
-
BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
|
|
65
|
-
autoCompletePoint = null;
|
|
66
|
-
}
|
|
67
|
-
lineShapeG?.remove();
|
|
68
|
-
lineShapeG = null;
|
|
69
|
-
sourceElement = null;
|
|
70
|
-
temporaryElement = null;
|
|
71
|
-
globalPointerUp(event);
|
|
72
|
-
};
|
|
73
|
-
return board;
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLWF1dG8tY29tcGxldGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtbGluZS1hdXRvLWNvbXBsZXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsZUFBZSxFQUNmLFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLE9BQU8sRUFDUCw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsV0FBVyxFQUNYLGNBQWMsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLDhCQUE4QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcscUNBQXFDLENBQUM7QUFNbkYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDdEQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTVELElBQUksaUJBQWlCLEdBQWlCLElBQUksQ0FBQztJQUMzQyxJQUFJLFVBQVUsR0FBdUIsSUFBSSxDQUFDO0lBQzFDLElBQUksYUFBdUMs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QyxDQUFDO1lBQzlILENBQUM7UUFDTCxDQUFDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLEVBQUU7UUFDNUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sYUFBYSxHQUFJLEtBQTJCLENBQUMsZ0JBQWdCLENBQTBCLDZCQUE2QixDQUFDO2dCQUN2SCxFQUFFLGFBQWEsQ0FBQztZQUNwQixhQUFhLElBQUksYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixlQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JFLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO1FBQ0QsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLFxuICAgIFBSRVNTX0FORF9NT1ZFX0JVRkZFUixcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0T3B0aW9uc0JvYXJkLFxuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNyZWF0ZUcsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIHJvdGF0ZVBvaW50c0J5RWxlbWVudCxcbiAgICB0ZW1wb3JhcnlEaXNhYmxlU2VsZWN0aW9uLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVTaGFwZSwgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRMaW5lLCBQbGFpdFNoYXBlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0RWxlbWVudFNoYXBlIH0gZnJvbSAnLi4vdXRpbHMvc2hhcGUnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBoYW5kbGVMaW5lQ3JlYXRpbmcgfSBmcm9tICcuLi91dGlscy9saW5lL2xpbmUtYmFzaWMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWREcmF3RWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9zZWxlY3RlZCc7XG5pbXBvcnQgeyBnZXRBdXRvQ29tcGxldGVQb2ludHMsIGdldEhpdEluZGV4T2ZBdXRvQ29tcGxldGVQb2ludCB9IGZyb20gJy4uL3V0aWxzL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IFdpdGhMaW5lQXV0b0NvbXBsZXRlUGx1Z2luS2V5ID0gJ3BsYWl0LWxpbmUtYXV0by1jb21wbGV0ZS1wbHVnaW4ta2V5JztcblxuZXhwb3J0IGludGVyZmFjZSBMaW5lQXV0b0NvbXBsZXRlT3B0aW9ucyB7XG4gICAgYWZ0ZXJDb21wbGV0ZTogKGVsZW1lbnQ6IFBsYWl0TGluZSkgPT4ge307XG59XG5cbmV4cG9ydCBjb25zdCB3aXRoTGluZUF1dG9Db21wbGV0ZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAgfSA9IGJvYXJkO1xuXG4gICAgbGV0IGF1dG9Db21wbGV0ZVBvaW50OiBQb2ludCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsaW5lU2hhcGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzb3VyY2VFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IHRlbXBvcmFyeUVsZW1lbnQ6IFBsYWl0TGluZSB8IG51bGw7XG5cbiAgICBib2FyZC5wb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZERyYXdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgICAgICBjb25zdCBjbGlja1BvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJiB0YXJnZXRFbGVtZW50ICYmIFBsYWl0RHJhd0VsZW1lbnQuaXNTaGFwZUVsZW1lbnQodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGdldEF1dG9Db21wbGV0ZVBvaW50cyh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZ2V0SGl0SW5kZXhPZkF1dG9Db21wbGV0ZVBvaW50KHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQoY2xpY2tQb2ludCwgdGFyZ2V0RWxlbWVudCkgfHwgY2xpY2tQb2ludCwgcG9pbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdFBvaW50ID0gcG9pbnRzW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChoaXRQb2ludCkge1xuICAgICAgICAgICAgICAgIHRlbXBvcmFyeURpc2FibGVTZWxlY3Rpb24oYm9hcmQgYXMgUGxhaXRPcHRpb25zQm9hcmQpO1xuICAgICAgICAgICAgICAgIGF1dG9Db21wbGV0ZVBvaW50ID0gaGl0UG9pbnQ7XG4gICAgICAgICAgICAgICAgc291cmNlRWxlbWVudCA9IHRhcmdldEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBMaW5lU2hhcGUuZWxib3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IG1vdmluZ1BvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGlmIChhdXRvQ29tcGxldGVQb2ludCAmJiBzb3VyY2VFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoXG4gICAgICAgICAgICAgICAgLi4uKHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQobW92aW5nUG9pbnQsIHNvdXJjZUVsZW1lbnQpIHx8IG1vdmluZ1BvaW50KSxcbiAgICAgICAgICAgICAgICAuLi5hdXRvQ29tcGxldGVQb2ludFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhzb3VyY2VFbGVtZW50LnBvaW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBnZXRFbGVtZW50U2hhcGUoc291cmNlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5naW5lID0gZ2V0RW5naW5lKHNoYXBlKTtcbiAgICAgICAgICAgICAgICBsZXQgc291cmNlUG9pbnQgPSBhdXRvQ29tcGxldGVQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoZW5naW5lLmdldE5lYXJlc3RDcm9zc2luZ1BvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyb3NzaW5nUG9pbnQgPSBlbmdpbmUuZ2V0TmVhcmVzdENyb3NzaW5nUG9pbnQocmVjdGFuZ2xlLCBhdXRvQ29tcGxldGVQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVBvaW50ID0gY3Jvc3NpbmdQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc291cmNlIHBvaW50IG11c3QgYmUgY2xpY2sgcG9pbnRcbiAgICAgICAgICAgICAgICBjb25zdCByb3RhdGVkU291cmNlUG9pbnQgPSByb3RhdGVQb2ludHNCeUVsZW1lbnQoc291cmNlUG9pbnQsIHNvdXJjZUVsZW1lbnQpIHx8IHNvdXJjZVBvaW50O1xuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBoYW5kbGVMaW5lQ3JlYXRpbmcoYm9hcmQsIExpbmVTaGFwZS5lbGJvdywgcm90YXRlZFNvdXJjZVBvaW50LCBtb3ZpbmdQb2ludCwgc291cmNlRWxlbWVudCwgbGluZVNoYXBlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmICh0ZW1wb3JhcnlFbGVtZW50KSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIHRlbXBvcmFyeUVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50KGJvYXJkKTtcbiAgICAgICAgICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgdGVtcG9yYXJ5RWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlckNvbXBsZXRlID0gKGJvYXJkIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5nZXRQbHVnaW5PcHRpb25zPExpbmVBdXRvQ29tcGxldGVPcHRpb25zPihXaXRoTGluZUF1dG9Db21wbGV0ZVBsdWdpbktleSlcbiAgICAgICAgICAgICAgICA/LmFmdGVyQ29tcGxldGU7XG4gICAgICAgICAgICBhZnRlckNvbXBsZXRlICYmIGFmdGVyQ29tcGxldGUodGVtcG9yYXJ5RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dG9Db21wbGV0ZVBvaW50KSB7XG4gICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZVBvaW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IG51bGw7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { SNAPPING_STROKE_WIDTH, PlaitBoard, RectangleClient, SELECTION_BORDER_COLOR, drawCircle, hasValidAngle, setAngleForG, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { LineShape, PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { isResizingByCondition } from '@plait/common';
|
|
4
|
-
import { LineResizeHandle } from '../utils/position/line';
|
|
5
|
-
import { drawBoundReaction, getHitShape, getSnappingRef } from '../utils';
|
|
6
|
-
export const withLineBoundReaction = (board) => {
|
|
7
|
-
const { pointerMove, pointerUp } = board;
|
|
8
|
-
let boundShapeG = null;
|
|
9
|
-
board.pointerMove = (event) => {
|
|
10
|
-
boundShapeG?.remove();
|
|
11
|
-
if (PlaitBoard.isReadonly(board)) {
|
|
12
|
-
pointerMove(event);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const linePointers = Object.keys(LineShape);
|
|
16
|
-
const isLinePointer = PlaitBoard.isInPointer(board, linePointers);
|
|
17
|
-
const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
18
|
-
const isLineResizing = isResizingByCondition(board, resizeRef => {
|
|
19
|
-
const { element, handle } = resizeRef;
|
|
20
|
-
const isSourceOrTarget = handle === LineResizeHandle.target || handle === LineResizeHandle.source;
|
|
21
|
-
return PlaitDrawElement.isLine(element) && isSourceOrTarget;
|
|
22
|
-
});
|
|
23
|
-
if (isLinePointer || isLineResizing) {
|
|
24
|
-
const hitElement = getHitShape(board, movingPoint);
|
|
25
|
-
if (hitElement) {
|
|
26
|
-
const ref = getSnappingRef(board, hitElement, movingPoint);
|
|
27
|
-
const isSnapping = ref.isHitEdge || ref.isHitConnector;
|
|
28
|
-
boundShapeG = drawBoundReaction(board, hitElement, { hasMask: isSnapping, hasConnector: true });
|
|
29
|
-
if (isSnapping) {
|
|
30
|
-
const circleG = drawCircle(PlaitBoard.getRoughSVG(board), ref.connectorPoint || ref.edgePoint, 6, {
|
|
31
|
-
stroke: SELECTION_BORDER_COLOR,
|
|
32
|
-
strokeWidth: SNAPPING_STROKE_WIDTH,
|
|
33
|
-
fill: SELECTION_BORDER_COLOR,
|
|
34
|
-
fillStyle: 'solid'
|
|
35
|
-
});
|
|
36
|
-
boundShapeG.appendChild(circleG);
|
|
37
|
-
}
|
|
38
|
-
if (hasValidAngle(hitElement)) {
|
|
39
|
-
setAngleForG(boundShapeG, RectangleClient.getCenterPointByPoints(hitElement.points), hitElement.angle);
|
|
40
|
-
}
|
|
41
|
-
PlaitBoard.getElementActiveHost(board).append(boundShapeG);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
pointerMove(event);
|
|
45
|
-
};
|
|
46
|
-
board.pointerUp = event => {
|
|
47
|
-
boundShapeG?.remove();
|
|
48
|
-
boundShapeG = null;
|
|
49
|
-
pointerUp(event);
|
|
50
|
-
};
|
|
51
|
-
return board;
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLWJvdW5kLXJlYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWxpbmUtYm91bmQtcmVhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHFCQUFxQixFQUNyQixVQUFVLEVBRVYsZUFBZSxFQUNmLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsYUFBYSxFQUNiLFlBQVksRUFDWixXQUFXLEVBQ1gsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUxRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN2RCxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUV6QyxJQUFJLFdBQVcsR0FBdUIsSUFBSSxDQUFDO0lBRTNDLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQWlDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtZQUM1RixNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUN0QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksTUFBTSxLQUFLLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUNsRyxPQUFPLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDbkQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDYixNQUFNLEdBQUcsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDO2dCQUN2RCxXQUFXLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ2hHLElBQUksVUFBVSxFQUFFLENBQUM7b0JBQ2IsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRTt3QkFDOUYsTUFBTSxFQUFFLHNCQUFzQjt3QkFDOUIsV0FBVyxFQUFFLHFCQUFxQjt3QkFDbEMsSUFBSSxFQUFFLHNCQUFzQjt3QkFDNUIsU0FBUyxFQUFFLE9BQU87cUJBQ3JCLENBQUMsQ0FBQztvQkFDSCxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyQyxDQUFDO2dCQUNELElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQzVCLFlBQVksQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBTSxDQUFDLENBQUM7Z0JBQzVHLENBQUM7Z0JBQ0QsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUMvRCxDQUFDO1FBQ0wsQ0FBQztRQUNELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFO1FBQ3RCLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QixXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFNOQVBQSU5HX1NUUk9LRV9XSURUSCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICBkcmF3Q2lyY2xlLFxuICAgIGhhc1ZhbGlkQW5nbGUsXG4gICAgc2V0QW5nbGVGb3JHLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVTaGFwZSwgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNSZXNpemluZ0J5Q29uZGl0aW9uIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBMaW5lUmVzaXplSGFuZGxlIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbGluZSc7XG5pbXBvcnQgeyBkcmF3Qm91bmRSZWFjdGlvbiwgZ2V0SGl0U2hhcGUsIGdldFNuYXBwaW5nUmVmIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpbmVCb3VuZFJlYWN0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyTW92ZSwgcG9pbnRlclVwIH0gPSBib2FyZDtcblxuICAgIGxldCBib3VuZFNoYXBlRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgYm91bmRTaGFwZUc/LnJlbW92ZSgpO1xuICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVQb2ludGVycyA9IE9iamVjdC5rZXlzKExpbmVTaGFwZSk7XG4gICAgICAgIGNvbnN0IGlzTGluZVBvaW50ZXIgPSBQbGFpdEJvYXJkLmlzSW5Qb2ludGVyKGJvYXJkLCBsaW5lUG9pbnRlcnMpO1xuICAgICAgICBjb25zdCBtb3ZpbmdQb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBjb25zdCBpc0xpbmVSZXNpemluZyA9IGlzUmVzaXppbmdCeUNvbmRpdGlvbjxQbGFpdEVsZW1lbnQsIExpbmVSZXNpemVIYW5kbGU+KGJvYXJkLCByZXNpemVSZWYgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlbGVtZW50LCBoYW5kbGUgfSA9IHJlc2l6ZVJlZjtcbiAgICAgICAgICAgIGNvbnN0IGlzU291cmNlT3JUYXJnZXQgPSBoYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUudGFyZ2V0IHx8IGhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5zb3VyY2U7XG4gICAgICAgICAgICByZXR1cm4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUoZWxlbWVudCkgJiYgaXNTb3VyY2VPclRhcmdldDtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0xpbmVQb2ludGVyIHx8IGlzTGluZVJlc2l6aW5nKSB7XG4gICAgICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0U2hhcGUoYm9hcmQsIG1vdmluZ1BvaW50KTtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmID0gZ2V0U25hcHBpbmdSZWYoYm9hcmQsIGhpdEVsZW1lbnQsIG1vdmluZ1BvaW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1NuYXBwaW5nID0gcmVmLmlzSGl0RWRnZSB8fCByZWYuaXNIaXRDb25uZWN0b3I7XG4gICAgICAgICAgICAgICAgYm91bmRTaGFwZUcgPSBkcmF3Qm91bmRSZWFjdGlvbihib2FyZCwgaGl0RWxlbWVudCwgeyBoYXNNYXNrOiBpc1NuYXBwaW5nLCBoYXNDb25uZWN0b3I6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU25hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2lyY2xlRyA9IGRyYXdDaXJjbGUoUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCksIHJlZi5jb25uZWN0b3JQb2ludCB8fCByZWYuZWRnZVBvaW50LCA2LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogU05BUFBJTkdfU1RST0tFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYm91bmRTaGFwZUcuYXBwZW5kQ2hpbGQoY2lyY2xlRyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFuZ2xlRm9yRyhib3VuZFNoYXBlRywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50QnlQb2ludHMoaGl0RWxlbWVudC5wb2ludHMpLCBoaXRFbGVtZW50LmFuZ2xlISk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChib3VuZFNoYXBlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGJvdW5kU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgYm91bmRTaGFwZUcgPSBudWxsO1xuICAgICAgICBwb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { BoardTransforms, PlaitBoard, PlaitPointerType, Transforms, addSelectedElement, clearSelectedElement, createG, preventTouchMove, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { getLinePointers } from '../constants';
|
|
3
|
-
import { isDrawingMode } from '@plait/common';
|
|
4
|
-
import { handleLineCreating } from '../utils/line/line-basic';
|
|
5
|
-
import { getSnappingShape } from '../utils';
|
|
6
|
-
export const withLineCreateByDraw = (board) => {
|
|
7
|
-
const { pointerDown, pointerMove, globalPointerUp } = board;
|
|
8
|
-
let start = null;
|
|
9
|
-
let sourceElement;
|
|
10
|
-
let lineShapeG = null;
|
|
11
|
-
let temporaryElement = null;
|
|
12
|
-
board.pointerDown = (event) => {
|
|
13
|
-
const linePointers = getLinePointers();
|
|
14
|
-
const isLinePointer = PlaitBoard.isInPointer(board, linePointers);
|
|
15
|
-
if (!PlaitBoard.isReadonly(board) && isLinePointer && isDrawingMode(board)) {
|
|
16
|
-
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
17
|
-
start = point;
|
|
18
|
-
const hitElement = getSnappingShape(board, point);
|
|
19
|
-
if (hitElement) {
|
|
20
|
-
sourceElement = hitElement;
|
|
21
|
-
}
|
|
22
|
-
preventTouchMove(board, event, true);
|
|
23
|
-
}
|
|
24
|
-
pointerDown(event);
|
|
25
|
-
};
|
|
26
|
-
board.pointerMove = (event) => {
|
|
27
|
-
lineShapeG?.remove();
|
|
28
|
-
lineShapeG = createG();
|
|
29
|
-
let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
30
|
-
if (start) {
|
|
31
|
-
const lineShape = PlaitBoard.getPointer(board);
|
|
32
|
-
temporaryElement = handleLineCreating(board, lineShape, start, movingPoint, sourceElement, lineShapeG);
|
|
33
|
-
}
|
|
34
|
-
pointerMove(event);
|
|
35
|
-
};
|
|
36
|
-
board.globalPointerUp = (event) => {
|
|
37
|
-
if (temporaryElement) {
|
|
38
|
-
Transforms.insertNode(board, temporaryElement, [board.children.length]);
|
|
39
|
-
clearSelectedElement(board);
|
|
40
|
-
addSelectedElement(board, temporaryElement);
|
|
41
|
-
BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
|
|
42
|
-
}
|
|
43
|
-
lineShapeG?.remove();
|
|
44
|
-
lineShapeG = null;
|
|
45
|
-
sourceElement = null;
|
|
46
|
-
start = null;
|
|
47
|
-
temporaryElement = null;
|
|
48
|
-
preventTouchMove(board, event, false);
|
|
49
|
-
globalPointerUp(event);
|
|
50
|
-
};
|
|
51
|
-
return board;
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLWNyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLWNyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3RELE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUU1RCxJQUFJLEtBQUssR0FBaUIsSUFBSSxDQUFDO0lBRS9CLElBQUksYUFBdUMsQ0FBQztJQUU1QyxJQUFJLFVBQVUsR0FBdUIsSUFBSSxDQUFDO0lBRTFDLElBQUksZ0JBQWdCLEdBQXFCLElBQUksQ0FBQztJQUU5QyxLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLGVBQWUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2QsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2IsYUFBYSxHQUFHLFVBQVUsQ0FBQztZQUMvQixDQUFDO1lBQ0QsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQWMsQ0FBQztZQUM1RCxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzNHLENBQUM7UUFFRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUM1QyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDNUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBQ0QsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsYUFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRQb2ludGVyVHlwZSxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudCxcbiAgICBjcmVhdGVHLFxuICAgIHByZXZlbnRUb3VjaE1vdmUsXG4gICAgdG9Ib3N0UG9pbnQsXG4gICAgdG9WaWV3Qm94UG9pbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTGluZVNoYXBlLCBQbGFpdExpbmUsIFBsYWl0U2hhcGVFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRMaW5lUG9pbnRlcnMgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNEcmF3aW5nTW9kZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgaGFuZGxlTGluZUNyZWF0aW5nIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldFNuYXBwaW5nU2hhcGUgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoTGluZUNyZWF0ZUJ5RHJhdyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAgfSA9IGJvYXJkO1xuXG4gICAgbGV0IHN0YXJ0OiBQb2ludCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHNvdXJjZUVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50IHwgbnVsbDtcblxuICAgIGxldCBsaW5lU2hhcGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHRlbXBvcmFyeUVsZW1lbnQ6IFBsYWl0TGluZSB8IG51bGwgPSBudWxsO1xuXG4gICAgYm9hcmQucG9pbnRlckRvd24gPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBsaW5lUG9pbnRlcnMgPSBnZXRMaW5lUG9pbnRlcnMoKTtcbiAgICAgICAgY29uc3QgaXNMaW5lUG9pbnRlciA9IFBsYWl0Qm9hcmQuaXNJblBvaW50ZXIoYm9hcmQsIGxpbmVQb2ludGVycyk7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJiBpc0xpbmVQb2ludGVyICYmIGlzRHJhd2luZ01vZGUoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgc3RhcnQgPSBwb2ludDtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRTbmFwcGluZ1NoYXBlKGJvYXJkLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQgPSBoaXRFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IG1vdmluZ1BvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgIGlmIChzdGFydCkge1xuICAgICAgICAgICAgY29uc3QgbGluZVNoYXBlID0gUGxhaXRCb2FyZC5nZXRQb2ludGVyKGJvYXJkKSBhcyBMaW5lU2hhcGU7XG4gICAgICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gaGFuZGxlTGluZUNyZWF0aW5nKGJvYXJkLCBsaW5lU2hhcGUsIHN0YXJ0LCBtb3ZpbmdQb2ludCwgc291cmNlRWxlbWVudCwgbGluZVNoYXBlRyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbFBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0ZW1wb3JhcnlFbGVtZW50KSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIHRlbXBvcmFyeUVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50KGJvYXJkKTtcbiAgICAgICAgICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgdGVtcG9yYXJ5RWxlbWVudCk7XG4gICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IG51bGw7XG4gICAgICAgIHNvdXJjZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBzdGFydCA9IG51bGw7XG4gICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgZmFsc2UpO1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { PlaitNode, Point } from '@plait/core';
|
|
2
|
-
import { simplifyOrthogonalPoints, withResize } from '@plait/common';
|
|
3
|
-
import { getSelectedLineElements } from '../utils/selected';
|
|
4
|
-
import { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';
|
|
5
|
-
import { LineShape } from '../interfaces';
|
|
6
|
-
import { DrawTransforms } from '../transforms';
|
|
7
|
-
import { getElbowPoints, getNextRenderPoints, isUseDefaultOrthogonalRoute } from '../utils/line/elbow';
|
|
8
|
-
import { alignElbowSegment, alignPoints, getIndexAndDeleteCountByKeyPoint, getResizedPreviousAndNextPoint, hasIllegalElbowPoint } from '../utils/line/line-resize';
|
|
9
|
-
import { getHitConnection, getLinePoints } from '../utils/line/line-basic';
|
|
10
|
-
import { getElbowLineRouteOptions } from '../utils/line';
|
|
11
|
-
import { getSnappingShape } from '../utils';
|
|
12
|
-
export const withLineResize = (board) => {
|
|
13
|
-
let elbowLineIndex;
|
|
14
|
-
let elbowLineDeleteCount;
|
|
15
|
-
let elbowSourcePoint;
|
|
16
|
-
let elbowTargetPoint;
|
|
17
|
-
let elbowNextRenderPoints;
|
|
18
|
-
const options = {
|
|
19
|
-
key: 'draw-line',
|
|
20
|
-
canResize: () => {
|
|
21
|
-
return true;
|
|
22
|
-
},
|
|
23
|
-
hitTest: (point) => {
|
|
24
|
-
const selectedLineElements = getSelectedLineElements(board);
|
|
25
|
-
if (selectedLineElements.length > 0) {
|
|
26
|
-
let result = null;
|
|
27
|
-
selectedLineElements.forEach(value => {
|
|
28
|
-
const handleRef = getHitLineResizeHandleRef(board, value, point);
|
|
29
|
-
if (handleRef) {
|
|
30
|
-
result = {
|
|
31
|
-
element: value,
|
|
32
|
-
handle: handleRef.handle,
|
|
33
|
-
handleIndex: handleRef.handleIndex
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
},
|
|
41
|
-
beforeResize: (resizeRef) => {
|
|
42
|
-
if (resizeRef.element.shape === LineShape.elbow &&
|
|
43
|
-
resizeRef.handle !== LineResizeHandle.source &&
|
|
44
|
-
resizeRef.handle !== LineResizeHandle.target) {
|
|
45
|
-
const params = getElbowLineRouteOptions(board, resizeRef.element);
|
|
46
|
-
if (isUseDefaultOrthogonalRoute(resizeRef.element, params)) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
const points = [...resizeRef.element.points];
|
|
50
|
-
const handleIndex = resizeRef.handleIndex;
|
|
51
|
-
const pointsOnElbow = getElbowPoints(board, resizeRef.element);
|
|
52
|
-
elbowSourcePoint = pointsOnElbow[0];
|
|
53
|
-
elbowTargetPoint = pointsOnElbow[pointsOnElbow.length - 1];
|
|
54
|
-
elbowNextRenderPoints = getNextRenderPoints(board, resizeRef.element, pointsOnElbow);
|
|
55
|
-
const value = getIndexAndDeleteCountByKeyPoint(board, resizeRef.element, [...points], elbowNextRenderPoints, handleIndex);
|
|
56
|
-
elbowLineIndex = value.index;
|
|
57
|
-
elbowLineDeleteCount = value.deleteCount;
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
onResize: (resizeRef, resizeState) => {
|
|
61
|
-
let points = [...resizeRef.element.points];
|
|
62
|
-
let source = { ...resizeRef.element.source };
|
|
63
|
-
let target = { ...resizeRef.element.target };
|
|
64
|
-
let handleIndex = resizeRef.handleIndex;
|
|
65
|
-
const hitElement = getSnappingShape(board, resizeState.endPoint);
|
|
66
|
-
if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {
|
|
67
|
-
const object = resizeRef.handle === LineResizeHandle.source ? source : target;
|
|
68
|
-
points[handleIndex] = resizeState.endPoint;
|
|
69
|
-
if (hitElement) {
|
|
70
|
-
object.connection = getHitConnection(board, resizeState.endPoint, hitElement);
|
|
71
|
-
object.boundId = hitElement.id;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
object.connection = undefined;
|
|
75
|
-
object.boundId = undefined;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
if (resizeRef.element.shape === LineShape.elbow) {
|
|
80
|
-
if (elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {
|
|
81
|
-
const resizedPreviousAndNextPoint = getResizedPreviousAndNextPoint(elbowNextRenderPoints, elbowSourcePoint, elbowTargetPoint, handleIndex);
|
|
82
|
-
const startKeyPoint = elbowNextRenderPoints[handleIndex];
|
|
83
|
-
const endKeyPoint = elbowNextRenderPoints[handleIndex + 1];
|
|
84
|
-
const [newStartPoint, newEndPoint] = alignElbowSegment(startKeyPoint, endKeyPoint, resizeState, resizedPreviousAndNextPoint);
|
|
85
|
-
let midDataPoints = [...points].slice(1, points.length - 1);
|
|
86
|
-
if (elbowLineIndex !== null && elbowLineDeleteCount !== null) {
|
|
87
|
-
if (hasIllegalElbowPoint(midDataPoints)) {
|
|
88
|
-
midDataPoints = [newStartPoint, newEndPoint];
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
midDataPoints.splice(elbowLineIndex, elbowLineDeleteCount, newStartPoint, newEndPoint);
|
|
92
|
-
}
|
|
93
|
-
points = [elbowSourcePoint, ...midDataPoints, elbowTargetPoint];
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
if (resizeRef.handle === LineResizeHandle.addHandle) {
|
|
99
|
-
points.splice(handleIndex + 1, 0, resizeState.endPoint);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
points[handleIndex] = resizeState.endPoint;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
if (!hitElement) {
|
|
107
|
-
handleIndex = resizeRef.handle === LineResizeHandle.addHandle ? handleIndex + 1 : handleIndex;
|
|
108
|
-
const drawPoints = getLinePoints(board, resizeRef.element);
|
|
109
|
-
const newPoints = [...points];
|
|
110
|
-
newPoints[0] = drawPoints[0];
|
|
111
|
-
newPoints[newPoints.length - 1] = drawPoints[drawPoints.length - 1];
|
|
112
|
-
if (resizeRef.element.shape !== LineShape.elbow ||
|
|
113
|
-
(resizeRef.element.shape === LineShape.elbow && newPoints.length === 2)) {
|
|
114
|
-
newPoints.forEach((point, index) => {
|
|
115
|
-
if (index === handleIndex)
|
|
116
|
-
return;
|
|
117
|
-
if (points[handleIndex]) {
|
|
118
|
-
points[handleIndex] = alignPoints(point, points[handleIndex]);
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
DrawTransforms.resizeLine(board, { points, source, target }, resizeRef.path);
|
|
124
|
-
},
|
|
125
|
-
afterResize: (resizeRef) => {
|
|
126
|
-
if (resizeRef.element.shape === LineShape.elbow) {
|
|
127
|
-
const element = PlaitNode.get(board, resizeRef.path);
|
|
128
|
-
let points = element && [...element.points];
|
|
129
|
-
if (points.length > 2 && elbowNextRenderPoints && elbowSourcePoint && elbowTargetPoint) {
|
|
130
|
-
const nextSourcePoint = elbowNextRenderPoints[0];
|
|
131
|
-
const nextTargetPoint = elbowNextRenderPoints[elbowNextRenderPoints.length - 1];
|
|
132
|
-
points.splice(0, 1, nextSourcePoint);
|
|
133
|
-
points.splice(-1, 1, nextTargetPoint);
|
|
134
|
-
points = simplifyOrthogonalPoints(points);
|
|
135
|
-
if (Point.isEquals(points[0], nextSourcePoint)) {
|
|
136
|
-
points.splice(0, 1);
|
|
137
|
-
}
|
|
138
|
-
if (Point.isEquals(points[points.length - 1], nextTargetPoint)) {
|
|
139
|
-
points.pop();
|
|
140
|
-
}
|
|
141
|
-
if (points.length === 1) {
|
|
142
|
-
points = [];
|
|
143
|
-
}
|
|
144
|
-
points = [elbowSourcePoint, ...points, elbowTargetPoint];
|
|
145
|
-
DrawTransforms.resizeLine(board, { points }, resizeRef.path);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
elbowLineIndex = null;
|
|
149
|
-
elbowLineDeleteCount = null;
|
|
150
|
-
elbowSourcePoint = null;
|
|
151
|
-
elbowTargetPoint = null;
|
|
152
|
-
elbowNextRenderPoints = null;
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
withResize(board, options);
|
|
156
|
-
return board;
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUE2Qyx3QkFBd0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckYsT0FBTyxFQUFjLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RyxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLG9CQUFvQixFQUN2QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNoRCxJQUFJLGNBQTZCLENBQUM7SUFDbEMsSUFBSSxvQkFBbUMsQ0FBQztJQUN4QyxJQUFJLGdCQUE4QixDQUFDO0lBQ25DLElBQUksZ0JBQThCLENBQUM7SUFDbkMsSUFBSSxx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QUcsRUFBRSxDQUFDO29CQUNqQixDQUFDO29CQUNELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQztvQkFDRCxNQUFNLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO29CQUN6RCxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFZLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNMLENBQUM7WUFDRCxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUM1QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNqQyxDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBOEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXhELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0Tm9kZSwgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVSZWYsIFJlc2l6ZVN0YXRlLCBXaXRoUmVzaXplT3B0aW9ucywgc2ltcGxpZnlPcnRob2dvbmFsUG9pbnRzLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZExpbmVFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGVkJztcbmltcG9ydCB7IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYsIExpbmVSZXNpemVIYW5kbGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9saW5lJztcbmltcG9ydCB7IExpbmVIYW5kbGUsIExpbmVTaGFwZSwgUGxhaXRMaW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZ2V0RWxib3dQb2ludHMsIGdldE5leHRSZW5kZXJQb2ludHMsIGlzVXNlRGVmYXVsdE9ydGhvZ29uYWxSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL2xpbmUvZWxib3cnO1xuaW1wb3J0IHtcbiAgICBhbGlnbkVsYm93U2VnbWVudCxcbiAgICBhbGlnblBvaW50cyxcbiAgICBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludCxcbiAgICBnZXRSZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnQsXG4gICAgaGFzSWxsZWdhbEVsYm93UG9pbnRcbn0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXRIaXRDb25uZWN0aW9uLCBnZXRMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEVsYm93TGluZVJvdXRlT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2xpbmUnO1xuaW1wb3J0IHsgZ2V0U25hcHBpbmdTaGFwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaW5lUmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgbGV0IGVsYm93TGluZUluZGV4OiBudW1iZXIgfCBudWxsO1xuICAgIGxldCBlbGJvd0xpbmVEZWxldGVDb3VudDogbnVtYmVyIHwgbnVsbDtcbiAgICBsZXQgZWxib3dTb3VyY2VQb2ludDogUG9pbnQgfCBudWxsO1xuICAgIGxldCBlbGJvd1RhcmdldFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGVsYm93TmV4dFJlbmRlclBvaW50czogUG9pbnRbXSB8IG51bGw7XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWxpbmUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVFbGVtZW50cyA9IGdldFNlbGVjdGVkTGluZUVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZExpbmVFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRMaW5lRWxlbWVudHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYoYm9hcmQsIHZhbHVlLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSW5kZXg6IGhhbmRsZVJlZi5oYW5kbGVJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmVmb3JlUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPikgPT4ge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LnNoYXBlID09PSBMaW5lU2hhcGUuZWxib3cgJiZcbiAgICAgICAgICAgICAgICByZXNpemVSZWYuaGFuZGxlICE9PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSAmJlxuICAgICAgICAgICAgICAgIHJlc2l6ZVJlZi5oYW5kbGUgIT09IExpbmVSZXNpemVIYW5kbGUudGFyZ2V0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBnZXRFbGJvd0xpbmVSb3V0ZU9wdGlvbnMoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNVc2VEZWZhdWx0T3J0aG9nb25hbFJvdXRlKHJlc2l6ZVJlZi5lbGVtZW50LCBwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRzOiBQb2ludFtdID0gWy4uLnJlc2l6ZVJlZi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlSW5kZXggPSByZXNpemVSZWYuaGFuZGxlSW5kZXghO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50c09uRWxib3cgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQgPSBwb2ludHNPbkVsYm93WzBdO1xuICAgICAgICAgICAgICAgIGVsYm93VGFyZ2V0UG9pbnQgPSBwb2ludHNPbkVsYm93W3BvaW50c09uRWxib3cubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgZWxib3dOZXh0UmVuZGVyUG9pbnRzID0gZ2V0TmV4dFJlbmRlclBvaW50cyhib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQsIHBvaW50c09uRWxib3cpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRJbmRleEFuZERlbGV0ZUNvdW50QnlLZXlQb2ludChib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQsIFsuLi5wb2ludHNdLCBlbGJvd05leHRSZW5kZXJQb2ludHMsIGhhbmRsZUluZGV4KTtcbiAgICAgICAgICAgICAgICBlbGJvd0xpbmVJbmRleCA9IHZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGVsYm93TGluZURlbGV0ZUNvdW50ID0gdmFsdWUuZGVsZXRlQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBsZXQgcG9pbnRzOiBQb2ludFtdID0gWy4uLnJlc2l6ZVJlZi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICBsZXQgc291cmNlOiBMaW5lSGFuZGxlID0geyAuLi5yZXNpemVSZWYuZWxlbWVudC5zb3VyY2UgfTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQ6IExpbmVIYW5kbGUgPSB7IC4uLnJlc2l6ZVJlZi5lbGVtZW50LnRhcmdldCB9O1xuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4ID0gcmVzaXplUmVmLmhhbmRsZUluZGV4ITtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRTbmFwcGluZ1NoYXBlKGJvYXJkLCByZXNpemVTdGF0ZS5lbmRQb2ludCk7XG4gICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5zb3VyY2UgfHwgcmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYmplY3QgPSByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSA/IHNvdXJjZSA6IHRhcmdldDtcbiAgICAgICAgICAgICAgICBwb2ludHNbaGFuZGxlSW5kZXhdID0gcmVzaXplU3RhdGUuZW5kUG9pbnQ7XG4gICAgICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmNvbm5lY3Rpb24gPSBnZXRIaXRDb25uZWN0aW9uKGJvYXJkLCByZXNpemVTdGF0ZS5lbmRQb2ludCwgaGl0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5ib3VuZElkID0gaGl0RWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3QuY29ubmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmJvdW5kSWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzaXplUmVmLmVsZW1lbnQuc2hhcGUgPT09IExpbmVTaGFwZS5lbGJvdykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZWxib3dOZXh0UmVuZGVyUG9pbnRzICYmIGVsYm93U291cmNlUG9pbnQgJiYgZWxib3dUYXJnZXRQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50ID0gZ2V0UmVzaXplZFByZXZpb3VzQW5kTmV4dFBvaW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYm93TmV4dFJlbmRlclBvaW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGJvd1NvdXJjZVBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYm93VGFyZ2V0UG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydEtleVBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2hhbmRsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZEtleVBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2hhbmRsZUluZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBbbmV3U3RhcnRQb2ludCwgbmV3RW5kUG9pbnRdID0gYWxpZ25FbGJvd1NlZ21lbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRLZXlQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRLZXlQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVkUHJldmlvdXNBbmROZXh0UG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWlkRGF0YVBvaW50czogUG9pbnRbXSA9IFsuLi5wb2ludHNdLnNsaWNlKDEsIHBvaW50cy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGJvd0xpbmVJbmRleCAhPT0gbnVsbCAmJiBlbGJvd0xpbmVEZWxldGVDb3VudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNJbGxlZ2FsRWxib3dQb2ludChtaWREYXRhUG9pbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWREYXRhUG9pbnRzID0gW25ld1N0YXJ0UG9pbnQsIG5ld0VuZFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWREYXRhUG9pbnRzLnNwbGljZShlbGJvd0xpbmVJbmRleCwgZWxib3dMaW5lRGVsZXRlQ291bnQsIG5ld1N0YXJ0UG9pbnQsIG5ld0VuZFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW2VsYm93U291cmNlUG9pbnQsIC4uLm1pZERhdGFQb2ludHMsIGVsYm93VGFyZ2V0UG9pbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuYWRkSGFuZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKGhhbmRsZUluZGV4ICsgMSwgMCwgcmVzaXplU3RhdGUuZW5kUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2hhbmRsZUluZGV4XSA9IHJlc2l6ZVN0YXRlLmVuZFBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVJbmRleCA9IHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUuYWRkSGFuZGxlID8gaGFuZGxlSW5kZXggKyAxIDogaGFuZGxlSW5kZXg7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhd1BvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdQb2ludHMgPSBbLi4ucG9pbnRzXTtcbiAgICAgICAgICAgICAgICBuZXdQb2ludHNbMF0gPSBkcmF3UG9pbnRzWzBdO1xuICAgICAgICAgICAgICAgIG5ld1BvaW50c1tuZXdQb2ludHMubGVuZ3RoIC0gMV0gPSBkcmF3UG9pbnRzW2RyYXdQb2ludHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5zaGFwZSAhPT0gTGluZVNoYXBlLmVsYm93IHx8XG4gICAgICAgICAgICAgICAgICAgIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmVsYm93ICYmIG5ld1BvaW50cy5sZW5ndGggPT09IDIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1BvaW50cy5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gaGFuZGxlSW5kZXgpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2ludHNbaGFuZGxlSW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2hhbmRsZUluZGV4XSA9IGFsaWduUG9pbnRzKHBvaW50LCBwb2ludHNbaGFuZGxlSW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVzaXplTGluZShib2FyZCwgeyBwb2ludHMsIHNvdXJjZSwgdGFyZ2V0IH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0TGluZSwgTGluZVJlc2l6ZUhhbmRsZT4pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuZWxlbWVudC5zaGFwZSA9PT0gTGluZVNoYXBlLmVsYm93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICAgICAgICAgIGxldCBwb2ludHMgPSBlbGVtZW50ICYmIFsuLi5lbGVtZW50LnBvaW50cyFdO1xuICAgICAgICAgICAgICAgIGlmIChwb2ludHMubGVuZ3RoID4gMiAmJiBlbGJvd05leHRSZW5kZXJQb2ludHMgJiYgZWxib3dTb3VyY2VQb2ludCAmJiBlbGJvd1RhcmdldFBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRTb3VyY2VQb2ludCA9IGVsYm93TmV4dFJlbmRlclBvaW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldFBvaW50ID0gZWxib3dOZXh0UmVuZGVyUG9pbnRzW2VsYm93TmV4dFJlbmRlclBvaW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnNwbGljZSgwLCAxLCBuZXh0U291cmNlUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKC0xLCAxLCBuZXh0VGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMocG9pbnRzISk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChQb2ludC5pc0VxdWFscyhwb2ludHNbMF0sIG5leHRTb3VyY2VQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFBvaW50LmlzRXF1YWxzKHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0sIG5leHRUYXJnZXRQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gW2VsYm93U291cmNlUG9pbnQsIC4uLnBvaW50cywgZWxib3dUYXJnZXRQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUxpbmUoYm9hcmQsIHsgcG9pbnRzIH0sIHJlc2l6ZVJlZi5wYXRoIGFzIFBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsYm93TGluZUluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93TGluZURlbGV0ZUNvdW50ID0gbnVsbDtcbiAgICAgICAgICAgIGVsYm93U291cmNlUG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgZWxib3dUYXJnZXRQb2ludCA9IG51bGw7XG4gICAgICAgICAgICBlbGJvd05leHRSZW5kZXJQb2ludHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPihib2FyZCwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { distanceBetweenPointAndSegments, getHitElementByPoint, getNearestPointBetweenPointAndSegments } from '@plait/core';
|
|
2
|
-
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { ResizeHandle, getRatioByPoint, getTextManages, withResize } from '@plait/common';
|
|
4
|
-
import { DrawTransforms } from '../transforms';
|
|
5
|
-
import { getLinePoints } from '../utils/line/line-basic';
|
|
6
|
-
import { getHitLineTextIndex } from '../utils/position/line';
|
|
7
|
-
export const withLineTextMove = (board) => {
|
|
8
|
-
let textIndex = 0;
|
|
9
|
-
const movableBuffer = 100;
|
|
10
|
-
const options = {
|
|
11
|
-
key: 'line-text',
|
|
12
|
-
canResize: () => {
|
|
13
|
-
return true;
|
|
14
|
-
},
|
|
15
|
-
hitTest: (point) => {
|
|
16
|
-
let result = null;
|
|
17
|
-
const line = getHitElementByPoint(board, point, (element) => {
|
|
18
|
-
return PlaitDrawElement.isLine(element);
|
|
19
|
-
});
|
|
20
|
-
if (line) {
|
|
21
|
-
const index = getHitLineTextIndex(board, line, point);
|
|
22
|
-
const textManages = getTextManages(line);
|
|
23
|
-
const textManage = textManages[index];
|
|
24
|
-
if (index !== -1 && !textManage.isEditing) {
|
|
25
|
-
textIndex = index;
|
|
26
|
-
return { element: line, handle: ResizeHandle.e };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return result;
|
|
30
|
-
},
|
|
31
|
-
onResize: (resizeRef, resizeState) => {
|
|
32
|
-
const element = resizeRef.element;
|
|
33
|
-
if (element) {
|
|
34
|
-
const movingPoint = resizeState.endPoint;
|
|
35
|
-
const points = getLinePoints(board, element);
|
|
36
|
-
const distance = distanceBetweenPointAndSegments(points, movingPoint);
|
|
37
|
-
if (distance <= movableBuffer) {
|
|
38
|
-
const point = getNearestPointBetweenPointAndSegments(movingPoint, points, false);
|
|
39
|
-
const position = getRatioByPoint(points, point);
|
|
40
|
-
const texts = [...element.texts];
|
|
41
|
-
texts[textIndex] = {
|
|
42
|
-
...texts[textIndex],
|
|
43
|
-
position
|
|
44
|
-
};
|
|
45
|
-
DrawTransforms.setLineTexts(board, element, texts);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
withResize(board, options);
|
|
51
|
-
return board;
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXRleHQtbW92ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLXRleHQtbW92ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQixzQ0FBc0MsRUFDekMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQTZDLGVBQWUsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2xELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDMUIsTUFBTSxPQUFPLEdBQWlDO1FBQzFDLEdBQUcsRUFBRSxXQUFXO1FBQ2hCLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFxQixFQUFFLEVBQUU7Z0JBQ3RFLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLENBQUMsQ0FBMEIsQ0FBQztZQUM1QixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDekMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDeEMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDckQsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsU0FBK0IsRUFBRSxXQUF3QixFQUFFLEVBQUU7WUFDcEUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sUUFBUSxHQUFHLCtCQUErQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxRQUFRLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQzVCLE1BQU0sS0FBSyxHQUFHLHNDQUFzQyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2pGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2hELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2pDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRzt3QkFDZixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7d0JBQ25CLFFBQVE7cUJBQ1gsQ0FBQztvQkFDRixjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztLQUNKLENBQUM7SUFFRixVQUFVLENBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBnZXRIaXRFbGVtZW50QnlQb2ludCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50c1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50LCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJlc2l6ZUhhbmRsZSwgUmVzaXplUmVmLCBSZXNpemVTdGF0ZSwgV2l0aFJlc2l6ZU9wdGlvbnMsIGdldFJhdGlvQnlQb2ludCwgZ2V0VGV4dE1hbmFnZXMsIHdpdGhSZXNpemUgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEhpdExpbmVUZXh0SW5kZXggfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9saW5lJztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaW5lVGV4dE1vdmUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBsZXQgdGV4dEluZGV4ID0gMDtcbiAgICBjb25zdCBtb3ZhYmxlQnVmZmVyID0gMTAwO1xuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0TGluZT4gPSB7XG4gICAgICAgIGtleTogJ2xpbmUtdGV4dCcsXG4gICAgICAgIGNhblJlc2l6ZTogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGhpdFRlc3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCwgKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KTtcbiAgICAgICAgICAgIH0pIGFzIHVuZGVmaW5lZCB8IFBsYWl0TGluZTtcbiAgICAgICAgICAgIGlmIChsaW5lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBnZXRIaXRMaW5lVGV4dEluZGV4KGJvYXJkLCBsaW5lLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhsaW5lKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dE1hbmFnZXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEgJiYgIXRleHRNYW5hZ2UuaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlbGVtZW50OiBsaW5lLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZS5lIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdExpbmU+LCByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSByZXNpemVSZWYuZWxlbWVudDtcbiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW92aW5nUG9pbnQgPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRMaW5lUG9pbnRzKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnRzLCBtb3ZpbmdQb2ludCk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDw9IG1vdmFibGVCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhtb3ZpbmdQb2ludCwgcG9pbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UmF0aW9CeVBvaW50KHBvaW50cywgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0cyA9IFsuLi5lbGVtZW50LnRleHRzXTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dHNbdGV4dEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRleHRzW3RleHRJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5zZXRMaW5lVGV4dHMoYm9hcmQsIGVsZW1lbnQsIHRleHRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdExpbmU+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, PlaitNode, getHitElementByPoint, getNearestPointBetweenPointAndSegments, toHostPoint, toViewBoxPoint } from '@plait/core';
|
|
2
|
-
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
-
import { Node } from 'slate';
|
|
4
|
-
import { buildText, getRatioByPoint, getTextManages } from '@plait/common';
|
|
5
|
-
import { DrawTransforms } from '../transforms';
|
|
6
|
-
import { getLinePoints } from '../utils/line/line-basic';
|
|
7
|
-
import { getHitLineTextIndex } from '../utils/position/line';
|
|
8
|
-
import { isHitLineText } from '../utils/hit';
|
|
9
|
-
import { LINE_TEXT } from '../constants/line';
|
|
10
|
-
export const withLineText = (board) => {
|
|
11
|
-
const { dblClick } = board;
|
|
12
|
-
board.dblClick = (event) => {
|
|
13
|
-
if (!PlaitBoard.isReadonly(board)) {
|
|
14
|
-
const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
15
|
-
const hitTarget = getHitElementByPoint(board, clickPoint, (element) => {
|
|
16
|
-
return PlaitDrawElement.isLine(element);
|
|
17
|
-
});
|
|
18
|
-
const hitTargetPath = hitTarget && PlaitBoard.findPath(board, hitTarget);
|
|
19
|
-
if (hitTarget) {
|
|
20
|
-
const points = getLinePoints(board, hitTarget);
|
|
21
|
-
const point = getNearestPointBetweenPointAndSegments(clickPoint, points);
|
|
22
|
-
const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];
|
|
23
|
-
const textIndex = getHitLineTextIndex(board, hitTarget, clickPoint);
|
|
24
|
-
const isHitText = isHitLineText(board, hitTarget, clickPoint);
|
|
25
|
-
if (isHitText) {
|
|
26
|
-
editHandle(board, hitTarget, textIndex);
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const ratio = getRatioByPoint(points, point);
|
|
30
|
-
texts.push({
|
|
31
|
-
text: buildText(LINE_TEXT),
|
|
32
|
-
position: ratio,
|
|
33
|
-
width: 28,
|
|
34
|
-
height: 20
|
|
35
|
-
});
|
|
36
|
-
DrawTransforms.setLineTexts(board, hitTarget, texts);
|
|
37
|
-
setTimeout(() => {
|
|
38
|
-
if (hitTargetPath) {
|
|
39
|
-
const newHitTarget = PlaitNode.get(board, hitTargetPath);
|
|
40
|
-
const textManages = getTextManages(newHitTarget);
|
|
41
|
-
editHandle(board, newHitTarget, textManages.length - 1, true);
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
dblClick(event);
|
|
48
|
-
};
|
|
49
|
-
return board;
|
|
50
|
-
};
|
|
51
|
-
function editHandle(board, element, manageIndex, isFirstEdit = false) {
|
|
52
|
-
const textManages = getTextManages(element);
|
|
53
|
-
const textManage = textManages[manageIndex];
|
|
54
|
-
textManage.edit(() => {
|
|
55
|
-
const text = Node.string(textManage.getText());
|
|
56
|
-
const shouldRemove = !text || (isFirstEdit && text === LINE_TEXT);
|
|
57
|
-
if (shouldRemove) {
|
|
58
|
-
DrawTransforms.removeLineText(board, element, manageIndex);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtbGluZS10ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBRVYsU0FBUyxFQUNULG9CQUFvQixFQUNwQixzQ0FBc0MsRUFDdEMsV0FBVyxFQUNYLGNBQWMsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM5QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRTNCLEtBQUssQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFD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QyxDQUFDO1FBQy9ELENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0Tm9kZSxcbiAgICBnZXRIaXRFbGVtZW50QnlQb2ludCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50LCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBidWlsZFRleHQsIGdldFJhdGlvQnlQb2ludCwgZ2V0VGV4dE1hbmFnZXMgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRMaW5lUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IGdldEhpdExpbmVUZXh0SW5kZXggfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9saW5lJztcbmltcG9ydCB7IGlzSGl0TGluZVRleHQgfSBmcm9tICcuLi91dGlscy9oaXQnO1xuaW1wb3J0IHsgTElORV9URVhUIH0gZnJvbSAnLi4vY29uc3RhbnRzL2xpbmUnO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpbmVUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBkYmxDbGljayB9ID0gYm9hcmQ7XG5cbiAgICBib2FyZC5kYmxDbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsaWNrUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdFRhcmdldCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBjbGlja1BvaW50LCAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSkgYXMgdW5kZWZpbmVkIHwgUGxhaXRMaW5lO1xuICAgICAgICAgICAgY29uc3QgaGl0VGFyZ2V0UGF0aCA9IGhpdFRhcmdldCAmJiBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBoaXRUYXJnZXQpO1xuICAgICAgICAgICAgaWYgKGhpdFRhcmdldCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IGdldExpbmVQb2ludHMoYm9hcmQsIGhpdFRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhjbGlja1BvaW50LCBwb2ludHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRzID0gaGl0VGFyZ2V0LnRleHRzPy5sZW5ndGggPyBbLi4uaGl0VGFyZ2V0LnRleHRzXSA6IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRJbmRleCA9IGdldEhpdExpbmVUZXh0SW5kZXgoYm9hcmQsIGhpdFRhcmdldCwgY2xpY2tQb2ludCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNIaXRUZXh0ID0gaXNIaXRMaW5lVGV4dChib2FyZCwgaGl0VGFyZ2V0LCBjbGlja1BvaW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGVkaXRIYW5kbGUoYm9hcmQsIGhpdFRhcmdldCwgdGV4dEluZGV4KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IGdldFJhdGlvQnlQb2ludChwb2ludHMsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGV4dHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBidWlsZFRleHQoTElORV9URVhUKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiByYXRpbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAyOCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnNldExpbmVUZXh0cyhib2FyZCwgaGl0VGFyZ2V0LCB0ZXh0cyk7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpdFRhcmdldFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdIaXRUYXJnZXQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBoaXRUYXJnZXRQYXRoKSBhcyBQbGFpdExpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE1hbmFnZXMgPSBnZXRUZXh0TWFuYWdlcyhuZXdIaXRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRIYW5kbGUoYm9hcmQsIG5ld0hpdFRhcmdldCwgdGV4dE1hbmFnZXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkYmxDbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmZ1bmN0aW9uIGVkaXRIYW5kbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgbWFuYWdlSW5kZXg6IG51bWJlciwgaXNGaXJzdEVkaXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IHRleHRNYW5hZ2VzID0gZ2V0VGV4dE1hbmFnZXMoZWxlbWVudCk7XG4gICAgY29uc3QgdGV4dE1hbmFnZSA9IHRleHRNYW5hZ2VzW21hbmFnZUluZGV4XTtcbiAgICB0ZXh0TWFuYWdlLmVkaXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gTm9kZS5zdHJpbmcodGV4dE1hbmFnZS5nZXRUZXh0KCkpO1xuICAgICAgICBjb25zdCBzaG91bGRSZW1vdmUgPSAhdGV4dCB8fCAoaXNGaXJzdEVkaXQgJiYgdGV4dCA9PT0gTElORV9URVhUKTtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZSkge1xuICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVtb3ZlTGluZVRleHQoYm9hcmQsIGVsZW1lbnQsIG1hbmFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIl19
|