@plait/mind 0.32.0 → 0.33.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.
Files changed (33) hide show
  1. package/base/index.d.ts +0 -1
  2. package/esm2022/base/index.mjs +1 -2
  3. package/esm2022/generators/node-active.generator.mjs +43 -0
  4. package/esm2022/generators/node-collapse.generator.mjs +108 -0
  5. package/esm2022/generators/node-emojis.generator.mjs +72 -0
  6. package/esm2022/generators/node-plus.generator.mjs +97 -0
  7. package/esm2022/generators/node-shape.generator.mjs +19 -0
  8. package/esm2022/mind-node.component.mjs +28 -36
  9. package/esm2022/plugins/with-mind.mjs +3 -3
  10. package/esm2022/plugins/with-node-image.mjs +3 -3
  11. package/esm2022/utils/draw/node-dnd.mjs +2 -2
  12. package/esm2022/utils/node/common.mjs +2 -11
  13. package/fesm2022/plait-mind.mjs +55 -102
  14. package/fesm2022/plait-mind.mjs.map +1 -1
  15. package/{drawer → generators}/node-active.generator.d.ts +1 -1
  16. package/generators/node-collapse.generator.d.ts +8 -0
  17. package/{drawer/node-emojis.drawer.d.ts → generators/node-emojis.generator.d.ts} +3 -3
  18. package/generators/node-plus.generator.d.ts +7 -0
  19. package/{drawer → generators}/node-shape.generator.d.ts +1 -1
  20. package/mind-node.component.d.ts +8 -10
  21. package/package.json +1 -1
  22. package/styles/styles.scss +7 -6
  23. package/utils/node/common.d.ts +1 -2
  24. package/utils/space/node-space.d.ts +1 -1
  25. package/base/base.drawer.d.ts +0 -15
  26. package/drawer/node-collapse.drawer.d.ts +0 -8
  27. package/drawer/node-insert.drawer.d.ts +0 -7
  28. package/esm2022/base/base.drawer.mjs +0 -29
  29. package/esm2022/drawer/node-active.generator.mjs +0 -43
  30. package/esm2022/drawer/node-collapse.drawer.mjs +0 -108
  31. package/esm2022/drawer/node-emojis.drawer.mjs +0 -72
  32. package/esm2022/drawer/node-insert.drawer.mjs +0 -98
  33. package/esm2022/drawer/node-shape.generator.mjs +0 -19
package/base/index.d.ts CHANGED
@@ -1,2 +1 @@
1
- export * from './base.drawer';
2
1
  export * from './emoji-base.component';
@@ -1,3 +1,2 @@
1
- export * from './base.drawer';
2
1
  export * from './emoji-base.component';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9iYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Jhc2UuZHJhd2VyJztcbmV4cG9ydCAqIGZyb20gJy4vZW1vamktYmFzZS5jb21wb25lbnQnO1xuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9iYXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Vtb2ppLWJhc2UuY29tcG9uZW50JztcbiJdfQ==
@@ -0,0 +1,43 @@
1
+ import { ACTIVE_STROKE_WIDTH, PlaitBoard, RectangleClient, createG, drawRoundRectangle } from '@plait/core';
2
+ import { MindElement } from '../interfaces';
3
+ import { getRectangleByNode } from '../utils/position/node';
4
+ import { PRIMARY_COLOR } from '../constants/default';
5
+ import { AbstractNode } from '@plait/layouts';
6
+ import { drawAbstractIncludedOutline } from '../utils/draw/abstract-outline';
7
+ import { DefaultNodeStyle } from '../constants/node-style';
8
+ import { getStrokeWidthByElement } from '../utils/node-style/shape';
9
+ import { Generator } from '@plait/common';
10
+ export class NodeActiveGenerator extends Generator {
11
+ canDraw(element, data) {
12
+ if (data.selected) {
13
+ return true;
14
+ }
15
+ else {
16
+ return false;
17
+ }
18
+ }
19
+ draw(element, data) {
20
+ const activeG = createG();
21
+ const node = MindElement.getNode(element);
22
+ const rectangle = getRectangleByNode(node);
23
+ const strokeWidth = getStrokeWidthByElement(this.board, element);
24
+ const activeStrokeWidth = ACTIVE_STROKE_WIDTH;
25
+ const activeRectangle = RectangleClient.inflate(rectangle, activeStrokeWidth);
26
+ const strokeG = drawRoundRectangle(PlaitBoard.getRoughSVG(this.board), activeRectangle.x, activeRectangle.y, activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height, { stroke: PRIMARY_COLOR, strokeWidth: activeStrokeWidth, fill: '' }, true, DefaultNodeStyle.shape.rectangleRadius + (activeStrokeWidth + strokeWidth) / 2);
27
+ if (AbstractNode.isAbstract(element)) {
28
+ this.abstractOutlineG = drawAbstractIncludedOutline(this.board, PlaitBoard.getRoughSVG(this.board), element);
29
+ activeG.append(this.abstractOutlineG);
30
+ strokeG.classList.add('abstract-element');
31
+ }
32
+ activeG.appendChild(strokeG);
33
+ return activeG;
34
+ }
35
+ updateAbstractOutline(element, activeHandlePosition, resizingLocation) {
36
+ if (this.abstractOutlineG) {
37
+ this.abstractOutlineG.remove();
38
+ }
39
+ this.abstractOutlineG = drawAbstractIncludedOutline(this.board, PlaitBoard.getRoughSVG(this.board), element, activeHandlePosition, resizingLocation);
40
+ this.g.append(this.abstractOutlineG);
41
+ }
42
+ }
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1hY3RpdmUuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvZ2VuZXJhdG9ycy9ub2RlLWFjdGl2ZS5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVHLE9BQU8sRUFBRSxXQUFXLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzFDLE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxTQUFrQztJQUd2RSxPQUFPLENBQUMsT0FBOEIsRUFBRSxJQUFnQjtRQUNwRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBOEIsRUFBRSxJQUFnQjtRQUNqRCxNQUFNLE9BQU8sR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQztRQUM5QyxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUM5QixVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDbEMsZUFBZSxDQUFDLENBQUMsRUFDakIsZUFBZSxDQUFDLENBQUMsRUFDakIsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUN6QyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQzFDLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUNuRSxJQUFJLEVBQ0osZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FDakYsQ0FBQztRQUNGLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3RyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDN0M7UUFDRCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFvQixFQUFFLG9CQUE2QyxFQUFFLGdCQUF5QjtRQUNoSCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsMkJBQTJCLENBQy9DLElBQUksQ0FBQyxLQUFLLEVBQ1YsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLE9BQU8sRUFDUCxvQkFBb0IsRUFDcEIsZ0JBQWdCLENBQ25CLENBQUM7UUFDRixJQUFJLENBQUMsQ0FBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRILCBQbGFpdEJvYXJkLCBSZWN0YW5nbGVDbGllbnQsIGNyZWF0ZUcsIGRyYXdSb3VuZFJlY3RhbmdsZSB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50LCBCYXNlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBQUklNQVJZX0NPTE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lIH0gZnJvbSAnLi4vdXRpbHMvZHJhdy9hYnN0cmFjdC1vdXRsaW5lJztcbmltcG9ydCB7IEFic3RyYWN0SGFuZGxlUG9zaXRpb24gfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtYWJzdHJhY3QtcmVzaXplLmJvYXJkJztcbmltcG9ydCB7IERlZmF1bHROb2RlU3R5bGUgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZS1zdHlsZSc7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL25vZGUtc3R5bGUvc2hhcGUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZlRGF0YSB7XG4gICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgaXNFZGl0aW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgTm9kZUFjdGl2ZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcjxNaW5kRWxlbWVudCwgQWN0aXZlRGF0YT4ge1xuICAgIGFic3RyYWN0T3V0bGluZUc/OiBTVkdHRWxlbWVudDtcblxuICAgIGNhbkRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQ8QmFzZURhdGE+LCBkYXRhOiBBY3RpdmVEYXRhKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChkYXRhLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQ8QmFzZURhdGE+LCBkYXRhOiBBY3RpdmVEYXRhKTogU1ZHR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBhY3RpdmVHID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCBub2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5vZGUpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBhY3RpdmVTdHJva2VXaWR0aCA9IEFDVElWRV9TVFJPS0VfV0lEVEg7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgYWN0aXZlU3Ryb2tlV2lkdGgpO1xuICAgICAgICBjb25zdCBzdHJva2VHID0gZHJhd1JvdW5kUmVjdGFuZ2xlKFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgIGFjdGl2ZVJlY3RhbmdsZS54LFxuICAgICAgICAgICAgYWN0aXZlUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICBhY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgIGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgIHsgc3Ryb2tlOiBQUklNQVJZX0NPTE9SLCBzdHJva2VXaWR0aDogYWN0aXZlU3Ryb2tlV2lkdGgsIGZpbGw6ICcnIH0sXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgRGVmYXVsdE5vZGVTdHlsZS5zaGFwZS5yZWN0YW5nbGVSYWRpdXMgKyAoYWN0aXZlU3Ryb2tlV2lkdGggKyBzdHJva2VXaWR0aCkgLyAyXG4gICAgICAgICk7XG4gICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hYnN0cmFjdE91dGxpbmVHID0gZHJhd0Fic3RyYWN0SW5jbHVkZWRPdXRsaW5lKHRoaXMuYm9hcmQsIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCksIGVsZW1lbnQpO1xuICAgICAgICAgICAgYWN0aXZlRy5hcHBlbmQodGhpcy5hYnN0cmFjdE91dGxpbmVHKTtcbiAgICAgICAgICAgIHN0cm9rZUcuY2xhc3NMaXN0LmFkZCgnYWJzdHJhY3QtZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGFjdGl2ZUcuYXBwZW5kQ2hpbGQoc3Ryb2tlRyk7XG4gICAgICAgIHJldHVybiBhY3RpdmVHO1xuICAgIH1cblxuICAgIHVwZGF0ZUFic3RyYWN0T3V0bGluZShlbGVtZW50OiBNaW5kRWxlbWVudCwgYWN0aXZlSGFuZGxlUG9zaXRpb24/OiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLCByZXNpemluZ0xvY2F0aW9uPzogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmFic3RyYWN0T3V0bGluZUcpIHtcbiAgICAgICAgICAgIHRoaXMuYWJzdHJhY3RPdXRsaW5lRy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFic3RyYWN0T3V0bGluZUcgPSBkcmF3QWJzdHJhY3RJbmNsdWRlZE91dGxpbmUoXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbixcbiAgICAgICAgICAgIHJlc2l6aW5nTG9jYXRpb25cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5nIS5hcHBlbmQodGhpcy5hYnN0cmFjdE91dGxpbmVHKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,108 @@
1
+ import { PlaitBoard, PlaitPointerType, Transforms, createG, createText, drawLinearPath } from '@plait/core';
2
+ import { MindElement, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';
3
+ import { getRectangleByNode } from '../utils/position/node';
4
+ import { getShapeByElement } from '../utils/node-style/shape';
5
+ import { EXTEND_OFFSET, EXTEND_DIAMETER } from '../constants/default';
6
+ import { isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';
7
+ import { MindQueries } from '../queries';
8
+ import { fromEvent } from 'rxjs';
9
+ import { getChildrenCount } from '../utils/mind';
10
+ import { filter, take } from 'rxjs/operators';
11
+ import { getBranchColorByMindElement, getBranchWidthByMindElement } from '../utils/node-style/branch';
12
+ import { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../utils/point-placement';
13
+ import { HorizontalPlacement, VerticalPlacement } from '../interfaces/types';
14
+ import { Generator } from '@plait/common';
15
+ export class CollapseGenerator extends Generator {
16
+ canDraw(element) {
17
+ if (element.children.length && !PlaitMind.isMind(element)) {
18
+ return true;
19
+ }
20
+ return false;
21
+ }
22
+ draw(element) {
23
+ const collapseG = createG();
24
+ collapseG.classList.add('collapse');
25
+ const node = MindElement.getNode(element);
26
+ const stroke = getBranchColorByMindElement(this.board, element);
27
+ const branchWidth = getBranchWidthByMindElement(this.board, element);
28
+ const layout = MindQueries.getLayoutByElement(element);
29
+ const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;
30
+ const isHorizontal = isHorizontalLayout(layout);
31
+ const nodeClient = getRectangleByNode(node);
32
+ let linkDirection = getLayoutDirection(node, isHorizontal);
33
+ if (isIndentedLayout(layout)) {
34
+ linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;
35
+ }
36
+ let placement = [HorizontalPlacement.right, VerticalPlacement.middle];
37
+ transformPlacement(placement, linkDirection);
38
+ // underline shape and horizontal
39
+ if (isHorizontal && isUnderlineShape && !element.isRoot) {
40
+ placement[1] = VerticalPlacement.bottom;
41
+ }
42
+ let startPoint = getPointByPlacement(nodeClient, placement);
43
+ const endPoint = moveXOfPoint(startPoint, EXTEND_OFFSET, linkDirection);
44
+ const circleCenter = moveXOfPoint(endPoint, EXTEND_DIAMETER / 2, linkDirection);
45
+ const arrowPoints = this.getArrowPoints(circleCenter, linkDirection);
46
+ const arrowLine = drawLinearPath(arrowPoints, {
47
+ stroke,
48
+ strokeWidth: 2
49
+ });
50
+ const extendLine = PlaitBoard.getRoughSVG(this.board).line(startPoint[0], startPoint[1], endPoint[0], endPoint[1], {
51
+ strokeWidth: branchWidth,
52
+ stroke
53
+ });
54
+ const badge = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {
55
+ fill: stroke,
56
+ stroke,
57
+ fillStyle: 'solid'
58
+ });
59
+ const hideCircleG = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {
60
+ fill: '#fff',
61
+ stroke,
62
+ strokeWidth: branchWidth > 3 ? 3 : branchWidth,
63
+ fillStyle: 'solid'
64
+ });
65
+ if (element.isCollapsed) {
66
+ let numberOffset = 0;
67
+ if (getChildrenCount(element) >= 10)
68
+ numberOffset = -2;
69
+ if (getChildrenCount(element) === 1)
70
+ numberOffset = 1;
71
+ const badgeText = createText(circleCenter[0] - 4 + numberOffset, circleCenter[1] + 4, stroke, `${getChildrenCount(element)}`);
72
+ badge.setAttribute('style', 'opacity: 0.15');
73
+ badgeText.setAttribute('style', 'font-size: 12px');
74
+ collapseG.appendChild(badge);
75
+ collapseG.appendChild(badgeText);
76
+ collapseG.appendChild(extendLine);
77
+ }
78
+ else {
79
+ collapseG.appendChild(hideCircleG);
80
+ collapseG.appendChild(arrowLine);
81
+ }
82
+ collapseG.appendChild(extendLine);
83
+ return collapseG;
84
+ }
85
+ afterDraw(element) {
86
+ if (!this.g) {
87
+ throw new Error(`can not find quick insert g`);
88
+ }
89
+ fromEvent(this.g, 'pointerdown')
90
+ .pipe(filter(() => !PlaitBoard.isPointer(this.board, PlaitPointerType.hand) || !!PlaitBoard.isReadonly(this.board)), take(1))
91
+ .subscribe((event) => {
92
+ event.preventDefault();
93
+ const isCollapsed = !element.isCollapsed;
94
+ const newElement = { isCollapsed };
95
+ const path = PlaitBoard.findPath(this.board, element);
96
+ Transforms.setNode(this.board, newElement, path);
97
+ });
98
+ }
99
+ getArrowPoints(circleCenter, linkDirection) {
100
+ let arrowTopPoint = moveXOfPoint(circleCenter, 2, linkDirection);
101
+ arrowTopPoint = moveYOfPoint(arrowTopPoint, 4, linkDirection);
102
+ const arrowMiddlePoint = moveXOfPoint(circleCenter, -2, linkDirection);
103
+ let arrowBottomPoint = moveXOfPoint(circleCenter, 2, linkDirection);
104
+ arrowBottomPoint = moveYOfPoint(arrowBottomPoint, -4, linkDirection);
105
+ return [arrowTopPoint, arrowMiddlePoint, arrowBottomPoint];
106
+ }
107
+ }
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1jb2xsYXBzZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9nZW5lcmF0b3JzL25vZGUtY29sbGFwc2UuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQVMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxXQUFXLEVBQVksU0FBUyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkksT0FBTyxFQUFFLG1CQUFtQixFQUFrQixp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VUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sY0FBYyxDQUFDLFlBQW1CLEVBQUUsYUFBOEI7UUFDdEUsSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakUsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN2RSxJQUFJLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ3BFLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVyRSxPQUFPLENBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRQb2ludGVyVHlwZSwgUG9pbnQsIFRyYW5zZm9ybXMsIGNyZWF0ZUcsIGNyZWF0ZVRleHQsIGRyYXdMaW5lYXJQYXRoIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIEJhc2VEYXRhLCBQbGFpdE1pbmQsIE1pbmRFbGVtZW50U2hhcGUsIExheW91dERpcmVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vdXRpbHMvcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBnZXRTaGFwZUJ5RWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL25vZGUtc3R5bGUvc2hhcGUnO1xuaW1wb3J0IHsgRVhURU5EX09GRlNFVCwgRVhURU5EX0RJQU1FVEVSIH0gZnJvbSAnLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgTWluZExheW91dFR5cGUsIGlzSG9yaXpvbnRhbExheW91dCwgaXNJbmRlbnRlZExheW91dCwgaXNUb3BMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRDaGlsZHJlbkNvdW50IH0gZnJvbSAnLi4vdXRpbHMvbWluZCc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBnZXRCcmFuY2hDb2xvckJ5TWluZEVsZW1lbnQsIGdldEJyYW5jaFdpZHRoQnlNaW5kRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL25vZGUtc3R5bGUvYnJhbmNoJztcbmltcG9ydCB7IGdldExheW91dERpcmVjdGlvbiwgZ2V0UG9pbnRCeVBsYWNlbWVudCwgbW92ZVhPZlBvaW50LCBtb3ZlWU9mUG9pbnQsIHRyYW5zZm9ybVBsYWNlbWVudCB9IGZyb20gJy4uL3V0aWxzL3BvaW50LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBIb3Jpem9udGFsUGxhY2VtZW50LCBQb2ludFBsYWNlbWVudCwgVmVydGljYWxQbGFjZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3R5cGVzJztcbmltcG9ydCB7IEFmdGVyRHJhdywgR2VuZXJhdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmV4cG9ydCBjbGFzcyBDb2xsYXBzZUdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcjxNaW5kRWxlbWVudD4gaW1wbGVtZW50cyBBZnRlckRyYXcge1xuICAgIGNhbkRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQ8QmFzZURhdGE+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCAmJiAhUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQ8QmFzZURhdGE+KTogU1ZHR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBjb2xsYXBzZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbGxhcHNlRy5jbGFzc0xpc3QuYWRkKCdjb2xsYXBzZScpO1xuICAgICAgICBjb25zdCBub2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlID0gZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBicmFuY2hXaWR0aCA9IGdldEJyYW5jaFdpZHRoQnlNaW5kRWxlbWVudCh0aGlzLmJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0TGF5b3V0QnlFbGVtZW50KGVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgICAgICBjb25zdCBpc1VuZGVybGluZVNoYXBlID0gZ2V0U2hhcGVCeUVsZW1lbnQodGhpcy5ib2FyZCwgZWxlbWVudCkgPT09IE1pbmRFbGVtZW50U2hhcGUudW5kZXJsaW5lO1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxMYXlvdXQobGF5b3V0KTtcbiAgICAgICAgY29uc3Qgbm9kZUNsaWVudCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShub2RlKTtcbiAgICAgICAgbGV0IGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24obm9kZSwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgbGlua0RpcmVjdGlvbiA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyBMYXlvdXREaXJlY3Rpb24udG9wIDogTGF5b3V0RGlyZWN0aW9uLmJvdHRvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQucmlnaHQsIFZlcnRpY2FsUGxhY2VtZW50Lm1pZGRsZV07XG5cbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KHBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgLy8gdW5kZXJsaW5lIHNoYXBlIGFuZCBob3Jpem9udGFsXG4gICAgICAgIGlmIChpc0hvcml6b250YWwgJiYgaXNVbmRlcmxpbmVTaGFwZSAmJiAhZWxlbWVudC5pc1Jvb3QpIHtcbiAgICAgICAgICAgIHBsYWNlbWVudFsxXSA9IFZlcnRpY2FsUGxhY2VtZW50LmJvdHRvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydFBvaW50ID0gZ2V0UG9pbnRCeVBsYWNlbWVudChub2RlQ2xpZW50LCBwbGFjZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IG1vdmVYT2ZQb2ludChzdGFydFBvaW50LCBFWFRFTkRfT0ZGU0VULCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgY2lyY2xlQ2VudGVyID0gbW92ZVhPZlBvaW50KGVuZFBvaW50LCBFWFRFTkRfRElBTUVURVIgLyAyLCBsaW5rRGlyZWN0aW9uKTtcblxuICAgICAgICBjb25zdCBhcnJvd1BvaW50cyA9IHRoaXMuZ2V0QXJyb3dQb2ludHMoY2lyY2xlQ2VudGVyLCBsaW5rRGlyZWN0aW9uKTtcblxuICAgICAgICBjb25zdCBhcnJvd0xpbmUgPSBkcmF3TGluZWFyUGF0aChhcnJvd1BvaW50cywge1xuICAgICAgICAgICAgc3Ryb2tlLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZXh0ZW5kTGluZSA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkubGluZShzdGFydFBvaW50WzBdLCBzdGFydFBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0sIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBicmFuY2hXaWR0aCxcbiAgICAgICAgICAgIHN0cm9rZVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBiYWRnZSA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkuY2lyY2xlKGNpcmNsZUNlbnRlclswXSwgY2lyY2xlQ2VudGVyWzFdLCBFWFRFTkRfRElBTUVURVIsIHtcbiAgICAgICAgICAgIGZpbGw6IHN0cm9rZSxcbiAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBoaWRlQ2lyY2xlRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkuY2lyY2xlKGNpcmNsZUNlbnRlclswXSwgY2lyY2xlQ2VudGVyWzFdLCBFWFRFTkRfRElBTUVURVIsIHtcbiAgICAgICAgICAgIGZpbGw6ICcjZmZmJyxcbiAgICAgICAgICAgIHN0cm9rZSxcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBicmFuY2hXaWR0aCA+IDMgPyAzIDogYnJhbmNoV2lkdGgsXG4gICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIGxldCBudW1iZXJPZmZzZXQgPSAwO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQoZWxlbWVudCkgPj0gMTApIG51bWJlck9mZnNldCA9IC0yO1xuICAgICAgICAgICAgaWYgKGdldENoaWxkcmVuQ291bnQoZWxlbWVudCkgPT09IDEpIG51bWJlck9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhZGdlVGV4dCA9IGNyZWF0ZVRleHQoY2lyY2xlQ2VudGVyWzBdIC0gNCArIG51bWJlck9mZnNldCwgY2lyY2xlQ2VudGVyWzFdICsgNCwgc3Ryb2tlLCBgJHtnZXRDaGlsZHJlbkNvdW50KGVsZW1lbnQpfWApO1xuICAgICAgICAgICAgYmFkZ2Uuc2V0QXR0cmlidXRlKCdzdHlsZScsICdvcGFjaXR5OiAwLjE1Jyk7XG4gICAgICAgICAgICBiYWRnZVRleHQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdmb250LXNpemU6IDEycHgnKTtcbiAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChiYWRnZSk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoYmFkZ2VUZXh0KTtcbiAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChleHRlbmRMaW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChoaWRlQ2lyY2xlRyk7XG4gICAgICAgICAgICBjb2xsYXBzZUcuYXBwZW5kQ2hpbGQoYXJyb3dMaW5lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbGxhcHNlRy5hcHBlbmRDaGlsZChleHRlbmRMaW5lKTtcbiAgICAgICAgcmV0dXJuIGNvbGxhcHNlRztcbiAgICB9XG5cbiAgICBhZnRlckRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2FuIG5vdCBmaW5kIHF1aWNrIGluc2VydCBnYCk7XG4gICAgICAgIH1cblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmcsICdwb2ludGVyZG93bicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIVBsYWl0Qm9hcmQuaXNQb2ludGVyKHRoaXMuYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuaGFuZCkgfHwgISFQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkpLFxuICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gIWVsZW1lbnQuaXNDb2xsYXBzZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7IGlzQ29sbGFwc2VkIH07XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgodGhpcy5ib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKHRoaXMuYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcnJvd1BvaW50cyhjaXJjbGVDZW50ZXI6IFBvaW50LCBsaW5rRGlyZWN0aW9uOiBMYXlvdXREaXJlY3Rpb24pIHtcbiAgICAgICAgbGV0IGFycm93VG9wUG9pbnQgPSBtb3ZlWE9mUG9pbnQoY2lyY2xlQ2VudGVyLCAyLCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgYXJyb3dUb3BQb2ludCA9IG1vdmVZT2ZQb2ludChhcnJvd1RvcFBvaW50LCA0LCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgY29uc3QgYXJyb3dNaWRkbGVQb2ludCA9IG1vdmVYT2ZQb2ludChjaXJjbGVDZW50ZXIsIC0yLCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgbGV0IGFycm93Qm90dG9tUG9pbnQgPSBtb3ZlWE9mUG9pbnQoY2lyY2xlQ2VudGVyLCAyLCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgYXJyb3dCb3R0b21Qb2ludCA9IG1vdmVZT2ZQb2ludChhcnJvd0JvdHRvbVBvaW50LCAtNCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIFthcnJvd1RvcFBvaW50LCBhcnJvd01pZGRsZVBvaW50LCBhcnJvd0JvdHRvbVBvaW50XTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,72 @@
1
+ import { MindElement } from '../interfaces';
2
+ import { createForeignObject, createG } from '@plait/core';
3
+ import { getEmojiFontSize } from '../utils/space/emoji';
4
+ import { getEmojiForeignRectangle } from '../utils/position/emoji';
5
+ class EmojiGenerator {
6
+ constructor(board, viewContainerRef) {
7
+ this.board = board;
8
+ this.viewContainerRef = viewContainerRef;
9
+ this.componentRef = null;
10
+ }
11
+ draw(emoji, element) {
12
+ this.destroy();
13
+ const componentType = this.board.drawEmoji(emoji, element);
14
+ this.componentRef = this.viewContainerRef.createComponent(componentType);
15
+ this.componentRef.instance.emojiItem = emoji;
16
+ this.componentRef.instance.board = this.board;
17
+ this.componentRef.instance.element = element;
18
+ this.componentRef.instance.fontSize = getEmojiFontSize(element);
19
+ }
20
+ get nativeElement() {
21
+ if (this.componentRef) {
22
+ return this.componentRef.instance.nativeElement;
23
+ }
24
+ else {
25
+ return null;
26
+ }
27
+ }
28
+ destroy() {
29
+ if (this.componentRef) {
30
+ this.componentRef.destroy();
31
+ this.componentRef = null;
32
+ }
33
+ }
34
+ }
35
+ export class NodeEmojisGenerator {
36
+ constructor(board, viewContainerRef) {
37
+ this.board = board;
38
+ this.viewContainerRef = viewContainerRef;
39
+ this.emojiGenerators = [];
40
+ }
41
+ drawEmojis(element) {
42
+ this.destroy();
43
+ if (MindElement.hasEmojis(element)) {
44
+ this.g = createG();
45
+ this.g.classList.add('emojis');
46
+ const foreignRectangle = getEmojiForeignRectangle(this.board, element);
47
+ const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
48
+ this.g.append(foreignObject);
49
+ const container = document.createElement('div');
50
+ container.classList.add('node-emojis-container');
51
+ foreignObject.append(container);
52
+ this.emojiGenerators = element.data.emojis.map(emojiItem => {
53
+ const drawer = new EmojiGenerator(this.board, this.viewContainerRef);
54
+ drawer.draw(emojiItem, element);
55
+ return drawer;
56
+ });
57
+ this.emojiGenerators.forEach(drawer => {
58
+ container.append(drawer.nativeElement);
59
+ });
60
+ return this.g;
61
+ }
62
+ return undefined;
63
+ }
64
+ destroy() {
65
+ if (this.g) {
66
+ this.g.remove();
67
+ }
68
+ this.emojiGenerators.forEach(drawer => drawer.destroy());
69
+ this.emojiGenerators = [];
70
+ }
71
+ }
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1lbW9qaXMuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvZ2VuZXJhdG9ycy9ub2RlLWVtb2ppcy5nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUF3QixXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUduRSxNQUFNLGNBQWM7SUFHaEIsWUFBb0IsS0FBcUIsRUFBVSxnQkFBa0M7UUFBakUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRnJGLGlCQUFZLEdBQWdELElBQUksQ0FBQztJQUV1QixDQUFDO0lBRXpGLElBQUksQ0FBQyxLQUFnQixFQUFFLE9BQStCO1FBQ2xELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQzdDLElBQUksQ0FBQyxZ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b21wb25lbnRSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVtb2ppRGF0YSwgRW1vamlJdGVtLCBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZEVtb2ppQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvZW1vamktYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgY3JlYXRlRm9yZWlnbk9iamVjdCwgY3JlYXRlRyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldEVtb2ppRm9udFNpemUgfSBmcm9tICcuLi91dGlscy9zcGFjZS9lbW9qaSc7XG5pbXBvcnQgeyBnZXRFbW9qaUZvcmVpZ25SZWN0YW5nbGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9lbW9qaSc7XG5pbXBvcnQgeyBQbGFpdE1pbmRCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcblxuY2xhc3MgRW1vamlHZW5lcmF0b3Ige1xuICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPE1pbmRFbW9qaUJhc2VDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgZHJhdyhlbW9qaTogRW1vamlJdGVtLCBlbGVtZW50OiBNaW5kRWxlbWVudDxFbW9qaURhdGE+KSB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5ib2FyZC5kcmF3RW1vamkoZW1vamksIGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50VHlwZSk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVtb2ppSXRlbSA9IGVtb2ppO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ib2FyZCA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5mb250U2l6ZSA9IGdldEVtb2ppRm9udFNpemUoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9kZUVtb2ppc0dlbmVyYXRvciB7XG4gICAgZW1vamlHZW5lcmF0b3JzOiBFbW9qaUdlbmVyYXRvcltdID0gW107XG5cbiAgICBnPzogU1ZHR0VsZW1lbnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgZHJhd0Vtb2ppcyhlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5nID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgdGhpcy5nLmNsYXNzTGlzdC5hZGQoJ2Vtb2ppcycpO1xuICAgICAgICAgICAgY29uc3QgZm9yZWlnblJlY3RhbmdsZSA9IGdldEVtb2ppRm9yZWlnblJlY3RhbmdsZSh0aGlzLmJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGZvcmVpZ25PYmplY3QgPSBjcmVhdGVGb3JlaWduT2JqZWN0KFxuICAgICAgICAgICAgICAgIGZvcmVpZ25SZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICBmb3JlaWduUmVjdGFuZ2xlLnksXG4gICAgICAgICAgICAgICAgZm9yZWlnblJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICBmb3JlaWduUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZy5hcHBlbmQoZm9yZWlnbk9iamVjdCk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdub2RlLWVtb2ppcy1jb250YWluZXInKTtcbiAgICAgICAgICAgIGZvcmVpZ25PYmplY3QuYXBwZW5kKGNvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLmVtb2ppR2VuZXJhdG9ycyA9IGVsZW1lbnQuZGF0YS5lbW9qaXMubWFwKGVtb2ppSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhd2VyID0gbmV3IEVtb2ppR2VuZXJhdG9yKHRoaXMuYm9hcmQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgICAgICAgICAgZHJhd2VyLmRyYXcoZW1vamlJdGVtLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZHJhd2VyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVtb2ppR2VuZXJhdG9ycy5mb3JFYWNoKGRyYXdlciA9PiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChkcmF3ZXIubmF0aXZlRWxlbWVudCEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZykge1xuICAgICAgICAgICAgdGhpcy5nLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1vamlHZW5lcmF0b3JzLmZvckVhY2goZHJhd2VyID0+IGRyYXdlci5kZXN0cm95KCkpO1xuICAgICAgICB0aGlzLmVtb2ppR2VuZXJhdG9ycyA9IFtdO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,97 @@
1
+ import { PlaitBoard, createG } from '@plait/core';
2
+ import { MindElement, PlaitMind, MindElementShape, LayoutDirection } from '../interfaces';
3
+ import { getRectangleByNode } from '../utils/position/node';
4
+ import { getShapeByElement } from '../utils/node-style/shape';
5
+ import { EXTEND_DIAMETER, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_INNER_CROSS_COLOR } from '../constants/default';
6
+ import { isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';
7
+ import { MindQueries } from '../queries';
8
+ import { fromEvent } from 'rxjs';
9
+ import { insertMindElement } from '../utils/mind';
10
+ import { take } from 'rxjs/operators';
11
+ import { findNewChildNodePath } from '../utils/path';
12
+ import { getBranchColorByMindElement, getBranchWidthByMindElement, getNextBranchColor } from '../utils/node-style/branch';
13
+ import { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../utils/point-placement';
14
+ import { HorizontalPlacement, VerticalPlacement } from '../interfaces/types';
15
+ import { Generator } from '@plait/common';
16
+ export class NodePlusGenerator extends Generator {
17
+ canDraw(element) {
18
+ if (PlaitBoard.isReadonly(this.board) || element?.isCollapsed) {
19
+ return false;
20
+ }
21
+ return true;
22
+ }
23
+ draw(element) {
24
+ const plusG = createG();
25
+ plusG.classList.add('plus');
26
+ const node = MindElement.getNode(element);
27
+ const layout = MindQueries.getLayoutByElement(element);
28
+ const isHorizontal = isHorizontalLayout(layout);
29
+ let linkDirection = getLayoutDirection(node, isHorizontal);
30
+ if (isIndentedLayout(layout)) {
31
+ linkDirection = isTopLayout(layout) ? LayoutDirection.top : LayoutDirection.bottom;
32
+ }
33
+ const isUnderlineShape = getShapeByElement(this.board, element) === MindElementShape.underline;
34
+ const nodeClient = getRectangleByNode(node);
35
+ const branchWidth = getBranchWidthByMindElement(this.board, element);
36
+ const branchColor = PlaitMind.isMind(element)
37
+ ? getNextBranchColor(this.board, element)
38
+ : getBranchColorByMindElement(this.board, element);
39
+ let distance = 8;
40
+ let placement = [HorizontalPlacement.right, VerticalPlacement.middle];
41
+ transformPlacement(placement, linkDirection);
42
+ // underline shape and horizontal
43
+ if (isHorizontal && isUnderlineShape && !element.isRoot) {
44
+ placement[1] = VerticalPlacement.bottom;
45
+ }
46
+ let beginPoint = getPointByPlacement(nodeClient, placement);
47
+ if (element.children.length > 0 && !element.isRoot) {
48
+ beginPoint = moveXOfPoint(beginPoint, EXTEND_DIAMETER + 8, linkDirection);
49
+ distance = 5;
50
+ }
51
+ const endPoint = moveXOfPoint(beginPoint, distance, linkDirection);
52
+ const circleCenter = moveXOfPoint(endPoint, 8, linkDirection);
53
+ const line = PlaitBoard.getRoughSVG(this.board).line(beginPoint[0], beginPoint[1], endPoint[0], endPoint[1], {
54
+ stroke: branchColor,
55
+ strokeWidth: branchWidth
56
+ });
57
+ const circle = PlaitBoard.getRoughSVG(this.board).circle(circleCenter[0], circleCenter[1], EXTEND_DIAMETER, {
58
+ fill: QUICK_INSERT_CIRCLE_COLOR,
59
+ stroke: QUICK_INSERT_CIRCLE_COLOR,
60
+ fillStyle: 'solid'
61
+ });
62
+ const HLineBeginPoint = [circleCenter[0] - 5, circleCenter[1]];
63
+ const HLineEndPoint = [circleCenter[0] + 5, circleCenter[1]];
64
+ const VLineBeginPoint = [circleCenter[0], circleCenter[1] - 5];
65
+ const VLineEndPoint = [circleCenter[0], circleCenter[1] + 5];
66
+ const innerCrossHLine = PlaitBoard.getRoughSVG(this.board).line(HLineBeginPoint[0], HLineBeginPoint[1], HLineEndPoint[0], HLineEndPoint[1], {
67
+ stroke: QUICK_INSERT_INNER_CROSS_COLOR,
68
+ strokeWidth: 2
69
+ });
70
+ const innerCrossVLine = PlaitBoard.getRoughSVG(this.board).line(VLineBeginPoint[0], VLineBeginPoint[1], VLineEndPoint[0], VLineEndPoint[1], {
71
+ stroke: QUICK_INSERT_INNER_CROSS_COLOR,
72
+ strokeWidth: 2
73
+ });
74
+ plusG.appendChild(line);
75
+ plusG.appendChild(circle);
76
+ plusG.appendChild(innerCrossHLine);
77
+ plusG.appendChild(innerCrossVLine);
78
+ return plusG;
79
+ }
80
+ afterDraw(element) {
81
+ if (!this.g) {
82
+ throw new Error(`can not find quick insert g`);
83
+ }
84
+ fromEvent(this.g, 'pointerdown')
85
+ .pipe(take(1))
86
+ .subscribe(e => {
87
+ e.preventDefault();
88
+ });
89
+ fromEvent(this.g, 'pointerup')
90
+ .pipe(take(1))
91
+ .subscribe(() => {
92
+ const path = findNewChildNodePath(this.board, element);
93
+ insertMindElement(this.board, element, path);
94
+ });
95
+ }
96
+ }
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wbHVzLmdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL2dlbmVyYXRvcnMvbm9kZS1wbHVzLmdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFZLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSx5QkFBeUIsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xILE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNySCxPQUFPLEVBQUUsbUJBQW1CLEVBQWtCLGlC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Q0FBQzthQUNiLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZELGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUF1QixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIGNyZWF0ZUcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgQmFzZURhdGEsIFBsYWl0TWluZCwgTWluZEVsZW1lbnRTaGFwZSwgTGF5b3V0RGlyZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IGdldFNoYXBlQnlFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvbm9kZS1zdHlsZS9zaGFwZSc7XG5pbXBvcnQgeyBFWFRFTkRfRElBTUVURVIsIFFVSUNLX0lOU0VSVF9DSVJDTEVfQ09MT1IsIFFVSUNLX0lOU0VSVF9JTk5FUl9DUk9TU19DT0xPUiB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IE1pbmRMYXlvdXRUeXBlLCBpc0hvcml6b250YWxMYXlvdXQsIGlzSW5kZW50ZWRMYXlvdXQsIGlzVG9wTGF5b3V0IH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuLi9xdWVyaWVzJztcbmltcG9ydCB7IGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaW5zZXJ0TWluZEVsZW1lbnQgfSBmcm9tICcuLi91dGlscy9taW5kJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmaW5kTmV3Q2hpbGROb2RlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGgnO1xuaW1wb3J0IHsgZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50LCBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQsIGdldE5leHRCcmFuY2hDb2xvciB9IGZyb20gJy4uL3V0aWxzL25vZGUtc3R5bGUvYnJhbmNoJztcbmltcG9ydCB7IGdldExheW91dERpcmVjdGlvbiwgZ2V0UG9pbnRCeVBsYWNlbWVudCwgbW92ZVhPZlBvaW50LCB0cmFuc2Zvcm1QbGFjZW1lbnQgfSBmcm9tICcuLi91dGlscy9wb2ludC1wbGFjZW1lbnQnO1xuaW1wb3J0IHsgSG9yaXpvbnRhbFBsYWNlbWVudCwgUG9pbnRQbGFjZW1lbnQsIFZlcnRpY2FsUGxhY2VtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90eXBlcyc7XG5pbXBvcnQgeyBBZnRlckRyYXcsIEdlbmVyYXRvciB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtbWluZC5ib2FyZCc7XG5cbmV4cG9ydCBjbGFzcyBOb2RlUGx1c0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvcjxNaW5kRWxlbWVudD4gaW1wbGVtZW50cyBBZnRlckRyYXcge1xuICAgIGNhbkRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQ8QmFzZURhdGE+KTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzUmVhZG9ubHkodGhpcy5ib2FyZCkgfHwgZWxlbWVudD8uaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IE1pbmRFbGVtZW50PEJhc2VEYXRhPik6IFNWR0dFbGVtZW50IHtcbiAgICAgICAgY29uc3QgcGx1c0cgPSBjcmVhdGVHKCk7XG4gICAgICAgIHBsdXNHLmNsYXNzTGlzdC5hZGQoJ3BsdXMnKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGxheW91dCA9IE1pbmRRdWVyaWVzLmdldExheW91dEJ5RWxlbWVudChlbGVtZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsTGF5b3V0KGxheW91dCk7XG4gICAgICAgIGxldCBsaW5rRGlyZWN0aW9uID0gZ2V0TGF5b3V0RGlyZWN0aW9uKG5vZGUsIGlzSG9yaXpvbnRhbCk7XG4gICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIGxpbmtEaXJlY3Rpb24gPSBpc1RvcExheW91dChsYXlvdXQpID8gTGF5b3V0RGlyZWN0aW9uLnRvcCA6IExheW91dERpcmVjdGlvbi5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNVbmRlcmxpbmVTaGFwZSA9IGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIGVsZW1lbnQpID09PSBNaW5kRWxlbWVudFNoYXBlLnVuZGVybGluZTtcbiAgICAgICAgY29uc3Qgbm9kZUNsaWVudCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShub2RlKTtcbiAgICAgICAgY29uc3QgYnJhbmNoV2lkdGggPSBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQodGhpcy5ib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGJyYW5jaENvbG9yID0gUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KVxuICAgICAgICAgICAgPyBnZXROZXh0QnJhbmNoQ29sb3IodGhpcy5ib2FyZCwgZWxlbWVudClcbiAgICAgICAgICAgIDogZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50KHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBsZXQgZGlzdGFuY2UgPSA4O1xuXG4gICAgICAgIGxldCBwbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQucmlnaHQsIFZlcnRpY2FsUGxhY2VtZW50Lm1pZGRsZV07XG5cbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KHBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgLy8gdW5kZXJsaW5lIHNoYXBlIGFuZCBob3Jpem9udGFsXG4gICAgICAgIGlmIChpc0hvcml6b250YWwgJiYgaXNVbmRlcmxpbmVTaGFwZSAmJiAhZWxlbWVudC5pc1Jvb3QpIHtcbiAgICAgICAgICAgIHBsYWNlbWVudFsxXSA9IFZlcnRpY2FsUGxhY2VtZW50LmJvdHRvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiZWdpblBvaW50ID0gZ2V0UG9pbnRCeVBsYWNlbWVudChub2RlQ2xpZW50LCBwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgIWVsZW1lbnQuaXNSb290KSB7XG4gICAgICAgICAgICBiZWdpblBvaW50ID0gbW92ZVhPZlBvaW50KGJlZ2luUG9pbnQsIEVYVEVORF9ESUFNRVRFUiArIDgsIGxpbmtEaXJlY3Rpb24pO1xuICAgICAgICAgICAgZGlzdGFuY2UgPSA1O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSBtb3ZlWE9mUG9pbnQoYmVnaW5Qb2ludCwgZGlzdGFuY2UsIGxpbmtEaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBjaXJjbGVDZW50ZXIgPSBtb3ZlWE9mUG9pbnQoZW5kUG9pbnQsIDgsIGxpbmtEaXJlY3Rpb24pO1xuXG4gICAgICAgIGNvbnN0IGxpbmUgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUoYmVnaW5Qb2ludFswXSwgYmVnaW5Qb2ludFsxXSwgZW5kUG9pbnRbMF0sIGVuZFBvaW50WzFdLCB7XG4gICAgICAgICAgICBzdHJva2U6IGJyYW5jaENvbG9yLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IGJyYW5jaFdpZHRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGNpcmNsZSA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkuY2lyY2xlKGNpcmNsZUNlbnRlclswXSwgY2lyY2xlQ2VudGVyWzFdLCBFWFRFTkRfRElBTUVURVIsIHtcbiAgICAgICAgICAgIGZpbGw6IFFVSUNLX0lOU0VSVF9DSVJDTEVfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2U6IFFVSUNLX0lOU0VSVF9DSVJDTEVfQ09MT1IsXG4gICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgSExpbmVCZWdpblBvaW50ID0gW2NpcmNsZUNlbnRlclswXSAtIDUsIGNpcmNsZUNlbnRlclsxXV07XG4gICAgICAgIGNvbnN0IEhMaW5lRW5kUG9pbnQgPSBbY2lyY2xlQ2VudGVyWzBdICsgNSwgY2lyY2xlQ2VudGVyWzFdXTtcbiAgICAgICAgY29uc3QgVkxpbmVCZWdpblBvaW50ID0gW2NpcmNsZUNlbnRlclswXSwgY2lyY2xlQ2VudGVyWzFdIC0gNV07XG4gICAgICAgIGNvbnN0IFZMaW5lRW5kUG9pbnQgPSBbY2lyY2xlQ2VudGVyWzBdLCBjaXJjbGVDZW50ZXJbMV0gKyA1XTtcblxuICAgICAgICBjb25zdCBpbm5lckNyb3NzSExpbmUgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUoXG4gICAgICAgICAgICBITGluZUJlZ2luUG9pbnRbMF0sXG4gICAgICAgICAgICBITGluZUJlZ2luUG9pbnRbMV0sXG4gICAgICAgICAgICBITGluZUVuZFBvaW50WzBdLFxuICAgICAgICAgICAgSExpbmVFbmRQb2ludFsxXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFFVSUNLX0lOU0VSVF9JTk5FUl9DUk9TU19DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMlxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IGlubmVyQ3Jvc3NWTGluZSA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkubGluZShcbiAgICAgICAgICAgIFZMaW5lQmVnaW5Qb2ludFswXSxcbiAgICAgICAgICAgIFZMaW5lQmVnaW5Qb2ludFsxXSxcbiAgICAgICAgICAgIFZMaW5lRW5kUG9pbnRbMF0sXG4gICAgICAgICAgICBWTGluZUVuZFBvaW50WzFdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogUVVJQ0tfSU5TRVJUX0lOTkVSX0NST1NTX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHBsdXNHLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgICAgICBwbHVzRy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgICAgICBwbHVzRy5hcHBlbmRDaGlsZChpbm5lckNyb3NzSExpbmUpO1xuICAgICAgICBwbHVzRy5hcHBlbmRDaGlsZChpbm5lckNyb3NzVkxpbmUpO1xuICAgICAgICByZXR1cm4gcGx1c0c7XG4gICAgfVxuXG4gICAgYWZ0ZXJEcmF3KGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbiBub3QgZmluZCBxdWljayBpbnNlcnQgZ2ApO1xuICAgICAgICB9XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmcsICdwb2ludGVyZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZywgJ3BvaW50ZXJ1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGZpbmROZXdDaGlsZE5vZGVQYXRoKHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KHRoaXMuYm9hcmQgYXMgUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQsIHBhdGgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,19 @@
1
+ import { Generator } from '@plait/common';
2
+ import { MindElementShape } from '../interfaces/element';
3
+ import { getRectangleByNode } from '../utils/position/node';
4
+ import { drawRoundRectangleByElement } from '../utils/draw/node-shape';
5
+ import { getShapeByElement } from '../utils/node-style/shape';
6
+ export class NodeShapeGenerator extends Generator {
7
+ canDraw(element, data) {
8
+ const shape = getShapeByElement(this.board, element);
9
+ if (shape === MindElementShape.roundRectangle) {
10
+ return true;
11
+ }
12
+ return false;
13
+ }
14
+ draw(element, data) {
15
+ const rectangle = getRectangleByNode(data.node);
16
+ return drawRoundRectangleByElement(this.board, rectangle, data.node.origin);
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1zaGFwZS5nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9nZW5lcmF0b3JzL25vZGUtc2hhcGUuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFlLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFNOUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLFNBQWlDO0lBQ3JFLE9BQU8sQ0FBQyxPQUFvQixFQUFFLElBQWU7UUFDekMsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxJQUFJLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBb0IsRUFBRSxJQUFlO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxPQUFPLDJCQUEyQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgTWluZEVsZW1lbnRTaGFwZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IE1pbmROb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IGRyYXdSb3VuZFJlY3RhbmdsZUJ5RWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL2RyYXcvbm9kZS1zaGFwZSc7XG5pbXBvcnQgeyBnZXRTaGFwZUJ5RWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL25vZGUtc3R5bGUvc2hhcGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXBlRGF0YSB7XG4gICAgbm9kZTogTWluZE5vZGU7XG59XG5cbmV4cG9ydCBjbGFzcyBOb2RlU2hhcGVHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3I8TWluZEVsZW1lbnQsIFNoYXBlRGF0YT4ge1xuICAgIGNhbkRyYXcoZWxlbWVudDogTWluZEVsZW1lbnQsIGRhdGE6IFNoYXBlRGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBzaGFwZSA9IGdldFNoYXBlQnlFbGVtZW50KHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoc2hhcGUgPT09IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBkYXRhOiBTaGFwZURhdGEpIHtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKGRhdGEubm9kZSk7XG4gICAgICAgIHJldHVybiBkcmF3Um91bmRSZWN0YW5nbGVCeUVsZW1lbnQodGhpcy5ib2FyZCwgcmVjdGFuZ2xlLCBkYXRhLm5vZGUub3JpZ2luKTtcbiAgICB9XG59XG4iXX0=