@plait/mind 0.3.0 → 0.4.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 (64) hide show
  1. package/drawer/{emoji.drawer.d.ts → emojis.drawer.d.ts} +2 -1
  2. package/esm2020/base/emoji-base.component.mjs +3 -3
  3. package/esm2020/drawer/emojis.drawer.mjs +73 -0
  4. package/esm2020/interfaces/element.mjs +6 -1
  5. package/esm2020/mind.component.mjs +3 -3
  6. package/esm2020/mind.module.mjs +4 -4
  7. package/esm2020/node.component.mjs +11 -15
  8. package/esm2020/plugins/with-abstract-resize.mjs +6 -2
  9. package/esm2020/plugins/with-mind-create.mjs +5 -4
  10. package/esm2020/plugins/with-mind.mjs +9 -4
  11. package/esm2020/plugins/with-node-dnd.mjs +13 -12
  12. package/esm2020/transforms/index.mjs +4 -3
  13. package/esm2020/transforms/node.mjs +11 -8
  14. package/esm2020/utils/dnd/common.mjs +29 -1
  15. package/esm2020/utils/dnd/detector.mjs +1 -7
  16. package/esm2020/utils/draw/abstract-outline.mjs +75 -0
  17. package/esm2020/utils/draw/node-dnd.mjs +133 -0
  18. package/esm2020/utils/draw/node-link/abstract-link.mjs +54 -0
  19. package/esm2020/utils/draw/node-link/draw-link.mjs +9 -0
  20. package/esm2020/utils/draw/node-link/indented-link.mjs +54 -0
  21. package/esm2020/utils/draw/node-link/logic-link.mjs +67 -0
  22. package/esm2020/utils/draw/node-shape.mjs +21 -0
  23. package/esm2020/utils/draw/node-topic.mjs +32 -0
  24. package/esm2020/utils/index.mjs +4 -2
  25. package/esm2020/utils/mind.mjs +2 -27
  26. package/esm2020/utils/node/common.mjs +6 -0
  27. package/esm2020/utils/node/index.mjs +4 -0
  28. package/esm2020/utils/node/right-node-count.mjs +45 -0
  29. package/esm2020/utils/node-style/branch.mjs +6 -1
  30. package/fesm2015/plait-mind.mjs +985 -911
  31. package/fesm2015/plait-mind.mjs.map +1 -1
  32. package/fesm2020/plait-mind.mjs +1005 -931
  33. package/fesm2020/plait-mind.mjs.map +1 -1
  34. package/interfaces/element.d.ts +5 -0
  35. package/node.component.d.ts +1 -1
  36. package/package.json +1 -1
  37. package/transforms/index.d.ts +1 -0
  38. package/transforms/node.d.ts +2 -0
  39. package/utils/dnd/common.d.ts +5 -1
  40. package/utils/dnd/detector.d.ts +0 -6
  41. package/{draw/abstract.d.ts → utils/draw/abstract-outline.d.ts} +2 -2
  42. package/utils/{dnd/draw.d.ts → draw/node-dnd.d.ts} +1 -5
  43. package/{draw/link → utils/draw/node-link}/abstract-link.d.ts +1 -1
  44. package/utils/draw/node-link/draw-link.d.ts +3 -0
  45. package/{draw → utils/draw/node-link}/indented-link.d.ts +1 -1
  46. package/utils/draw/node-link/logic-link.d.ts +3 -0
  47. package/{draw/node.d.ts → utils/draw/node-shape.d.ts} +2 -2
  48. package/{draw/topic.d.ts → utils/draw/node-topic.d.ts} +3 -3
  49. package/utils/index.d.ts +3 -1
  50. package/utils/mind.d.ts +0 -2
  51. package/utils/{node.d.ts → node/common.d.ts} +1 -1
  52. package/utils/node/index.d.ts +3 -0
  53. package/utils/node/right-node-count.d.ts +9 -0
  54. package/utils/node-style/branch.d.ts +1 -0
  55. package/draw/link/logic-link.d.ts +0 -3
  56. package/esm2020/draw/abstract.mjs +0 -75
  57. package/esm2020/draw/indented-link.mjs +0 -45
  58. package/esm2020/draw/link/abstract-link.mjs +0 -38
  59. package/esm2020/draw/link/logic-link.mjs +0 -54
  60. package/esm2020/draw/node.mjs +0 -21
  61. package/esm2020/draw/topic.mjs +0 -32
  62. package/esm2020/drawer/emoji.drawer.mjs +0 -73
  63. package/esm2020/utils/dnd/draw.mjs +0 -161
  64. package/esm2020/utils/node.mjs +0 -6
@@ -2,7 +2,7 @@ import { Path } from 'slate';
2
2
  import { MindElement } from '../interfaces/element';
3
3
  import { NODE_MIN_WIDTH } from '../constants/node-rule';
4
4
  import { PlaitBoard, PlaitNode, Transforms } from '@plait/core';
5
- import { changeRightNodeCount, getFirstLevelElement, isInRightBranchOfStandardLayout } from '../utils/mind';
5
+ import { getFirstLevelElement } from '../utils/mind';
6
6
  import { getRelativeStartEndByAbstractRef } from '../utils/abstract/common';
7
7
  export const setTopic = (board, element, topic, width, height) => {
8
8
  const newElement = {
@@ -25,16 +25,14 @@ export const setTopicSize = (board, element, width, height) => {
25
25
  Transforms.setNode(board, newElement, path);
26
26
  };
27
27
  export const removeElements = (board, elements) => {
28
- const deletableElements = getFirstLevelElement(elements).reverse();
29
- //翻转,从下到上修改,防止找不到 path
28
+ const deletableElements = getFirstLevelElement(elements);
30
29
  deletableElements
31
30
  .map(element => {
32
31
  const path = PlaitBoard.findPath(board, element);
32
+ const ref = board.pathRef(path);
33
33
  return () => {
34
- if (isInRightBranchOfStandardLayout(element)) {
35
- changeRightNodeCount(board, path.slice(0, 1), -1);
36
- }
37
- Transforms.removeNode(board, path);
34
+ Transforms.removeNode(board, ref.current);
35
+ ref.unref();
38
36
  };
39
37
  })
40
38
  .forEach(action => {
@@ -63,4 +61,9 @@ export const insertAbstractNodes = (board, validAbstractRefs, elements, path) =>
63
61
  });
64
62
  insertNodes(board, abstracts, abstractPath);
65
63
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3RyYW5zZm9ybXMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQWUsZ0NBQWdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQW9CLEVBQUUsS0FBYyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUMvRyxNQUFNLFVBQVUsR0FBRztRQUNmLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRTtRQUNmLEtBQUssRUFBRSxLQUFLLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7UUFDbEcsTUFBTSxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7S0FDeEIsQ0FBQztJQUNqQixJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDaEQ7SUFDRCxNQUFNLElBQUks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SUFBSSxDQUFDLEVBQUU7UUFDM0MsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEUsT0FBTztZQUNILEdBQUcsSUFBSSxDQUFDLFFBQVE7WUFDaEIsS0FBSyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDcEMsR0FBRyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7U0FDbkMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0lBRUgsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudCwgUGF0aCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE5PREVfTUlOX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUtcnVsZSc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdE5vZGUsIFRyYW5zZm9ybXMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBjaGFuZ2VSaWdodE5vZGVDb3VudCwgZ2V0Rmlyc3RMZXZlbEVsZW1lbnQsIGlzSW5SaWdodEJyYW5jaE9mU3RhbmRhcmRMYXlvdXQgfSBmcm9tICcuLi91dGlscy9taW5kJztcbmltcG9ydCB7IEFic3RyYWN0UmVmLCBnZXRSZWxhdGl2ZVN0YXJ0RW5kQnlBYnN0cmFjdFJlZiB9IGZyb20gJy4uL3V0aWxzL2Fic3RyYWN0L2NvbW1vbic7XG5cbmV4cG9ydCBjb25zdCBzZXRUb3BpYyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHRvcGljOiBFbGVtZW50LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSB7XG4gICAgICAgIGRhdGE6IHsgdG9waWMgfSxcbiAgICAgICAgd2lkdGg6IHdpZHRoIDwgTk9ERV9NSU5fV0lEVEggKiBib2FyZC52aWV3cG9ydC56b29tID8gTk9ERV9NSU5fV0lEVEggOiB3aWR0aCAvIGJvYXJkLnZpZXdwb3J0Lnpvb20sXG4gICAgICAgIGhlaWdodDogaGVpZ2h0IC8gYm9hcmQudmlld3BvcnQuem9vbVxuICAgIH0gYXMgTWluZEVsZW1lbnQ7XG4gICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICBuZXdFbGVtZW50LmRhdGEuZW1vamlzID0gZWxlbWVudC5kYXRhLmVtb2ppcztcbiAgICB9XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0VG9waWNTaXplID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICB3aWR0aDogd2lkdGggPCBOT0RFX01JTl9XSURUSCAqIGJvYXJkLnZpZXdwb3J0Lnpvb20gPyBOT0RFX01JTl9XSURUSCA6IHdpZHRoIC8gYm9hcmQudmlld3BvcnQuem9vbSxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBib2FyZC52aWV3cG9ydC56b29tXG4gICAgfTtcbiAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZWxlbWVudCk7XG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBkZWxldGFibGVFbGVtZW50cyA9IGdldEZpcnN0TGV2ZWxFbGVtZW50KGVsZW1lbnRzKS5yZXZlcnNlKCk7XG5cbiAgICAvL+e/u+i9rO+8jOS7juS4i+WIsOS4iuS/ruaUue+8jOmYsuatouaJvuS4jeWIsCBwYXRoXG4gICAgZGVsZXRhYmxlRWxlbWVudHNcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5SaWdodEJyYW5jaE9mU3RhbmRhcmRMYXlvdXQoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlUmlnaHROb2RlQ291bnQoYm9hcmQsIHBhdGguc2xpY2UoMCwgMSksIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCBwYXRoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgICAgICBhY3Rpb24oKTtcbiAgICAgICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Tm9kZXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdLCBwYXRoOiBQYXRoKSA9PiB7XG4gICAgY29uc3QgcGF0aFJlZiA9IGJvYXJkLnBhdGhSZWYocGF0aCk7XG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKHBhdGhSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBwYXRoUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcGF0aFJlZi51bnJlZigpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEFic3RyYWN0Tm9kZXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHZhbGlkQWJzdHJhY3RSZWZzOiBBYnN0cmFjdFJlZltdLCBlbGVtZW50czogTWluZEVsZW1lbnRbXSwgcGF0aDogUGF0aCkgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFBhdGgucGFyZW50KHBhdGgpKTtcbiAgICBjb25zdCBhYnN0cmFjdFBhdGggPSBbLi4uUGF0aC5wYXJlbnQocGF0aCksIHBhcmVudC5jaGlsZHJlbj8ubGVuZ3RoIV07XG4gICAgY29uc3QgYWJzdHJhY3RzID0gdmFsaWRBYnN0cmFjdFJlZnMubWFwKHJlZnMgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldFJlbGF0aXZlU3RhcnRFbmRCeUFic3RyYWN0UmVmKHJlZnMsIGVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnJlZnMuYWJzdHJhY3QsXG4gICAgICAgICAgICBzdGFydDogc3RhcnQgKyBwYXRoW3BhdGgubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgICBlbmQ6IGVuZCArIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgaW5zZXJ0Tm9kZXMoYm9hcmQsIGFic3RyYWN0cywgYWJzdHJhY3RQYXRoKTtcbn07XG4iXX0=
64
+ export const setRightNodeCountByRefs = (board, refs) => {
65
+ refs.forEach(ref => {
66
+ Transforms.setNode(board, { rightNodeCount: ref.rightNodeCount }, ref.path);
67
+ });
68
+ };
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3RyYW5zZm9ybXMvbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVcsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQWUsZ0NBQWdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQW9CLEVBQUUsS0FBYyxFQUFFLEtBQWEsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUMvRyxNQUFNLFVBQVUsR0FBRztRQUNmLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRTtRQUNmLEtBQUssRUFBRSxLQUFLLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7UUFDbEcsTUFBTSxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7S0FDeEIsQ0FBQztJQUNqQixJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDaEQ7SUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFD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O1FBQ3hFLE9BQU87WUFDSCxHQUFHLElBQUksQ0FBQyxRQUFRO1lBQ2hCLEtBQUssRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1NBQ25DLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUVILFdBQVcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxJQUF5QixFQUFFLEVBQUU7SUFDcEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNmLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEYsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50LCBQYXRoIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgTk9ERV9NSU5fV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMvbm9kZS1ydWxlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0Tm9kZSwgVHJhbnNmb3JtcyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldEZpcnN0TGV2ZWxFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvbWluZCc7XG5pbXBvcnQgeyBBYnN0cmFjdFJlZiwgZ2V0UmVsYXRpdmVTdGFydEVuZEJ5QWJzdHJhY3RSZWYgfSBmcm9tICcuLi91dGlscy9hYnN0cmFjdC9jb21tb24nO1xuaW1wb3J0IHsgUmlnaHROb2RlQ291bnRSZWYgfSBmcm9tICcuLi91dGlscy9ub2RlL3JpZ2h0LW5vZGUtY291bnQnO1xuXG5leHBvcnQgY29uc3Qgc2V0VG9waWMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50LCB0b3BpYzogRWxlbWVudCwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0ge1xuICAgICAgICBkYXRhOiB7IHRvcGljIH0sXG4gICAgICAgIHdpZHRoOiB3aWR0aCA8IE5PREVfTUlOX1dJRFRIICogYm9hcmQudmlld3BvcnQuem9vbSA/IE5PREVfTUlOX1dJRFRIIDogd2lkdGggLyBib2FyZC52aWV3cG9ydC56b29tLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGJvYXJkLnZpZXdwb3J0Lnpvb21cbiAgICB9IGFzIE1pbmRFbGVtZW50O1xuICAgIGlmIChNaW5kRWxlbWVudC5oYXNFbW9qaXMoZWxlbWVudCkpIHtcbiAgICAgICAgbmV3RWxlbWVudC5kYXRhLmVtb2ppcyA9IGVsZW1lbnQuZGF0YS5lbW9qaXM7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBlbGVtZW50KTtcbiAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFRvcGljU2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHtcbiAgICAgICAgd2lkdGg6IHdpZHRoIDwgTk9ERV9NSU5fV0lEVEggKiBib2FyZC52aWV3cG9ydC56b29tID8gTk9ERV9NSU5fV0lEVEggOiB3aWR0aCAvIGJvYXJkLnZpZXdwb3J0Lnpvb20sXG4gICAgICAgIGhlaWdodDogaGVpZ2h0IC8gYm9hcmQudmlld3BvcnQuem9vbVxuICAgIH07XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgZGVsZXRhYmxlRWxlbWVudHMgPSBnZXRGaXJzdExldmVsRWxlbWVudChlbGVtZW50cyk7XG5cbiAgICBkZWxldGFibGVFbGVtZW50c1xuICAgICAgICAubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgcmVmID0gYm9hcmQucGF0aFJlZihwYXRoKTtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5yZW1vdmVOb2RlKGJvYXJkLCByZWYuY3VycmVudCEpO1xuICAgICAgICAgICAgICAgIHJlZi51bnJlZigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgICAgIGFjdGlvbigpO1xuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnROb2RlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IE1pbmRFbGVtZW50W10sIHBhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBwYXRoUmVmID0gYm9hcmQucGF0aFJlZihwYXRoKTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAocGF0aFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIGVsZW1lbnQsIHBhdGhSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBwYXRoUmVmLnVucmVmKCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0QWJzdHJhY3ROb2RlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgdmFsaWRBYnN0cmFjdFJlZnM6IEFic3RyYWN0UmVmW10sIGVsZW1lbnRzOiBNaW5kRWxlbWVudFtdLCBwYXRoOiBQYXRoKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gUGxhaXROb2RlLmdldChib2FyZCwgUGF0aC5wYXJlbnQocGF0aCkpO1xuICAgIGNvbnN0IGFic3RyYWN0UGF0aCA9IFsuLi5QYXRoLnBhcmVudChwYXRoKSwgcGFyZW50LmNoaWxkcmVuPy5sZW5ndGghXTtcbiAgICBjb25zdCBhYnN0cmFjdHMgPSB2YWxpZEFic3RyYWN0UmVmcy5tYXAocmVmcyA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0UmVsYXRpdmVTdGFydEVuZEJ5QWJzdHJhY3RSZWYocmVmcywgZWxlbWVudHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ucmVmcy5hYnN0cmFjdCxcbiAgICAgICAgICAgIHN0YXJ0OiBzdGFydCArIHBhdGhbcGF0aC5sZW5ndGggLSAxXSxcbiAgICAgICAgICAgIGVuZDogZW5kICsgcGF0aFtwYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBpbnNlcnROb2Rlcyhib2FyZCwgYWJzdHJhY3RzLCBhYnN0cmFjdFBhdGgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFJpZ2h0Tm9kZUNvdW50QnlSZWZzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCByZWZzOiBSaWdodE5vZGVDb3VudFJlZltdKSA9PiB7XG4gICAgcmVmcy5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyByaWdodE5vZGVDb3VudDogcmVmLnJpZ2h0Tm9kZUNvdW50IH0sIHJlZi5wYXRoKTtcbiAgICB9KTtcbn07XG4iXX0=
@@ -1,4 +1,7 @@
1
+ import { getNonAbstractChildren, isStandardLayout } from '@plait/layouts';
2
+ import { PlaitMind } from '../../interfaces/element';
1
3
  import { PlaitElement } from '@plait/core';
4
+ import { getRootLayout } from '../layout';
2
5
  export const IS_DRAGGING = new WeakMap();
3
6
  export const addActiveOnDragOrigin = (activeElement, isOrigin = true) => {
4
7
  const activeComponent = PlaitElement.getComponent(activeElement);
@@ -32,4 +35,29 @@ export const isDragging = (board) => {
32
35
  export const setIsDragging = (board, state) => {
33
36
  IS_DRAGGING.set(board, state);
34
37
  };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvZG5kL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLGFBQTBCLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFO0lBQ2pGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFzQixDQUFDO0lBQ3RGLElBQUksUUFBUSxFQUFFO1FBQ1YsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDdEQ7U0FBTTtRQUNILGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3JEO0lBQ0QsQ0FBQyxhQUFhLENBQUMsV0FBVztRQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLGFBQTBCLEVBQUUsUUFBUSxHQUFHLElBQUksRUFBRSxFQUFFO0lBQ3BGLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFzQixDQUFDO0lBQ3RGLElBQUksUUFBUSxFQUFFO1FBQ1YsZUFBZSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7S0FDekQ7U0FBTTtRQUNILGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0tBQ3hEO0lBQ0QsQ0FBQyxhQUFhLENBQUMsV0FBVztRQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDNUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQWMsRUFBRSxFQUFFO0lBQy9ELFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5leHBvcnQgY29uc3QgSVNfRFJBR0dJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgY29uc3QgYWRkQWN0aXZlT25EcmFnT3JpZ2luID0gKGFjdGl2ZUVsZW1lbnQ6IE1pbmRFbGVtZW50LCBpc09yaWdpbiA9IHRydWUpID0+IHtcbiAgICBjb25zdCBhY3RpdmVDb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGFjdGl2ZUVsZW1lbnQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgIGlmIChpc09yaWdpbikge1xuICAgICAgICBhY3RpdmVDb21wb25lbnQuZy5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZy1vcmlnaW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVDb21wb25lbnQuZy5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZy1jaGlsZCcpO1xuICAgIH1cbiAgICAhYWN0aXZlRWxlbWVudC5pc0NvbGxhcHNlZCAmJlxuICAgICAgICBhY3RpdmVFbGVtZW50LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgYWRkQWN0aXZlT25EcmFnT3JpZ2luKGNoaWxkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUFjdGl2ZU9uRHJhZ09yaWdpbiA9IChhY3RpdmVFbGVtZW50OiBNaW5kRWxlbWVudCwgaXNPcmlnaW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgYWN0aXZlQ29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChhY3RpdmVFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAoaXNPcmlnaW4pIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmctb3JpZ2luJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LnJlbW92ZSgnZHJhZ2dpbmctY2hpbGQnKTtcbiAgICB9XG4gICAgIWFjdGl2ZUVsZW1lbnQuaXNDb2xsYXBzZWQgJiZcbiAgICAgICAgYWN0aXZlRWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIHJlbW92ZUFjdGl2ZU9uRHJhZ09yaWdpbihjaGlsZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYWdnaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfRFJBR0dJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJc0RyYWdnaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGF0ZTogYm9vbGVhbikgPT4ge1xuICAgIElTX0RSQUdHSU5HLnNldChib2FyZCwgc3RhdGUpO1xufTtcbiJdfQ==
38
+ export const hasPreviousOrNextOfDropPath = (parent, target, dropPath) => {
39
+ const children = getNonAbstractChildren(parent);
40
+ let hasPreviousNode = dropPath[dropPath.length - 1] !== 0;
41
+ let hasNextNode = dropPath[dropPath.length - 1] !== (children?.length || 0);
42
+ if (PlaitMind.isMind(parent) && isStandardLayout(getRootLayout(parent))) {
43
+ const dropStandardRightBottom = target === parent.children[parent.rightNodeCount - 1] && dropPath[dropPath.length - 1] === parent.rightNodeCount;
44
+ const dropStandardLeftTop = target === parent.children[parent.rightNodeCount] && dropPath[dropPath.length - 1] === parent.rightNodeCount;
45
+ if (dropStandardRightBottom) {
46
+ hasPreviousNode = true;
47
+ hasNextNode = false;
48
+ }
49
+ if (dropStandardLeftTop) {
50
+ hasPreviousNode = false;
51
+ hasNextNode = true;
52
+ }
53
+ }
54
+ if (parent.isCollapsed) {
55
+ hasNextNode = false;
56
+ hasPreviousNode = false;
57
+ }
58
+ return {
59
+ hasPreviousNode,
60
+ hasNextNode
61
+ };
62
+ };
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvZG5kL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRSxPQUFPLEVBQWUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbEUsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUxQyxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFOUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxhQUEwQixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUNqRixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztJQUN0RixJQUFJLFFBQVEsRUFBRTtRQUNWLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3REO1NBQU07UUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNyRDtJQUNELENBQUMsYUFBYSxDQUFDLFdBQVc7UUFDdEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxhQUEwQixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUNwRixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztJQUN0RixJQUFJLFFBQVEsRUFBRTtRQUNWLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3pEO1NBQU07UUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN4RDtJQUNELENBQUMsYUFBYSxDQUFDLFdBQVc7UUFDdEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUMvRCxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLE1BQW1CLEVBQUUsTUFBbUIsRUFBRSxRQUFjLEVBQUUsRUFBRTtJQUNwRyxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRCxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRTtRQUNyRSxNQUFNLHVCQUF1QixHQUN6QixNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBZSxHQUFHLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDdEgsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsY0FBZSxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUMxSSxJQUFJLHVCQUF1QixFQUFFO1lBQ3pCLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDdkIsV0FBVyxHQUFHLEtBQUssQ0FBQztTQUN2QjtRQUNELElBQUksbUJBQW1CLEVBQUU7WUFDckIsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUN4QixXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0tBQ0o7SUFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDcEIsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUNwQixlQUFlLEdBQUcsS0FBSyxDQUFDO0tBQzNCO0lBRUQsT0FBTztRQUNILGVBQWU7UUFDZixXQUFXO0tBQ2QsQ0FBQztBQUNOLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4sIGlzU3RhbmRhcmRMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGF0aCwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZ2V0Um9vdExheW91dCB9IGZyb20gJy4uL2xheW91dCc7XG5cbmV4cG9ydCBjb25zdCBJU19EUkFHR0lORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBhZGRBY3RpdmVPbkRyYWdPcmlnaW4gPSAoYWN0aXZlRWxlbWVudDogTWluZEVsZW1lbnQsIGlzT3JpZ2luID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoYWN0aXZlRWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgaWYgKGlzT3JpZ2luKSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nLW9yaWdpbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5hZGQoJ2RyYWdnaW5nLWNoaWxkJyk7XG4gICAgfVxuICAgICFhY3RpdmVFbGVtZW50LmlzQ29sbGFwc2VkICYmXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBhZGRBY3RpdmVPbkRyYWdPcmlnaW4oY2hpbGQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlQWN0aXZlT25EcmFnT3JpZ2luID0gKGFjdGl2ZUVsZW1lbnQ6IE1pbmRFbGVtZW50LCBpc09yaWdpbiA9IHRydWUpID0+IHtcbiAgICBjb25zdCBhY3RpdmVDb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGFjdGl2ZUVsZW1lbnQpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgIGlmIChpc09yaWdpbikge1xuICAgICAgICBhY3RpdmVDb21wb25lbnQuZy5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZy1vcmlnaW4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVDb21wb25lbnQuZy5jbGFzc0xpc3QucmVtb3ZlKCdkcmFnZ2luZy1jaGlsZCcpO1xuICAgIH1cbiAgICAhYWN0aXZlRWxlbWVudC5pc0NvbGxhcHNlZCAmJlxuICAgICAgICBhY3RpdmVFbGVtZW50LmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlQWN0aXZlT25EcmFnT3JpZ2luKGNoaWxkLCBmYWxzZSk7XG4gICAgICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRHJhZ2dpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19EUkFHR0lORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRHJhZ2dpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRFJBR0dJTkcuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzUHJldmlvdXNPck5leHRPZkRyb3BQYXRoID0gKHBhcmVudDogTWluZEVsZW1lbnQsIHRhcmdldDogTWluZEVsZW1lbnQsIGRyb3BQYXRoOiBQYXRoKSA9PiB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXROb25BYnN0cmFjdENoaWxkcmVuKHBhcmVudCk7XG4gICAgbGV0IGhhc1ByZXZpb3VzTm9kZSA9IGRyb3BQYXRoW2Ryb3BQYXRoLmxlbmd0aCAtIDFdICE9PSAwO1xuICAgIGxldCBoYXNOZXh0Tm9kZSA9IGRyb3BQYXRoW2Ryb3BQYXRoLmxlbmd0aCAtIDFdICE9PSAoY2hpbGRyZW4/Lmxlbmd0aCB8fCAwKTtcbiAgICBpZiAoUGxhaXRNaW5kLmlzTWluZChwYXJlbnQpICYmIGlzU3RhbmRhcmRMYXlvdXQoZ2V0Um9vdExheW91dChwYXJlbnQpKSkge1xuICAgICAgICBjb25zdCBkcm9wU3RhbmRhcmRSaWdodEJvdHRvbSA9XG4gICAgICAgICAgICB0YXJnZXQgPT09IHBhcmVudC5jaGlsZHJlbltwYXJlbnQucmlnaHROb2RlQ291bnQhIC0gMV0gJiYgZHJvcFBhdGhbZHJvcFBhdGgubGVuZ3RoIC0gMV0gPT09IHBhcmVudC5yaWdodE5vZGVDb3VudDtcbiAgICAgICAgY29uc3QgZHJvcFN0YW5kYXJkTGVmdFRvcCA9IHRhcmdldCA9PT0gcGFyZW50LmNoaWxkcmVuW3BhcmVudC5yaWdodE5vZGVDb3VudCFdICYmIGRyb3BQYXRoW2Ryb3BQYXRoLmxlbmd0aCAtIDFdID09PSBwYXJlbnQucmlnaHROb2RlQ291bnQ7XG4gICAgICAgIGlmIChkcm9wU3RhbmRhcmRSaWdodEJvdHRvbSkge1xuICAgICAgICAgICAgaGFzUHJldmlvdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgIGhhc05leHROb2RlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyb3BTdGFuZGFyZExlZnRUb3ApIHtcbiAgICAgICAgICAgIGhhc1ByZXZpb3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgaGFzTmV4dE5vZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudC5pc0NvbGxhcHNlZCkge1xuICAgICAgICBoYXNOZXh0Tm9kZSA9IGZhbHNlO1xuICAgICAgICBoYXNQcmV2aW91c05vZGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBoYXNQcmV2aW91c05vZGUsXG4gICAgICAgIGhhc05leHROb2RlXG4gICAgfTtcbn07XG4iXX0=
@@ -6,12 +6,6 @@ import { getRootLayout, isMixedLayout } from '../layout';
6
6
  import { MindLayoutType, getNonAbstractChildren, isHorizontalLogicLayout, isIndentedLayout, isStandardLayout, isTopLayout, isVerticalLogicLayout } from '@plait/layouts';
7
7
  import { isBottomLayout, isRightLayout, isLeftLayout, AbstractNode } from '@plait/layouts';
8
8
  import { isChildElement } from '../mind';
9
- /**
10
- *
11
- * @param targetNode
12
- * @param centerPoint
13
- * @returns DetectResult[] | null
14
- */
15
9
  export const directionCorrector = (board, node, detectResults) => {
16
10
  if (!node.origin.isRoot && !AbstractNode.isAbstract(node.origin)) {
17
11
  const parentLayout = MindQueries.getCorrectLayoutByElement(board, node?.parent.origin);
@@ -265,4 +259,4 @@ export const getPathByDropTarget = (board, dropTarget) => {
265
259
  }
266
260
  return targetPath;
267
261
  };
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9kbmQvZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUyxtQkFBbUIsRUFBRSxJQUFJLEVBQXlDLE1BQU0sYUFBYSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUNILGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUN4QixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpDOzs7OztHQUtHO0FBRUgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLElBQWMsRUFBRSxhQUE2QixFQUF5QixFQUFFO0lBQzFILElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzlELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFx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Q0FBQztTQUNwQztLQUNKO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBkZXB0aEZpcnN0UmVjdXJzaW9uLCBQYXRoLCBCb2FyZFRyYW5zZm9ybXMsIEVMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRGV0ZWN0UmVzdWx0LCBNaW5kTm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuLi9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IE1pbmRRdWVyaWVzIH0gZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBnZXRSb290TGF5b3V0LCBpc01peGVkTGF5b3V0IH0gZnJvbSAnLi4vbGF5b3V0JztcbmltcG9ydCB7XG4gICAgTWluZExheW91dFR5cGUsXG4gICAgZ2V0Tm9uQWJzdHJhY3RDaGlsZHJlbixcbiAgICBpc0hvcml6b250YWxMb2dpY0xheW91dCxcbiAgICBpc0luZGVudGVkTGF5b3V0LFxuICAgIGlzU3RhbmRhcmRMYXlvdXQsXG4gICAgaXNUb3BMYXlvdXQsXG4gICAgaXNWZXJ0aWNhbExvZ2ljTGF5b3V0XG59IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgaXNCb3R0b21MYXlvdXQsIGlzUmlnaHRMYXlvdXQsIGlzTGVmdExheW91dCwgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgaXNDaGlsZEVsZW1lbnQgfSBmcm9tICcuLi9taW5kJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHRhcmdldE5vZGVcbiAqIEBwYXJhbSBjZW50ZXJQb2ludFxuICogQHJldHVybnMgRGV0ZWN0UmVzdWx0W10gfCBudWxsXG4gKi9cblxuZXhwb3J0IGNvbnN0IGRpcmVjdGlvbkNvcnJlY3RvciA9IChib2FyZDogUGxhaXRCb2FyZCwgbm9kZTogTWluZE5vZGUsIGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBpZiAoIW5vZGUub3JpZ2luLmlzUm9vdCAmJiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3Qobm9kZS5vcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudExheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIG5vZGU/LnBhcmVudC5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4ID09PSBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGVmdCA9IGlkeCA+PSAobm9kZS5wYXJlbnQub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgW2lzTGVmdCA/ICdyaWdodCcgOiAnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRMYXlvdXQgPT09IE1pbmRMYXlvdXRUeXBlLnVwd2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50TGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWyd0b3AnXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBub2RlPy5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS51cHdhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICdyaWdodCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3JpZ2h0JywgJ3RvcCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzUmlnaHRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkRGlyZWN0aW9uID0gKGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdLCBpbGxlZ2FsRGlyZWN0aW9uczogRGV0ZWN0UmVzdWx0W10pOiBEZXRlY3RSZXN1bHRbXSB8IG51bGwgPT4ge1xuICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBkZXRlY3RSZXN1bHRzO1xuICAgIGlsbGVnYWxEaXJlY3Rpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGJvdHRvbURpcmVjdGlvbkluZGV4ID0gZGlyZWN0aW9ucy5maW5kSW5kZXgoZGlyZWN0aW9uID0+IGRpcmVjdGlvbiA9PT0gaXRlbSk7XG4gICAgICAgIGlmIChib3R0b21EaXJlY3Rpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbnMuc3BsaWNlKGJvdHRvbURpcmVjdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkaXJlY3Rpb25zLmxlbmd0aCA/IGRpcmVjdGlvbnMgOiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdERyb3BUYXJnZXQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZGV0ZWN0UG9pbnQ6IFBvaW50LFxuICAgIGRyb3BUYXJnZXQ6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfSB8IG51bGwsXG4gICAgYWN0aXZlRWxlbWVudHM6IE1pbmRFbGVtZW50W11cbikgPT4ge1xuICAgIGxldCBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9IG51bGw7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgKGJvYXJkIGFzIHVua25vd24pIGFzIE1pbmRFbGVtZW50LFxuICAgICAgICBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmICghTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgZWxlbWVudCkgfHwgZGV0ZWN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb25zID0gZGlyZWN0aW9uRGV0ZWN0b3Iobm9kZSwgZGV0ZWN0UG9pbnQpO1xuICAgICAgICAgICAgaWYgKGRpcmVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBkZXRlY3RSZXN1bHQgPSBkaXJlY3Rpb25Db3JyZWN0b3IoYm9hcmQsIG5vZGUsIGRpcmVjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHJvcFRhcmdldCA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYWN0aXZlRWxlbWVudHMuZXZlcnkoZWxlbWVudCA9PiBpc1ZhbGlkVGFyZ2V0KGVsZW1lbnQsIG5vZGUub3JpZ2luKSk7XG4gICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ICYmIGlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBkcm9wVGFyZ2V0ID0geyB0YXJnZXQ6IG5vZGUub3JpZ2luLCBkZXRlY3RSZXN1bHQ6IGRldGVjdFJlc3VsdFswXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gZHJvcFRhcmdldDtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3Rpb25EZXRlY3RvciA9ICh0YXJnZXROb2RlOiBNaW5kTm9kZSwgY2VudGVyUG9pbnQ6IFBvaW50KTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZSh0YXJnZXROb2RlKTtcbiAgICBjb25zdCB5Q2VudGVyID0geSArIGhlaWdodCAvIDI7XG4gICAgY29uc3QgeENlbnRlciA9IHggKyB3aWR0aCAvIDI7XG5cbiAgICBjb25zdCB0b3AgPSB0YXJnZXROb2RlLnk7XG4gICAgY29uc3QgYm90dG9tID0gdGFyZ2V0Tm9kZS55ICsgdGFyZ2V0Tm9kZS5oZWlnaHQ7XG4gICAgY29uc3QgbGVmdCA9IHRhcmdldE5vZGUueDtcbiAgICBjb25zdCByaWdodCA9IHRhcmdldE5vZGUueCArIHRhcmdldE5vZGUud2lkdGg7XG4gICAgY29uc3QgZGlyZWN0aW9uOiBEZXRlY3RSZXN1bHRbXSA9IFtdO1xuXG4gICAgLy8geCDovbRcbiAgICBpZiAoY2VudGVyUG9pbnRbMV0gPiB5ICYmIGNlbnRlclBvaW50WzFdIDwgeSArIGhlaWdodCkge1xuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPiBsZWZ0ICYmIGNlbnRlclBvaW50WzBdIDwgeENlbnRlcikge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPiB4Q2VudGVyICYmIGNlbnRlclBvaW50WzBdIDwgcmlnaHQpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOmHjeWQiOWMuuWfn++8jOi/lOWbnuS4pOS4quaWueWQkVxuICAgICAgICBpZiAoKGNlbnRlclBvaW50WzBdID4geCAmJiBjZW50ZXJQb2ludFswXSA8IHhDZW50ZXIpIHx8IChjZW50ZXJQb2ludFswXSA+IHhDZW50ZXIgJiYgY2VudGVyUG9pbnRbMF0gPCB4ICsgd2lkdGgpKSB7XG4gICAgICAgICAgICBpZiAoY2VudGVyUG9pbnRbMV0gPCB5Q2VudGVyKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3RvcCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgnYm90dG9tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5sZW5ndGggPyBkaXJlY3Rpb24gOiBudWxsO1xuICAgIH1cblxuICAgIC8vIHkg6L20XG4gICAgaWYgKGNlbnRlclBvaW50WzBdID4geCAmJiBjZW50ZXJQb2ludFswXSA8IHggKyB3aWR0aCkge1xuICAgICAgICBpZiAoY2VudGVyUG9pbnRbMV0gPiB0b3AgJiYgY2VudGVyUG9pbnRbMV0gPCB5Q2VudGVyKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgndG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdID4geUNlbnRlciAmJiBjZW50ZXJQb2ludFsxXSA8IGJvdHRvbSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2JvdHRvbScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoY2VudGVyUG9pbnRbMV0gPiB5ICYmIGNlbnRlclBvaW50WzFdIDwgeSArIGhlaWdodCkgfHwgKGNlbnRlclBvaW50WzFdID4geUNlbnRlciAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpKSB7XG4gICAgICAgICAgICBpZiAoY2VudGVyUG9pbnRbMF0gPCB4Q2VudGVyKSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2xlZnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpcmVjdGlvbi5sZW5ndGggPyBkaXJlY3Rpb24gOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufTtcblxuLyog5qC55o2u5biD5bGA6LCD5pW0IHRhcmdldCDku6Xlj4ogZGlyZWN0aW9uICovXG5leHBvcnQgY29uc3QgcmVhZGp1c3RtZW50RHJvcFRhcmdldCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBkcm9wVGFyZ2V0OiB7XG4gICAgICAgIHRhcmdldDogTWluZEVsZW1lbnQ7XG4gICAgICAgIGRldGVjdFJlc3VsdDogRGV0ZWN0UmVzdWx0O1xuICAgIH1cbik6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfSA9PiB7XG4gICAgY29uc3QgeyB0YXJnZXQsIGRldGVjdFJlc3VsdCB9ID0gZHJvcFRhcmdldDtcbiAgICBjb25zdCBuZXdEcm9wVGFyZ2V0ID0geyB0YXJnZXQsIGRldGVjdFJlc3VsdCB9O1xuICAgIGNvbnN0IHRhcmdldENvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQodGFyZ2V0KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pO1xuICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4odGFyZ2V0Q29tcG9uZW50Lm5vZGUpO1xuICAgICAgICBpZiAoWydyaWdodCcsICdsZWZ0J10uaW5jbHVkZXMoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzTWl4ZWRMYXlvdXQocGFyZW50TGF5b3V0LCBsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g5qCH5YeG5biD5bGA77yM5qC56IqC54K5XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0YW5kYXJkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Tm9kZUNvdW50ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IGFzIG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRlY3RSZXN1bHQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9nOS4uuW3pueahOesrOS4gOS4quiKgueCuVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IHJpZ2h0Tm9kZUNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5L2c5Li65Y+z55qE56ys5LiA5Liq6IqC54K55oiW5pyA5ZCO5LiA5Liq6IqC54K5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0Tm9kZUNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bcmlnaHROb2RlQ291bnQgLSAxXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8g57yp6L+b5biD5bGA5o6i5rWL5Yiw56ys5LiA5Liq5a2Q6IqC54K5XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuWzBdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChwYXJlbnRMYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOS4iuS4i+W4g+WxgOeahOagueiKgueCueWPquWPr+S7peaOoua1i+WIsOS4iuaIluiAheS4i++8jOWtkOiKgueCueeahOW3puWPs+aOoua1i+S4jeWkhOeQhu+8jOi3s+i/h+OAglxuICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5Ymp5LiL5piv5rC05bmz5biD5bGA55qE6buY6K6k5oOF5Ya177ya5o+S5YWl5pyA5ZCO5LiA5Liq5a2Q6IqC54K555qE5LiL5pa5XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZUluZGV4ID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuW2xhc3RDaGlsZE5vZGVJbmRleF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ2JvdHRvbSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIOWkhOeQhuW3puWPs+W4g+WxgOS4i+eahOa3t+WQiOW4g+WxgFxuICAgICAgICAgICAgICAgIGlmIChbTWluZExheW91dFR5cGUubGVmdCwgTWluZExheW91dFR5cGUucmlnaHRdLmluY2x1ZGVzKHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5kZW50ZWRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlblswXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0KSkge1xuICAgICAgICAgICAgLy8g57yp6L+b5biD5bGA56e75Yqo6Iez56ys5LiA5Liq6IqC54K5XG4gICAgICAgICAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCAmJiBpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuWzBdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8g5LiK5LiL5biD5bGA77yM5o+S5Yiw5Y+z6L65XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KFxuICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QgPyB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4gOiB0YXJnZXRDb21wb25lbnQubm9kZS5wYXJlbnQub3JpZ2luXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGlzVmVydGljYWxMb2dpY0xheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkTm9kZUluZGV4ID0gY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuW2xhc3RDaGlsZE5vZGVJbmRleF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gJ3JpZ2h0JztcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICB9XG4gICAgcmV0dXJuIGRyb3BUYXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFRhcmdldCA9IChvcmlnaW46IE1pbmRFbGVtZW50LCB0YXJnZXQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIG9yaWdpbiAhPT0gdGFyZ2V0ICYmICFpc0NoaWxkRWxlbWVudChvcmlnaW4sIHRhcmdldCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aEJ5RHJvcFRhcmdldCA9IChib2FyZDogUGxhaXRCb2FyZCwgZHJvcFRhcmdldDogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9KSA9PiB7XG4gICAgbGV0IHRhcmdldFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBkcm9wVGFyZ2V0Py50YXJnZXQpO1xuICAgIGNvbnN0IGxheW91dCA9IFBsYWl0TWluZC5pc01pbmQoZHJvcFRhcmdldD8udGFyZ2V0KVxuICAgICAgICA/IGdldFJvb3RMYXlvdXQoZHJvcFRhcmdldD8udGFyZ2V0KVxuICAgICAgICA6IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIE1pbmRFbGVtZW50LmdldFBhcmVudChkcm9wVGFyZ2V0Py50YXJnZXQpKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vbkFic3RyYWN0Q2hpbGRyZW4oZHJvcFRhcmdldC50YXJnZXQpO1xuICAgIC8vIOS4iuS4i+W4g+WxgO+8muW3puWPs+aYr+WFhOW8n+iKgueCue+8jOS4iuS4i+aYr+WtkOiKgueCuVxuICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICd0b3AnIHx8IGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8g5aaC5p6c5piv5bem77yM5L2N572u5LiN5Y+Y77yM5Y+z5YiZ5o+S5YWl5Yiw5LiL5LiA5Liq5YWE5byf6IqC54K5XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyDmsLTlubPluIPlsYAv5qCH5YeG5biD5bGA77ya5LiK5LiL5piv5YWE5byf6IqC54K577yM5bem5Y+z5piv5a2Q6IqC54K5XG4gICAgaWYgKGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAncmlnaHQnIHx8IGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWmguaenOaYr+S4iu+8jOS9jee9ruS4jeWPmO+8jOS4i+aPkuWFpeWIsOS4i+S4gOS4quWFhOW8n+iKgueCuVxuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g57yp6L+b5biD5bGA77ya5LiK5LiL5piv5YWE5byf6IqC54K577yM5bem5Y+z5piv5a2Q6IqC54K577yM5L2G5LiK77yI5bem5LiKL+WPs+S4iu+8ie+8jOaOoua1i+WIsOS4iuaYr+WtkOiKgueCue+8jOS4i+WImeS9jee9ruS4jeWPmO+8jOWPjeS5i+WQjOeQhuOAglxuICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGlzVG9wTGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0JvdHRvbUxheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmlnaHRMYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldFBhdGg7XG59O1xuIl19
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9kbmQvZGV0ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUyxtQkFBbUIsRUFBRSxJQUFJLEVBQXlDLE1BQU0sYUFBYSxDQUFDO0FBRWhJLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekQsT0FBTyxFQUNILGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLHFCQUFxQixFQUN4QixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxJQUFjLEVBQUUsYUFBNkIsRUFBeUIsRUFBRTtJQUMxSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5RCxNQUFNLFlBQVksR0FBRyxXQUFXLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsTUFBcUIsQ0FBQyxDQUFDO1FB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SjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRFbGVtZW50LCBQbGFpdE1pbmQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQb2ludCwgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgUGF0aCwgQm9hcmRUcmFuc2Zvcm1zLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IERldGVjdFJlc3VsdCwgTWluZE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0Um9vdExheW91dCwgaXNNaXhlZExheW91dCB9IGZyb20gJy4uL2xheW91dCc7XG5pbXBvcnQge1xuICAgIE1pbmRMYXlvdXRUeXBlLFxuICAgIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4sXG4gICAgaXNIb3Jpem9udGFsTG9naWNMYXlvdXQsXG4gICAgaXNJbmRlbnRlZExheW91dCxcbiAgICBpc1N0YW5kYXJkTGF5b3V0LFxuICAgIGlzVG9wTGF5b3V0LFxuICAgIGlzVmVydGljYWxMb2dpY0xheW91dFxufSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IGlzQm90dG9tTGF5b3V0LCBpc1JpZ2h0TGF5b3V0LCBpc0xlZnRMYXlvdXQsIEFic3RyYWN0Tm9kZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGlzQ2hpbGRFbGVtZW50IH0gZnJvbSAnLi4vbWluZCc7XG5cbmV4cG9ydCBjb25zdCBkaXJlY3Rpb25Db3JyZWN0b3IgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG5vZGU6IE1pbmROb2RlLCBkZXRlY3RSZXN1bHRzOiBEZXRlY3RSZXN1bHRbXSk6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFub2RlLm9yaWdpbi5pc1Jvb3QgJiYgIUFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KG5vZGUub3JpZ2luKSkge1xuICAgICAgICBjb25zdCBwYXJlbnRMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBub2RlPy5wYXJlbnQub3JpZ2luIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geCA9PT0gbm9kZSk7XG4gICAgICAgICAgICBjb25zdCBpc0xlZnQgPSBpZHggPj0gKG5vZGUucGFyZW50Lm9yaWdpbi5yaWdodE5vZGVDb3VudCB8fCAwKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFtpc0xlZnQgPyAncmlnaHQnIDogJ2xlZnQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsncmlnaHQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSaWdodExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50TGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS51cHdhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudExheW91dCA9PT0gTWluZExheW91dFR5cGUuZG93bndhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsndG9wJ10pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgbm9kZT8ub3JpZ2luIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWyd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUudXB3YXJkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnLCAncmlnaHQnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUuZG93bndhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICdyaWdodCcsICd0b3AnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZERpcmVjdGlvbiA9IChkZXRlY3RSZXN1bHRzOiBEZXRlY3RSZXN1bHRbXSwgaWxsZWdhbERpcmVjdGlvbnM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0gZGV0ZWN0UmVzdWx0cztcbiAgICBpbGxlZ2FsRGlyZWN0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBib3R0b21EaXJlY3Rpb25JbmRleCA9IGRpcmVjdGlvbnMuZmluZEluZGV4KGRpcmVjdGlvbiA9PiBkaXJlY3Rpb24gPT09IGl0ZW0pO1xuICAgICAgICBpZiAoYm90dG9tRGlyZWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb25zLnNwbGljZShib3R0b21EaXJlY3Rpb25JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlyZWN0aW9ucy5sZW5ndGggPyBkaXJlY3Rpb25zIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3REcm9wVGFyZ2V0ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGRldGVjdFBvaW50OiBQb2ludCxcbiAgICBkcm9wVGFyZ2V0OiB7IHRhcmdldDogTWluZEVsZW1lbnQ7IGRldGVjdFJlc3VsdDogRGV0ZWN0UmVzdWx0IH0gfCBudWxsLFxuICAgIGFjdGl2ZUVsZW1lbnRzOiBNaW5kRWxlbWVudFtdXG4pID0+IHtcbiAgICBsZXQgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHRbXSB8IG51bGwgPSBudWxsO1xuICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgIChib2FyZCBhcyB1bmtub3duKSBhcyBNaW5kRWxlbWVudCxcbiAgICAgICAgZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIU1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpIHx8IGRldGVjdFJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9ucyA9IGRpcmVjdGlvbkRldGVjdG9yKG5vZGUsIGRldGVjdFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgZGV0ZWN0UmVzdWx0ID0gZGlyZWN0aW9uQ29ycmVjdG9yKGJvYXJkLCBub2RlLCBkaXJlY3Rpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRyb3BUYXJnZXQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgaXNWYWxpZCA9IGFjdGl2ZUVsZW1lbnRzLmV2ZXJ5KGVsZW1lbnQgPT4gaXNWYWxpZFRhcmdldChlbGVtZW50LCBub2RlLm9yaWdpbikpO1xuICAgICAgICAgICAgaWYgKGRldGVjdFJlc3VsdCAmJiBpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgZHJvcFRhcmdldCA9IHsgdGFyZ2V0OiBub2RlLm9yaWdpbiwgZGV0ZWN0UmVzdWx0OiBkZXRlY3RSZXN1bHRbMF0gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIGRyb3BUYXJnZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgZGlyZWN0aW9uRGV0ZWN0b3IgPSAodGFyZ2V0Tm9kZTogTWluZE5vZGUsIGNlbnRlclBvaW50OiBQb2ludCk6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUodGFyZ2V0Tm9kZSk7XG4gICAgY29uc3QgeUNlbnRlciA9IHkgKyBoZWlnaHQgLyAyO1xuICAgIGNvbnN0IHhDZW50ZXIgPSB4ICsgd2lkdGggLyAyO1xuXG4gICAgY29uc3QgdG9wID0gdGFyZ2V0Tm9kZS55O1xuICAgIGNvbnN0IGJvdHRvbSA9IHRhcmdldE5vZGUueSArIHRhcmdldE5vZGUuaGVpZ2h0O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXROb2RlLng7XG4gICAgY29uc3QgcmlnaHQgPSB0YXJnZXROb2RlLnggKyB0YXJnZXROb2RlLndpZHRoO1xuICAgIGNvbnN0IGRpcmVjdGlvbjogRGV0ZWN0UmVzdWx0W10gPSBbXTtcblxuICAgIC8vIHgg6L20XG4gICAgaWYgKGNlbnRlclBvaW50WzFdID4geSAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpIHtcbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdID4gbGVmdCAmJiBjZW50ZXJQb2ludFswXSA8IHhDZW50ZXIpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdID4geENlbnRlciAmJiBjZW50ZXJQb2ludFswXSA8IHJpZ2h0KSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24ucHVzaCgncmlnaHQnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDph43lkIjljLrln5/vvIzov5Tlm57kuKTkuKrmlrnlkJFcbiAgICAgICAgaWYgKChjZW50ZXJQb2ludFswXSA+IHggJiYgY2VudGVyUG9pbnRbMF0gPCB4Q2VudGVyKSB8fCAoY2VudGVyUG9pbnRbMF0gPiB4Q2VudGVyICYmIGNlbnRlclBvaW50WzBdIDwgeCArIHdpZHRoKSkge1xuICAgICAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdIDwgeUNlbnRlcikge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCd0b3AnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ2JvdHRvbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ubGVuZ3RoID8gZGlyZWN0aW9uIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyB5IOi9tFxuICAgIGlmIChjZW50ZXJQb2ludFswXSA+IHggJiYgY2VudGVyUG9pbnRbMF0gPCB4ICsgd2lkdGgpIHtcbiAgICAgICAgaWYgKGNlbnRlclBvaW50WzFdID4gdG9wICYmIGNlbnRlclBvaW50WzFdIDwgeUNlbnRlcikge1xuICAgICAgICAgICAgZGlyZWN0aW9uLnB1c2goJ3RvcCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZW50ZXJQb2ludFsxXSA+IHlDZW50ZXIgJiYgY2VudGVyUG9pbnRbMV0gPCBib3R0b20pIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdib3R0b20nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGNlbnRlclBvaW50WzFdID4geSAmJiBjZW50ZXJQb2ludFsxXSA8IHkgKyBoZWlnaHQpIHx8IChjZW50ZXJQb2ludFsxXSA+IHlDZW50ZXIgJiYgY2VudGVyUG9pbnRbMV0gPCB5ICsgaGVpZ2h0KSkge1xuICAgICAgICAgICAgaWYgKGNlbnRlclBvaW50WzBdIDwgeENlbnRlcikge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdsZWZ0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbi5wdXNoKCdyaWdodCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaXJlY3Rpb24ubGVuZ3RoID8gZGlyZWN0aW9uIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbi8qIOagueaNruW4g+WxgOiwg+aVtCB0YXJnZXQg5Lul5Y+KIGRpcmVjdGlvbiAqL1xuZXhwb3J0IGNvbnN0IHJlYWRqdXN0bWVudERyb3BUYXJnZXQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZHJvcFRhcmdldDoge1xuICAgICAgICB0YXJnZXQ6IE1pbmRFbGVtZW50O1xuICAgICAgICBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdDtcbiAgICB9XG4pOiB7IHRhcmdldDogTWluZEVsZW1lbnQ7IGRldGVjdFJlc3VsdDogRGV0ZWN0UmVzdWx0IH0gPT4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCBkZXRlY3RSZXN1bHQgfSA9IGRyb3BUYXJnZXQ7XG4gICAgY29uc3QgbmV3RHJvcFRhcmdldCA9IHsgdGFyZ2V0LCBkZXRlY3RSZXN1bHQgfTtcbiAgICBjb25zdCB0YXJnZXRDb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KHRhcmdldCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChib2FyZCwgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luKTtcbiAgICAgICAgY29uc3QgcGFyZW50TGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChcbiAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luLmlzUm9vdCA/IHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbiA6IHRhcmdldENvbXBvbmVudC5ub2RlLnBhcmVudC5vcmlnaW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBnZXROb25BYnN0cmFjdENoaWxkcmVuKHRhcmdldENvbXBvbmVudC5ub2RlKTtcbiAgICAgICAgaWYgKFsncmlnaHQnLCAnbGVmdCddLmluY2x1ZGVzKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0KSkge1xuICAgICAgICAgICAgaWYgKCFpc01peGVkTGF5b3V0KHBhcmVudExheW91dCwgbGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIC8vIOagh+WHhuW4g+WxgO+8jOagueiKgueCuVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByaWdodE5vZGVDb3VudCA9IHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5yaWdodE5vZGVDb3VudCBhcyBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDkvZzkuLrlt6bnmoTnrKzkuIDkuKroioLngrlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSByaWdodE5vZGVDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9nOS4uuWPs+eahOesrOS4gOS4quiKgueCueaIluacgOWQjuS4gOS4quiKgueCuVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodE5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LnRhcmdldCA9IHRhcmdldENvbXBvbmVudC5ub2RlLmNoaWxkcmVuW3JpZ2h0Tm9kZUNvdW50IC0gMV0ub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9ICdib3R0b20nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIOe8qei/m+W4g+WxgOaOoua1i+WIsOesrOS4gOS4quWtkOiKgueCuVxuICAgICAgICAgICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlblswXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID0gaXNUb3BMYXlvdXQocGFyZW50TGF5b3V0KSA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDkuIrkuIvluIPlsYDnmoTmoLnoioLngrnlj6rlj6/ku6XmjqLmtYvliLDkuIrmiJbogIXkuIvvvIzlrZDoioLngrnnmoTlt6blj7PmjqLmtYvkuI3lpITnkIbvvIzot7Pov4fjgIJcbiAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbExvZ2ljTGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOWJqeS4i+aYr+awtOW5s+W4g+WxgOeahOm7mOiupOaDheWGte+8muaPkuWFpeacgOWQjuS4gOS4quWtkOiKgueCueeahOS4i+aWuVxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbltsYXN0Q2hpbGROb2RlSW5kZXhdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9ICdib3R0b20nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyDlpITnkIblt6blj7PluIPlsYDkuIvnmoTmt7flkIjluIPlsYBcbiAgICAgICAgICAgICAgICBpZiAoW01pbmRMYXlvdXRUeXBlLmxlZnQsIE1pbmRMYXlvdXRUeXBlLnJpZ2h0XS5pbmNsdWRlcyhwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Ryb3BUYXJnZXQudGFyZ2V0ID0gdGFyZ2V0Q29tcG9uZW50Lm5vZGUuY2hpbGRyZW5bMF0ub3JpZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChsYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdEcm9wVGFyZ2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChbJ3RvcCcsICdib3R0b20nXS5pbmNsdWRlcyhkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCkpIHtcbiAgICAgICAgICAgIC8vIOe8qei/m+W4g+WxgOenu+WKqOiHs+esrOS4gOS4quiKgueCuVxuICAgICAgICAgICAgaWYgKHRhcmdldENvbXBvbmVudC5ub2RlLm9yaWdpbi5pc1Jvb3QgJiYgaXNJbmRlbnRlZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlblswXS5vcmlnaW47XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPSBpc1RvcExheW91dChsYXlvdXQpID8gJ2JvdHRvbScgOiAndG9wJztcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3RHJvcFRhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIOS4iuS4i+W4g+WxgO+8jOaPkuWIsOWPs+i+uVxuICAgICAgICAgICAgY29uc3QgcGFyZW50TGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChcbiAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ID8gdGFyZ2V0Q29tcG9uZW50Lm5vZGUub3JpZ2luIDogdGFyZ2V0Q29tcG9uZW50Lm5vZGUucGFyZW50Lm9yaWdpblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsTG9naWNMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZE5vZGVJbmRleCA9IGNoaWxkcmVuLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbmV3RHJvcFRhcmdldC50YXJnZXQgPSB0YXJnZXRDb21wb25lbnQubm9kZS5jaGlsZHJlbltsYXN0Q2hpbGROb2RlSW5kZXhdLm9yaWdpbjtcbiAgICAgICAgICAgICAgICBuZXdEcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9ICdyaWdodCc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld0Ryb3BUYXJnZXQ7XG4gICAgfVxuICAgIHJldHVybiBkcm9wVGFyZ2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRUYXJnZXQgPSAob3JpZ2luOiBNaW5kRWxlbWVudCwgdGFyZ2V0OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBvcmlnaW4gIT09IHRhcmdldCAmJiAhaXNDaGlsZEVsZW1lbnQob3JpZ2luLCB0YXJnZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhCeURyb3BUYXJnZXQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGRyb3BUYXJnZXQ6IHsgdGFyZ2V0OiBNaW5kRWxlbWVudDsgZGV0ZWN0UmVzdWx0OiBEZXRlY3RSZXN1bHQgfSkgPT4ge1xuICAgIGxldCB0YXJnZXRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZHJvcFRhcmdldD8udGFyZ2V0KTtcbiAgICBjb25zdCBsYXlvdXQgPSBQbGFpdE1pbmQuaXNNaW5kKGRyb3BUYXJnZXQ/LnRhcmdldClcbiAgICAgICAgPyBnZXRSb290TGF5b3V0KGRyb3BUYXJnZXQ/LnRhcmdldClcbiAgICAgICAgOiBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZHJvcFRhcmdldD8udGFyZ2V0KSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBnZXROb25BYnN0cmFjdENoaWxkcmVuKGRyb3BUYXJnZXQudGFyZ2V0KTtcbiAgICAvLyDkuIrkuIvluIPlsYDvvJrlt6blj7PmmK/lhYTlvJ/oioLngrnvvIzkuIrkuIvmmK/lrZDoioLngrlcbiAgICBpZiAoaXNWZXJ0aWNhbExvZ2ljTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAndG9wJyB8fCBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWmguaenOaYr+W3pu+8jOS9jee9ruS4jeWPmO+8jOWPs+WImeaPkuWFpeWIsOS4i+S4gOS4quWFhOW8n+iKgueCuVxuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGggPSBQYXRoLm5leHQodGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8g5rC05bmz5biD5bGAL+agh+WHhuW4g+WxgO+8muS4iuS4i+aYr+WFhOW8n+iKgueCue+8jOW3puWPs+aYr+WtkOiKgueCuVxuICAgIGlmIChpc0hvcml6b250YWxMb2dpY0xheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0JyB8fCBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyDlpoLmnpzmmK/kuIrvvIzkvY3nva7kuI3lj5jvvIzkuIvmj5LlhaXliLDkuIvkuIDkuKrlhYTlvJ/oioLngrlcbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOe8qei/m+W4g+WxgO+8muS4iuS4i+aYr+WFhOW8n+iKgueCue+8jOW3puWPs+aYr+WtkOiKgueCue+8jOS9huS4iu+8iOW3puS4ii/lj7PkuIrvvInvvIzmjqLmtYvliLDkuIrmmK/lrZDoioLngrnvvIzkuIvliJnkvY3nva7kuI3lj5jvvIzlj43kuYvlkIznkIbjgIJcbiAgICBpZiAoaXNJbmRlbnRlZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGlmIChpc1RvcExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAndG9wJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCb3R0b21MYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGggPSBQYXRoLm5leHQodGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGVmdExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChjaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRQYXRoO1xufTtcbiJdfQ==
@@ -0,0 +1,75 @@
1
+ import { drawAbstractRoundRectangle, createG, getRectangleByElements, PlaitBoard, RectangleClient } from '@plait/core';
2
+ import { PRIMARY_COLOR } from '../../constants';
3
+ import { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';
4
+ import { MindElement } from '../../interfaces';
5
+ import { isHorizontalLayout } from '@plait/layouts';
6
+ import { MindQueries } from '../../queries';
7
+ import { getLayoutDirection, getPointByPlacement, moveXOfPoint, transformPlacement } from '../point-placement';
8
+ import { HorizontalPlacement, VerticalPlacement } from '../../interfaces/types';
9
+ import { getRectangleByResizingLocation } from '../abstract/resize';
10
+ import { AbstractHandlePosition } from '../../plugins/with-abstract-resize.board';
11
+ export function drawAbstractIncludedOutline(board, roughSVG, element, activeHandlePosition, resizingLocation) {
12
+ const abstractIncludedG = createG();
13
+ const parentElement = MindElement.getParent(element);
14
+ const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element);
15
+ const isHorizontal = isHorizontalLayout(nodeLayout);
16
+ const includedElements = parentElement.children.slice(element.start, element.end + 1);
17
+ let abstractRectangle = getRectangleByElements(board, includedElements, true);
18
+ abstractRectangle = RectangleClient.getOutlineRectangle(abstractRectangle, -ABSTRACT_INCLUDED_OUTLINE_OFFSET);
19
+ if (resizingLocation) {
20
+ abstractRectangle = getRectangleByResizingLocation(abstractRectangle, resizingLocation, activeHandlePosition, isHorizontal);
21
+ }
22
+ const rectangle = drawAbstractRoundRectangle(roughSVG, abstractRectangle.x, abstractRectangle.y, abstractRectangle.x + abstractRectangle.width, abstractRectangle.y + abstractRectangle.height, isHorizontal, {
23
+ stroke: PRIMARY_COLOR,
24
+ strokeWidth: 1,
25
+ fillStyle: 'solid'
26
+ });
27
+ const startPlacement = [HorizontalPlacement.center, VerticalPlacement.top];
28
+ const endPlacement = [HorizontalPlacement.center, VerticalPlacement.bottom];
29
+ const linkDirection = getLayoutDirection(MindElement.getNode(element), isHorizontal);
30
+ transformPlacement(startPlacement, linkDirection);
31
+ transformPlacement(endPlacement, linkDirection);
32
+ let startCenterPoint = getPointByPlacement(abstractRectangle, startPlacement);
33
+ let endCenterPoint = getPointByPlacement(abstractRectangle, endPlacement);
34
+ const startPoint1 = moveXOfPoint(startCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
35
+ const startPoint2 = moveXOfPoint(startCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
36
+ const endPoint1 = moveXOfPoint(endCenterPoint, -ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
37
+ const endPoint2 = moveXOfPoint(endCenterPoint, ABSTRACT_HANDLE_LENGTH / 2, linkDirection);
38
+ const startHandle = roughSVG.line(startPoint1[0], startPoint1[1], startPoint2[0], startPoint2[1], getHandleOption(activeHandlePosition === AbstractHandlePosition.start));
39
+ const endHandle = roughSVG.line(endPoint1[0], endPoint1[1], endPoint2[0], endPoint2[1], getHandleOption(activeHandlePosition === AbstractHandlePosition.end));
40
+ changeBoardClass(board, activeHandlePosition, isHorizontal);
41
+ startHandle.setAttribute('stroke-linecap', 'round');
42
+ endHandle.setAttribute('stroke-linecap', 'round');
43
+ abstractIncludedG.append(startHandle);
44
+ abstractIncludedG.append(endHandle);
45
+ abstractIncludedG.append(rectangle);
46
+ return abstractIncludedG;
47
+ }
48
+ export function getHandleOption(isHover) {
49
+ return isHover
50
+ ? {
51
+ stroke: PRIMARY_COLOR,
52
+ strokeWidth: 4,
53
+ fillStyle: 'solid'
54
+ }
55
+ : {
56
+ stroke: ABSTRACT_HANDLE_COLOR,
57
+ strokeWidth: 3,
58
+ fillStyle: 'solid'
59
+ };
60
+ }
61
+ export function changeBoardClass(board, activeHandlePosition, isHorizontal) {
62
+ if (activeHandlePosition) {
63
+ if (isHorizontal) {
64
+ PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-horizontal');
65
+ }
66
+ else {
67
+ PlaitBoard.getBoardNativeElement(board).classList.add('abstract-resizing-vertical');
68
+ }
69
+ }
70
+ else {
71
+ PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-horizontal');
72
+ PlaitBoard.getBoardNativeElement(board).classList.remove('abstract-resizing-vertical');
73
+ }
74
+ }
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3Qtb3V0bGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RyYXcvYWJzdHJhY3Qtb3V0bGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxzQkFBc0IsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhJLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQWtCLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0csT0FBTyxFQUFFLG1CQUFtQixFQUFrQixpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWxGLE1BQU0sVUFBVSwyQkFBMkIsQ0FDdkMsS0FBaUIsRUFDakIsUUFBa0IsRUFDbEIsT0FBb0IsRUFDcEIsb0JBQTZDLEVBQzdDLGdCQUF5QjtJQUV6QixNQUFNLGlCQUFpQixHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXBDLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsTUFB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Qyw0QkFBNEIsQ0FBQyxDQUFDO1NBQ3ZGO0tBQ0o7U0FBTTtRQUNILFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFDekYsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQUMxRjtBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkcmF3QWJzdHJhY3RSb3VuZFJlY3RhbmdsZSwgY3JlYXRlRywgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cywgUGxhaXRCb2FyZCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBQlNUUkFDVF9IQU5ETEVfQ09MT1IsIEFCU1RSQUNUX0hBTkRMRV9MRU5HVEgsIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fic3RyYWN0LW5vZGUnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1pbmRMYXlvdXRUeXBlLCBpc0hvcml6b250YWxMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgZ2V0TGF5b3V0RGlyZWN0aW9uLCBnZXRQb2ludEJ5UGxhY2VtZW50LCBtb3ZlWE9mUG9pbnQsIHRyYW5zZm9ybVBsYWNlbWVudCB9IGZyb20gJy4uL3BvaW50LXBsYWNlbWVudCc7XG5pbXBvcnQgeyBIb3Jpem9udGFsUGxhY2VtZW50LCBQb2ludFBsYWNlbWVudCwgVmVydGljYWxQbGFjZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3R5cGVzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbiB9IGZyb20gJy4uL2Fic3RyYWN0L3Jlc2l6ZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLWFic3RyYWN0LXJlc2l6ZS5ib2FyZCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3QWJzdHJhY3RJbmNsdWRlZE91dGxpbmUoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcm91Z2hTVkc6IFJvdWdoU1ZHLFxuICAgIGVsZW1lbnQ6IE1pbmRFbGVtZW50LFxuICAgIGFjdGl2ZUhhbmRsZVBvc2l0aW9uPzogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICByZXNpemluZ0xvY2F0aW9uPzogbnVtYmVyXG4pIHtcbiAgICBjb25zdCBhYnN0cmFjdEluY2x1ZGVkRyA9IGNyZWF0ZUcoKTtcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgY29uc3Qgbm9kZUxheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbExheW91dChub2RlTGF5b3V0KTtcblxuICAgIGNvbnN0IGluY2x1ZGVkRWxlbWVudHMgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLnNsaWNlKGVsZW1lbnQuc3RhcnQhLCBlbGVtZW50LmVuZCEgKyAxKTtcbiAgICBsZXQgYWJzdHJhY3RSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBpbmNsdWRlZEVsZW1lbnRzLCB0cnVlKTtcbiAgICBhYnN0cmFjdFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCAtQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVQpO1xuXG4gICAgaWYgKHJlc2l6aW5nTG9jYXRpb24pIHtcbiAgICAgICAgYWJzdHJhY3RSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24oYWJzdHJhY3RSZWN0YW5nbGUsIHJlc2l6aW5nTG9jYXRpb24sIGFjdGl2ZUhhbmRsZVBvc2l0aW9uISwgaXNIb3Jpem9udGFsKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWN0YW5nbGUgPSBkcmF3QWJzdHJhY3RSb3VuZFJlY3RhbmdsZShcbiAgICAgICAgcm91Z2hTVkcsXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLngsXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLnksXG4gICAgICAgIGFic3RyYWN0UmVjdGFuZ2xlLnggKyBhYnN0cmFjdFJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgYWJzdHJhY3RSZWN0YW5nbGUueSArIGFic3RyYWN0UmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgaXNIb3Jpem9udGFsLFxuICAgICAgICB7XG4gICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQuY2VudGVyLCBWZXJ0aWNhbFBsYWNlbWVudC50b3BdIGFzIFBvaW50UGxhY2VtZW50O1xuICAgIGNvbnN0IGVuZFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LmNlbnRlciwgVmVydGljYWxQbGFjZW1lbnQuYm90dG9tXSBhcyBQb2ludFBsYWNlbWVudDtcblxuICAgIGNvbnN0IGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24oTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSwgaXNIb3Jpem9udGFsKTtcblxuICAgIHRyYW5zZm9ybVBsYWNlbWVudChzdGFydFBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG4gICAgdHJhbnNmb3JtUGxhY2VtZW50KGVuZFBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBsZXQgc3RhcnRDZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQoYWJzdHJhY3RSZWN0YW5nbGUsIHN0YXJ0UGxhY2VtZW50KTtcbiAgICBsZXQgZW5kQ2VudGVyUG9pbnQgPSBnZXRQb2ludEJ5UGxhY2VtZW50KGFic3RyYWN0UmVjdGFuZ2xlLCBlbmRQbGFjZW1lbnQpO1xuXG4gICAgY29uc3Qgc3RhcnRQb2ludDEgPSBtb3ZlWE9mUG9pbnQoc3RhcnRDZW50ZXJQb2ludCwgLUFCU1RSQUNUX0hBTkRMRV9MRU5HVEggLyAyLCBsaW5rRGlyZWN0aW9uKTtcbiAgICBjb25zdCBzdGFydFBvaW50MiA9IG1vdmVYT2ZQb2ludChzdGFydENlbnRlclBvaW50LCBBQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBjb25zdCBlbmRQb2ludDEgPSBtb3ZlWE9mUG9pbnQoZW5kQ2VudGVyUG9pbnQsIC1BQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG4gICAgY29uc3QgZW5kUG9pbnQyID0gbW92ZVhPZlBvaW50KGVuZENlbnRlclBvaW50LCBBQlNUUkFDVF9IQU5ETEVfTEVOR1RIIC8gMiwgbGlua0RpcmVjdGlvbik7XG5cbiAgICBjb25zdCBzdGFydEhhbmRsZSA9IHJvdWdoU1ZHLmxpbmUoXG4gICAgICAgIHN0YXJ0UG9pbnQxWzBdLFxuICAgICAgICBzdGFydFBvaW50MVsxXSxcbiAgICAgICAgc3RhcnRQb2ludDJbMF0sXG4gICAgICAgIHN0YXJ0UG9pbnQyWzFdLFxuICAgICAgICBnZXRIYW5kbGVPcHRpb24oYWN0aXZlSGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZEhhbmRsZSA9IHJvdWdoU1ZHLmxpbmUoXG4gICAgICAgIGVuZFBvaW50MVswXSxcbiAgICAgICAgZW5kUG9pbnQxWzFdLFxuICAgICAgICBlbmRQb2ludDJbMF0sXG4gICAgICAgIGVuZFBvaW50MlsxXSxcbiAgICAgICAgZ2V0SGFuZGxlT3B0aW9uKGFjdGl2ZUhhbmRsZVBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLmVuZClcbiAgICApO1xuXG4gICAgY2hhbmdlQm9hcmRDbGFzcyhib2FyZCwgYWN0aXZlSGFuZGxlUG9zaXRpb24sIGlzSG9yaXpvbnRhbCk7XG5cbiAgICBzdGFydEhhbmRsZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgJ3JvdW5kJyk7XG4gICAgZW5kSGFuZGxlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWxpbmVjYXAnLCAncm91bmQnKTtcblxuICAgIGFic3RyYWN0SW5jbHVkZWRHLmFwcGVuZChzdGFydEhhbmRsZSk7XG4gICAgYWJzdHJhY3RJbmNsdWRlZEcuYXBwZW5kKGVuZEhhbmRsZSk7XG4gICAgYWJzdHJhY3RJbmNsdWRlZEcuYXBwZW5kKHJlY3RhbmdsZSk7XG5cbiAgICByZXR1cm4gYWJzdHJhY3RJbmNsdWRlZEc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVPcHRpb24oaXNIb3ZlcjogYm9vbGVhbikge1xuICAgIHJldHVybiBpc0hvdmVyXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiA0LFxuICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgICBzdHJva2U6IEFCU1RSQUNUX0hBTkRMRV9DT0xPUixcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDMsXG4gICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VCb2FyZENsYXNzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVIYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbiB8IHVuZGVmaW5lZCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgaWYgKGFjdGl2ZUhhbmRsZVBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdhYnN0cmFjdC1yZXNpemluZy1ob3Jpem9udGFsJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkTmF0aXZlRWxlbWVudChib2FyZCkuY2xhc3NMaXN0LmFkZCgnYWJzdHJhY3QtcmVzaXppbmctdmVydGljYWwnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKCdhYnN0cmFjdC1yZXNpemluZy1ob3Jpem9udGFsJyk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKCdhYnN0cmFjdC1yZXNpemluZy12ZXJ0aWNhbCcpO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,133 @@
1
+ import { drawRoundRectangleByNode } from './node-shape';
2
+ import { updateForeignObject } from '@plait/richtext';
3
+ import { BASE, PRIMARY_COLOR, STROKE_WIDTH } from '../../constants';
4
+ import { MindElement } from '../../interfaces';
5
+ import { getRectangleByNode } from '../position/node';
6
+ import { PlaitBoard, drawRoundRectangle, createG, Path, PlaitNode } from '@plait/core';
7
+ import { MindQueries } from '../../queries';
8
+ import { isHorizontalLayout, isIndentedLayout, isTopLayout } from '@plait/layouts';
9
+ import { getTopicRectangleByNode } from '../position/topic';
10
+ import { HorizontalPlacement, VerticalPlacement } from '../../interfaces/types';
11
+ import { getLayoutDirection, getPointByPlacement, moveXOfPoint, moveYOfPoint, transformPlacement } from '../point-placement';
12
+ import { hasPreviousOrNextOfDropPath } from '../dnd/common';
13
+ import { drawLink } from './node-link/draw-link';
14
+ export const drawFakeDragNode = (board, activeComponent, offsetX, offsetY) => {
15
+ const dragFakeNodeG = createG();
16
+ dragFakeNodeG.classList.add('dragging', 'fake-node', 'plait-board-attached');
17
+ const fakeDraggingNode = {
18
+ ...activeComponent.node,
19
+ children: [],
20
+ x: activeComponent.node.x + offsetX,
21
+ y: activeComponent.node.y + offsetY
22
+ };
23
+ const textRectangle = getTopicRectangleByNode(board, activeComponent.node);
24
+ const fakeNodeG = drawRoundRectangleByNode(board, fakeDraggingNode);
25
+ const richtextG = activeComponent.richtextG?.cloneNode(true);
26
+ updateForeignObject(richtextG, textRectangle.width, textRectangle.height, textRectangle.x + offsetX, textRectangle.y + offsetY);
27
+ dragFakeNodeG?.append(fakeNodeG);
28
+ dragFakeNodeG?.append(richtextG);
29
+ return dragFakeNodeG;
30
+ };
31
+ export const drawFakeDropNode = (board, target, path) => {
32
+ const fakeDropNodeG = createG();
33
+ const parent = PlaitNode.get(board, Path.parent(path));
34
+ const layout = MindQueries.getLayoutByElement(parent);
35
+ const isHorizontal = isHorizontalLayout(layout);
36
+ const { hasNextNode, hasPreviousNode } = hasPreviousOrNextOfDropPath(parent, target, path);
37
+ const width = 30;
38
+ const height = 12;
39
+ let fakeNode, centerPoint, basicNode, linkDirection;
40
+ if (!hasPreviousNode && !hasNextNode) {
41
+ const parentNode = MindElement.getNode(parent);
42
+ const parentRect = getRectangleByNode(parentNode);
43
+ linkDirection = getLayoutDirection(parentNode, isHorizontal);
44
+ basicNode = parentNode;
45
+ const placement = [HorizontalPlacement.right, VerticalPlacement.middle];
46
+ transformPlacement(placement, linkDirection);
47
+ const parentCenterPoint = getPointByPlacement(parentRect, placement);
48
+ if (isIndentedLayout(layout)) {
49
+ const placement = [
50
+ HorizontalPlacement.center,
51
+ isTopLayout(layout) ? VerticalPlacement.top : VerticalPlacement.bottom
52
+ ];
53
+ const parentCenterPoint = getPointByPlacement(parentRect, placement);
54
+ centerPoint = moveXOfPoint(parentCenterPoint, height, linkDirection);
55
+ centerPoint[1] = isTopLayout(layout) ? centerPoint[1] - height : centerPoint[1] + height;
56
+ }
57
+ else {
58
+ centerPoint = moveXOfPoint(parentCenterPoint, width, linkDirection);
59
+ }
60
+ }
61
+ else if (!hasPreviousNode && hasNextNode) {
62
+ const nextElement = PlaitNode.get(board, path);
63
+ basicNode = MindElement.getNode(nextElement);
64
+ const nextRect = getRectangleByNode(basicNode);
65
+ linkDirection = getLayoutDirection(basicNode, isHorizontal);
66
+ const placement = [HorizontalPlacement.left, VerticalPlacement.top];
67
+ transformPlacement(placement, linkDirection);
68
+ let offset = -height;
69
+ if (MindElement.isIndentedLayout(parent)) {
70
+ offset = isTopLayout(layout) ? offset / 2 + basicNode.height - basicNode.vGap : 0;
71
+ }
72
+ centerPoint = getPointByPlacement(nextRect, placement);
73
+ centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);
74
+ }
75
+ else if (hasPreviousNode && !hasNextNode) {
76
+ const previousElement = PlaitNode.get(board, Path.previous(path));
77
+ basicNode = MindElement.getNode(previousElement);
78
+ const previousRect = getRectangleByNode(basicNode);
79
+ linkDirection = getLayoutDirection(basicNode, isHorizontal);
80
+ const placement = [HorizontalPlacement.left, VerticalPlacement.bottom];
81
+ transformPlacement(placement, linkDirection);
82
+ let offset = height;
83
+ if (MindElement.isIndentedLayout(parent)) {
84
+ offset = isTopLayout(layout) ? -offset - (basicNode.height - basicNode.vGap) : offset;
85
+ }
86
+ centerPoint = getPointByPlacement(previousRect, placement);
87
+ centerPoint = moveYOfPoint(centerPoint, offset, linkDirection);
88
+ }
89
+ else {
90
+ const previousElement = PlaitNode.get(board, Path.previous(path));
91
+ basicNode = MindElement.getNode(previousElement);
92
+ const previousRect = getRectangleByNode(basicNode);
93
+ const nextElement = PlaitNode.get(board, path);
94
+ const nextNode = MindElement.getNode(nextElement);
95
+ const nextRect = getRectangleByNode(nextNode);
96
+ const beginPlacement = [HorizontalPlacement.left, VerticalPlacement.bottom];
97
+ const endPlacement = [HorizontalPlacement.left, VerticalPlacement.top];
98
+ linkDirection = getLayoutDirection(basicNode, isHorizontal);
99
+ transformPlacement(beginPlacement, linkDirection);
100
+ transformPlacement(endPlacement, linkDirection);
101
+ const previousPoint = getPointByPlacement(previousRect, beginPlacement);
102
+ const nextPoint = getPointByPlacement(nextRect, endPlacement);
103
+ centerPoint = [(previousPoint[0] + nextPoint[0]) / 2, (previousPoint[1] + nextPoint[1]) / 2];
104
+ }
105
+ let cornerPoint = centerPoint, oppositePoint = centerPoint;
106
+ const offsetY = isHorizontal ? height : width;
107
+ const offsetX = isHorizontal ? width : height;
108
+ cornerPoint = moveYOfPoint(cornerPoint, -offsetY / 2, linkDirection);
109
+ oppositePoint = moveYOfPoint(oppositePoint, offsetY / 2, linkDirection);
110
+ oppositePoint = moveXOfPoint(oppositePoint, offsetX, linkDirection);
111
+ const x = Math.min(cornerPoint[0], oppositePoint[0]);
112
+ const y = Math.min(cornerPoint[1], oppositePoint[1]);
113
+ fakeNode = {
114
+ ...basicNode,
115
+ x,
116
+ y,
117
+ width,
118
+ height,
119
+ hGap: MindElement.isIndentedLayout(parent) ? BASE * 4 + (basicNode.origin.strokeWidth || STROKE_WIDTH) : 0,
120
+ vGap: MindElement.isIndentedLayout(parent) ? BASE : 0
121
+ };
122
+ const fakeRectangleG = drawRoundRectangle(PlaitBoard.getRoughSVG(board), fakeNode.x, fakeNode.y, fakeNode.x + width, fakeNode.y + height, {
123
+ stroke: PRIMARY_COLOR,
124
+ strokeWidth: 2,
125
+ fill: PRIMARY_COLOR,
126
+ fillStyle: 'solid'
127
+ });
128
+ const link = drawLink(board, MindElement.getNode(parent), fakeNode, isHorizontal, false, PRIMARY_COLOR, STROKE_WIDTH);
129
+ fakeDropNodeG?.appendChild(link);
130
+ fakeDropNodeG?.appendChild(fakeRectangleG);
131
+ return fakeDropNodeG;
132
+ };
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1kbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9kcmF3L25vZGUtZG5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQW1CLFdBQVcsRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBRTFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQVMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFrQixNQUFNLGdCQUFnQixDQUFDO0FBQ25HLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBa0IsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFpQixFQUFF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VyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFHLElBQUksRUFBRSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN4RCxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQ3JDLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQzdCLFFBQVMsQ0FBQyxDQUFDLEVBQ1gsUUFBUyxDQUFDLENBQUMsRUFDWCxRQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFDbkIsUUFBUyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQ3BCO1FBQ0ksTUFBTSxFQUFFLGFBQWE7UUFDckIsV0FBVyxFQUFFLENBQUM7UUFDZCxJQUFJLEVBQUUsYUFBYTtRQUNuQixTQUFTLEVBQUUsT0FBTztLQUNyQixDQUNKLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3RILGFBQWEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxPQUFPLGFBQWEsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkcmF3Um91bmRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuL25vZGUtc2hhcGUnO1xuaW1wb3J0IHsgdXBkYXRlRm9yZWlnbk9iamVjdCB9IGZyb20gJ0BwbGFpdC9yaWNodGV4dCc7XG5pbXBvcnQgeyBCQVNFLCBQUklNQVJZX0NPTE9SLCBTVFJPS0VfV0lEVEggfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTGF5b3V0RGlyZWN0aW9uLCBNaW5kRWxlbWVudCwgTWluZE5vZGUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi4vcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgZHJhd1JvdW5kUmVjdGFuZ2xlLCBjcmVhdGVHLCBQYXRoLCBQbGFpdE5vZGUgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgaXNIb3Jpem9udGFsTGF5b3V0LCBpc0luZGVudGVkTGF5b3V0LCBpc1RvcExheW91dCwgTWluZExheW91dFR5cGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBnZXRUb3BpY1JlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4uL3Bvc2l0aW9uL3RvcGljJztcbmltcG9ydCB7IEhvcml6b250YWxQbGFjZW1lbnQsIFBvaW50UGxhY2VtZW50LCBWZXJ0aWNhbFBsYWNlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TGF5b3V0RGlyZWN0aW9uLCBnZXRQb2ludEJ5UGxhY2VtZW50LCBtb3ZlWE9mUG9pbnQsIG1vdmVZT2ZQb2ludCwgdHJhbnNmb3JtUGxhY2VtZW50IH0gZnJvbSAnLi4vcG9pbnQtcGxhY2VtZW50JztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgaGFzUHJldmlvdXNPck5leHRPZkRyb3BQYXRoIH0gZnJvbSAnLi4vZG5kL2NvbW1vbic7XG5pbXBvcnQgeyBkcmF3TGluayB9IGZyb20gJy4vbm9kZS1saW5rL2RyYXctbGluayc7XG5cbmV4cG9ydCBjb25zdCBkcmF3RmFrZURyYWdOb2RlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVDb21wb25lbnQ6IE1pbmROb2RlQ29tcG9uZW50LCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGRyYWdGYWtlTm9kZUcgPSBjcmVhdGVHKCk7XG4gICAgZHJhZ0Zha2VOb2RlRy5jbGFzc0xpc3QuYWRkKCdkcmFnZ2luZycsICdmYWtlLW5vZGUnLCAncGxhaXQtYm9hcmQtYXR0YWNoZWQnKTtcblxuICAgIGNvbnN0IGZha2VEcmFnZ2luZ05vZGU6IE1pbmROb2RlID0ge1xuICAgICAgICAuLi5hY3RpdmVDb21wb25lbnQubm9kZSxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICB4OiBhY3RpdmVDb21wb25lbnQubm9kZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgeTogYWN0aXZlQ29tcG9uZW50Lm5vZGUueSArIG9mZnNldFlcbiAgICB9O1xuICAgIGNvbnN0IHRleHRSZWN0YW5nbGUgPSBnZXRUb3BpY1JlY3RhbmdsZUJ5Tm9kZShib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgYWN0aXZlQ29tcG9uZW50Lm5vZGUpO1xuICAgIGNvbnN0IGZha2VOb2RlRyA9IGRyYXdSb3VuZFJlY3RhbmdsZUJ5Tm9kZShib2FyZCwgZmFrZURyYWdnaW5nTm9kZSk7XG5cbiAgICBjb25zdCByaWNodGV4dEcgPSBhY3RpdmVDb21wb25lbnQucmljaHRleHRHPy5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgdXBkYXRlRm9yZWlnbk9iamVjdChyaWNodGV4dEcsIHRleHRSZWN0YW5nbGUud2lkdGgsIHRleHRSZWN0YW5nbGUuaGVpZ2h0LCB0ZXh0UmVjdGFuZ2xlLnggKyBvZmZzZXRYLCB0ZXh0UmVjdGFuZ2xlLnkgKyBvZmZzZXRZKTtcblxuICAgIGRyYWdGYWtlTm9kZUc/LmFwcGVuZChmYWtlTm9kZUcpO1xuICAgIGRyYWdGYWtlTm9kZUc/LmFwcGVuZChyaWNodGV4dEcpO1xuICAgIHJldHVybiBkcmFnRmFrZU5vZGVHO1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdGYWtlRHJvcE5vZGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHRhcmdldDogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGgpID0+IHtcbiAgICBjb25zdCBmYWtlRHJvcE5vZGVHID0gY3JlYXRlRygpO1xuICAgIGNvbnN0IHBhcmVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFBhdGgucGFyZW50KHBhdGgpKSBhcyBNaW5kRWxlbWVudDtcbiAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRMYXlvdXRCeUVsZW1lbnQocGFyZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxMYXlvdXQobGF5b3V0KTtcbiAgICBjb25zdCB7IGhhc05leHROb2RlLCBoYXNQcmV2aW91c05vZGUgfSA9IGhhc1ByZXZpb3VzT3JOZXh0T2ZEcm9wUGF0aChwYXJlbnQsIHRhcmdldCwgcGF0aCk7XG4gICAgY29uc3Qgd2lkdGggPSAzMDtcbiAgICBjb25zdCBoZWlnaHQgPSAxMjtcbiAgICBsZXQgZmFrZU5vZGU6IE1pbmROb2RlLCBjZW50ZXJQb2ludDogUG9pbnQsIGJhc2ljTm9kZTogTWluZE5vZGUsIGxpbmtEaXJlY3Rpb246IExheW91dERpcmVjdGlvbjtcblxuICAgIGlmICghaGFzUHJldmlvdXNOb2RlICYmICFoYXNOZXh0Tm9kZSkge1xuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShwYXJlbnQpO1xuICAgICAgICBjb25zdCBwYXJlbnRSZWN0ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHBhcmVudE5vZGUpO1xuXG4gICAgICAgIGxpbmtEaXJlY3Rpb24gPSBnZXRMYXlvdXREaXJlY3Rpb24ocGFyZW50Tm9kZSwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgYmFzaWNOb2RlID0gcGFyZW50Tm9kZTtcblxuICAgICAgICBjb25zdCBwbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQucmlnaHQsIFZlcnRpY2FsUGxhY2VtZW50Lm1pZGRsZV07XG4gICAgICAgIHRyYW5zZm9ybVBsYWNlbWVudChwbGFjZW1lbnQsIGxpbmtEaXJlY3Rpb24pO1xuICAgICAgICBjb25zdCBwYXJlbnRDZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQocGFyZW50UmVjdCwgcGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoaXNJbmRlbnRlZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBwbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW1xuICAgICAgICAgICAgICAgIEhvcml6b250YWxQbGFjZW1lbnQuY2VudGVyLFxuICAgICAgICAgICAgICAgIGlzVG9wTGF5b3V0KGxheW91dCkgPyBWZXJ0aWNhbFBsYWNlbWVudC50b3AgOiBWZXJ0aWNhbFBsYWNlbWVudC5ib3R0b21cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDZW50ZXJQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQocGFyZW50UmVjdCwgcGxhY2VtZW50KTtcblxuICAgICAgICAgICAgY2VudGVyUG9pbnQgPSBtb3ZlWE9mUG9pbnQocGFyZW50Q2VudGVyUG9pbnQsIGhlaWdodCwgbGlua0RpcmVjdGlvbik7XG4gICAgICAgICAgICBjZW50ZXJQb2ludFsxXSA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyBjZW50ZXJQb2ludFsxXSAtIGhlaWdodCA6IGNlbnRlclBvaW50WzFdICsgaGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VudGVyUG9pbnQgPSBtb3ZlWE9mUG9pbnQocGFyZW50Q2VudGVyUG9pbnQsIHdpZHRoLCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWhhc1ByZXZpb3VzTm9kZSAmJiBoYXNOZXh0Tm9kZSkge1xuICAgICAgICBjb25zdCBuZXh0RWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHBhdGgpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICBiYXNpY05vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKG5leHRFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbmV4dFJlY3QgPSBnZXRSZWN0YW5nbGVCeU5vZGUoYmFzaWNOb2RlKTtcbiAgICAgICAgbGlua0RpcmVjdGlvbiA9IGdldExheW91dERpcmVjdGlvbihiYXNpY05vZGUsIGlzSG9yaXpvbnRhbCk7XG5cbiAgICAgICAgY29uc3QgcGxhY2VtZW50OiBQb2ludFBsYWNlbWVudCA9IFtIb3Jpem9udGFsUGxhY2VtZW50LmxlZnQsIFZlcnRpY2FsUGxhY2VtZW50LnRvcF07XG5cbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KHBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgbGV0IG9mZnNldCA9IC1oZWlnaHQ7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5pc0luZGVudGVkTGF5b3V0KHBhcmVudCkpIHtcbiAgICAgICAgICAgIG9mZnNldCA9IGlzVG9wTGF5b3V0KGxheW91dCkgPyBvZmZzZXQgLyAyICsgYmFzaWNOb2RlLmhlaWdodCAtIGJhc2ljTm9kZS52R2FwIDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNlbnRlclBvaW50ID0gZ2V0UG9pbnRCeVBsYWNlbWVudChuZXh0UmVjdCwgcGxhY2VtZW50KTtcbiAgICAgICAgY2VudGVyUG9pbnQgPSBtb3ZlWU9mUG9pbnQoY2VudGVyUG9pbnQsIG9mZnNldCwgbGlua0RpcmVjdGlvbik7XG4gICAgfSBlbHNlIGlmIChoYXNQcmV2aW91c05vZGUgJiYgIWhhc05leHROb2RlKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFBhdGgucHJldmlvdXMocGF0aCkpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICBiYXNpY05vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHByZXZpb3VzRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShiYXNpY05vZGUpO1xuICAgICAgICBsaW5rRGlyZWN0aW9uID0gZ2V0TGF5b3V0RGlyZWN0aW9uKGJhc2ljTm9kZSwgaXNIb3Jpem9udGFsKTtcblxuICAgICAgICBjb25zdCBwbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQubGVmdCwgVmVydGljYWxQbGFjZW1lbnQuYm90dG9tXTtcblxuICAgICAgICB0cmFuc2Zvcm1QbGFjZW1lbnQocGxhY2VtZW50LCBsaW5rRGlyZWN0aW9uKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaXNJbmRlbnRlZExheW91dChwYXJlbnQpKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBpc1RvcExheW91dChsYXlvdXQpID8gLW9mZnNldCAtIChiYXNpY05vZGUuaGVpZ2h0IC0gYmFzaWNOb2RlLnZHYXApIDogb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGNlbnRlclBvaW50ID0gZ2V0UG9pbnRCeVBsYWNlbWVudChwcmV2aW91c1JlY3QsIHBsYWNlbWVudCk7XG4gICAgICAgIGNlbnRlclBvaW50ID0gbW92ZVlPZlBvaW50KGNlbnRlclBvaW50LCBvZmZzZXQsIGxpbmtEaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRWxlbWVudCA9IFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFBhdGgucHJldmlvdXMocGF0aCkpIGFzIE1pbmRFbGVtZW50O1xuICAgICAgICBiYXNpY05vZGUgPSBNaW5kRWxlbWVudC5nZXROb2RlKHByZXZpb3VzRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmVjdCA9IGdldFJlY3RhbmdsZUJ5Tm9kZShiYXNpY05vZGUpO1xuXG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50ID0gUGxhaXROb2RlLmdldChib2FyZCwgcGF0aCkgYXMgTWluZEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IG5leHROb2RlID0gTWluZEVsZW1lbnQuZ2V0Tm9kZShuZXh0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRSZWN0ID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5leHROb2RlKTtcblxuICAgICAgICBjb25zdCBiZWdpblBsYWNlbWVudDogUG9pbnRQbGFjZW1lbnQgPSBbSG9yaXpvbnRhbFBsYWNlbWVudC5sZWZ0LCBWZXJ0aWNhbFBsYWNlbWVudC5ib3R0b21dO1xuICAgICAgICBjb25zdCBlbmRQbGFjZW1lbnQ6IFBvaW50UGxhY2VtZW50ID0gW0hvcml6b250YWxQbGFjZW1lbnQubGVmdCwgVmVydGljYWxQbGFjZW1lbnQudG9wXTtcbiAgICAgICAgbGlua0RpcmVjdGlvbiA9IGdldExheW91dERpcmVjdGlvbihiYXNpY05vZGUsIGlzSG9yaXpvbnRhbCk7XG5cbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KGJlZ2luUGxhY2VtZW50LCBsaW5rRGlyZWN0aW9uKTtcbiAgICAgICAgdHJhbnNmb3JtUGxhY2VtZW50KGVuZFBsYWNlbWVudCwgbGlua0RpcmVjdGlvbik7XG5cbiAgICAgICAgY29uc3QgcHJldmlvdXNQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQocHJldmlvdXNSZWN0LCBiZWdpblBsYWNlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRQb2ludCA9IGdldFBvaW50QnlQbGFjZW1lbnQobmV4dFJlY3QsIGVuZFBsYWNlbWVudCk7XG5cbiAgICAgICAgY2VudGVyUG9pbnQgPSBbKHByZXZpb3VzUG9pbnRbMF0gKyBuZXh0UG9pbnRbMF0pIC8gMiwgKHByZXZpb3VzUG9pbnRbMV0gKyBuZXh0UG9pbnRbMV0pIC8gMl07XG4gICAgfVxuXG4gICAgbGV0IGNvcm5lclBvaW50ID0gY2VudGVyUG9pbnQsXG4gICAgICAgIG9wcG9zaXRlUG9pbnQgPSBjZW50ZXJQb2ludDtcblxuICAgIGNvbnN0IG9mZnNldFkgPSBpc0hvcml6b250YWwgPyBoZWlnaHQgOiB3aWR0aDtcbiAgICBjb25zdCBvZmZzZXRYID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG5cbiAgICBjb3JuZXJQb2ludCA9IG1vdmVZT2ZQb2ludChjb3JuZXJQb2ludCwgLW9mZnNldFkgLyAyLCBsaW5rRGlyZWN0aW9uISk7XG5cbiAgICBvcHBvc2l0ZVBvaW50ID0gbW92ZVlPZlBvaW50KG9wcG9zaXRlUG9pbnQsIG9mZnNldFkgLyAyLCBsaW5rRGlyZWN0aW9uISk7XG4gICAgb3Bwb3NpdGVQb2ludCA9IG1vdmVYT2ZQb2ludChvcHBvc2l0ZVBvaW50LCBvZmZzZXRYLCBsaW5rRGlyZWN0aW9uISk7XG5cbiAgICBjb25zdCB4ID0gTWF0aC5taW4oY29ybmVyUG9pbnRbMF0sIG9wcG9zaXRlUG9pbnRbMF0pO1xuICAgIGNvbnN0IHkgPSBNYXRoLm1pbihjb3JuZXJQb2ludFsxXSwgb3Bwb3NpdGVQb2ludFsxXSk7XG5cbiAgICBmYWtlTm9kZSA9IHtcbiAgICAgICAgLi4uYmFzaWNOb2RlISxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaEdhcDogTWluZEVsZW1lbnQuaXNJbmRlbnRlZExheW91dChwYXJlbnQpID8gQkFTRSAqIDQgKyAoYmFzaWNOb2RlLm9yaWdpbi5zdHJva2VXaWR0aCB8fCBTVFJPS0VfV0lEVEgpIDogMCxcbiAgICAgICAgdkdhcDogTWluZEVsZW1lbnQuaXNJbmRlbnRlZExheW91dChwYXJlbnQpID8gQkFTRSA6IDBcbiAgICB9O1xuXG4gICAgY29uc3QgZmFrZVJlY3RhbmdsZUcgPSBkcmF3Um91bmRSZWN0YW5nbGUoXG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLFxuICAgICAgICBmYWtlTm9kZSEueCxcbiAgICAgICAgZmFrZU5vZGUhLnksXG4gICAgICAgIGZha2VOb2RlIS54ICsgd2lkdGgsXG4gICAgICAgIGZha2VOb2RlIS55ICsgaGVpZ2h0LFxuICAgICAgICB7XG4gICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgIGZpbGw6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBsaW5rID0gZHJhd0xpbmsoYm9hcmQsIE1pbmRFbGVtZW50LmdldE5vZGUocGFyZW50KSwgZmFrZU5vZGUsIGlzSG9yaXpvbnRhbCwgZmFsc2UsIFBSSU1BUllfQ09MT1IsIFNUUk9LRV9XSURUSCk7XG4gICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQobGluayk7XG4gICAgZmFrZURyb3BOb2RlRz8uYXBwZW5kQ2hpbGQoZmFrZVJlY3RhbmdsZUcpO1xuXG4gICAgcmV0dXJuIGZha2VEcm9wTm9kZUc7XG59O1xuIl19