@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,183 @@
1
+ import { addSelectedElement, getSelectedElements, hotkeys, IS_TEXT_EDITABLE, PlaitBoard, PlaitHistoryBoard, RectangleClient, removeSelectedElement, toPoint, transformPoint, Transforms, depthFirstRecursion } from '@plait/core';
2
+ import { getSizeByText } from '@plait/richtext';
3
+ import { MindElement, PlaitMind } from '../interfaces';
4
+ import { PlaitMindComponent } from '../mind.component';
5
+ import { MindNodeComponent } from '../node.component';
6
+ import { changeRightNodeCount, insertMindElement, deleteSelectedELements, filterChildElement, findParentElement, shouldChangeRightNodeCount } from '../utils';
7
+ import { getRectangleByNode, hitMindmapElement } from '../utils/graph';
8
+ import { isVirtualKey } from '../utils/is-virtual-key';
9
+ import { MINDMAP_ELEMENT_TO_COMPONENT } from '../utils/weak-maps';
10
+ import { withDnd } from './with-dnd';
11
+ import { buildClipboardData, getDataFromClipboard, insertClipboardData, insertClipboardText, setClipboardData } from '../utils/clipboard';
12
+ import { AbstractNode } from '@plait/layouts';
13
+ import { findNewChildNodePath, findNewSiblingNodePath } from '../utils/path';
14
+ import { enterNodeEditing } from '../utils/node';
15
+ import { withEmoji } from './emoji/with-mind-emoji';
16
+ import { TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants';
17
+ import { withAbstract } from './with-abstract';
18
+ export const withMind = (board) => {
19
+ const { drawElement, dblclick, keydown, insertFragment, setFragment, deleteFragment, isHitSelection, getRectangle, isMovable, isRecursion } = board;
20
+ board.drawElement = (context) => {
21
+ if (PlaitMind.isMind(context.element)) {
22
+ return PlaitMindComponent;
23
+ }
24
+ else if (MindElement.isMindElement(board, context.element)) {
25
+ return MindNodeComponent;
26
+ }
27
+ return drawElement(context);
28
+ };
29
+ board.getRectangle = element => {
30
+ if (MindElement.isMindElement(board, element)) {
31
+ return getRectangleByNode(MindElement.getNode(element));
32
+ }
33
+ return getRectangle(element);
34
+ };
35
+ board.isRecursion = element => {
36
+ if (MindElement.isMindElement(board, element) && element.isCollapsed) {
37
+ return false;
38
+ }
39
+ return isRecursion(element);
40
+ };
41
+ board.isHitSelection = (element, range) => {
42
+ if (MindElement.isMindElement(board, element) && board.selection) {
43
+ const client = getRectangleByNode(MindElement.getNode(element));
44
+ return RectangleClient.isIntersect(RectangleClient.toRectangleClient([range.anchor, range.focus]), client);
45
+ }
46
+ return isHitSelection(element, range);
47
+ };
48
+ board.isMovable = element => {
49
+ if (PlaitMind.isMind(element) && element.isRoot) {
50
+ return true;
51
+ }
52
+ return isMovable(element);
53
+ };
54
+ board.keydown = (event) => {
55
+ if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {
56
+ keydown(event);
57
+ return;
58
+ }
59
+ const selectedElements = getSelectedElements(board);
60
+ if (selectedElements.length) {
61
+ if (selectedElements.length === 1 &&
62
+ (event.key === 'Tab' ||
63
+ (event.key === 'Enter' && !selectedElements[0].isRoot && !AbstractNode.isAbstract(selectedElements[0])))) {
64
+ event.preventDefault();
65
+ const selectedElement = selectedElements[0];
66
+ removeSelectedElement(board, selectedElement);
67
+ const selectedElementPath = PlaitBoard.findPath(board, selectedElement);
68
+ if (event.key === 'Tab') {
69
+ if (selectedElement.isCollapsed) {
70
+ const newElement = { isCollapsed: false };
71
+ PlaitHistoryBoard.withoutSaving(board, () => {
72
+ Transforms.setNode(board, newElement, selectedElementPath);
73
+ });
74
+ }
75
+ insertMindElement(board, selectedElement, findNewChildNodePath(board, selectedElement));
76
+ }
77
+ else {
78
+ if (shouldChangeRightNodeCount(selectedElement)) {
79
+ changeRightNodeCount(board, selectedElementPath.slice(0, 1), 1);
80
+ }
81
+ insertMindElement(board, selectedElement, findNewSiblingNodePath(board, selectedElement));
82
+ }
83
+ return;
84
+ }
85
+ if (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event)) {
86
+ event.preventDefault();
87
+ deleteSelectedELements(board, selectedElements);
88
+ let lastNode = null;
89
+ const elementGroup = filterChildElement(selectedElements);
90
+ const selectNode = elementGroup[0];
91
+ const MindNodeComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(selectNode);
92
+ const nodeIndex = MindNodeComponent?.parent?.children.findIndex(item => item.origin.id === selectNode.id);
93
+ const isSameParent = elementGroup.every(element => {
94
+ return findParentElement(element) && findParentElement(elementGroup[0]) === findParentElement(element);
95
+ });
96
+ if (isSameParent) {
97
+ const childCount = MindNodeComponent.parent?.children.length - elementGroup.length;
98
+ if (childCount === 0) {
99
+ lastNode = MindNodeComponent?.parent;
100
+ }
101
+ else if (nodeIndex === 0) {
102
+ lastNode = MindNodeComponent?.parent.children[elementGroup.length];
103
+ }
104
+ else if (nodeIndex > 0) {
105
+ lastNode = MindNodeComponent?.parent.children[nodeIndex - 1];
106
+ }
107
+ }
108
+ if (lastNode) {
109
+ addSelectedElement(board, lastNode.origin);
110
+ }
111
+ return;
112
+ }
113
+ // auto enter edit status
114
+ if (!isVirtualKey(event)) {
115
+ event.preventDefault();
116
+ const selectedElement = selectedElements[0];
117
+ enterNodeEditing(selectedElement);
118
+ return;
119
+ }
120
+ }
121
+ if (board.selection && event.code === 'Space') {
122
+ if (selectedElements?.length) {
123
+ return;
124
+ }
125
+ }
126
+ keydown(event);
127
+ };
128
+ board.dblclick = (event) => {
129
+ if (board.options.readonly || IS_TEXT_EDITABLE.get(board)) {
130
+ dblclick(event);
131
+ return;
132
+ }
133
+ const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
134
+ board.children
135
+ .filter(value => PlaitMind.isMind(value))
136
+ .forEach(mindmap => {
137
+ depthFirstRecursion(mindmap, node => {
138
+ if (!PlaitBoard.hasBeenTextEditing(board) && hitMindmapElement(board, point, node)) {
139
+ enterNodeEditing(node);
140
+ }
141
+ });
142
+ });
143
+ if (PlaitBoard.hasBeenTextEditing(board)) {
144
+ return;
145
+ }
146
+ dblclick(event);
147
+ };
148
+ board.setFragment = (data) => {
149
+ const selectedElements = filterChildElement(getSelectedElements(board));
150
+ if (selectedElements.length) {
151
+ const elements = buildClipboardData(board, selectedElements);
152
+ setClipboardData(data, elements);
153
+ return;
154
+ }
155
+ setFragment(data);
156
+ };
157
+ board.insertFragment = (data, targetPoint) => {
158
+ if (board.options.readonly) {
159
+ insertFragment(data, targetPoint);
160
+ return;
161
+ }
162
+ const elements = getDataFromClipboard(data);
163
+ if (elements.length) {
164
+ insertClipboardData(board, elements, targetPoint || [0, 0]);
165
+ }
166
+ else {
167
+ const text = data?.getData(`text/plain`);
168
+ const { width, height } = getSizeByText(text, PlaitBoard.getHost(board).parentElement, TOPIC_DEFAULT_MAX_WORD_COUNT);
169
+ const selectedElements = getSelectedElements(board);
170
+ if (text && selectedElements.length === 1) {
171
+ insertClipboardText(board, selectedElements[0], text, width, height);
172
+ }
173
+ }
174
+ insertFragment(data, targetPoint);
175
+ };
176
+ board.deleteFragment = (data) => {
177
+ const selectedElements = getSelectedElements(board);
178
+ deleteSelectedELements(board, selectedElements);
179
+ deleteFragment(data);
180
+ };
181
+ return withEmoji(withAbstract(withDnd(board)));
182
+ };
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy93aXRoLW1pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsT0FBTyxFQUNQLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsaUJBQWlCLEVBSWpCLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsT0FBTyxFQUNQLGNBQWMsRUFDZCxVQUFVLEVBRVYsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDN0IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUksT0FBTyxFQUFFLFlBQVks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QWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQXlCLEVBQUUsRUFBRTtRQUNqRCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBa0IsQ0FBQztRQUNyRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxTQUFTLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBhZGRTZWxlY3RlZEVsZW1lbnQsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBob3RrZXlzLFxuICAgIElTX1RFWFRfRURJVEFCTEUsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEhpc3RvcnlCb2FyZCxcbiAgICBQbGFpdFBsdWdpbixcbiAgICBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0LFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICByZW1vdmVTZWxlY3RlZEVsZW1lbnQsXG4gICAgdG9Qb2ludCxcbiAgICB0cmFuc2Zvcm1Qb2ludCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIFJhbmdlLFxuICAgIGRlcHRoRmlyc3RSZWN1cnNpb25cbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0U2l6ZUJ5VGV4dCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kbWFwTm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQbGFpdE1pbmRDb21wb25lbnQgfSBmcm9tICcuLi9taW5kLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNaW5kTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgY2hhbmdlUmlnaHROb2RlQ291bnQsXG4gICAgaW5zZXJ0TWluZEVsZW1lbnQsXG4gICAgZGVsZXRlU2VsZWN0ZWRFTGVtZW50cyxcbiAgICBmaWx0ZXJDaGlsZEVsZW1lbnQsXG4gICAgZmluZFBhcmVudEVsZW1lbnQsXG4gICAgc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnRcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlLCBoaXRNaW5kbWFwRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL2dyYXBoJztcbmltcG9ydCB7IGlzVmlydHVhbEtleSB9IGZyb20gJy4uL3V0aWxzL2lzLXZpcnR1YWwta2V5JztcbmltcG9ydCB7IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQgfSBmcm9tICcuLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgd2l0aERuZCB9IGZyb20gJy4vd2l0aC1kbmQnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCBnZXREYXRhRnJvbUNsaXBib2FyZCwgaW5zZXJ0Q2xpcGJvYXJkRGF0YSwgaW5zZXJ0Q2xpcGJvYXJkVGV4dCwgc2V0Q2xpcGJvYXJkRGF0YSB9IGZyb20gJy4uL3V0aWxzL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBmaW5kTmV3Q2hpbGROb2RlUGF0aCwgZmluZE5ld1NpYmxpbmdOb2RlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGgnO1xuaW1wb3J0IHsgZW50ZXJOb2RlRWRpdGluZyB9IGZyb20gJy4uL3V0aWxzL25vZGUnO1xuaW1wb3J0IHsgd2l0aEVtb2ppIH0gZnJvbSAnLi9lbW9qaS93aXRoLW1pbmQtZW1vamknO1xuaW1wb3J0IHsgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyB3aXRoQWJzdHJhY3QgfSBmcm9tICcuL3dpdGgtYWJzdHJhY3QnO1xuXG5leHBvcnQgY29uc3Qgd2l0aE1pbmQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICAgIGRyYXdFbGVtZW50LFxuICAgICAgICBkYmxjbGljayxcbiAgICAgICAga2V5ZG93bixcbiAgICAgICAgaW5zZXJ0RnJhZ21lbnQsXG4gICAgICAgIHNldEZyYWdtZW50LFxuICAgICAgICBkZWxldGVGcmFnbWVudCxcbiAgICAgICAgaXNIaXRTZWxlY3Rpb24sXG4gICAgICAgIGdldFJlY3RhbmdsZSxcbiAgICAgICAgaXNNb3ZhYmxlLFxuICAgICAgICBpc1JlY3Vyc2lvblxuICAgIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIFBsYWl0TWluZENvbXBvbmVudDtcbiAgICAgICAgfSBlbHNlIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBjb250ZXh0LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdFbGVtZW50KGNvbnRleHQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWN0YW5nbGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlOb2RlKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmlzUmVjdXJzaW9uID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5pc01pbmRFbGVtZW50KGJvYXJkLCBlbGVtZW50KSAmJiBlbGVtZW50LmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUmVjdXJzaW9uKGVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc0hpdFNlbGVjdGlvbiA9IChlbGVtZW50LCByYW5nZTogUmFuZ2UpID0+IHtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpICYmIGJvYXJkLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0ludGVyc2VjdChSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3JhbmdlLmFuY2hvciwgcmFuZ2UuZm9jdXNdKSwgY2xpZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXRTZWxlY3Rpb24oZWxlbWVudCwgcmFuZ2UpO1xuICAgIH07XG5cbiAgICBib2FyZC5pc01vdmFibGUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCkgJiYgZWxlbWVudC5pc1Jvb3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc01vdmFibGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGJvYXJkLm9wdGlvbnMucmVhZG9ubHkgfHwgSVNfVEVYVF9FRElUQUJMRS5nZXQoYm9hcmQpKSB7XG4gICAgICAgICAgICBrZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSAnVGFiJyB8fFxuICAgICAgICAgICAgICAgICAgICAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmICFzZWxlY3RlZEVsZW1lbnRzWzBdLmlzUm9vdCAmJiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3Qoc2VsZWN0ZWRFbGVtZW50c1swXSkpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudChib2FyZCwgc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgc2VsZWN0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHsgaXNDb2xsYXBzZWQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEhpc3RvcnlCb2FyZC53aXRob3V0U2F2aW5nKGJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBzZWxlY3RlZEVsZW1lbnRQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQsIGZpbmROZXdDaGlsZE5vZGVQYXRoKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQoc2VsZWN0ZWRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlUmlnaHROb2RlQ291bnQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudFBhdGguc2xpY2UoMCwgMSksIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnQsIGZpbmROZXdTaWJsaW5nTm9kZVBhdGgoYm9hcmQsIHNlbGVjdGVkRWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRGVsZXRlRm9yd2FyZChldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGxhc3ROb2RlOiBNaW5kbWFwTm9kZSB8IGFueSA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudEdyb3VwID0gZmlsdGVyQ2hpbGRFbGVtZW50KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdE5vZGUgPSBlbGVtZW50R3JvdXBbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgTWluZE5vZGVDb21wb25lbnQgPSBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChzZWxlY3ROb2RlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlSW5kZXggPSBNaW5kTm9kZUNvbXBvbmVudD8ucGFyZW50Py5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLm9yaWdpbi5pZCA9PT0gc2VsZWN0Tm9kZS5pZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTYW1lUGFyZW50ID0gZWxlbWVudEdyb3VwLmV2ZXJ5KGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudCkgJiYgZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudEdyb3VwWzBdKSA9PT0gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU2FtZVBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZENvdW50ID0gTWluZE5vZGVDb21wb25lbnQhLnBhcmVudD8uY2hpbGRyZW4ubGVuZ3RoIC0gZWxlbWVudEdyb3VwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gTWluZE5vZGVDb21wb25lbnQ/LnBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3ROb2RlID0gTWluZE5vZGVDb21wb25lbnQ/LnBhcmVudC5jaGlsZHJlbltlbGVtZW50R3JvdXAubGVuZ3RoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlSW5kZXghID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE5vZGUgPSBNaW5kTm9kZUNvbXBvbmVudD8ucGFyZW50LmNoaWxkcmVuW25vZGVJbmRleCEgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGFzdE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBsYXN0Tm9kZS5vcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvIGVudGVyIGVkaXQgc3RhdHVzXG4gICAgICAgICAgICBpZiAoIWlzVmlydHVhbEtleShldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgICAgICAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhzZWxlY3RlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChib2FyZC5zZWxlY3Rpb24gJiYgZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtleWRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5kYmxjbGljayA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBpZiAoYm9hcmQub3B0aW9ucy5yZWFkb25seSB8fCBJU19URVhUX0VESVRBQkxFLmdldChib2FyZCkpIHtcbiAgICAgICAgICAgIGRibGNsaWNrKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgYm9hcmQuY2hpbGRyZW5cbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gUGxhaXRNaW5kLmlzTWluZCh2YWx1ZSkpXG4gICAgICAgICAgICAuZm9yRWFjaChtaW5kbWFwID0+IHtcbiAgICAgICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPE1pbmRFbGVtZW50PihtaW5kbWFwIGFzIE1pbmRFbGVtZW50LCBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkgJiYgaGl0TWluZG1hcEVsZW1lbnQoYm9hcmQsIHBvaW50LCBub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhub2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYmxjbGljayhldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnNldEZyYWdtZW50ID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGZpbHRlckNoaWxkRWxlbWVudChnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBNaW5kRWxlbWVudFtdKTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRDbGlwYm9hcmREYXRhKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIHNldENsaXBib2FyZERhdGEoZGF0YSwgZWxlbWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNldEZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICBib2FyZC5pbnNlcnRGcmFnbWVudCA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCB0YXJnZXRQb2ludD86IFBvaW50KSA9PiB7XG4gICAgICAgIGlmIChib2FyZC5vcHRpb25zLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICBpbnNlcnRGcmFnbWVudChkYXRhLCB0YXJnZXRQb2ludCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldERhdGFGcm9tQ2xpcGJvYXJkKGRhdGEpO1xuICAgICAgICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpbnNlcnRDbGlwYm9hcmREYXRhKGJvYXJkLCBlbGVtZW50cywgdGFyZ2V0UG9pbnQgfHwgWzAsIDBdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBkYXRhPy5nZXREYXRhKGB0ZXh0L3BsYWluYCkgYXMgc3RyaW5nO1xuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKS5wYXJlbnRFbGVtZW50IGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgICAgIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgICAgICBpZiAodGV4dCAmJiBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZFRleHQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHNbMF0sIHRleHQsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc2VydEZyYWdtZW50KGRhdGEsIHRhcmdldFBvaW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZGVsZXRlRnJhZ21lbnQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICAgICAgZGVsZXRlU2VsZWN0ZWRFTGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgIGRlbGV0ZUZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aEVtb2ppKHdpdGhBYnN0cmFjdCh3aXRoRG5kKGJvYXJkKSkpO1xufTtcbiJdfQ==
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Public API Surface of mind
3
+ */
4
+ export * from './mind.component';
5
+ export * from './node.component';
6
+ export * from './mind.module';
7
+ export * from './utils';
8
+ export * from './interfaces';
9
+ export * from './plugins/with-mind';
10
+ export * from './constants';
11
+ export * from './queries/index';
12
+ export * from './transforms/index';
13
+ export * from './plugins/emoji';
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbWluZFxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbWluZC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL21pbmQubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcGx1Z2lucy93aXRoLW1pbmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyaWVzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3Jtcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvZW1vamknO1xuIl19
@@ -0,0 +1,29 @@
1
+ import { findParentElement, getAvailableSubLayoutsByLayoutDirections, getBranchDirectionsByLayouts, MINDMAP_ELEMENT_TO_COMPONENT } from '../utils';
2
+ import { MindmapLayoutType } from '@plait/layouts';
3
+ import { getBranchMindmapLayouts } from './get-branch-mindmap-layouts-by-element';
4
+ /**
5
+ * get available sub layouts by element
6
+ * @param element
7
+ * @returns MindmapLayoutType[]
8
+ */
9
+ export const getAvailableSubLayoutsByElement = (element) => {
10
+ const parentElement = findParentElement(element);
11
+ if (parentElement) {
12
+ const branchLayouts = getBranchMindmapLayouts(parentElement);
13
+ if (branchLayouts[0] === MindmapLayoutType.standard) {
14
+ const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);
15
+ if (component) {
16
+ branchLayouts[0] = component.node.left ? MindmapLayoutType.left : MindmapLayoutType.right;
17
+ }
18
+ }
19
+ const currentLayoutDirections = getBranchDirectionsByLayouts(branchLayouts);
20
+ let availableSubLayouts = getAvailableSubLayoutsByLayoutDirections(currentLayoutDirections);
21
+ const parentLayout = [branchLayouts[branchLayouts.length - 1]];
22
+ const parentDirections = getBranchDirectionsByLayouts(parentLayout);
23
+ const parentAvailableSubLayouts = getAvailableSubLayoutsByLayoutDirections(parentDirections);
24
+ availableSubLayouts = availableSubLayouts.filter(layout => parentAvailableSubLayouts.some(parentAvailableSubLayout => parentAvailableSubLayout === layout));
25
+ return availableSubLayouts;
26
+ }
27
+ return undefined;
28
+ };
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWF2YWlsYWJsZS1zdWJsYXlvdXRzLWJ5LWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9xdWVyaWVzL2dldC1hdmFpbGFibGUtc3VibGF5b3V0cy1ieS1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsd0NBQXdDLEVBQ3hDLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDL0IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksYUFBYSxFQUFFO1FBQ2YsTUFBTSxhQUFhLEdBQUcsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0QsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssaUJBQWlCLENBQUMsUUFBUSxFQUFFO1lBQ2pELE1BQU0sU0FBUyxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RCxJQUFJLFNBQVMsRUFBRTtnQkFDWCxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO2FBQzdGO1NBQ0o7UUFDRCxNQUFNLHVCQUF1QixHQUFHLDRCQUE0QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLElBQUksbUJBQW1CLEdBQUcsd0NBQXdDLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM1RixNQUFNLFlBQVksR0FBRyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyw0QkFBNEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRSxNQUFNLHlCQUF5QixHQUFHLHdDQUF3QyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFN0YsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RELHlCQUF5QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsd0JBQXdCLEtBQUssTUFBTSxDQUFDLENBQ2xHLENBQUM7UUFDRixPQUFPLG1CQUFtQixDQUFDO0tBQzlCO0lBQ0QsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gICAgZmluZFBhcmVudEVsZW1lbnQsXG4gICAgZ2V0QXZhaWxhYmxlU3ViTGF5b3V0c0J5TGF5b3V0RGlyZWN0aW9ucyxcbiAgICBnZXRCcmFuY2hEaXJlY3Rpb25zQnlMYXlvdXRzLFxuICAgIE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlRcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTWluZG1hcExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBnZXRCcmFuY2hNaW5kbWFwTGF5b3V0cyB9IGZyb20gJy4vZ2V0LWJyYW5jaC1taW5kbWFwLWxheW91dHMtYnktZWxlbWVudCc7XG5cbi8qKlxuICogIGdldCBhdmFpbGFibGUgc3ViIGxheW91dHMgYnkgZWxlbWVudFxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEByZXR1cm5zIE1pbmRtYXBMYXlvdXRUeXBlW11cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEF2YWlsYWJsZVN1YkxheW91dHNCeUVsZW1lbnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgYnJhbmNoTGF5b3V0cyA9IGdldEJyYW5jaE1pbmRtYXBMYXlvdXRzKHBhcmVudEVsZW1lbnQpO1xuICAgICAgICBpZiAoYnJhbmNoTGF5b3V0c1swXSA9PT0gTWluZG1hcExheW91dFR5cGUuc3RhbmRhcmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KGVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIGJyYW5jaExheW91dHNbMF0gPSBjb21wb25lbnQubm9kZS5sZWZ0ID8gTWluZG1hcExheW91dFR5cGUubGVmdCA6IE1pbmRtYXBMYXlvdXRUeXBlLnJpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXREaXJlY3Rpb25zID0gZ2V0QnJhbmNoRGlyZWN0aW9uc0J5TGF5b3V0cyhicmFuY2hMYXlvdXRzKTtcbiAgICAgICAgbGV0IGF2YWlsYWJsZVN1YkxheW91dHMgPSBnZXRBdmFpbGFibGVTdWJMYXlvdXRzQnlMYXlvdXREaXJlY3Rpb25zKGN1cnJlbnRMYXlvdXREaXJlY3Rpb25zKTtcbiAgICAgICAgY29uc3QgcGFyZW50TGF5b3V0ID0gW2JyYW5jaExheW91dHNbYnJhbmNoTGF5b3V0cy5sZW5ndGggLSAxXV07XG4gICAgICAgIGNvbnN0IHBhcmVudERpcmVjdGlvbnMgPSBnZXRCcmFuY2hEaXJlY3Rpb25zQnlMYXlvdXRzKHBhcmVudExheW91dCk7XG4gICAgICAgIGNvbnN0IHBhcmVudEF2YWlsYWJsZVN1YkxheW91dHMgPSBnZXRBdmFpbGFibGVTdWJMYXlvdXRzQnlMYXlvdXREaXJlY3Rpb25zKHBhcmVudERpcmVjdGlvbnMpO1xuXG4gICAgICAgIGF2YWlsYWJsZVN1YkxheW91dHMgPSBhdmFpbGFibGVTdWJMYXlvdXRzLmZpbHRlcihsYXlvdXQgPT5cbiAgICAgICAgICAgIHBhcmVudEF2YWlsYWJsZVN1YkxheW91dHMuc29tZShwYXJlbnRBdmFpbGFibGVTdWJMYXlvdXQgPT4gcGFyZW50QXZhaWxhYmxlU3ViTGF5b3V0ID09PSBsYXlvdXQpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBhdmFpbGFibGVTdWJMYXlvdXRzO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ import { findParentElement } from '../utils';
2
+ import { getCorrectLayoutByElement } from './get-correct-layout-by-element';
3
+ export const getBranchMindmapLayouts = (element) => {
4
+ const layouts = [];
5
+ if (element.layout) {
6
+ //getCorrectLayoutByElement含有递归操作,getBranchMindmapLayouts本身也有递归操作,有待优化
7
+ layouts.unshift(getCorrectLayoutByElement(element));
8
+ }
9
+ let parent = findParentElement(element);
10
+ while (parent) {
11
+ if (parent.layout) {
12
+ layouts.unshift(parent.layout);
13
+ }
14
+ parent = findParentElement(parent);
15
+ }
16
+ return layouts;
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWJyYW5jaC1taW5kbWFwLWxheW91dHMtYnktZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3F1ZXJpZXMvZ2V0LWJyYW5jaC1taW5kbWFwLWxheW91dHMtYnktZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUUsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7UUFDaEIsc0VBQXNFO1FBQ3RFLE9BQU8sQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUN2RDtJQUNELElBQUksTUFBTSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sTUFBTSxFQUFFO1FBQ1gsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEM7UUFDRCxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDdEM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZmluZFBhcmVudEVsZW1lbnQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBNaW5kbWFwTGF5b3V0VHlwZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQgfSBmcm9tICcuL2dldC1jb3JyZWN0LWxheW91dC1ieS1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IGdldEJyYW5jaE1pbmRtYXBMYXlvdXRzID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbGF5b3V0czogTWluZG1hcExheW91dFR5cGVbXSA9IFtdO1xuICAgIGlmIChlbGVtZW50LmxheW91dCkge1xuICAgICAgICAvL2dldENvcnJlY3RMYXlvdXRCeUVsZW1lbnTlkKvmnInpgJLlvZLmk43kvZzvvIxnZXRCcmFuY2hNaW5kbWFwTGF5b3V0c+acrOi6q+S5n+aciemAkuW9kuaTjeS9nO+8jOacieW+heS8mOWMllxuICAgICAgICBsYXlvdXRzLnVuc2hpZnQoZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChlbGVtZW50KSk7XG4gICAgfVxuICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50KTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQubGF5b3V0KSB7XG4gICAgICAgICAgICBsYXlvdXRzLnVuc2hpZnQocGFyZW50LmxheW91dCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGxheW91dHM7XG59O1xuIl19
@@ -0,0 +1,50 @@
1
+ import { MindElement } from '../interfaces';
2
+ import { correctLayoutByDirection, findUpElement, getDefaultMindmapLayout, getInCorrectLayoutDirection, MINDMAP_ELEMENT_TO_COMPONENT } from '../utils';
3
+ import { AbstractNode, MindmapLayoutType, getAbstractLayout, isIndentedLayout, isChildOfAbstract } from '@plait/layouts';
4
+ /**
5
+ * get correctly layout:
6
+ * 1. root is standard -> left or right
7
+ * 2. correct layout by incorrect layout direction
8
+ * @param element
9
+ */
10
+ export const getCorrectLayoutByElement = (element) => {
11
+ const { root } = findUpElement(element);
12
+ const rootLayout = root.layout || getDefaultMindmapLayout();
13
+ let correctRootLayout = rootLayout;
14
+ if (element.isRoot) {
15
+ return correctRootLayout;
16
+ }
17
+ const component = MINDMAP_ELEMENT_TO_COMPONENT.get(element);
18
+ let layout = component?.node.origin.layout;
19
+ let parentComponent;
20
+ let parent = component?.parent?.origin;
21
+ while (!layout && parent) {
22
+ parentComponent = MINDMAP_ELEMENT_TO_COMPONENT.get(parent);
23
+ layout = parentComponent?.node.origin.layout;
24
+ parent = parentComponent?.parent?.origin;
25
+ }
26
+ if ((AbstractNode.isAbstract(element) || isChildOfAbstract(MindElement.getNode(element))) &&
27
+ isIndentedLayout(layout)) {
28
+ return getAbstractLayout(layout);
29
+ }
30
+ // handle root standard
31
+ if (rootLayout === MindmapLayoutType.standard) {
32
+ correctRootLayout = component?.node.left ? MindmapLayoutType.left : MindmapLayoutType.right;
33
+ }
34
+ if (parentComponent?.node.origin.isRoot) {
35
+ return correctRootLayout;
36
+ }
37
+ if (layout) {
38
+ const incorrectDirection = getInCorrectLayoutDirection(correctRootLayout, layout);
39
+ if (incorrectDirection) {
40
+ return correctLayoutByDirection(layout, incorrectDirection);
41
+ }
42
+ else {
43
+ return layout;
44
+ }
45
+ }
46
+ else {
47
+ return correctRootLayout;
48
+ }
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWNvcnJlY3QtbGF5b3V0LWJ5LWVsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9xdWVyaWVzL2dldC1jb3JyZWN0LWxheW91dC1ieS1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUMsT0FBTyxFQUNILHdCQUF3QixFQUN4QixhQUFhLEVBQ2IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDL0IsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBYyxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJJOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDOUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLHVCQUF1QixFQUFFLENBQUM7SUFDNUQsSUFBSSxpQkFBaUIsR0FBRyxVQUFVLENBQUM7SUFFbkMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ2hCLE9BQU8saUJBQWlCLENBQUM7S0FDNUI7SUFFRCxNQUFNLFNBQVMsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsSUFBSSxNQUFNLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTNDLElBQUksZUFBOEMsQ0FBQztJQUNuRCxJQUFJLE1BQU0sR0FBNEIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFaEUsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUU7UUFDdEIsZUFBZSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzRCxNQUFNLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzdDLE1BQU0sR0FBRyxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUM1QztJQUNELElBQ0ksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixDQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUEyQixDQUFDLENBQUM7UUFDaEgsZ0JBQWdCLENBQUMsTUFBTyxDQUFDLEVBQzNCO1FBQ0UsT0FBTyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsQ0FBQztLQUNyQztJQUVELHVCQUF1QjtJQUN2QixJQUFJLFVBQVUsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUU7UUFDM0MsaUJBQWlCLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0tBQy9GO0lBRUQsSUFBSSxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDckMsT0FBTyxpQkFBaUIsQ0FBQztLQUM1QjtJQUVELElBQUksTUFBTSxFQUFFO1FBQ1IsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRixJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLE9BQU8sd0JBQXdCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDL0Q7YUFBTTtZQUNILE9BQU8sTUFBTSxDQUFDO1NBQ2pCO0tBQ0o7U0FBTTtRQUNILE9BQU8saUJBQWlCLENBQUM7S0FDNUI7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIGNvcnJlY3RMYXlvdXRCeURpcmVjdGlvbixcbiAgICBmaW5kVXBFbGVtZW50LFxuICAgIGdldERlZmF1bHRNaW5kbWFwTGF5b3V0LFxuICAgIGdldEluQ29ycmVjdExheW91dERpcmVjdGlvbixcbiAgICBNSU5ETUFQX0VMRU1FTlRfVE9fQ09NUE9ORU5UXG59IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTWluZG1hcExheW91dFR5cGUsIGdldEFic3RyYWN0TGF5b3V0LCBpc0luZGVudGVkTGF5b3V0LCBMYXlvdXROb2RlLCBpc0NoaWxkT2ZBYnN0cmFjdCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcblxuLyoqXG4gKiBnZXQgY29ycmVjdGx5IGxheW91dO+8mlxuICogMS4gcm9vdCBpcyBzdGFuZGFyZCAtPiBsZWZ0IG9yIHJpZ2h0XG4gKiAyLiBjb3JyZWN0IGxheW91dCBieSBpbmNvcnJlY3QgbGF5b3V0IGRpcmVjdGlvblxuICogQHBhcmFtIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB7IHJvb3QgfSA9IGZpbmRVcEVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgcm9vdExheW91dCA9IHJvb3QubGF5b3V0IHx8IGdldERlZmF1bHRNaW5kbWFwTGF5b3V0KCk7XG4gICAgbGV0IGNvcnJlY3RSb290TGF5b3V0ID0gcm9vdExheW91dDtcblxuICAgIGlmIChlbGVtZW50LmlzUm9vdCkge1xuICAgICAgICByZXR1cm4gY29ycmVjdFJvb3RMYXlvdXQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50ID0gTUlORE1BUF9FTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQoZWxlbWVudCk7XG4gICAgbGV0IGxheW91dCA9IGNvbXBvbmVudD8ubm9kZS5vcmlnaW4ubGF5b3V0O1xuXG4gICAgbGV0IHBhcmVudENvbXBvbmVudDogdW5kZWZpbmVkIHwgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgbGV0IHBhcmVudDogTWluZEVsZW1lbnQgfCB1bmRlZmluZWQgPSBjb21wb25lbnQ/LnBhcmVudD8ub3JpZ2luO1xuXG4gICAgd2hpbGUgKCFsYXlvdXQgJiYgcGFyZW50KSB7XG4gICAgICAgIHBhcmVudENvbXBvbmVudCA9IE1JTkRNQVBfRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHBhcmVudCk7XG4gICAgICAgIGxheW91dCA9IHBhcmVudENvbXBvbmVudD8ubm9kZS5vcmlnaW4ubGF5b3V0O1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnRDb21wb25lbnQ/LnBhcmVudD8ub3JpZ2luO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSB8fCBpc0NoaWxkT2ZBYnN0cmFjdCgoTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSBhcyB1bmtub3duKSBhcyBMYXlvdXROb2RlKSkgJiZcbiAgICAgICAgaXNJbmRlbnRlZExheW91dChsYXlvdXQhKVxuICAgICkge1xuICAgICAgICByZXR1cm4gZ2V0QWJzdHJhY3RMYXlvdXQobGF5b3V0ISk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlIHJvb3Qgc3RhbmRhcmRcbiAgICBpZiAocm9vdExheW91dCA9PT0gTWluZG1hcExheW91dFR5cGUuc3RhbmRhcmQpIHtcbiAgICAgICAgY29ycmVjdFJvb3RMYXlvdXQgPSBjb21wb25lbnQ/Lm5vZGUubGVmdCA/IE1pbmRtYXBMYXlvdXRUeXBlLmxlZnQgOiBNaW5kbWFwTGF5b3V0VHlwZS5yaWdodDtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgcmV0dXJuIGNvcnJlY3RSb290TGF5b3V0O1xuICAgIH1cblxuICAgIGlmIChsYXlvdXQpIHtcbiAgICAgICAgY29uc3QgaW5jb3JyZWN0RGlyZWN0aW9uID0gZ2V0SW5Db3JyZWN0TGF5b3V0RGlyZWN0aW9uKGNvcnJlY3RSb290TGF5b3V0LCBsYXlvdXQpO1xuICAgICAgICBpZiAoaW5jb3JyZWN0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY29ycmVjdExheW91dEJ5RGlyZWN0aW9uKGxheW91dCwgaW5jb3JyZWN0RGlyZWN0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsYXlvdXQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29ycmVjdFJvb3RMYXlvdXQ7XG4gICAgfVxufTtcbiJdfQ==
@@ -0,0 +1,16 @@
1
+ import { MindElement } from '../interfaces';
2
+ import { AbstractNode, getAbstractLayout, isIndentedLayout, isChildOfAbstract } from '@plait/layouts';
3
+ import { getLayoutParentByElement } from './get-layout-parent-by-element';
4
+ export const getLayoutByElement = (element) => {
5
+ const layout = element.layout;
6
+ if (layout) {
7
+ return layout;
8
+ }
9
+ if (AbstractNode.isAbstract(element) ||
10
+ (isChildOfAbstract(MindElement.getNode(element)) && isIndentedLayout(layout))) {
11
+ const parentLayout = getLayoutParentByElement(element);
12
+ return getAbstractLayout(parentLayout);
13
+ }
14
+ return getLayoutParentByElement(element);
15
+ };
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWxheW91dC1ieS1lbGVtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcXVlcmllcy9nZXQtbGF5b3V0LWJ5LWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFxQixpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ3JJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBb0IsRUFBcUIsRUFBRTtJQUMxRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQzlCLElBQUksTUFBTSxFQUFFO1FBQ1IsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFFRCxJQUNJLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUMsaUJBQWlCLENBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQTJCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFPLENBQUMsQ0FBQyxFQUMzRztRQUNFLE1BQU0sWUFBWSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE9BQU8saUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUsIE1pbmRtYXBMYXlvdXRUeXBlLCBnZXRBYnN0cmFjdExheW91dCwgaXNJbmRlbnRlZExheW91dCwgaXNDaGlsZE9mQWJzdHJhY3QsIExheW91dE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBnZXRMYXlvdXRQYXJlbnRCeUVsZW1lbnQgfSBmcm9tICcuL2dldC1sYXlvdXQtcGFyZW50LWJ5LWVsZW1lbnQnO1xuXG5leHBvcnQgY29uc3QgZ2V0TGF5b3V0QnlFbGVtZW50ID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogTWluZG1hcExheW91dFR5cGUgPT4ge1xuICAgIGNvbnN0IGxheW91dCA9IGVsZW1lbnQubGF5b3V0O1xuICAgIGlmIChsYXlvdXQpIHtcbiAgICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGVsZW1lbnQpIHx8XG4gICAgICAgIChpc0NoaWxkT2ZBYnN0cmFjdCgoTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSBhcyB1bmtub3duKSBhcyBMYXlvdXROb2RlKSAmJiBpc0luZGVudGVkTGF5b3V0KGxheW91dCEpKVxuICAgICkge1xuICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBnZXRMYXlvdXRQYXJlbnRCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBnZXRBYnN0cmFjdExheW91dChwYXJlbnRMYXlvdXQpO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0TGF5b3V0UGFyZW50QnlFbGVtZW50KGVsZW1lbnQpO1xufTtcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ import { findParentElement, getDefaultMindmapLayout } from '../utils';
2
+ /**
3
+ * 获取父节点布局类型
4
+ * @param element
5
+ * @returns MindmapLayoutType
6
+ */
7
+ export const getLayoutParentByElement = (element) => {
8
+ let parent = findParentElement(element);
9
+ while (parent) {
10
+ if (parent.layout) {
11
+ return parent.layout;
12
+ }
13
+ parent = findParentElement(parent);
14
+ }
15
+ return getDefaultMindmapLayout();
16
+ };
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWxheW91dC1wYXJlbnQtYnktZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3F1ZXJpZXMvZ2V0LWxheW91dC1wYXJlbnQtYnktZWxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHdEU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsT0FBb0IsRUFBcUIsRUFBRTtJQUNoRixJQUFJLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxPQUFPLE1BQU0sRUFBRTtRQUNYLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNmLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN4QjtRQUNELE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sdUJBQXVCLEVBQUUsQ0FBQztBQUNyQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZmluZFBhcmVudEVsZW1lbnQsIGdldERlZmF1bHRNaW5kbWFwTGF5b3V0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgTWluZG1hcExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5cbi8qKlxuICog6I635Y+W54i26IqC54K55biD5bGA57G75Z6LXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHJldHVybnMgTWluZG1hcExheW91dFR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheW91dFBhcmVudEJ5RWxlbWVudCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRtYXBMYXlvdXRUeXBlID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LmxheW91dCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5sYXlvdXQ7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIGdldERlZmF1bHRNaW5kbWFwTGF5b3V0KCk7XG59O1xuIl19
@@ -0,0 +1,13 @@
1
+ import { getAvailableSubLayoutsByElement } from './get-available-sublayouts-by-element';
2
+ import { getBranchMindmapLayouts } from './get-branch-mindmap-layouts-by-element';
3
+ import { getCorrectLayoutByElement } from './get-correct-layout-by-element';
4
+ import { getLayoutByElement } from './get-layout-by-element';
5
+ import { getLayoutParentByElement } from './get-layout-parent-by-element';
6
+ export const MindmapQueries = {
7
+ getAvailableSubLayoutsByElement,
8
+ getLayoutParentByElement,
9
+ getBranchMindmapLayouts,
10
+ getLayoutByElement,
11
+ getCorrectLayoutByElement
12
+ };
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy9xdWVyaWVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRztJQUMxQiwrQkFBK0I7SUFDL0Isd0JBQXdCO0lBQ3hCLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIseUJBQXlCO0NBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRBdmFpbGFibGVTdWJMYXlvdXRzQnlFbGVtZW50IH0gZnJvbSAnLi9nZXQtYXZhaWxhYmxlLXN1YmxheW91dHMtYnktZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRCcmFuY2hNaW5kbWFwTGF5b3V0cyB9IGZyb20gJy4vZ2V0LWJyYW5jaC1taW5kbWFwLWxheW91dHMtYnktZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50IH0gZnJvbSAnLi9nZXQtY29ycmVjdC1sYXlvdXQtYnktZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRMYXlvdXRCeUVsZW1lbnQgfSBmcm9tICcuL2dldC1sYXlvdXQtYnktZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRMYXlvdXRQYXJlbnRCeUVsZW1lbnQgfSBmcm9tICcuL2dldC1sYXlvdXQtcGFyZW50LWJ5LWVsZW1lbnQnO1xuXG5leHBvcnQgY29uc3QgTWluZG1hcFF1ZXJpZXMgPSB7XG4gICAgZ2V0QXZhaWxhYmxlU3ViTGF5b3V0c0J5RWxlbWVudCxcbiAgICBnZXRMYXlvdXRQYXJlbnRCeUVsZW1lbnQsXG4gICAgZ2V0QnJhbmNoTWluZG1hcExheW91dHMsXG4gICAgZ2V0TGF5b3V0QnlFbGVtZW50LFxuICAgIGdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnRcbn07XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { setLayout } from './layout';
2
+ import { addEmoji, removeEmoji, setTopic, setTopicSize } from './node';
3
+ export const MindTransforms = {
4
+ setLayout,
5
+ setTopic,
6
+ setTopicSize,
7
+ addEmoji,
8
+ removeEmoji
9
+ };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy90cmFuc2Zvcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDckMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUV2RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUc7SUFDMUIsU0FBUztJQUNULFFBQVE7SUFDUixZQUFZO0lBQ1osUUFBUTtJQUNSLFdBQVc7Q0FDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQnO1xuaW1wb3J0IHsgYWRkRW1vamksIHJlbW92ZUVtb2ppLCBzZXRUb3BpYywgc2V0VG9waWNTaXplIH0gZnJvbSAnLi9ub2RlJztcblxuZXhwb3J0IGNvbnN0IE1pbmRUcmFuc2Zvcm1zID0ge1xuICAgIHNldExheW91dCxcbiAgICBzZXRUb3BpYyxcbiAgICBzZXRUb3BpY1NpemUsXG4gICAgYWRkRW1vamksXG4gICAgcmVtb3ZlRW1vamlcbn07XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { PlaitNode, Transforms } from '@plait/core';
2
+ import { isHorizontalLogicLayout, isVerticalLogicLayout } from '@plait/layouts';
3
+ export const setLayout = (board, layout, path) => {
4
+ correctLogicLayoutNode(board, layout, path);
5
+ Transforms.setNode(board, { layout }, path);
6
+ };
7
+ const correctLogicLayoutNode = (board, layout, path) => {
8
+ const node = PlaitNode.get(board, path);
9
+ if (node && layout) {
10
+ node.children?.forEach((value, index) => {
11
+ if (value.layout) {
12
+ if ((isHorizontalLogicLayout(layout) && isVerticalLogicLayout(value.layout)) ||
13
+ (isVerticalLogicLayout(layout) && isHorizontalLogicLayout(value.layout))) {
14
+ Transforms.setNode(board, { layout: null }, [...path, index]);
15
+ }
16
+ if (value.children?.length) {
17
+ correctLogicLayoutNode(board, layout, [...path, index]);
18
+ }
19
+ }
20
+ });
21
+ }
22
+ };
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdHJhbnNmb3Jtcy9sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE1BQXlCLEVBQUUsSUFBVSxFQUFFLEVBQUU7SUFDbEYsc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE1BQXlCLEVBQUUsSUFBVSxFQUFFLEVBQUU7SUFDeEYsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEMsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2QsSUFDSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDeEUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsSUFBSSx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDMUU7b0JBQ0UsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO2lCQUNqRTtnQkFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO29CQUN4QixzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDM0Q7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0tBQ047QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQYXRoLCBQbGFpdE5vZGUsIFRyYW5zZm9ybXMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBpc0hvcml6b250YWxMb2dpY0xheW91dCwgaXNWZXJ0aWNhbExvZ2ljTGF5b3V0LCBNaW5kbWFwTGF5b3V0VHlwZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcblxuZXhwb3J0IGNvbnN0IHNldExheW91dCA9IChib2FyZDogUGxhaXRCb2FyZCwgbGF5b3V0OiBNaW5kbWFwTGF5b3V0VHlwZSwgcGF0aDogUGF0aCkgPT4ge1xuICAgIGNvcnJlY3RMb2dpY0xheW91dE5vZGUoYm9hcmQsIGxheW91dCwgcGF0aCk7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGxheW91dCB9LCBwYXRoKTtcbn07XG5cbmNvbnN0IGNvcnJlY3RMb2dpY0xheW91dE5vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGxheW91dDogTWluZG1hcExheW91dFR5cGUsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBub2RlID0gUGxhaXROb2RlLmdldChib2FyZCwgcGF0aCk7XG4gICAgaWYgKG5vZGUgJiYgbGF5b3V0KSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LmZvckVhY2goKHZhbHVlOiBQbGFpdE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoaXNIb3Jpem9udGFsTG9naWNMYXlvdXQobGF5b3V0KSAmJiBpc1ZlcnRpY2FsTG9naWNMYXlvdXQodmFsdWUubGF5b3V0KSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlzVmVydGljYWxMb2dpY0xheW91dChsYXlvdXQpICYmIGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0KHZhbHVlLmxheW91dCkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBsYXlvdXQ6IG51bGwgfSwgWy4uLnBhdGgsIGluZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5jaGlsZHJlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcnJlY3RMb2dpY0xheW91dE5vZGUoYm9hcmQsIGxheW91dCwgWy4uLnBhdGgsIGluZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuIl19
@@ -0,0 +1,44 @@
1
+ import { MindElement } from '../interfaces/element';
2
+ import { NODE_MIN_WIDTH } from '../constants/node';
3
+ import { PlaitBoard, Transforms } from '@plait/core';
4
+ export const setTopic = (board, element, topic, width, height) => {
5
+ const newElement = {
6
+ data: { topic },
7
+ width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,
8
+ height: height / board.viewport.zoom
9
+ };
10
+ if (MindElement.hasEmojis(element)) {
11
+ newElement.data.emojis = element.data.emojis;
12
+ }
13
+ const path = PlaitBoard.findPath(board, element);
14
+ Transforms.setNode(board, newElement, path);
15
+ };
16
+ export const setTopicSize = (board, element, width, height) => {
17
+ const newElement = {
18
+ width: width < NODE_MIN_WIDTH * board.viewport.zoom ? NODE_MIN_WIDTH : width / board.viewport.zoom,
19
+ height: height / board.viewport.zoom
20
+ };
21
+ const path = PlaitBoard.findPath(board, element);
22
+ Transforms.setNode(board, newElement, path);
23
+ };
24
+ export const addEmoji = (board, element, emojiItem) => {
25
+ const emojis = element.data.emojis || [];
26
+ emojis.push(emojiItem);
27
+ const newElement = {
28
+ data: { topic: element.data.topic, emojis }
29
+ };
30
+ const path = PlaitBoard.findPath(board, element);
31
+ Transforms.setNode(board, newElement, path);
32
+ };
33
+ export const removeEmoji = (board, element, emojiItem) => {
34
+ const emojis = element.data.emojis.filter(value => value !== emojiItem);
35
+ const newElement = {
36
+ data: { topic: element.data.topic }
37
+ };
38
+ if (emojis.length > 0) {
39
+ newElement.data.emojis = emojis;
40
+ }
41
+ const path = PlaitBoard.findPath(board, element);
42
+ Transforms.setNode(board, newElement, path);
43
+ };
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3RyYW5zZm9ybXMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3JELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxLQUFjLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQy9HLE1BQU0sVUFBVSxHQUFHO1FBQ2YsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO1FBQ2YsS0FBSyxFQUFFLEtBQUssR0FBRyxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtRQUNsRyxNQUFNLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtLQUN4QixDQUFDO0lBQ2pCLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNoRDtJQUNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQW9CLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQ25HLE1BQU0sVUFBVSxHQUFHO1FBQ2YsS0FBSyxFQUFFLEtBQUssR0FBRyxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtRQUNsRyxNQUFNLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtLQUN2QyxDQUFDO0lBQ0YsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxTQUFvQixFQUFFLEVBQUU7SUFDdEYsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsTUFBTSxVQUFVLEdBQUc7UUFDZixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0tBQy9CLENBQUM7SUFDakIsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBK0IsRUFBRSxTQUFvQixFQUFFLEVBQUU7SUFDcEcsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sVUFBVSxHQUFHO1FBQ2YsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0tBQ3ZCLENBQUM7SUFDakIsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7S0FDbkM7SUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE5PREVfTUlOX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgVHJhbnNmb3JtcyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEVtb2ppRGF0YSwgRW1vamlJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50LWRhdGEnO1xuXG5leHBvcnQgY29uc3Qgc2V0VG9waWMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50LCB0b3BpYzogRWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICBkYXRhOiB7IHRvcGljIH0sXG4gICAgICAgIHdpZHRoOiB3aWR0aCA8IE5PREVfTUlOX1dJRFRIICogYm9hcmQudmlld3BvcnQuem9vbSA/IE5PREVfTUlOX1dJRFRIIDogd2lkdGggLyBib2FyZC52aWV3cG9ydC56b29tLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGJvYXJkLnZpZXdwb3J0Lnpvb21cbiAgICB9IGFzIE1pbmRFbGVtZW50O1xuICAgIGlmIChNaW5kRWxlbWVudC5oYXNFbW9qaXMoZWxlbWVudCkpIHtcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLmVtb2ppcyA9IGVsZW1lbnQuZGF0YS5lbW9qaXM7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFRvcGljU2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHtcbiAgICAgICAgd2lkdGg6IHdpZHRoIDwgTk9ERV9NSU5fV0lEVEggKiBib2FyZC52aWV3cG9ydC56b29tID8gTk9ERV9NSU5fV0lEVEggOiB3aWR0aCAvIGJvYXJkLnZpZXdwb3J0Lnpvb20sXG4gICAgICAgIGhlaWdodDogaGVpZ2h0IC8gYm9hcmQudmlld3BvcnQuem9vbVxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRW1vamkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBlbW9qaUl0ZW06IEVtb2ppSXRlbSkgPT4ge1xuICAgIGNvbnN0IGVtb2ppcyA9IGVsZW1lbnQuZGF0YS5lbW9qaXMgfHwgW107XG4gICAgZW1vamlzLnB1c2goZW1vamlJdGVtKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICBkYXRhOiB7IHRvcGljOiBlbGVtZW50LmRhdGEudG9waWMsIGVtb2ppcyB9XG4gICAgfSBhcyBNaW5kRWxlbWVudDtcbiAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZWxlbWVudCk7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFbW9qaSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQ8RW1vamlEYXRhPiwgZW1vamlJdGVtOiBFbW9qaUl0ZW0pID0+IHtcbiAgICBjb25zdCBlbW9qaXMgPSBlbGVtZW50LmRhdGEuZW1vamlzLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gZW1vamlJdGVtKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICBkYXRhOiB7IHRvcGljOiBlbGVtZW50LmRhdGEudG9waWMgfVxuICAgIH0gYXMgTWluZEVsZW1lbnQ7XG4gICAgaWYgKGVtb2ppcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuZGF0YS5lbW9qaXMgPSBlbW9qaXM7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xufTtcbiJdfQ==
@@ -0,0 +1,25 @@
1
+ import { AbstractNode } from '@plait/layouts';
2
+ export const separateChildren = (parentElement) => {
3
+ const rightNodeCount = parentElement.rightNodeCount;
4
+ const children = parentElement.children;
5
+ let rightChildren = [], leftChildren = [];
6
+ for (let i = 0; i < children.length; i++) {
7
+ const child = children[i];
8
+ if (AbstractNode.isAbstract(child) && child.end < rightNodeCount) {
9
+ rightChildren.push(child);
10
+ continue;
11
+ }
12
+ if (AbstractNode.isAbstract(child) && child.start >= rightNodeCount) {
13
+ leftChildren.push(child);
14
+ continue;
15
+ }
16
+ if (i < rightNodeCount) {
17
+ rightChildren.push(child);
18
+ }
19
+ else {
20
+ leftChildren.push(child);
21
+ }
22
+ }
23
+ return { leftChildren, rightChildren };
24
+ };
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvYWJzdHJhY3QvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc5QyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGFBQTBCLEVBQUUsRUFBRTtJQUMzRCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsY0FBZSxDQUFDO0lBQ3JELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7SUFDeEMsSUFBSSxhQUFhLEdBQUcsRUFBRSxFQUNsQixZQUFZLEdBQUcsRUFBRSxDQUFDO0lBRXRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxjQUFjLEVBQUU7WUFDOUQsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixTQUFTO1NBQ1o7UUFDRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxjQUFjLEVBQUU7WUFDakUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QixTQUFTO1NBQ1o7UUFFRCxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUU7WUFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtLQUNKO0lBRUQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUMzQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5cbmV4cG9ydCBjb25zdCBzZXBhcmF0ZUNoaWxkcmVuID0gKHBhcmVudEVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcmlnaHROb2RlQ291bnQgPSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50ITtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG4gICAgbGV0IHJpZ2h0Q2hpbGRyZW4gPSBbXSxcbiAgICAgICAgbGVmdENoaWxkcmVuID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChjaGlsZCkgJiYgY2hpbGQuZW5kIDwgcmlnaHROb2RlQ291bnQpIHtcbiAgICAgICAgICAgIHJpZ2h0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpICYmIGNoaWxkLnN0YXJ0ID49IHJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICBsZWZ0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpIDwgcmlnaHROb2RlQ291bnQpIHtcbiAgICAgICAgICAgIHJpZ2h0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZWZ0Q2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBsZWZ0Q2hpbGRyZW4sIHJpZ2h0Q2hpbGRyZW4gfTtcbn07XG4iXX0=