@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,105 @@
|
|
|
1
|
+
import { LayoutDirection, LayoutDirectionsMap } from '../interfaces';
|
|
2
|
+
import { isIndentedLayout, MindmapLayoutType } from '@plait/layouts';
|
|
3
|
+
export const getBranchDirectionsByLayouts = (branchLayouts) => {
|
|
4
|
+
const branchDirections = [];
|
|
5
|
+
branchLayouts.forEach(l => {
|
|
6
|
+
const directions = LayoutDirectionsMap[l];
|
|
7
|
+
directions.forEach(d => {
|
|
8
|
+
if (!branchDirections.includes(d) && !branchDirections.includes(getLayoutReverseDirection(d))) {
|
|
9
|
+
branchDirections.push(d);
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
return branchDirections;
|
|
14
|
+
};
|
|
15
|
+
export const isCorrectLayout = (root, layout) => {
|
|
16
|
+
const rootLayout = root.layout || getDefaultMindmapLayout();
|
|
17
|
+
return !getInCorrectLayoutDirection(rootLayout, layout);
|
|
18
|
+
};
|
|
19
|
+
export const isMixedLayout = (parentLayout, layout) => {
|
|
20
|
+
return (!isIndentedLayout(parentLayout) && isIndentedLayout(layout)) || (isIndentedLayout(parentLayout) && !isIndentedLayout(layout));
|
|
21
|
+
};
|
|
22
|
+
export const getInCorrectLayoutDirection = (rootLayout, layout) => {
|
|
23
|
+
const mindmapDirections = LayoutDirectionsMap[rootLayout];
|
|
24
|
+
const subLayoutDirections = LayoutDirectionsMap[layout];
|
|
25
|
+
if (!subLayoutDirections) {
|
|
26
|
+
throw new Error(`unexpection layout: ${layout} on correct layout`);
|
|
27
|
+
}
|
|
28
|
+
return subLayoutDirections.find(d => mindmapDirections.includes(getLayoutReverseDirection(d)));
|
|
29
|
+
};
|
|
30
|
+
export const correctLayoutByDirection = (layout, direction) => {
|
|
31
|
+
const isHorizontal = direction === LayoutDirection.left || direction === LayoutDirection.right ? true : false;
|
|
32
|
+
let inverseDirectionLayout = MindmapLayoutType.standard;
|
|
33
|
+
switch (layout) {
|
|
34
|
+
case MindmapLayoutType.left:
|
|
35
|
+
inverseDirectionLayout = MindmapLayoutType.right;
|
|
36
|
+
break;
|
|
37
|
+
case MindmapLayoutType.right:
|
|
38
|
+
inverseDirectionLayout = MindmapLayoutType.left;
|
|
39
|
+
break;
|
|
40
|
+
case MindmapLayoutType.downward:
|
|
41
|
+
inverseDirectionLayout = MindmapLayoutType.upward;
|
|
42
|
+
break;
|
|
43
|
+
case MindmapLayoutType.upward:
|
|
44
|
+
inverseDirectionLayout = MindmapLayoutType.downward;
|
|
45
|
+
break;
|
|
46
|
+
case MindmapLayoutType.rightBottomIndented:
|
|
47
|
+
inverseDirectionLayout = isHorizontal ? MindmapLayoutType.leftBottomIndented : MindmapLayoutType.rightTopIndented;
|
|
48
|
+
break;
|
|
49
|
+
case MindmapLayoutType.leftBottomIndented:
|
|
50
|
+
inverseDirectionLayout = isHorizontal ? MindmapLayoutType.rightBottomIndented : MindmapLayoutType.leftTopIndented;
|
|
51
|
+
break;
|
|
52
|
+
case MindmapLayoutType.rightTopIndented:
|
|
53
|
+
inverseDirectionLayout = isHorizontal ? MindmapLayoutType.leftTopIndented : MindmapLayoutType.rightBottomIndented;
|
|
54
|
+
break;
|
|
55
|
+
case MindmapLayoutType.leftTopIndented:
|
|
56
|
+
inverseDirectionLayout = isHorizontal ? MindmapLayoutType.rightTopIndented : MindmapLayoutType.leftBottomIndented;
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
return inverseDirectionLayout;
|
|
60
|
+
};
|
|
61
|
+
export const getMindmapDirection = (root) => {
|
|
62
|
+
const layout = root.layout || getDefaultMindmapLayout();
|
|
63
|
+
return LayoutDirectionsMap[layout];
|
|
64
|
+
};
|
|
65
|
+
export const getDefaultMindmapLayout = () => {
|
|
66
|
+
return MindmapLayoutType.standard;
|
|
67
|
+
};
|
|
68
|
+
export const getAvailableSubLayoutsByLayoutDirections = (directions) => {
|
|
69
|
+
const result = [];
|
|
70
|
+
const reverseDirections = directions.map(getLayoutReverseDirection);
|
|
71
|
+
for (const key in MindmapLayoutType) {
|
|
72
|
+
const layout = MindmapLayoutType[key];
|
|
73
|
+
const layoutDirections = LayoutDirectionsMap[layout];
|
|
74
|
+
if (layoutDirections) {
|
|
75
|
+
const hasSameDirection = layoutDirections.some(d => directions.includes(d));
|
|
76
|
+
const hasReverseDirection = layoutDirections.some(r => reverseDirections.includes(r));
|
|
77
|
+
if (hasSameDirection && !hasReverseDirection) {
|
|
78
|
+
result.push(layout);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
};
|
|
84
|
+
export const getLayoutReverseDirection = (layoutDirection) => {
|
|
85
|
+
let reverseDirection = LayoutDirection.right;
|
|
86
|
+
switch (layoutDirection) {
|
|
87
|
+
case LayoutDirection.top:
|
|
88
|
+
reverseDirection = LayoutDirection.bottom;
|
|
89
|
+
break;
|
|
90
|
+
case LayoutDirection.bottom:
|
|
91
|
+
reverseDirection = LayoutDirection.top;
|
|
92
|
+
break;
|
|
93
|
+
case LayoutDirection.right:
|
|
94
|
+
reverseDirection = LayoutDirection.left;
|
|
95
|
+
break;
|
|
96
|
+
case LayoutDirection.left:
|
|
97
|
+
reverseDirection = LayoutDirection.right;
|
|
98
|
+
break;
|
|
99
|
+
}
|
|
100
|
+
return reverseDirection;
|
|
101
|
+
};
|
|
102
|
+
export const getRootLayout = (root) => {
|
|
103
|
+
return root.layout || getDefaultMindmapLayout();
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxhQUFrQyxFQUFFLEVBQUU7SUFDL0UsTUFBTSxnQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO0lBQy9DLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQWlCLEVBQUUsTUFBeUIsRUFBRSxFQUFFO0lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztJQUM1RCxPQUFPLENBQUMsMkJBQTJCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLFlBQStCLEVBQUUsTUFBeUIsRUFBRSxFQUFFO0lBQ3hGLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUksQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxVQUE2QixFQUFFLE1BQXlCLEVBQUUsRUFBRTtJQUNwRyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFELE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLE1BQU0sb0JBQW9CLENBQUMsQ0FBQztLQUN0RTtJQUNELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQXlCLEVBQUUsU0FBMEIsRUFBRSxFQUFFO0lBQzlGLE1BQU0sWUFBWSxHQUFHLFNBQVMsS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLFNBQVMsS0FBSyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUM5RyxJQUFJLHNCQUFzQixHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztJQUN4RCxRQUFRLE1BQU0sRUFBRTtRQUNaLEtBQUssaUJBQWlCLENBQUMsSUFBSTtZQUN2QixzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDakQsTUFBTTtRQUNWLEtBQUssaUJBQWlCLENBQUMsS0FBSztZQUN4QixzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDaEQsTUFBTTtRQUNWLEtBQUssaUJBQWlCLENBQUMsUUFBUTtZQUMzQixzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7WUFDbEQsTUFBTTtRQUNWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtZQUN6QixzQkFBc0IsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDcEQsTUFBTTtRQUNWLEtBQUssaUJBQWlCLENBQUMsbUJBQW1CO1lBQ3RDLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDO1lBQ2xILE1BQU07UUFDVixLQUFLLGlCQUFpQixDQUFDLGtCQUFrQjtZQUNyQyxzQkFBc0IsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7WUFDbEgsTUFBTTtRQUNWLEtBQUssaUJBQWlCLENBQUMsZ0JBQWdCO1lBQ25DLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FBQztZQUNsSCxNQUFNO1FBQ1YsS0FBSyxpQkFBaUIsQ0FBQyxlQUFlO1lBQ2xDLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1lBQ2xILE1BQU07S0FDYjtJQUNELE9BQU8sc0JBQXNCLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUU7SUFDckQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBQ3hELE9BQU8sbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxFQUFFO0lBQ3hDLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQUMsVUFBNkIsRUFBdUIsRUFBRTtJQUMzRyxNQUFNLE1BQU0sR0FBd0IsRUFBRSxDQUFDO0lBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3BFLEtBQUssTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUU7UUFDakMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsR0FBcUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckQsSUFBSSxnQkFBZ0IsRUFBRTtZQUNsQixNQUFNLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RSxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLElBQUksZ0JBQWdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2QjtTQUNKO0tBQ0o7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLGVBQWdDLEVBQUUsRUFBRTtJQUMxRSxJQUFJLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDN0MsUUFBUSxlQUFlLEVBQUU7UUFDckIsS0FBSyxlQUFlLENBQUMsR0FBRztZQUNwQixnQkFBZ0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQzFDLE1BQU07UUFDVixLQUFLLGVBQWUsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTTtRQUNWLEtBQUssZUFBZSxDQUFDLEtBQUs7WUFDdEIsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxlQUFlLENBQUMsSUFBSTtZQUNyQixnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ3pDLE1BQU07S0FDYjtJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO0lBQy9DLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dERpcmVjdGlvbiwgTGF5b3V0RGlyZWN0aW9uc01hcCwgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzSW5kZW50ZWRMYXlvdXQsIE1pbmRtYXBMYXlvdXRUeXBlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJhbmNoRGlyZWN0aW9uc0J5TGF5b3V0cyA9IChicmFuY2hMYXlvdXRzOiBNaW5kbWFwTGF5b3V0VHlwZVtdKSA9PiB7XG4gICAgY29uc3QgYnJhbmNoRGlyZWN0aW9uczogTGF5b3V0RGlyZWN0aW9uW10gPSBbXTtcbiAgICBicmFuY2hMYXlvdXRzLmZvckVhY2gobCA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBMYXlvdXREaXJlY3Rpb25zTWFwW2xdO1xuICAgICAgICBkaXJlY3Rpb25zLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWJyYW5jaERpcmVjdGlvbnMuaW5jbHVkZXMoZCkgJiYgIWJyYW5jaERpcmVjdGlvbnMuaW5jbHVkZXMoZ2V0TGF5b3V0UmV2ZXJzZURpcmVjdGlvbihkKSkpIHtcbiAgICAgICAgICAgICAgICBicmFuY2hEaXJlY3Rpb25zLnB1c2goZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBicmFuY2hEaXJlY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29ycmVjdExheW91dCA9IChyb290OiBNaW5kRWxlbWVudCwgbGF5b3V0OiBNaW5kbWFwTGF5b3V0VHlwZSkgPT4ge1xuICAgIGNvbnN0IHJvb3RMYXlvdXQgPSByb290LmxheW91dCB8fCBnZXREZWZhdWx0TWluZG1hcExheW91dCgpO1xuICAgIHJldHVybiAhZ2V0SW5Db3JyZWN0TGF5b3V0RGlyZWN0aW9uKHJvb3RMYXlvdXQsIGxheW91dCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNaXhlZExheW91dCA9IChwYXJlbnRMYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlLCBsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlKSA9PiB7XG4gICAgcmV0dXJuICghaXNJbmRlbnRlZExheW91dChwYXJlbnRMYXlvdXQpICYmIGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkgfHwgKGlzSW5kZW50ZWRMYXlvdXQocGFyZW50TGF5b3V0KSAmJiAhaXNJbmRlbnRlZExheW91dChsYXlvdXQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbkNvcnJlY3RMYXlvdXREaXJlY3Rpb24gPSAocm9vdExheW91dDogTWluZG1hcExheW91dFR5cGUsIGxheW91dDogTWluZG1hcExheW91dFR5cGUpID0+IHtcbiAgICBjb25zdCBtaW5kbWFwRGlyZWN0aW9ucyA9IExheW91dERpcmVjdGlvbnNNYXBbcm9vdExheW91dF07XG4gICAgY29uc3Qgc3ViTGF5b3V0RGlyZWN0aW9ucyA9IExheW91dERpcmVjdGlvbnNNYXBbbGF5b3V0XTtcbiAgICBpZiAoIXN1YkxheW91dERpcmVjdGlvbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGlvbiBsYXlvdXQ6ICR7bGF5b3V0fSBvbiBjb3JyZWN0IGxheW91dGApO1xuICAgIH1cbiAgICByZXR1cm4gc3ViTGF5b3V0RGlyZWN0aW9ucy5maW5kKGQgPT4gbWluZG1hcERpcmVjdGlvbnMuaW5jbHVkZXMoZ2V0TGF5b3V0UmV2ZXJzZURpcmVjdGlvbihkKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcnJlY3RMYXlvdXRCeURpcmVjdGlvbiA9IChsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlLCBkaXJlY3Rpb246IExheW91dERpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gTGF5b3V0RGlyZWN0aW9uLmxlZnQgfHwgZGlyZWN0aW9uID09PSBMYXlvdXREaXJlY3Rpb24ucmlnaHQgPyB0cnVlIDogZmFsc2U7XG4gICAgbGV0IGludmVyc2VEaXJlY3Rpb25MYXlvdXQgPSBNaW5kbWFwTGF5b3V0VHlwZS5zdGFuZGFyZDtcbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgICBjYXNlIE1pbmRtYXBMYXlvdXRUeXBlLmxlZnQ6XG4gICAgICAgICAgICBpbnZlcnNlRGlyZWN0aW9uTGF5b3V0ID0gTWluZG1hcExheW91dFR5cGUucmlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodDpcbiAgICAgICAgICAgIGludmVyc2VEaXJlY3Rpb25MYXlvdXQgPSBNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWluZG1hcExheW91dFR5cGUuZG93bndhcmQ6XG4gICAgICAgICAgICBpbnZlcnNlRGlyZWN0aW9uTGF5b3V0ID0gTWluZG1hcExheW91dFR5cGUudXB3YXJkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWluZG1hcExheW91dFR5cGUudXB3YXJkOlxuICAgICAgICAgICAgaW52ZXJzZURpcmVjdGlvbkxheW91dCA9IE1pbmRtYXBMYXlvdXRUeXBlLmRvd253YXJkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWluZG1hcExheW91dFR5cGUucmlnaHRCb3R0b21JbmRlbnRlZDpcbiAgICAgICAgICAgIGludmVyc2VEaXJlY3Rpb25MYXlvdXQgPSBpc0hvcml6b250YWwgPyBNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0Qm90dG9tSW5kZW50ZWQgOiBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodFRvcEluZGVudGVkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTWluZG1hcExheW91dFR5cGUubGVmdEJvdHRvbUluZGVudGVkOlxuICAgICAgICAgICAgaW52ZXJzZURpcmVjdGlvbkxheW91dCA9IGlzSG9yaXpvbnRhbCA/IE1pbmRtYXBMYXlvdXRUeXBlLnJpZ2h0Qm90dG9tSW5kZW50ZWQgOiBNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0VG9wSW5kZW50ZWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodFRvcEluZGVudGVkOlxuICAgICAgICAgICAgaW52ZXJzZURpcmVjdGlvbkxheW91dCA9IGlzSG9yaXpvbnRhbCA/IE1pbmRtYXBMYXlvdXRUeXBlLmxlZnRUb3BJbmRlbnRlZCA6IE1pbmRtYXBMYXlvdXRUeXBlLnJpZ2h0Qm90dG9tSW5kZW50ZWQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0VG9wSW5kZW50ZWQ6XG4gICAgICAgICAgICBpbnZlcnNlRGlyZWN0aW9uTGF5b3V0ID0gaXNIb3Jpem9udGFsID8gTWluZG1hcExheW91dFR5cGUucmlnaHRUb3BJbmRlbnRlZCA6IE1pbmRtYXBMYXlvdXRUeXBlLmxlZnRCb3R0b21JbmRlbnRlZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gaW52ZXJzZURpcmVjdGlvbkxheW91dDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNaW5kbWFwRGlyZWN0aW9uID0gKHJvb3Q6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbGF5b3V0ID0gcm9vdC5sYXlvdXQgfHwgZ2V0RGVmYXVsdE1pbmRtYXBMYXlvdXQoKTtcbiAgICByZXR1cm4gTGF5b3V0RGlyZWN0aW9uc01hcFtsYXlvdXRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRNaW5kbWFwTGF5b3V0ID0gKCkgPT4ge1xuICAgIHJldHVybiBNaW5kbWFwTGF5b3V0VHlwZS5zdGFuZGFyZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdmFpbGFibGVTdWJMYXlvdXRzQnlMYXlvdXREaXJlY3Rpb25zID0gKGRpcmVjdGlvbnM6IExheW91dERpcmVjdGlvbltdKTogTWluZG1hcExheW91dFR5cGVbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiBNaW5kbWFwTGF5b3V0VHlwZVtdID0gW107XG4gICAgY29uc3QgcmV2ZXJzZURpcmVjdGlvbnMgPSBkaXJlY3Rpb25zLm1hcChnZXRMYXlvdXRSZXZlcnNlRGlyZWN0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBNaW5kbWFwTGF5b3V0VHlwZSkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kbWFwTGF5b3V0VHlwZVtrZXkgYXMga2V5b2YgdHlwZW9mIE1pbmRtYXBMYXlvdXRUeXBlXTtcbiAgICAgICAgY29uc3QgbGF5b3V0RGlyZWN0aW9ucyA9IExheW91dERpcmVjdGlvbnNNYXBbbGF5b3V0XTtcbiAgICAgICAgaWYgKGxheW91dERpcmVjdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NhbWVEaXJlY3Rpb24gPSBsYXlvdXREaXJlY3Rpb25zLnNvbWUoZCA9PiBkaXJlY3Rpb25zLmluY2x1ZGVzKGQpKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc1JldmVyc2VEaXJlY3Rpb24gPSBsYXlvdXREaXJlY3Rpb25zLnNvbWUociA9PiByZXZlcnNlRGlyZWN0aW9ucy5pbmNsdWRlcyhyKSk7XG4gICAgICAgICAgICBpZiAoaGFzU2FtZURpcmVjdGlvbiAmJiAhaGFzUmV2ZXJzZURpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxheW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYXlvdXRSZXZlcnNlRGlyZWN0aW9uID0gKGxheW91dERpcmVjdGlvbjogTGF5b3V0RGlyZWN0aW9uKSA9PiB7XG4gICAgbGV0IHJldmVyc2VEaXJlY3Rpb24gPSBMYXlvdXREaXJlY3Rpb24ucmlnaHQ7XG4gICAgc3dpdGNoIChsYXlvdXREaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSBMYXlvdXREaXJlY3Rpb24udG9wOlxuICAgICAgICAgICAgcmV2ZXJzZURpcmVjdGlvbiA9IExheW91dERpcmVjdGlvbi5ib3R0b207XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYXlvdXREaXJlY3Rpb24uYm90dG9tOlxuICAgICAgICAgICAgcmV2ZXJzZURpcmVjdGlvbiA9IExheW91dERpcmVjdGlvbi50b3A7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYXlvdXREaXJlY3Rpb24ucmlnaHQ6XG4gICAgICAgICAgICByZXZlcnNlRGlyZWN0aW9uID0gTGF5b3V0RGlyZWN0aW9uLmxlZnQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBMYXlvdXREaXJlY3Rpb24ubGVmdDpcbiAgICAgICAgICAgIHJldmVyc2VEaXJlY3Rpb24gPSBMYXlvdXREaXJlY3Rpb24ucmlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJldmVyc2VEaXJlY3Rpb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um9vdExheW91dCA9IChyb290OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiByb290LmxheW91dCB8fCBnZXREZWZhdWx0TWluZG1hcExheW91dCgpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { AbstractNode, MindmapLayoutType } from '@plait/layouts';
|
|
2
|
+
import { addSelectedElement, idCreator, isNullOrUndefined, PlaitBoard, Transforms } from '@plait/core';
|
|
3
|
+
import { Node } from 'slate';
|
|
4
|
+
import { MindmapNodeShape, NODE_MIN_WIDTH, ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node';
|
|
5
|
+
import { getRootLayout } from './layout';
|
|
6
|
+
import { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';
|
|
7
|
+
import { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';
|
|
8
|
+
import { enterNodeEditing } from './node';
|
|
9
|
+
export function findParentElement(element) {
|
|
10
|
+
const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);
|
|
11
|
+
if (component && component.parent) {
|
|
12
|
+
return component.parent.origin;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
export function findUpElement(element) {
|
|
17
|
+
let branch;
|
|
18
|
+
let root = element;
|
|
19
|
+
let parent = findParentElement(element);
|
|
20
|
+
while (parent) {
|
|
21
|
+
branch = root;
|
|
22
|
+
root = parent;
|
|
23
|
+
parent = findParentElement(parent);
|
|
24
|
+
}
|
|
25
|
+
return { root, branch };
|
|
26
|
+
}
|
|
27
|
+
export const getChildrenCount = (element) => {
|
|
28
|
+
const count = element.children.reduce((p, c) => {
|
|
29
|
+
return p + getChildrenCount(c);
|
|
30
|
+
}, 0);
|
|
31
|
+
return count + element.children.length;
|
|
32
|
+
};
|
|
33
|
+
export const isChildElement = (origin, child) => {
|
|
34
|
+
let parent = findParentElement(child);
|
|
35
|
+
while (parent) {
|
|
36
|
+
if (parent === origin) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
parent = findParentElement(parent);
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
export const filterChildElement = (elements) => {
|
|
44
|
+
let result = [];
|
|
45
|
+
elements.forEach(element => {
|
|
46
|
+
const isChild = elements.some(node => {
|
|
47
|
+
return isChildElement(node, element);
|
|
48
|
+
});
|
|
49
|
+
if (!isChild) {
|
|
50
|
+
result.push(element);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
55
|
+
export const isChildRight = (node, child) => {
|
|
56
|
+
return node.x < child.x;
|
|
57
|
+
};
|
|
58
|
+
export const isChildUp = (node, child) => {
|
|
59
|
+
return node.y > child.y;
|
|
60
|
+
};
|
|
61
|
+
export const copyNewNode = (node) => {
|
|
62
|
+
const newNode = { ...node };
|
|
63
|
+
newNode.id = idCreator();
|
|
64
|
+
newNode.children = [];
|
|
65
|
+
for (const childNode of node.children) {
|
|
66
|
+
newNode.children.push(copyNewNode(childNode));
|
|
67
|
+
}
|
|
68
|
+
return newNode;
|
|
69
|
+
};
|
|
70
|
+
export const transformRootToNode = (board, node) => {
|
|
71
|
+
const newNode = { ...node };
|
|
72
|
+
delete newNode.isRoot;
|
|
73
|
+
delete newNode.rightNodeCount;
|
|
74
|
+
delete newNode.type;
|
|
75
|
+
const text = Node.string(node.data.topic.children[0]) || ' ';
|
|
76
|
+
const { width, height } = getSizeByText(text, PlaitBoard.getViewportContainer(board), TOPIC_DEFAULT_MAX_WORD_COUNT);
|
|
77
|
+
newNode.width = Math.max(width, NODE_MIN_WIDTH);
|
|
78
|
+
newNode.height = height;
|
|
79
|
+
if (newNode.layout === MindmapLayoutType.standard) {
|
|
80
|
+
delete newNode.layout;
|
|
81
|
+
}
|
|
82
|
+
return newNode;
|
|
83
|
+
};
|
|
84
|
+
export const transformNodeToRoot = (board, node) => {
|
|
85
|
+
const newElement = { ...node };
|
|
86
|
+
let text = Node.string(newElement.data.topic);
|
|
87
|
+
if (!text) {
|
|
88
|
+
text = '思维导图';
|
|
89
|
+
newElement.data.topic = { children: [{ text }] };
|
|
90
|
+
}
|
|
91
|
+
delete newElement?.strokeColor;
|
|
92
|
+
delete newElement?.fill;
|
|
93
|
+
delete newElement?.shape;
|
|
94
|
+
delete newElement?.strokeWidth;
|
|
95
|
+
const { width, height } = getSizeByText(text, PlaitBoard.getViewportContainer(board), TOPIC_DEFAULT_MAX_WORD_COUNT, ROOT_TOPIC_FONT_SIZE);
|
|
96
|
+
newElement.width = Math.max(width, NODE_MIN_WIDTH);
|
|
97
|
+
newElement.height = height;
|
|
98
|
+
return {
|
|
99
|
+
...newElement,
|
|
100
|
+
layout: newElement.layout ?? MindmapLayoutType.right,
|
|
101
|
+
isCollapsed: false,
|
|
102
|
+
isRoot: true,
|
|
103
|
+
type: 'mindmap'
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
export const extractNodesText = (node) => {
|
|
107
|
+
let str = '';
|
|
108
|
+
if (node) {
|
|
109
|
+
str += Node.string(node.data.topic.children[0]) + ' ';
|
|
110
|
+
for (const childNode of node.children) {
|
|
111
|
+
str += extractNodesText(childNode);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return str;
|
|
115
|
+
};
|
|
116
|
+
export const changeRightNodeCount = (board, parentPath, changeNumber) => {
|
|
117
|
+
const _rightNodeCount = board.children[parentPath[0]].rightNodeCount;
|
|
118
|
+
Transforms.setNode(board, {
|
|
119
|
+
rightNodeCount: changeNumber >= 0
|
|
120
|
+
? _rightNodeCount + changeNumber
|
|
121
|
+
: _rightNodeCount + changeNumber < 0
|
|
122
|
+
? 0
|
|
123
|
+
: _rightNodeCount + changeNumber
|
|
124
|
+
}, parentPath);
|
|
125
|
+
};
|
|
126
|
+
export const shouldChangeRightNodeCount = (selectedElement) => {
|
|
127
|
+
const parentElement = findParentElement(selectedElement);
|
|
128
|
+
const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(selectedElement);
|
|
129
|
+
if (parentElement && MindNodeComponent) {
|
|
130
|
+
const nodeIndex = MindNodeComponent.parent.children.findIndex(item => item.origin.id === selectedElement.id);
|
|
131
|
+
if (parentElement.isRoot &&
|
|
132
|
+
getRootLayout(parentElement) === MindmapLayoutType.standard &&
|
|
133
|
+
parentElement.rightNodeCount &&
|
|
134
|
+
nodeIndex <= parentElement.rightNodeCount - 1) {
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return false;
|
|
139
|
+
};
|
|
140
|
+
export const createMindmapData = (rightNodeCount, layout) => {
|
|
141
|
+
const mindmapData = {
|
|
142
|
+
type: 'mindmap',
|
|
143
|
+
id: idCreator(),
|
|
144
|
+
isRoot: true,
|
|
145
|
+
rightNodeCount,
|
|
146
|
+
layout,
|
|
147
|
+
width: 72,
|
|
148
|
+
height: ROOT_DEFAULT_HEIGHT,
|
|
149
|
+
points: [[230, 208]],
|
|
150
|
+
value: { children: [{ text: '思维导图' }] },
|
|
151
|
+
shape: MindmapNodeShape.roundRectangle,
|
|
152
|
+
children: [
|
|
153
|
+
{
|
|
154
|
+
id: idCreator(),
|
|
155
|
+
value: { children: [{ text: '新建节点' }] },
|
|
156
|
+
children: [],
|
|
157
|
+
width: 56,
|
|
158
|
+
height: TEXT_DEFAULT_HEIGHT,
|
|
159
|
+
shape: MindmapNodeShape.roundRectangle
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
id: idCreator(),
|
|
163
|
+
value: { children: [{ text: '新建节点' }] },
|
|
164
|
+
children: [],
|
|
165
|
+
width: 56,
|
|
166
|
+
height: TEXT_DEFAULT_HEIGHT,
|
|
167
|
+
shape: MindmapNodeShape.roundRectangle
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
id: idCreator(),
|
|
171
|
+
value: { children: [{ text: '新建节点' }] },
|
|
172
|
+
children: [],
|
|
173
|
+
width: 56,
|
|
174
|
+
height: TEXT_DEFAULT_HEIGHT,
|
|
175
|
+
shape: MindmapNodeShape.roundRectangle
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
};
|
|
179
|
+
return [mindmapData];
|
|
180
|
+
};
|
|
181
|
+
export const createMindElement = (text, width, height, options) => {
|
|
182
|
+
const newElement = {
|
|
183
|
+
id: idCreator(),
|
|
184
|
+
data: {
|
|
185
|
+
topic: { children: [{ text }] }
|
|
186
|
+
},
|
|
187
|
+
children: [],
|
|
188
|
+
width,
|
|
189
|
+
height,
|
|
190
|
+
fill: options.fill,
|
|
191
|
+
strokeColor: options.strokeColor,
|
|
192
|
+
strokeWidth: options.strokeWidth,
|
|
193
|
+
shape: options.shape
|
|
194
|
+
};
|
|
195
|
+
if (options.fill) {
|
|
196
|
+
newElement.fill = options.fill;
|
|
197
|
+
}
|
|
198
|
+
if (options.strokeColor) {
|
|
199
|
+
newElement.strokeColor = options.strokeColor;
|
|
200
|
+
}
|
|
201
|
+
if (!isNullOrUndefined(options.strokeWidth)) {
|
|
202
|
+
newElement.strokeWidth = options.strokeWidth;
|
|
203
|
+
}
|
|
204
|
+
if (options.shape) {
|
|
205
|
+
newElement.shape = options.shape;
|
|
206
|
+
}
|
|
207
|
+
if (options.layout) {
|
|
208
|
+
newElement.layout = options.layout;
|
|
209
|
+
}
|
|
210
|
+
if (options.linkLineColor) {
|
|
211
|
+
newElement.linkLineColor = options.linkLineColor;
|
|
212
|
+
}
|
|
213
|
+
return newElement;
|
|
214
|
+
};
|
|
215
|
+
// layoutLevel 用来表示插入兄弟节点还是子节点
|
|
216
|
+
export const insertMindElement = (board, inheritNode, path) => {
|
|
217
|
+
let fill, strokeColor, strokeWidth, shape = MindmapNodeShape.roundRectangle;
|
|
218
|
+
if (!inheritNode.isRoot) {
|
|
219
|
+
fill = inheritNode.fill;
|
|
220
|
+
strokeColor = inheritNode.strokeColor;
|
|
221
|
+
strokeWidth = inheritNode.strokeWidth;
|
|
222
|
+
}
|
|
223
|
+
shape = inheritNode.shape;
|
|
224
|
+
const newElement = createMindElement('', NODE_MIN_WIDTH, TEXT_DEFAULT_HEIGHT, { fill, strokeColor, strokeWidth, shape });
|
|
225
|
+
const index = path[path.length - 1];
|
|
226
|
+
const abstractNode = inheritNode.children.find(child => AbstractNode.isAbstract(child) && index > child.start && index <= child.end + 1);
|
|
227
|
+
if (abstractNode) {
|
|
228
|
+
const path = PlaitBoard.findPath(board, abstractNode);
|
|
229
|
+
Transforms.setNode(board, { end: abstractNode.end + 1 }, path);
|
|
230
|
+
}
|
|
231
|
+
Transforms.insertNode(board, newElement, path);
|
|
232
|
+
addSelectedElement(board, newElement);
|
|
233
|
+
setTimeout(() => {
|
|
234
|
+
enterNodeEditing(newElement);
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
export const findLastChild = (child) => {
|
|
238
|
+
let result = child;
|
|
239
|
+
while (result.children.length !== 0) {
|
|
240
|
+
result = result.children[result.children.length - 1];
|
|
241
|
+
}
|
|
242
|
+
return result;
|
|
243
|
+
};
|
|
244
|
+
export const deleteSelectedELements = (board, selectedElements) => {
|
|
245
|
+
//翻转,从下到上修改,防止找不到 path
|
|
246
|
+
const deletableElements = filterChildElement(selectedElements).reverse();
|
|
247
|
+
const relativeAbstracts = [];
|
|
248
|
+
const accumulativeProperties = new WeakMap();
|
|
249
|
+
deletableElements.forEach(node => {
|
|
250
|
+
const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(node);
|
|
251
|
+
if (MindNodeComponent && MindNodeComponent.parent) {
|
|
252
|
+
const index = MindNodeComponent.parent.origin.children.indexOf(node);
|
|
253
|
+
const abstracts = MindNodeComponent.parent.children.filter(value => AbstractNode.isAbstract(value.origin));
|
|
254
|
+
abstracts.forEach(abstract => {
|
|
255
|
+
const abstractNode = abstract.origin;
|
|
256
|
+
if (index >= abstractNode.start && index <= abstractNode.end) {
|
|
257
|
+
let newProperties = accumulativeProperties.get(abstractNode);
|
|
258
|
+
if (!newProperties) {
|
|
259
|
+
newProperties = { start: abstractNode.start, end: abstractNode.end };
|
|
260
|
+
accumulativeProperties.set(abstractNode, newProperties);
|
|
261
|
+
relativeAbstracts.push(abstractNode);
|
|
262
|
+
}
|
|
263
|
+
newProperties.end = newProperties.end - 1;
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
const abstractHandles = relativeAbstracts.map(value => {
|
|
269
|
+
const newProperties = accumulativeProperties.get(value);
|
|
270
|
+
if (newProperties) {
|
|
271
|
+
const path = PlaitBoard.findPath(board, value);
|
|
272
|
+
return () => {
|
|
273
|
+
if (newProperties.start > newProperties.end) {
|
|
274
|
+
Transforms.removeNode(board, path);
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
Transforms.setNode(board, newProperties, path);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
return () => { };
|
|
282
|
+
});
|
|
283
|
+
const deletableHandles = deletableElements.map(node => {
|
|
284
|
+
const path = PlaitBoard.findPath(board, node);
|
|
285
|
+
return () => {
|
|
286
|
+
if (shouldChangeRightNodeCount(node)) {
|
|
287
|
+
changeRightNodeCount(board, path.slice(0, path.length - 1), -1);
|
|
288
|
+
}
|
|
289
|
+
Transforms.removeNode(board, path);
|
|
290
|
+
};
|
|
291
|
+
});
|
|
292
|
+
abstractHandles.forEach(action => action());
|
|
293
|
+
deletableHandles.forEach(action => action());
|
|
294
|
+
};
|
|
295
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZG1hcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL21pbmRtYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQVEsVUFBVSxFQUEyQixVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEksT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHekgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUUxQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBb0I7SUFDbEQsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNsQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLE9BQW9CO0lBQzlDLElBQUksTUFBTSxDQUFDO0lBQ1gsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO0lBQ25CLElBQUksTUFBTSxHQUFH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Q0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTWluZG1hcExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBhZGRTZWxlY3RlZEVsZW1lbnQsIGlkQ3JlYXRvciwgaXNOdWxsT3JVbmRlZmluZWQsIFBhdGgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUGxhaXROb2RlLCBUcmFuc2Zvcm1zIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE1pbmRtYXBOb2RlU2hhcGUsIE5PREVfTUlOX1dJRFRILCBST09UX1RPUElDX0ZPTlRfU0laRSwgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCB9IGZyb20gJy4uL2NvbnN0YW50cy9ub2RlJztcbmltcG9ydCB7IE1pbmRtYXBOb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQnO1xuaW1wb3J0IHsgTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IFRFWFRfREVGQVVMVF9IRUlHSFQsIGdldFNpemVCeVRleHQsIFJPT1RfREVGQVVMVF9IRUlHSFQgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgZW50ZXJOb2RlRWRpdGluZyB9IGZyb20gJy4vbm9kZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChlbGVtZW50KTtcbiAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5wYXJlbnQub3JpZ2luO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZFVwRWxlbWVudChlbGVtZW50OiBNaW5kRWxlbWVudCk6IHsgcm9vdDogTWluZEVsZW1lbnQ7IGJyYW5jaD86IE1pbmRFbGVtZW50IH0ge1xuICAgIGxldCBicmFuY2g7XG4gICAgbGV0IHJvb3QgPSBlbGVtZW50O1xuICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50KTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGJyYW5jaCA9IHJvb3Q7XG4gICAgICAgIHJvb3QgPSBwYXJlbnQ7XG4gICAgICAgIHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB7IHJvb3QsIGJyYW5jaCB9O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0Q2hpbGRyZW5Db3VudCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGNvdW50OiBudW1iZXIgPSBlbGVtZW50LmNoaWxkcmVuLnJlZHVjZSgocDogbnVtYmVyLCBjOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gcCArIGdldENoaWxkcmVuQ291bnQoYyk7XG4gICAgfSwgMCk7XG4gICAgcmV0dXJuIGNvdW50ICsgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGg7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGlsZEVsZW1lbnQgPSAob3JpZ2luOiBNaW5kRWxlbWVudCwgY2hpbGQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGNoaWxkKTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQgPT09IG9yaWdpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNoaWxkRWxlbWVudCA9IChlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1pbmRFbGVtZW50W10gPSBbXTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBpc0NoaWxkID0gZWxlbWVudHMuc29tZShub2RlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpc0NoaWxkRWxlbWVudChub2RlLCBlbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFpc0NoaWxkKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGlsZFJpZ2h0ID0gKG5vZGU6IE1pbmRtYXBOb2RlLCBjaGlsZDogTWluZG1hcE5vZGUpID0+IHtcbiAgICByZXR1cm4gbm9kZS54IDwgY2hpbGQueDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkVXAgPSAobm9kZTogTWluZG1hcE5vZGUsIGNoaWxkOiBNaW5kbWFwTm9kZSkgPT4ge1xuICAgIHJldHVybiBub2RlLnkgPiBjaGlsZC55O1xufTtcblxuZXhwb3J0IGNvbnN0IGNvcHlOZXdOb2RlID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBuZXdOb2RlLmlkID0gaWRDcmVhdG9yKCk7XG4gICAgbmV3Tm9kZS5jaGlsZHJlbiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICBuZXdOb2RlLmNoaWxkcmVuLnB1c2goY29weU5ld05vZGUoY2hpbGROb2RlKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVJvb3RUb05vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBkZWxldGUgbmV3Tm9kZS5pc1Jvb3Q7XG4gICAgZGVsZXRlIG5ld05vZGUucmlnaHROb2RlQ291bnQ7XG4gICAgZGVsZXRlIG5ld05vZGUudHlwZTtcblxuICAgIGNvbnN0IHRleHQgPSBOb2RlLnN0cmluZyhub2RlLmRhdGEudG9waWMuY2hpbGRyZW5bMF0pIHx8ICcgJztcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFNpemVCeVRleHQodGV4dCwgUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCksIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQpO1xuXG4gICAgbmV3Tm9kZS53aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBOT0RFX01JTl9XSURUSCk7XG4gICAgbmV3Tm9kZS5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICBpZiAobmV3Tm9kZS5sYXlvdXQgPT09IE1pbmRtYXBMYXlvdXRUeXBlLnN0YW5kYXJkKSB7XG4gICAgICAgIGRlbGV0ZSBuZXdOb2RlLmxheW91dDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ob2RlVG9Sb290ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgbGV0IHRleHQgPSBOb2RlLnN0cmluZyhuZXdFbGVtZW50LmRhdGEudG9waWMpO1xuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSAn5oCd57u05a+85Zu+JztcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLnRvcGljID0geyBjaGlsZHJlbjogW3sgdGV4dCB9XSB9O1xuICAgIH1cblxuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5zdHJva2VDb2xvcjtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uZmlsbDtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uc2hhcGU7XG4gICAgZGVsZXRlIG5ld0VsZW1lbnQ/LnN0cm9rZVdpZHRoO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KHRleHQsIFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpLCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5ULCBST09UX1RPUElDX0ZPTlRfU0laRSk7XG4gICAgbmV3RWxlbWVudC53aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBOT0RFX01JTl9XSURUSCk7XG4gICAgbmV3RWxlbWVudC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdFbGVtZW50LFxuICAgICAgICBsYXlvdXQ6IG5ld0VsZW1lbnQubGF5b3V0ID8/IE1pbmRtYXBMYXlvdXRUeXBlLnJpZ2h0LFxuICAgICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgIGlzUm9vdDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ21pbmRtYXAnXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Tm9kZXNUZXh0ID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIHN0ciArPSBOb2RlLnN0cmluZyhub2RlLmRhdGEudG9waWMuY2hpbGRyZW5bMF0pICsgJyAnO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBzdHIgKz0gZXh0cmFjdE5vZGVzVGV4dChjaGlsZE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgY2hhbmdlUmlnaHROb2RlQ291bnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBhcmVudFBhdGg6IFBhdGgsIGNoYW5nZU51bWJlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgX3JpZ2h0Tm9kZUNvdW50ID0gYm9hcmQuY2hpbGRyZW5bcGFyZW50UGF0aFswXV0ucmlnaHROb2RlQ291bnQ7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICBib2FyZCxcbiAgICAgICAge1xuICAgICAgICAgICAgcmlnaHROb2RlQ291bnQ6XG4gICAgICAgICAgICAgICAgY2hhbmdlTnVtYmVyID49IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfcmlnaHROb2RlQ291bnQhICsgY2hhbmdlTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIDogX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlciA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlclxuICAgICAgICB9LFxuICAgICAgICBwYXJlbnRQYXRoXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDaGFuZ2VSaWdodE5vZGVDb3VudCA9IChzZWxlY3RlZEVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGZpbmRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRWxlbWVudCk7XG4gICAgY29uc3QgTWluZE5vZGVDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChzZWxlY3RlZEVsZW1lbnQpO1xuICAgIGlmIChwYXJlbnRFbGVtZW50ICYmIE1pbmROb2RlQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleDogbnVtYmVyID0gTWluZE5vZGVDb21wb25lbnQucGFyZW50LmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ub3JpZ2luLmlkID09PSBzZWxlY3RlZEVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmlzUm9vdCAmJlxuICAgICAgICAgICAgZ2V0Um9vdExheW91dChwYXJlbnRFbGVtZW50KSA9PT0gTWluZG1hcExheW91dFR5cGUuc3RhbmRhcmQgJiZcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmlnaHROb2RlQ291bnQgJiZcbiAgICAgICAgICAgIG5vZGVJbmRleCA8PSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNaW5kbWFwRGF0YSA9IChyaWdodE5vZGVDb3VudDogbnVtYmVyLCBsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlKSA9PiB7XG4gICAgY29uc3QgbWluZG1hcERhdGE6IFBsYWl0RWxlbWVudCA9IHtcbiAgICAgICAgdHlwZTogJ21pbmRtYXAnLFxuICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgIGlzUm9vdDogdHJ1ZSxcbiAgICAgICAgcmlnaHROb2RlQ291bnQsXG4gICAgICAgIGxheW91dCxcbiAgICAgICAgd2lkdGg6IDcyLFxuICAgICAgICBoZWlnaHQ6IFJPT1RfREVGQVVMVF9IRUlHSFQsXG4gICAgICAgIHBvaW50czogW1syMzAsIDIwOF1dLFxuICAgICAgICB2YWx1ZTogeyBjaGlsZHJlbjogW3sgdGV4dDogJ+aAnee7tOWvvOWbvicgfV0gfSxcbiAgICAgICAgc2hhcGU6IE1pbmRtYXBOb2RlU2hhcGUucm91bmRSZWN0YW5nbGUsXG4gICAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7IGNoaWxkcmVuOiBbeyB0ZXh0OiAn5paw5bu66IqC54K5JyB9XSB9LFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICB3aWR0aDogNTYsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBURVhUX0RFRkFVTFRfSEVJR0hULFxuICAgICAgICAgICAgICAgIHNoYXBlOiBNaW5kbWFwTm9kZVNoYXBlLnJvdW5kUmVjdGFuZ2xlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBjaGlsZHJlbjogW3sgdGV4dDogJ+aWsOW7uuiKgueCuScgfV0gfSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgd2lkdGg6IDU2LFxuICAgICAgICAgICAgICAgIGhlaWdodDogVEVYVF9ERUZBVUxUX0hFSUdIVCxcbiAgICAgICAgICAgICAgICBzaGFwZTogTWluZG1hcE5vZGVTaGFwZS5yb3VuZFJlY3RhbmdsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogaWRDcmVhdG9yKCksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHsgY2hpbGRyZW46IFt7IHRleHQ6ICfmlrDlu7roioLngrknIH1dIH0sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgIHdpZHRoOiA1NixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFRFWFRfREVGQVVMVF9IRUlHSFQsXG4gICAgICAgICAgICAgICAgc2hhcGU6IE1pbmRtYXBOb2RlU2hhcGUucm91bmRSZWN0YW5nbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG4gICAgcmV0dXJuIFttaW5kbWFwRGF0YV07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTWluZEVsZW1lbnQgPSAoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHdpZHRoOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgb3B0aW9uczoge1xuICAgICAgICBmaWxsPzogc3RyaW5nO1xuICAgICAgICBzdHJva2VDb2xvcj86IHN0cmluZztcbiAgICAgICAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gICAgICAgIHNoYXBlPzogTWluZG1hcE5vZGVTaGFwZTtcbiAgICAgICAgbGF5b3V0PzogTWluZG1hcExheW91dFR5cGU7XG4gICAgICAgIGxpbmtMaW5lQ29sb3I/OiBzdHJpbmc7XG4gICAgfVxuKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudDogTWluZEVsZW1lbnQgPSB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdG9waWM6IHsgY2hpbGRyZW46IFt7IHRleHQgfV0gfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdGlvbnMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiBvcHRpb25zLnN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZTogb3B0aW9ucy5zaGFwZVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuZmlsbCkge1xuICAgICAgICBuZXdFbGVtZW50LmZpbGwgPSBvcHRpb25zLmZpbGw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0cm9rZUNvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlQ29sb3IgPSBvcHRpb25zLnN0cm9rZUNvbG9yO1xuICAgIH1cbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMuc3Ryb2tlV2lkdGgpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlV2lkdGggPSBvcHRpb25zLnN0cm9rZVdpZHRoO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBuZXdFbGVtZW50LnNoYXBlID0gb3B0aW9ucy5zaGFwZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGF5b3V0KSB7XG4gICAgICAgIG5ld0VsZW1lbnQubGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxpbmtMaW5lQ29sb3IpIHtcbiAgICAgICAgbmV3RWxlbWVudC5saW5rTGluZUNvbG9yID0gb3B0aW9ucy5saW5rTGluZUNvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8vIGxheW91dExldmVsIOeUqOadpeihqOekuuaPkuWFpeWFhOW8n+iKgueCuei/mOaYr+WtkOiKgueCuVxuZXhwb3J0IGNvbnN0IGluc2VydE1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBpbmhlcml0Tm9kZTogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBsZXQgZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZSA9IE1pbmRtYXBOb2RlU2hhcGUucm91bmRSZWN0YW5nbGU7XG4gICAgaWYgKCFpbmhlcml0Tm9kZS5pc1Jvb3QpIHtcbiAgICAgICAgZmlsbCA9IGluaGVyaXROb2RlLmZpbGw7XG4gICAgICAgIHN0cm9rZUNvbG9yID0gaW5oZXJpdE5vZGUuc3Ryb2tlQ29sb3I7XG4gICAgICAgIHN0cm9rZVdpZHRoID0gaW5oZXJpdE5vZGUuc3Ryb2tlV2lkdGg7XG4gICAgfVxuXG4gICAgc2hhcGUgPSBpbmhlcml0Tm9kZS5zaGFwZSBhcyBNaW5kbWFwTm9kZVNoYXBlO1xuXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGNyZWF0ZU1pbmRFbGVtZW50KCcnLCBOT0RFX01JTl9XSURUSCwgVEVYVF9ERUZBVUxUX0hFSUdIVCwgeyBmaWxsLCBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHNoYXBlIH0pO1xuXG4gICAgY29uc3QgaW5kZXggPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYWJzdHJhY3ROb2RlID0gaW5oZXJpdE5vZGUuY2hpbGRyZW4uZmluZChcbiAgICAgICAgY2hpbGQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpICYmIGluZGV4ID4gY2hpbGQuc3RhcnQgJiYgaW5kZXggPD0gY2hpbGQuZW5kICsgMVxuICAgICk7XG4gICAgaWYgKGFic3RyYWN0Tm9kZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgYWJzdHJhY3ROb2RlIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGVuZDogKGFic3RyYWN0Tm9kZSBhcyBBYnN0cmFjdE5vZGUpLmVuZCArIDEgfSwgcGF0aCk7XG4gICAgfVxuICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhuZXdFbGVtZW50KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENoaWxkID0gKGNoaWxkOiBNaW5kbWFwTm9kZSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBjaGlsZDtcbiAgICB3aGlsZSAocmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY2hpbGRyZW5bcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBmaWx0ZXJDaGlsZEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cykucmV2ZXJzZSgpO1xuXG4gICAgY29uc3QgcmVsYXRpdmVBYnN0cmFjdHM6IEFic3RyYWN0Tm9kZVtdID0gW107XG4gICAgY29uc3QgYWNjdW11bGF0aXZlUHJvcGVydGllcyA9IG5ldyBXZWFrTWFwPEFic3RyYWN0Tm9kZSwgeyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PigpO1xuXG4gICAgZGVsZXRhYmxlRWxlbWVudHMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgY29uc3QgTWluZE5vZGVDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChub2RlKTtcbiAgICAgICAgaWYgKE1pbmROb2RlQ29tcG9uZW50ICYmIE1pbmROb2RlQ29tcG9uZW50LnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBNaW5kTm9kZUNvbXBvbmVudC5wYXJlbnQub3JpZ2luLmNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgICBjb25zdCBhYnN0cmFjdHMgPSBNaW5kTm9kZUNvbXBvbmVudC5wYXJlbnQuY2hpbGRyZW4uZmlsdGVyKHZhbHVlID0+IEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KHZhbHVlLm9yaWdpbikpO1xuICAgICAgICAgICAgYWJzdHJhY3RzLmZvckVhY2goYWJzdHJhY3QgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0Tm9kZSA9IGFic3RyYWN0Lm9yaWdpbiBhcyBBYnN0cmFjdE5vZGU7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGFic3RyYWN0Tm9kZS5zdGFydCAmJiBpbmRleCA8PSBhYnN0cmFjdE5vZGUuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdQcm9wZXJ0aWVzID0gYWNjdW11bGF0aXZlUHJvcGVydGllcy5nZXQoYWJzdHJhY3ROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXdQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzID0geyBzdGFydDogYWJzdHJhY3ROb2RlLnN0YXJ0LCBlbmQ6IGFic3RyYWN0Tm9kZS5lbmQgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGl2ZVByb3BlcnRpZXMuc2V0KGFic3RyYWN0Tm9kZSwgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUFic3RyYWN0cy5wdXNoKGFic3RyYWN0Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllcy5lbmQgPSBuZXdQcm9wZXJ0aWVzLmVuZCAtIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGFic3RyYWN0SGFuZGxlcyA9IHJlbGF0aXZlQWJzdHJhY3RzLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmIChuZXdQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdmFsdWUgYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmV3UHJvcGVydGllcy5zdGFydCA+IG5ld1Byb3BlcnRpZXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZShib2FyZCwgcGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdQcm9wZXJ0aWVzLCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlbGV0YWJsZUhhbmRsZXMgPSBkZWxldGFibGVFbGVtZW50cy5tYXAobm9kZSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBub2RlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VSaWdodE5vZGVDb3VudChub2RlKSkge1xuICAgICAgICAgICAgICAgIGNoYW5nZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCBwYXRoLnNsaWNlKDAsIHBhdGgubGVuZ3RoIC0gMSksIC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZShib2FyZCwgcGF0aCk7XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBhYnN0cmFjdEhhbmRsZXMuZm9yRWFjaChhY3Rpb24gPT4gYWN0aW9uKCkpO1xuICAgIGRlbGV0YWJsZUhhbmRsZXMuZm9yRWFjaChhY3Rpb24gPT4gYWN0aW9uKCkpO1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { BASE } from '../constants/default';
|
|
2
|
+
import { PlaitMind } from '../interfaces/element';
|
|
3
|
+
import { MindElement } from '../interfaces/element';
|
|
4
|
+
import { getEmojisRectangle } from '../plugins/emoji/emoji';
|
|
5
|
+
const NodeDefaultSpace = {
|
|
6
|
+
horizontal: {
|
|
7
|
+
nodeAndText: BASE * 3,
|
|
8
|
+
emojiAndText: BASE * 1.5
|
|
9
|
+
},
|
|
10
|
+
vertical: {
|
|
11
|
+
nodeAndText: BASE * 1.5
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const RootDefaultSpace = {
|
|
15
|
+
horizontal: {
|
|
16
|
+
nodeAndText: BASE * 4,
|
|
17
|
+
emojiAndText: BASE * 2
|
|
18
|
+
},
|
|
19
|
+
vertical: {
|
|
20
|
+
nodeAndText: BASE * 2
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const getHorizontalSpaceBetweenNodeAndText = (element) => {
|
|
24
|
+
const isMind = PlaitMind.isMind(element);
|
|
25
|
+
const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;
|
|
26
|
+
return nodeAndText;
|
|
27
|
+
};
|
|
28
|
+
const getHorizontalSpaceEmojiAndText = (element) => {
|
|
29
|
+
const isMind = PlaitMind.isMind(element);
|
|
30
|
+
const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;
|
|
31
|
+
return emojiAndText;
|
|
32
|
+
};
|
|
33
|
+
const getVerticalSpaceBetweenNodeAndText = (element) => {
|
|
34
|
+
const isMind = PlaitMind.isMind(element);
|
|
35
|
+
const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;
|
|
36
|
+
return nodeAndText;
|
|
37
|
+
};
|
|
38
|
+
export const NodeSpace = {
|
|
39
|
+
getNodeWidth(element) {
|
|
40
|
+
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);
|
|
41
|
+
if (MindElement.hasEmojis(element)) {
|
|
42
|
+
return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element) + element.width + nodeAndText;
|
|
43
|
+
}
|
|
44
|
+
return nodeAndText + element.width + nodeAndText;
|
|
45
|
+
},
|
|
46
|
+
getNodeHeight(element) {
|
|
47
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
48
|
+
return nodeAndText + element.height + nodeAndText;
|
|
49
|
+
},
|
|
50
|
+
getTextHorizontalSpace(element) {
|
|
51
|
+
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);
|
|
52
|
+
if (MindElement.hasEmojis(element)) {
|
|
53
|
+
return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return nodeAndText;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
getTextVerticalSpace(element) {
|
|
60
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
61
|
+
return nodeAndText;
|
|
62
|
+
},
|
|
63
|
+
getEmojiHorizontalSpace(element) {
|
|
64
|
+
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);
|
|
65
|
+
return nodeAndText;
|
|
66
|
+
},
|
|
67
|
+
getEmojiVerticalSpace(element) {
|
|
68
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
69
|
+
return nodeAndText;
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1zcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL25vZGUtc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUQsTUFBTSxnQkFBZ0IsR0FBRztJQUNyQixVQUFVLEVBQUU7UUFDUixXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDckIsWUFBWSxFQUFFLElBQUksR0FBRyxHQUFHO0tBQzNCO0lBQ0QsUUFBUSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUksR0FBRyxHQUFHO0tBQzFCO0NBQ0osQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsVUFBVSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3JCLFlBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQztLQUN6QjtJQUNELFFBQVEsRUFBRTtRQUNOLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQztLQUN4QjtDQUNKLENBQUM7QUFFRixNQUFNLG9DQUFvQyxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQy9HLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDbEgsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUNoRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMzRyxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsWUFBWSxDQUFDLE9BQW9CO1FBQzdCLE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoQyxPQUFPLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsOEJBQThCLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7U0FDbEk7UUFDRCxPQUFPLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQW9CO1FBQzlCLE1BQU0sV0FBVyxHQUFHLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxPQUFvQjtRQUN2QyxNQUFNLFdBQVcsR0FBRyxvQ0FBb0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDaEMsT0FBTyxXQUFXLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3BHO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxPQUFvQjtRQUNyQyxNQUFNLFdBQVcsR0FBRyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0QsdUJBQXVCLENBQUMsT0FBb0I7UUFDeEMsTUFBTSxXQUFXLEdBQUcsb0NBQW9DLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUNELHFCQUFxQixDQUFDLE9BQW9CO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQkFTRSB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IFBsYWl0TWluZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRFbW9qaXNSZWN0YW5nbGUgfSBmcm9tICcuLi9wbHVnaW5zL2Vtb2ppL2Vtb2ppJztcblxuY29uc3QgTm9kZURlZmF1bHRTcGFjZSA9IHtcbiAgICBob3Jpem9udGFsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMyxcbiAgICAgICAgZW1vamlBbmRUZXh0OiBCQVNFICogMS41XG4gICAgfSxcbiAgICB2ZXJ0aWNhbDoge1xuICAgICAgICBub2RlQW5kVGV4dDogQkFTRSAqIDEuNVxuICAgIH1cbn07XG5cbmNvbnN0IFJvb3REZWZhdWx0U3BhY2UgPSB7XG4gICAgaG9yaXpvbnRhbDoge1xuICAgICAgICBub2RlQW5kVGV4dDogQkFTRSAqIDQsXG4gICAgICAgIGVtb2ppQW5kVGV4dDogQkFTRSAqIDJcbiAgICB9LFxuICAgIHZlcnRpY2FsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMlxuICAgIH1cbn07XG5cbmNvbnN0IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGlzTWluZCA9IFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLmhvcml6b250YWwubm9kZUFuZFRleHQgOiBOb2RlRGVmYXVsdFNwYWNlLmhvcml6b250YWwubm9kZUFuZFRleHQ7XG4gICAgcmV0dXJuIG5vZGVBbmRUZXh0O1xufTtcblxuY29uc3QgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0ID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaXNNaW5kID0gUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KTtcbiAgICBjb25zdCBlbW9qaUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLmhvcml6b250YWwuZW1vamlBbmRUZXh0IDogTm9kZURlZmF1bHRTcGFjZS5ob3Jpem9udGFsLmVtb2ppQW5kVGV4dDtcbiAgICByZXR1cm4gZW1vamlBbmRUZXh0O1xufTtcblxuY29uc3QgZ2V0VmVydGljYWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGlzTWluZCA9IFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLnZlcnRpY2FsLm5vZGVBbmRUZXh0IDogTm9kZURlZmF1bHRTcGFjZS52ZXJ0aWNhbC5ub2RlQW5kVGV4dDtcbiAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgTm9kZVNwYWNlID0ge1xuICAgIGdldE5vZGVXaWR0aChlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dChlbGVtZW50KTtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVBbmRUZXh0ICsgZ2V0RW1vamlzUmVjdGFuZ2xlKGVsZW1lbnQpLndpZHRoICsgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0KGVsZW1lbnQpICsgZWxlbWVudC53aWR0aCArIG5vZGVBbmRUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlQW5kVGV4dCArIGVsZW1lbnQud2lkdGggKyBub2RlQW5kVGV4dDtcbiAgICB9LFxuICAgIGdldE5vZGVIZWlnaHQoZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUFuZFRleHQgPSBnZXRWZXJ0aWNhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBlbGVtZW50LmhlaWdodCArIG5vZGVBbmRUZXh0O1xuICAgIH0sXG4gICAgZ2V0VGV4dEhvcml6b250YWxTcGFjZShlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dChlbGVtZW50KTtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVBbmRUZXh0ICsgZ2V0RW1vamlzUmVjdGFuZ2xlKGVsZW1lbnQpLndpZHRoICsgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVBbmRUZXh0O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRUZXh0VmVydGljYWxTcGFjZShlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldFZlcnRpY2FsU3BhY2VCZXR3ZWVuTm9kZUFuZFRleHQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBub2RlQW5kVGV4dDtcbiAgICB9LFxuICAgIGdldEVtb2ppSG9yaXpvbnRhbFNwYWNlKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0SG9yaXpvbnRhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgfSxcbiAgICBnZXRFbW9qaVZlcnRpY2FsU3BhY2UoZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUFuZFRleHQgPSBnZXRWZXJ0aWNhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ELEMENT_TO_COMPONENT } from '@plait/core';
|
|
2
|
+
export function enterNodeEditing(element) {
|
|
3
|
+
const component = ELEMENT_TO_COMPONENT.get(element);
|
|
4
|
+
component.startEditText(false, false);
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSW5ELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxPQUFvQjtJQUNqRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFzQixDQUFDO0lBQ3pFLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZW50ZXJOb2RlRWRpdGluZyhlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChlbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBjb21wb25lbnQuc3RhcnRFZGl0VGV4dChmYWxzZSwgZmFsc2UpO1xufVxuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PlaitBoard } from '@plait/core';
|
|
2
|
+
import { Path } from 'slate';
|
|
3
|
+
export function findNewChildNodePath(board, element) {
|
|
4
|
+
const path = PlaitBoard.findPath(board, element);
|
|
5
|
+
return path.concat((element.children || []).length);
|
|
6
|
+
}
|
|
7
|
+
export function findNewSiblingNodePath(board, element) {
|
|
8
|
+
const path = PlaitBoard.findPath(board, element);
|
|
9
|
+
return Path.next(path);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtJQUN6RSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtJQUMzRSxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBhdGggfSBmcm9tICdzbGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3Q2hpbGROb2RlUGF0aChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSB7XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIHJldHVybiBwYXRoLmNvbmNhdCgoZWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdTaWJsaW5nTm9kZVBhdGgoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkge1xuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gUGF0aC5uZXh0KHBhdGgpO1xufVxuIl19
|