@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,169 @@
1
+ import { RectangleClient, getRectangleByElements } from '@plait/core';
2
+ import { AbstractHandlePosition, MindElement } from '../../interfaces';
3
+ import { AbstractNode, isHorizontalLayout } from '@plait/layouts';
4
+ import { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants';
5
+ import { MindmapQueries } from '../../queries';
6
+ import { getCorrectStartEnd } from '@plait/layouts';
7
+ export const getRectangleByResizingLocation = (abstractRectangle, location, handlePosition, isHorizontal) => {
8
+ if (isHorizontal) {
9
+ if (handlePosition === AbstractHandlePosition.start) {
10
+ return {
11
+ ...abstractRectangle,
12
+ y: location,
13
+ height: abstractRectangle.height + abstractRectangle.y - location
14
+ };
15
+ }
16
+ else {
17
+ return {
18
+ ...abstractRectangle,
19
+ height: location - abstractRectangle.y
20
+ };
21
+ }
22
+ }
23
+ else {
24
+ if (handlePosition === AbstractHandlePosition.start) {
25
+ return {
26
+ ...abstractRectangle,
27
+ x: location,
28
+ width: abstractRectangle.width + abstractRectangle.x - location
29
+ };
30
+ }
31
+ else {
32
+ return {
33
+ ...abstractRectangle,
34
+ width: location - abstractRectangle.x
35
+ };
36
+ }
37
+ }
38
+ };
39
+ export const getLocationScope = (board, handlePosition, parentChildren, element, parent, isHorizontal) => {
40
+ const node = MindElement.getNode(element);
41
+ const { start, end } = getCorrectStartEnd(node.origin, parent);
42
+ const startNode = parentChildren[start];
43
+ const endNode = parentChildren[end];
44
+ if (handlePosition === AbstractHandlePosition.start) {
45
+ const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.end < element.start);
46
+ let minNode;
47
+ if (abstractNode.length) {
48
+ const index = abstractNode
49
+ .map(node => {
50
+ const { end } = getCorrectStartEnd(node, parent);
51
+ return end;
52
+ })
53
+ .sort((a, b) => b - a)[0];
54
+ minNode = parentChildren[index + 1];
55
+ }
56
+ else {
57
+ minNode = parentChildren[0];
58
+ }
59
+ const minNodeRectangle = getRectangleByElements(board, [minNode], true);
60
+ const endNodeRectangle = getRectangleByElements(board, [endNode], false);
61
+ if (isHorizontal) {
62
+ return {
63
+ max: endNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET,
64
+ min: minNodeRectangle.y - ABSTRACT_INCLUDED_OUTLINE_OFFSET
65
+ };
66
+ }
67
+ else {
68
+ return {
69
+ max: endNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET,
70
+ min: minNodeRectangle.x - ABSTRACT_INCLUDED_OUTLINE_OFFSET
71
+ };
72
+ }
73
+ }
74
+ else {
75
+ const abstractNode = parentChildren.filter(child => AbstractNode.isAbstract(child) && child.start > element.end);
76
+ let maxNode;
77
+ if (abstractNode.length) {
78
+ const index = abstractNode
79
+ .map(node => {
80
+ const { start } = getCorrectStartEnd(node, parent);
81
+ return start;
82
+ })
83
+ .sort((a, b) => a - b)[0];
84
+ maxNode = parentChildren[index - 1];
85
+ }
86
+ else {
87
+ const children = parentChildren.filter(child => !AbstractNode.isAbstract(child));
88
+ maxNode = parentChildren[children.length - 1];
89
+ }
90
+ const maxNodeRectangle = getRectangleByElements(board, [maxNode], true);
91
+ const startNodeRectangle = getRectangleByElements(board, [startNode], false);
92
+ if (isHorizontal) {
93
+ return {
94
+ max: maxNodeRectangle.y + maxNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET,
95
+ min: startNodeRectangle.y + startNodeRectangle.height + ABSTRACT_INCLUDED_OUTLINE_OFFSET
96
+ };
97
+ }
98
+ else {
99
+ return {
100
+ max: maxNodeRectangle.x + maxNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET,
101
+ min: startNodeRectangle.x + startNodeRectangle.width + ABSTRACT_INCLUDED_OUTLINE_OFFSET
102
+ };
103
+ }
104
+ }
105
+ };
106
+ export const getHitAbstractHandle = (board, element, point) => {
107
+ const nodeLayout = MindmapQueries.getCorrectLayoutByElement(element);
108
+ const isHorizontal = isHorizontalLayout(nodeLayout);
109
+ const parentElement = MindElement.getParent(element);
110
+ const includedElements = parentElement.children.slice(element.start, element.end + 1);
111
+ let abstractRectangle = getRectangleByElements(board, includedElements, true);
112
+ abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);
113
+ const startHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.start);
114
+ const endHandleRec = getAbstractHandleRectangle(abstractRectangle, isHorizontal, AbstractHandlePosition.end);
115
+ const pointRec = RectangleClient.toRectangleClient([point, point]);
116
+ if (RectangleClient.isIntersect(pointRec, startHandleRec))
117
+ return AbstractHandlePosition.start;
118
+ if (RectangleClient.isIntersect(pointRec, endHandleRec))
119
+ return AbstractHandlePosition.end;
120
+ return null;
121
+ };
122
+ export const getAbstractHandleRectangle = (rectangle, isHorizontal, position) => {
123
+ let result;
124
+ if (position === AbstractHandlePosition.start) {
125
+ const location = isHorizontal ? rectangle.y : rectangle.x;
126
+ result = getRectangleByResizingLocation(rectangle, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, AbstractHandlePosition.end, isHorizontal);
127
+ result = getRectangleByResizingLocation(result, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);
128
+ }
129
+ else {
130
+ const location = isHorizontal ? rectangle.y + rectangle.height : rectangle.x + rectangle.width;
131
+ result = getRectangleByResizingLocation(rectangle, location - ABSTRACT_HANDLE_MASK_WIDTH / 2, AbstractHandlePosition.start, isHorizontal);
132
+ result = getRectangleByResizingLocation(result, location + ABSTRACT_HANDLE_MASK_WIDTH / 2, position, isHorizontal);
133
+ }
134
+ return result;
135
+ };
136
+ export function findLocationLeftIndex(board, parentChildren, location, isHorizontal) {
137
+ const children = parentChildren.filter(child => {
138
+ return !AbstractNode.isAbstract(child);
139
+ });
140
+ const recArray = children.map(child => {
141
+ return getRectangleByElements(board, [child], false);
142
+ });
143
+ const firstRec = getRectangleByElements(board, [children[0]], true);
144
+ const fakeLeftRec = {
145
+ x: firstRec.x - firstRec.width,
146
+ y: firstRec.y - firstRec.height,
147
+ width: firstRec.width,
148
+ height: firstRec.height
149
+ };
150
+ const lastRec = getRectangleByElements(board, [children[children.length - 1]], true);
151
+ const fakeRightRec = {
152
+ x: lastRec.x + lastRec.width,
153
+ y: lastRec.y + lastRec.height,
154
+ width: lastRec.width,
155
+ height: lastRec.height
156
+ };
157
+ recArray.push(fakeRightRec);
158
+ recArray.unshift(fakeLeftRec);
159
+ for (let i = 0; i < recArray.length - 1; i++) {
160
+ const recXOrY = isHorizontal ? recArray[i].y : recArray[i].x;
161
+ const recWidthOrHeight = isHorizontal ? recArray[i].height : recArray[i].width;
162
+ if (location >= recXOrY + recWidthOrHeight / 2 &&
163
+ location <= recArray[i + 1][isHorizontal ? 'y' : 'x'] + recArray[i + 1][isHorizontal ? 'height' : 'width'] / 2) {
164
+ return i - 1;
165
+ }
166
+ }
167
+ return 0;
168
+ }
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvYWJzdHJhY3QvcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsZUFBZSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFpQyxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDMUMsaUJBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLGNBQXNDLEVBQ3RDLFlBQXFCLEVBQ3ZCLEVBQUU7SUFDQSxJQUFJLFlBQVksRUFBRTtRQUNkLElBQUksY0FBYyxLQUFLLHNCQUFzQixDQUFDLEtBQUssRUFBRTtZQUNqRCxPQUFPO2dCQUNILEdBQUcsaUJBQWlCO2dCQUNwQixDQUFDLEVBQUUsUUFBUTtnQkFDWCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxRQUFRO2FBQ3BFLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTztnQkFDSCxHQUFHLGlCQUFpQjtnQkFDcEIsTUFBTSxFQUFFLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pDLENBQUM7U0FDTDtLQUNKO1NBQU07UUFDSCxJQUFJLGNBQWMsS0FBSyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDakQsT0FBTztnQkFDSCxH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Z2xlQ2xpZW50LCBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiwgTWluZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTGF5b3V0Tm9kZSwgTWluZG1hcExheW91dFR5cGUsIGlzSG9yaXpvbnRhbExheW91dCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IEFCU1RSQUNUX0hBTkRMRV9NQVNLX1dJRFRILCBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNaW5kbWFwUXVlcmllcyB9IGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0Q29ycmVjdFN0YXJ0RW5kIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlQnlSZXNpemluZ0xvY2F0aW9uID0gKFxuICAgIGFic3RyYWN0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgbG9jYXRpb246IG51bWJlcixcbiAgICBoYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBpc0hvcml6b250YWw6IGJvb2xlYW5cbikgPT4ge1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgaWYgKGhhbmRsZVBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHk6IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodDogYWJzdHJhY3RSZWN0YW5nbGUuaGVpZ2h0ICsgYWJzdHJhY3RSZWN0YW5nbGUueSAtIGxvY2F0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxvY2F0aW9uIC0gYWJzdHJhY3RSZWN0YW5nbGUueVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChoYW5kbGVQb3NpdGlvbiA9PT0gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICB4OiBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aDogYWJzdHJhY3RSZWN0YW5nbGUud2lkdGggKyBhYnN0cmFjdFJlY3RhbmdsZS54IC0gbG9jYXRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBsb2NhdGlvbiAtIGFic3RyYWN0UmVjdGFuZ2xlLnhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYXRpb25TY29wZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBoYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBwYXJlbnRDaGlsZHJlbjogTWluZEVsZW1lbnRbXSxcbiAgICBlbGVtZW50OiBNaW5kRWxlbWVudCxcbiAgICBwYXJlbnQ6IExheW91dE5vZGUsXG4gICAgaXNIb3Jpem9udGFsOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBub2RlID0gKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkgYXMgdW5rbm93bikgYXMgTGF5b3V0Tm9kZTtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldENvcnJlY3RTdGFydEVuZChub2RlLm9yaWdpbiBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG5cbiAgICBjb25zdCBzdGFydE5vZGUgPSBwYXJlbnRDaGlsZHJlbltzdGFydF07XG4gICAgY29uc3QgZW5kTm9kZSA9IHBhcmVudENoaWxkcmVuW2VuZF07XG5cbiAgICBpZiAoaGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpIHtcbiAgICAgICAgY29uc3QgYWJzdHJhY3ROb2RlID0gcGFyZW50Q2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKSAmJiBjaGlsZC5lbmQgPCBlbGVtZW50LnN0YXJ0ISk7XG4gICAgICAgIGxldCBtaW5Ob2RlO1xuXG4gICAgICAgIGlmIChhYnN0cmFjdE5vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFic3RyYWN0Tm9kZVxuICAgICAgICAgICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZW5kIH0gPSBnZXRDb3JyZWN0U3RhcnRFbmQobm9kZSBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuICAgICAgICAgICAgbWluTm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5Ob2RlID0gcGFyZW50Q2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5Ob2RlUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgW21pbk5vZGVdLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZW5kTm9kZVJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtlbmROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBlbmROb2RlUmVjdGFuZ2xlLnkgLSBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCxcbiAgICAgICAgICAgICAgICBtaW46IG1pbk5vZGVSZWN0YW5nbGUueSAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXg6IGVuZE5vZGVSZWN0YW5nbGUueCAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogbWluTm9kZVJlY3RhbmdsZS54IC0gQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhYnN0cmFjdE5vZGUgPSBwYXJlbnRDaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpICYmIGNoaWxkLnN0YXJ0ID4gZWxlbWVudC5lbmQhKTtcbiAgICAgICAgbGV0IG1heE5vZGU7XG5cbiAgICAgICAgaWYgKGFic3RyYWN0Tm9kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYWJzdHJhY3ROb2RlXG4gICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0Q29ycmVjdFN0YXJ0RW5kKG5vZGUgYXMgQWJzdHJhY3ROb2RlLCBwYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpWzBdO1xuICAgICAgICAgICAgbWF4Tm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4IC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpKTtcbiAgICAgICAgICAgIG1heE5vZGUgPSBwYXJlbnRDaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbbWF4Tm9kZV0sIHRydWUpO1xuICAgICAgICBjb25zdCBzdGFydE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbc3RhcnROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBtYXhOb2RlUmVjdGFuZ2xlLnkgKyBtYXhOb2RlUmVjdGFuZ2xlLmhlaWdodCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnkgKyBzdGFydE5vZGVSZWN0YW5nbGUuaGVpZ2h0ICsgQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1heDogbWF4Tm9kZVJlY3RhbmdsZS54ICsgbWF4Tm9kZVJlY3RhbmdsZS53aWR0aCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnggKyBzdGFydE5vZGVSZWN0YW5nbGUud2lkdGggKyBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRBYnN0cmFjdEhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGVsZW1lbnQpIGFzIE1pbmRtYXBMYXlvdXRUeXBlO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbExheW91dChub2RlTGF5b3V0KTtcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgY29uc3QgaW5jbHVkZWRFbGVtZW50cyA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW4uc2xpY2UoZWxlbWVudC5zdGFydCEsIGVsZW1lbnQuZW5kISArIDEpO1xuICAgIGxldCBhYnN0cmFjdFJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGluY2x1ZGVkRWxlbWVudHMsIHRydWUpO1xuICAgIGFic3RyYWN0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUoYWJzdHJhY3RSZWN0YW5nbGUsIC1BQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCk7XG5cbiAgICBjb25zdCBzdGFydEhhbmRsZVJlYyA9IGdldEFic3RyYWN0SGFuZGxlUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCBpc0hvcml6b250YWwsIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpO1xuICAgIGNvbnN0IGVuZEhhbmRsZVJlYyA9IGdldEFic3RyYWN0SGFuZGxlUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCBpc0hvcml6b250YWwsIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uZW5kKTtcblxuICAgIGNvbnN0IHBvaW50UmVjID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKTtcbiAgICBpZiAoUmVjdGFuZ2xlQ2xpZW50LmlzSW50ZXJzZWN0KHBvaW50UmVjLCBzdGFydEhhbmRsZVJlYykpIHJldHVybiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0O1xuICAgIGlmIChSZWN0YW5nbGVDbGllbnQuaXNJbnRlcnNlY3QocG9pbnRSZWMsIGVuZEhhbmRsZVJlYykpIHJldHVybiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLmVuZDtcbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBYnN0cmFjdEhhbmRsZVJlY3RhbmdsZSA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgaXNIb3Jpem9udGFsOiBib29sZWFuLCBwb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNIb3Jpem9udGFsID8gcmVjdGFuZ2xlLnkgOiByZWN0YW5nbGUueDtcblxuICAgICAgICByZXN1bHQgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24oXG4gICAgICAgICAgICByZWN0YW5nbGUsXG4gICAgICAgICAgICBsb2NhdGlvbiArIEFCU1RSQUNUX0hBTkRMRV9NQVNLX1dJRFRIIC8gMixcbiAgICAgICAgICAgIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uZW5kLFxuICAgICAgICAgICAgaXNIb3Jpem9udGFsXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihyZXN1bHQsIGxvY2F0aW9uIC0gQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLCBwb3NpdGlvbiwgaXNIb3Jpem9udGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGlzSG9yaXpvbnRhbCA/IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCA6IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoO1xuXG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihcbiAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgIGxvY2F0aW9uIC0gQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLFxuICAgICAgICAgICAgQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCxcbiAgICAgICAgICAgIGlzSG9yaXpvbnRhbFxuICAgICAgICApO1xuICAgICAgICByZXN1bHQgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24ocmVzdWx0LCBsb2NhdGlvbiArIEFCU1RSQUNUX0hBTkRMRV9NQVNLX1dJRFRIIC8gMiwgcG9zaXRpb24sIGlzSG9yaXpvbnRhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZExvY2F0aW9uTGVmdEluZGV4KGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRDaGlsZHJlbjogTWluZEVsZW1lbnRbXSwgbG9jYXRpb246IG51bWJlciwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4ge1xuICAgICAgICByZXR1cm4gIUFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWNBcnJheSA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbY2hpbGRdLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaXJzdFJlYyA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtjaGlsZHJlblswXV0sIHRydWUpO1xuICAgIGNvbnN0IGZha2VMZWZ0UmVjID0ge1xuICAgICAgICB4OiBmaXJzdFJlYy54IC0gZmlyc3RSZWMud2lkdGgsXG4gICAgICAgIHk6IGZpcnN0UmVjLnkgLSBmaXJzdFJlYy5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBmaXJzdFJlYy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBmaXJzdFJlYy5oZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IGxhc3RSZWMgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV1dLCB0cnVlKTtcbiAgICBjb25zdCBmYWtlUmlnaHRSZWMgPSB7XG4gICAgICAgIHg6IGxhc3RSZWMueCArIGxhc3RSZWMud2lkdGgsXG4gICAgICAgIHk6IGxhc3RSZWMueSArIGxhc3RSZWMuaGVpZ2h0LFxuICAgICAgICB3aWR0aDogbGFzdFJlYy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBsYXN0UmVjLmhlaWdodFxuICAgIH07XG5cbiAgICByZWNBcnJheS5wdXNoKGZha2VSaWdodFJlYyk7XG4gICAgcmVjQXJyYXkudW5zaGlmdChmYWtlTGVmdFJlYyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY0FycmF5Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCByZWNYT3JZID0gaXNIb3Jpem9udGFsID8gcmVjQXJyYXlbaV0ueSA6IHJlY0FycmF5W2ldLng7XG4gICAgICAgIGNvbnN0IHJlY1dpZHRoT3JIZWlnaHQgPSBpc0hvcml6b250YWwgPyByZWNBcnJheVtpXS5oZWlnaHQgOiByZWNBcnJheVtpXS53aWR0aDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhdGlvbiA+PSByZWNYT3JZICsgcmVjV2lkdGhPckhlaWdodCAvIDIgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uIDw9IHJlY0FycmF5W2kgKyAxXVtpc0hvcml6b250YWwgPyAneScgOiAneCddICsgcmVjQXJyYXlbaSArIDFdW2lzSG9yaXpvbnRhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJ10gLyAyXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGkgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuIl19
@@ -0,0 +1,71 @@
1
+ import { CLIP_BOARD_FORMAT_KEY, getRectangleByElements, getSelectedElements, PlaitBoard, Transforms } from '@plait/core';
2
+ import { copyNewNode, extractNodesText, transformNodeToRoot, transformRootToNode, createMindElement } from '.';
3
+ import { getRectangleByNode } from './graph';
4
+ import { MINDMAP_ELEMENT_TO_COMPONENT } from './weak-maps';
5
+ export const buildClipboardData = (board, selectedElements) => {
6
+ let result = [];
7
+ const selectedMindmapNodes = Array.from(selectedElements, node => {
8
+ return MINDMAP_ELEMENT_TO_COMPONENT.get(node)?.node;
9
+ });
10
+ const nodesRectangle = getRectangleByElements(board, selectedElements, true);
11
+ selectedElements.forEach((node, index) => {
12
+ const nodeRectangle = getRectangleByNode(selectedMindmapNodes[index]);
13
+ result.push({
14
+ ...node,
15
+ points: [[nodeRectangle.x - nodesRectangle.x, nodeRectangle.y - nodesRectangle.y]]
16
+ });
17
+ });
18
+ return result;
19
+ };
20
+ export const setClipboardData = (data, elements) => {
21
+ const stringObj = JSON.stringify(elements);
22
+ const encoded = window.btoa(encodeURIComponent(stringObj));
23
+ const text = elements.reduce((string, currentNode) => {
24
+ return string + extractNodesText(currentNode);
25
+ }, '');
26
+ data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
27
+ data?.setData(`text/plain`, text);
28
+ };
29
+ export const getDataFromClipboard = (data) => {
30
+ const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
31
+ let nodesData = [];
32
+ if (encoded) {
33
+ const decoded = decodeURIComponent(window.atob(encoded));
34
+ nodesData = JSON.parse(decoded);
35
+ }
36
+ return nodesData;
37
+ };
38
+ export const insertClipboardData = (board, elements, targetPoint) => {
39
+ let newElement, path;
40
+ const selectedElements = getSelectedElements(board);
41
+ let newELements = [];
42
+ elements.forEach((item, index) => {
43
+ newElement = copyNewNode(item);
44
+ if (selectedElements.length === 1) {
45
+ if (item.isRoot) {
46
+ newElement = transformRootToNode(board, newElement);
47
+ }
48
+ const selectedElementPath = PlaitBoard.findPath(board, selectedElements[0]);
49
+ path = selectedElementPath.concat((selectedElements[0].children || []).length + index);
50
+ }
51
+ else {
52
+ const point = [targetPoint[0] + item.points[0][0], targetPoint[1] + item.points[0][1]];
53
+ newElement.points = [point];
54
+ if (!item.isRoot) {
55
+ newElement = transformNodeToRoot(board, newElement);
56
+ }
57
+ path = [board.children.length];
58
+ }
59
+ newELements.push(newElement);
60
+ Transforms.insertNode(board, newElement, path);
61
+ return;
62
+ });
63
+ Transforms.setSelectionWithTemporaryElements(board, newELements);
64
+ };
65
+ export const insertClipboardText = (board, parentElement, text, width, height) => {
66
+ const newElement = createMindElement(text, width, height, {});
67
+ const path = PlaitBoard.findPath(board, parentElement).concat((parentElement.children || []).length);
68
+ Transforms.insertNode(board, newElement, path);
69
+ return;
70
+ };
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUduQixVQUFVLEVBR1YsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxXQUFXLEVBQXFCLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ2xJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJM0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLGdCQUErQixFQUFFLEVBQUU7SUFDckYsSUFBSSxNQUFNLEdBQWtCLEVBQUUsQ0FBQztJQUMvQixNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDN0QsT0FBUSw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUF1QixFQUFFLElBQUksQ0FBQztJQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM3RSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDckMsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1IsR0FBRyxJQUFJO1lBQ1AsTUFBTSxFQUFFLENB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QVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDZCxVQUFVLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZEO1lBRUQsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsQztRQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQy9DLE9BQU87SUFDWCxDQUFDLENBQUMsQ0FBQztJQUNILFVBQVUsQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDckUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLGFBQTJCLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUMvSCxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JHLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxPQUFPO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDTElQX0JPQVJEX0ZPUk1BVF9LRVksXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIGlkQ3JlYXRvcixcbiAgICBQYXRoLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNvcHlOZXdOb2RlLCBpbnNlcnRNaW5kRWxlbWVudCwgZXh0cmFjdE5vZGVzVGV4dCwgdHJhbnNmb3JtTm9kZVRvUm9vdCwgdHJhbnNmb3JtUm9vdFRvTm9kZSwgY3JlYXRlTWluZEVsZW1lbnQgfSBmcm9tICcuJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4vZ3JhcGgnO1xuaW1wb3J0IHsgTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVEVYVF9ERUZBVUxUX0hFSUdIVCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5cbmV4cG9ydCBjb25zdCBidWlsZENsaXBib2FyZERhdGEgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNaW5kRWxlbWVudFtdID0gW107XG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5kbWFwTm9kZXMgPSBBcnJheS5mcm9tKHNlbGVjdGVkRWxlbWVudHMsIG5vZGUgPT4ge1xuICAgICAgICByZXR1cm4gKE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KG5vZGUpIGFzIE1pbmROb2RlQ29tcG9uZW50KT8ubm9kZTtcbiAgICB9KTtcbiAgICBjb25zdCBub2Rlc1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMsIHRydWUpO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5Tm9kZShzZWxlY3RlZE1pbmRtYXBOb2Rlc1tpbmRleF0pO1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAuLi5ub2RlLFxuICAgICAgICAgICAgcG9pbnRzOiBbW25vZGVSZWN0YW5nbGUueCAtIG5vZGVzUmVjdGFuZ2xlLngsIG5vZGVSZWN0YW5nbGUueSAtIG5vZGVzUmVjdGFuZ2xlLnldXVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCBlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHN0cmluZ09iaiA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnRzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ09iaikpO1xuICAgIGNvbnN0IHRleHQgPSBlbGVtZW50cy5yZWR1Y2UoKHN0cmluZywgY3VycmVudE5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0cmluZyArIGV4dHJhY3ROb2Rlc1RleHQoY3VycmVudE5vZGUpO1xuICAgIH0sICcnKTtcbiAgICBkYXRhPy5zZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfRk9STUFUX0tFWX1gLCBlbmNvZGVkKTtcbiAgICBkYXRhPy5zZXREYXRhKGB0ZXh0L3BsYWluYCwgdGV4dCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YUZyb21DbGlwYm9hcmQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWQgPSBkYXRhPy5nZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfRk9STUFUX0tFWX1gKTtcbiAgICBsZXQgbm9kZXNEYXRhOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGlmIChlbmNvZGVkKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoZW5jb2RlZCkpO1xuICAgICAgICBub2Rlc0RhdGEgPSBKU09OLnBhcnNlKGRlY29kZWQpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNEYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENsaXBib2FyZERhdGEgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgdGFyZ2V0UG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgbGV0IG5ld0VsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXRoOiBQYXRoO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBsZXQgbmV3RUxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChpdGVtOiBQbGFpdEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbmV3RWxlbWVudCA9IGNvcHlOZXdOb2RlKGl0ZW0gYXMgTWluZEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaXNSb290KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRyYW5zZm9ybVJvb3RUb05vZGUoYm9hcmQsIG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50UGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHNbMF0pO1xuICAgICAgICAgICAgcGF0aCA9IHNlbGVjdGVkRWxlbWVudFBhdGguY29uY2F0KChzZWxlY3RlZEVsZW1lbnRzWzBdLmNoaWxkcmVuIHx8IFtdKS5sZW5ndGggKyBpbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbdGFyZ2V0UG9pbnRbMF0gKyBpdGVtLnBvaW50cyFbMF1bMF0sIHRhcmdldFBvaW50WzFdICsgaXRlbS5wb2ludHMhWzBdWzFdXTtcbiAgICAgICAgICAgIG5ld0VsZW1lbnQucG9pbnRzID0gW3BvaW50XTtcbiAgICAgICAgICAgIGlmICghaXRlbS5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50ID0gdHJhbnNmb3JtTm9kZVRvUm9vdChib2FyZCwgbmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGggPSBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXTtcbiAgICAgICAgfVxuICAgICAgICBuZXdFTGVtZW50cy5wdXNoKG5ld0VsZW1lbnQpO1xuICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgICAgICByZXR1cm47XG4gICAgfSk7XG4gICAgVHJhbnNmb3Jtcy5zZXRTZWxlY3Rpb25XaXRoVGVtcG9yYXJ5RWxlbWVudHMoYm9hcmQsIG5ld0VMZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDbGlwYm9hcmRUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRFbGVtZW50OiBQbGFpdEVsZW1lbnQsIHRleHQ6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gY3JlYXRlTWluZEVsZW1lbnQodGV4dCwgd2lkdGgsIGhlaWdodCwge30pO1xuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBwYXJlbnRFbGVtZW50KS5jb25jYXQoKHBhcmVudEVsZW1lbnQuY2hpbGRyZW4gfHwgW10pLmxlbmd0aCk7XG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICByZXR1cm47XG59O1xuIl19
@@ -0,0 +1,41 @@
1
+ import { COLORS, ROOT_NODE_STROKE } from '../constants';
2
+ import { findUpElement } from './mindmap';
3
+ export const getStrokeByMindmapElement = (element) => {
4
+ let stroke = element.strokeColor;
5
+ if (stroke) {
6
+ return stroke;
7
+ }
8
+ const { root, branch } = findUpElement(element);
9
+ if (branch) {
10
+ const index = root.children.indexOf(branch);
11
+ const length = COLORS.length;
12
+ const remainder = index % length;
13
+ return COLORS[remainder];
14
+ }
15
+ else {
16
+ return ROOT_NODE_STROKE;
17
+ }
18
+ };
19
+ export const getLinkLineColorByMindmapElement = (element) => {
20
+ let color = element.linkLineColor;
21
+ if (color) {
22
+ return color;
23
+ }
24
+ const { root, branch } = findUpElement(element);
25
+ if (branch) {
26
+ const index = root.children.indexOf(branch);
27
+ const length = COLORS.length;
28
+ const remainder = index % length;
29
+ return COLORS[remainder];
30
+ }
31
+ else {
32
+ throw new Error('root element should not have link line');
33
+ }
34
+ };
35
+ export const getRootLinkLineColorByMindmapElement = (root) => {
36
+ const index = root.children.length;
37
+ const length = COLORS.length;
38
+ const remainder = index % length;
39
+ return COLORS[remainder];
40
+ };
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY29sb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUM5RCxJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQ2pDLElBQUksTUFBTSxFQUFFO1FBQ1IsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxJQUFJLE1BQU0sRUFBRTtRQUNSLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUM1QjtTQUFNO1FBQ0gsT0FBTyxnQkFBZ0IsQ0FBQztLQUMzQjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ3JFLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7SUFDbEMsSUFBSSxLQUFLLEVBQUU7UUFDUCxPQUFPLEtBQUssQ0FBQztLQUNoQjtJQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELElBQUksTUFBTSxFQUFFO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzVCO1NBQU07UUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7S0FDN0Q7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRTtJQUN0RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzdCLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDakMsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09MT1JTLCBST09UX05PREVfU1RST0tFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBmaW5kVXBFbGVtZW50IH0gZnJvbSAnLi9taW5kbWFwJztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZUJ5TWluZG1hcEVsZW1lbnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBsZXQgc3Ryb2tlID0gZWxlbWVudC5zdHJva2VDb2xvcjtcbiAgICBpZiAoc3Ryb2tlKSB7XG4gICAgICAgIHJldHVybiBzdHJva2U7XG4gICAgfVxuICAgIGNvbnN0IHsgcm9vdCwgYnJhbmNoIH0gPSBmaW5kVXBFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmIChicmFuY2gpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSByb290LmNoaWxkcmVuLmluZGV4T2YoYnJhbmNoKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gQ09MT1JTLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gaW5kZXggJSBsZW5ndGg7XG4gICAgICAgIHJldHVybiBDT0xPUlNbcmVtYWluZGVyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUk9PVF9OT0RFX1NUUk9LRTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGlua0xpbmVDb2xvckJ5TWluZG1hcEVsZW1lbnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBsZXQgY29sb3IgPSBlbGVtZW50LmxpbmtMaW5lQ29sb3I7XG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIHJldHVybiBjb2xvcjtcbiAgICB9XG4gICAgY29uc3QgeyByb290LCBicmFuY2ggfSA9IGZpbmRVcEVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKGJyYW5jaCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHJvb3QuY2hpbGRyZW4uaW5kZXhPZihicmFuY2gpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBDT0xPUlMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSBpbmRleCAlIGxlbmd0aDtcbiAgICAgICAgcmV0dXJuIENPTE9SU1tyZW1haW5kZXJdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdCBlbGVtZW50IHNob3VsZCBub3QgaGF2ZSBsaW5rIGxpbmUnKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um9vdExpbmtMaW5lQ29sb3JCeU1pbmRtYXBFbGVtZW50ID0gKHJvb3Q6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSByb290LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBjb25zdCBsZW5ndGggPSBDT0xPUlMubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IGluZGV4ICUgbGVuZ3RoO1xuICAgIHJldHVybiBDT0xPUlNbcmVtYWluZGVyXTtcbn07XG4iXX0=
@@ -0,0 +1,54 @@
1
+ import { isBottomLayout, isRightLayout, isLeftLayout, MindmapLayoutType, isStandardLayout, isTopLayout } from '@plait/layouts';
2
+ import { MindmapQueries } from '../queries';
3
+ export const directionCorrector = (node, detectResults) => {
4
+ if (!node.origin.isRoot) {
5
+ const parentlayout = MindmapQueries.getCorrectLayoutByElement(node?.parent.origin);
6
+ if (isStandardLayout(parentlayout)) {
7
+ const idx = node.parent.children.findIndex(x => x === node);
8
+ const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);
9
+ return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);
10
+ }
11
+ if (isLeftLayout(parentlayout)) {
12
+ return getAllowedDirection(detectResults, ['right']);
13
+ }
14
+ if (isRightLayout(parentlayout)) {
15
+ return getAllowedDirection(detectResults, ['left']);
16
+ }
17
+ if (parentlayout === MindmapLayoutType.upward) {
18
+ return getAllowedDirection(detectResults, ['bottom']);
19
+ }
20
+ if (parentlayout === MindmapLayoutType.downward) {
21
+ return getAllowedDirection(detectResults, ['top']);
22
+ }
23
+ }
24
+ else {
25
+ const layout = MindmapQueries.getCorrectLayoutByElement(node?.origin);
26
+ if (isStandardLayout(layout)) {
27
+ return getAllowedDirection(detectResults, ['top', 'bottom']);
28
+ }
29
+ if (isTopLayout(layout)) {
30
+ return getAllowedDirection(detectResults, ['left', 'right', 'bottom']);
31
+ }
32
+ if (isBottomLayout(layout)) {
33
+ return getAllowedDirection(detectResults, ['left', 'right', 'top']);
34
+ }
35
+ if (layout === MindmapLayoutType.left) {
36
+ return getAllowedDirection(detectResults, ['right', 'top', 'bottom']);
37
+ }
38
+ if (layout === MindmapLayoutType.right) {
39
+ return getAllowedDirection(detectResults, ['left', 'top', 'bottom']);
40
+ }
41
+ }
42
+ return null;
43
+ };
44
+ export const getAllowedDirection = (detectResults, illegalDirections) => {
45
+ const directions = detectResults;
46
+ illegalDirections.forEach(item => {
47
+ const bottomDirectionIndex = directions.findIndex(direction => direction === item);
48
+ if (bottomDirectionIndex !== -1) {
49
+ directions.splice(bottomDirectionIndex, 1);
50
+ }
51
+ });
52
+ return directions.length ? directions : null;
53
+ };
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLWNvcnJlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RpcmVjdGlvbi1jb3JyZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9ILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxJQUFpQixFQUFFLGFBQTZCLEVBQXlCLEVBQUU7SUFDMUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQXFCLENBQUMsQ0FBQztRQUNsRyxJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUVELElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUVELElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksWUFBWSxLQUFLLGlCQUFpQixDQUFDLE1BQU0sRUFBRTtZQUMzQyxPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDekQ7UUFFRCxJQUFJLFlBQVksS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7WUFDN0MsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ3REO0tBQ0o7U0FBTTtRQUNILE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsTUFBcUIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7WUFDbkMsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxJQUFJLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7WUFDcEMsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDeEU7S0FDSjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsYUFBNkIsRUFBRSxpQkFBaUMsRUFBeUIsRUFBRTtJQUMzSCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDakMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzdCLE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUNuRixJQUFJLG9CQUFvQixLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDOUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDakQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGV0ZWN0UmVzdWx0LCBNaW5kRWxlbWVudCwgTWluZG1hcE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzQm90dG9tTGF5b3V0LCBpc1JpZ2h0TGF5b3V0LCBpc0xlZnRMYXlvdXQsIE1pbmRtYXBMYXlvdXRUeXBlLCBpc1N0YW5kYXJkTGF5b3V0LCBpc1RvcExheW91dCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IE1pbmRtYXBRdWVyaWVzIH0gZnJvbSAnLi4vcXVlcmllcyc7XG5cbmV4cG9ydCBjb25zdCBkaXJlY3Rpb25Db3JyZWN0b3IgPSAobm9kZTogTWluZG1hcE5vZGUsIGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBpZiAoIW5vZGUub3JpZ2luLmlzUm9vdCkge1xuICAgICAgICBjb25zdCBwYXJlbnRsYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KG5vZGU/LnBhcmVudC5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChwYXJlbnRsYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4ID09PSBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGVmdCA9IGlkeCA+PSAobm9kZS5wYXJlbnQub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgW2lzTGVmdCA/ICdyaWdodCcgOiAnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQocGFyZW50bGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KHBhcmVudGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRsYXlvdXQgPT09IE1pbmRtYXBMYXlvdXRUeXBlLnVwd2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50bGF5b3V0ID09PSBNaW5kbWFwTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWyd0b3AnXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kbWFwUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KG5vZGU/Lm9yaWdpbiBhcyBNaW5kRWxlbWVudCk7XG4gICAgICAgIGlmIChpc1N0YW5kYXJkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsndG9wJywgJ2JvdHRvbSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RvcExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzQm90dG9tTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICdyaWdodCcsICd0b3AnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kbWFwTGF5b3V0VHlwZS5sZWZ0KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ3JpZ2h0JywgJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkRGlyZWN0aW9uID0gKGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdLCBpbGxlZ2FsRGlyZWN0aW9uczogRGV0ZWN0UmVzdWx0W10pOiBEZXRlY3RSZXN1bHRbXSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBkZXRlY3RSZXN1bHRzO1xuICAgIGlsbGVnYWxEaXJlY3Rpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdHRvbURpcmVjdGlvbkluZGV4ID0gZGlyZWN0aW9ucy5maW5kSW5kZXgoZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA9PT0gaXRlbSk7XG4gICAgICAgIGlmIChib3R0b21EaXJlY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbnMuc3BsaWNlKGJvdHRvbURpcmVjdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3Rpb25zLmxlbmd0aCA/IGRpcmVjdGlvbnMgOiBudWxsO1xufTtcbiJdfQ==
@@ -0,0 +1,56 @@
1
+ import { getRectangleByNode } from './graph';
2
+ /**
3
+ *
4
+ * @param targetNode
5
+ * @param centerPoint
6
+ * @returns DetectResult[] | null
7
+ */
8
+ export const directionDetector = (targetNode, centerPoint) => {
9
+ const { x, y, width, height } = getRectangleByNode(targetNode);
10
+ const yCenter = y + height / 2;
11
+ const xCenter = x + width / 2;
12
+ const top = targetNode.y;
13
+ const bottom = targetNode.y + targetNode.height;
14
+ const left = targetNode.x;
15
+ const right = targetNode.x + targetNode.width;
16
+ const direction = [];
17
+ // x 轴
18
+ if (centerPoint[1] > y && centerPoint[1] < y + height) {
19
+ if (centerPoint[0] > left && centerPoint[0] < xCenter) {
20
+ direction.push('left');
21
+ }
22
+ if (centerPoint[0] > xCenter && centerPoint[0] < right) {
23
+ direction.push('right');
24
+ }
25
+ // 重合区域,返回两个方向
26
+ if ((centerPoint[0] > x && centerPoint[0] < xCenter) || (centerPoint[0] > xCenter && centerPoint[0] < x + width)) {
27
+ if (centerPoint[1] < yCenter) {
28
+ direction.push('top');
29
+ }
30
+ else {
31
+ direction.push('bottom');
32
+ }
33
+ }
34
+ return direction.length ? direction : null;
35
+ }
36
+ // y 轴
37
+ if (centerPoint[0] > x && centerPoint[0] < x + width) {
38
+ if (centerPoint[1] > top && centerPoint[1] < yCenter) {
39
+ direction.push('top');
40
+ }
41
+ if (centerPoint[1] > yCenter && centerPoint[1] < bottom) {
42
+ direction.push('bottom');
43
+ }
44
+ if ((centerPoint[1] > y && centerPoint[1] < y + height) || (centerPoint[1] > yCenter && centerPoint[1] < y + height)) {
45
+ if (centerPoint[0] < xCenter) {
46
+ direction.push('left');
47
+ }
48
+ else {
49
+ direction.push('right');
50
+ }
51
+ }
52
+ return direction.length ? direction : null;
53
+ }
54
+ return null;
55
+ };
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLWRldGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvZGlyZWN0aW9uLWRldGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU3Qzs7Ozs7R0FLRztBQUVILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsVUFBdUIsRUFBRSxXQUFrQixFQUF5QixFQUFFO0lBQ3BHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMvQixNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUU5QixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztJQUNoRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUM5QyxNQUFNLFNBQVMsR0FBbUIsRUFBRSxDQUFDO0lBRXJDLE1BQU07SUFDTixJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUU7UUFDbkQsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUU7WUFDbkQsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMxQjtRQUNELElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFO1lBQ3BELFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDM0I7UUFDRCxjQUFjO1FBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFO1lBQzlHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtnQkFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QjtpQkFBTTtnQkFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzVCO1NBQ0o7UUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0tBQzlDO0lBRUQsTUFBTTtJQUNOLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssRUFBRTtRQUNsRCxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtZQUNsRCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUU7WUFDckQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM1QjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUU7WUFDbEgsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO2dCQUMxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0I7U0FDSjtRQUNELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDOUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IERldGVjdFJlc3VsdCwgTWluZG1hcE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4vZ3JhcGgnO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0Tm9kZVxuICogQHBhcmFtIGNlbnRlclBvaW50XG4gKiBAcmV0dXJucyBEZXRlY3RSZXN1bHRbXSB8IG51bGxcbiAqL1xuXG5leHBvcnQgY29uc3QgZGlyZWN0aW9uRGV0ZWN0b3IgPSAodGFyZ2V0Tm9kZTogTWluZG1hcE5vZGUsIGNlbnRlclBvaW50OiBQb2ludCk6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGFyZ2V0Tm9kZSk7XG4gICAgY29uc3QgeUNlbnRlciA9IHkgKyBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IHhDZW50ZXIgPSB4ICsgd2lkdGggLyAyO1xuXG4gICAgY29uc3QgdG9wID0gdGFyZ2V0Tm9kZS55O1xuICAgIGNvbnN0IGJvdHRvbSA9IHRhcmdldE5vZGUueSArIHRhcmdldE5vZGUuaGVpZ2h0O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXROb2RlLng7XG4gICAgY29uc3QgcmlnaHQgPSB0YXJnZXROb2RlLnggKyB0YXJnZXROb2RlLndpZHRoO1xuICAgIGNvbnN0IGRpcmVjdGlvbjogRGV0ZWN0UmVzdWx0W10gPSBbXTtcblxuICAgIC8vIHgg6L20XG4gICAgaWYgKGNlbnRlclBvaW50WzFdID4geSAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpIHtcbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdID4gbGVmdCAmJiBjZW50ZXJQb2ludFswXSA8IHhDZW50ZXIpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdID4geENlbnRlciAmJiBjZW50ZXJQb2ludFswXSA8IHJpZ2h0KSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgncmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDph43lkIjljLrln5/vvIzov5Tlm57kuKTkuKrmlrnlkJFcbiAgICAgICAgaWYgKChjZW50ZXJQb2ludFswXSA+IHggJiYgY2VudGVyUG9pbnRbMF0gPCB4Q2VudGVyKSB8fCAoY2VudGVyUG9pbnRbMF0gPiB4Q2VudGVyICYmIGNlbnRlclBvaW50WzBdIDwgeCArIHdpZHRoKSkge1xuICAgICAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdIDwgeUNlbnRlcikge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCd0b3AnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2JvdHRvbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ubGVuZ3RoID8gZGlyZWN0aW9uIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyB5IOi9tFxuICAgIGlmIChjZW50ZXJQb2ludFswXSA+IHggJiYgY2VudGVyUG9pbnRbMF0gPCB4ICsgd2lkdGgpIHtcbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdID4gdG9wICYmIGNlbnRlclBvaW50WzFdIDwgeUNlbnRlcikge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3RvcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZW50ZXJQb2ludFsxXSA+IHlDZW50ZXIgJiYgY2VudGVyUG9pbnRbMV0gPCBib3R0b20pIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdib3R0b20nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGNlbnRlclBvaW50WzFdID4geSAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpIHx8IChjZW50ZXJQb2ludFsxXSA+IHlDZW50ZXIgJiYgY2VudGVyUG9pbnRbMV0gPCB5ICsgaGVpZ2h0KSkge1xuICAgICAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdIDwgeENlbnRlcikge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ubGVuZ3RoID8gZGlyZWN0aW9uIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG4iXX0=