@plait/draw 0.1.0-next.3
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/README.md +3 -0
- package/constants/geometry.d.ts +27 -0
- package/constants/index.d.ts +2 -0
- package/constants/line.d.ts +4 -0
- package/constants/pointer.d.ts +10 -0
- package/esm2022/constants/geometry.mjs +28 -0
- package/esm2022/constants/index.mjs +3 -0
- package/esm2022/constants/line.mjs +5 -0
- package/esm2022/constants/pointer.mjs +19 -0
- package/esm2022/generator/geometry-shape.generator.mjs +22 -0
- package/esm2022/generator/line-active.generator.mjs +36 -0
- package/esm2022/generator/line.generator.mjs +43 -0
- package/esm2022/geometry.component.mjs +118 -0
- package/esm2022/interfaces/geometry.mjs +20 -0
- package/esm2022/interfaces/index.mjs +24 -0
- package/esm2022/interfaces/line.mjs +12 -0
- package/esm2022/interfaces/text.mjs +2 -0
- package/esm2022/line.component.mjs +152 -0
- package/esm2022/plait-draw.mjs +5 -0
- package/esm2022/plugins/with-draw-fragment.mjs +51 -0
- package/esm2022/plugins/with-draw-hotkey.mjs +19 -0
- package/esm2022/plugins/with-draw.mjs +76 -0
- package/esm2022/plugins/with-geometry-create.mjs +164 -0
- package/esm2022/plugins/with-geometry-resize.mjs +71 -0
- package/esm2022/plugins/with-line-bound-reaction.mjs +45 -0
- package/esm2022/plugins/with-line-create.mjs +66 -0
- package/esm2022/plugins/with-line-resize.mjs +52 -0
- package/esm2022/plugins/with-line-text.mjs +55 -0
- package/esm2022/public-api.mjs +5 -0
- package/esm2022/transforms/geometry-text.mjs +54 -0
- package/esm2022/transforms/geometry.mjs +31 -0
- package/esm2022/transforms/index.mjs +14 -0
- package/esm2022/transforms/line.mjs +16 -0
- package/esm2022/utils/clipboard.mjs +23 -0
- package/esm2022/utils/create-mode.mjs +13 -0
- package/esm2022/utils/engine/diamond.mjs +20 -0
- package/esm2022/utils/engine/ellipse.mjs +55 -0
- package/esm2022/utils/engine/index.mjs +18 -0
- package/esm2022/utils/engine/parallelogram.mjs +30 -0
- package/esm2022/utils/engine/rectangle.mjs +18 -0
- package/esm2022/utils/engine/round-rectangle.mjs +49 -0
- package/esm2022/utils/geometry-style/stroke.mjs +17 -0
- package/esm2022/utils/geometry.mjs +84 -0
- package/esm2022/utils/index.mjs +5 -0
- package/esm2022/utils/line.mjs +145 -0
- package/esm2022/utils/position/geometry.mjs +28 -0
- package/esm2022/utils/position/line.mjs +34 -0
- package/esm2022/utils/selected.mjs +15 -0
- package/fesm2022/plait-draw.mjs +1602 -0
- package/fesm2022/plait-draw.mjs.map +1 -0
- package/generator/geometry-shape.generator.d.ts +8 -0
- package/generator/line-active.generator.d.ts +9 -0
- package/generator/line.generator.d.ts +8 -0
- package/geometry.component.d.ts +27 -0
- package/index.d.ts +5 -0
- package/interfaces/geometry.d.ts +43 -0
- package/interfaces/index.d.ts +13 -0
- package/interfaces/line.d.ts +44 -0
- package/interfaces/text.d.ts +5 -0
- package/line.component.d.ts +36 -0
- package/package.json +25 -0
- package/plugins/with-draw-fragment.d.ts +2 -0
- package/plugins/with-draw-hotkey.d.ts +2 -0
- package/plugins/with-draw.d.ts +2 -0
- package/plugins/with-geometry-create.d.ts +3 -0
- package/plugins/with-geometry-resize.d.ts +2 -0
- package/plugins/with-line-bound-reaction.d.ts +2 -0
- package/plugins/with-line-create.d.ts +2 -0
- package/plugins/with-line-resize.d.ts +2 -0
- package/plugins/with-line-text.d.ts +2 -0
- package/public-api.d.ts +4 -0
- package/styles/styles.scss +16 -0
- package/transforms/geometry-text.d.ts +5 -0
- package/transforms/geometry.d.ts +6 -0
- package/transforms/index.d.ts +10 -0
- package/transforms/line.d.ts +5 -0
- package/utils/clipboard.d.ts +4 -0
- package/utils/create-mode.d.ts +7 -0
- package/utils/engine/diamond.d.ts +2 -0
- package/utils/engine/ellipse.d.ts +4 -0
- package/utils/engine/index.d.ts +3 -0
- package/utils/engine/parallelogram.d.ts +4 -0
- package/utils/engine/rectangle.d.ts +2 -0
- package/utils/engine/round-rectangle.d.ts +5 -0
- package/utils/geometry-style/stroke.d.ts +5 -0
- package/utils/geometry.d.ts +16 -0
- package/utils/index.d.ts +4 -0
- package/utils/line.d.ts +16 -0
- package/utils/position/geometry.d.ts +13 -0
- package/utils/position/line.d.ts +10 -0
- package/utils/selected.d.ts +5 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { PlaitElement } from '@plait/core';
|
|
2
|
+
import { ResizeHandle, normalizeShapePoints, withResize } from '@plait/common';
|
|
3
|
+
import { getSelectedGeometryElements } from '../utils/selected';
|
|
4
|
+
import { getHitGeometryResizeHandleRef } from '../utils/position/geometry';
|
|
5
|
+
import { DrawTransforms } from '../transforms';
|
|
6
|
+
import { isKeyHotkey } from 'is-hotkey';
|
|
7
|
+
export const withGeometryResize = (board) => {
|
|
8
|
+
const { keydown, keyup } = board;
|
|
9
|
+
let isShift = false;
|
|
10
|
+
board.keydown = (event) => {
|
|
11
|
+
isShift = isKeyHotkey('shift', event);
|
|
12
|
+
keydown(event);
|
|
13
|
+
};
|
|
14
|
+
board.keyup = (event) => {
|
|
15
|
+
isShift = false;
|
|
16
|
+
keyup(event);
|
|
17
|
+
};
|
|
18
|
+
const options = {
|
|
19
|
+
key: 'draw-geometry',
|
|
20
|
+
canResize: () => {
|
|
21
|
+
return true;
|
|
22
|
+
},
|
|
23
|
+
detect: (point) => {
|
|
24
|
+
const selectedGeometryElements = getSelectedGeometryElements(board);
|
|
25
|
+
if (selectedGeometryElements.length !== 1) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const target = selectedGeometryElements[0];
|
|
29
|
+
const targetComponent = PlaitElement.getComponent(selectedGeometryElements[0]);
|
|
30
|
+
if (targetComponent.activeGenerator.hasResizeHandle) {
|
|
31
|
+
const handleRef = getHitGeometryResizeHandleRef(board, target, point);
|
|
32
|
+
if (handleRef) {
|
|
33
|
+
return {
|
|
34
|
+
element: target,
|
|
35
|
+
handle: handleRef.handle,
|
|
36
|
+
cursorClass: handleRef.cursorClass
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
},
|
|
42
|
+
onResize: (resizeRef, resizeState) => {
|
|
43
|
+
let points = [...resizeRef.element.points];
|
|
44
|
+
if (resizeRef.handle === ResizeHandle.nw) {
|
|
45
|
+
points = [resizeState.endTransformPoint, resizeRef.element.points[1]];
|
|
46
|
+
}
|
|
47
|
+
if (resizeRef.handle === ResizeHandle.ne) {
|
|
48
|
+
points = [
|
|
49
|
+
[resizeRef.element.points[0][0], resizeState.endTransformPoint[1]],
|
|
50
|
+
[resizeState.endTransformPoint[0], resizeRef.element.points[1][1]]
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
if (resizeRef.handle === ResizeHandle.se) {
|
|
54
|
+
points = [resizeRef.element.points[0], resizeState.endTransformPoint];
|
|
55
|
+
}
|
|
56
|
+
if (resizeRef.handle === ResizeHandle.sw) {
|
|
57
|
+
points = [
|
|
58
|
+
[resizeState.endTransformPoint[0], resizeRef.element.points[0][1]],
|
|
59
|
+
[resizeRef.element.points[1][0], resizeState.endTransformPoint[1]]
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
points = normalizeShapePoints(points, isShift);
|
|
63
|
+
const component = PlaitElement.getComponent(resizeRef.element);
|
|
64
|
+
const { height: textHeight } = component.textManage.getSize();
|
|
65
|
+
DrawTransforms.resizeGeometry(board, points, textHeight, resizeRef.path);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
withResize(board, options);
|
|
69
|
+
return board;
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1nZW9tZXRyeS1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtZ2VvbWV0cnktcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxZQUFZLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFFOUQsT0FBTyxFQUFFLFlBQVksRUFBNkMsb0JBQW9CLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVqQyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFFcEIsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtRQUNyQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtRQUNuQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixNQUFNLE9BQU8sR0FBcUM7UUFDOUMsR0FBRyxFQUFFLGVBQWU7UUFDcEIsU0FBUyxFQUFFLEdBQUcs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Q0FBQztZQUM5RCxjQUFjLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSxDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBZ0IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTFDLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9nZW9tZXRyeSc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUsIFJlc2l6ZVJlZiwgUmVzaXplU3RhdGUsIFdpdGhSZXNpemVPcHRpb25zLCBub3JtYWxpemVTaGFwZVBvaW50cywgd2l0aFJlc2l6ZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRHZW9tZXRyeUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0SGl0R2VvbWV0cnlSZXNpemVIYW5kbGVSZWYgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgaXNLZXlIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuaW1wb3J0IHsgR2VvbWV0cnlDb21wb25lbnQgfSBmcm9tICcuLi9nZW9tZXRyeS5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3Qgd2l0aEdlb21ldHJ5UmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBrZXlkb3duLCBrZXl1cCB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgaXNTaGlmdCA9IGZhbHNlO1xuXG4gICAgYm9hcmQua2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpc1NoaWZ0ID0gaXNLZXlIb3RrZXkoJ3NoaWZ0JywgZXZlbnQpO1xuICAgICAgICBrZXlkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5dXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaXNTaGlmdCA9IGZhbHNlO1xuICAgICAgICBrZXl1cChldmVudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0R2VvbWV0cnk+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWdlb21ldHJ5JyxcbiAgICAgICAgY2FuUmVzaXplOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZGV0ZWN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEdlb21ldHJ5RWxlbWVudHMgPSBnZXRTZWxlY3RlZEdlb21ldHJ5RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkR2VvbWV0cnlFbGVtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHNlbGVjdGVkR2VvbWV0cnlFbGVtZW50c1swXTtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldENvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoc2VsZWN0ZWRHZW9tZXRyeUVsZW1lbnRzWzBdKSBhcyBHZW9tZXRyeUNvbXBvbmVudDtcbiAgICAgICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQuYWN0aXZlR2VuZXJhdG9yLmhhc1Jlc2l6ZUhhbmRsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdEdlb21ldHJ5UmVzaXplSGFuZGxlUmVmKGJvYXJkLCB0YXJnZXQsIHBvaW50KTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRHZW9tZXRyeT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBvaW50czogW1BvaW50LCBQb2ludF0gPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBSZXNpemVIYW5kbGUubncpIHtcbiAgICAgICAgICAgICAgICBwb2ludHMgPSBbcmVzaXplU3RhdGUuZW5kVHJhbnNmb3JtUG9pbnQsIHJlc2l6ZVJlZi5lbGVtZW50LnBvaW50c1sxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gUmVzaXplSGFuZGxlLm5lKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzID0gW1xuICAgICAgICAgICAgICAgICAgICBbcmVzaXplUmVmLmVsZW1lbnQucG9pbnRzWzBdWzBdLCByZXNpemVTdGF0ZS5lbmRUcmFuc2Zvcm1Qb2ludFsxXV0sXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemVTdGF0ZS5lbmRUcmFuc2Zvcm1Qb2ludFswXSwgcmVzaXplUmVmLmVsZW1lbnQucG9pbnRzWzFdWzFdXVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gUmVzaXplSGFuZGxlLnNlKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzID0gW3Jlc2l6ZVJlZi5lbGVtZW50LnBvaW50c1swXSwgcmVzaXplU3RhdGUuZW5kVHJhbnNmb3JtUG9pbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5oYW5kbGUgPT09IFJlc2l6ZUhhbmRsZS5zdykge1xuICAgICAgICAgICAgICAgIHBvaW50cyA9IFtcbiAgICAgICAgICAgICAgICAgICAgW3Jlc2l6ZVN0YXRlLmVuZFRyYW5zZm9ybVBvaW50WzBdLCByZXNpemVSZWYuZWxlbWVudC5wb2ludHNbMF1bMV1dLFxuICAgICAgICAgICAgICAgICAgICBbcmVzaXplUmVmLmVsZW1lbnQucG9pbnRzWzFdWzBdLCByZXNpemVTdGF0ZS5lbmRUcmFuc2Zvcm1Qb2ludFsxXV1cbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcG9pbnRzID0gbm9ybWFsaXplU2hhcGVQb2ludHMocG9pbnRzLCBpc1NoaWZ0KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQocmVzaXplUmVmLmVsZW1lbnQpIGFzIEdlb21ldHJ5Q29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgeyBoZWlnaHQ6IHRleHRIZWlnaHQgfSA9IGNvbXBvbmVudC50ZXh0TWFuYWdlLmdldFNpemUoKTtcbiAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUdlb21ldHJ5KGJvYXJkLCBwb2ludHMsIHRleHRIZWlnaHQsIHJlc2l6ZVJlZi5wYXRoKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3aXRoUmVzaXplPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, SELECTION_BORDER_COLOR, drawCircle, toPoint, transformPoint } from '@plait/core';
|
|
2
|
+
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
+
import { drawBoundMask, getHitConnectorPoint, getNearestPoint } from '../utils';
|
|
4
|
+
import { DrawPointerType } from '../constants';
|
|
5
|
+
import { getRectangleByPoints, isResizingByCondition } from '@plait/common';
|
|
6
|
+
import { getStrokeWidthByElement } from '../utils/geometry-style/stroke';
|
|
7
|
+
import { getHitOutlineGeometry } from '../utils/position/geometry';
|
|
8
|
+
export const withLineBoundReaction = (board) => {
|
|
9
|
+
const { pointerMove, pointerUp } = board;
|
|
10
|
+
let boundShapeG = null;
|
|
11
|
+
board.pointerMove = (event) => {
|
|
12
|
+
boundShapeG?.remove();
|
|
13
|
+
const isLinePointer = PlaitBoard.isPointer(board, DrawPointerType.line);
|
|
14
|
+
const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
15
|
+
const isLineResizing = isResizingByCondition(board, element => PlaitDrawElement.isLine(element));
|
|
16
|
+
if (isLinePointer || isLineResizing) {
|
|
17
|
+
const hitElement = getHitOutlineGeometry(board, movingPoint, -4);
|
|
18
|
+
if (hitElement) {
|
|
19
|
+
boundShapeG = drawBoundMask(board, hitElement);
|
|
20
|
+
const offset = (getStrokeWidthByElement(hitElement) + 1) / 2;
|
|
21
|
+
let nearestPoint = getNearestPoint(hitElement, movingPoint, offset);
|
|
22
|
+
const rectangle = getRectangleByPoints(hitElement.points);
|
|
23
|
+
const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);
|
|
24
|
+
const hitConnector = getHitConnectorPoint(nearestPoint, hitElement, activeRectangle);
|
|
25
|
+
nearestPoint = hitConnector ? hitConnector : nearestPoint;
|
|
26
|
+
const circleG = drawCircle(PlaitBoard.getRoughSVG(board), nearestPoint, 6, {
|
|
27
|
+
stroke: SELECTION_BORDER_COLOR,
|
|
28
|
+
strokeWidth: 1,
|
|
29
|
+
fill: SELECTION_BORDER_COLOR,
|
|
30
|
+
fillStyle: 'solid'
|
|
31
|
+
});
|
|
32
|
+
boundShapeG.appendChild(circleG);
|
|
33
|
+
PlaitBoard.getElementActiveHost(board).append(boundShapeG);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
pointerMove(event);
|
|
37
|
+
};
|
|
38
|
+
board.pointerUp = event => {
|
|
39
|
+
boundShapeG?.remove();
|
|
40
|
+
boundShapeG = null;
|
|
41
|
+
pointerUp(event);
|
|
42
|
+
};
|
|
43
|
+
return board;
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLWJvdW5kLXJlYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWxpbmUtYm91bmQtcmVhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXpDLElBQUksV0FBVyxHQUF1QixJQUFJLENBQUM7SUFFM0MsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRyxNQUFNLGNBQWMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVqRyxJQUFJLGFBQWEsSUFBSSxjQUFjLEVBQUU7WUFDakMsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLElBQUksVUFBVSxFQUFFO2dCQUNaLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLE1BQU0sR0FBRyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxZQUFZLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRixNQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUNyRixZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDMUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRTtvQkFDdkUsTUFBTSxFQUFFLHNCQUFzQjtvQkFDOUIsV0FBVyxFQUFFLENBQUM7b0JBQ2QsSUFBSSxFQUFFLHNCQUFzQjtvQkFDNUIsU0FBUyxFQUFFLE9BQU87aUJBQ3JCLENBQUMsQ0FBQztnQkFDSCxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7UUFFRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUN0QixXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDdEIsV0FBVyxHQUFHLElBQUksQ0FBQztRQUVuQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLCBkcmF3Q2lyY2xlLCB0b1BvaW50LCB0cmFuc2Zvcm1Qb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRyYXdCb3VuZE1hc2ssIGdldEhpdENvbm5lY3RvclBvaW50LCBnZXROZWFyZXN0UG9pbnQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBEcmF3UG9pbnRlclR5cGUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlQb2ludHMsIGlzUmVzaXppbmdCeUNvbmRpdGlvbiB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi91dGlscy9nZW9tZXRyeS1zdHlsZS9zdHJva2UnO1xuaW1wb3J0IHsgZ2V0SGl0T3V0bGluZUdlb21ldHJ5IH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vZ2VvbWV0cnknO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpbmVCb3VuZFJlYWN0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyTW92ZSwgcG9pbnRlclVwIH0gPSBib2FyZDtcblxuICAgIGxldCBib3VuZFNoYXBlRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgYm91bmRTaGFwZUc/LnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBpc0xpbmVQb2ludGVyID0gUGxhaXRCb2FyZC5pc1BvaW50ZXIoYm9hcmQsIERyYXdQb2ludGVyVHlwZS5saW5lKTtcbiAgICAgICAgY29uc3QgbW92aW5nUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgIGNvbnN0IGlzTGluZVJlc2l6aW5nID0gaXNSZXNpemluZ0J5Q29uZGl0aW9uKGJvYXJkLCBlbGVtZW50ID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKGVsZW1lbnQpKTtcblxuICAgICAgICBpZiAoaXNMaW5lUG9pbnRlciB8fCBpc0xpbmVSZXNpemluZykge1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdE91dGxpbmVHZW9tZXRyeShib2FyZCwgbW92aW5nUG9pbnQsIC00KTtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgYm91bmRTaGFwZUcgPSBkcmF3Qm91bmRNYXNrKGJvYXJkLCBoaXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXQgPSAoZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoaGl0RWxlbWVudCkgKyAxKSAvIDI7XG4gICAgICAgICAgICAgICAgbGV0IG5lYXJlc3RQb2ludCA9IGdldE5lYXJlc3RQb2ludChoaXRFbGVtZW50LCBtb3ZpbmdQb2ludCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeVBvaW50cyhoaXRFbGVtZW50LnBvaW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUocmVjdGFuZ2xlLCAtb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoaXRDb25uZWN0b3IgPSBnZXRIaXRDb25uZWN0b3JQb2ludChuZWFyZXN0UG9pbnQsIGhpdEVsZW1lbnQsIGFjdGl2ZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICAgICAgbmVhcmVzdFBvaW50ID0gaGl0Q29ubmVjdG9yID8gaGl0Q29ubmVjdG9yIDogbmVhcmVzdFBvaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZUcgPSBkcmF3Q2lyY2xlKFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLCBuZWFyZXN0UG9pbnQsIDYsIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYm91bmRTaGFwZUcuYXBwZW5kQ2hpbGQoY2lyY2xlRyk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGJvdW5kU2hhcGVHKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlclVwID0gZXZlbnQgPT4ge1xuICAgICAgICBib3VuZFNoYXBlRz8ucmVtb3ZlKCk7XG4gICAgICAgIGJvdW5kU2hhcGVHID0gbnVsbDtcblxuICAgICAgICBwb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BoardTransforms, PlaitBoard, PlaitPointerType, Transforms, addSelectedElement, clearSelectedElement, createG, preventTouchMove, toPoint, transformPoint } from '@plait/core';
|
|
2
|
+
import { LineMarkerType, LineShape } from '../interfaces';
|
|
3
|
+
import { DrawCreateMode, createLineElement, getCreateMode, transformPointToConnection } from '../utils';
|
|
4
|
+
import { DrawPointerType } from '../constants';
|
|
5
|
+
import { DefaultLineStyle } from '../constants/line';
|
|
6
|
+
import { LineShapeGenerator } from '../generator/line.generator';
|
|
7
|
+
import { getHitOutlineGeometry } from '../utils/position/geometry';
|
|
8
|
+
export const withLineCreateByDraw = (board) => {
|
|
9
|
+
const { pointerDown, pointerMove, pointerUp } = board;
|
|
10
|
+
let start = null;
|
|
11
|
+
let sourceRef = {};
|
|
12
|
+
let targetRef = {};
|
|
13
|
+
let lineShapeG = null;
|
|
14
|
+
let temporaryElement = null;
|
|
15
|
+
board.pointerDown = (event) => {
|
|
16
|
+
const createMode = getCreateMode(board);
|
|
17
|
+
const isLinePointer = PlaitBoard.isPointer(board, DrawPointerType.line);
|
|
18
|
+
if (isLinePointer && createMode === DrawCreateMode.draw) {
|
|
19
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
20
|
+
start = point;
|
|
21
|
+
const hitElement = getHitOutlineGeometry(board, point, -4);
|
|
22
|
+
if (hitElement) {
|
|
23
|
+
sourceRef.connection = transformPointToConnection(board, point, hitElement);
|
|
24
|
+
sourceRef.boundId = hitElement.id;
|
|
25
|
+
}
|
|
26
|
+
preventTouchMove(board, true);
|
|
27
|
+
}
|
|
28
|
+
pointerDown(event);
|
|
29
|
+
};
|
|
30
|
+
board.pointerMove = (event) => {
|
|
31
|
+
lineShapeG?.remove();
|
|
32
|
+
lineShapeG = createG();
|
|
33
|
+
const movingPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
34
|
+
if (start) {
|
|
35
|
+
const hitElement = getHitOutlineGeometry(board, movingPoint, -4);
|
|
36
|
+
targetRef.connection = hitElement ? transformPointToConnection(board, movingPoint, hitElement) : undefined;
|
|
37
|
+
targetRef.boundId = hitElement ? hitElement.id : undefined;
|
|
38
|
+
const lineGenerator = new LineShapeGenerator(board);
|
|
39
|
+
temporaryElement = createLineElement(LineShape.elbow, [start, movingPoint], { marker: LineMarkerType.none, connection: sourceRef.connection, boundId: sourceRef?.boundId }, { marker: LineMarkerType.arrow, connection: targetRef.connection, boundId: targetRef?.boundId }, {
|
|
40
|
+
strokeColor: DefaultLineStyle.strokeColor,
|
|
41
|
+
strokeWidth: DefaultLineStyle.strokeWidth
|
|
42
|
+
});
|
|
43
|
+
lineGenerator.draw(temporaryElement, lineShapeG);
|
|
44
|
+
PlaitBoard.getElementActiveHost(board).append(lineShapeG);
|
|
45
|
+
}
|
|
46
|
+
pointerMove(event);
|
|
47
|
+
};
|
|
48
|
+
board.pointerUp = (event) => {
|
|
49
|
+
if (temporaryElement) {
|
|
50
|
+
Transforms.insertNode(board, temporaryElement, [board.children.length]);
|
|
51
|
+
clearSelectedElement(board);
|
|
52
|
+
addSelectedElement(board, temporaryElement);
|
|
53
|
+
BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
|
|
54
|
+
}
|
|
55
|
+
lineShapeG?.remove();
|
|
56
|
+
lineShapeG = null;
|
|
57
|
+
start = null;
|
|
58
|
+
sourceRef = {};
|
|
59
|
+
targetRef = {};
|
|
60
|
+
temporaryElement = null;
|
|
61
|
+
preventTouchMove(board, false);
|
|
62
|
+
pointerUp(event);
|
|
63
|
+
};
|
|
64
|
+
return board;
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLWNyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLWNyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixPQUFPLEVBQ1AsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQWMsY0FBYyxFQUFFLFNBQVMsRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFDaEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFdEQsSUFBSSxLQUFLLEdBQWlCLElBQUksQ0FBQztJQUUvQixJQUFJLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBRXhDLElBQUksU0FBUyxHQUF3QixFQUFFLENBQUM7SUFFeEMsSUFBSSxVQUFVLEdBQXVCLElBQUksQ0FBQztJQUUxQyxJQUFJLGdCQUFnQixHQUFxQixJQUFJLENBQUM7SUFFOUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksYUFBYSxJQUFJLFVBQVUsS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ3JELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRixLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ2QsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNELElBQUksVUFBVSxFQUFFO2dCQUNaLFNBQVMsQ0FBQyxVQUFVLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDNUUsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO2FBQ3JDO1lBRUQsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDeEMsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUN2QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEcsSUFBSSxLQUFLLEVBQUU7WUFDUCxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakUsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUMzRyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELE1BQU0sYUFBYSxHQUFHLElBQUksa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEQsZ0JBQWdCLEdBQUcsaUJBQWlCLENBQ2hDLFNBQVMsQ0FBQyxLQUFLLEVBQ2YsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEVBQ3BCLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFDOUYsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUMvRjtnQkFDSSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztnQkFDekMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7YUFDNUMsQ0FDSixDQUFDO1lBQ0YsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzdEO1FBRUQsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDdEMsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsQixVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN4RSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM1QyxlQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQ3hFO1FBRUQsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JCLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNiLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUUvQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBCb2FyZFRyYW5zZm9ybXMsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNyZWF0ZUcsXG4gICAgcHJldmVudFRvdWNoTW92ZSxcbiAgICB0b1BvaW50LFxuICAgIHRyYW5zZm9ybVBvaW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVIYW5kbGUsIExpbmVNYXJrZXJUeXBlLCBMaW5lU2hhcGUsIFBsYWl0R2VvbWV0cnksIFBsYWl0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHJhd0NyZWF0ZU1vZGUsIGNyZWF0ZUxpbmVFbGVtZW50LCBnZXRDcmVhdGVNb2RlLCB0cmFuc2Zvcm1Qb2ludFRvQ29ubmVjdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdQb2ludGVyVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBEZWZhdWx0TGluZVN0eWxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL2xpbmUnO1xuaW1wb3J0IHsgTGluZVNoYXBlR2VuZXJhdG9yIH0gZnJvbSAnLi4vZ2VuZXJhdG9yL2xpbmUuZ2VuZXJhdG9yJztcbmltcG9ydCB7IGdldEhpdE91dGxpbmVHZW9tZXRyeSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaW5lQ3JlYXRlQnlEcmF3ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyRG93biwgcG9pbnRlck1vdmUsIHBvaW50ZXJVcCB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgc3RhcnQ6IFBvaW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBsZXQgc291cmNlUmVmOiBQYXJ0aWFsPExpbmVIYW5kbGU+ID0ge307XG5cbiAgICBsZXQgdGFyZ2V0UmVmOiBQYXJ0aWFsPExpbmVIYW5kbGU+ID0ge307XG5cbiAgICBsZXQgbGluZVNoYXBlRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGxldCB0ZW1wb3JhcnlFbGVtZW50OiBQbGFpdExpbmUgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY3JlYXRlTW9kZSA9IGdldENyZWF0ZU1vZGUoYm9hcmQpO1xuICAgICAgICBjb25zdCBpc0xpbmVQb2ludGVyID0gUGxhaXRCb2FyZC5pc1BvaW50ZXIoYm9hcmQsIERyYXdQb2ludGVyVHlwZS5saW5lKTtcbiAgICAgICAgaWYgKGlzTGluZVBvaW50ZXIgJiYgY3JlYXRlTW9kZSA9PT0gRHJhd0NyZWF0ZU1vZGUuZHJhdykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICBzdGFydCA9IHBvaW50O1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdE91dGxpbmVHZW9tZXRyeShib2FyZCwgcG9pbnQsIC00KTtcbiAgICAgICAgICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc291cmNlUmVmLmNvbm5lY3Rpb24gPSB0cmFuc2Zvcm1Qb2ludFRvQ29ubmVjdGlvbihib2FyZCwgcG9pbnQsIGhpdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNvdXJjZVJlZi5ib3VuZElkID0gaGl0RWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGxpbmVTaGFwZUc/LnJlbW92ZSgpO1xuICAgICAgICBsaW5lU2hhcGVHID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCBtb3ZpbmdQb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcblxuICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRPdXRsaW5lR2VvbWV0cnkoYm9hcmQsIG1vdmluZ1BvaW50LCAtNCk7XG4gICAgICAgICAgICB0YXJnZXRSZWYuY29ubmVjdGlvbiA9IGhpdEVsZW1lbnQgPyB0cmFuc2Zvcm1Qb2ludFRvQ29ubmVjdGlvbihib2FyZCwgbW92aW5nUG9pbnQsIGhpdEVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGFyZ2V0UmVmLmJvdW5kSWQgPSBoaXRFbGVtZW50ID8gaGl0RWxlbWVudC5pZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVHZW5lcmF0b3IgPSBuZXcgTGluZVNoYXBlR2VuZXJhdG9yKGJvYXJkKTtcbiAgICAgICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBjcmVhdGVMaW5lRWxlbWVudChcbiAgICAgICAgICAgICAgICBMaW5lU2hhcGUuZWxib3csXG4gICAgICAgICAgICAgICAgW3N0YXJ0LCBtb3ZpbmdQb2ludF0sXG4gICAgICAgICAgICAgICAgeyBtYXJrZXI6IExpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IHNvdXJjZVJlZi5jb25uZWN0aW9uLCBib3VuZElkOiBzb3VyY2VSZWY/LmJvdW5kSWQgfSxcbiAgICAgICAgICAgICAgICB7IG1hcmtlcjogTGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IHRhcmdldFJlZi5jb25uZWN0aW9uLCBib3VuZElkOiB0YXJnZXRSZWY/LmJvdW5kSWQgfSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiBEZWZhdWx0TGluZVN0eWxlLnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogRGVmYXVsdExpbmVTdHlsZS5zdHJva2VXaWR0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsaW5lR2VuZXJhdG9yLmRyYXcodGVtcG9yYXJ5RWxlbWVudCwgbGluZVNoYXBlRyk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQobGluZVNoYXBlRyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0ZW1wb3JhcnlFbGVtZW50KSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIHRlbXBvcmFyeUVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50KGJvYXJkKTtcbiAgICAgICAgICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgdGVtcG9yYXJ5RWxlbWVudCk7XG4gICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVTaGFwZUc/LnJlbW92ZSgpO1xuICAgICAgICBsaW5lU2hhcGVHID0gbnVsbDtcbiAgICAgICAgc3RhcnQgPSBudWxsO1xuICAgICAgICBzb3VyY2VSZWYgPSB7fTtcbiAgICAgICAgdGFyZ2V0UmVmID0ge307XG4gICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBmYWxzZSk7XG5cbiAgICAgICAgcG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { withResize } from '@plait/common';
|
|
2
|
+
import { getSelectedLineElements } from '../utils/selected';
|
|
3
|
+
import { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';
|
|
4
|
+
import { getHitOutlineGeometry } from '../utils/position/geometry';
|
|
5
|
+
import { transformPointToConnection } from '../utils';
|
|
6
|
+
import { DrawTransforms } from '../transforms';
|
|
7
|
+
export const withLineResize = (board) => {
|
|
8
|
+
const options = {
|
|
9
|
+
key: 'draw-line',
|
|
10
|
+
canResize: () => {
|
|
11
|
+
return true;
|
|
12
|
+
},
|
|
13
|
+
detect: (point) => {
|
|
14
|
+
const selectedLineElements = getSelectedLineElements(board);
|
|
15
|
+
if (selectedLineElements.length > 0) {
|
|
16
|
+
let result = null;
|
|
17
|
+
selectedLineElements.forEach(value => {
|
|
18
|
+
const handleRef = getHitLineResizeHandleRef(board, value, point);
|
|
19
|
+
if (handleRef) {
|
|
20
|
+
result = {
|
|
21
|
+
element: value,
|
|
22
|
+
handle: handleRef.handle
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
},
|
|
30
|
+
onResize: (resizeRef, resizeState) => {
|
|
31
|
+
let points = [...resizeRef.element.points];
|
|
32
|
+
let source = { ...resizeRef.element.source };
|
|
33
|
+
let target = { ...resizeRef.element.target };
|
|
34
|
+
if (resizeRef.handle === LineResizeHandle.source) {
|
|
35
|
+
points[0] = resizeState.endTransformPoint;
|
|
36
|
+
const hitElement = getHitOutlineGeometry(board, resizeState.endTransformPoint, -4);
|
|
37
|
+
source.connection = hitElement ? transformPointToConnection(board, resizeState.endTransformPoint, hitElement) : undefined;
|
|
38
|
+
source.boundId = hitElement ? hitElement.id : undefined;
|
|
39
|
+
}
|
|
40
|
+
if (resizeRef.handle === LineResizeHandle.target) {
|
|
41
|
+
points[1] = resizeState.endTransformPoint;
|
|
42
|
+
const hitElement = getHitOutlineGeometry(board, resizeState.endTransformPoint, -4);
|
|
43
|
+
target.connection = hitElement ? transformPointToConnection(board, resizeState.endTransformPoint, hitElement) : undefined;
|
|
44
|
+
target.boundId = hitElement ? hitElement.id : undefined;
|
|
45
|
+
}
|
|
46
|
+
DrawTransforms.resizeLine(board, { points, source, target }, resizeRef.path);
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
withResize(board, options);
|
|
50
|
+
return board;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1saW5lLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDaEQsTUFBTSxPQUFPLEdBQW1EO1FBQzVELEdBQUcsRUFBRSxXQUFXO1FBQ2hCLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsTUFBTSxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDckIsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEIsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNqQyxNQUFNLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNqRSxJQUFJLFNBQVMsRUFBRTt3QkFDWCxNQUFNLEdBQUc7NEJBQ0wsT0FBTyxFQUFFLEtBQUs7NEJBQ2QsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO3lCQUMzQixDQUFDO3FCQUNMO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILE9BQU8sTUFBTSxDQUFDO2FBQ2pCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLFNBQWlELEVBQUUsV0FBd0IsRUFBRSxFQUFFO1lBQ3RGLElBQUksTUFBTSxHQUFZLENBQUMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksTUFBTSxHQUFlLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pELElBQUksTUFBTSxHQUFlLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3pELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7Z0JBQzFDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFbkYsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUgsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUMzRDtZQUNELElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7Z0JBQzlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7Z0JBQzFDLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkYsTUFBTSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUgsTUFBTSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUMzRDtZQUNELGNBQWMsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakYsQ0FBQztLQUNKLENBQUM7SUFFRixVQUFVLENBQThCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV4RCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFJlc2l6ZVJlZiwgUmVzaXplU3RhdGUsIFdpdGhSZXNpemVPcHRpb25zLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZExpbmVFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGVkJztcbmltcG9ydCB7IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYsIExpbmVSZXNpemVIYW5kbGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9saW5lJztcbmltcG9ydCB7IGdldEhpdE91dGxpbmVHZW9tZXRyeSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7IExpbmVIYW5kbGUsIFBsYWl0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgdHJhbnNmb3JtUG9pbnRUb0Nvbm5lY3Rpb24gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBEcmF3VHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aExpbmVSZXNpemUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWxpbmUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkZXRlY3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZUVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRMaW5lRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkTGluZUVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZExpbmVFbGVtZW50cy5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0TGluZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgdmFsdWUsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTogaGFuZGxlUmVmLmhhbmRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdExpbmUsIExpbmVSZXNpemVIYW5kbGU+LCByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGxldCBwb2ludHM6IFBvaW50W10gPSBbLi4ucmVzaXplUmVmLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgIGxldCBzb3VyY2U6IExpbmVIYW5kbGUgPSB7IC4uLnJlc2l6ZVJlZi5lbGVtZW50LnNvdXJjZSB9O1xuICAgICAgICAgICAgbGV0IHRhcmdldDogTGluZUhhbmRsZSA9IHsgLi4ucmVzaXplUmVmLmVsZW1lbnQudGFyZ2V0IH07XG4gICAgICAgICAgICBpZiAocmVzaXplUmVmLmhhbmRsZSA9PT0gTGluZVJlc2l6ZUhhbmRsZS5zb3VyY2UpIHtcbiAgICAgICAgICAgICAgICBwb2ludHNbMF0gPSByZXNpemVTdGF0ZS5lbmRUcmFuc2Zvcm1Qb2ludDtcbiAgICAgICAgICAgICAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0T3V0bGluZUdlb21ldHJ5KGJvYXJkLCByZXNpemVTdGF0ZS5lbmRUcmFuc2Zvcm1Qb2ludCwgLTQpO1xuXG4gICAgICAgICAgICAgICAgc291cmNlLmNvbm5lY3Rpb24gPSBoaXRFbGVtZW50ID8gdHJhbnNmb3JtUG9pbnRUb0Nvbm5lY3Rpb24oYm9hcmQsIHJlc2l6ZVN0YXRlLmVuZFRyYW5zZm9ybVBvaW50LCBoaXRFbGVtZW50KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzb3VyY2UuYm91bmRJZCA9IGhpdEVsZW1lbnQgPyBoaXRFbGVtZW50LmlkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5oYW5kbGUgPT09IExpbmVSZXNpemVIYW5kbGUudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzWzFdID0gcmVzaXplU3RhdGUuZW5kVHJhbnNmb3JtUG9pbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdE91dGxpbmVHZW9tZXRyeShib2FyZCwgcmVzaXplU3RhdGUuZW5kVHJhbnNmb3JtUG9pbnQsIC00KTtcbiAgICAgICAgICAgICAgICB0YXJnZXQuY29ubmVjdGlvbiA9IGhpdEVsZW1lbnQgPyB0cmFuc2Zvcm1Qb2ludFRvQ29ubmVjdGlvbihib2FyZCwgcmVzaXplU3RhdGUuZW5kVHJhbnNmb3JtUG9pbnQsIGhpdEVsZW1lbnQpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRhcmdldC5ib3VuZElkID0gaGl0RWxlbWVudCA/IGhpdEVsZW1lbnQuaWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5yZXNpemVMaW5lKGJvYXJkLCB7IHBvaW50cywgc291cmNlLCB0YXJnZXQgfSwgcmVzaXplUmVmLnBhdGgpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHdpdGhSZXNpemU8UGxhaXRMaW5lLCBMaW5lUmVzaXplSGFuZGxlPihib2FyZCwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitElement, getHitElements, getNearestPointBetweenPointAndSegments, toPoint, transformPoint } from '@plait/core';
|
|
2
|
+
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
+
import { Node } from 'slate';
|
|
4
|
+
import { getElbowPoints, getHitLineTextIndex, isHitLineText } from '../utils';
|
|
5
|
+
import { getRatioByPoint } from '@plait/common';
|
|
6
|
+
import { buildText } from '@plait/text';
|
|
7
|
+
import { DrawTransforms } from '../transforms';
|
|
8
|
+
export const withLineText = (board) => {
|
|
9
|
+
const { dblclick } = board;
|
|
10
|
+
board.dblclick = (event) => {
|
|
11
|
+
const clickPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
12
|
+
const hitTarget = getHitElements(board, { ranges: [{ anchor: clickPoint, focus: clickPoint }] }, (element) => {
|
|
13
|
+
return PlaitDrawElement.isLine(element);
|
|
14
|
+
})[0];
|
|
15
|
+
if (hitTarget) {
|
|
16
|
+
const points = getElbowPoints(board, hitTarget);
|
|
17
|
+
const point = getNearestPointBetweenPointAndSegments(clickPoint, points);
|
|
18
|
+
const texts = hitTarget.texts?.length ? [...hitTarget.texts] : [];
|
|
19
|
+
const textIndex = getHitLineTextIndex(board, hitTarget, clickPoint);
|
|
20
|
+
const isHitText = isHitLineText(board, hitTarget, clickPoint);
|
|
21
|
+
if (isHitText) {
|
|
22
|
+
editHandle(board, hitTarget, textIndex);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const ratio = getRatioByPoint(points, point);
|
|
26
|
+
texts.push({
|
|
27
|
+
text: buildText('文本'),
|
|
28
|
+
position: ratio,
|
|
29
|
+
width: 28,
|
|
30
|
+
height: 20
|
|
31
|
+
});
|
|
32
|
+
DrawTransforms.setLineTexts(board, hitTarget, texts);
|
|
33
|
+
setTimeout(() => {
|
|
34
|
+
const hitComponent = PlaitElement.getComponent(hitTarget);
|
|
35
|
+
editHandle(board, hitTarget, hitComponent.textManages.length - 1, true);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
dblclick(event);
|
|
40
|
+
};
|
|
41
|
+
return board;
|
|
42
|
+
};
|
|
43
|
+
function editHandle(board, element, manageIndex, isFirstEdit = false) {
|
|
44
|
+
const hitComponent = PlaitElement.getComponent(element);
|
|
45
|
+
const textManage = hitComponent.textManages[manageIndex];
|
|
46
|
+
const originText = textManage.componentRef.instance.children;
|
|
47
|
+
textManage.edit((origin, descendant) => {
|
|
48
|
+
const text = Node.string(descendant[0]);
|
|
49
|
+
const shouldRemove = (isFirstEdit && originText === descendant) || !text;
|
|
50
|
+
if (shouldRemove) {
|
|
51
|
+
DrawTransforms.removeLineText(board, element, manageIndex);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1saW5lLXRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtbGluZS10ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBQ1YsWUFBWSxFQUVaLGNBQWMsRUFDZCxzQ0FBc0MsRUFDdEMsT0FBTyxFQUNQLGNBQWMsRUFDakIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxJQUFJLEVBQVEsTUFBTSxPQUFPLENBQUM7QUFDbkMsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzlDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFM0IsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNuQyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0YsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBcUIsRUFBRSxFQUFFO1lBQ3ZILE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBYyxDQUFDO1FBQ25CLElBQUksU0FBUyxFQUFFO1lBQ1gsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRCxNQUFNLEtBQUssR0FBRyxzQ0FBc0MsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNsRSxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzlELElBQUksU0FBUyxFQUFFO2dCQUNYLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQzNDO2lCQUFNO2dCQUNILE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxJQUFJLENBQUM7b0JBQ1AsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUM7b0JBQ3JCLFFBQVEsRUFBRSxLQUFLO29CQUNmLEtBQUssRUFBRSxFQUFFO29CQUNULE1BQU0sRUFBRSxFQUFFO2lCQUNiLENBQUMsQ0FBQztnQkFDSCxjQUFjLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3JELFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQWtCLENBQUM7b0JBQzNFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDNUUsQ0FBQyxDQUFDLENBQUM7YUFDTjtTQUNKO1FBRUQsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLFNBQVMsVUFBVSxDQUFDLEtBQWlCLEVBQUUsT0FBa0IsRUFBRSxXQUFtQixFQUFFLGNBQXVCLEtBQUs7SUFDeEcsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQWtCLENBQUM7SUFDekUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6RCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7SUFFN0QsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRTtRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBVyxJQUFJLFVBQVUsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN6RSxJQUFJLFlBQVksRUFBRTtZQUNkLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztTQUM5RDtJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBnZXRIaXRFbGVtZW50cyxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICB0b1BvaW50LFxuICAgIHRyYW5zZm9ybVBvaW50XG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0TGluZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTm9kZSwgVGV4dCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGdldEVsYm93UG9pbnRzLCBnZXRIaXRMaW5lVGV4dEluZGV4LCBpc0hpdExpbmVUZXh0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UmF0aW9CeVBvaW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBidWlsZFRleHQgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5pbXBvcnQgeyBMaW5lQ29tcG9uZW50IH0gZnJvbSAnLi4vbGluZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJhd1RyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IHdpdGhMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgZGJsY2xpY2sgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZGJsY2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgY2xpY2tQb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgY29uc3QgaGl0VGFyZ2V0ID0gZ2V0SGl0RWxlbWVudHMoYm9hcmQsIHsgcmFuZ2VzOiBbeyBhbmNob3I6IGNsaWNrUG9pbnQsIGZvY3VzOiBjbGlja1BvaW50IH1dIH0sIChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KTtcbiAgICAgICAgfSlbMF0gYXMgUGxhaXRMaW5lO1xuICAgICAgICBpZiAoaGl0VGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRFbGJvd1BvaW50cyhib2FyZCwgaGl0VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMoY2xpY2tQb2ludCwgcG9pbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRzID0gaGl0VGFyZ2V0LnRleHRzPy5sZW5ndGggPyBbLi4uaGl0VGFyZ2V0LnRleHRzXSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgdGV4dEluZGV4ID0gZ2V0SGl0TGluZVRleHRJbmRleChib2FyZCwgaGl0VGFyZ2V0LCBjbGlja1BvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0VGV4dCA9IGlzSGl0TGluZVRleHQoYm9hcmQsIGhpdFRhcmdldCwgY2xpY2tQb2ludCk7XG4gICAgICAgICAgICBpZiAoaXNIaXRUZXh0KSB7XG4gICAgICAgICAgICAgICAgZWRpdEhhbmRsZShib2FyZCwgaGl0VGFyZ2V0LCB0ZXh0SW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXRpbyA9IGdldFJhdGlvQnlQb2ludChwb2ludHMsIHBvaW50KTtcbiAgICAgICAgICAgICAgICB0ZXh0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogYnVpbGRUZXh0KCfmlofmnKwnKSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJhdGlvLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMjBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5zZXRMaW5lVGV4dHMoYm9hcmQsIGhpdFRhcmdldCwgdGV4dHMpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaXRDb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGhpdFRhcmdldCkgYXMgTGluZUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgZWRpdEhhbmRsZShib2FyZCwgaGl0VGFyZ2V0LCBoaXRDb21wb25lbnQudGV4dE1hbmFnZXMubGVuZ3RoIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYmxjbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmZ1bmN0aW9uIGVkaXRIYW5kbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0TGluZSwgbWFuYWdlSW5kZXg6IG51bWJlciwgaXNGaXJzdEVkaXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGhpdENvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoZWxlbWVudCkgYXMgTGluZUNvbXBvbmVudDtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gaGl0Q29tcG9uZW50LnRleHRNYW5hZ2VzW21hbmFnZUluZGV4XTtcbiAgICBjb25zdCBvcmlnaW5UZXh0ID0gdGV4dE1hbmFnZS5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2hpbGRyZW47XG5cbiAgICB0ZXh0TWFuYWdlLmVkaXQoKG9yaWdpbiwgZGVzY2VuZGFudCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXh0ID0gTm9kZS5zdHJpbmcoZGVzY2VuZGFudFswXSk7XG4gICAgICAgIGNvbnN0IHNob3VsZFJlbW92ZSA9IChpc0ZpcnN0RWRpdCAmJiBvcmlnaW5UZXh0ID09PSBkZXNjZW5kYW50KSB8fCAhdGV4dDtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZSkge1xuICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMucmVtb3ZlTGluZVRleHQoYm9hcmQsIGVsZW1lbnQsIG1hbmFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './interfaces';
|
|
2
|
+
export * from './plugins/with-draw';
|
|
3
|
+
export * from './constants';
|
|
4
|
+
export * from './utils';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvd2l0aC1kcmF3JztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuIl19
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Point, Transforms } from '@plait/core';
|
|
2
|
+
import { PlaitGeometry } from '../interfaces';
|
|
3
|
+
import { ShapeDefaultSpace } from '../constants';
|
|
4
|
+
import { AlignEditor, Alignment } from '@plait/text';
|
|
5
|
+
const normalizePoints = (board, element, width, textHeight) => {
|
|
6
|
+
let points = element.points;
|
|
7
|
+
let autoSize = element.autoSize;
|
|
8
|
+
const defaultSpace = ShapeDefaultSpace.rectangleAndText;
|
|
9
|
+
if (autoSize) {
|
|
10
|
+
const editor = PlaitGeometry.getTextEditor(element);
|
|
11
|
+
if (AlignEditor.isActive(editor, Alignment.right)) {
|
|
12
|
+
points = [
|
|
13
|
+
[points[1][0] - (width + defaultSpace * 2), points[0][1]],
|
|
14
|
+
[points[1][0], points[0][1] + textHeight]
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
else if (AlignEditor.isActive(editor, Alignment.center)) {
|
|
18
|
+
const oldWidth = Math.abs(points[0][0] - points[1][0]);
|
|
19
|
+
const offset = (width - oldWidth) / 2;
|
|
20
|
+
points = [
|
|
21
|
+
[points[0][0] - offset - defaultSpace, points[0][1]],
|
|
22
|
+
[points[1][0] + offset + defaultSpace, points[0][1] + textHeight]
|
|
23
|
+
];
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
points = [points[0], [points[0][0] + width + defaultSpace * 2, points[0][1] + textHeight]];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return { points };
|
|
30
|
+
};
|
|
31
|
+
export const setText = (board, element, text, width, textHeight) => {
|
|
32
|
+
const newElement = {
|
|
33
|
+
text,
|
|
34
|
+
textHeight,
|
|
35
|
+
...normalizePoints(board, element, width, textHeight)
|
|
36
|
+
};
|
|
37
|
+
const path = board.children.findIndex(child => child === element);
|
|
38
|
+
Transforms.setNode(board, newElement, [path]);
|
|
39
|
+
};
|
|
40
|
+
export const setTextSize = (board, element, textWidth, textHeight) => {
|
|
41
|
+
if (element.autoSize) {
|
|
42
|
+
const newElement = {
|
|
43
|
+
textHeight,
|
|
44
|
+
...normalizePoints(board, element, textWidth, textHeight)
|
|
45
|
+
};
|
|
46
|
+
const isPointsEqual = Point.isEquals(element.points[0], newElement.points[0]) && Point.isEquals(element.points[1], newElement.points[1]);
|
|
47
|
+
const isTextHeightEqual = Math.round(textHeight) === Math.round(element.textHeight);
|
|
48
|
+
if (!isPointsEqual || !isTextHeightEqual) {
|
|
49
|
+
const path = board.children.findIndex(child => child === element);
|
|
50
|
+
Transforms.setNode(board, newElement, [path]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnktdGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3RyYW5zZm9ybXMvZ2VvbWV0cnktdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBMEMsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFckQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQXNCLEVBQUUsS0FBYSxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUNyRyxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzVCLElBQUksUUFBUSxHQUFJLE9BQXFCLENBQUMsUUFBUSxDQUFDO0lBQy9DLE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO0lBRXhELElBQUksUUFBUSxFQUFFO1FBQ1YsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMvQyxNQUFNLEdBQUc7Z0JBQ0wsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekQsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxD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LENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDakQ7S0FDSjtBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBUcmFuc2Zvcm1zIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFBsYWl0R2VvbWV0cnksIFBsYWl0VGV4dCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGVmYXVsdFRleHRQcm9wZXJ0eSwgR2VvbWV0cnlUaHJlc2hvbGQsIFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IEFsaWduRWRpdG9yLCBBbGlnbm1lbnQgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5cbmNvbnN0IG5vcm1hbGl6ZVBvaW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRHZW9tZXRyeSwgd2lkdGg6IG51bWJlciwgdGV4dEhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgbGV0IHBvaW50cyA9IGVsZW1lbnQucG9pbnRzO1xuICAgIGxldCBhdXRvU2l6ZSA9IChlbGVtZW50IGFzIFBsYWl0VGV4dCkuYXV0b1NpemU7XG4gICAgY29uc3QgZGVmYXVsdFNwYWNlID0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dDtcblxuICAgIGlmIChhdXRvU2l6ZSkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSBQbGFpdEdlb21ldHJ5LmdldFRleHRFZGl0b3IoZWxlbWVudCk7XG4gICAgICAgIGlmIChBbGlnbkVkaXRvci5pc0FjdGl2ZShlZGl0b3IsIEFsaWdubWVudC5yaWdodCkpIHtcbiAgICAgICAgICAgIHBvaW50cyA9IFtcbiAgICAgICAgICAgICAgICBbcG9pbnRzWzFdWzBdIC0gKHdpZHRoICsgZGVmYXVsdFNwYWNlICogMiksIHBvaW50c1swXVsxXV0sXG4gICAgICAgICAgICAgICAgW3BvaW50c1sxXVswXSwgcG9pbnRzWzBdWzFdICsgdGV4dEhlaWdodF1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSBpZiAoQWxpZ25FZGl0b3IuaXNBY3RpdmUoZWRpdG9yLCBBbGlnbm1lbnQuY2VudGVyKSkge1xuICAgICAgICAgICAgY29uc3Qgb2xkV2lkdGggPSBNYXRoLmFicyhwb2ludHNbMF1bMF0gLSBwb2ludHNbMV1bMF0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gKHdpZHRoIC0gb2xkV2lkdGgpIC8gMjtcbiAgICAgICAgICAgIHBvaW50cyA9IFtcbiAgICAgICAgICAgICAgICBbcG9pbnRzWzBdWzBdIC0gb2Zmc2V0IC0gZGVmYXVsdFNwYWNlLCBwb2ludHNbMF1bMV1dLFxuICAgICAgICAgICAgICAgIFtwb2ludHNbMV1bMF0gKyBvZmZzZXQgKyBkZWZhdWx0U3BhY2UsIHBvaW50c1swXVsxXSArIHRleHRIZWlnaHRdXG4gICAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcG9pbnRzID0gW3BvaW50c1swXSwgW3BvaW50c1swXVswXSArIHdpZHRoICsgZGVmYXVsdFNwYWNlICogMiwgcG9pbnRzWzBdWzFdICsgdGV4dEhlaWdodF1dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcG9pbnRzIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRHZW9tZXRyeSwgdGV4dDogRWxlbWVudCwgd2lkdGg6IG51bWJlciwgdGV4dEhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgdGV4dEhlaWdodCxcbiAgICAgICAgLi4ubm9ybWFsaXplUG9pbnRzKGJvYXJkLCBlbGVtZW50LCB3aWR0aCwgdGV4dEhlaWdodClcbiAgICB9O1xuXG4gICAgY29uc3QgcGF0aCA9IGJvYXJkLmNoaWxkcmVuLmZpbmRJbmRleChjaGlsZCA9PiBjaGlsZCA9PT0gZWxlbWVudCk7XG5cbiAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIFtwYXRoXSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VGV4dFNpemUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIHRleHRXaWR0aDogbnVtYmVyLCB0ZXh0SGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoKGVsZW1lbnQgYXMgUGxhaXRUZXh0KS5hdXRvU2l6ZSkge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICAgICAgdGV4dEhlaWdodCxcbiAgICAgICAgICAgIC4uLm5vcm1hbGl6ZVBvaW50cyhib2FyZCwgZWxlbWVudCwgdGV4dFdpZHRoLCB0ZXh0SGVpZ2h0KVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpc1BvaW50c0VxdWFsID1cbiAgICAgICAgICAgIFBvaW50LmlzRXF1YWxzKGVsZW1lbnQucG9pbnRzWzBdLCBuZXdFbGVtZW50LnBvaW50c1swXSkgJiYgUG9pbnQuaXNFcXVhbHMoZWxlbWVudC5wb2ludHNbMV0sIG5ld0VsZW1lbnQucG9pbnRzWzFdKTtcbiAgICAgICAgY29uc3QgaXNUZXh0SGVpZ2h0RXF1YWwgPSBNYXRoLnJvdW5kKHRleHRIZWlnaHQpID09PSBNYXRoLnJvdW5kKGVsZW1lbnQudGV4dEhlaWdodCk7XG4gICAgICAgIGlmICghaXNQb2ludHNFcXVhbCB8fCAhaXNUZXh0SGVpZ2h0RXF1YWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoY2hpbGQgPT4gY2hpbGQgPT09IGVsZW1lbnQpO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBbcGF0aF0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Transforms, addSelectedElement, clearSelectedElement, PlaitNode } from '@plait/core';
|
|
2
|
+
import { DefaultGeometryProperty } from '../constants';
|
|
3
|
+
import { GeometryShape, PlaitDrawElement } from '../interfaces';
|
|
4
|
+
import { createGeometryElement } from '../utils';
|
|
5
|
+
import { normalizeShapePoints } from '@plait/common';
|
|
6
|
+
export const insertGeometry = (board, points, shape) => {
|
|
7
|
+
let newElement = createGeometryElement(shape, points, '', {
|
|
8
|
+
strokeColor: DefaultGeometryProperty.strokeColor,
|
|
9
|
+
strokeWidth: DefaultGeometryProperty.strokeWidth
|
|
10
|
+
});
|
|
11
|
+
Transforms.insertNode(board, newElement, [board.children.length]);
|
|
12
|
+
clearSelectedElement(board);
|
|
13
|
+
addSelectedElement(board, newElement);
|
|
14
|
+
};
|
|
15
|
+
export const insertText = (board, points, text = '文本') => {
|
|
16
|
+
let newElement = createGeometryElement(GeometryShape.text, points, text);
|
|
17
|
+
Transforms.insertNode(board, newElement, [board.children.length]);
|
|
18
|
+
clearSelectedElement(board);
|
|
19
|
+
addSelectedElement(board, newElement);
|
|
20
|
+
};
|
|
21
|
+
export const resizeGeometry = (board, points, textHeight, path) => {
|
|
22
|
+
const normalizePoints = normalizeShapePoints(points);
|
|
23
|
+
const element = PlaitNode.get(board, path);
|
|
24
|
+
const newHeight = textHeight / board.viewport.zoom;
|
|
25
|
+
const newProperties = { points: normalizePoints, textHeight: newHeight };
|
|
26
|
+
if (PlaitDrawElement.isText(element) && element.autoSize) {
|
|
27
|
+
newProperties.autoSize = false;
|
|
28
|
+
}
|
|
29
|
+
Transforms.setNode(board, newProperties, path);
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy90cmFuc2Zvcm1zL2dlb21ldHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxVQUFVLEVBQVMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQVEsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsTUFBc0IsRUFBRSxLQUFvQixFQUFFLEVBQUU7SUFDOUYsSUFBSSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7UUFDdEQsV0FBVyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7UUFDaEQsV0FBVyxFQUFFLHVCQUF1QixDQUFDLFdBQVc7S0FDbkQsQ0FBa0IsQ0FBQztJQUVwQixVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsTUFBc0IsRUFBRSxPQUF5QixJQUFJLEVBQUUsRUFBRTtJQUNuRyxJQUFJLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQWtCLENBQUM7SUFDMUYsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLGtCQUFrQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMxQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE1BQXNCLEVBQUUsVUFBa0IsRUFBRSxJQUFVLEVBQUUsRUFBRTtJQUN4RyxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDbkQsTUFBTSxhQUFhLEdBQUcsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN6RSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQ3JELGFBQW9DLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztLQUMxRDtJQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBUcmFuc2Zvcm1zLCBQb2ludCwgYWRkU2VsZWN0ZWRFbGVtZW50LCBjbGVhclNlbGVjdGVkRWxlbWVudCwgUGF0aCwgUGxhaXROb2RlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRGVmYXVsdEdlb21ldHJ5UHJvcGVydHkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgR2VvbWV0cnlTaGFwZSwgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSwgUGxhaXRUZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBjcmVhdGVHZW9tZXRyeUVsZW1lbnQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgbm9ybWFsaXplU2hhcGVQb2ludHMgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGluc2VydEdlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludHM6IFtQb2ludCwgUG9pbnRdLCBzaGFwZTogR2VvbWV0cnlTaGFwZSkgPT4ge1xuICAgIGxldCBuZXdFbGVtZW50ID0gY3JlYXRlR2VvbWV0cnlFbGVtZW50KHNoYXBlLCBwb2ludHMsICcnLCB7XG4gICAgICAgIHN0cm9rZUNvbG9yOiBEZWZhdWx0R2VvbWV0cnlQcm9wZXJ0eS5zdHJva2VDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IERlZmF1bHRHZW9tZXRyeVByb3BlcnR5LnN0cm9rZVdpZHRoXG4gICAgfSkgYXMgUGxhaXRHZW9tZXRyeTtcblxuICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgW2JvYXJkLmNoaWxkcmVuLmxlbmd0aF0pO1xuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50KGJvYXJkKTtcbiAgICBhZGRTZWxlY3RlZEVsZW1lbnQoYm9hcmQsIG5ld0VsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydFRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50czogW1BvaW50LCBQb2ludF0sIHRleHQ6IHN0cmluZyB8IEVsZW1lbnQgPSAn5paH5pysJykgPT4ge1xuICAgIGxldCBuZXdFbGVtZW50ID0gY3JlYXRlR2VvbWV0cnlFbGVtZW50KEdlb21ldHJ5U2hhcGUudGV4dCwgcG9pbnRzLCB0ZXh0KSBhcyBQbGFpdEdlb21ldHJ5O1xuICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgW2JvYXJkLmNoaWxkcmVuLmxlbmd0aF0pO1xuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50KGJvYXJkKTtcbiAgICBhZGRTZWxlY3RlZEVsZW1lbnQoYm9hcmQsIG5ld0VsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc2l6ZUdlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludHM6IFtQb2ludCwgUG9pbnRdLCB0ZXh0SGVpZ2h0OiBudW1iZXIsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVQb2ludHMgPSBub3JtYWxpemVTaGFwZVBvaW50cyhwb2ludHMpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBQbGFpdE5vZGUuZ2V0KGJvYXJkLCBwYXRoKTtcbiAgICBjb25zdCBuZXdIZWlnaHQgPSB0ZXh0SGVpZ2h0IC8gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0geyBwb2ludHM6IG5vcm1hbGl6ZVBvaW50cywgdGV4dEhlaWdodDogbmV3SGVpZ2h0IH07XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpICYmIGVsZW1lbnQuYXV0b1NpemUpIHtcbiAgICAgICAgKG5ld1Byb3BlcnRpZXMgYXMgUGFydGlhbDxQbGFpdFRleHQ+KS5hdXRvU2l6ZSA9IGZhbHNlO1xuICAgIH1cbiAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld1Byb3BlcnRpZXMsIHBhdGgpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { insertText, insertGeometry, resizeGeometry } from './geometry';
|
|
2
|
+
import { setText, setTextSize } from './geometry-text';
|
|
3
|
+
import { removeLineText, resizeLine, setLineTexts } from './line';
|
|
4
|
+
export const DrawTransforms = {
|
|
5
|
+
setText,
|
|
6
|
+
insertGeometry,
|
|
7
|
+
resizeGeometry,
|
|
8
|
+
insertText,
|
|
9
|
+
setTextSize,
|
|
10
|
+
resizeLine,
|
|
11
|
+
setLineTexts,
|
|
12
|
+
removeLineText
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVsRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsT0FBTztJQUNQLGNBQWM7SUFDZCxjQUFjO0lBQ2QsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsWUFBWTtJQUNaLGNBQWM7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluc2VydFRleHQsIGluc2VydEdlb21ldHJ5LCByZXNpemVHZW9tZXRyeSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgc2V0VGV4dCwgc2V0VGV4dFNpemUgfSBmcm9tICcuL2dlb21ldHJ5LXRleHQnO1xuaW1wb3J0IHsgcmVtb3ZlTGluZVRleHQsIHJlc2l6ZUxpbmUsIHNldExpbmVUZXh0cyB9IGZyb20gJy4vbGluZSc7XG5cbmV4cG9ydCBjb25zdCBEcmF3VHJhbnNmb3JtcyA9IHtcbiAgICBzZXRUZXh0LFxuICAgIGluc2VydEdlb21ldHJ5LFxuICAgIHJlc2l6ZUdlb21ldHJ5LFxuICAgIGluc2VydFRleHQsXG4gICAgc2V0VGV4dFNpemUsXG4gICAgcmVzaXplTGluZSxcbiAgICBzZXRMaW5lVGV4dHMsXG4gICAgcmVtb3ZlTGluZVRleHRcbn07XG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { PlaitBoard, Transforms } from '@plait/core';
|
|
2
|
+
export const resizeLine = (board, options, path) => {
|
|
3
|
+
Transforms.setNode(board, options, path);
|
|
4
|
+
};
|
|
5
|
+
export const setLineTexts = (board, element, texts) => {
|
|
6
|
+
const path = PlaitBoard.findPath(board, element);
|
|
7
|
+
Transforms.setNode(board, { texts }, path);
|
|
8
|
+
};
|
|
9
|
+
export const removeLineText = (board, element, index) => {
|
|
10
|
+
const path = PlaitBoard.findPath(board, element);
|
|
11
|
+
const texts = element.texts?.length ? [...element.texts] : [];
|
|
12
|
+
const newTexts = [...texts];
|
|
13
|
+
newTexts.splice(index, 1);
|
|
14
|
+
Transforms.setNode(board, { texts: newTexts }, path);
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3RyYW5zZm9ybXMvbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVEsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUczRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQTJCLEVBQUUsSUFBVSxFQUFFLEVBQUU7SUFDckYsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBa0IsRUFBRSxLQUFpQixFQUFFLEVBQUU7SUFDckYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQWtCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDbkYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDNUIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUGxhaXRCb2FyZCwgVHJhbnNmb3JtcyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IExpbmVUZXh0LCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IHJlc2l6ZUxpbmUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9wdGlvbnM6IFBhcnRpYWw8UGxhaXRMaW5lPiwgcGF0aDogUGF0aCkgPT4ge1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgb3B0aW9ucywgcGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0TGluZVRleHRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdExpbmUsIHRleHRzOiBMaW5lVGV4dFtdKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyB0ZXh0cyB9LCBwYXRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMaW5lVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRMaW5lLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IHRleHRzID0gZWxlbWVudC50ZXh0cz8ubGVuZ3RoID8gWy4uLmVsZW1lbnQudGV4dHNdIDogW107XG4gICAgY29uc3QgbmV3VGV4dHMgPSBbLi4udGV4dHNdO1xuICAgIG5ld1RleHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHRleHRzOiBuZXdUZXh0cyB9LCBwYXRoKTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Transforms, idCreator } from '@plait/core';
|
|
2
|
+
import { PlaitDrawElement } from '../interfaces';
|
|
3
|
+
export const buildClipboardData = (board, elements, startPoint) => {
|
|
4
|
+
return elements.map(element => {
|
|
5
|
+
if (PlaitDrawElement.isGeometry(element)) {
|
|
6
|
+
const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);
|
|
7
|
+
return { ...element, points };
|
|
8
|
+
}
|
|
9
|
+
if (PlaitDrawElement.isLine(element)) {
|
|
10
|
+
const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);
|
|
11
|
+
return { ...element, points };
|
|
12
|
+
}
|
|
13
|
+
return element;
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
export const insertClipboardData = (board, elements, startPoint) => {
|
|
17
|
+
elements.forEach(element => {
|
|
18
|
+
element.id = idCreator();
|
|
19
|
+
element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]);
|
|
20
|
+
Transforms.insertNode(board, element, [board.children.length]);
|
|
21
|
+
});
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxRQUE0QixFQUFFLFVBQWlCLEVBQUUsRUFBRTtJQUNyRyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUIsSUFBSSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBbUIsQ0FBQztTQUNsRDtRQUNELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxNQUFNLEVBQWUsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQTRCLEVBQUUsVUFBaUIsRUFBRSxFQUFFO0lBQ3RHLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25HLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBUcmFuc2Zvcm1zLCBpZENyZWF0b3IgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdERyYXdFbGVtZW50LCBQbGFpdEdlb21ldHJ5LCBQbGFpdExpbmUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludHMgPSBlbGVtZW50LnBvaW50cy5tYXAocG9pbnQgPT4gW3BvaW50WzBdIC0gc3RhcnRQb2ludFswXSwgcG9pbnRbMV0gLSBzdGFydFBvaW50WzFdXSk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5lbGVtZW50LCBwb2ludHMgfSBhcyBQbGFpdEdlb21ldHJ5O1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzTGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMubWFwKHBvaW50ID0+IFtwb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0sIHBvaW50WzFdIC0gc3RhcnRQb2ludFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWxlbWVudCwgcG9pbnRzIH0gYXMgUGxhaXRMaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENsaXBib2FyZERhdGEgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdERyYXdFbGVtZW50W10sIHN0YXJ0UG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5pZCA9IGlkQ3JlYXRvcigpO1xuICAgICAgICBlbGVtZW50LnBvaW50cyA9IGVsZW1lbnQucG9pbnRzLm1hcChwb2ludCA9PiBbc3RhcnRQb2ludFswXSArIHBvaW50WzBdLCBzdGFydFBvaW50WzFdICsgcG9pbnRbMV1dKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgfSk7XG59O1xuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export var DrawCreateMode;
|
|
2
|
+
(function (DrawCreateMode) {
|
|
3
|
+
DrawCreateMode["drag"] = "drag";
|
|
4
|
+
DrawCreateMode["draw"] = "draw";
|
|
5
|
+
})(DrawCreateMode || (DrawCreateMode = {}));
|
|
6
|
+
const BOARD_TO_CREATE_MODE = new WeakMap();
|
|
7
|
+
export const getCreateMode = (board) => {
|
|
8
|
+
return BOARD_TO_CREATE_MODE.get(board);
|
|
9
|
+
};
|
|
10
|
+
export const setCreateMode = (board, mode) => {
|
|
11
|
+
BOARD_TO_CREATE_MODE.set(board, mode);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9jcmVhdGUtbW9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3RCLCtCQUFlLENBQUE7SUFDZiwrQkFBZSxDQUFBO0FBQ25CLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQUVELE1BQU0sb0JBQW9CLEdBQXdDLElBQUksT0FBTyxFQUFFLENBQUM7QUFFaEYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQy9DLE9BQU8sb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBb0IsRUFBRSxFQUFFO0lBQ3JFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgcHJldmVudFRvdWNoTW92ZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGVudW0gRHJhd0NyZWF0ZU1vZGUge1xuICAgICdkcmFnJyA9ICdkcmFnJyxcbiAgICAnZHJhdycgPSAnZHJhdydcbn1cblxuY29uc3QgQk9BUkRfVE9fQ1JFQVRFX01PREU6IFdlYWtNYXA8UGxhaXRCb2FyZCwgRHJhd0NyZWF0ZU1vZGU+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNvbnN0IGdldENyZWF0ZU1vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fQ1JFQVRFX01PREUuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDcmVhdGVNb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBtb2RlOiBEcmF3Q3JlYXRlTW9kZSkgPT4ge1xuICAgIEJPQVJEX1RPX0NSRUFURV9NT0RFLnNldChib2FyZCwgbW9kZSk7XG59O1xuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, isPointInPolygon } from '@plait/core';
|
|
2
|
+
export const DiamondEngine = {
|
|
3
|
+
draw(board, rectangle, options) {
|
|
4
|
+
const points = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
5
|
+
const rs = PlaitBoard.getRoughSVG(board);
|
|
6
|
+
return rs.polygon(points, { ...options, fillStyle: 'solid' });
|
|
7
|
+
},
|
|
8
|
+
isHit(rectangle, point) {
|
|
9
|
+
const controlPoints = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
10
|
+
return isPointInPolygon(point, controlPoints);
|
|
11
|
+
},
|
|
12
|
+
getNearestPoint(rectangle, point) {
|
|
13
|
+
const connectorPoints = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
14
|
+
return getNearestPointBetweenPointAndSegments(point, connectorPoints);
|
|
15
|
+
},
|
|
16
|
+
getConnectorPoints(rectangle) {
|
|
17
|
+
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbW9uZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9kaWFtb25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsZUFBZSxFQUFFLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZ0I7SUFDdEMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDMUMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFDRCxlQUFlLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQ3BELE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RSxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsU0FBMEI7UUFDekMsT0FBTyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cywgaXNQb2ludEluUG9seWdvbiB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5cbmV4cG9ydCBjb25zdCBEaWFtb25kRW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICByZXR1cm4gcnMucG9seWdvbihwb2ludHMsIHsgLi4ub3B0aW9ucywgZmlsbFN0eWxlOiAnc29saWQnIH0pO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGlzUG9pbnRJblBvbHlnb24ocG9pbnQsIGNvbnRyb2xQb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBjb25uZWN0b3JQb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH1cbn07XG4iXX0=
|