@plait/mind 0.2.0-next.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/README.md +24 -0
- package/constants/default.d.ts +12 -0
- package/constants/index.d.ts +2 -0
- package/constants/node.d.ts +17 -0
- package/draw/abstract.d.ts +4 -0
- package/draw/indented-link.d.ts +3 -0
- package/draw/link/abstract-link.d.ts +3 -0
- package/draw/link/logic-link.d.ts +3 -0
- package/draw/link.d.ts +3 -0
- package/draw/richtext.d.ts +14 -0
- package/draw/shape.d.ts +3 -0
- package/esm2020/constants/default.mjs +13 -0
- package/esm2020/constants/index.mjs +3 -0
- package/esm2020/constants/node.mjs +19 -0
- package/esm2020/draw/abstract.mjs +48 -0
- package/esm2020/draw/indented-link.mjs +44 -0
- package/esm2020/draw/link/abstract-link.mjs +42 -0
- package/esm2020/draw/link/logic-link.mjs +51 -0
- package/esm2020/draw/link.mjs +158 -0
- package/esm2020/draw/richtext.mjs +35 -0
- package/esm2020/draw/shape.mjs +18 -0
- package/esm2020/interfaces/abstract.mjs +6 -0
- package/esm2020/interfaces/element-data.mjs +2 -0
- package/esm2020/interfaces/element.mjs +59 -0
- package/esm2020/interfaces/index.mjs +6 -0
- package/esm2020/interfaces/layout.mjs +19 -0
- package/esm2020/interfaces/node.mjs +23 -0
- package/esm2020/interfaces/types.mjs +13 -0
- package/esm2020/layout-option.mjs +72 -0
- package/esm2020/mind.component.mjs +50 -0
- package/esm2020/mind.module.mjs +21 -0
- package/esm2020/node.component.mjs +742 -0
- package/esm2020/plait-mind.mjs +5 -0
- package/esm2020/plugins/emoji/emoji-base.component.mjs +21 -0
- package/esm2020/plugins/emoji/emoji.drawer.mjs +79 -0
- package/esm2020/plugins/emoji/emoji.mjs +15 -0
- package/esm2020/plugins/emoji/index.mjs +4 -0
- package/esm2020/plugins/emoji/with-mind-emoji.mjs +8 -0
- package/esm2020/plugins/with-abstract.mjs +92 -0
- package/esm2020/plugins/with-dnd.mjs +276 -0
- package/esm2020/plugins/with-mind.mjs +183 -0
- package/esm2020/public-api.mjs +14 -0
- package/esm2020/queries/get-available-sublayouts-by-element.mjs +29 -0
- package/esm2020/queries/get-branch-mindmap-layouts-by-element.mjs +18 -0
- package/esm2020/queries/get-correct-layout-by-element.mjs +50 -0
- package/esm2020/queries/get-layout-by-element.mjs +16 -0
- package/esm2020/queries/get-layout-parent-by-element.mjs +17 -0
- package/esm2020/queries/index.mjs +13 -0
- package/esm2020/transforms/index.mjs +10 -0
- package/esm2020/transforms/layout.mjs +23 -0
- package/esm2020/transforms/node.mjs +44 -0
- package/esm2020/utils/abstract/common.mjs +25 -0
- package/esm2020/utils/abstract/resize.mjs +169 -0
- package/esm2020/utils/clipboard.mjs +71 -0
- package/esm2020/utils/colors.mjs +41 -0
- package/esm2020/utils/direction-corrector.mjs +54 -0
- package/esm2020/utils/direction-detector.mjs +56 -0
- package/esm2020/utils/draw-placeholder.mjs +311 -0
- package/esm2020/utils/drop-target-corrector.mjs +86 -0
- package/esm2020/utils/graph.mjs +24 -0
- package/esm2020/utils/index.mjs +14 -0
- package/esm2020/utils/is-virtual-key.mjs +13 -0
- package/esm2020/utils/layout.mjs +105 -0
- package/esm2020/utils/mindmap.mjs +295 -0
- package/esm2020/utils/node-space.mjs +72 -0
- package/esm2020/utils/node.mjs +6 -0
- package/esm2020/utils/path.mjs +11 -0
- package/esm2020/utils/point-placement.mjs +99 -0
- package/esm2020/utils/shape.mjs +17 -0
- package/esm2020/utils/weak-maps.mjs +3 -0
- package/fesm2015/plait-mind.mjs +3583 -0
- package/fesm2015/plait-mind.mjs.map +1 -0
- package/fesm2020/plait-mind.mjs +3595 -0
- package/fesm2020/plait-mind.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/interfaces/abstract.d.ts +4 -0
- package/interfaces/element-data.d.ts +11 -0
- package/interfaces/element.d.ts +39 -0
- package/interfaces/index.d.ts +5 -0
- package/interfaces/layout.d.ts +10 -0
- package/interfaces/node.d.ts +33 -0
- package/interfaces/types.d.ts +11 -0
- package/layout-option.d.ts +2 -0
- package/mind.component.d.ts +16 -0
- package/mind.module.d.ts +11 -0
- package/node.component.d.ts +60 -0
- package/package.json +31 -0
- package/plugins/emoji/emoji-base.component.d.ts +12 -0
- package/plugins/emoji/emoji.d.ts +6 -0
- package/plugins/emoji/emoji.drawer.d.ts +22 -0
- package/plugins/emoji/index.d.ts +3 -0
- package/plugins/emoji/with-mind-emoji.d.ts +8 -0
- package/plugins/with-abstract.d.ts +2 -0
- package/plugins/with-dnd.d.ts +11 -0
- package/plugins/with-mind.d.ts +2 -0
- package/public-api.d.ts +10 -0
- package/queries/get-available-sublayouts-by-element.d.ts +8 -0
- package/queries/get-branch-mindmap-layouts-by-element.d.ts +3 -0
- package/queries/get-correct-layout-by-element.d.ts +9 -0
- package/queries/get-layout-by-element.d.ts +3 -0
- package/queries/get-layout-parent-by-element.d.ts +8 -0
- package/queries/index.d.ts +7 -0
- package/styles/styles.scss +99 -0
- package/transforms/index.d.ts +7 -0
- package/transforms/layout.d.ts +3 -0
- package/transforms/node.d.ts +8 -0
- package/utils/abstract/common.d.ts +5 -0
- package/utils/abstract/resize.d.ts +21 -0
- package/utils/clipboard.d.ts +7 -0
- package/utils/colors.d.ts +4 -0
- package/utils/direction-corrector.d.ts +3 -0
- package/utils/direction-detector.d.ts +9 -0
- package/utils/draw-placeholder.d.ts +42 -0
- package/utils/drop-target-corrector.d.ts +8 -0
- package/utils/graph.d.ts +5 -0
- package/utils/index.d.ts +13 -0
- package/utils/is-virtual-key.d.ts +1 -0
- package/utils/layout.d.ts +12 -0
- package/utils/mindmap.d.ts +33 -0
- package/utils/node-space.d.ts +9 -0
- package/utils/node.d.ts +2 -0
- package/utils/path.d.ts +4 -0
- package/utils/point-placement.d.ts +8 -0
- package/utils/shape.d.ts +3 -0
- package/utils/weak-maps.d.ts +5 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhaXQtbWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsYWl0LW1pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class MindEmojiBaseComponent {
|
|
4
|
+
get nativeElement() {
|
|
5
|
+
return this.elementRef.nativeElement;
|
|
6
|
+
}
|
|
7
|
+
constructor(elementRef) {
|
|
8
|
+
this.elementRef = elementRef;
|
|
9
|
+
this.fontSize = 14;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
MindEmojiBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindEmojiBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
13
|
+
MindEmojiBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindEmojiBaseComponent, inputs: { fontSize: "fontSize", emojiItem: "emojiItem" }, ngImport: i0 });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindEmojiBaseComponent, decorators: [{
|
|
15
|
+
type: Directive
|
|
16
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { fontSize: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}], emojiItem: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}] } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamktYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9wbHVnaW5zL2Vtb2ppL2Vtb2ppLWJhc2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUk3RCxNQUFNLE9BQU8sc0JBQXNCO0lBTy9CLElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVELFlBQXNCLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBVHpELGFBQVEsR0FBVyxFQUFFLENBQUM7SUFTc0MsQ0FBQzs7bUhBWHBELHNCQUFzQjt1R0FBdEIsc0JBQXNCOzJGQUF0QixzQkFBc0I7a0JBRGxDLFNBQVM7aUdBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFNBQVM7c0JBRFIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVtb2ppSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudC1kYXRhJztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgTWluZEVtb2ppQmFzZUNvbXBvbmVudCB7XG4gICAgQElucHV0KClcbiAgICBmb250U2l6ZTogbnVtYmVyID0gMTQ7XG5cbiAgICBASW5wdXQoKVxuICAgIGVtb2ppSXRlbSE6IEVtb2ppSXRlbTtcblxuICAgIGdldCBuYXRpdmVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KSB7fVxufVxuIl19
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { MindElement, PlaitMind } from '../../interfaces';
|
|
2
|
+
import { createForeignObject } from '@plait/richtext';
|
|
3
|
+
import { createG } from '@plait/core';
|
|
4
|
+
import { getRectangleByNode } from '../../utils/graph';
|
|
5
|
+
import { getEmojiFontSize, getEmojisRectangle } from './emoji';
|
|
6
|
+
import { NodeSpace } from '../../utils/node-space';
|
|
7
|
+
export class EmojiDrawer {
|
|
8
|
+
constructor(board, viewContainerRef) {
|
|
9
|
+
this.board = board;
|
|
10
|
+
this.viewContainerRef = viewContainerRef;
|
|
11
|
+
this.componentRef = null;
|
|
12
|
+
}
|
|
13
|
+
draw(emoji, element) {
|
|
14
|
+
this.destroy();
|
|
15
|
+
const componentType = this.board.drawEmoji(emoji, element);
|
|
16
|
+
this.componentRef = this.viewContainerRef.createComponent(componentType);
|
|
17
|
+
this.componentRef.instance.emojiItem = emoji;
|
|
18
|
+
const fontSize = PlaitMind.isMind(element) ? 18 : 14;
|
|
19
|
+
this.componentRef.instance.fontSize = fontSize;
|
|
20
|
+
}
|
|
21
|
+
get nativeElement() {
|
|
22
|
+
if (this.componentRef) {
|
|
23
|
+
return this.componentRef.instance.nativeElement;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
destroy() {
|
|
30
|
+
if (this.componentRef) {
|
|
31
|
+
this.componentRef.destroy();
|
|
32
|
+
this.componentRef = null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export class EmojisDrawer {
|
|
37
|
+
constructor(board, viewContainerRef) {
|
|
38
|
+
this.board = board;
|
|
39
|
+
this.viewContainerRef = viewContainerRef;
|
|
40
|
+
this.emojiDrawers = [];
|
|
41
|
+
}
|
|
42
|
+
drawEmojis(element) {
|
|
43
|
+
this.destroy();
|
|
44
|
+
if (MindElement.hasEmojis(element)) {
|
|
45
|
+
const node = MindElement.getNode(element);
|
|
46
|
+
this.g = createG();
|
|
47
|
+
this.g.classList.add('emojis');
|
|
48
|
+
let { x, y } = getRectangleByNode(MindElement.getNode(element));
|
|
49
|
+
x = x + NodeSpace.getEmojiHorizontalSpace(element);
|
|
50
|
+
y = y + NodeSpace.getEmojiVerticalSpace(element);
|
|
51
|
+
const { width, height } = getEmojisRectangle(element);
|
|
52
|
+
const fontSize = getEmojiFontSize(element);
|
|
53
|
+
const foreignObject = createForeignObject(x, y, width, height);
|
|
54
|
+
this.g.append(foreignObject);
|
|
55
|
+
const container = document.createElement('div');
|
|
56
|
+
container.classList.add('node-emojis-container');
|
|
57
|
+
container.classList.add(`emoji-font-size-${fontSize}`);
|
|
58
|
+
foreignObject.append(container);
|
|
59
|
+
this.emojiDrawers = element.data.emojis.map(emojiItem => {
|
|
60
|
+
const drawer = new EmojiDrawer(this.board, this.viewContainerRef);
|
|
61
|
+
drawer.draw(emojiItem, element);
|
|
62
|
+
return drawer;
|
|
63
|
+
});
|
|
64
|
+
this.emojiDrawers.forEach(drawer => {
|
|
65
|
+
container.append(drawer.nativeElement);
|
|
66
|
+
});
|
|
67
|
+
return this.g;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
destroy() {
|
|
72
|
+
if (this.g) {
|
|
73
|
+
this.g.remove();
|
|
74
|
+
}
|
|
75
|
+
this.emojiDrawers.forEach(drawer => drawer.destroy());
|
|
76
|
+
this.emojiDrawers = [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkuZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy9lbW9qaS9lbW9qaS5kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFhLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsTUFBTSxPQUFPLFdBQVc7SUFHcEIsWUFBb0IsS0FBMEIsRUFBVSxnQkFBa0M7UUFBdEUsVUFBSyxHQUFMLEtBQUssQ0FBcUI7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRjFGLGlCQUFZLEdBQWdELElBQUksQ0FBQztJQUU0QixDQUFDO0lBRTlGLElBQUksQ0FBQyxLQUFnQixFQUFFLE9BQW9CO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FB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LE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYyxDQUFDLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDakI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW1vamlJdGVtLCBNaW5kRWxlbWVudCwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kRW1vamlCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9lbW9qaS1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFpdE1pbmRFbW9qaUJvYXJkIH0gZnJvbSAnLi93aXRoLW1pbmQtZW1vamknO1xuaW1wb3J0IHsgY3JlYXRlRm9yZWlnbk9iamVjdCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBjcmVhdGVHIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ3JhcGgnO1xuaW1wb3J0IHsgZ2V0RW1vamlGb250U2l6ZSwgZ2V0RW1vamlzUmVjdGFuZ2xlIH0gZnJvbSAnLi9lbW9qaSc7XG5pbXBvcnQgeyBOb2RlU3BhY2UgfSBmcm9tICcuLi8uLi91dGlscy9ub2RlLXNwYWNlJztcblxuZXhwb3J0IGNsYXNzIEVtb2ppRHJhd2VyIHtcbiAgICBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxNaW5kRW1vamlCYXNlQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRNaW5kRW1vamlCb2FyZCwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgZHJhdyhlbW9qaTogRW1vamlJdGVtLCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuYm9hcmQuZHJhd0Vtb2ppKGVtb2ppLCBlbGVtZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5lbW9qaUl0ZW0gPSBlbW9qaTtcbiAgICAgICAgY29uc3QgZm9udFNpemUgPSBQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpID8gMTggOiAxNDtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZm9udFNpemUgPSBmb250U2l6ZTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubmF0aXZlRWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbW9qaXNEcmF3ZXIge1xuICAgIGVtb2ppRHJhd2VyczogRW1vamlEcmF3ZXJbXSA9IFtdO1xuXG4gICAgZz86IFNWR0dFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRNaW5kRW1vamlCb2FyZCwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxuXG4gICAgZHJhd0Vtb2ppcyhlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmcgPSBjcmVhdGVHKCk7XG4gICAgICAgICAgICB0aGlzLmcuY2xhc3NMaXN0LmFkZCgnZW1vamlzJyk7XG4gICAgICAgICAgICBsZXQgeyB4LCB5IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUoTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSk7XG4gICAgICAgICAgICB4ID0geCArIE5vZGVTcGFjZS5nZXRFbW9qaUhvcml6b250YWxTcGFjZShlbGVtZW50KTtcbiAgICAgICAgICAgIHkgPSB5ICsgTm9kZVNwYWNlLmdldEVtb2ppVmVydGljYWxTcGFjZShlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0RW1vamlzUmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZm9udFNpemUgPSBnZXRFbW9qaUZvbnRTaXplKGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IGNyZWF0ZUZvcmVpZ25PYmplY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICB0aGlzLmcuYXBwZW5kKGZvcmVpZ25PYmplY3QpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbm9kZS1lbW9qaXMtY29udGFpbmVyJyk7XG4gICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZChgZW1vamktZm9udC1zaXplLSR7Zm9udFNpemV9YCk7XG4gICAgICAgICAgICBmb3JlaWduT2JqZWN0LmFwcGVuZChjb250YWluZXIpO1xuICAgICAgICAgICAgdGhpcy5lbW9qaURyYXdlcnMgPSBlbGVtZW50LmRhdGEuZW1vamlzLm1hcChlbW9qaUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYXdlciA9IG5ldyBFbW9qaURyYXdlcih0aGlzLmJvYXJkLCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICAgICAgICAgIGRyYXdlci5kcmF3KGVtb2ppSXRlbSwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRyYXdlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbW9qaURyYXdlcnMuZm9yRWFjaChkcmF3ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQoZHJhd2VyLm5hdGl2ZUVsZW1lbnQhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmcpIHtcbiAgICAgICAgICAgIHRoaXMuZy5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtb2ppRHJhd2Vycy5mb3JFYWNoKGRyYXdlciA9PiBkcmF3ZXIuZGVzdHJveSgpKTtcbiAgICAgICAgdGhpcy5lbW9qaURyYXdlcnMgPSBbXTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PlaitMind } from '../../interfaces';
|
|
2
|
+
export function getEmojisRectangle(element) {
|
|
3
|
+
const count = element.data.emojis.length;
|
|
4
|
+
const fontSize = getEmojiFontSize(element);
|
|
5
|
+
return { width: fontSize * count, height: fontSize * 1.5 };
|
|
6
|
+
}
|
|
7
|
+
export function getEmojiFontSize(element) {
|
|
8
|
+
if (PlaitMind.isMind(element)) {
|
|
9
|
+
return 18;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return 14;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1vamkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9wbHVnaW5zL2Vtb2ppL2Vtb2ppLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMEIsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFckUsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BQStCO0lBQzlELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6QyxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQStCO0lBQzVELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixPQUFPLEVBQUUsQ0FBQztLQUNiO1NBQU07UUFDSCxPQUFPLEVBQUUsQ0FBQztLQUNiO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVtb2ppRGF0YSwgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1vamlzUmVjdGFuZ2xlKGVsZW1lbnQ6IE1pbmRFbGVtZW50PEVtb2ppRGF0YT4pIHtcbiAgICBjb25zdCBjb3VudCA9IGVsZW1lbnQuZGF0YS5lbW9qaXMubGVuZ3RoO1xuICAgIGNvbnN0IGZvbnRTaXplID0gZ2V0RW1vamlGb250U2l6ZShlbGVtZW50KTtcbiAgICByZXR1cm4geyB3aWR0aDogZm9udFNpemUgKiBjb3VudCwgaGVpZ2h0OiBmb250U2l6ZSAqIDEuNSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1vamlGb250U2l6ZShlbGVtZW50OiBNaW5kRWxlbWVudDxFbW9qaURhdGE+KSB7XG4gICAgaWYgKFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDE4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAxNDtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './with-mind-emoji';
|
|
2
|
+
export * from './emoji';
|
|
3
|
+
export * from './emoji-base.component';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9wbHVnaW5zL2Vtb2ppL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2l0aC1taW5kLWVtb2ppJztcbmV4cG9ydCAqIGZyb20gJy4vZW1vamknO1xuZXhwb3J0ICogZnJvbSAnLi9lbW9qaS1iYXNlLmNvbXBvbmVudCc7Il19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const withEmoji = (board) => {
|
|
2
|
+
const newBoard = board;
|
|
3
|
+
newBoard.drawEmoji = (emoji, element) => {
|
|
4
|
+
throw new Error('Not implement drawEmoji method error.');
|
|
5
|
+
};
|
|
6
|
+
return newBoard;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLWVtb2ppLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy9lbW9qaS93aXRoLW1pbmQtZW1vamkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzNDLE1BQU0sUUFBUSxHQUFHLEtBQXlDLENBQUM7SUFFM0QsUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQWdCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO1FBQzVELE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUE7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlLCBQbGFpdEJvYXJkLCBQbGFpdFBsdWdpbiB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEVtb2ppSXRlbSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudC1kYXRhJztcbmltcG9ydCB7IE1pbmRFbW9qaUJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Vtb2ppLWJhc2UuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBQbGFpdE1pbmRFbW9qaUJvYXJkIGV4dGVuZHMgUGxhaXRCb2FyZCB7XG4gICAgZHJhd0Vtb2ppOiAoZW1vamk6IEVtb2ppSXRlbSwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IENvbXBvbmVudFR5cGU8TWluZEVtb2ppQmFzZUNvbXBvbmVudD47XG59XG5cbmV4cG9ydCBjb25zdCB3aXRoRW1vamkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBuZXdCb2FyZCA9IGJvYXJkIGFzIFBsYWl0Qm9hcmQgJiBQbGFpdE1pbmRFbW9qaUJvYXJkO1xuXG4gICAgbmV3Qm9hcmQuZHJhd0Vtb2ppID0gKGVtb2ppOiBFbW9qaUl0ZW0sIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudCBkcmF3RW1vamkgbWV0aG9kIGVycm9yLicpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdCb2FyZDtcbn07Il19
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { BOARD_TO_HOST, PlaitBoard, PlaitElement, Transforms, getSelectedElements, toPoint, transformPoint } from '@plait/core';
|
|
2
|
+
import { AbstractNode, isHorizontalLayout, isStandardLayout } from '@plait/layouts';
|
|
3
|
+
import { AbstractHandlePosition, MindElement } from '../interfaces';
|
|
4
|
+
import { MindmapQueries } from '../public-api';
|
|
5
|
+
import { findLocationLeftIndex, getHitAbstractHandle, getLocationScope } from '../utils/abstract/resize';
|
|
6
|
+
import { separateChildren } from '../utils/abstract/common';
|
|
7
|
+
export const withAbstract = (board) => {
|
|
8
|
+
const { mousedown, mousemove, mouseup } = board;
|
|
9
|
+
let activeAbstractElement;
|
|
10
|
+
let abstractHandlePosition;
|
|
11
|
+
let startPoint;
|
|
12
|
+
let newProperty;
|
|
13
|
+
board.mousedown = (event) => {
|
|
14
|
+
const activeAbstractElements = getSelectedElements(board).filter(element => AbstractNode.isAbstract(element));
|
|
15
|
+
const host = BOARD_TO_HOST.get(board);
|
|
16
|
+
const point = transformPoint(board, toPoint(event.x, event.y, host));
|
|
17
|
+
activeAbstractElement = activeAbstractElements.find(element => {
|
|
18
|
+
abstractHandlePosition = getHitAbstractHandle(board, element, point);
|
|
19
|
+
return abstractHandlePosition;
|
|
20
|
+
});
|
|
21
|
+
if (activeAbstractElement) {
|
|
22
|
+
startPoint = point;
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
mousedown(event);
|
|
26
|
+
};
|
|
27
|
+
board.mousemove = (event) => {
|
|
28
|
+
getSelectedElements(board);
|
|
29
|
+
const host = BOARD_TO_HOST.get(board);
|
|
30
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
|
|
31
|
+
if (abstractHandlePosition && activeAbstractElement) {
|
|
32
|
+
const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
|
|
33
|
+
const element = abstractComponent.element;
|
|
34
|
+
const nodeLayout = MindmapQueries.getCorrectLayoutByElement(activeAbstractElement);
|
|
35
|
+
const isHorizontal = isHorizontalLayout(nodeLayout);
|
|
36
|
+
const parentElement = MindElement.getParent(element);
|
|
37
|
+
let children = parentElement.children;
|
|
38
|
+
const parentLayout = MindmapQueries.getLayoutByElement(parentElement);
|
|
39
|
+
if (isStandardLayout(parentLayout)) {
|
|
40
|
+
const rightNodeCount = parentElement.rightNodeCount;
|
|
41
|
+
const { leftChildren, rightChildren } = separateChildren(parentElement);
|
|
42
|
+
if (activeAbstractElement.end < rightNodeCount) {
|
|
43
|
+
children = rightChildren;
|
|
44
|
+
}
|
|
45
|
+
if (activeAbstractElement.start >= rightNodeCount) {
|
|
46
|
+
children = leftChildren;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const resizingLocation = isHorizontal ? endPoint[1] : endPoint[0];
|
|
50
|
+
const parent = MindElement.getNode(parentElement);
|
|
51
|
+
const scope = getLocationScope(board, abstractHandlePosition, children, element, parent, isHorizontal);
|
|
52
|
+
const location = Math.min(scope.max, Math.max(scope.min, resizingLocation));
|
|
53
|
+
let locationIndex = findLocationLeftIndex(board, children, location, isHorizontal);
|
|
54
|
+
const isPropertyUnchanged = (abstractHandlePosition === AbstractHandlePosition.start &&
|
|
55
|
+
locationIndex + 1 === activeAbstractElement.start) ||
|
|
56
|
+
(abstractHandlePosition === AbstractHandlePosition.end && locationIndex === activeAbstractElement.end);
|
|
57
|
+
if (isPropertyUnchanged) {
|
|
58
|
+
newProperty = undefined;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (isStandardLayout(parent.layout)) {
|
|
62
|
+
const rightNodeCount = parent.origin.rightNodeCount;
|
|
63
|
+
let start = element.start;
|
|
64
|
+
if (start >= rightNodeCount) {
|
|
65
|
+
locationIndex += rightNodeCount;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
newProperty =
|
|
69
|
+
abstractHandlePosition === AbstractHandlePosition.start ? { start: locationIndex + 1 } : { end: locationIndex };
|
|
70
|
+
}
|
|
71
|
+
abstractComponent.updateAbstractIncludedOutline(location, abstractHandlePosition);
|
|
72
|
+
}
|
|
73
|
+
mousemove(event);
|
|
74
|
+
};
|
|
75
|
+
board.mouseup = (event) => {
|
|
76
|
+
startPoint = undefined;
|
|
77
|
+
abstractHandlePosition = null;
|
|
78
|
+
if (activeAbstractElement) {
|
|
79
|
+
if (newProperty) {
|
|
80
|
+
const path = PlaitBoard.findPath(board, activeAbstractElement);
|
|
81
|
+
Transforms.setNode(board, newProperty, path);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
|
|
85
|
+
abstractComponent.updateAbstractIncludedOutline();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
mouseup(event);
|
|
89
|
+
};
|
|
90
|
+
return board;
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1hYnN0cmFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1hYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFVBQVUsRUFDVixZQUFZLEVBR1osVUFBVSxFQUNWLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFpQyxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFxQixjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFnQixDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMzRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDaEQsSUFBSSxxQkFBK0MsQ0FBQztJQUNwRCxJQUFJLHNCQUFxRCxDQUFDO0lBQzFELElBQUksVUFBNkIsQ0FBQztJQUNsQyxJQUFJLFdBQTRELENBQUM7SUFFakUsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNwQyxNQUFNLHNCQUFzQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztR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QUU7WUFDdkIsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQztnQkFDL0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNILE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBc0IsQ0FBQztnQkFDaEcsaUJBQWtCLENBQUMsNkJBQTZCLEVBQUUsQ0FBQzthQUN0RDtTQUNKO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQk9BUkRfVE9fSE9TVCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBsdWdpbixcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUsIExheW91dE5vZGUsIE1pbmRtYXBMYXlvdXRUeXBlLCBpc0hvcml6b250YWxMYXlvdXQsIGlzU3RhbmRhcmRMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLCBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQsIE1pbmRtYXBRdWVyaWVzIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBmaW5kTG9jYXRpb25MZWZ0SW5kZXgsIGdldEhpdEFic3RyYWN0SGFuZGxlLCBnZXRMb2NhdGlvblNjb3BlIH0gZnJvbSAnLi4vdXRpbHMvYWJzdHJhY3QvcmVzaXplJztcbmltcG9ydCB7IHNlcGFyYXRlQ2hpbGRyZW4gfSBmcm9tICcuLi91dGlscy9hYnN0cmFjdC9jb21tb24nO1xuXG5leHBvcnQgY29uc3Qgd2l0aEFic3RyYWN0OiBQbGFpdFBsdWdpbiA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgbW91c2Vkb3duLCBtb3VzZW1vdmUsIG1vdXNldXAgfSA9IGJvYXJkO1xuICAgIGxldCBhY3RpdmVBYnN0cmFjdEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYWJzdHJhY3RIYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiB8IG51bGw7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgdW5kZWZpbmVkO1xuICAgIGxldCBuZXdQcm9wZXJ0eTogeyBlbmQ6IG51bWJlciB9IHwgeyBzdGFydDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG5cbiAgICBib2FyZC5tb3VzZWRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgYWN0aXZlQWJzdHJhY3RFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpLmZpbHRlcihlbGVtZW50ID0+IEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGVsZW1lbnQpKTtcbiAgICAgICAgY29uc3QgaG9zdCA9IEJPQVJEX1RPX0hPU1QuZ2V0KGJvYXJkKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBob3N0ISkpO1xuXG4gICAgICAgIGFjdGl2ZUFic3RyYWN0RWxlbWVudCA9IGFjdGl2ZUFic3RyYWN0RWxlbWVudHMuZmluZChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGFic3RyYWN0SGFuZGxlUG9zaXRpb24gPSBnZXRIaXRBYnN0cmFjdEhhbmRsZShib2FyZCwgZWxlbWVudCBhcyBNaW5kRWxlbWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgcmV0dXJuIGFic3RyYWN0SGFuZGxlUG9zaXRpb247XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVBYnN0cmFjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHN0YXJ0UG9pbnQgPSBwb2ludDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vdXNlZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLm1vdXNlbW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgY29uc3QgaG9zdCA9IEJPQVJEX1RPX0hPU1QuZ2V0KGJvYXJkKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBob3N0ISkpO1xuXG4gICAgICAgIGlmIChhYnN0cmFjdEhhbmRsZVBvc2l0aW9uICYmIGFjdGl2ZUFic3RyYWN0RWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgYWJzdHJhY3RDb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGFjdGl2ZUFic3RyYWN0RWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gYWJzdHJhY3RDb21wb25lbnQuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGFjdGl2ZUFic3RyYWN0RWxlbWVudCBhcyBNaW5kRWxlbWVudCkgYXMgTWluZG1hcExheW91dFR5cGU7XG4gICAgICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxMYXlvdXQobm9kZUxheW91dCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBsZXQgY2hpbGRyZW4gPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQocGFyZW50RWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHROb2RlQ291bnQgPSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50ITtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGxlZnRDaGlsZHJlbiwgcmlnaHRDaGlsZHJlbiB9ID0gc2VwYXJhdGVDaGlsZHJlbihwYXJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoKGFjdGl2ZUFic3RyYWN0RWxlbWVudCBhcyBNaW5kRWxlbWVudCkuZW5kISA8IHJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuID0gcmlnaHRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChhY3RpdmVBYnN0cmFjdEVsZW1lbnQgYXMgTWluZEVsZW1lbnQpLnN0YXJ0ISA+PSByaWdodE5vZGVDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGxlZnRDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc2l6aW5nTG9jYXRpb24gPSBpc0hvcml6b250YWwgPyBlbmRQb2ludFsxXSA6IGVuZFBvaW50WzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gKE1pbmRFbGVtZW50LmdldE5vZGUocGFyZW50RWxlbWVudCkgYXMgdW5rbm93bikgYXMgTGF5b3V0Tm9kZTtcbiAgICAgICAgICAgIGNvbnN0IHNjb3BlID0gZ2V0TG9jYXRpb25TY29wZShib2FyZCwgYWJzdHJhY3RIYW5kbGVQb3NpdGlvbiwgY2hpbGRyZW4sIGVsZW1lbnQsIHBhcmVudCwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gTWF0aC5taW4oc2NvcGUubWF4LCBNYXRoLm1heChzY29wZS5taW4sIHJlc2l6aW5nTG9jYXRpb24pKTtcblxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uSW5kZXggPSBmaW5kTG9jYXRpb25MZWZ0SW5kZXgoYm9hcmQsIGNoaWxkcmVuLCBsb2NhdGlvbiwgaXNIb3Jpem9udGFsKTtcblxuICAgICAgICAgICAgY29uc3QgaXNQcm9wZXJ0eVVuY2hhbmdlZCA9XG4gICAgICAgICAgICAgICAgKGFic3RyYWN0SGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQgJiZcbiAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25JbmRleCArIDEgPT09IChhY3RpdmVBYnN0cmFjdEVsZW1lbnQgYXMgTWluZEVsZW1lbnQpLnN0YXJ0ISkgfHxcbiAgICAgICAgICAgICAgICAoYWJzdHJhY3RIYW5kbGVQb3NpdGlvbiA9PT0gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5lbmQgJiYgbG9jYXRpb25JbmRleCA9PT0gKGFjdGl2ZUFic3RyYWN0RWxlbWVudCBhcyBNaW5kRWxlbWVudCkuZW5kISk7XG5cbiAgICAgICAgICAgIGlmIChpc1Byb3BlcnR5VW5jaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgbmV3UHJvcGVydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTGF5b3V0KHBhcmVudC5sYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Tm9kZUNvdW50ID0gcGFyZW50Lm9yaWdpbi5yaWdodE5vZGVDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHN0YXJ0ID0gZWxlbWVudC5zdGFydCE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSByaWdodE5vZGVDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25JbmRleCArPSByaWdodE5vZGVDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5ld1Byb3BlcnR5ID1cbiAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RIYW5kbGVQb3NpdGlvbiA9PT0gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCA/IHsgc3RhcnQ6IGxvY2F0aW9uSW5kZXggKyAxIH0gOiB7IGVuZDogbG9jYXRpb25JbmRleCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhYnN0cmFjdENvbXBvbmVudCEudXBkYXRlQWJzdHJhY3RJbmNsdWRlZE91dGxpbmUobG9jYXRpb24sIGFic3RyYWN0SGFuZGxlUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIG1vdXNlbW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLm1vdXNldXAgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgc3RhcnRQb2ludCA9IHVuZGVmaW5lZDtcbiAgICAgICAgYWJzdHJhY3RIYW5kbGVQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgIGlmIChhY3RpdmVBYnN0cmFjdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChuZXdQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBhY3RpdmVBYnN0cmFjdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3UHJvcGVydHksIHBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnN0cmFjdENvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoYWN0aXZlQWJzdHJhY3RFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBhYnN0cmFjdENvbXBvbmVudCEudXBkYXRlQWJzdHJhY3RJbmNsdWRlZE91dGxpbmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtb3VzZXVwKGV2ZW50KTtcbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { createG, distanceBetweenPointAndPoint, IS_TEXT_EDITABLE, Path, PlaitBoard, toPoint, transformPoint, Transforms, ELEMENT_TO_COMPONENT, getSelectedElements } from '@plait/core';
|
|
2
|
+
import { isBottomLayout, isHorizontalLogicLayout, isIndentedLayout, isLeftLayout, isRightLayout, isStandardLayout, isTopLayout, isVerticalLogicLayout } from '@plait/layouts';
|
|
3
|
+
import { updateForeignObject } from '@plait/richtext';
|
|
4
|
+
import { BASE } from '../constants';
|
|
5
|
+
import { getRichtextRectangleByNode } from '../draw/richtext';
|
|
6
|
+
import { drawRectangleNode } from '../draw/shape';
|
|
7
|
+
import { PlaitMind } from '../interfaces/element';
|
|
8
|
+
import { directionCorrector, directionDetector, drawPlaceholderDropNodeG, findUpElement, isChildElement, readjustmentDropTarget } from '../utils';
|
|
9
|
+
import { getRectangleByNode, hitMindmapElement } from '../utils/graph';
|
|
10
|
+
import { MINDMAP_ELEMENT_TO_COMPONENT } from '../utils/weak-maps';
|
|
11
|
+
import { MindmapQueries } from '../queries';
|
|
12
|
+
const DRAG_MOVE_BUFFER = 5;
|
|
13
|
+
export const withDnd = (board) => {
|
|
14
|
+
const { mousedown, mousemove, globalMouseup, keydown } = board;
|
|
15
|
+
let activeElement;
|
|
16
|
+
let startPoint;
|
|
17
|
+
let fakeDragNodeG;
|
|
18
|
+
let fakeDropNodeG;
|
|
19
|
+
let dropTarget = null;
|
|
20
|
+
board.mousedown = (event) => {
|
|
21
|
+
if (board.options.readonly || IS_TEXT_EDITABLE.get(board) || event.button === 2) {
|
|
22
|
+
mousedown(event);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// 确认是否 hit 节点
|
|
26
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
27
|
+
const selectedElements = getSelectedElements(board);
|
|
28
|
+
board.children.forEach((value) => {
|
|
29
|
+
if (activeElement) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (PlaitMind.isMind(value)) {
|
|
33
|
+
const mindmapComponent = ELEMENT_TO_COMPONENT.get(value);
|
|
34
|
+
const root = mindmapComponent?.root;
|
|
35
|
+
root.eachNode((node) => {
|
|
36
|
+
if (activeElement) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (hitMindmapElement(board, point, node.origin) && !node.origin.isRoot && selectedElements.length <= 1) {
|
|
40
|
+
activeElement = node.origin;
|
|
41
|
+
startPoint = point;
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
if (activeElement) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
}
|
|
49
|
+
mousedown(event);
|
|
50
|
+
};
|
|
51
|
+
board.mousemove = (event) => {
|
|
52
|
+
if (!board.options.readonly && activeElement && startPoint) {
|
|
53
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
54
|
+
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
55
|
+
if (distance < DRAG_MOVE_BUFFER) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (!isDragging(board)) {
|
|
59
|
+
setIsDragging(board, true);
|
|
60
|
+
fakeDragNodeG = createG();
|
|
61
|
+
fakeDragNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');
|
|
62
|
+
fakeDropNodeG = createG();
|
|
63
|
+
addActiveOnDragOrigin(activeElement);
|
|
64
|
+
PlaitBoard.getHost(board).appendChild(fakeDropNodeG);
|
|
65
|
+
PlaitBoard.getHost(board).appendChild(fakeDragNodeG);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
fakeDragNodeG?.childNodes.forEach(node => {
|
|
69
|
+
node.remove();
|
|
70
|
+
});
|
|
71
|
+
fakeDropNodeG?.childNodes.forEach(node => {
|
|
72
|
+
node.remove();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// fake dragging origin node
|
|
76
|
+
const offsetX = endPoint[0] - startPoint[0];
|
|
77
|
+
const offsetY = endPoint[1] - startPoint[1];
|
|
78
|
+
const activeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement);
|
|
79
|
+
const roughSVG = PlaitBoard.getRoughSVG(board);
|
|
80
|
+
const fakeDraggingNode = {
|
|
81
|
+
...activeComponent.node,
|
|
82
|
+
children: [],
|
|
83
|
+
x: activeComponent.node.x + offsetX,
|
|
84
|
+
y: activeComponent.node.y + offsetY
|
|
85
|
+
};
|
|
86
|
+
const textRectangle = getRichtextRectangleByNode(activeComponent.node);
|
|
87
|
+
const fakeNodeG = drawRectangleNode(board, fakeDraggingNode);
|
|
88
|
+
const richtextG = activeComponent.richtextG?.cloneNode(true);
|
|
89
|
+
updateForeignObject(richtextG, textRectangle.width + BASE * 10, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);
|
|
90
|
+
fakeDragNodeG?.append(fakeNodeG);
|
|
91
|
+
fakeDragNodeG?.append(richtextG);
|
|
92
|
+
// drop position detect
|
|
93
|
+
const { x, y } = getRectangleByNode(fakeDraggingNode);
|
|
94
|
+
const detectCenterPoint = [x + textRectangle.width / 2, y + textRectangle.height / 2];
|
|
95
|
+
let detectResult = null;
|
|
96
|
+
board.children.forEach((value) => {
|
|
97
|
+
if (detectResult) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (PlaitMind.isMind(value)) {
|
|
101
|
+
const mindmapComponent = ELEMENT_TO_COMPONENT.get(value);
|
|
102
|
+
const root = mindmapComponent?.root;
|
|
103
|
+
root.eachNode((node) => {
|
|
104
|
+
if (detectResult) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
const directions = directionDetector(node, detectCenterPoint);
|
|
108
|
+
if (directions) {
|
|
109
|
+
detectResult = directionCorrector(node, directions);
|
|
110
|
+
}
|
|
111
|
+
dropTarget = null;
|
|
112
|
+
if (detectResult && isValidTarget(activeComponent.node.origin, node.origin)) {
|
|
113
|
+
dropTarget = { target: node.origin, detectResult: detectResult[0] };
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
if (dropTarget?.target) {
|
|
119
|
+
dropTarget = readjustmentDropTarget(dropTarget);
|
|
120
|
+
drawPlaceholderDropNodeG(dropTarget, roughSVG, fakeDropNodeG);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
mousemove(event);
|
|
124
|
+
};
|
|
125
|
+
board.globalMouseup = (event) => {
|
|
126
|
+
if (!board.options.readonly && activeElement) {
|
|
127
|
+
if (dropTarget?.target) {
|
|
128
|
+
const activeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement);
|
|
129
|
+
const targetComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(dropTarget.target);
|
|
130
|
+
let targetPath = PlaitBoard.findPath(board, targetComponent.element);
|
|
131
|
+
const mindmapElement = findUpElement(dropTarget.target).root;
|
|
132
|
+
const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement);
|
|
133
|
+
const layout = MindmapQueries.getCorrectLayoutByElement(mindmapComponent?.root.origin);
|
|
134
|
+
targetPath = updatePathByLayoutAndDropTarget(targetPath, layout, dropTarget);
|
|
135
|
+
const originPath = PlaitBoard.findPath(board, activeComponent.element);
|
|
136
|
+
let newElement = { isCollapsed: false }, rightTargetPath = PlaitBoard.findPath(board, targetComponent.element);
|
|
137
|
+
if (isStandardLayout(layout)) {
|
|
138
|
+
updateRightNodeCount(board, activeComponent, targetComponent, dropTarget.detectResult);
|
|
139
|
+
}
|
|
140
|
+
if (dropTarget.detectResult === 'right') {
|
|
141
|
+
if (targetComponent.node.origin.isRoot) {
|
|
142
|
+
targetPath = PlaitBoard.findPath(board, targetComponent.element);
|
|
143
|
+
targetPath.push(0);
|
|
144
|
+
const rightNodeCount = targetComponent.node.origin.rightNodeCount + 1;
|
|
145
|
+
newElement = { isCollapsed: false, rightNodeCount };
|
|
146
|
+
}
|
|
147
|
+
Transforms.setNode(board, newElement, rightTargetPath);
|
|
148
|
+
}
|
|
149
|
+
Transforms.moveNode(board, originPath, targetPath);
|
|
150
|
+
}
|
|
151
|
+
if (isDragging(board)) {
|
|
152
|
+
removeActiveOnDragOrigin(activeElement);
|
|
153
|
+
}
|
|
154
|
+
setIsDragging(board, false);
|
|
155
|
+
activeElement = null;
|
|
156
|
+
fakeDragNodeG?.remove();
|
|
157
|
+
fakeDragNodeG = undefined;
|
|
158
|
+
fakeDropNodeG?.remove();
|
|
159
|
+
fakeDropNodeG = undefined;
|
|
160
|
+
dropTarget = null;
|
|
161
|
+
}
|
|
162
|
+
globalMouseup(event);
|
|
163
|
+
};
|
|
164
|
+
board.keydown = (event) => {
|
|
165
|
+
keydown(event);
|
|
166
|
+
};
|
|
167
|
+
return board;
|
|
168
|
+
};
|
|
169
|
+
export const isValidTarget = (origin, target) => {
|
|
170
|
+
return origin !== target && !isChildElement(origin, target);
|
|
171
|
+
};
|
|
172
|
+
export const addActiveOnDragOrigin = (activeElement, isOrigin = true) => {
|
|
173
|
+
const activeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement);
|
|
174
|
+
if (isOrigin) {
|
|
175
|
+
activeComponent.g.classList.add('dragging-origin');
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
activeComponent.g.classList.add('dragging-child');
|
|
179
|
+
}
|
|
180
|
+
!activeElement.isCollapsed &&
|
|
181
|
+
activeElement.children.forEach(child => {
|
|
182
|
+
addActiveOnDragOrigin(child, false);
|
|
183
|
+
});
|
|
184
|
+
};
|
|
185
|
+
export const removeActiveOnDragOrigin = (activeElement, isOrigin = true) => {
|
|
186
|
+
const activeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(activeElement);
|
|
187
|
+
if (isOrigin) {
|
|
188
|
+
activeComponent.g.classList.remove('dragging-origin');
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
activeComponent.g.classList.remove('dragging-child');
|
|
192
|
+
}
|
|
193
|
+
!activeElement.isCollapsed &&
|
|
194
|
+
activeElement.children.forEach(child => {
|
|
195
|
+
removeActiveOnDragOrigin(child, false);
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
const updatePathByLayoutAndDropTarget = (targetPath, layout, dropTarget) => {
|
|
199
|
+
// 上下布局:左右是兄弟节点,上下是子节点
|
|
200
|
+
if (isVerticalLogicLayout(layout)) {
|
|
201
|
+
if (isTopLayout(layout) && dropTarget.detectResult === 'top') {
|
|
202
|
+
targetPath.push(dropTarget.target.children.length);
|
|
203
|
+
}
|
|
204
|
+
if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {
|
|
205
|
+
targetPath.push(dropTarget.target.children.length);
|
|
206
|
+
}
|
|
207
|
+
// 如果是左,位置不变,右则插入到下一个兄弟节点
|
|
208
|
+
if (dropTarget.detectResult === 'right') {
|
|
209
|
+
targetPath = Path.next(targetPath);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// 水平布局/标准布局:上下是兄弟节点,左右是子节点
|
|
213
|
+
if (isHorizontalLogicLayout(layout)) {
|
|
214
|
+
if (dropTarget.detectResult === 'right') {
|
|
215
|
+
targetPath.push(dropTarget.target.children.length);
|
|
216
|
+
}
|
|
217
|
+
if (dropTarget.detectResult === 'left') {
|
|
218
|
+
targetPath.push(dropTarget.target.children.length);
|
|
219
|
+
}
|
|
220
|
+
// 如果是上,位置不变,下插入到下一个兄弟节点
|
|
221
|
+
if (dropTarget.detectResult === 'bottom') {
|
|
222
|
+
targetPath = Path.next(targetPath);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// 缩进布局:上下是兄弟节点,左右是子节点,但上(左上/右上),探测到上是子节点,下则位置不变,反之同理。
|
|
226
|
+
if (isIndentedLayout(layout)) {
|
|
227
|
+
if (isTopLayout(layout) && dropTarget.detectResult === 'top') {
|
|
228
|
+
targetPath = Path.next(targetPath);
|
|
229
|
+
}
|
|
230
|
+
if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {
|
|
231
|
+
targetPath = Path.next(targetPath);
|
|
232
|
+
}
|
|
233
|
+
if (isLeftLayout(layout) && dropTarget.detectResult === 'left') {
|
|
234
|
+
targetPath.push(dropTarget.target.children.length);
|
|
235
|
+
}
|
|
236
|
+
if (isRightLayout(layout) && dropTarget.detectResult === 'right') {
|
|
237
|
+
targetPath.push(dropTarget.target.children.length);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return targetPath;
|
|
241
|
+
};
|
|
242
|
+
export const updateRightNodeCount = (board, activeComponent, targetComponent, detectResult) => {
|
|
243
|
+
let rightNodeCount;
|
|
244
|
+
const mindmapElement = findUpElement(targetComponent.node.origin).root;
|
|
245
|
+
const mindmapComponent = ELEMENT_TO_COMPONENT.get(mindmapElement);
|
|
246
|
+
const activeIndex = mindmapComponent?.root.children.indexOf(activeComponent.node);
|
|
247
|
+
const targetIndex = mindmapComponent?.root.children.indexOf(targetComponent.node);
|
|
248
|
+
const isActiveOnRight = activeIndex !== -1 && activeIndex <= activeComponent.parent.origin.rightNodeCount - 1;
|
|
249
|
+
const isTargetOnRight = targetComponent.parent && targetIndex !== -1 && targetIndex <= targetComponent.parent.origin.rightNodeCount - 1;
|
|
250
|
+
const isBothOnRight = isActiveOnRight && isTargetOnRight;
|
|
251
|
+
const rootChildCount = mindmapComponent.root.children?.length;
|
|
252
|
+
const rootRightNodeCount = mindmapComponent?.root.origin.rightNodeCount;
|
|
253
|
+
if (!isBothOnRight) {
|
|
254
|
+
if (isActiveOnRight) {
|
|
255
|
+
rightNodeCount = rootChildCount < rootRightNodeCount ? rootChildCount - 1 : rootRightNodeCount - 1;
|
|
256
|
+
Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, activeComponent.parent.origin));
|
|
257
|
+
}
|
|
258
|
+
if (isTargetOnRight && detectResult !== 'right') {
|
|
259
|
+
rightNodeCount = rootChildCount < rootRightNodeCount ? rootRightNodeCount : rootRightNodeCount + 1;
|
|
260
|
+
Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.parent.origin));
|
|
261
|
+
}
|
|
262
|
+
//二级子节点拖动到根节点左侧
|
|
263
|
+
if (targetComponent.node.origin.isRoot && detectResult === 'left' && activeIndex === -1) {
|
|
264
|
+
rightNodeCount = rootChildCount;
|
|
265
|
+
Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.element));
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
const IS_DRAGGING = new WeakMap();
|
|
270
|
+
export const isDragging = (board) => {
|
|
271
|
+
return !!IS_DRAGGING.get(board);
|
|
272
|
+
};
|
|
273
|
+
export const setIsDragging = (board, state) => {
|
|
274
|
+
IS_DRAGGING.set(board, state);
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9wbHVnaW5zL3dpdGgtZG5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxPQUFPLEVBQ1AsNEJBQTRCLEVBQzVCLGdCQUFnQixFQUNoQixJQUFJLEVBQ0osVUFBVSxFQUlWLE9BQU8sRUFDUCxjQUFjLEVBQ2QsVUFBVSxFQUNWLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNILGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxxQkFBcUIsRUFFeEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHL0QsT0FBTyxFQUNILGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsd0JBQXdCLEVBQ3hCLGFBQWEsRUFDYixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFHNUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFL0QsSUFBSSxhQUFpQyxDQUFDO0lBQ3RDLElBQUksVUFBaUIsQ0FBQztJQUN0QixJQUFJLGFBQXNDLENBQUM7SUFDM0MsSUFBSSxhQUFzQyxDQUFDO0lBQzNDLElBQUksVUFBVSxHQUErRCxJQUFJLENBQUM7SUFFbEYsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNwQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3RSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsT0FBTztTQUNWO1FBRUQsY0FBYztRQUNkLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBbUIsRUFBRSxFQUFFO1lBQzNDLElBQUksYUFBYSxFQUFFO2dCQUNmLE9BQU87YUFDVjtZQUNELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDekIsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUF1QixDQUFDO2dCQUMvRSxNQUFNLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLElBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFpQixFQUFFLEVBQUU7b0JBQ3pDLElBQUksYUFBYSxFQUFFO3dCQUNmLE9BQU87cUJBQ1Y7b0JBQ0QsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7d0JBQ3JHLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUM1QixVQUFVLEdBQUcsS0FBSyxDQUFDO3FCQUN0QjtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGFBQWEsRUFBRTtZQUNmLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUMxQjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxhQUFhLElBQUksVUFBVSxFQUFFO1lBQ3hELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RixNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RyxJQUFJLFFBQVEsR0FBRyxnQkFBZ0IsRUFBRTtnQkFDN0IsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDcEIsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDM0IsYUFBYSxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixDQUFDLENBQUM7Z0JBQzdFLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3JDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNyRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN4RDtpQkFBTTtnQkFDSCxhQUFhLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixDQUFDLENBQUMsQ0FBQztnQkFDSCxhQUFhLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixDQUFDLENBQUMsQ0FBQzthQUNOO1lBRUQsNEJBQTRCO1lBQzVCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QyxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFzQixDQUFDO1lBQzdGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0MsTUFBTSxnQkFBZ0IsR0FBZ0I7Z0JBQ2xDLEdBQUcsZUFBZSxDQUFDLElBQUk7Z0JBQ3ZCLFFBQVEsRUFBRSxFQUFFO2dCQUNaLENBQUMsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxPQUFPO2dCQUNuQyxDQUFDLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTzthQUN0QyxDQUFDO1lBQ0YsTUFBTSxhQUFhLEdBQUcsMEJBQTBCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBZ0IsQ0FBQztZQUM1RSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUM1SSxhQUFhLEVBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLGFBQWEsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFakMsdUJBQXVCO1lBQ3ZCLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBVSxDQUFDO1lBRS9GLElBQUksWUFBWSxHQUEwQixJQUFJLENBQUM7WUFDL0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFtQixFQUFFLEVBQUU7Z0JBQzNDLElBQUksWUFBWSxFQUFFO29CQUNkLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN6QixNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQXVCLENBQUM7b0JBQy9FLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixFQUFFLElBQUksQ0FBQztvQkFFbkMsSUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQWlCLEVBQUUsRUFBRTt3QkFDekMsSUFBSSxZQUFZLEVBQUU7NEJBQ2QsT0FBTzt5QkFDVjt3QkFDRCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQzt3QkFDOUQsSUFBSSxVQUFVLEVBQUU7NEJBQ1osWUFBWSxHQUFHLGtCQUFrQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQzt5QkFDdkQ7d0JBQ0QsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDbEIsSUFBSSxZQUFZLElBQUksYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTs0QkFDekUsVUFBVSxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3lCQUN2RTtvQkFDTCxDQUFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFO2dCQUNwQixVQUFVLEdBQUcsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2hELHdCQUF3QixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDakU7U0FDSjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxhQUFhLEVBQUU7WUFDMUMsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFO2dCQUNwQixNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFzQixDQUFDO2dCQUM3RixNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBc0IsQ0FBQztnQkFDakcsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsY0FBMkIsQ0FBdUIsQ0FBQztnQkFDckcsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLHlCQUF5QixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFxQixDQUFDLENBQUM7Z0JBQ3RHLFVBQVUsR0FBRywrQkFBK0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUM3RSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksVUFBVSxHQUF5QixFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFDekQsZUFBZSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFMUUsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDMUIsb0JBQW9CLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUMxRjtnQkFFRCxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssT0FBTyxFQUFFO29CQUNyQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDcEMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDakUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsTUFBTSxjQUFjLEdBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBeUIsR0FBRyxDQUFDLENBQUM7d0JBQ2xGLFVBQVUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7cUJBQ3ZEO29CQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxlQUF1QixDQUFDLENBQUM7aUJBQ2xFO2dCQUVELFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQzthQUN0RDtZQUVELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNuQix3QkFBd0IsQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMzQztZQUNELGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDNUIsYUFBYSxHQUFHLElBQUksQ0FBQztZQUNyQixhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDeEIsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUMxQixhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDeEIsYUFBYSxHQUFHLFNBQVMsQ0FBQztZQUMxQixVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQW1CLEVBQUUsTUFBbUIsRUFBRSxFQUFFO0lBQ3RFLE9BQU8sTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxhQUEwQixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUNqRixNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFzQixDQUFDO0lBQzdGLElBQUksUUFBUSxFQUFFO1FBQ1YsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDdEQ7U0FBTTtRQUNILGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsQ0FBQyxhQUFhLENBQUMsV0FBVztRQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLGFBQTBCLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFO0lBQ3BGLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQXNCLENBQUM7SUFDN0YsSUFBSSxRQUFRLEVBQUU7UUFDVixlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztLQUN6RDtTQUFNO1FBQ0gsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0FDeEQ7SUFDRCxDQUFDLGFBQWEsQ0FBQyxXQUFXO1FBQ3RCLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25DLHdCQUF3QixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQztBQUVGLE1BQU0sK0JBQStCLEdBQUcsQ0FDcEMsVUFBZ0IsRUFDaEIsTUFBeUIsRUFDekIsVUFBK0QsRUFDakUsRUFBRTtJQUNBLHNCQUFzQjtJQUN0QixJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQy9CLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1lBQzFELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUNoRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3REO1FBQ0QseUJBQXlCO1FBQ3pCLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDckMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEM7S0FDSjtJQUNELDJCQUEyQjtJQUMzQixJQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDckMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDcEMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELHdCQUF3QjtRQUN4QixJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ3RDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7SUFDRCxzREFBc0Q7SUFDdEQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMxQixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUMxRCxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2hFLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDNUQsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssT0FBTyxFQUFFO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEQ7S0FDSjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2hDLEtBQWlCLEVBQ2pCLGVBQWtDLEVBQ2xDLGVBQWtDLEVBQ2xDLFlBQTBCLEVBQzVCLEVBQUU7SUFDQSxJQUFJLGNBQWMsQ0FBQztJQUNuQixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsY0FBMkIsQ0FBdUIsQ0FBQztJQUNyRyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFXLENBQUM7SUFDNUYsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBVyxDQUFDO0lBQzVGLE1BQU0sZUFBZSxHQUFHLFdBQVcsS0FBSyxDQUFDLENBQUMsSUFBSSxXQUFXLElBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBeUIsR0FBRyxDQUFDLENBQUM7SUFDMUgsTUFBTSxlQUFlLEdBQ2pCLGVBQWUsQ0FBQyxNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsSUFBSyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUF5QixHQUFHLENBQUMsQ0FBQztJQUNoSSxNQUFNLGFBQWEsR0FBRyxlQUFlLElBQUksZUFBZSxDQUFDO0lBQ3pELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBZ0IsQ0FBQztJQUN4RSxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBd0IsQ0FBQztJQUVsRixJQUFJLENBQUMsYUFBYSxFQUFFO1FBQ2hCLElBQUksZUFBZSxFQUFFO1lBQ2pCLGNBQWMsR0FBRyxjQUFjLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUNuRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1RztRQUVELElBQUksZUFBZSxJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDN0MsY0FBYyxHQUFHLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztZQUNuRyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM1RztRQUVELGVBQWU7UUFDZixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxZQUFZLEtBQUssTUFBTSxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNyRixjQUFjLEdBQUcsY0FBYyxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDdEc7S0FDSjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM1QyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYyxFQUFFLEVBQUU7SUFDL0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjcmVhdGVHLFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgSVNfVEVYVF9FRElUQUJMRSxcbiAgICBQYXRoLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UGx1Z2luLFxuICAgIFBvaW50LFxuICAgIHRvUG9pbnQsXG4gICAgdHJhbnNmb3JtUG9pbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBFTEVNRU5UX1RPX0NPTVBPTkVOVCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7XG4gICAgaXNCb3R0b21MYXlvdXQsXG4gICAgaXNIb3Jpem9udGFsTG9naWNMYXlvdXQsXG4gICAgaXNJbmRlbnRlZExheW91dCxcbiAgICBpc0xlZnRMYXlvdXQsXG4gICAgaXNSaWdodExheW91dCxcbiAgICBpc1N0YW5kYXJkTGF5b3V0LFxuICAgIGlzVG9wTGF5b3V0LFxuICAgIGlzVmVydGljYWxMb2dpY0xheW91dCxcbiAgICBNaW5kbWFwTGF5b3V0VHlwZVxufSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyB1cGRhdGVGb3JlaWduT2JqZWN0IH0gZnJvbSAnQHBsYWl0L3JpY2h0ZXh0JztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IEJBU0UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0UmljaHRleHRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi9kcmF3L3JpY2h0ZXh0JztcbmltcG9ydCB7IGRyYXdSZWN0YW5nbGVOb2RlIH0gZnJvbSAnLi4vZHJhdy9zaGFwZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IERldGVjdFJlc3VsdCwgTWluZG1hcE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGRpcmVjdGlvbkNvcnJlY3RvcixcbiAgICBkaXJlY3Rpb25EZXRlY3RvcixcbiAgICBkcmF3UGxhY2Vob2xkZXJEcm9wTm9kZUcsXG4gICAgZmluZFVwRWxlbWVudCxcbiAgICBpc0NoaWxkRWxlbWVudCxcbiAgICByZWFkanVzdG1lbnREcm9wVGFyZ2V0XG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSwgaGl0TWluZG1hcEVsZW1lbnQgfSBmcm9tICcuLi91dGlscy9ncmFwaCc7XG5pbXBvcnQgeyBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IE1pbmRtYXBRdWVyaWVzIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBQbGFpdE1pbmRDb21wb25lbnQgfSBmcm9tICcuLi9taW5kLmNvbXBvbmVudCc7XG5cbmNvbnN0IERSQUdfTU9WRV9CVUZGRVIgPSA1O1xuXG5leHBvcnQgY29uc3Qgd2l0aERuZCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IHsgbW91c2Vkb3duLCBtb3VzZW1vdmUsIGdsb2JhbE1vdXNldXAsIGtleWRvd24gfSA9IGJvYXJkO1xuXG4gICAgbGV0IGFjdGl2ZUVsZW1lbnQ6IE1pbmRFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgc3RhcnRQb2ludDogUG9pbnQ7XG4gICAgbGV0IGZha2VEcmFnTm9kZUc6IFNWR0dFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAgIGxldCBmYWtlRHJvcE5vZGVHOiBTVkdHRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZHJvcFRhcmdldDogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9IHwgbnVsbCA9IG51bGw7XG5cbiAgICBib2FyZC5tb3VzZWRvd24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGJvYXJkLm9wdGlvbnMucmVhZG9ubHkgfHwgSVNfVEVYVF9FRElUQUJMRS5nZXQoYm9hcmQpIHx8IGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgICAgbW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOehruiupOaYr+WQpiBoaXQg6IqC54K5XG4gICAgICAgIGNvbnN0IHBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGJvYXJkLmNoaWxkcmVuLmZvckVhY2goKHZhbHVlOiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWluZG1hcENvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh2YWx1ZSkgYXMgUGxhaXRNaW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBtaW5kbWFwQ29tcG9uZW50Py5yb290O1xuICAgICAgICAgICAgICAgIChyb290IGFzIGFueSkuZWFjaE5vZGUoKG5vZGU6IE1pbmRtYXBOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhpdE1pbmRtYXBFbGVtZW50KGJvYXJkLCBwb2ludCwgbm9kZS5vcmlnaW4pICYmICFub2RlLm9yaWdpbi5pc1Jvb3QgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPD0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9IG5vZGUub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbW91c2Vkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQubW91c2Vtb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghYm9hcmQub3B0aW9ucy5yZWFkb25seSAmJiBhY3RpdmVFbGVtZW50ICYmIHN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdHJhbnNmb3JtUG9pbnQoYm9hcmQsIHRvUG9pbnQoZXZlbnQueCwgZXZlbnQueSwgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKSkpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSk7XG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBEUkFHX01PVkVfQlVGRkVSKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzRHJhZ2dpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNEcmFnZ2luZyhib2FyZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmFrZURyYWdOb2RlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgICAgICBmYWtlRHJhZ05vZGVHLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nJywgJ2Zha2Utbm9kZScsICdwbGFpdC1ib2FyZC1hdHRhY2hlZCcpO1xuICAgICAgICAgICAgICAgIGZha2VEcm9wTm9kZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgICAgICAgICAgYWRkQWN0aXZlT25EcmFnT3JpZ2luKGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkuYXBwZW5kQ2hpbGQoZmFrZURyb3BOb2RlRyk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKS5hcHBlbmRDaGlsZChmYWtlRHJhZ05vZGVHKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFrZURyYWdOb2RlRz8uY2hpbGROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZha2VEcm9wTm9kZUc/LmNoaWxkTm9kZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZmFrZSBkcmFnZ2luZyBvcmlnaW4gbm9kZVxuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IGVuZFBvaW50WzBdIC0gc3RhcnRQb2ludFswXTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFkgPSBlbmRQb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV07XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChhY3RpdmVFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IHJvdWdoU1ZHID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgICAgICBjb25zdCBmYWtlRHJhZ2dpbmdOb2RlOiBNaW5kbWFwTm9kZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5hY3RpdmVDb21wb25lbnQubm9kZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgeDogYWN0aXZlQ29tcG9uZW50Lm5vZGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgeTogYWN0aXZlQ29tcG9uZW50Lm5vZGUueSArIG9mZnNldFlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0ZXh0UmVjdGFuZ2xlID0gZ2V0UmljaHRleHRSZWN0YW5nbGVCeU5vZGUoYWN0aXZlQ29tcG9uZW50Lm5vZGUpO1xuICAgICAgICAgICAgY29uc3QgZmFrZU5vZGVHID0gZHJhd1JlY3RhbmdsZU5vZGUoYm9hcmQsIGZha2VEcmFnZ2luZ05vZGUpO1xuICAgICAgICAgICAgY29uc3QgcmljaHRleHRHID0gYWN0aXZlQ29tcG9uZW50LnJpY2h0ZXh0Rz8uY2xvbmVOb2RlKHRydWUpIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICAgICAgdXBkYXRlRm9yZWlnbk9iamVjdChyaWNodGV4dEcsIHRleHRSZWN0YW5nbGUud2lkdGggKyBCQVNFICogMTAsIHRleHRSZWN0YW5nbGUuaGVpZ2h0LCB0ZXh0UmVjdGFuZ2xlLnggKyBvZmZzZXRYLCB0ZXh0UmVjdGFuZ2xlLnkgKyBvZmZzZXRZKTtcbiAgICAgICAgICAgIGZha2VEcmFnTm9kZUc/LmFwcGVuZChmYWtlTm9kZUcpO1xuICAgICAgICAgICAgZmFrZURyYWdOb2RlRz8uYXBwZW5kKHJpY2h0ZXh0Ryk7XG5cbiAgICAgICAgICAgIC8vIGRyb3AgcG9zaXRpb24gZGV0ZWN0XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZShmYWtlRHJhZ2dpbmdOb2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGRldGVjdENlbnRlclBvaW50ID0gW3ggKyB0ZXh0UmVjdGFuZ2xlLndpZHRoIC8gMiwgeSArIHRleHRSZWN0YW5nbGUuaGVpZ2h0IC8gMl0gYXMgUG9pbnQ7XG5cbiAgICAgICAgICAgIGxldCBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBib2FyZC5jaGlsZHJlbi5mb3JFYWNoKCh2YWx1ZTogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5kbWFwQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHZhbHVlKSBhcyBQbGFpdE1pbmRDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBtaW5kbWFwQ29tcG9uZW50Py5yb290O1xuXG4gICAgICAgICAgICAgICAgICAgIChyb290IGFzIGFueSkuZWFjaE5vZGUoKG5vZGU6IE1pbmRtYXBOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9ucyA9IGRpcmVjdGlvbkRldGVjdG9yKG5vZGUsIGRldGVjdENlbnRlclBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0UmVzdWx0ID0gZGlyZWN0aW9uQ29ycmVjdG9yKG5vZGUsIGRpcmVjdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ICYmIGlzVmFsaWRUYXJnZXQoYWN0aXZlQ29tcG9uZW50Lm5vZGUub3JpZ2luLCBub2RlLm9yaWdpbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wVGFyZ2V0ID0geyB0YXJnZXQ6IG5vZGUub3JpZ2luLCBkZXRlY3RSZXN1bHQ6IGRldGVjdFJlc3VsdFswXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGRyb3BUYXJnZXQ/LnRhcmdldCkge1xuICAgICAgICAgICAgICAgIGRyb3BUYXJnZXQgPSByZWFkanVzdG1lbnREcm9wVGFyZ2V0KGRyb3BUYXJnZXQpO1xuICAgICAgICAgICAgICAgIGRyYXdQbGFjZWhvbGRlckRyb3BOb2RlRyhkcm9wVGFyZ2V0LCByb3VnaFNWRywgZmFrZURyb3BOb2RlRyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBtb3VzZW1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxNb3VzZXVwID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghYm9hcmQub3B0aW9ucy5yZWFkb25seSAmJiBhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBpZiAoZHJvcFRhcmdldD8udGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlQ29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoYWN0aXZlRWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoZHJvcFRhcmdldC50YXJnZXQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0Q29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbmRtYXBFbGVtZW50ID0gZmluZFVwRWxlbWVudChkcm9wVGFyZ2V0LnRhcmdldCkucm9vdDtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5kbWFwQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KG1pbmRtYXBFbGVtZW50IGFzIFBsYWl0TWluZCkgYXMgUGxhaXRNaW5kQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IE1pbmRtYXBRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQobWluZG1hcENvbXBvbmVudD8ucm9vdC5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRhcmdldFBhdGggPSB1cGRhdGVQYXRoQnlMYXlvdXRBbmREcm9wVGFyZ2V0KHRhcmdldFBhdGgsIGxheW91dCwgZHJvcFRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luUGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGFjdGl2ZUNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RWxlbWVudDogUGFydGlhbDxNaW5kRWxlbWVudD4gPSB7IGlzQ29sbGFwc2VkOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICByaWdodFRhcmdldFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXRDb21wb25lbnQuZWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCBhY3RpdmVDb21wb25lbnQsIHRhcmdldENvbXBvbmVudCwgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldENvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Tm9kZUNvdW50ID0gKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5yaWdodE5vZGVDb3VudCBhcyBudW1iZXIpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB7IGlzQ29sbGFwc2VkOiBmYWxzZSwgcmlnaHROb2RlQ291bnQgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHJpZ2h0VGFyZ2V0UGF0aCBhcyBQYXRoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmVOb2RlKGJvYXJkLCBvcmlnaW5QYXRoLCB0YXJnZXRQYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGlzRHJhZ2dpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQWN0aXZlT25EcmFnT3JpZ2luKGFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SXNEcmFnZ2luZyhib2FyZCwgZmFsc2UpO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICBmYWtlRHJhZ05vZGVHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGZha2VEcmFnTm9kZUcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmYWtlRHJvcE5vZGVHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGZha2VEcm9wTm9kZUcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBkcm9wVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxNb3VzZXVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5ZG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBrZXlkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRUYXJnZXQgPSAob3JpZ2luOiBNaW5kRWxlbWVudCwgdGFyZ2V0OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBvcmlnaW4gIT09IHRhcmdldCAmJiAhaXNDaGlsZEVsZW1lbnQob3JpZ2luLCB0YXJnZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEFjdGl2ZU9uRHJhZ09yaWdpbiA9IChhY3RpdmVFbGVtZW50OiBNaW5kRWxlbWVudCwgaXNPcmlnaW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgYWN0aXZlQ29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoYWN0aXZlRWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgaWYgKGlzT3JpZ2luKSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nLW9yaWdpbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nLWNoaWxkJyk7XG4gICAgfVxuICAgICFhY3RpdmVFbGVtZW50LmlzQ29sbGFwc2VkICYmXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBhZGRBY3RpdmVPbkRyYWdPcmlnaW4oY2hpbGQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWN0aXZlT25EcmFnT3JpZ2luID0gKGFjdGl2ZUVsZW1lbnQ6IE1pbmRFbGVtZW50LCBpc09yaWdpbiA9IHRydWUpID0+IHtcbiAgICBjb25zdCBhY3RpdmVDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChhY3RpdmVFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAoaXNPcmlnaW4pIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmctb3JpZ2luJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmctY2hpbGQnKTtcbiAgICB9XG4gICAgIWFjdGl2ZUVsZW1lbnQuaXNDb2xsYXBzZWQgJiZcbiAgICAgICAgYWN0aXZlRWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUFjdGl2ZU9uRHJhZ09yaWdpbihjaGlsZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbn07XG5cbmNvbnN0IHVwZGF0ZVBhdGhCeUxheW91dEFuZERyb3BUYXJnZXQgPSAoXG4gICAgdGFyZ2V0UGF0aDogUGF0aCxcbiAgICBsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlLFxuICAgIGRyb3BUYXJnZXQ6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfVxuKSA9PiB7XG4gICAgLy8g5LiK5LiL5biD5bGA77ya5bem5Y+z5piv5YWE5byf6IqC54K577yM5LiK5LiL5piv5a2Q6IqC54K5XG4gICAgaWYgKGlzVmVydGljYWxMb2dpY0xheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGlmIChpc1RvcExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAndG9wJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGRyb3BUYXJnZXQudGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQm90dG9tTGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goZHJvcFRhcmdldC50YXJnZXQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDlpoLmnpzmmK/lt6bvvIzkvY3nva7kuI3lj5jvvIzlj7PliJnmj5LlhaXliLDkuIvkuIDkuKrlhYTlvJ/oioLngrlcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIOawtOW5s+W4g+WxgC/moIflh4bluIPlsYDvvJrkuIrkuIvmmK/lhYTlvJ/oioLngrnvvIzlt6blj7PmmK/lrZDoioLngrlcbiAgICBpZiAoaXNIb3Jpem9udGFsTG9naWNMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChkcm9wVGFyZ2V0LnRhcmdldC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goZHJvcFRhcmdldC50YXJnZXQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDlpoLmnpzmmK/kuIrvvIzkvY3nva7kuI3lj5jvvIzkuIvmj5LlhaXliLDkuIvkuIDkuKrlhYTlvJ/oioLngrlcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyDnvKnov5vluIPlsYDvvJrkuIrkuIvmmK/lhYTlvJ/oioLngrnvvIzlt6blj7PmmK/lrZDoioLngrnvvIzkvYbkuIrvvIjlt6bkuIov5Y+z5LiK77yJ77yM5o6i5rWL5Yiw5LiK5piv5a2Q6IqC54K577yM5LiL5YiZ5L2N572u5LiN5Y+Y77yM5Y+N5LmL5ZCM55CG44CCXG4gICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBpZiAoaXNUb3BMYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGggPSBQYXRoLm5leHQodGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQm90dG9tTGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goZHJvcFRhcmdldC50YXJnZXQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSaWdodExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goZHJvcFRhcmdldC50YXJnZXQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSaWdodE5vZGVDb3VudCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBhY3RpdmVDb21wb25lbnQ6IE1pbmROb2RlQ29tcG9uZW50LFxuICAgIHRhcmdldENvbXBvbmVudDogTWluZE5vZGVDb21wb25lbnQsXG4gICAgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHRcbikgPT4ge1xuICAgIGxldCByaWdodE5vZGVDb3VudDtcbiAgICBjb25zdCBtaW5kbWFwRWxlbWVudCA9IGZpbmRVcEVsZW1lbnQodGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKS5yb290O1xuICAgIGNvbnN0IG1pbmRtYXBDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQobWluZG1hcEVsZW1lbnQgYXMgUGxhaXRNaW5kKSBhcyBQbGFpdE1pbmRDb21wb25lbnQ7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSBtaW5kbWFwQ29tcG9uZW50Py5yb290LmNoaWxkcmVuLmluZGV4T2YoYWN0aXZlQ29tcG9uZW50Lm5vZGUpIGFzIG51bWJlcjtcbiAgICBjb25zdCB0YXJnZXRJbmRleCA9IG1pbmRtYXBDb21wb25lbnQ/LnJvb3QuY2hpbGRyZW4uaW5kZXhPZih0YXJnZXRDb21wb25lbnQubm9kZSkgYXMgbnVtYmVyO1xuICAgIGNvbnN0IGlzQWN0aXZlT25SaWdodCA9IGFjdGl2ZUluZGV4ICE9PSAtMSAmJiBhY3RpdmVJbmRleCA8PSAoYWN0aXZlQ29tcG9uZW50LnBhcmVudC5vcmlnaW4ucmlnaHROb2RlQ291bnQgYXMgbnVtYmVyKSAtIDE7XG4gICAgY29uc3QgaXNUYXJnZXRPblJpZ2h0ID1cbiAgICAgICAgdGFyZ2V0Q29tcG9uZW50LnBhcmVudCAmJiB0YXJnZXRJbmRleCAhPT0gLTEgJiYgdGFyZ2V0SW5kZXggPD0gKHRhcmdldENvbXBvbmVudC5wYXJlbnQub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IGFzIG51bWJlcikgLSAxO1xuICAgIGNvbnN0IGlzQm90aE9uUmlnaHQgPSBpc0FjdGl2ZU9uUmlnaHQgJiYgaXNUYXJnZXRPblJpZ2h0O1xuICAgIGNvbnN0IHJvb3RDaGlsZENvdW50ID0gbWluZG1hcENvbXBvbmVudC5yb290LmNoaWxkcmVuPy5sZW5ndGggYXMgbnVtYmVyO1xuICAgIGNvbnN0IHJvb3RSaWdodE5vZGVDb3VudCA9IG1pbmRtYXBDb21wb25lbnQ/LnJvb3Qub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IGFzIG51bWJlcjtcblxuICAgIGlmICghaXNCb3RoT25SaWdodCkge1xuICAgICAgICBpZiAoaXNBY3RpdmVPblJpZ2h0KSB7XG4gICAgICAgICAgICByaWdodE5vZGVDb3VudCA9IHJvb3RDaGlsZENvdW50IDwgcm9vdFJpZ2h0Tm9kZUNvdW50ID8gcm9vdENoaWxkQ291bnQgLSAxIDogcm9vdFJpZ2h0Tm9kZUNvdW50IC0gMTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyByaWdodE5vZGVDb3VudCB9LCBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBhY3RpdmVDb21wb25lbnQucGFyZW50Lm9yaWdpbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVGFyZ2V0T25SaWdodCAmJiBkZXRlY3RSZXN1bHQgIT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50ID0gcm9vdENoaWxkQ291bnQgPCByb290UmlnaHROb2RlQ291bnQgPyByb290UmlnaHROb2RlQ291bnQgOiByb290UmlnaHROb2RlQ291bnQgKyAxO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHJpZ2h0Tm9kZUNvdW50IH0sIFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldENvbXBvbmVudC5wYXJlbnQub3JpZ2luKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvL+S6jOe6p+WtkOiKgueCueaLluWKqOWIsOagueiKgueCueW3puS+p1xuICAgICAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCAmJiBkZXRlY3RSZXN1bHQgPT09ICdsZWZ0JyAmJiBhY3RpdmVJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50ID0gcm9vdENoaWxkQ291bnQ7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcmlnaHROb2RlQ291bnQgfSwgUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0Q29tcG9uZW50LmVsZW1lbnQpKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IElTX0RSQUdHSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuZXhwb3J0IGNvbnN0IGlzRHJhZ2dpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19EUkFHR0lORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRHJhZ2dpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRFJBR0dJTkcuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuIl19
|