@plait/common 0.48.0 → 0.49.0
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/esm2022/plugins/with-resize.mjs +5 -6
- package/esm2022/transforms/align.mjs +42 -2
- package/esm2022/transforms/index.mjs +2 -1
- package/esm2022/transforms/text.mjs +62 -0
- package/fesm2022/plait-common.mjs +106 -8
- package/fesm2022/plait-common.mjs.map +1 -1
- package/package.json +1 -1
- package/transforms/align.d.ts +4 -0
- package/transforms/index.d.ts +1 -0
- package/transforms/text.d.ts +9 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MERGING, PRESS_AND_MOVE_BUFFER, PlaitBoard, PlaitPointerType, distanceBetweenPointAndPoint, isMainPointer, preventTouchMove, handleTouchTarget, throttleRAF,
|
|
1
|
+
import { MERGING, PRESS_AND_MOVE_BUFFER, PlaitBoard, PlaitPointerType, distanceBetweenPointAndPoint, isMainPointer, preventTouchMove, handleTouchTarget, throttleRAF, toViewBoxPoint, toHostPoint } from '@plait/core';
|
|
2
2
|
import { addResizing, isResizing, removeResizing } from '../utils/resize';
|
|
3
3
|
const generalCanResize = (board, event) => {
|
|
4
4
|
return (!PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection));
|
|
@@ -14,7 +14,7 @@ export const withResize = (board, options) => {
|
|
|
14
14
|
pointerDown(event);
|
|
15
15
|
return;
|
|
16
16
|
}
|
|
17
|
-
const point =
|
|
17
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
18
18
|
resizeDetectResult = options.detect(point);
|
|
19
19
|
if (resizeDetectResult) {
|
|
20
20
|
if (resizeDetectResult.cursorClass) {
|
|
@@ -42,7 +42,6 @@ export const withResize = (board, options) => {
|
|
|
42
42
|
// prevent text from being selected
|
|
43
43
|
event.preventDefault();
|
|
44
44
|
const endPoint = [event.x, event.y];
|
|
45
|
-
;
|
|
46
45
|
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
47
46
|
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
48
47
|
addResizing(board, resizeRef, options.key);
|
|
@@ -53,7 +52,7 @@ export const withResize = (board, options) => {
|
|
|
53
52
|
if (isResizing(board) && startPoint) {
|
|
54
53
|
// prevent text from being selected
|
|
55
54
|
event.preventDefault();
|
|
56
|
-
const endTransformPoint =
|
|
55
|
+
const endTransformPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
57
56
|
throttleRAF(() => {
|
|
58
57
|
const endPoint = [event.x, event.y];
|
|
59
58
|
if (startPoint && resizeRef) {
|
|
@@ -66,7 +65,7 @@ export const withResize = (board, options) => {
|
|
|
66
65
|
return;
|
|
67
66
|
}
|
|
68
67
|
else {
|
|
69
|
-
const point =
|
|
68
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
70
69
|
const resizeDetectResult = options.detect(point);
|
|
71
70
|
if (resizeDetectResult) {
|
|
72
71
|
if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {
|
|
@@ -102,4 +101,4 @@ export const withResize = (board, options) => {
|
|
|
102
101
|
};
|
|
103
102
|
return board;
|
|
104
103
|
};
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvd2l0aC1yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxxQkFBcUIsRUFDckIsVUFBVSxFQUVWLGdCQUFnQixFQUVoQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNYLE9BQU8sRUFDUCxjQUFjLEVBRWpCLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBYSxXQUFXLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUJyRixNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFtQixFQUFFLEVBQUU7SUFDaEUsT0FBTyxDQUNILENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FDcEksQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUN0QixLQUFpQixFQUNqQixPQUFnQyxFQUNsQyxFQUFFO0lBQ0EsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQzVELElBQUksa0JBQWtCLEdBQW9DLElBQUksQ0FBQztJQUMvRCxJQUFJLFNBQVMsR0FBMkIsSUFBSSxDQUFDO0lBQzdDLElBQUksVUFBVSxHQUFpQixJQUFJLENBQUM7SUFDcEMsSUFBSSxnQkFBZ0IsR0FBb0MsSUFBSSxDQUFDO0lBRTdELEtBQUssQ0FBQyxXQUFXLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7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c0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBNRVJHSU5HLFxuICAgIFBSRVNTX0FORF9NT1ZFX0JVRkZFUixcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgaXNNYWluUG9pbnRlcixcbiAgICBwcmV2ZW50VG91Y2hNb3ZlLFxuICAgIGhhbmRsZVRvdWNoVGFyZ2V0LFxuICAgIHRocm90dGxlUkFGLFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnQsXG4gICAgUmVzaXplQ3Vyc29yQ2xhc3Ncbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBSZXNpemVSZWYsIGFkZFJlc2l6aW5nLCBpc1Jlc2l6aW5nLCByZW1vdmVSZXNpemluZyB9IGZyb20gJy4uL3V0aWxzL3Jlc2l6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2l0aFJlc2l6ZU9wdGlvbnM8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4ge1xuICAgIGtleTogc3RyaW5nO1xuICAgIGNhblJlc2l6ZTogKCkgPT4gYm9vbGVhbjtcbiAgICBkZXRlY3Q6IChwb2ludDogUG9pbnQpID0+IFJlc2l6ZURldGVjdFJlc3VsdDxULCBLPiB8IG51bGw7XG4gICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB2b2lkO1xuICAgIGFmdGVyUmVzaXplPzogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+KSA9PiB2b2lkO1xuICAgIGJlZm9yZVJlc2l6ZT86IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVEZXRlY3RSZXN1bHQ8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4ge1xuICAgIGVsZW1lbnQ6IFQ7XG4gICAgaGFuZGxlOiBLO1xuICAgIGN1cnNvckNsYXNzPzogUmVzaXplQ3Vyc29yQ2xhc3M7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzaXplU3RhdGUge1xuICAgIG9mZnNldFg6IG51bWJlcjtcbiAgICBvZmZzZXRZOiBudW1iZXI7XG4gICAgZW5kVHJhbnNmb3JtUG9pbnQ6IFBvaW50O1xufVxuXG5jb25zdCBnZW5lcmFsQ2FuUmVzaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSAmJiBQbGFpdEJvYXJkLmlzUG9pbnRlcihib2FyZCwgUGxhaXRQb2ludGVyVHlwZS5zZWxlY3Rpb24pXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCB3aXRoUmVzaXplID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQsIEsgPSBSZXNpemVIYW5kbGU+KFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFQsIEs+XG4pID0+IHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwIH0gPSBib2FyZDtcbiAgICBsZXQgcmVzaXplRGV0ZWN0UmVzdWx0OiBSZXNpemVEZXRlY3RSZXN1bHQ8VCwgSz4gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSz4gfCBudWxsID0gbnVsbDtcbiAgICBsZXQgc3RhcnRQb2ludDogUG9pbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgaG92ZURldGVjdFJlc3VsdDogUmVzaXplRGV0ZWN0UmVzdWx0PFQsIEs+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBib2FyZC5wb2ludGVyRG93biA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jYW5SZXNpemUoKSB8fCAhZ2VuZXJhbENhblJlc2l6ZShib2FyZCwgZXZlbnQpIHx8ICFpc01haW5Qb2ludGVyKGV2ZW50KSkge1xuICAgICAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICByZXNpemVEZXRlY3RSZXN1bHQgPSBvcHRpb25zLmRldGVjdChwb2ludCk7XG4gICAgICAgIGlmIChyZXNpemVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChyZXNpemVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke3Jlc2l6ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICByZXNpemVSZWYgPSB7XG4gICAgICAgICAgICAgICAgcGF0aDogUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcmVzaXplRGV0ZWN0UmVzdWx0LmVsZW1lbnQpLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHJlc2l6ZURldGVjdFJlc3VsdC5lbGVtZW50LFxuICAgICAgICAgICAgICAgIGhhbmRsZTogcmVzaXplRGV0ZWN0UmVzdWx0LmhhbmRsZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkIHdoZW4gdXNlciBwcmVzc2VkIHNoaWZ0IGFuZCBwb2ludGVyIGRvd25cbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghb3B0aW9ucy5jYW5SZXNpemUoKSB8fCAhZ2VuZXJhbENhblJlc2l6ZShib2FyZCwgZXZlbnQpKSB7XG4gICAgICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgcmVzaXplRGV0ZWN0UmVzdWx0ICYmICFpc1Jlc2l6aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgLy8gcHJldmVudCB0ZXh0IGZyb20gYmVpbmcgc2VsZWN0ZWRcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IFtldmVudC54LCBldmVudC55XTs7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUikge1xuICAgICAgICAgICAgICAgIGFkZFJlc2l6aW5nKGJvYXJkLCByZXNpemVSZWYhLCBvcHRpb25zLmtleSk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYmVmb3JlUmVzaXplICYmIG9wdGlvbnMuYmVmb3JlUmVzaXplKHJlc2l6ZVJlZiEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmVzaXppbmcoYm9hcmQpICYmIHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgZW5kVHJhbnNmb3JtUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICB0aHJvdHRsZVJBRigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgcmVzaXplUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVRvdWNoVGFyZ2V0KGJvYXJkKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IGVuZFBvaW50WzFdIC0gc3RhcnRQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vblJlc2l6ZShyZXNpemVSZWYsIHsgb2Zmc2V0WCwgb2Zmc2V0WSwgZW5kVHJhbnNmb3JtUG9pbnQgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZURldGVjdFJlc3VsdCA9IG9wdGlvbnMuZGV0ZWN0KHBvaW50KTtcbiAgICAgICAgICAgIGlmIChyZXNpemVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdCAmJiByZXNpemVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MgIT09IGhvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBob3ZlRGV0ZWN0UmVzdWx0ID0gcmVzaXplRGV0ZWN0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYCR7aG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChob3ZlRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKGAke2hvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaG92ZURldGVjdFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZ2xvYmFsUG9pbnRlclVwID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICAgICAgaWYgKGlzUmVzaXppbmcoYm9hcmQpIHx8IHJlc2l6ZURldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgb3B0aW9ucy5iZWZvcmVSZXNpemUgJiYgb3B0aW9ucy5iZWZvcmVSZXNpemUocmVzaXplUmVmISk7XG4gICAgICAgICAgICByZW1vdmVSZXNpemluZyhib2FyZCwgb3B0aW9ucy5rZXkpO1xuICAgICAgICAgICAgc3RhcnRQb2ludCA9IG51bGw7XG4gICAgICAgICAgICByZXNpemVEZXRlY3RSZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgcmVzaXplUmVmID0gbnVsbDtcbiAgICAgICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCBmYWxzZSk7XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvd2l0aC1yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILE9BQU8sRUFDUCxxQkFBcUIsRUFDckIsVUFBVSxFQUVWLGdCQUFnQixFQUVoQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUVYLGNBQWMsRUFDZCxXQUFXLEVBQ2QsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFhLFdBQVcsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF1QnJGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQW1CLEVBQUUsRUFBRTtJQUNoRSxPQUFPLENBQ0gsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUNwSSxDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQ3RCLEtBQWlCLEVBQ2pCLE9BQWdDLEVBQ2xDLEVBQUU7SUFDQSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDNUQsSUFBSSxrQkFBa0IsR0FBb0MsSUFBSSxDQUFDO0lBQy9ELElBQUksU0FBUyxHQUEyQixJQUFJLENBQUM7SUFDN0MsSUFBSSxVQUFVLEdBQWlCLElBQUksQ0FBQztJQUNwQyxJQUFJLGdCQUFnQixHQUFvQyxJQUFJLENBQUM7SUFFN0QsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xGLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixPQUFPO1NBQ1Y7UUFDRCxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNDLElBQUksa0JBQWtCLEVBQUU7WUFDcEIsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2hDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzthQUMxRjtZQUNELFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLFNBQVMsR0FBRztnQkFDUixJQUFJLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDO2dCQUM1RCxPQUFPLEVBQUUsa0JBQWtCLENBQUMsT0FBTztnQkFDbkMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLE1BQU07YUFDcEMsQ0FBQztZQUNGLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDckMsNEVBQTRFO1lBQzVFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixPQUFPO1NBQ1Y7UUFDRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3pELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLFVBQVUsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RCxtQ0FBbUM7WUFDbkMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEcsSUFBSSxRQUFRLEdBQUcscUJBQXFCLEVBQUU7Z0JBQ2xDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFVLENBQUMsQ0FBQzthQUM1RDtTQUNKO1FBRUQsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxFQUFFO1lBQ2pDLG1DQUFtQztZQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RixXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNiLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLElBQUksVUFBVSxJQUFJLFNBQVMsRUFBRTtvQkFDekIsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7aUJBQ3hFO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1Y7YUFBTTtZQUNILE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxJQUFJLGtCQUFrQixFQUFFO2dCQUNwQixJQUFJLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDLFdBQVcsS0FBSyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7b0JBQ3JGLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDM0Y7Z0JBQ0QsZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7Z0JBQ3RDLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFO29CQUM5QixVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7aUJBQ3hGO2FBQ0o7aUJBQU07Z0JBQ0gsSUFBSSxnQkFBZ0IsRUFBRTtvQkFDbEIsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUU7d0JBQzlCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztxQkFDM0Y7b0JBQ0QsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2lCQUMzQjthQUNKO1NBQ0o7UUFDRCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUM1QyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksa0JBQWtCLEVBQUU7WUFDekMsT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVUsQ0FBQyxDQUFDO1lBQ3pELGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDMUIsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN6QztJQUNMLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgTUVSR0lORyxcbiAgICBQUkVTU19BTkRfTU9WRV9CVUZGRVIsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUGxhaXRQb2ludGVyVHlwZSxcbiAgICBQb2ludCxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIGlzTWFpblBvaW50ZXIsXG4gICAgcHJldmVudFRvdWNoTW92ZSxcbiAgICBoYW5kbGVUb3VjaFRhcmdldCxcbiAgICB0aHJvdHRsZVJBRixcbiAgICBSZXNpemVDdXJzb3JDbGFzcyxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICB0b0hvc3RQb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzaXplJztcbmltcG9ydCB7IFJlc2l6ZVJlZiwgYWRkUmVzaXppbmcsIGlzUmVzaXppbmcsIHJlbW92ZVJlc2l6aW5nIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplJztcblxuZXhwb3J0IGludGVyZmFjZSBXaXRoUmVzaXplT3B0aW9uczxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50LCBLID0gUmVzaXplSGFuZGxlPiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgY2FuUmVzaXplOiAoKSA9PiBib29sZWFuO1xuICAgIGRldGVjdDogKHBvaW50OiBQb2ludCkgPT4gUmVzaXplRGV0ZWN0UmVzdWx0PFQsIEs+IHwgbnVsbDtcbiAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+LCByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUpID0+IHZvaWQ7XG4gICAgYWZ0ZXJSZXNpemU/OiAocmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSz4pID0+IHZvaWQ7XG4gICAgYmVmb3JlUmVzaXplPzogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc2l6ZURldGVjdFJlc3VsdDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50LCBLID0gUmVzaXplSGFuZGxlPiB7XG4gICAgZWxlbWVudDogVDtcbiAgICBoYW5kbGU6IEs7XG4gICAgY3Vyc29yQ2xhc3M/OiBSZXNpemVDdXJzb3JDbGFzcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNpemVTdGF0ZSB7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBlbmRUcmFuc2Zvcm1Qb2ludDogUG9pbnQ7XG59XG5cbmNvbnN0IGdlbmVyYWxDYW5SZXNpemUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpICYmIFBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbilcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHdpdGhSZXNpemUgPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCwgSyA9IFJlc2l6ZUhhbmRsZT4oXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgb3B0aW9uczogV2l0aFJlc2l6ZU9wdGlvbnM8VCwgSz5cbikgPT4ge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAgfSA9IGJvYXJkO1xuICAgIGxldCByZXNpemVEZXRlY3RSZXN1bHQ6IFJlc2l6ZURldGVjdFJlc3VsdDxULCBLPiB8IG51bGwgPSBudWxsO1xuICAgIGxldCByZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBob3ZlRGV0ZWN0UmVzdWx0OiBSZXNpemVEZXRlY3RSZXN1bHQ8VCwgSz4gfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFvcHRpb25zLmNhblJlc2l6ZSgpIHx8ICFnZW5lcmFsQ2FuUmVzaXplKGJvYXJkLCBldmVudCkgfHwgIWlzTWFpblBvaW50ZXIoZXZlbnQpKSB7XG4gICAgICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgcmVzaXplRGV0ZWN0UmVzdWx0ID0gb3B0aW9ucy5kZXRlY3QocG9pbnQpO1xuICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZChgJHtyZXNpemVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gW2V2ZW50LngsIGV2ZW50LnldO1xuICAgICAgICAgICAgcmVzaXplUmVmID0ge1xuICAgICAgICAgICAgICAgIHBhdGg6IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHJlc2l6ZURldGVjdFJlc3VsdC5lbGVtZW50KSxcbiAgICAgICAgICAgICAgICBlbGVtZW50OiByZXNpemVEZXRlY3RSZXN1bHQuZWxlbWVudCxcbiAgICAgICAgICAgICAgICBoYW5kbGU6IHJlc2l6ZURldGVjdFJlc3VsdC5oYW5kbGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICAvLyBwcmV2ZW50IHRleHQgZnJvbSBiZWluZyBzZWxlY3RlZCB3aGVuIHVzZXIgcHJlc3NlZCBzaGlmdCBhbmQgcG9pbnRlciBkb3duXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIW9wdGlvbnMuY2FuUmVzaXplKCkgfHwgIWdlbmVyYWxDYW5SZXNpemUoYm9hcmQsIGV2ZW50KSkge1xuICAgICAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIHJlc2l6ZURldGVjdFJlc3VsdCAmJiAhaXNSZXNpemluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBbZXZlbnQueCwgZXZlbnQueV07XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUikge1xuICAgICAgICAgICAgICAgIGFkZFJlc2l6aW5nKGJvYXJkLCByZXNpemVSZWYhLCBvcHRpb25zLmtleSk7XG4gICAgICAgICAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuYmVmb3JlUmVzaXplICYmIG9wdGlvbnMuYmVmb3JlUmVzaXplKHJlc2l6ZVJlZiEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmVzaXppbmcoYm9hcmQpICYmIHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIC8vIHByZXZlbnQgdGV4dCBmcm9tIGJlaW5nIHNlbGVjdGVkXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgZW5kVHJhbnNmb3JtUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIHRocm90dGxlUkFGKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmRQb2ludCA9IFtldmVudC54LCBldmVudC55XTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRQb2ludCAmJiByZXNpemVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRYID0gZW5kUG9pbnRbMF0gLSBzdGFydFBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uUmVzaXplKHJlc2l6ZVJlZiwgeyBvZmZzZXRYLCBvZmZzZXRZLCBlbmRUcmFuc2Zvcm1Qb2ludCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIHRvSG9zdFBvaW50KGJvYXJkLCBldmVudC54LCBldmVudC55KSk7XG4gICAgICAgICAgICBjb25zdCByZXNpemVEZXRlY3RSZXN1bHQgPSBvcHRpb25zLmRldGVjdChwb2ludCk7XG4gICAgICAgICAgICBpZiAocmVzaXplRGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVEZXRlY3RSZXN1bHQgJiYgcmVzaXplRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzICE9PSBob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYCR7aG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzc31gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaG92ZURldGVjdFJlc3VsdCA9IHJlc2l6ZURldGVjdFJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke2hvdmVEZXRlY3RSZXN1bHQuY3Vyc29yQ2xhc3N9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZURldGVjdFJlc3VsdC5jdXJzb3JDbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtob3ZlRGV0ZWN0UmVzdWx0LmN1cnNvckNsYXNzfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGhvdmVEZXRlY3RSZXN1bHQgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbFBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgICAgIGlmIChpc1Jlc2l6aW5nKGJvYXJkKSB8fCByZXNpemVEZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuYmVmb3JlUmVzaXplICYmIG9wdGlvbnMuYmVmb3JlUmVzaXplKHJlc2l6ZVJlZiEpO1xuICAgICAgICAgICAgcmVtb3ZlUmVzaXppbmcoYm9hcmQsIG9wdGlvbnMua2V5KTtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgcmVzaXplRGV0ZWN0UmVzdWx0ID0gbnVsbDtcbiAgICAgICAgICAgIHJlc2l6ZVJlZiA9IG51bGw7XG4gICAgICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgcHJldmVudFRvdWNoTW92ZShib2FyZCwgZXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -57,12 +57,52 @@ function setOffset(board, getOffset) {
|
|
|
57
57
|
});
|
|
58
58
|
MERGING.set(board, false);
|
|
59
59
|
}
|
|
60
|
+
export const distributeHorizontal = (board) => {
|
|
61
|
+
distribute(board, true);
|
|
62
|
+
};
|
|
63
|
+
export const distributeVertical = (board) => {
|
|
64
|
+
distribute(board, false);
|
|
65
|
+
};
|
|
66
|
+
const distribute = (board, isHorizontal) => {
|
|
67
|
+
const axis = isHorizontal ? 'x' : 'y';
|
|
68
|
+
const side = isHorizontal ? 'width' : 'height';
|
|
69
|
+
const selectedElements = getSelectedElements(board).filter(element => board.children.includes(element));
|
|
70
|
+
const refs = selectedElements.map(element => {
|
|
71
|
+
return { element, rectangle: board.getRectangle(element) };
|
|
72
|
+
});
|
|
73
|
+
const outerRectangle = getRectangleByElements(board, selectedElements, false);
|
|
74
|
+
const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];
|
|
75
|
+
const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];
|
|
76
|
+
const minIndex = refs.findIndex(ref => ref === minRectangleRef);
|
|
77
|
+
const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);
|
|
78
|
+
let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);
|
|
79
|
+
const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);
|
|
80
|
+
const offset = (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);
|
|
81
|
+
distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);
|
|
82
|
+
let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;
|
|
83
|
+
for (let i = 0; i < distributeRefs.length; i++) {
|
|
84
|
+
const rectangle = distributeRefs[i].rectangle;
|
|
85
|
+
const moveOffset = [0, 0];
|
|
86
|
+
const moveAxis = isHorizontal ? 0 : 1;
|
|
87
|
+
moveOffset[moveAxis] = position - rectangle[axis];
|
|
88
|
+
const path = PlaitBoard.findPath(board, distributeRefs[i].element);
|
|
89
|
+
const newPoints = distributeRefs[i].element.points.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]);
|
|
90
|
+
Transforms.setNode(board, {
|
|
91
|
+
points: newPoints
|
|
92
|
+
}, path);
|
|
93
|
+
MERGING.set(board, true);
|
|
94
|
+
position = position + rectangle[side] + offset;
|
|
95
|
+
}
|
|
96
|
+
MERGING.set(board, false);
|
|
97
|
+
};
|
|
60
98
|
export const AlignTransform = {
|
|
61
99
|
alignTop,
|
|
62
100
|
alignHorizontalCenter,
|
|
63
101
|
alignBottom,
|
|
64
102
|
alignLeft,
|
|
65
103
|
alignVerticalCenter,
|
|
66
|
-
alignRight
|
|
104
|
+
alignRight,
|
|
105
|
+
distributeHorizontal,
|
|
106
|
+
distributeVertical
|
|
67
107
|
};
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvYWxpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQTBCLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDMUMsU0FBUyxTQUFTLENBQUMsY0FBK0IsRUFBRSxTQUEwQjtRQUMxRSxPQUFPLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBVSxDQUFDO0lBQ3hELENBQUM7SUFDRCxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3ZELFNBQVMsU0FBUyxDQUFDLGNBQStCLEVBQUUsU0FBMEI7UUFDMUUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLGFBQWEsQ0FBVSxDQUFDO0lBQ3JELENBQUM7SUFDRCxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM3QyxTQUFTLFNBQVMsQ0FBQyxjQUErQixFQUFFLFNBQTBCO1FBQzFFLE9BQU8s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QUNELElBQUksQ0FDUCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBV0QsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFtQjtJQUMxQyxRQUFRO0lBQ1IscUJBQXFCO0lBQ3JCLFdBQVc7SUFDWCxTQUFTO0lBQ1QsbUJBQW1CO0lBQ25CLFVBQVU7Q0FDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTUVSR0lORywgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgVHJhbnNmb3JtcywgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cywgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGFsaWduVG9wID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBbMCwgb3V0ZXJSZWN0YW5nbGUueSAtIHJlY3RhbmdsZS55XSBhcyBQb2ludDtcbiAgICB9XG4gICAgc2V0T2Zmc2V0KGJvYXJkLCBnZXRPZmZzZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFsaWduSG9yaXpvbnRhbENlbnRlciA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldChvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBvdXRlckNlbnRlciA9IG91dGVyUmVjdGFuZ2xlLnkgKyBvdXRlclJlY3RhbmdsZS5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBlbGVtZW50Q2VudGVyID0gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICAgICAgcmV0dXJuIFswLCBvdXRlckNlbnRlciAtIGVsZW1lbnRDZW50ZXJdIGFzIFBvaW50O1xuICAgIH1cbiAgICBzZXRPZmZzZXQoYm9hcmQsIGdldE9mZnNldCk7XG59O1xuXG5leHBvcnQgY29uc3QgYWxpZ25Cb3R0b20gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBmdW5jdGlvbiBnZXRPZmZzZXQob3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFswLCBvdXRlclJlY3RhbmdsZS55ICsgb3V0ZXJSZWN0YW5nbGUuaGVpZ2h0IC0gKHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCldIGFzIFBvaW50O1xuICAgIH1cbiAgICBzZXRPZmZzZXQoYm9hcmQsIGdldE9mZnNldCk7XG59O1xuXG5leHBvcnQgY29uc3QgYWxpZ25MZWZ0ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBbb3V0ZXJSZWN0YW5nbGUueCAtIHJlY3RhbmdsZS54LCAwXSBhcyBQb2ludDtcbiAgICB9XG4gICAgc2V0T2Zmc2V0KGJvYXJkLCBnZXRPZmZzZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFsaWduVmVydGljYWxDZW50ZXIgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBmdW5jdGlvbiBnZXRPZmZzZXQob3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJDZW50ZXIgPSBvdXRlclJlY3RhbmdsZS54ICsgb3V0ZXJSZWN0YW5nbGUud2lkdGggLyAyO1xuICAgICAgICBjb25zdCBlbGVtZW50Q2VudGVyID0gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyO1xuICAgICAgICByZXR1cm4gW291dGVyQ2VudGVyIC0gZWxlbWVudENlbnRlciwgMF0gYXMgUG9pbnQ7XG4gICAgfVxuICAgIHNldE9mZnNldChib2FyZCwgZ2V0T2Zmc2V0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbGlnblJpZ2h0ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBbb3V0ZXJSZWN0YW5nbGUueCArIG91dGVyUmVjdGFuZ2xlLndpZHRoIC0gKHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoKSwgMF0gYXMgUG9pbnQ7XG4gICAgfVxuICAgIHNldE9mZnNldChib2FyZCwgZ2V0T2Zmc2V0KTtcbn07XG5cbmZ1bmN0aW9uIHNldE9mZnNldChib2FyZDogUGxhaXRCb2FyZCwgZ2V0T2Zmc2V0OiAob3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IFBvaW50KSB7XG4gICAgbGV0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiBib2FyZC5jaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gICAgY29uc3Qgb3V0ZXJSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cywgZmFsc2UpO1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGlmICghZWxlbWVudC5wb2ludHMpIHJldHVybjtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUoZWxlbWVudCkhO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBnZXRPZmZzZXQob3V0ZXJSZWN0YW5nbGUsIHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IGVsZW1lbnQucG9pbnRzLm1hcChwID0+IFtwWzBdICsgb2Zmc2V0WzBdLCBwWzFdICsgb2Zmc2V0WzFdXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICB9KTtcbiAgICBNRVJHSU5HLnNldChib2FyZCwgZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFsaWduVHJhbnNmb3JtIHtcbiAgICBhbGlnblRvcDogKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB2b2lkO1xuICAgIGFsaWduSG9yaXpvbnRhbENlbnRlcjogKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB2b2lkO1xuICAgIGFsaWduQm90dG9tOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgYWxpZ25MZWZ0OiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgYWxpZ25WZXJ0aWNhbENlbnRlcjogKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB2b2lkO1xuICAgIGFsaWduUmlnaHQ6IChib2FyZDogUGxhaXRCb2FyZCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IEFsaWduVHJhbnNmb3JtOiBBbGlnblRyYW5zZm9ybSA9IHtcbiAgICBhbGlnblRvcCxcbiAgICBhbGlnbkhvcml6b250YWxDZW50ZXIsXG4gICAgYWxpZ25Cb3R0b20sXG4gICAgYWxpZ25MZWZ0LFxuICAgIGFsaWduVmVydGljYWxDZW50ZXIsXG4gICAgYWxpZ25SaWdodFxufTtcbiJdfQ==
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvYWxpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFLLE9BQU8sRUFBRSxVQUFVLEVBQTBCLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0SSxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDMUMsU0FBUyxTQUFTLENBQUMsY0FBK0IsRUFBRSxTQUEwQjtRQUMxRSxPQUFPLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBVSxDQUFDO0lBQ3hELENBQUM7SUFDRCxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3ZELFNBQVMsU0FBUyxDQUFDLGNBQStCLEVBQUUsU0FBMEI7UUFDMUUsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqRSxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLGFBQWEsQ0FBVSxDQUFDO0lBQ3JELENBQUM7SUFDRCxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM3QyxTQUFTLFNBQVMsQ0FBQyxjQUErQixFQUFFLFNBQTBCO1FBQzFFLE9BQU8s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Q0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQVksQ0FBQztRQUN0SCxVQUFVLENBQUMsT0FBTyxDQUNkLEtBQUssRUFDTDtZQUNJLE1BQU0sRUFBRSxTQUFTO1NBQ3BCLEVBQ0QsSUFBSSxDQUNQLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6QixRQUFRLEdBQUcsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDbEQ7SUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFhRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW1CO0lBQzFDLFFBQVE7SUFDUixxQkFBcUI7SUFDckIsV0FBVztJQUNYLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLG9CQUFvQjtJQUNwQixrQkFBa0I7Q0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEMsIE1FUkdJTkcsIFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFRyYW5zZm9ybXMsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBhbGlnblRvcCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldChvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gWzAsIG91dGVyUmVjdGFuZ2xlLnkgLSByZWN0YW5nbGUueV0gYXMgUG9pbnQ7XG4gICAgfVxuICAgIHNldE9mZnNldChib2FyZCwgZ2V0T2Zmc2V0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbGlnbkhvcml6b250YWxDZW50ZXIgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBmdW5jdGlvbiBnZXRPZmZzZXQob3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3Qgb3V0ZXJDZW50ZXIgPSBvdXRlclJlY3RhbmdsZS55ICsgb3V0ZXJSZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgZWxlbWVudENlbnRlciA9IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgICAgIHJldHVybiBbMCwgb3V0ZXJDZW50ZXIgLSBlbGVtZW50Q2VudGVyXSBhcyBQb2ludDtcbiAgICB9XG4gICAgc2V0T2Zmc2V0KGJvYXJkLCBnZXRPZmZzZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFsaWduQm90dG9tID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBbMCwgb3V0ZXJSZWN0YW5nbGUueSArIG91dGVyUmVjdGFuZ2xlLmhlaWdodCAtIChyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpXSBhcyBQb2ludDtcbiAgICB9XG4gICAgc2V0T2Zmc2V0KGJvYXJkLCBnZXRPZmZzZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFsaWduTGVmdCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldChvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLnggLSByZWN0YW5nbGUueCwgMF0gYXMgUG9pbnQ7XG4gICAgfVxuICAgIHNldE9mZnNldChib2FyZCwgZ2V0T2Zmc2V0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhbGlnblZlcnRpY2FsQ2VudGVyID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZnVuY3Rpb24gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIGNvbnN0IG91dGVyQ2VudGVyID0gb3V0ZXJSZWN0YW5nbGUueCArIG91dGVyUmVjdGFuZ2xlLndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgZWxlbWVudENlbnRlciA9IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMjtcbiAgICAgICAgcmV0dXJuIFtvdXRlckNlbnRlciAtIGVsZW1lbnRDZW50ZXIsIDBdIGFzIFBvaW50O1xuICAgIH1cbiAgICBzZXRPZmZzZXQoYm9hcmQsIGdldE9mZnNldCk7XG59O1xuXG5leHBvcnQgY29uc3QgYWxpZ25SaWdodCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldE9mZnNldChvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLnggKyBvdXRlclJlY3RhbmdsZS53aWR0aCAtIChyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCksIDBdIGFzIFBvaW50O1xuICAgIH1cbiAgICBzZXRPZmZzZXQoYm9hcmQsIGdldE9mZnNldCk7XG59O1xuXG5mdW5jdGlvbiBzZXRPZmZzZXQoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdldE9mZnNldDogKG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiBQb2ludCkge1xuICAgIGxldCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGVsZW1lbnQgPT4gYm9hcmQuY2hpbGRyZW4uaW5jbHVkZXMoZWxlbWVudCkpO1xuICAgIGNvbnN0IG91dGVyUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoIWVsZW1lbnQucG9pbnRzKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gYm9hcmQuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpITtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0T2Zmc2V0KG91dGVyUmVjdGFuZ2xlLCByZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBuZXdQb2ludHMgPSBlbGVtZW50LnBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFswXSwgcFsxXSArIG9mZnNldFsxXV0pIGFzIFBvaW50W107XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShcbiAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBvaW50czogbmV3UG9pbnRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aFxuICAgICAgICApO1xuICAgICAgICBNRVJHSU5HLnNldChib2FyZCwgdHJ1ZSk7XG4gICAgfSk7XG4gICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGRpc3RyaWJ1dGVIb3Jpem9udGFsID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZGlzdHJpYnV0ZShib2FyZCwgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGlzdHJpYnV0ZVZlcnRpY2FsID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgZGlzdHJpYnV0ZShib2FyZCwgZmFsc2UpO1xufTtcblxuY29uc3QgZGlzdHJpYnV0ZSA9IChib2FyZDogUGxhaXRCb2FyZCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSA9PiB7XG4gICAgY29uc3QgYXhpcyA9IGlzSG9yaXpvbnRhbCA/ICd4JyA6ICd5JztcbiAgICBjb25zdCBzaWRlID0gaXNIb3Jpem9udGFsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5maWx0ZXIoZWxlbWVudCA9PiBib2FyZC5jaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gICAgY29uc3QgcmVmcyA9IHNlbGVjdGVkRWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4geyBlbGVtZW50LCByZWN0YW5nbGU6IGJvYXJkLmdldFJlY3RhbmdsZShlbGVtZW50KSEgfTtcbiAgICB9KTtcbiAgICBjb25zdCBvdXRlclJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMsIGZhbHNlKTtcbiAgICBjb25zdCBtaW5SZWN0YW5nbGVSZWYgPSByZWZzLnNvcnQoKGEsIGIpID0+IGEucmVjdGFuZ2xlW2F4aXNdIC0gYi5yZWN0YW5nbGVbYXhpc10pWzBdO1xuICAgIGNvbnN0IG1heFJlY3RhbmdsZVJlZiA9IHJlZnMuc29ydCgoYSwgYikgPT4gYi5yZWN0YW5nbGVbYXhpc10gKyBiLnJlY3RhbmdsZVtzaWRlXSAtIChhLnJlY3RhbmdsZVtheGlzXSArIGEucmVjdGFuZ2xlW3NpZGVdKSlbMF07XG4gICAgY29uc3QgbWluSW5kZXggPSByZWZzLmZpbmRJbmRleChyZWYgPT4gcmVmID09PSBtaW5SZWN0YW5nbGVSZWYpO1xuICAgIGNvbnN0IG1heEluZGV4ID0gcmVmcy5maW5kSW5kZXgocmVmID0+IHJlZiA9PT0gbWF4UmVjdGFuZ2xlUmVmKTtcbiAgICBsZXQgZGlzdHJpYnV0ZVJlZnMgPSByZWZzLmZpbHRlcigoZWxlbWVudCwgaW5kZXgpID0+IGluZGV4ICE9PSBtaW5JbmRleCAmJiBpbmRleCAhPT0gbWF4SW5kZXgpO1xuICAgIGNvbnN0IHN1bSA9IGRpc3RyaWJ1dGVSZWZzLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnQpID0+IGN1cnJlbnQucmVjdGFuZ2xlW3NpZGVdICsgYWNjdW11bGF0b3IsIDApO1xuICAgIGNvbnN0IG9mZnNldCA9XG4gICAgICAgIChvdXRlclJlY3RhbmdsZVtzaWRlXSAtIG1pblJlY3RhbmdsZVJlZi5yZWN0YW5nbGVbc2lkZV0gLSBtYXhSZWN0YW5nbGVSZWYucmVjdGFuZ2xlW3NpZGVdIC0gc3VtKSAvIChkaXN0cmlidXRlUmVmcy5sZW5ndGggKyAxKTtcbiAgICBkaXN0cmlidXRlUmVmcyA9IGRpc3RyaWJ1dGVSZWZzLnNvcnQoKGEsIGIpID0+IGEucmVjdGFuZ2xlW2F4aXNdIC0gYi5yZWN0YW5nbGVbYXhpc10pO1xuICAgIGxldCBwb3NpdGlvbiA9IG1pblJlY3RhbmdsZVJlZi5yZWN0YW5nbGVbYXhpc10gKyBtaW5SZWN0YW5nbGVSZWYucmVjdGFuZ2xlW3NpZGVdICsgb2Zmc2V0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlzdHJpYnV0ZVJlZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZGlzdHJpYnV0ZVJlZnNbaV0ucmVjdGFuZ2xlO1xuICAgICAgICBjb25zdCBtb3ZlT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICBjb25zdCBtb3ZlQXhpcyA9IGlzSG9yaXpvbnRhbCA/IDAgOiAxO1xuICAgICAgICBtb3ZlT2Zmc2V0W21vdmVBeGlzXSA9IHBvc2l0aW9uIC0gcmVjdGFuZ2xlW2F4aXNdO1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZGlzdHJpYnV0ZVJlZnNbaV0uZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IGRpc3RyaWJ1dGVSZWZzW2ldLmVsZW1lbnQucG9pbnRzIS5tYXAocCA9PiBbcFswXSArIG1vdmVPZmZzZXRbMF0sIHBbMV0gKyBtb3ZlT2Zmc2V0WzFdXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIHJlY3RhbmdsZVtzaWRlXSArIG9mZnNldDtcbiAgICB9XG4gICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWxpZ25UcmFuc2Zvcm0ge1xuICAgIGFsaWduVG9wOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgYWxpZ25Ib3Jpem9udGFsQ2VudGVyOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgYWxpZ25Cb3R0b206IChib2FyZDogUGxhaXRCb2FyZCkgPT4gdm9pZDtcbiAgICBhbGlnbkxlZnQ6IChib2FyZDogUGxhaXRCb2FyZCkgPT4gdm9pZDtcbiAgICBhbGlnblZlcnRpY2FsQ2VudGVyOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgYWxpZ25SaWdodDogKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB2b2lkO1xuICAgIGRpc3RyaWJ1dGVIb3Jpem9udGFsOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG4gICAgZGlzdHJpYnV0ZVZlcnRpY2FsOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBBbGlnblRyYW5zZm9ybTogQWxpZ25UcmFuc2Zvcm0gPSB7XG4gICAgYWxpZ25Ub3AsXG4gICAgYWxpZ25Ib3Jpem9udGFsQ2VudGVyLFxuICAgIGFsaWduQm90dG9tLFxuICAgIGFsaWduTGVmdCxcbiAgICBhbGlnblZlcnRpY2FsQ2VudGVyLFxuICAgIGFsaWduUmlnaHQsXG4gICAgZGlzdHJpYnV0ZUhvcml6b250YWwsXG4gICAgZGlzdHJpYnV0ZVZlcnRpY2FsXG59O1xuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './property';
|
|
2
2
|
export * from './align';
|
|
3
|
-
|
|
3
|
+
export * from './text';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Byb3BlcnR5JztcbmV4cG9ydCAqIGZyb20gJy4vYWxpZ24nO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0JztcbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { getSelectedElements } from '@plait/core';
|
|
2
|
+
import { AlignEditor, MarkTypes, PlaitMarkEditor } from '@plait/text';
|
|
3
|
+
import { Editor, Transforms as SlateTransforms } from 'slate';
|
|
4
|
+
import { getTextEditors } from '../utils/text';
|
|
5
|
+
const setTextMarks = (board, mark) => {
|
|
6
|
+
const selectedElements = getSelectedElements(board);
|
|
7
|
+
if (selectedElements.length) {
|
|
8
|
+
const firstEditor = getTextEditors(selectedElements[0])[0];
|
|
9
|
+
const activeMarks = PlaitMarkEditor.getMarks(firstEditor);
|
|
10
|
+
const elements = selectedElements.filter(element => {
|
|
11
|
+
const editors = getTextEditors(element);
|
|
12
|
+
return editors.some(editor => {
|
|
13
|
+
const elementMarks = PlaitMarkEditor.getMarks(editor);
|
|
14
|
+
return elementMarks[mark] === activeMarks[mark];
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
elements.forEach(element => {
|
|
18
|
+
const editors = getTextEditors(element);
|
|
19
|
+
editors.forEach(editor => PlaitMarkEditor.toggleMark(editor, mark));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const setFontSize = (board, size, defaultFontSize) => {
|
|
24
|
+
const selectedElements = getSelectedElements(board);
|
|
25
|
+
if (selectedElements.length) {
|
|
26
|
+
selectedElements.forEach(element => {
|
|
27
|
+
const editors = getTextEditors(element);
|
|
28
|
+
const finalDefaultFontSize = typeof defaultFontSize === 'function' ? defaultFontSize(element) : defaultFontSize;
|
|
29
|
+
editors.forEach(editor => PlaitMarkEditor.setFontSizeMark(editor, size, finalDefaultFontSize));
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const setTextColor = (board, color, textSelection) => {
|
|
34
|
+
const selectedElements = getSelectedElements(board);
|
|
35
|
+
if (selectedElements?.length) {
|
|
36
|
+
selectedElements.forEach(element => {
|
|
37
|
+
const editors = getTextEditors(element);
|
|
38
|
+
editors.forEach(editor => {
|
|
39
|
+
if (textSelection) {
|
|
40
|
+
SlateTransforms.select(editor, textSelection);
|
|
41
|
+
}
|
|
42
|
+
if (color === 'transparent') {
|
|
43
|
+
Editor.removeMark(editor, MarkTypes.color);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
PlaitMarkEditor.setColorMark(editor, color);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const setTextAlign = (board, align) => {
|
|
53
|
+
const selectedElements = getSelectedElements(board);
|
|
54
|
+
if (selectedElements?.length) {
|
|
55
|
+
selectedElements.forEach(element => {
|
|
56
|
+
const editors = getTextEditors(element);
|
|
57
|
+
editors.forEach(editor => AlignEditor.setAlign(editor, align));
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
export const TextTransforms = { setTextAlign, setTextColor, setFontSize, setTextMarks };
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdHJhbnNmb3Jtcy90ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBd0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQWEsTUFBTSxFQUFFLFVBQVUsSUFBSSxlQUFlLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBZSxFQUFFLEVBQUU7SUFDeEQsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtRQUN6QixNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFELE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMvQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN6QixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0RCxPQUFPLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7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ZW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgQWxpZ25FZGl0b3IsIEFsaWdubWVudCwgRm9udFNpemVzLCBNYXJrVHlwZXMsIFBsYWl0TWFya0VkaXRvciB9IGZyb20gJ0BwbGFpdC90ZXh0JztcbmltcG9ydCB7IEJhc2VSYW5nZSwgRWRpdG9yLCBUcmFuc2Zvcm1zIGFzIFNsYXRlVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICdzbGF0ZS1hbmd1bGFyJztcbmltcG9ydCB7IGdldFRleHRFZGl0b3JzIH0gZnJvbSAnLi4vdXRpbHMvdGV4dCc7XG5cbmNvbnN0IHNldFRleHRNYXJrcyA9IChib2FyZDogUGxhaXRCb2FyZCwgbWFyazogTWFya1R5cGVzKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdEVkaXRvciA9IGdldFRleHRFZGl0b3JzKHNlbGVjdGVkRWxlbWVudHNbMF0pWzBdO1xuICAgICAgICBjb25zdCBhY3RpdmVNYXJrcyA9IFBsYWl0TWFya0VkaXRvci5nZXRNYXJrcyhmaXJzdEVkaXRvcik7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JzID0gZ2V0VGV4dEVkaXRvcnMoZWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gZWRpdG9ycy5zb21lKGVkaXRvciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudE1hcmtzID0gUGxhaXRNYXJrRWRpdG9yLmdldE1hcmtzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXJrc1ttYXJrXSA9PT0gYWN0aXZlTWFya3NbbWFya107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KTtcbiAgICAgICAgICAgIGVkaXRvcnMuZm9yRWFjaChlZGl0b3IgPT4gUGxhaXRNYXJrRWRpdG9yLnRvZ2dsZU1hcmsoZWRpdG9yLCBtYXJrKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmNvbnN0IHNldEZvbnRTaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzaXplOiBGb250U2l6ZXMsIGRlZmF1bHRGb250U2l6ZTogbnVtYmVyIHwgKChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IG51bWJlciB8IHVuZGVmaW5lZCkpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsRGVmYXVsdEZvbnRTaXplID0gdHlwZW9mIGRlZmF1bHRGb250U2l6ZSA9PT0gJ2Z1bmN0aW9uJyA/IGRlZmF1bHRGb250U2l6ZShlbGVtZW50KSA6IGRlZmF1bHRGb250U2l6ZTtcbiAgICAgICAgICAgIGVkaXRvcnMuZm9yRWFjaChlZGl0b3IgPT4gUGxhaXRNYXJrRWRpdG9yLnNldEZvbnRTaXplTWFyayhlZGl0b3IsIHNpemUsIGZpbmFsRGVmYXVsdEZvbnRTaXplKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5cbmNvbnN0IHNldFRleHRDb2xvciA9IChib2FyZDogUGxhaXRCb2FyZCwgY29sb3I6IHN0cmluZywgdGV4dFNlbGVjdGlvbj86IEJhc2VSYW5nZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KTtcbiAgICAgICAgICAgIGVkaXRvcnMuZm9yRWFjaChlZGl0b3IgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIFNsYXRlVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCB0ZXh0U2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yID09PSAndHJhbnNwYXJlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5yZW1vdmVNYXJrKGVkaXRvciwgTWFya1R5cGVzLmNvbG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBQbGFpdE1hcmtFZGl0b3Iuc2V0Q29sb3JNYXJrKGVkaXRvciwgY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5jb25zdCBzZXRUZXh0QWxpZ24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGFsaWduOiBBbGlnbm1lbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JzID0gZ2V0VGV4dEVkaXRvcnMoZWxlbWVudCk7XG4gICAgICAgICAgICBlZGl0b3JzLmZvckVhY2goZWRpdG9yID0+IEFsaWduRWRpdG9yLnNldEFsaWduKGVkaXRvciBhcyBBbmd1bGFyRWRpdG9yLCBhbGlnbikpO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgVGV4dFRyYW5zZm9ybXMgPSB7IHNldFRleHRBbGlnbiwgc2V0VGV4dENvbG9yLCBzZXRGb250U2l6ZSwgc2V0VGV4dE1hcmtzIH07XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, ResizeCursorClass, setDragging, Direction, distanceBetweenPointAndPoint, Point, hotkeys, PlaitElement, PlaitContextService, downScale, getSelectedElements, Transforms, getRectangleByElements, MERGING, PlaitPointerType, isMainPointer,
|
|
1
|
+
import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, ResizeCursorClass, setDragging, Direction, distanceBetweenPointAndPoint, Point, hotkeys, PlaitElement, PlaitContextService, downScale, getSelectedElements, Transforms, getRectangleByElements, MERGING, PlaitPointerType, isMainPointer, toViewBoxPoint, toHostPoint, preventTouchMove, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
|
|
2
2
|
import { isKeyHotkey } from 'is-hotkey';
|
|
3
|
-
import { PlaitMarkEditor } from '@plait/text';
|
|
3
|
+
import { PlaitMarkEditor, MarkTypes, AlignEditor } from '@plait/text';
|
|
4
|
+
import { Transforms as Transforms$1, Editor } from 'slate';
|
|
4
5
|
import * as i0 from '@angular/core';
|
|
5
6
|
import { Directive, Input } from '@angular/core';
|
|
6
7
|
|
|
@@ -1138,14 +1139,112 @@ function setOffset(board, getOffset) {
|
|
|
1138
1139
|
});
|
|
1139
1140
|
MERGING.set(board, false);
|
|
1140
1141
|
}
|
|
1142
|
+
const distributeHorizontal = (board) => {
|
|
1143
|
+
distribute(board, true);
|
|
1144
|
+
};
|
|
1145
|
+
const distributeVertical = (board) => {
|
|
1146
|
+
distribute(board, false);
|
|
1147
|
+
};
|
|
1148
|
+
const distribute = (board, isHorizontal) => {
|
|
1149
|
+
const axis = isHorizontal ? 'x' : 'y';
|
|
1150
|
+
const side = isHorizontal ? 'width' : 'height';
|
|
1151
|
+
const selectedElements = getSelectedElements(board).filter(element => board.children.includes(element));
|
|
1152
|
+
const refs = selectedElements.map(element => {
|
|
1153
|
+
return { element, rectangle: board.getRectangle(element) };
|
|
1154
|
+
});
|
|
1155
|
+
const outerRectangle = getRectangleByElements(board, selectedElements, false);
|
|
1156
|
+
const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];
|
|
1157
|
+
const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];
|
|
1158
|
+
const minIndex = refs.findIndex(ref => ref === minRectangleRef);
|
|
1159
|
+
const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);
|
|
1160
|
+
let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);
|
|
1161
|
+
const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);
|
|
1162
|
+
const offset = (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);
|
|
1163
|
+
distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);
|
|
1164
|
+
let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;
|
|
1165
|
+
for (let i = 0; i < distributeRefs.length; i++) {
|
|
1166
|
+
const rectangle = distributeRefs[i].rectangle;
|
|
1167
|
+
const moveOffset = [0, 0];
|
|
1168
|
+
const moveAxis = isHorizontal ? 0 : 1;
|
|
1169
|
+
moveOffset[moveAxis] = position - rectangle[axis];
|
|
1170
|
+
const path = PlaitBoard.findPath(board, distributeRefs[i].element);
|
|
1171
|
+
const newPoints = distributeRefs[i].element.points.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]);
|
|
1172
|
+
Transforms.setNode(board, {
|
|
1173
|
+
points: newPoints
|
|
1174
|
+
}, path);
|
|
1175
|
+
MERGING.set(board, true);
|
|
1176
|
+
position = position + rectangle[side] + offset;
|
|
1177
|
+
}
|
|
1178
|
+
MERGING.set(board, false);
|
|
1179
|
+
};
|
|
1141
1180
|
const AlignTransform = {
|
|
1142
1181
|
alignTop,
|
|
1143
1182
|
alignHorizontalCenter,
|
|
1144
1183
|
alignBottom,
|
|
1145
1184
|
alignLeft,
|
|
1146
1185
|
alignVerticalCenter,
|
|
1147
|
-
alignRight
|
|
1186
|
+
alignRight,
|
|
1187
|
+
distributeHorizontal,
|
|
1188
|
+
distributeVertical
|
|
1189
|
+
};
|
|
1190
|
+
|
|
1191
|
+
const setTextMarks = (board, mark) => {
|
|
1192
|
+
const selectedElements = getSelectedElements(board);
|
|
1193
|
+
if (selectedElements.length) {
|
|
1194
|
+
const firstEditor = getTextEditors(selectedElements[0])[0];
|
|
1195
|
+
const activeMarks = PlaitMarkEditor.getMarks(firstEditor);
|
|
1196
|
+
const elements = selectedElements.filter(element => {
|
|
1197
|
+
const editors = getTextEditors(element);
|
|
1198
|
+
return editors.some(editor => {
|
|
1199
|
+
const elementMarks = PlaitMarkEditor.getMarks(editor);
|
|
1200
|
+
return elementMarks[mark] === activeMarks[mark];
|
|
1201
|
+
});
|
|
1202
|
+
});
|
|
1203
|
+
elements.forEach(element => {
|
|
1204
|
+
const editors = getTextEditors(element);
|
|
1205
|
+
editors.forEach(editor => PlaitMarkEditor.toggleMark(editor, mark));
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
};
|
|
1209
|
+
const setFontSize = (board, size, defaultFontSize) => {
|
|
1210
|
+
const selectedElements = getSelectedElements(board);
|
|
1211
|
+
if (selectedElements.length) {
|
|
1212
|
+
selectedElements.forEach(element => {
|
|
1213
|
+
const editors = getTextEditors(element);
|
|
1214
|
+
const finalDefaultFontSize = typeof defaultFontSize === 'function' ? defaultFontSize(element) : defaultFontSize;
|
|
1215
|
+
editors.forEach(editor => PlaitMarkEditor.setFontSizeMark(editor, size, finalDefaultFontSize));
|
|
1216
|
+
});
|
|
1217
|
+
}
|
|
1218
|
+
};
|
|
1219
|
+
const setTextColor = (board, color, textSelection) => {
|
|
1220
|
+
const selectedElements = getSelectedElements(board);
|
|
1221
|
+
if (selectedElements?.length) {
|
|
1222
|
+
selectedElements.forEach(element => {
|
|
1223
|
+
const editors = getTextEditors(element);
|
|
1224
|
+
editors.forEach(editor => {
|
|
1225
|
+
if (textSelection) {
|
|
1226
|
+
Transforms$1.select(editor, textSelection);
|
|
1227
|
+
}
|
|
1228
|
+
if (color === 'transparent') {
|
|
1229
|
+
Editor.removeMark(editor, MarkTypes.color);
|
|
1230
|
+
}
|
|
1231
|
+
else {
|
|
1232
|
+
PlaitMarkEditor.setColorMark(editor, color);
|
|
1233
|
+
}
|
|
1234
|
+
});
|
|
1235
|
+
});
|
|
1236
|
+
}
|
|
1237
|
+
};
|
|
1238
|
+
const setTextAlign = (board, align) => {
|
|
1239
|
+
const selectedElements = getSelectedElements(board);
|
|
1240
|
+
if (selectedElements?.length) {
|
|
1241
|
+
selectedElements.forEach(element => {
|
|
1242
|
+
const editors = getTextEditors(element);
|
|
1243
|
+
editors.forEach(editor => AlignEditor.setAlign(editor, align));
|
|
1244
|
+
});
|
|
1245
|
+
}
|
|
1148
1246
|
};
|
|
1247
|
+
const TextTransforms = { setTextAlign, setTextColor, setFontSize, setTextMarks };
|
|
1149
1248
|
|
|
1150
1249
|
const normalizeShapePoints = (points, shift = false) => {
|
|
1151
1250
|
let start = points[0];
|
|
@@ -1175,7 +1274,7 @@ const withResize = (board, options) => {
|
|
|
1175
1274
|
pointerDown(event);
|
|
1176
1275
|
return;
|
|
1177
1276
|
}
|
|
1178
|
-
const point =
|
|
1277
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
1179
1278
|
resizeDetectResult = options.detect(point);
|
|
1180
1279
|
if (resizeDetectResult) {
|
|
1181
1280
|
if (resizeDetectResult.cursorClass) {
|
|
@@ -1203,7 +1302,6 @@ const withResize = (board, options) => {
|
|
|
1203
1302
|
// prevent text from being selected
|
|
1204
1303
|
event.preventDefault();
|
|
1205
1304
|
const endPoint = [event.x, event.y];
|
|
1206
|
-
;
|
|
1207
1305
|
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
1208
1306
|
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
1209
1307
|
addResizing(board, resizeRef, options.key);
|
|
@@ -1214,7 +1312,7 @@ const withResize = (board, options) => {
|
|
|
1214
1312
|
if (isResizing(board) && startPoint) {
|
|
1215
1313
|
// prevent text from being selected
|
|
1216
1314
|
event.preventDefault();
|
|
1217
|
-
const endTransformPoint =
|
|
1315
|
+
const endTransformPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
1218
1316
|
throttleRAF(() => {
|
|
1219
1317
|
const endPoint = [event.x, event.y];
|
|
1220
1318
|
if (startPoint && resizeRef) {
|
|
@@ -1227,7 +1325,7 @@ const withResize = (board, options) => {
|
|
|
1227
1325
|
return;
|
|
1228
1326
|
}
|
|
1229
1327
|
else {
|
|
1230
|
-
const point =
|
|
1328
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
1231
1329
|
const resizeDetectResult = options.detect(point);
|
|
1232
1330
|
if (resizeDetectResult) {
|
|
1233
1331
|
if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {
|
|
@@ -1383,5 +1481,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1383
1481
|
* Generated bundle index. Do not edit.
|
|
1384
1482
|
*/
|
|
1385
1483
|
|
|
1386
|
-
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getFirstTextEditor, getFirstTextManage, getGraphPoints, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, getTextMarksByElement, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, memorizeLatest, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, routeAdjust, selectImage, setCreationMode, setProperty, withResize };
|
|
1484
|
+
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, TextTransforms, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, distributeHorizontal, distributeVertical, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getFirstTextEditor, getFirstTextManage, getGraphPoints, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, getTextMarksByElement, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, memorizeLatest, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, routeAdjust, selectImage, setCreationMode, setProperty, withResize };
|
|
1387
1485
|
//# sourceMappingURL=plait-common.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions { prepend?: boolean }\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ViewContainerRef,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient, ResizeCursorClass, setDragging } from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n if (Point.isEquals(source, target)) {\n return {\n x: 1,\n y: 1\n };\n }\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\nimport { CustomText, PlaitMarkEditor } from '@plait/text';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n throw new Error('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n\nexport const getFirstTextEditor = (element: PlaitElement) => {\n const textEditor = getTextEditors(element)[0];\n if (!textEditor) {\n throw new Error('can not find textEditor');\n }\n return textEditor;\n};\n\nexport const getTextMarksByElement = (element: PlaitElement) => {\n const editors = getTextEditors(element);\n const editor = editors[0];\n if (!editor) {\n return {};\n }\n if (editor.children.length === 0) {\n const textManage = getTextManages(element)[0];\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarksByElement(textManage.componentRef.instance.children[0]);\n return currentMarks;\n }\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarks(editor);\n return currentMarks;\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient, downScale } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (xAxis)/vertical center line (yAxis)\n // 2. Find the point that intersects xAxis/yAxis in route, and find the line segment parallel to xAxis/yAxis in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||\n (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { MERGING, PlaitBoard, Point, RectangleClient, Transforms, getRectangleByElements, getSelectedElements } from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n let elements = getSelectedElements(board);\n elements = elements.filter(element => board.children.includes(element));\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points) return;\n const path = PlaitBoard.findPath(board, element);\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n const newPoints = element.points.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toPoint,\n transformPoint,\n ResizeCursorClass\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n afterResize?: (resizeRef: ResizeRef<T, K>) => void;\n beforeResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n // prevent text from being selected when user pressed shift and pointer down\n event.preventDefault();\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n const endPoint = [event.x, event.y];;\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.beforeResize && options.beforeResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/utils/memorize.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/transforms/align.ts","../../../packages/common/src/transforms/text.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions { prepend?: boolean }\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n if (this.options?.prepend) {\n parentG.prepend(g);\n } else {\n parentG.appendChild(g);\n }\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T> & GeneratorOptions\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator, GeneratorOptions } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ViewContainerRef,\n ImageGeneratorOptions<T> & GeneratorOptions\n> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient, ResizeCursorClass, setDragging } from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n setDragging(board, true);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n setDragging(board, false);\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n if (Point.isEquals(source, target)) {\n return {\n x: 1,\n y: 1\n };\n }\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\nimport { CustomText, PlaitMarkEditor } from '@plait/text';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getFirstTextManage = (element: PlaitElement) => {\n const textManage = getTextManages(element)[0];\n if (!textManage) {\n throw new Error('can not find textManage');\n }\n return textManage;\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n\nexport const getFirstTextEditor = (element: PlaitElement) => {\n const textEditor = getTextEditors(element)[0];\n if (!textEditor) {\n throw new Error('can not find textEditor');\n }\n return textEditor;\n};\n\nexport const getTextMarksByElement = (element: PlaitElement) => {\n const editors = getTextEditors(element);\n const editor = editors[0];\n if (!editor) {\n return {};\n }\n if (editor.children.length === 0) {\n const textManage = getTextManages(element)[0];\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarksByElement(textManage.componentRef.instance.children[0]);\n return currentMarks;\n }\n const currentMarks: Omit<CustomText, 'text'> = PlaitMarkEditor.getMarks(editor);\n return currentMarks;\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // Inflection point weight, if an inflection point occurs, cost + 1 to avoid the inflection point path\n // Three points on a line to determine whether there is an inflection point\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient, downScale } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n // Centerline correction: Correct the shortest path route based on the horizontal centerline/vertical centerline\n // 1. Find the horizontal center line (xAxis)/vertical center line (yAxis)\n // 2. Find the point that intersects xAxis/yAxis in route, and find the line segment parallel to xAxis/yAxis in route\n // 3. Construct a rectangle based on the intersection points and parallel lines found in the previous step.\n // 4. Determine whether the rectangle intersects with the element. If it does not intersect, the center line can be mapped based on the rectangle constructed in the previous step.\n // 5. Determine whether the path after mapping the center line meets the constraints (inflection point cannot be increased)\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // Construct a rectangle\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||\n (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitElement } from '@plait/core';\n\nconst map = new Map<string, any>();\n\nexport const memorizeLatest = <T extends PlaitElement = PlaitElement>(\n memorizedKey: string,\n propertyKey: keyof T,\n propertyValue: T[keyof T]\n) => {\n let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};\n obj[propertyKey] = propertyValue;\n map.set(memorizedKey, obj);\n};\n\nexport const getMemorizedLatest = <T extends PlaitElement = PlaitElement>(memorizedKey: string): T => {\n return map.get(memorizedKey);\n};\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\nimport { memorizeLatest } from '../utils';\n\nexport interface SetOptions<T extends PlaitElement = PlaitElement> {\n callback?: (element: T, path: Path) => void;\n getMemorizeKey?: (element: T) => string;\n match?: (element: T) => boolean;\n}\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(board: PlaitBoard, properties: Partial<T>, options?: SetOptions<T>) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n if (options?.match && !options?.match(element)) return;\n const path = PlaitBoard.findPath(board, element);\n const memorizeKey = options?.getMemorizeKey ? options?.getMemorizeKey(element) : '';\n for (let key in properties) {\n memorizeKey && memorizeLatest(memorizeKey, key, properties[key]);\n }\n if (options?.callback) {\n options.callback(element, path);\n } else {\n Transforms.setNode(board, properties, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string, options: SetOptions) => {\n setProperty(board, { strokeStyle }, options);\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string, options: SetOptions) => {\n setProperty(board, { fill }, options);\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string, options: SetOptions) => {\n setProperty(board, { strokeColor }, options);\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number, options: SetOptions) => {\n setProperty(board, { strokeWidth }, options);\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { C, MERGING, PlaitBoard, Point, RectangleClient, Transforms, getRectangleByElements, getSelectedElements } from '@plait/core';\n\nexport const alignTop = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y - rectangle.y] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignHorizontalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.y + outerRectangle.height / 2;\n const elementCenter = rectangle.y + rectangle.height / 2;\n return [0, outerCenter - elementCenter] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignBottom = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [0, outerRectangle.y + outerRectangle.height - (rectangle.y + rectangle.height)] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignLeft = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x - rectangle.x, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignVerticalCenter = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n const outerCenter = outerRectangle.x + outerRectangle.width / 2;\n const elementCenter = rectangle.x + rectangle.width / 2;\n return [outerCenter - elementCenter, 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nexport const alignRight = (board: PlaitBoard) => {\n function getOffset(outerRectangle: RectangleClient, rectangle: RectangleClient) {\n return [outerRectangle.x + outerRectangle.width - (rectangle.x + rectangle.width), 0] as Point;\n }\n setOffset(board, getOffset);\n};\n\nfunction setOffset(board: PlaitBoard, getOffset: (outerRectangle: RectangleClient, rectangle: RectangleClient) => Point) {\n let elements = getSelectedElements(board);\n elements = elements.filter(element => board.children.includes(element));\n const outerRectangle = getRectangleByElements(board, elements, false);\n elements.forEach(element => {\n if (!element.points) return;\n const path = PlaitBoard.findPath(board, element);\n const rectangle = board.getRectangle(element)!;\n const offset = getOffset(outerRectangle, rectangle);\n const newPoints = element.points.map(p => [p[0] + offset[0], p[1] + offset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n });\n MERGING.set(board, false);\n}\n\nexport const distributeHorizontal = (board: PlaitBoard) => {\n distribute(board, true);\n};\n\nexport const distributeVertical = (board: PlaitBoard) => {\n distribute(board, false);\n};\n\nconst distribute = (board: PlaitBoard, isHorizontal: boolean) => {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const selectedElements = getSelectedElements(board).filter(element => board.children.includes(element));\n const refs = selectedElements.map(element => {\n return { element, rectangle: board.getRectangle(element)! };\n });\n const outerRectangle = getRectangleByElements(board, selectedElements, false);\n const minRectangleRef = refs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis])[0];\n const maxRectangleRef = refs.sort((a, b) => b.rectangle[axis] + b.rectangle[side] - (a.rectangle[axis] + a.rectangle[side]))[0];\n const minIndex = refs.findIndex(ref => ref === minRectangleRef);\n const maxIndex = refs.findIndex(ref => ref === maxRectangleRef);\n let distributeRefs = refs.filter((element, index) => index !== minIndex && index !== maxIndex);\n const sum = distributeRefs.reduce((accumulator, current) => current.rectangle[side] + accumulator, 0);\n const offset =\n (outerRectangle[side] - minRectangleRef.rectangle[side] - maxRectangleRef.rectangle[side] - sum) / (distributeRefs.length + 1);\n distributeRefs = distributeRefs.sort((a, b) => a.rectangle[axis] - b.rectangle[axis]);\n let position = minRectangleRef.rectangle[axis] + minRectangleRef.rectangle[side] + offset;\n for (let i = 0; i < distributeRefs.length; i++) {\n const rectangle = distributeRefs[i].rectangle;\n const moveOffset = [0, 0];\n const moveAxis = isHorizontal ? 0 : 1;\n moveOffset[moveAxis] = position - rectangle[axis];\n const path = PlaitBoard.findPath(board, distributeRefs[i].element);\n const newPoints = distributeRefs[i].element.points!.map(p => [p[0] + moveOffset[0], p[1] + moveOffset[1]]) as Point[];\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n path\n );\n MERGING.set(board, true);\n position = position + rectangle[side] + offset;\n }\n MERGING.set(board, false);\n};\n\nexport interface AlignTransform {\n alignTop: (board: PlaitBoard) => void;\n alignHorizontalCenter: (board: PlaitBoard) => void;\n alignBottom: (board: PlaitBoard) => void;\n alignLeft: (board: PlaitBoard) => void;\n alignVerticalCenter: (board: PlaitBoard) => void;\n alignRight: (board: PlaitBoard) => void;\n distributeHorizontal: (board: PlaitBoard) => void;\n distributeVertical: (board: PlaitBoard) => void;\n}\n\nexport const AlignTransform: AlignTransform = {\n alignTop,\n alignHorizontalCenter,\n alignBottom,\n alignLeft,\n alignVerticalCenter,\n alignRight,\n distributeHorizontal,\n distributeVertical\n};\n","import { PlaitBoard, PlaitElement, getSelectedElements } from '@plait/core';\nimport { AlignEditor, Alignment, FontSizes, MarkTypes, PlaitMarkEditor } from '@plait/text';\nimport { BaseRange, Editor, Transforms as SlateTransforms } from 'slate';\nimport { AngularEditor } from 'slate-angular';\nimport { getTextEditors } from '../utils/text';\n\nconst setTextMarks = (board: PlaitBoard, mark: MarkTypes) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n const firstEditor = getTextEditors(selectedElements[0])[0];\n const activeMarks = PlaitMarkEditor.getMarks(firstEditor);\n const elements = selectedElements.filter(element => {\n const editors = getTextEditors(element);\n return editors.some(editor => {\n const elementMarks = PlaitMarkEditor.getMarks(editor);\n return elementMarks[mark] === activeMarks[mark];\n });\n });\n\n elements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => PlaitMarkEditor.toggleMark(editor, mark));\n });\n }\n};\n\nconst setFontSize = (board: PlaitBoard, size: FontSizes, defaultFontSize: number | ((element: PlaitElement) => number | undefined)) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n const finalDefaultFontSize = typeof defaultFontSize === 'function' ? defaultFontSize(element) : defaultFontSize;\n editors.forEach(editor => PlaitMarkEditor.setFontSizeMark(editor, size, finalDefaultFontSize));\n });\n }\n};\n\nconst setTextColor = (board: PlaitBoard, color: string, textSelection?: BaseRange) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => {\n if (textSelection) {\n SlateTransforms.select(editor, textSelection);\n }\n if (color === 'transparent') {\n Editor.removeMark(editor, MarkTypes.color);\n } else {\n PlaitMarkEditor.setColorMark(editor, color);\n }\n });\n });\n }\n};\n\nconst setTextAlign = (board: PlaitBoard, align: Alignment) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements?.length) {\n selectedElements.forEach(element => {\n const editors = getTextEditors(element);\n editors.forEach(editor => AlignEditor.setAlign(editor as AngularEditor, align));\n });\n }\n};\n\nexport const TextTransforms = { setTextAlign, setTextColor, setFontSize, setTextMarks };\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n ResizeCursorClass,\n toViewBoxPoint,\n toHostPoint\n} from '@plait/core';\nimport { ResizeHandle } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n afterResize?: (resizeRef: ResizeRef<T, K>) => void;\n beforeResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n !PlaitBoard.isReadonly(board) && !PlaitBoard.hasBeenTextEditing(board) && PlaitBoard.isPointer(board, PlaitPointerType.selection)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event) || !isMainPointer(event)) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n // prevent text from being selected when user pressed shift and pointer down\n event.preventDefault();\n return;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n const endPoint = [event.x, event.y];\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n MERGING.set(board, true);\n options.beforeResize && options.beforeResize(resizeRef!);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n }\n });\n return;\n } else {\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.beforeResize && options.beforeResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n addTextManage(textManage: TextManage) {\n this.textManages.push(textManage);\n }\n\n destroyTextManages() {\n this.getTextManages().forEach(manage => {\n manage.destroy();\n });\n this.textManages = [];\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["SlateTransforms"],"mappings":"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"}
|
package/package.json
CHANGED
package/transforms/align.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ export declare const alignBottom: (board: PlaitBoard) => void;
|
|
|
5
5
|
export declare const alignLeft: (board: PlaitBoard) => void;
|
|
6
6
|
export declare const alignVerticalCenter: (board: PlaitBoard) => void;
|
|
7
7
|
export declare const alignRight: (board: PlaitBoard) => void;
|
|
8
|
+
export declare const distributeHorizontal: (board: PlaitBoard) => void;
|
|
9
|
+
export declare const distributeVertical: (board: PlaitBoard) => void;
|
|
8
10
|
export interface AlignTransform {
|
|
9
11
|
alignTop: (board: PlaitBoard) => void;
|
|
10
12
|
alignHorizontalCenter: (board: PlaitBoard) => void;
|
|
@@ -12,5 +14,7 @@ export interface AlignTransform {
|
|
|
12
14
|
alignLeft: (board: PlaitBoard) => void;
|
|
13
15
|
alignVerticalCenter: (board: PlaitBoard) => void;
|
|
14
16
|
alignRight: (board: PlaitBoard) => void;
|
|
17
|
+
distributeHorizontal: (board: PlaitBoard) => void;
|
|
18
|
+
distributeVertical: (board: PlaitBoard) => void;
|
|
15
19
|
}
|
|
16
20
|
export declare const AlignTransform: AlignTransform;
|
package/transforms/index.d.ts
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitElement } from '@plait/core';
|
|
2
|
+
import { Alignment, FontSizes, MarkTypes } from '@plait/text';
|
|
3
|
+
import { BaseRange } from 'slate';
|
|
4
|
+
export declare const TextTransforms: {
|
|
5
|
+
setTextAlign: (board: PlaitBoard, align: Alignment) => void;
|
|
6
|
+
setTextColor: (board: PlaitBoard, color: string, textSelection?: BaseRange) => void;
|
|
7
|
+
setFontSize: (board: PlaitBoard, size: FontSizes, defaultFontSize: number | ((element: PlaitElement) => number | undefined)) => void;
|
|
8
|
+
setTextMarks: (board: PlaitBoard, mark: MarkTypes) => void;
|
|
9
|
+
};
|