@plait/mind 0.2.0-next.7 → 0.2.0-next.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/constants/abstract-node.d.ts +4 -0
- package/constants/default.d.ts +1 -2
- package/constants/index.d.ts +4 -1
- package/constants/node-rule.d.ts +1 -0
- package/constants/node-style.d.ts +17 -0
- package/constants/node-topic-style.d.ts +4 -0
- package/draw/richtext.d.ts +4 -3
- package/esm2020/constants/abstract-node.mjs +5 -0
- package/esm2020/constants/default.mjs +2 -3
- package/esm2020/constants/index.mjs +5 -2
- package/esm2020/constants/node-rule.mjs +2 -0
- package/esm2020/constants/node-style.mjs +19 -0
- package/esm2020/constants/node-topic-style.mjs +5 -0
- package/esm2020/draw/abstract.mjs +4 -3
- package/esm2020/draw/indented-link.mjs +14 -14
- package/esm2020/draw/link/abstract-link.mjs +6 -4
- package/esm2020/draw/link/logic-link.mjs +7 -7
- package/esm2020/draw/link.mjs +6 -5
- package/esm2020/draw/richtext.mjs +7 -7
- package/esm2020/draw/shape.mjs +4 -4
- package/esm2020/drawer/quick-insert.drawer.mjs +11 -12
- package/esm2020/interfaces/abstract.mjs +1 -1
- package/esm2020/interfaces/element.mjs +6 -1
- package/esm2020/interfaces/node.mjs +1 -1
- package/esm2020/interfaces/options.mjs +2 -0
- package/esm2020/layout-option.mjs +5 -5
- package/esm2020/mind.component.mjs +2 -2
- package/esm2020/node.component.mjs +15 -13
- package/esm2020/plugins/emoji/emoji.drawer.mjs +3 -4
- package/esm2020/plugins/emoji/emoji.mjs +7 -3
- package/esm2020/plugins/emoji/index.mjs +1 -2
- package/esm2020/plugins/with-abstract.mjs +2 -2
- package/esm2020/plugins/with-dnd.mjs +12 -117
- package/esm2020/plugins/with-extend-mind.mjs +11 -0
- package/esm2020/plugins/with-mind.mjs +9 -7
- package/esm2020/public-api.mjs +2 -1
- package/esm2020/queries/get-available-sublayouts-by-element.mjs +4 -9
- package/esm2020/queries/get-branch-layouts.mjs +4 -4
- package/esm2020/queries/get-correct-layout-by-element.mjs +28 -31
- package/esm2020/queries/get-layout-by-element.mjs +10 -8
- package/esm2020/queries/index.mjs +1 -3
- package/esm2020/transforms/abstract-node.mjs +68 -0
- package/esm2020/transforms/index.mjs +6 -2
- package/esm2020/transforms/layout.mjs +3 -3
- package/esm2020/transforms/node.mjs +2 -2
- package/esm2020/utils/abstract/common.mjs +90 -70
- package/esm2020/utils/abstract/resize.mjs +3 -3
- package/esm2020/utils/clipboard.mjs +54 -14
- package/esm2020/utils/direction-corrector.mjs +11 -11
- package/esm2020/utils/dnd.mjs +118 -0
- package/esm2020/utils/draw-placeholder.mjs +5 -5
- package/esm2020/utils/drop-target-corrector.mjs +11 -10
- package/esm2020/utils/layout.mjs +1 -1
- package/esm2020/utils/mind.mjs +23 -58
- package/esm2020/utils/node-space.mjs +5 -5
- package/esm2020/utils/node-style/branch.mjs +33 -6
- package/esm2020/utils/node-style/node.mjs +6 -5
- package/esm2020/utils/path.mjs +4 -3
- package/esm2020/utils/shape.mjs +3 -3
- package/fesm2015/plait-mind.mjs +724 -602
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +726 -600
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/interfaces/abstract.d.ts +3 -0
- package/interfaces/element.d.ts +5 -2
- package/interfaces/options.d.ts +4 -0
- package/layout-option.d.ts +2 -1
- package/mind.component.d.ts +2 -2
- package/node.component.d.ts +5 -4
- package/package.json +1 -1
- package/plugins/emoji/emoji.d.ts +2 -1
- package/plugins/emoji/emoji.drawer.d.ts +3 -3
- package/plugins/emoji/index.d.ts +0 -1
- package/plugins/with-dnd.d.ts +0 -9
- package/plugins/with-extend-mind.d.ts +10 -0
- package/plugins/with-mind.d.ts +1 -1
- package/public-api.d.ts +1 -0
- package/queries/get-available-sublayouts-by-element.d.ts +2 -6
- package/queries/get-branch-layouts.d.ts +2 -1
- package/queries/get-correct-layout-by-element.d.ts +2 -1
- package/queries/index.d.ts +3 -4
- package/styles/styles.scss +0 -3
- package/transforms/abstract-node.d.ts +6 -0
- package/transforms/index.d.ts +3 -0
- package/utils/abstract/common.d.ts +6 -8
- package/utils/direction-corrector.d.ts +2 -1
- package/utils/dnd.d.ts +16 -0
- package/utils/drop-target-corrector.d.ts +2 -1
- package/utils/mind.d.ts +3 -3
- package/utils/node-space.d.ts +3 -2
- package/utils/node-style/branch.d.ts +3 -0
- package/utils/shape.d.ts +2 -3
- package/constants/node.d.ts +0 -17
- package/esm2020/constants/node.mjs +0 -19
- package/esm2020/plugins/emoji/with-mind-emoji.mjs +0 -8
- package/esm2020/queries/get-layout-parent-by-element.mjs +0 -17
- package/plugins/emoji/with-mind-emoji.d.ts +0 -8
- package/queries/get-layout-parent-by-element.d.ts +0 -8
package/esm2020/utils/mind.mjs
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { MindLayoutType } from '@plait/layouts';
|
|
2
2
|
import { addSelectedElement, clearSelectedElement, idCreator, isNullOrUndefined, PlaitBoard, PlaitElement, Transforms } from '@plait/core';
|
|
3
3
|
import { Node } from 'slate';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { NODE_MIN_WIDTH } from '../constants/node-rule';
|
|
5
|
+
import { MindElementShape } from '../interfaces';
|
|
6
6
|
import { MindElement } from '../interfaces/element';
|
|
7
7
|
import { getRootLayout } from './layout';
|
|
8
8
|
import { TEXT_DEFAULT_HEIGHT, getSizeByText, ROOT_DEFAULT_HEIGHT } from '@plait/richtext';
|
|
9
9
|
import { enterNodeEditing } from './node';
|
|
10
|
-
import {
|
|
10
|
+
import { deleteElementHandleAbstract } from './abstract/common';
|
|
11
|
+
import { ROOT_TOPIC_FONT_SIZE, TOPIC_DEFAULT_MAX_WORD_COUNT } from '../constants/node-topic-style';
|
|
12
|
+
import { MindTransforms } from '../transforms';
|
|
11
13
|
export function findParentElement(element) {
|
|
12
14
|
const component = PlaitElement.getComponent(element);
|
|
13
15
|
if (component && component.parent) {
|
|
@@ -145,13 +147,13 @@ export const shouldChangeRightNodeCount = (selectedElement) => {
|
|
|
145
147
|
return false;
|
|
146
148
|
};
|
|
147
149
|
export const createDefaultMindMapElement = (point, rightNodeCount, layout) => {
|
|
148
|
-
const root = createMindElement('思维导图', 72, ROOT_DEFAULT_HEIGHT, { shape:
|
|
150
|
+
const root = createMindElement('思维导图', 72, ROOT_DEFAULT_HEIGHT, { shape: MindElementShape.roundRectangle, layout });
|
|
149
151
|
root.rightNodeCount = rightNodeCount;
|
|
150
152
|
root.isRoot = true;
|
|
151
153
|
root.type = 'mindmap';
|
|
152
154
|
root.points = [point];
|
|
153
155
|
const children = [1, 1, 1].map(() => {
|
|
154
|
-
return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, { shape:
|
|
156
|
+
return createMindElement('新建节点', 56, TEXT_DEFAULT_HEIGHT, { shape: MindElementShape.roundRectangle });
|
|
155
157
|
});
|
|
156
158
|
root.children = children;
|
|
157
159
|
return root;
|
|
@@ -188,11 +190,14 @@ export const createMindElement = (text, width, height, options) => {
|
|
|
188
190
|
if (options.branchColor) {
|
|
189
191
|
newElement.branchColor = options.branchColor;
|
|
190
192
|
}
|
|
193
|
+
if (!isNullOrUndefined(options.branchWidth)) {
|
|
194
|
+
newElement.branchWidth = options.branchWidth;
|
|
195
|
+
}
|
|
191
196
|
return newElement;
|
|
192
197
|
};
|
|
193
198
|
// layoutLevel 用来表示插入兄弟节点还是子节点
|
|
194
199
|
export const insertMindElement = (board, inheritNode, path) => {
|
|
195
|
-
let fill, strokeColor, strokeWidth, shape =
|
|
200
|
+
let fill, strokeColor, strokeWidth, shape = MindElementShape.roundRectangle;
|
|
196
201
|
if (!inheritNode.isRoot) {
|
|
197
202
|
fill = inheritNode.fill;
|
|
198
203
|
strokeColor = inheritNode.strokeColor;
|
|
@@ -215,63 +220,23 @@ export const findLastChild = (child) => {
|
|
|
215
220
|
return result;
|
|
216
221
|
};
|
|
217
222
|
export const deleteSelectedELements = (board, selectedElements) => {
|
|
218
|
-
//翻转,从下到上修改,防止找不到 path
|
|
219
223
|
const deletableElements = filterChildElement(selectedElements).reverse();
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
behindAbstracts.forEach(abstract => {
|
|
227
|
-
let newProperties = accumulativeProperties.get(abstract);
|
|
228
|
-
if (!newProperties) {
|
|
229
|
-
newProperties = { start: abstract.start, end: abstract.end };
|
|
230
|
-
accumulativeProperties.set(abstract, newProperties);
|
|
231
|
-
relativeAbstracts.push(abstract);
|
|
232
|
-
}
|
|
233
|
-
newProperties.start = newProperties.start - 1;
|
|
234
|
-
newProperties.end = newProperties.end - 1;
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
const correspondingAbstract = getCorrespondingAbstract(node);
|
|
238
|
-
if (correspondingAbstract && !deletableElements.includes(correspondingAbstract)) {
|
|
239
|
-
let newProperties = accumulativeProperties.get(correspondingAbstract);
|
|
240
|
-
if (!newProperties) {
|
|
241
|
-
newProperties = { start: correspondingAbstract.start, end: correspondingAbstract.end };
|
|
242
|
-
accumulativeProperties.set(correspondingAbstract, newProperties);
|
|
243
|
-
relativeAbstracts.push(correspondingAbstract);
|
|
244
|
-
}
|
|
245
|
-
newProperties.end = newProperties.end - 1;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
const abstractHandles = relativeAbstracts.map(value => {
|
|
250
|
-
const newProperties = accumulativeProperties.get(value);
|
|
251
|
-
if (newProperties) {
|
|
252
|
-
const path = PlaitBoard.findPath(board, value);
|
|
253
|
-
return () => {
|
|
254
|
-
if (newProperties.start > newProperties.end) {
|
|
255
|
-
Transforms.removeNode(board, path);
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
Transforms.setNode(board, newProperties, path);
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
return () => { };
|
|
263
|
-
});
|
|
264
|
-
const deletableHandles = deletableElements.map(node => {
|
|
265
|
-
const path = PlaitBoard.findPath(board, node);
|
|
224
|
+
const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
|
|
225
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
226
|
+
//翻转,从下到上修改,防止找不到 path
|
|
227
|
+
deletableElements
|
|
228
|
+
.map(element => {
|
|
229
|
+
const path = PlaitBoard.findPath(board, element);
|
|
266
230
|
return () => {
|
|
267
|
-
if (shouldChangeRightNodeCount(
|
|
268
|
-
changeRightNodeCount(board, path.slice(0,
|
|
231
|
+
if (shouldChangeRightNodeCount(element)) {
|
|
232
|
+
changeRightNodeCount(board, path.slice(0, 1), -1);
|
|
269
233
|
}
|
|
270
234
|
Transforms.removeNode(board, path);
|
|
271
235
|
};
|
|
236
|
+
})
|
|
237
|
+
.forEach(action => {
|
|
238
|
+
action();
|
|
272
239
|
});
|
|
273
|
-
abstractHandles.forEach(action => action());
|
|
274
|
-
deletableHandles.forEach(action => action());
|
|
275
240
|
};
|
|
276
241
|
export const divideElementByParent = (elements) => {
|
|
277
242
|
const abstractIncludedGroups = [];
|
|
@@ -289,4 +254,4 @@ export const divideElementByParent = (elements) => {
|
|
|
289
254
|
}
|
|
290
255
|
return { parentElements, abstractIncludedGroups };
|
|
291
256
|
};
|
|
292
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL21pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQixTQUFTLEVBQ1QsaUJBQWlCLEVBRWpCLFVBQVUsRUFDVixZQUFZLEVBRVosVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0SCxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFakYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE9BQW9CO0lBQ2xELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFzQixDQUFDO0lBQzFFLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7UUFDL0IsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUNsQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7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QUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFJLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNwQixjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUM7YUFBTTtZQUNILHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN6RDtLQUNKO0lBQ0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Tm9kZSwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQge1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudCxcbiAgICBpZENyZWF0b3IsXG4gICAgaXNOdWxsT3JVbmRlZmluZWQsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBNaW5kTm9kZVNoYXBlLCBOT0RFX01JTl9XSURUSCwgUk9PVF9UT1BJQ19GT05UX1NJWkUsIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQgfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kTm9kZSwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQnO1xuaW1wb3J0IHsgVEVYVF9ERUZBVUxUX0hFSUdIVCwgZ2V0U2l6ZUJ5VGV4dCwgUk9PVF9ERUZBVUxUX0hFSUdIVCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBlbnRlck5vZGVFZGl0aW5nIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0QmVoaW5kQWJzdHJhY3RzLCBnZXRDb3JyZXNwb25kaW5nQWJzdHJhY3QgfSBmcm9tICcuL2Fic3RyYWN0L2NvbW1vbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGVsZW1lbnQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LnBhcmVudC5vcmlnaW47XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVXBFbGVtZW50KGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogeyByb290OiBNaW5kRWxlbWVudDsgYnJhbmNoPzogTWluZEVsZW1lbnQgfSB7XG4gICAgbGV0IGJyYW5jaDtcbiAgICBsZXQgcm9vdCA9IGVsZW1lbnQ7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KGVsZW1lbnQpO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgYnJhbmNoID0gcm9vdDtcbiAgICAgICAgcm9vdCA9IHBhcmVudDtcbiAgICAgICAgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQocGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcm9vdCwgYnJhbmNoIH07XG59XG5cbmV4cG9ydCBjb25zdCBnZXRDaGlsZHJlbkNvdW50ID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY291bnQ6IG51bWJlciA9IGVsZW1lbnQuY2hpbGRyZW4ucmVkdWNlKChwOiBudW1iZXIsIGM6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBwICsgZ2V0Q2hpbGRyZW5Db3VudChjKTtcbiAgICB9LCAwKTtcbiAgICByZXR1cm4gY291bnQgKyBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkRWxlbWVudCA9IChvcmlnaW46IE1pbmRFbGVtZW50LCBjaGlsZDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQoY2hpbGQpO1xuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gb3JpZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ2hpbGRFbGVtZW50ID0gKGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWluZEVsZW1lbnRbXSA9IFtdO1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IGlzQ2hpbGQgPSBlbGVtZW50cy5zb21lKG5vZGUgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ2hpbGRFbGVtZW50KG5vZGUsIGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlzQ2hpbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0NoaWxkUmlnaHQgPSAobm9kZTogTWluZE5vZGUsIGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIHJldHVybiBub2RlLnggPCBjaGlsZC54O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ2hpbGRVcCA9IChub2RlOiBNaW5kTm9kZSwgY2hpbGQ6IE1pbmROb2RlKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUueSA+IGNoaWxkLnk7XG59O1xuXG5leHBvcnQgY29uc3QgY29weU5ld05vZGUgPSAobm9kZTogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBuZXdOb2RlOiBNaW5kRWxlbWVudCA9IHsgLi4ubm9kZSB9O1xuICAgIG5ld05vZGUuaWQgPSBpZENyZWF0b3IoKTtcbiAgICBuZXdOb2RlLmNoaWxkcmVuID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIG5ld05vZGUuY2hpbGRyZW4ucHVzaChjb3B5TmV3Tm9kZShjaGlsZE5vZGUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld05vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtUm9vdFRvTm9kZSA9IChib2FyZDogUGxhaXRCb2FyZCwgbm9kZTogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBuZXdOb2RlOiBNaW5kRWxlbWVudCA9IHsgLi4ubm9kZSB9O1xuICAgIGRlbGV0ZSBuZXdOb2RlLmlzUm9vdDtcbiAgICBkZWxldGUgbmV3Tm9kZS5yaWdodE5vZGVDb3VudDtcbiAgICBkZWxldGUgbmV3Tm9kZS50eXBlO1xuXG4gICAgY29uc3QgdGV4dCA9IE5vZGUuc3RyaW5nKG5vZGUuZGF0YS50b3BpYy5jaGlsZHJlblswXSkgfHwgJyAnO1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0U2l6ZUJ5VGV4dCh0ZXh0LCBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKSwgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCk7XG5cbiAgICBuZXdOb2RlLndpZHRoID0gTWF0aC5tYXgod2lkdGgsIE5PREVfTUlOX1dJRFRIKTtcbiAgICBuZXdOb2RlLmhlaWdodCA9IGhlaWdodDtcblxuICAgIGlmIChuZXdOb2RlLmxheW91dCA9PT0gTWluZExheW91dFR5cGUuc3RhbmRhcmQpIHtcbiAgICAgICAgZGVsZXRlIG5ld05vZGUubGF5b3V0O1xuICAgIH1cblxuICAgIHJldHVybiBuZXdOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUFic3RyYWN0VG9Ob2RlID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbmV3Tm9kZTogTWluZEVsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBkZWxldGUgbmV3Tm9kZS5zdGFydDtcbiAgICBkZWxldGUgbmV3Tm9kZS5lbmQ7XG5cbiAgICByZXR1cm4gbmV3Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Ob2RlVG9Sb290ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgbGV0IHRleHQgPSBOb2RlLnN0cmluZyhuZXdFbGVtZW50LmRhdGEudG9waWMpO1xuXG4gICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIHRleHQgPSAn5oCd57u05a+85Zu+JztcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLnRvcGljID0geyBjaGlsZHJlbjogW3sgdGV4dCB9XSB9O1xuICAgIH1cblxuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5zdHJva2VDb2xvcjtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uZmlsbDtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uc2hhcGU7XG4gICAgZGVsZXRlIG5ld0VsZW1lbnQ/LnN0cm9rZVdpZHRoO1xuXG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KFxuICAgICAgICB0ZXh0LFxuICAgICAgICBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKSxcbiAgICAgICAgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCxcbiAgICAgICAgUk9PVF9UT1BJQ19GT05UX1NJWkVcbiAgICApO1xuICAgIG5ld0VsZW1lbnQud2lkdGggPSBNYXRoLm1heCh3aWR0aCwgTk9ERV9NSU5fV0lEVEgpO1xuICAgIG5ld0VsZW1lbnQuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubmV3RWxlbWVudCxcbiAgICAgICAgbGF5b3V0OiBuZXdFbGVtZW50LmxheW91dCA/PyBNaW5kTGF5b3V0VHlwZS5yaWdodCxcbiAgICAgICAgaXNDb2xsYXBzZWQ6IGZhbHNlLFxuICAgICAgICBpc1Jvb3Q6IHRydWUsXG4gICAgICAgIHR5cGU6ICdtaW5kbWFwJ1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdE5vZGVzVGV4dCA9IChub2RlOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGxldCBzdHIgPSAnJztcbiAgICBpZiAobm9kZSkge1xuICAgICAgICBzdHIgKz0gTm9kZS5zdHJpbmcobm9kZS5kYXRhLnRvcGljLmNoaWxkcmVuWzBdKSArICcgJztcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgc3RyICs9IGV4dHJhY3ROb2Rlc1RleHQoY2hpbGROb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoYW5nZVJpZ2h0Tm9kZUNvdW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRQYXRoOiBQYXRoLCBjaGFuZ2VOdW1iZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IF9yaWdodE5vZGVDb3VudCA9IGJvYXJkLmNoaWxkcmVuW3BhcmVudFBhdGhbMF1dLnJpZ2h0Tm9kZUNvdW50O1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50OlxuICAgICAgICAgICAgICAgIGNoYW5nZU51bWJlciA+PSAwXG4gICAgICAgICAgICAgICAgICAgID8gX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXIgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IF9yaWdodE5vZGVDb3VudCEgKyBjaGFuZ2VOdW1iZXJcbiAgICAgICAgfSxcbiAgICAgICAgcGFyZW50UGF0aFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQgPSAoc2VsZWN0ZWRFbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBmaW5kUGFyZW50RWxlbWVudChzZWxlY3RlZEVsZW1lbnQpO1xuICAgIGlmIChwYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVJbmRleDogbnVtYmVyID0gcGFyZW50RWxlbWVudC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBzZWxlY3RlZEVsZW1lbnQuaWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnRFbGVtZW50LmlzUm9vdCAmJlxuICAgICAgICAgICAgZ2V0Um9vdExheW91dChwYXJlbnRFbGVtZW50KSA9PT0gTWluZExheW91dFR5cGUuc3RhbmRhcmQgJiZcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQucmlnaHROb2RlQ291bnQgJiZcbiAgICAgICAgICAgIG5vZGVJbmRleCA8PSBwYXJlbnRFbGVtZW50LnJpZ2h0Tm9kZUNvdW50IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0TWluZE1hcEVsZW1lbnQgPSAocG9pbnQ6IFBvaW50LCByaWdodE5vZGVDb3VudDogbnVtYmVyLCBsYXlvdXQ6IE1pbmRMYXlvdXRUeXBlKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGNyZWF0ZU1pbmRFbGVtZW50KCfmgJ3nu7Tlr7zlm74nLCA3MiwgUk9PVF9ERUZBVUxUX0hFSUdIVCwgeyBzaGFwZTogTWluZE5vZGVTaGFwZS5yb3VuZFJlY3RhbmdsZSwgbGF5b3V0IH0pO1xuICAgIHJvb3QucmlnaHROb2RlQ291bnQgPSByaWdodE5vZGVDb3VudDtcbiAgICByb290LmlzUm9vdCA9IHRydWU7XG4gICAgcm9vdC50eXBlID0gJ21pbmRtYXAnO1xuICAgIHJvb3QucG9pbnRzID0gW3BvaW50XTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFsxLCAxLCAxXS5tYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWluZEVsZW1lbnQoJ+aWsOW7uuiKgueCuScsIDU2LCBURVhUX0RFRkFVTFRfSEVJR0hULCB7IHNoYXBlOiBNaW5kTm9kZVNoYXBlLnJvdW5kUmVjdGFuZ2xlIH0pO1xuICAgIH0pO1xuICAgIHJvb3QuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICByZXR1cm4gcm9vdDtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNaW5kRWxlbWVudCA9IChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgd2lkdGg6IG51bWJlcixcbiAgICBoZWlnaHQ6IG51bWJlcixcbiAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGw/OiBzdHJpbmc7XG4gICAgICAgIHN0cm9rZUNvbG9yPzogc3RyaW5nO1xuICAgICAgICBzdHJva2VXaWR0aD86IG51bWJlcjtcbiAgICAgICAgc2hhcGU/OiBNaW5kTm9kZVNoYXBlO1xuICAgICAgICBsYXlvdXQ/OiBNaW5kTGF5b3V0VHlwZTtcbiAgICAgICAgYnJhbmNoQ29sb3I/OiBzdHJpbmc7XG4gICAgfVxuKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudDogTWluZEVsZW1lbnQgPSB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdG9waWM6IHsgY2hpbGRyZW46IFt7IHRleHQgfV0gfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdGlvbnMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiBvcHRpb25zLnN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZTogb3B0aW9ucy5zaGFwZVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuZmlsbCkge1xuICAgICAgICBuZXdFbGVtZW50LmZpbGwgPSBvcHRpb25zLmZpbGw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0cm9rZUNvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlQ29sb3IgPSBvcHRpb25zLnN0cm9rZUNvbG9yO1xuICAgIH1cbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMuc3Ryb2tlV2lkdGgpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlV2lkdGggPSBvcHRpb25zLnN0cm9rZVdpZHRoO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBuZXdFbGVtZW50LnNoYXBlID0gb3B0aW9ucy5zaGFwZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGF5b3V0KSB7XG4gICAgICAgIG5ld0VsZW1lbnQubGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJyYW5jaENvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuYnJhbmNoQ29sb3IgPSBvcHRpb25zLmJyYW5jaENvbG9yO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8vIGxheW91dExldmVsIOeUqOadpeihqOekuuaPkuWFpeWFhOW8n+iKgueCuei/mOaYr+WtkOiKgueCuVxuZXhwb3J0IGNvbnN0IGluc2VydE1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBpbmhlcml0Tm9kZTogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBsZXQgZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZSA9IE1pbmROb2RlU2hhcGUucm91bmRSZWN0YW5nbGU7XG4gICAgaWYgKCFpbmhlcml0Tm9kZS5pc1Jvb3QpIHtcbiAgICAgICAgZmlsbCA9IGluaGVyaXROb2RlLmZpbGw7XG4gICAgICAgIHN0cm9rZUNvbG9yID0gaW5oZXJpdE5vZGUuc3Ryb2tlQ29sb3I7XG4gICAgICAgIHN0cm9rZVdpZHRoID0gaW5oZXJpdE5vZGUuc3Ryb2tlV2lkdGg7XG4gICAgfVxuXG4gICAgc2hhcGUgPSBpbmhlcml0Tm9kZS5zaGFwZSBhcyBNaW5kTm9kZVNoYXBlO1xuXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGNyZWF0ZU1pbmRFbGVtZW50KCcnLCBOT0RFX01JTl9XSURUSCwgVEVYVF9ERUZBVUxUX0hFSUdIVCwgeyBmaWxsLCBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHNoYXBlIH0pO1xuXG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhuZXdFbGVtZW50KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENoaWxkID0gKGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBjaGlsZDtcbiAgICB3aGlsZSAocmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY2hpbGRyZW5bcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBmaWx0ZXJDaGlsZEVsZW1lbnQoc2VsZWN0ZWRFbGVtZW50cykucmV2ZXJzZSgpO1xuICAgIGNvbnN0IHJlbGF0aXZlQWJzdHJhY3RzOiBNaW5kRWxlbWVudFtdID0gW107XG4gICAgY29uc3QgYWNjdW11bGF0aXZlUHJvcGVydGllcyA9IG5ldyBXZWFrTWFwPE1pbmRFbGVtZW50LCB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+KCk7XG5cbiAgICBkZWxldGFibGVFbGVtZW50cy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0TWluZC5pc01pbmQobm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlaGluZEFic3RyYWN0cyA9IGdldEJlaGluZEFic3RyYWN0cyhub2RlKS5maWx0ZXIoYWJzdHJhY3QgPT4gIWRlbGV0YWJsZUVsZW1lbnRzLmluY2x1ZGVzKGFic3RyYWN0KSk7XG4gICAgICAgICAgICBpZiAoYmVoaW5kQWJzdHJhY3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGJlaGluZEFic3RyYWN0cy5mb3JFYWNoKGFic3RyYWN0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldChhYnN0cmFjdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UHJvcGVydGllcyA9IHsgc3RhcnQ6IGFic3RyYWN0LnN0YXJ0ISwgZW5kOiBhYnN0cmFjdC5lbmQhIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLnNldChhYnN0cmFjdCwgbmV3UHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUFic3RyYWN0cy5wdXNoKGFic3RyYWN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLnN0YXJ0ID0gbmV3UHJvcGVydGllcy5zdGFydCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuZW5kID0gbmV3UHJvcGVydGllcy5lbmQgLSAxO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3JyZXNwb25kaW5nQWJzdHJhY3QgPSBnZXRDb3JyZXNwb25kaW5nQWJzdHJhY3Qobm9kZSk7XG4gICAgICAgICAgICBpZiAoY29ycmVzcG9uZGluZ0Fic3RyYWN0ICYmICFkZWxldGFibGVFbGVtZW50cy5pbmNsdWRlcyhjb3JyZXNwb25kaW5nQWJzdHJhY3QpKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1Byb3BlcnRpZXMgPSBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLmdldChjb3JyZXNwb25kaW5nQWJzdHJhY3QpO1xuICAgICAgICAgICAgICAgIGlmICghbmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0aWVzID0geyBzdGFydDogY29ycmVzcG9uZGluZ0Fic3RyYWN0LnN0YXJ0ISwgZW5kOiBjb3JyZXNwb25kaW5nQWJzdHJhY3QuZW5kISB9O1xuICAgICAgICAgICAgICAgICAgICBhY2N1bXVsYXRpdmVQcm9wZXJ0aWVzLnNldChjb3JyZXNwb25kaW5nQWJzdHJhY3QsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZUFic3RyYWN0cy5wdXNoKGNvcnJlc3BvbmRpbmdBYnN0cmFjdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXMuZW5kID0gbmV3UHJvcGVydGllcy5lbmQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhYnN0cmFjdEhhbmRsZXMgPSByZWxhdGl2ZUFic3RyYWN0cy5tYXAodmFsdWUgPT4ge1xuICAgICAgICBjb25zdCBuZXdQcm9wZXJ0aWVzID0gYWNjdW11bGF0aXZlUHJvcGVydGllcy5nZXQodmFsdWUpO1xuICAgICAgICBpZiAobmV3UHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHZhbHVlIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1Byb3BlcnRpZXMuc3RhcnQgPiBuZXdQcm9wZXJ0aWVzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGUoYm9hcmQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3UHJvcGVydGllcywgcGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge307XG4gICAgfSk7XG5cbiAgICBjb25zdCBkZWxldGFibGVIYW5kbGVzID0gZGVsZXRhYmxlRWxlbWVudHMubWFwKG5vZGUgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgbm9kZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlUmlnaHROb2RlQ291bnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjaGFuZ2VSaWdodE5vZGVDb3VudChib2FyZCwgcGF0aC5zbGljZSgwLCBwYXRoLmxlbmd0aCAtIDEpLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGUoYm9hcmQsIHBhdGgpO1xuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYWJzdHJhY3RIYW5kbGVzLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbigpKTtcbiAgICBkZWxldGFibGVIYW5kbGVzLmZvckVhY2goYWN0aW9uID0+IGFjdGlvbigpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXZpZGVFbGVtZW50QnlQYXJlbnQgPSAoZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzID0gW107XG4gICAgY29uc3QgcGFyZW50RWxlbWVudHM6IE1pbmRFbGVtZW50W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KGVsZW1lbnRzW2ldKTtcbiAgICAgICAgY29uc3QgcGFyZW50SW5kZXggPSBwYXJlbnRFbGVtZW50cy5pbmRleE9mKHBhcmVudCk7XG4gICAgICAgIGlmIChwYXJlbnRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnRzLnB1c2gocGFyZW50KTtcbiAgICAgICAgICAgIGFic3RyYWN0SW5jbHVkZWRHcm91cHMucHVzaChbZWxlbWVudHNbaV1dKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFic3RyYWN0SW5jbHVkZWRHcm91cHNbcGFyZW50SW5kZXhdLnB1c2goZWxlbWVudHNbaV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHBhcmVudEVsZW1lbnRzLCBhYnN0cmFjdEluY2x1ZGVkR3JvdXBzIH07XG59O1xuIl19
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWluZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL21pbmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsVUFBVSxFQUNWLFlBQVksRUFFWixVQUFVLEVBQ2IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM3QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBb0I7SUFDbEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQXNCLENBQUM7SUFDMUUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtRQUMvQixPQUFPLFNBQVMsQ0FBQyxNQUFN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QUFFLEVBQUU7SUFDN0QsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7SUFDbEMsTUFBTSxjQUFjLEdBQWtCLEVBQUUsQ0FBQztJQUV6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUN0QyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkQsSUFBSSxXQUFXLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM1QixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO2FBQU07WUFDSCxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekQ7S0FDSjtJQUNELE9BQU8sRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQztBQUN0RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNaW5kTGF5b3V0VHlwZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50LFxuICAgIGlkQ3JlYXRvcixcbiAgICBpc051bGxPclVuZGVmaW5lZCxcbiAgICBQYXRoLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE5PREVfTUlOX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUtcnVsZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudFNoYXBlLCBNaW5kTm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0Um9vdExheW91dCB9IGZyb20gJy4vbGF5b3V0JztcbmltcG9ydCB7IFRFWFRfREVGQVVMVF9IRUlHSFQsIGdldFNpemVCeVRleHQsIFJPT1RfREVGQVVMVF9IRUlHSFQgfSBmcm9tICdAcGxhaXQvcmljaHRleHQnO1xuaW1wb3J0IHsgZW50ZXJOb2RlRWRpdGluZyB9IGZyb20gJy4vbm9kZSc7XG5pbXBvcnQgeyBNaW5kTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IGRlbGV0ZUVsZW1lbnRIYW5kbGVBYnN0cmFjdCB9IGZyb20gJy4vYWJzdHJhY3QvY29tbW9uJztcbmltcG9ydCB7IFJPT1RfVE9QSUNfRk9OVF9TSVpFLCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUtdG9waWMtc3R5bGUnO1xuaW1wb3J0IHsgTWluZFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRQYXJlbnRFbGVtZW50KGVsZW1lbnQ6IE1pbmRFbGVtZW50KTogTWluZEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoZWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQucGFyZW50Lm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRVcEVsZW1lbnQoZWxlbWVudDogTWluZEVsZW1lbnQpOiB7IHJvb3Q6IE1pbmRFbGVtZW50OyBicmFuY2g/OiBNaW5kRWxlbWVudCB9IHtcbiAgICBsZXQgYnJhbmNoO1xuICAgIGxldCByb290ID0gZWxlbWVudDtcbiAgICBsZXQgcGFyZW50ID0gZmluZFBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBicmFuY2ggPSByb290O1xuICAgICAgICByb290ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4geyByb290LCBicmFuY2ggfTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENoaWxkcmVuQ291bnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBjb3VudDogbnVtYmVyID0gZWxlbWVudC5jaGlsZHJlbi5yZWR1Y2UoKHA6IG51bWJlciwgYzogTWluZEVsZW1lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHAgKyBnZXRDaGlsZHJlbkNvdW50KGMpO1xuICAgIH0sIDApO1xuICAgIHJldHVybiBjb3VudCArIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ2hpbGRFbGVtZW50ID0gKG9yaWdpbjogTWluZEVsZW1lbnQsIGNoaWxkOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChjaGlsZCk7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50ID09PSBvcmlnaW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IGZpbmRQYXJlbnRFbGVtZW50KHBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJDaGlsZEVsZW1lbnQgPSAoZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNaW5kRWxlbWVudFtdID0gW107XG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgaXNDaGlsZCA9IGVsZW1lbnRzLnNvbWUobm9kZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXNDaGlsZEVsZW1lbnQobm9kZSwgZWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghaXNDaGlsZCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ2hpbGRSaWdodCA9IChub2RlOiBNaW5kTm9kZSwgY2hpbGQ6IE1pbmROb2RlKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUueCA8IGNoaWxkLng7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDaGlsZFVwID0gKG5vZGU6IE1pbmROb2RlLCBjaGlsZDogTWluZE5vZGUpID0+IHtcbiAgICByZXR1cm4gbm9kZS55ID4gY2hpbGQueTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb3B5TmV3Tm9kZSA9IChub2RlOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IG5ld05vZGU6IE1pbmRFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgbmV3Tm9kZS5pZCA9IGlkQ3JlYXRvcigpO1xuICAgIG5ld05vZGUuY2hpbGRyZW4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgbmV3Tm9kZS5jaGlsZHJlbi5wdXNoKGNvcHlOZXdOb2RlKGNoaWxkTm9kZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3Tm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Sb290VG9Ob2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBub2RlOiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IG5ld05vZGU6IE1pbmRFbGVtZW50ID0geyAuLi5ub2RlIH07XG4gICAgZGVsZXRlIG5ld05vZGUuaXNSb290O1xuICAgIGRlbGV0ZSBuZXdOb2RlLnJpZ2h0Tm9kZUNvdW50O1xuICAgIGRlbGV0ZSBuZXdOb2RlLnR5cGU7XG5cbiAgICBjb25zdCB0ZXh0ID0gTm9kZS5zdHJpbmcobm9kZS5kYXRhLnRvcGljLmNoaWxkcmVuWzBdKSB8fCAnICc7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRTaXplQnlUZXh0KHRleHQsIFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpLCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5UKTtcblxuICAgIG5ld05vZGUud2lkdGggPSBNYXRoLm1heCh3aWR0aCwgTk9ERV9NSU5fV0lEVEgpO1xuICAgIG5ld05vZGUuaGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgaWYgKG5ld05vZGUubGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5zdGFuZGFyZCkge1xuICAgICAgICBkZWxldGUgbmV3Tm9kZS5sYXlvdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld05vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtQWJzdHJhY3RUb05vZGUgPSAobm9kZTogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBuZXdOb2RlOiBNaW5kRWxlbWVudCA9IHsgLi4ubm9kZSB9O1xuICAgIGRlbGV0ZSBuZXdOb2RlLnN0YXJ0O1xuICAgIGRlbGV0ZSBuZXdOb2RlLmVuZDtcblxuICAgIHJldHVybiBuZXdOb2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU5vZGVUb1Jvb3QgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5vZGU6IE1pbmRFbGVtZW50KTogTWluZEVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSB7IC4uLm5vZGUgfTtcbiAgICBsZXQgdGV4dCA9IE5vZGUuc3RyaW5nKG5ld0VsZW1lbnQuZGF0YS50b3BpYyk7XG5cbiAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgdGV4dCA9ICfmgJ3nu7Tlr7zlm74nO1xuICAgICAgICBuZXdFbGVtZW50LmRhdGEudG9waWMgPSB7IGNoaWxkcmVuOiBbeyB0ZXh0IH1dIH07XG4gICAgfVxuXG4gICAgZGVsZXRlIG5ld0VsZW1lbnQ/LnN0cm9rZUNvbG9yO1xuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5maWxsO1xuICAgIGRlbGV0ZSBuZXdFbGVtZW50Py5zaGFwZTtcbiAgICBkZWxldGUgbmV3RWxlbWVudD8uc3Ryb2tlV2lkdGg7XG5cbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFNpemVCeVRleHQoXG4gICAgICAgIHRleHQsXG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpLFxuICAgICAgICBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5ULFxuICAgICAgICBST09UX1RPUElDX0ZPTlRfU0laRVxuICAgICk7XG4gICAgbmV3RWxlbWVudC53aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBOT0RFX01JTl9XSURUSCk7XG4gICAgbmV3RWxlbWVudC5oZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5uZXdFbGVtZW50LFxuICAgICAgICBsYXlvdXQ6IG5ld0VsZW1lbnQubGF5b3V0ID8/IE1pbmRMYXlvdXRUeXBlLnJpZ2h0LFxuICAgICAgICBpc0NvbGxhcHNlZDogZmFsc2UsXG4gICAgICAgIGlzUm9vdDogdHJ1ZSxcbiAgICAgICAgdHlwZTogJ21pbmRtYXAnXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0Tm9kZXNUZXh0ID0gKG5vZGU6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIHN0ciArPSBOb2RlLnN0cmluZyhub2RlLmRhdGEudG9waWMuY2hpbGRyZW5bMF0pICsgJyAnO1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBzdHIgKz0gZXh0cmFjdE5vZGVzVGV4dChjaGlsZE5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgY2hhbmdlUmlnaHROb2RlQ291bnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBhcmVudFBhdGg6IFBhdGgsIGNoYW5nZU51bWJlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgX3JpZ2h0Tm9kZUNvdW50ID0gYm9hcmQuY2hpbGRyZW5bcGFyZW50UGF0aFswXV0ucmlnaHROb2RlQ291bnQ7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICBib2FyZCxcbiAgICAgICAge1xuICAgICAgICAgICAgcmlnaHROb2RlQ291bnQ6XG4gICAgICAgICAgICAgICAgY2hhbmdlTnVtYmVyID49IDBcbiAgICAgICAgICAgICAgICAgICAgPyBfcmlnaHROb2RlQ291bnQhICsgY2hhbmdlTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIDogX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlciA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogX3JpZ2h0Tm9kZUNvdW50ISArIGNoYW5nZU51bWJlclxuICAgICAgICB9LFxuICAgICAgICBwYXJlbnRQYXRoXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRDaGFuZ2VSaWdodE5vZGVDb3VudCA9IChzZWxlY3RlZEVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IGZpbmRQYXJlbnRFbGVtZW50KHNlbGVjdGVkRWxlbWVudCk7XG4gICAgaWYgKHBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUluZGV4OiBudW1iZXIgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IHNlbGVjdGVkRWxlbWVudC5pZCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudEVsZW1lbnQuaXNSb290ICYmXG4gICAgICAgICAgICBnZXRSb290TGF5b3V0KHBhcmVudEVsZW1lbnQpID09PSBNaW5kTGF5b3V0VHlwZS5zdGFuZGFyZCAmJlxuICAgICAgICAgICAgcGFyZW50RWxlbWVudC5yaWdodE5vZGVDb3VudCAmJlxuICAgICAgICAgICAgbm9kZUluZGV4IDw9IHBhcmVudEVsZW1lbnQucmlnaHROb2RlQ291bnQgLSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlZmF1bHRNaW5kTWFwRWxlbWVudCA9IChwb2ludDogUG9pbnQsIHJpZ2h0Tm9kZUNvdW50OiBudW1iZXIsIGxheW91dDogTWluZExheW91dFR5cGUpID0+IHtcbiAgICBjb25zdCByb290ID0gY3JlYXRlTWluZEVsZW1lbnQoJ+aAnee7tOWvvOWbvicsIDcyLCBST09UX0RFRkFVTFRfSEVJR0hULCB7IHNoYXBlOiBNaW5kRWxlbWVudFNoYXBlLnJvdW5kUmVjdGFuZ2xlLCBsYXlvdXQgfSk7XG4gICAgcm9vdC5yaWdodE5vZGVDb3VudCA9IHJpZ2h0Tm9kZUNvdW50O1xuICAgIHJvb3QuaXNSb290ID0gdHJ1ZTtcbiAgICByb290LnR5cGUgPSAnbWluZG1hcCc7XG4gICAgcm9vdC5wb2ludHMgPSBbcG9pbnRdO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gWzEsIDEsIDFdLm1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNaW5kRWxlbWVudCgn5paw5bu66IqC54K5JywgNTYsIFRFWFRfREVGQVVMVF9IRUlHSFQsIHsgc2hhcGU6IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGUgfSk7XG4gICAgfSk7XG4gICAgcm9vdC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIHJldHVybiByb290O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1pbmRFbGVtZW50ID0gKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICB3aWR0aDogbnVtYmVyLFxuICAgIGhlaWdodDogbnVtYmVyLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgZmlsbD86IHN0cmluZztcbiAgICAgICAgc3Ryb2tlQ29sb3I/OiBzdHJpbmc7XG4gICAgICAgIHN0cm9rZVdpZHRoPzogbnVtYmVyO1xuICAgICAgICBzaGFwZT86IE1pbmRFbGVtZW50U2hhcGU7XG4gICAgICAgIGxheW91dD86IE1pbmRMYXlvdXRUeXBlO1xuICAgICAgICBicmFuY2hDb2xvcj86IHN0cmluZztcbiAgICAgICAgYnJhbmNoV2lkdGg/OiBudW1iZXI7XG4gICAgfVxuKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudDogTWluZEVsZW1lbnQgPSB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgdG9waWM6IHsgY2hpbGRyZW46IFt7IHRleHQgfV0gfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGZpbGw6IG9wdGlvbnMuZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3I6IG9wdGlvbnMuc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiBvcHRpb25zLnN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZTogb3B0aW9ucy5zaGFwZVxuICAgIH07XG4gICAgaWYgKG9wdGlvbnMuZmlsbCkge1xuICAgICAgICBuZXdFbGVtZW50LmZpbGwgPSBvcHRpb25zLmZpbGw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnN0cm9rZUNvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlQ29sb3IgPSBvcHRpb25zLnN0cm9rZUNvbG9yO1xuICAgIH1cbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMuc3Ryb2tlV2lkdGgpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuc3Ryb2tlV2lkdGggPSBvcHRpb25zLnN0cm9rZVdpZHRoO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaGFwZSkge1xuICAgICAgICBuZXdFbGVtZW50LnNoYXBlID0gb3B0aW9ucy5zaGFwZTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubGF5b3V0KSB7XG4gICAgICAgIG5ld0VsZW1lbnQubGF5b3V0ID0gb3B0aW9ucy5sYXlvdXQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJyYW5jaENvbG9yKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuYnJhbmNoQ29sb3IgPSBvcHRpb25zLmJyYW5jaENvbG9yO1xuICAgIH1cbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKG9wdGlvbnMuYnJhbmNoV2lkdGgpKSB7XG4gICAgICAgIG5ld0VsZW1lbnQuYnJhbmNoV2lkdGggPSBvcHRpb25zLmJyYW5jaFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8vIGxheW91dExldmVsIOeUqOadpeihqOekuuaPkuWFpeWFhOW8n+iKgueCuei/mOaYr+WtkOiKgueCuVxuZXhwb3J0IGNvbnN0IGluc2VydE1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBpbmhlcml0Tm9kZTogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBsZXQgZmlsbCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoLFxuICAgICAgICBzaGFwZSA9IE1pbmRFbGVtZW50U2hhcGUucm91bmRSZWN0YW5nbGU7XG4gICAgaWYgKCFpbmhlcml0Tm9kZS5pc1Jvb3QpIHtcbiAgICAgICAgZmlsbCA9IGluaGVyaXROb2RlLmZpbGw7XG4gICAgICAgIHN0cm9rZUNvbG9yID0gaW5oZXJpdE5vZGUuc3Ryb2tlQ29sb3I7XG4gICAgICAgIHN0cm9rZVdpZHRoID0gaW5oZXJpdE5vZGUuc3Ryb2tlV2lkdGg7XG4gICAgfVxuXG4gICAgc2hhcGUgPSBpbmhlcml0Tm9kZS5zaGFwZSBhcyBNaW5kRWxlbWVudFNoYXBlO1xuXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGNyZWF0ZU1pbmRFbGVtZW50KCcnLCBOT0RFX01JTl9XSURUSCwgVEVYVF9ERUZBVUxUX0hFSUdIVCwgeyBmaWxsLCBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHNoYXBlIH0pO1xuXG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZW50ZXJOb2RlRWRpdGluZyhuZXdFbGVtZW50KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kTGFzdENoaWxkID0gKGNoaWxkOiBNaW5kTm9kZSkgPT4ge1xuICAgIGxldCByZXN1bHQgPSBjaGlsZDtcbiAgICB3aGlsZSAocmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuY2hpbGRyZW5bcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVNlbGVjdGVkRUxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBkZWxldGFibGVFbGVtZW50cyA9IGZpbHRlckNoaWxkRWxlbWVudChzZWxlY3RlZEVsZW1lbnRzKS5yZXZlcnNlKCk7XG5cbiAgICBjb25zdCBhYnN0cmFjdFJlZnMgPSBkZWxldGVFbGVtZW50SGFuZGxlQWJzdHJhY3QoYm9hcmQsIGRlbGV0YWJsZUVsZW1lbnRzKTtcbiAgICBNaW5kVHJhbnNmb3Jtcy5zZXRBYnN0cmFjdHNCeVJlZnMoYm9hcmQsIGFic3RyYWN0UmVmcyk7XG5cbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgZGVsZXRhYmxlRWxlbWVudHNcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5nZVJpZ2h0Tm9kZUNvdW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCBwYXRoLnNsaWNlKDAsIDEpLCAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMucmVtb3ZlTm9kZShib2FyZCwgcGF0aCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRpdmlkZUVsZW1lbnRCeVBhcmVudCA9IChlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IGFic3RyYWN0SW5jbHVkZWRHcm91cHMgPSBbXTtcbiAgICBjb25zdCBwYXJlbnRFbGVtZW50czogTWluZEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudHNbaV0pO1xuICAgICAgICBjb25zdCBwYXJlbnRJbmRleCA9IHBhcmVudEVsZW1lbnRzLmluZGV4T2YocGFyZW50KTtcbiAgICAgICAgaWYgKHBhcmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcGFyZW50RWxlbWVudHMucHVzaChwYXJlbnQpO1xuICAgICAgICAgICAgYWJzdHJhY3RJbmNsdWRlZEdyb3Vwcy5wdXNoKFtlbGVtZW50c1tpXV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWJzdHJhY3RJbmNsdWRlZEdyb3Vwc1twYXJlbnRJbmRleF0ucHVzaChlbGVtZW50c1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgcGFyZW50RWxlbWVudHMsIGFic3RyYWN0SW5jbHVkZWRHcm91cHMgfTtcbn07XG4iXX0=
|
|
@@ -36,10 +36,10 @@ const getVerticalSpaceBetweenNodeAndText = (element) => {
|
|
|
36
36
|
return nodeAndText;
|
|
37
37
|
};
|
|
38
38
|
export const NodeSpace = {
|
|
39
|
-
getNodeWidth(element) {
|
|
39
|
+
getNodeWidth(board, element) {
|
|
40
40
|
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);
|
|
41
41
|
if (MindElement.hasEmojis(element)) {
|
|
42
|
-
return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element) + element.width + nodeAndText;
|
|
42
|
+
return nodeAndText + getEmojisRectangle(board, element).width + getHorizontalSpaceEmojiAndText(element) + element.width + nodeAndText;
|
|
43
43
|
}
|
|
44
44
|
return nodeAndText + element.width + nodeAndText;
|
|
45
45
|
},
|
|
@@ -47,10 +47,10 @@ export const NodeSpace = {
|
|
|
47
47
|
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
48
48
|
return nodeAndText + element.height + nodeAndText;
|
|
49
49
|
},
|
|
50
|
-
getTextHorizontalSpace(element) {
|
|
50
|
+
getTextHorizontalSpace(board, element) {
|
|
51
51
|
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(element);
|
|
52
52
|
if (MindElement.hasEmojis(element)) {
|
|
53
|
-
return nodeAndText + getEmojisRectangle(element).width + getHorizontalSpaceEmojiAndText(element);
|
|
53
|
+
return nodeAndText + getEmojisRectangle(board, element).width + getHorizontalSpaceEmojiAndText(element);
|
|
54
54
|
}
|
|
55
55
|
else {
|
|
56
56
|
return nodeAndText;
|
|
@@ -69,4 +69,4 @@ export const NodeSpace = {
|
|
|
69
69
|
return nodeAndText;
|
|
70
70
|
}
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1zcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL25vZGUtc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHNUQsTUFBTSxnQkFBZ0IsR0FBRztJQUNyQixVQUFVLEVBQUU7UUFDUixXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDckIsWUFBWSxFQUFFLElBQUksR0FBRyxHQUFHO0tBQzNCO0lBQ0QsUUFBUSxFQUFFO1FBQ04sV0FBVyxFQUFFLElBQUksR0FBRyxHQUFHO0tBQzFCO0NBQ0osQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsVUFBVSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ3JCLFlBQVksRUFBRSxJQUFJLEdBQUcsQ0FBQztLQUN6QjtJQUNELFFBQVEsRUFBRTtRQUNOLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQztLQUN4QjtDQUNKLENBQUM7QUFFRixNQUFNLG9DQUFvQyxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQy9HLE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7SUFDbEgsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUNoRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUMzRyxPQUFPLFdBQVcsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUc7SUFDckIsWUFBWSxDQUFDLEtBQXFCLEVBQUUsT0FBb0I7UUFDcEQsTUFBTSxXQUFXLEdBQUcsb0NBQW9DLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sV0FBVyxHQUFHLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsOEJBQThCLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7U0FDekk7UUFDRCxPQUFPLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsYUFBYSxDQUFDLE9BQW9CO1FBQzlCLE1BQU0sV0FBVyxHQUFHLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxLQUFxQixFQUFFLE9BQW9CO1FBQzlELE1BQU0sV0FBVyxHQUFHLG9DQUFvQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoQyxPQUFPLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNHO2FBQU07WUFDSCxPQUFPLFdBQVcsQ0FBQztTQUN0QjtJQUNMLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxPQUFvQjtRQUNyQyxNQUFNLFdBQVcsR0FBRyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0QsdUJBQXVCLENBQUMsT0FBb0I7UUFDeEMsTUFBTSxXQUFXLEdBQUcsb0NBQW9DLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEUsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUNELHFCQUFxQixDQUFDLE9BQW9CO1FBQ3RDLE1BQU0sV0FBVyxHQUFHLGtDQUFrQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQkFTRSB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IFBsYWl0TWluZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRFbW9qaXNSZWN0YW5nbGUgfSBmcm9tICcuLi9wbHVnaW5zL2Vtb2ppL2Vtb2ppJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWV4dGVuZC1taW5kJztcblxuY29uc3QgTm9kZURlZmF1bHRTcGFjZSA9IHtcbiAgICBob3Jpem9udGFsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMyxcbiAgICAgICAgZW1vamlBbmRUZXh0OiBCQVNFICogMS41XG4gICAgfSxcbiAgICB2ZXJ0aWNhbDoge1xuICAgICAgICBub2RlQW5kVGV4dDogQkFTRSAqIDEuNVxuICAgIH1cbn07XG5cbmNvbnN0IFJvb3REZWZhdWx0U3BhY2UgPSB7XG4gICAgaG9yaXpvbnRhbDoge1xuICAgICAgICBub2RlQW5kVGV4dDogQkFTRSAqIDQsXG4gICAgICAgIGVtb2ppQW5kVGV4dDogQkFTRSAqIDJcbiAgICB9LFxuICAgIHZlcnRpY2FsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMlxuICAgIH1cbn07XG5cbmNvbnN0IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGlzTWluZCA9IFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLmhvcml6b250YWwubm9kZUFuZFRleHQgOiBOb2RlRGVmYXVsdFNwYWNlLmhvcml6b250YWwubm9kZUFuZFRleHQ7XG4gICAgcmV0dXJuIG5vZGVBbmRUZXh0O1xufTtcblxuY29uc3QgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0ID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaXNNaW5kID0gUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KTtcbiAgICBjb25zdCBlbW9qaUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLmhvcml6b250YWwuZW1vamlBbmRUZXh0IDogTm9kZURlZmF1bHRTcGFjZS5ob3Jpem9udGFsLmVtb2ppQW5kVGV4dDtcbiAgICByZXR1cm4gZW1vamlBbmRUZXh0O1xufTtcblxuY29uc3QgZ2V0VmVydGljYWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGlzTWluZCA9IFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUFuZFRleHQgPSBpc01pbmQgPyBSb290RGVmYXVsdFNwYWNlLnZlcnRpY2FsLm5vZGVBbmRUZXh0IDogTm9kZURlZmF1bHRTcGFjZS52ZXJ0aWNhbC5ub2RlQW5kVGV4dDtcbiAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgTm9kZVNwYWNlID0ge1xuICAgIGdldE5vZGVXaWR0aChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0SG9yaXpvbnRhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaGFzRW1vamlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBnZXRFbW9qaXNSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQpLndpZHRoICsgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0KGVsZW1lbnQpICsgZWxlbWVudC53aWR0aCArIG5vZGVBbmRUZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlQW5kVGV4dCArIGVsZW1lbnQud2lkdGggKyBub2RlQW5kVGV4dDtcbiAgICB9LFxuICAgIGdldE5vZGVIZWlnaHQoZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUFuZFRleHQgPSBnZXRWZXJ0aWNhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBlbGVtZW50LmhlaWdodCArIG5vZGVBbmRUZXh0O1xuICAgIH0sXG4gICAgZ2V0VGV4dEhvcml6b250YWxTcGFjZShib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0SG9yaXpvbnRhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaGFzRW1vamlzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBnZXRFbW9qaXNSZWN0YW5nbGUoYm9hcmQsIGVsZW1lbnQpLndpZHRoICsgZ2V0SG9yaXpvbnRhbFNwYWNlRW1vamlBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVBbmRUZXh0O1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXRUZXh0VmVydGljYWxTcGFjZShlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldFZlcnRpY2FsU3BhY2VCZXR3ZWVuTm9kZUFuZFRleHQoZWxlbWVudCk7XG4gICAgICAgIHJldHVybiBub2RlQW5kVGV4dDtcbiAgICB9LFxuICAgIGdldEVtb2ppSG9yaXpvbnRhbFNwYWNlKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0SG9yaXpvbnRhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgfSxcbiAgICBnZXRFbW9qaVZlcnRpY2FsU3BhY2UoZWxlbWVudDogTWluZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgbm9kZUFuZFRleHQgPSBnZXRWZXJ0aWNhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Processing of branch color, width, style, etc. of the mind node
|
|
3
|
+
*/
|
|
4
|
+
import { isNullOrUndefined } from '@plait/core';
|
|
1
5
|
import { MindElement } from '../../interfaces/element';
|
|
2
|
-
import {
|
|
6
|
+
import { BRANCH_COLORS } from '../../constants/node-style';
|
|
7
|
+
import { BRANCH_WIDTH } from '../../constants/default';
|
|
8
|
+
import { DefaultAbstractNodeStyle } from '../../constants/node-style';
|
|
3
9
|
export const getBranchColorByMindElement = (board, element) => {
|
|
4
10
|
const ancestors = MindElement.getAncestors(board, element);
|
|
5
11
|
ancestors.unshift(element);
|
|
@@ -11,18 +17,39 @@ export const getBranchColorByMindElement = (board, element) => {
|
|
|
11
17
|
const branch = ancestors[ancestors.length - 2];
|
|
12
18
|
if (branch) {
|
|
13
19
|
const index = root.children.indexOf(branch);
|
|
14
|
-
const length =
|
|
20
|
+
const length = BRANCH_COLORS.length;
|
|
15
21
|
const remainder = index % length;
|
|
16
|
-
return
|
|
22
|
+
return BRANCH_COLORS[remainder];
|
|
17
23
|
}
|
|
18
24
|
else {
|
|
19
25
|
throw new Error('root element should not have branch color');
|
|
20
26
|
}
|
|
21
27
|
};
|
|
28
|
+
export const getBranchWidthByMindElement = (board, element) => {
|
|
29
|
+
const ancestors = MindElement.getAncestors(board, element);
|
|
30
|
+
ancestors.unshift(element);
|
|
31
|
+
const ancestor = ancestors.find(value => value.branchColor);
|
|
32
|
+
if (ancestor && ancestor.branchWidth) {
|
|
33
|
+
return ancestor.branchWidth;
|
|
34
|
+
}
|
|
35
|
+
return BRANCH_WIDTH;
|
|
36
|
+
};
|
|
37
|
+
export const getAbstractBranchWidth = (board, element) => {
|
|
38
|
+
if (!isNullOrUndefined(element.branchWidth)) {
|
|
39
|
+
return element.branchWidth;
|
|
40
|
+
}
|
|
41
|
+
return DefaultAbstractNodeStyle.branchWidth;
|
|
42
|
+
};
|
|
43
|
+
export const getAbstractBranchColor = (board, element) => {
|
|
44
|
+
if (element.branchColor) {
|
|
45
|
+
return element.branchColor;
|
|
46
|
+
}
|
|
47
|
+
return DefaultAbstractNodeStyle.branchColor;
|
|
48
|
+
};
|
|
22
49
|
export const getNextBranchColor = (root) => {
|
|
23
50
|
const index = root.children.length;
|
|
24
|
-
const length =
|
|
51
|
+
const length = BRANCH_COLORS.length;
|
|
25
52
|
const remainder = index % length;
|
|
26
|
-
return
|
|
53
|
+
return BRANCH_COLORS[remainder];
|
|
27
54
|
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvbm9kZS1zdHlsZS9icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxPQUFPLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQW9CLEVBQUUsRUFBRTtJQUNuRixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQWtCLENBQUM7SUFDNUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUU7UUFDbEMsT0FBTyxRQUFRLENBQUMsV0FBVyxDQUFDO0tBQy9CO0lBRUQsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0MsSUFBSSxNQUFNLEVBQUU7UUFDUixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDakMsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDbkM7U0FBTTtRQUNILE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztLQUNoRTtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFvQixFQUFFLEVBQUU7SUFDbkYsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQzVFLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ2xDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQztLQUMvQjtJQUNELE9BQU8sWUFBWSxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFvQixFQUFFLEVBQUU7SUFDOUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUN6QyxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7S0FDOUI7SUFDRCxPQUFPLHdCQUF3QixDQUFDLFdBQVcsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO0lBQzlFLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtRQUNyQixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7S0FDOUI7SUFDRCxPQUFPLHdCQUF3QixDQUFDLFdBQVcsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRTtJQUNwRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7SUFDakMsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQcm9jZXNzaW5nIG9mIGJyYW5jaCBjb2xvciwgd2lkdGgsIHN0eWxlLCBldGMuIG9mIHRoZSBtaW5kIG5vZGVcbiAqL1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBCUkFOQ0hfQ09MT1JTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtc3R5bGUnO1xuaW1wb3J0IHsgQlJBTkNIX1dJRFRIIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgRGVmYXVsdEFic3RyYWN0Tm9kZVN0eWxlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtc3R5bGUnO1xuXG5leHBvcnQgY29uc3QgZ2V0QnJhbmNoQ29sb3JCeU1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGFuY2VzdG9ycyA9IE1pbmRFbGVtZW50LmdldEFuY2VzdG9ycyhib2FyZCwgZWxlbWVudCkgYXMgTWluZEVsZW1lbnRbXTtcbiAgICBhbmNlc3RvcnMudW5zaGlmdChlbGVtZW50KTtcbiAgICBjb25zdCBhbmNlc3RvciA9IGFuY2VzdG9ycy5maW5kKHZhbHVlID0+IHZhbHVlLmJyYW5jaENvbG9yKTtcbiAgICBpZiAoYW5jZXN0b3IgJiYgYW5jZXN0b3IuYnJhbmNoQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9yLmJyYW5jaENvbG9yO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSBhbmNlc3RvcnNbYW5jZXN0b3JzLmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IGJyYW5jaCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMl07XG4gICAgaWYgKGJyYW5jaCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHJvb3QuY2hpbGRyZW4uaW5kZXhPZihicmFuY2gpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBCUkFOQ0hfQ09MT1JTLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gaW5kZXggJSBsZW5ndGg7XG4gICAgICAgIHJldHVybiBCUkFOQ0hfQ09MT1JTW3JlbWFpbmRlcl07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyb290IGVsZW1lbnQgc2hvdWxkIG5vdCBoYXZlIGJyYW5jaCBjb2xvcicpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCcmFuY2hXaWR0aEJ5TWluZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gTWluZEVsZW1lbnQuZ2V0QW5jZXN0b3JzKGJvYXJkLCBlbGVtZW50KSBhcyBNaW5kRWxlbWVudFtdO1xuICAgIGFuY2VzdG9ycy51bnNoaWZ0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpbmQodmFsdWUgPT4gdmFsdWUuYnJhbmNoQ29sb3IpO1xuICAgIGlmIChhbmNlc3RvciAmJiBhbmNlc3Rvci5icmFuY2hXaWR0aCkge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3IuYnJhbmNoV2lkdGg7XG4gICAgfVxuICAgIHJldHVybiBCUkFOQ0hfV0lEVEg7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWJzdHJhY3RCcmFuY2hXaWR0aCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGVsZW1lbnQuYnJhbmNoV2lkdGgpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmJyYW5jaFdpZHRoO1xuICAgIH1cbiAgICByZXR1cm4gRGVmYXVsdEFic3RyYWN0Tm9kZVN0eWxlLmJyYW5jaFdpZHRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFic3RyYWN0QnJhbmNoQ29sb3IgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuYnJhbmNoQ29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuYnJhbmNoQ29sb3I7XG4gICAgfVxuICAgIHJldHVybiBEZWZhdWx0QWJzdHJhY3ROb2RlU3R5bGUuYnJhbmNoQ29sb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV4dEJyYW5jaENvbG9yID0gKHJvb3Q6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSByb290LmNoaWxkcmVuLmxlbmd0aDtcbiAgICBjb25zdCBsZW5ndGggPSBCUkFOQ0hfQ09MT1JTLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSBpbmRleCAlIGxlbmd0aDtcbiAgICByZXR1cm4gQlJBTkNIX0NPTE9SU1tyZW1haW5kZXJdO1xufTtcbiJdfQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MindElement } from '../../interfaces/element';
|
|
2
|
-
import {
|
|
2
|
+
import { BRANCH_COLORS } from '../../constants/node-style';
|
|
3
|
+
import { DefaultRootStyle } from '../../constants/node-style';
|
|
3
4
|
export const getStrokeByMindElement = (board, element) => {
|
|
4
5
|
const ancestors = MindElement.getAncestors(board, element);
|
|
5
6
|
ancestors.unshift(element);
|
|
@@ -11,12 +12,12 @@ export const getStrokeByMindElement = (board, element) => {
|
|
|
11
12
|
const branch = ancestors[ancestors.length - 2];
|
|
12
13
|
if (branch) {
|
|
13
14
|
const index = root.children.indexOf(branch);
|
|
14
|
-
const length =
|
|
15
|
+
const length = BRANCH_COLORS.length;
|
|
15
16
|
const remainder = index % length;
|
|
16
|
-
return
|
|
17
|
+
return BRANCH_COLORS[remainder];
|
|
17
18
|
}
|
|
18
19
|
else {
|
|
19
|
-
return
|
|
20
|
+
return DefaultRootStyle.strokeColor;
|
|
20
21
|
}
|
|
21
22
|
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL25vZGUtc3R5bGUvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFvQixFQUFFLEVBQUU7SUFDOUUsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFrQixDQUFDO0lBQzVFLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM1RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ2xDLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQztLQUMvQjtJQUVELE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9DLElBQUksTUFBTSxFQUFFO1FBQ1IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ25DO1NBQU07UUFDSCxPQUFPLGdCQUFnQixDQUFDLFdBQVcsQ0FBQztLQUN2QztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBCUkFOQ0hfQ09MT1JTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL25vZGUtc3R5bGUnO1xuaW1wb3J0IHsgRGVmYXVsdFJvb3RTdHlsZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXN0eWxlJztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZUJ5TWluZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gTWluZEVsZW1lbnQuZ2V0QW5jZXN0b3JzKGJvYXJkLCBlbGVtZW50KSBhcyBNaW5kRWxlbWVudFtdO1xuICAgIGFuY2VzdG9ycy51bnNoaWZ0KGVsZW1lbnQpO1xuICAgIGNvbnN0IGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpbmQodmFsdWUgPT4gdmFsdWUuc3Ryb2tlQ29sb3IpO1xuICAgIGlmIChhbmNlc3RvciAmJiBhbmNlc3Rvci5zdHJva2VDb2xvcikge1xuICAgICAgICByZXR1cm4gYW5jZXN0b3Iuc3Ryb2tlQ29sb3I7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IGFuY2VzdG9yc1thbmNlc3RvcnMubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYnJhbmNoID0gYW5jZXN0b3JzW2FuY2VzdG9ycy5sZW5ndGggLSAyXTtcbiAgICBpZiAoYnJhbmNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gcm9vdC5jaGlsZHJlbi5pbmRleE9mKGJyYW5jaCk7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IEJSQU5DSF9DT0xPUlMubGVuZ3RoO1xuICAgICAgICBjb25zdCByZW1haW5kZXIgPSBpbmRleCAlIGxlbmd0aDtcbiAgICAgICAgcmV0dXJuIEJSQU5DSF9DT0xPUlNbcmVtYWluZGVyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRGVmYXVsdFJvb3RTdHlsZS5zdHJva2VDb2xvcjtcbiAgICB9XG59O1xuIl19
|
package/esm2020/utils/path.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { PlaitBoard } from '@plait/core';
|
|
2
|
-
import {
|
|
2
|
+
import { getNonAbstractChildren } from '@plait/layouts';
|
|
3
3
|
import { Path } from 'slate';
|
|
4
4
|
export function findNewChildNodePath(board, element) {
|
|
5
|
-
|
|
5
|
+
const children = getNonAbstractChildren(element);
|
|
6
|
+
return PlaitBoard.findPath(board, element).concat(children.length);
|
|
6
7
|
}
|
|
7
8
|
export function findNewSiblingNodePath(board, element) {
|
|
8
9
|
const path = PlaitBoard.findPath(board, element);
|
|
9
10
|
return Path.next(path);
|
|
10
11
|
}
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3BhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBaUIsRUFBRSxPQUFxQjtJQUN6RSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkUsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFpQixFQUFFLE9BQXFCO0lBQzNFLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0Tm9uQWJzdHJhY3RDaGlsZHJlbiB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IFBhdGggfSBmcm9tICdzbGF0ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTmV3Q2hpbGROb2RlUGF0aChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXROb25BYnN0cmFjdENoaWxkcmVuKGVsZW1lbnQpO1xuICAgIHJldHVybiBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KS5jb25jYXQoY2hpbGRyZW4ubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmROZXdTaWJsaW5nTm9kZVBhdGgoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkge1xuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gUGF0aC5uZXh0KHBhdGgpO1xufVxuIl19
|
package/esm2020/utils/shape.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MindElementShape } from '../interfaces';
|
|
2
2
|
import { findParentElement } from './mind';
|
|
3
3
|
export const getNodeShapeByElement = (element) => {
|
|
4
4
|
let nodeShape = element.shape;
|
|
@@ -12,6 +12,6 @@ export const getNodeShapeByElement = (element) => {
|
|
|
12
12
|
}
|
|
13
13
|
parent = findParentElement(parent);
|
|
14
14
|
}
|
|
15
|
-
return
|
|
15
|
+
return MindElementShape.roundRectangle;
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9zaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTNDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBb0IsRUFBb0IsRUFBRTtJQUM1RSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLElBQUksU0FBUyxFQUFFO1FBQ1gsT0FBTyxTQUFTLENBQUM7S0FDcEI7SUFDRCxJQUFJLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV4QyxPQUFPLE1BQU0sRUFBRTtRQUNYLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUNkLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztTQUN2QjtRQUNELE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0FBQzNDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRFbGVtZW50LCBNaW5kRWxlbWVudFNoYXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBmaW5kUGFyZW50RWxlbWVudCB9IGZyb20gJy4vbWluZCc7XG5cbmV4cG9ydCBjb25zdCBnZXROb2RlU2hhcGVCeUVsZW1lbnQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpOiBNaW5kRWxlbWVudFNoYXBlID0+IHtcbiAgICBsZXQgbm9kZVNoYXBlID0gZWxlbWVudC5zaGFwZTtcbiAgICBpZiAobm9kZVNoYXBlKSB7XG4gICAgICAgIHJldHVybiBub2RlU2hhcGU7XG4gICAgfVxuICAgIGxldCBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChlbGVtZW50KTtcblxuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC5zaGFwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5zaGFwZTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50RWxlbWVudChwYXJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gTWluZEVsZW1lbnRTaGFwZS5yb3VuZFJlY3RhbmdsZTtcbn07XG4iXX0=
|