@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.
Files changed (125) hide show
  1. package/README.md +24 -0
  2. package/constants/default.d.ts +12 -0
  3. package/constants/index.d.ts +2 -0
  4. package/constants/node.d.ts +17 -0
  5. package/draw/abstract.d.ts +4 -0
  6. package/draw/indented-link.d.ts +3 -0
  7. package/draw/link/abstract-link.d.ts +3 -0
  8. package/draw/link/logic-link.d.ts +3 -0
  9. package/draw/link.d.ts +3 -0
  10. package/draw/richtext.d.ts +14 -0
  11. package/draw/shape.d.ts +3 -0
  12. package/esm2020/constants/default.mjs +13 -0
  13. package/esm2020/constants/index.mjs +3 -0
  14. package/esm2020/constants/node.mjs +19 -0
  15. package/esm2020/draw/abstract.mjs +48 -0
  16. package/esm2020/draw/indented-link.mjs +44 -0
  17. package/esm2020/draw/link/abstract-link.mjs +42 -0
  18. package/esm2020/draw/link/logic-link.mjs +51 -0
  19. package/esm2020/draw/link.mjs +158 -0
  20. package/esm2020/draw/richtext.mjs +35 -0
  21. package/esm2020/draw/shape.mjs +18 -0
  22. package/esm2020/interfaces/abstract.mjs +6 -0
  23. package/esm2020/interfaces/element-data.mjs +2 -0
  24. package/esm2020/interfaces/element.mjs +59 -0
  25. package/esm2020/interfaces/index.mjs +6 -0
  26. package/esm2020/interfaces/layout.mjs +19 -0
  27. package/esm2020/interfaces/node.mjs +23 -0
  28. package/esm2020/interfaces/types.mjs +13 -0
  29. package/esm2020/layout-option.mjs +72 -0
  30. package/esm2020/mind.component.mjs +50 -0
  31. package/esm2020/mind.module.mjs +21 -0
  32. package/esm2020/node.component.mjs +742 -0
  33. package/esm2020/plait-mind.mjs +5 -0
  34. package/esm2020/plugins/emoji/emoji-base.component.mjs +21 -0
  35. package/esm2020/plugins/emoji/emoji.drawer.mjs +79 -0
  36. package/esm2020/plugins/emoji/emoji.mjs +15 -0
  37. package/esm2020/plugins/emoji/index.mjs +4 -0
  38. package/esm2020/plugins/emoji/with-mind-emoji.mjs +8 -0
  39. package/esm2020/plugins/with-abstract.mjs +92 -0
  40. package/esm2020/plugins/with-dnd.mjs +276 -0
  41. package/esm2020/plugins/with-mind.mjs +183 -0
  42. package/esm2020/public-api.mjs +14 -0
  43. package/esm2020/queries/get-available-sublayouts-by-element.mjs +29 -0
  44. package/esm2020/queries/get-branch-mindmap-layouts-by-element.mjs +18 -0
  45. package/esm2020/queries/get-correct-layout-by-element.mjs +50 -0
  46. package/esm2020/queries/get-layout-by-element.mjs +16 -0
  47. package/esm2020/queries/get-layout-parent-by-element.mjs +17 -0
  48. package/esm2020/queries/index.mjs +13 -0
  49. package/esm2020/transforms/index.mjs +10 -0
  50. package/esm2020/transforms/layout.mjs +23 -0
  51. package/esm2020/transforms/node.mjs +44 -0
  52. package/esm2020/utils/abstract/common.mjs +25 -0
  53. package/esm2020/utils/abstract/resize.mjs +169 -0
  54. package/esm2020/utils/clipboard.mjs +71 -0
  55. package/esm2020/utils/colors.mjs +41 -0
  56. package/esm2020/utils/direction-corrector.mjs +54 -0
  57. package/esm2020/utils/direction-detector.mjs +56 -0
  58. package/esm2020/utils/draw-placeholder.mjs +311 -0
  59. package/esm2020/utils/drop-target-corrector.mjs +86 -0
  60. package/esm2020/utils/graph.mjs +24 -0
  61. package/esm2020/utils/index.mjs +14 -0
  62. package/esm2020/utils/is-virtual-key.mjs +13 -0
  63. package/esm2020/utils/layout.mjs +105 -0
  64. package/esm2020/utils/mindmap.mjs +295 -0
  65. package/esm2020/utils/node-space.mjs +72 -0
  66. package/esm2020/utils/node.mjs +6 -0
  67. package/esm2020/utils/path.mjs +11 -0
  68. package/esm2020/utils/point-placement.mjs +99 -0
  69. package/esm2020/utils/shape.mjs +17 -0
  70. package/esm2020/utils/weak-maps.mjs +3 -0
  71. package/fesm2015/plait-mind.mjs +3583 -0
  72. package/fesm2015/plait-mind.mjs.map +1 -0
  73. package/fesm2020/plait-mind.mjs +3595 -0
  74. package/fesm2020/plait-mind.mjs.map +1 -0
  75. package/index.d.ts +5 -0
  76. package/interfaces/abstract.d.ts +4 -0
  77. package/interfaces/element-data.d.ts +11 -0
  78. package/interfaces/element.d.ts +39 -0
  79. package/interfaces/index.d.ts +5 -0
  80. package/interfaces/layout.d.ts +10 -0
  81. package/interfaces/node.d.ts +33 -0
  82. package/interfaces/types.d.ts +11 -0
  83. package/layout-option.d.ts +2 -0
  84. package/mind.component.d.ts +16 -0
  85. package/mind.module.d.ts +11 -0
  86. package/node.component.d.ts +60 -0
  87. package/package.json +31 -0
  88. package/plugins/emoji/emoji-base.component.d.ts +12 -0
  89. package/plugins/emoji/emoji.d.ts +6 -0
  90. package/plugins/emoji/emoji.drawer.d.ts +22 -0
  91. package/plugins/emoji/index.d.ts +3 -0
  92. package/plugins/emoji/with-mind-emoji.d.ts +8 -0
  93. package/plugins/with-abstract.d.ts +2 -0
  94. package/plugins/with-dnd.d.ts +11 -0
  95. package/plugins/with-mind.d.ts +2 -0
  96. package/public-api.d.ts +10 -0
  97. package/queries/get-available-sublayouts-by-element.d.ts +8 -0
  98. package/queries/get-branch-mindmap-layouts-by-element.d.ts +3 -0
  99. package/queries/get-correct-layout-by-element.d.ts +9 -0
  100. package/queries/get-layout-by-element.d.ts +3 -0
  101. package/queries/get-layout-parent-by-element.d.ts +8 -0
  102. package/queries/index.d.ts +7 -0
  103. package/styles/styles.scss +99 -0
  104. package/transforms/index.d.ts +7 -0
  105. package/transforms/layout.d.ts +3 -0
  106. package/transforms/node.d.ts +8 -0
  107. package/utils/abstract/common.d.ts +5 -0
  108. package/utils/abstract/resize.d.ts +21 -0
  109. package/utils/clipboard.d.ts +7 -0
  110. package/utils/colors.d.ts +4 -0
  111. package/utils/direction-corrector.d.ts +3 -0
  112. package/utils/direction-detector.d.ts +9 -0
  113. package/utils/draw-placeholder.d.ts +42 -0
  114. package/utils/drop-target-corrector.d.ts +8 -0
  115. package/utils/graph.d.ts +5 -0
  116. package/utils/index.d.ts +13 -0
  117. package/utils/is-virtual-key.d.ts +1 -0
  118. package/utils/layout.d.ts +12 -0
  119. package/utils/mindmap.d.ts +33 -0
  120. package/utils/node-space.d.ts +9 -0
  121. package/utils/node.d.ts +2 -0
  122. package/utils/path.d.ts +4 -0
  123. package/utils/point-placement.d.ts +8 -0
  124. package/utils/shape.d.ts +3 -0
  125. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckUsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxhQUFrQyxFQUFFLEVBQUU7SUFDL0UsTUFBTSxnQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO0lBQy9DLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNGLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUM1QjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQWlCLEVBQUUsTUFBeUIsRUFBRSxFQUFFO0lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksdUJBQXVCLEVBQUUsQ0FBQztJQUM1RCxPQUFPLENBQUMsMkJBQTJCLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FB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QUMxRSxJQUFJLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7SUFDN0MsUUFBUSxlQUFlLEVBQUU7UUFDckIsS0FBSyxlQUFlLENBQUMsR0FBRztZQUNwQixnQkFBZ0IsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQzFDLE1BQU07UUFDVixLQUFLLGVBQWUsQ0FBQyxNQUFNO1lBQ3ZCLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDdkMsTUFBTTtRQUNWLEtBQUssZUFBZSxDQUFDLEtBQUs7WUFDdEIsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztZQUN4QyxNQUFNO1FBQ1YsS0FBSyxlQUFlLENBQUMsSUFBSTtZQUNyQixnQkFBZ0IsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1lBQ3pDLE1BQU07S0FDYjtJQUNELE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFO0lBQy9DLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExheW91dERpcmVjdGlvbiwgTGF5b3V0RGlyZWN0aW9uc01hcCwgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzSW5kZW50ZWRMYXlvdXQsIE1pbmRtYXBMYXlvdXRUeXBlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJhbmNoRGlyZWN0aW9uc0J5TGF5b3V0cyA9IChicmFuY2hMYXlvdXRzOiBNaW5kbWFwTGF5b3V0VHlwZVtdKSA9PiB7XG4gICAgY29uc3QgYnJhbmNoRGlyZWN0aW9uczogTGF5b3V0RGlyZWN0aW9uW10gPSBbXTtcbiAgICBicmFuY2hMYXlvdXRzLmZvckVhY2gobCA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBMYXlvdXREaXJlY3Rpb25zTWFwW2xdO1xuICAgICAgICBkaXJlY3Rpb25zLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWJyYW5jaERpcmVjdGlvbnMuaW5jbHVkZXMoZCkgJiYgIWJyYW5jaERpcmVjdGlvbnMuaW5jbHVkZXMoZ2V0TGF5b3V0UmV2ZXJzZURpcmVjdGlvbihkKSkpIHtcbiAgICAgICAgICAgICAgICBicmFuY2hEaXJlY3Rpb25zLnB1c2goZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBicmFuY2hEaXJlY3Rpb25zO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29ycmVjdExheW91dCA9IChyb290OiBNaW5kRWxlbWVudCwgbGF5b3V0OiBNaW5kbWFwTGF5b3V0VHlwZSkgPT4ge1xuICAgIGNvbnN0IHJvb3RMYXlvdXQgPSByb290LmxheW91dCB8fCBnZXREZWZhdWx0TWluZG1hcExheW91dCgpO1xuICAgIHJldHVybiAhZ2V0SW5Db3JyZWN0TGF5b3V0RGlyZWN0aW9uKHJvb3RMYXlvdXQsIGxheW91dCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNaXhlZExheW91dCA9IChwYXJlbnRMYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlLCBsYXlvdXQ6IE1pbmRtYXBMYXlvdXRUeXBlKSA9PiB7XG4gICAgcmV0dXJuICghaXNJbmRlbnRlZExheW91dChwYXJlbnRMYXlvdXQpICYmIGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkgfHwgKGlzSW5kZW50ZWRMYXlvdXQocGFyZW50TGF5b3V0KSAmJiAhaXNJbmRlbnRlZExheW91dChsYXlvdXQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbkNvcnJlY3RMYXlvdXREaXJlY3Rpb24gPSAocm9vdExheW91dDogTWluZG1hcExheW91dFR5cGUsIGxheW91dDogTWluZG1hcExheW91dFR5cGUpID0+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