@plait/core 0.43.0 → 0.45.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.
@@ -3,6 +3,7 @@ import { depthFirstRecursion, getIsRecursionFunc } from './tree';
3
3
  import { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';
4
4
  import { Selection } from '../interfaces/selection';
5
5
  import { PlaitPluginKey } from '../public-api';
6
+ import { sortElements } from './position';
6
7
  export const getHitElementsBySelection = (board, selection, match = () => true) => {
7
8
  const newSelection = selection || board.selection;
8
9
  const rectangleHitElements = [];
@@ -47,7 +48,8 @@ export const getHitElementByPoint = (board, point, match = () => true) => {
47
48
  return hitElement || rectangleHitElement;
48
49
  };
49
50
  export const cacheSelectedElements = (board, selectedElements) => {
50
- BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);
51
+ const sortedElements = sortElements(board, selectedElements);
52
+ BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);
51
53
  };
52
54
  export const getSelectedElements = (board) => {
53
55
  return BOARD_TO_SELECTED_ELEMENT.get(board) || [];
@@ -95,4 +97,4 @@ export const temporaryDisableSelection = (board) => {
95
97
  board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
96
98
  }, 0);
97
99
  };
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBcUIsY0FBYyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVyRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUNyQyxLQUFpQixFQUNqQixTQUFxQixFQUNyQixRQUE0QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQ3hELEVBQUU7SUFDQSxNQUFNLFlBQVksR0FBRyxTQUFTLElBQUssS0FBSyxDQUFDLFNBQXVCLENBQUM7SUFDakUsTUFBTSxvQkFBb0IsR0FBbUIsRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RCxJQUFJLFdBQVcsRUFBRTtRQUNiLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksVUFBVSxFQUFFO1lBQ1osT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxPQUFPLEVBQUUsQ0FBQztTQUNiO0tBQ0o7SUFDRCxtQkFBbUIsQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLEVBQUU7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Q0FBQyxDQUFDO0lBQzVFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsRUFBRTtRQUNwRSxnQkFBZ0IsRUFBRSxJQUFJO0tBQ3pCLENBQUMsQ0FBQztJQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDWixLQUFLLENBQUMsZ0JBQWdCLENBQW9CLGNBQWMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDbkcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgQW5jZXN0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgZ2V0SXNSZWN1cnNpb25GdW5jIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQgfSBmcm9tICcuL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb24gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NlbGVjdGlvbic7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IFBsYWl0T3B0aW9uc0JvYXJkLCBQbGFpdFBsdWdpbktleSwgV2l0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IChib2FyZC5zZWxlY3Rpb24gYXMgU2VsZWN0aW9uKTtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgbmV3U2VsZWN0aW9uLmFuY2hvciwgbWF0Y2gpO1xuICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtoaXRFbGVtZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgbWF0Y2gobm9kZSkgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiByZWN0YW5nbGVIaXRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50QnlQb2ludCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pOiB1bmRlZmluZWQgfCBQbGFpdEVsZW1lbnQgPT4ge1xuICAgIGxldCByZWN0YW5nbGVIaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGhpdEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8ICFtYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib2FyZC5pc0hpdChub2RlLCBwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBoaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlY3RhbmdsZUhpdEVsZW1lbnQgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgeyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVIaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIGhpdEVsZW1lbnQgfHwgcmVjdGFuZ2xlSGl0RWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5zZXQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5nZXQoYm9hcmQpIHx8IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50IHwgUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgZWxlbWVudHMgPSBbXTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBlbGVtZW50cy5wdXNoKC4uLmVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFsuLi5zZWxlY3RlZEVsZW1lbnRzLCAuLi5lbGVtZW50c10pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50LCBpc1JlbW92ZUNoaWxkcmVuID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgaWYgKHNlbGVjdGVkRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgICAgIGlmIChib2FyZC5pc1JlY3Vyc2lvbihlbGVtZW50KSAmJiBpc1JlbW92ZUNoaWxkcmVuKSB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub2RlID0+IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0RWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gIXRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKHZhbHVlKSk7XG4gICAgICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgbmV3U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZEVsZW1lbnRzLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09IGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRlbXBvcmFyeURpc2FibGVTZWxlY3Rpb24gPSAoYm9hcmQ6IFBsYWl0T3B0aW9uc0JvYXJkKSA9PiB7XG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBib2FyZC5nZXRQbHVnaW5PcHRpb25zKFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24pO1xuICAgIGJvYXJkLnNldFBsdWdpbk9wdGlvbnM8V2l0aFBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHtcbiAgICAgICAgaXNEaXNhYmxlZFNlbGVjdDogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBib2FyZC5zZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7IC4uLmN1cnJlbnRPcHRpb25zIH0pO1xuICAgIH0sIDApO1xufTtcbiJdfQ==
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBcUIsY0FBYyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLEtBQWlCLEVBQ2pCLFNBQXFCLEVBQ3JCLFFBQTRDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDeEQsRUFBRTtJQUNBLE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSyxLQUFLLENBQUMsU0FBdUIsQ0FBQztJQUNqRSxNQUFNLG9CQUFvQixHQUFtQixFQUFFLENBQUM7SUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNmLE9BQU8sRUFBRSxDQUFDO0tBQ2I7SUFDRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELElBQUksV0FBVyxFQUFFO1FBQ2IsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0UsSUFBSSxVQUFVLEVBQUU7WUFDWixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNILE9BQU8sRUFBRSxDQUFDO1NBQ2I7S0FDSjtJ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LE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7SUFDbEUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1RSxLQUFLLENBQUMsZ0JBQWdCLENBQW9CLGNBQWMsQ0FBQyxhQUFhLEVBQUU7UUFDcEUsZ0JBQWdCLEVBQUUsSUFBSTtLQUN6QixDQUFDLENBQUM7SUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ1osS0FBSyxDQUFDLGdCQUFnQixDQUFvQixjQUFjLENBQUMsYUFBYSxFQUFFLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24sIGdldElzUmVjdXJzaW9uRnVuYyB9IGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgeyBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5UIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCwgUGxhaXRQbHVnaW5LZXksIFdpdGhQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBzb3J0RWxlbWVudHMgfSBmcm9tICcuL3Bvc2l0aW9uJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IChib2FyZC5zZWxlY3Rpb24gYXMgU2VsZWN0aW9uKTtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgbmV3U2VsZWN0aW9uLmFuY2hvciwgbWF0Y2gpO1xuICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtoaXRFbGVtZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgbWF0Y2gobm9kZSkgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiByZWN0YW5nbGVIaXRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50QnlQb2ludCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pOiB1bmRlZmluZWQgfCBQbGFpdEVsZW1lbnQgPT4ge1xuICAgIGxldCByZWN0YW5nbGVIaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGhpdEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8ICFtYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib2FyZC5pc0hpdChub2RlLCBwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBoaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlY3RhbmdsZUhpdEVsZW1lbnQgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgeyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVIaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIGhpdEVsZW1lbnQgfHwgcmVjdGFuZ2xlSGl0RWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkRWxlbWVudHMgPSBzb3J0RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuc2V0KGJvYXJkLCBzb3J0ZWRFbGVtZW50cyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2VsZWN0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5ULmdldChib2FyZCkgfHwgW107XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQgfCBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCBlbGVtZW50cyA9IFtdO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQpKSB7XG4gICAgICAgIGVsZW1lbnRzLnB1c2goLi4uZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgWy4uLnNlbGVjdGVkRWxlbWVudHMsIC4uLmVsZW1lbnRzXSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGlzUmVtb3ZlQ2hpbGRyZW4gPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICAgICAgaWYgKGJvYXJkLmlzUmVjdXJzaW9uKGVsZW1lbnQpICYmIGlzUmVtb3ZlQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vZGUgPT4gYm9hcmQuaXNSZWN1cnNpb24obm9kZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkRWxlbWVudHMgPSBzZWxlY3RlZEVsZW1lbnRzLmZpbHRlcih2YWx1ZSA9PiAhdGFyZ2V0RWxlbWVudHMuaW5jbHVkZXModmFsdWUpKTtcbiAgICAgICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBuZXdTZWxlY3RlZEVsZW1lbnRzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFtdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgdGVtcG9yYXJ5RGlzYWJsZVNlbGVjdGlvbiA9IChib2FyZDogUGxhaXRPcHRpb25zQm9hcmQpID0+IHtcbiAgICBjb25zdCBjdXJyZW50T3B0aW9ucyA9IGJvYXJkLmdldFBsdWdpbk9wdGlvbnMoUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbik7XG4gICAgYm9hcmQuc2V0UGx1Z2luT3B0aW9uczxXaXRoUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbiwge1xuICAgICAgICBpc0Rpc2FibGVkU2VsZWN0OiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGJvYXJkLnNldFBsdWdpbk9wdGlvbnM8V2l0aFBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHsgLi4uY3VycmVudE9wdGlvbnMgfSk7XG4gICAgfSwgMCk7XG59O1xuIl19
@@ -1,6 +1,5 @@
1
1
  import { PlaitBoard, PlaitElement } from '../interfaces';
2
2
  import { findElements, getRectangleByElements } from './element';
3
- import { sortElements } from './position';
4
3
  const IMAGE_CONTAINER = 'plait-image-container';
5
4
  /**
6
5
  * Is element node
@@ -165,9 +164,7 @@ export async function toImage(board, options) {
165
164
  if (!board) {
166
165
  return undefined;
167
166
  }
168
- const elements = options.elements
169
- ? sortElements(board, options.elements)
170
- : findElements(board, { match: () => true, recursion: () => true, isReverse: false });
167
+ const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });
171
168
  const targetRectangle = getRectangleByElements(board, elements, false);
172
169
  const { ratio = 2, fillStyle = 'transparent' } = options;
173
170
  const { width, height } = targetRectangle;
@@ -199,4 +196,4 @@ export function downloadImage(url, name) {
199
196
  a.click();
200
197
  a.remove();
201
198
  }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8taW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy90by1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFDLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDO0FBWWhEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxJQUFVO0lBQzdCLE9BQU8sSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQy9DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsR0FBVztJQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDOUIsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsR0FBRyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQzlELEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsU0FBUyxHQUFHLGFBQWE7SUFDMUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBRSxDQUFDO0lBRXJDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDbEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQztJQUNwQyxHQUFHLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztJQUM1QixHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUMxQixHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWxDLE9BQU87UUFDSCxNQUFNO1FBQ04sR0FBRztLQUNOLENBQUM7QUFDTixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsb0JBQW9CLENBQUMsR0FBVztJQUNyQyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDN0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFCLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQXdCLFVBQWEsRUFBRSxVQUFhO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLFVBQVUsRUFBRSxLQUFLLENBQUM7SUFDdEMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNkLE9BQU87S0FDVjtJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7UUFDckIsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztLQUM3RDtTQUFNO1FBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0wsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxVQUF1QixFQUFFLFNBQXNCLEVBQUUscUJBQTZCO0lBQ3RHLElBQUkscUJBQXFCLEVBQUU7UUFDdkIsTUFBTSxVQUFVLEdBQUcscUJBQXFCLEdBQUcsS0FBSyxlQUFlLEVBQUUsQ0FBQztRQUNsRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdEUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQWtCLENBQUM7WUFDcEcsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQWtCLENBQUM7WUFDdEgsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUIsYUFBYSxDQUFDLElBQW1CLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBZ0IsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO0tBQ047QUFDTCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxVQUF1QixFQUFFLFNBQXNCO0lBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDeEYsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxtQkFBbUI7WUFDbkIsTUFBTSxLQUFLLEdBQUksY0FBOEIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkUsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hCO1lBQ0Qsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUN6QyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FDTCxDQUFDO0FBQ04sQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsS0FBSyxVQUFVLFFBQVEsQ0FBQyxLQUFpQixFQUFFLFFBQXdCLEVBQUUsU0FBMEIsRUFBRSxPQUF1QjtJQUNwSCxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDO0lBQzFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLHFCQUFxQixFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFnQixDQUFDO0lBQzVELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFpQixDQUFDO0lBRW5GLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsS0FBSyxJQUFJLENBQUM7SUFDM0MsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQztJQUM3QyxlQUFlLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDM0MsZUFBZSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELGVBQWUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRCxlQUFlLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXpILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBZ0IsQ0FBQztRQUN4RCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLHFCQUErQixDQUFDLENBQUM7UUFFdkUsTUFBTSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0MsY0FBYyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ0YsZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFpQixFQUFFLE9BQXVCO0lBQ3BFLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDUixPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUNELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRO1FBQzdCLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDdkMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUYsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2RSxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLEdBQUcsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUVuQyxNQUFNLGVBQWUsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXpFLE1BQU0sTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEUsTUFBTSxNQUFNLEdBQUcsb0NBQW9DLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFFaEYsSUFBSTtRQUNBLE1BQU0sR0FBRyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN4QztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLFNBQVMsQ0FBQztLQUNwQjtBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNuRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBmaW5kRWxlbWVudHMsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgc29ydEVsZW1lbnRzIH0gZnJvbSAnLi9wb3NpdGlvbic7XG5cbmNvbnN0IElNQUdFX0NPTlRBSU5FUiA9ICdwbGFpdC1pbWFnZS1jb250YWluZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvSW1hZ2VPcHRpb25zIHtcbiAgICBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcmF0aW8/OiBudW1iZXI7XG4gICAgcGFkZGluZz86IG51bWJlcjtcbiAgICBmaWxsU3R5bGU/OiBzdHJpbmc7XG4gICAgLy8g6YCX5Y+357G75ZCN5YiX6KGo44CCIOivpeWIl+ihqOW/hemhu+mHh+eUqCBjbGFzczEsY2xhc3MyLC4uLiDnmoTlvaLlvI/jgIJcbiAgICBpbmxpbmVTdHlsZUNsYXNzTmFtZXM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSXMgZWxlbWVudCBub2RlXG4gKiBAcGFyYW0gbm9kZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShub2RlOiBOb2RlKTogbm9kZSBpcyBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG4vKipcbiAqIGxvYWQgaW1hZ2UgcmVzb3VyY2VzXG4gKiBAcGFyYW0gdXJsIGltYWdlIHVybFxuICogQHJldHVybnMgaW1hZ2UgZWxlbWVudFxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2Uoc3JjOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxJbWFnZUVsZW1lbnQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGltZyk7XG4gICAgICAgIGltZy5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGxvYWQgaW1hZ2UnKSk7XG4gICAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgfSk7XG59XG5cbi8qKlxuICogY3JlYXRlIGFuZCByZXR1cm4gY2FudmFzIGFuZCBjb250ZXh0XG4gKiBAcGFyYW0gd2lkdGggY2FudmFzIHdpZHRoXG4gKiBAcGFyYW0gaGVpZ2h0IGNhbnZhcyBoZWlnaHRcbiAqIEBwYXJhbSBmaWxsU3R5bGUgZmlsbCBzdHlsZVxuICogQHJldHVybnMgY2FudmFzIGFuZCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZmlsbFN0eWxlID0gJ3RyYW5zcGFyZW50Jykge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcblxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjZmZmZmZmJztcbiAgICBjdHguZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY3R4XG4gICAgfTtcbn1cblxuLyoqXG4gKiBjb252ZXJ0IGltYWdlIHRvIGJhc2U2NFxuICogQHBhcmFtIHVybCBpbWFnZSB1cmxcbiAqIEByZXR1cm5zIGltYWdlIGJhc2U2NFxuICovXG5mdW5jdGlvbiBjb252ZXJ0SW1hZ2VUb0Jhc2U2NCh1cmw6IHN0cmluZykge1xuICAgIHJldHVybiBsb2FkSW1hZ2UodXJsKS50aGVuKGltZyA9PiB7XG4gICAgICAgIGNvbnN0IHsgY2FudmFzLCBjdHggfSA9IGNyZWF0ZUNhbnZhcyhpbWcud2lkdGgsIGltZy5oZWlnaHQpO1xuICAgICAgICBjdHg/LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogY2xvbmUgbm9kZSBzdHlsZVxuICogQHBhcmFtIG5hdGl2ZU5vZGUgc291cmNlIG5vZGVcbiAqIEBwYXJhbSBjbG9uZWROb2RlIGNsb25lIG5vZGVcbiAqL1xuZnVuY3Rpb24gY2xvbmVDU1NTdHlsZTxUIGV4dGVuZHMgSFRNTEVsZW1lbnQ+KG5hdGl2ZU5vZGU6IFQsIGNsb25lZE5vZGU6IFQpIHtcbiAgICBjb25zdCB0YXJnZXRTdHlsZSA9IGNsb25lZE5vZGU/LnN0eWxlO1xuICAgIGlmICghdGFyZ2V0U3R5bGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZVN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobmF0aXZlTm9kZSk7XG4gICAgaWYgKHNvdXJjZVN0eWxlLmNzc1RleHQpIHtcbiAgICAgICAgdGFyZ2V0U3R5bGUuY3NzVGV4dCA9IHNvdXJjZVN0eWxlLmNzc1RleHQ7XG4gICAgICAgIHRhcmdldFN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IHNvdXJjZVN0eWxlLnRyYW5zZm9ybU9yaWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBBcnJheS5mcm9tKHNvdXJjZVN0eWxlKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gc291cmNlU3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgICAgICAgICAgIHRhcmdldFN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBzb3VyY2VTdHlsZS5nZXRQcm9wZXJ0eVByaW9yaXR5KG5hbWUpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIGJhdGNoIGNsb25lIHRhcmdldCBzdHlsZXNcbiAqIEBwYXJhbSBzb3VyY2VOb2RlXG4gKiBAcGFyYW0gY2xvbmVOb2RlXG4gKiBAcGFyYW0gaW5saW5lU3R5bGVDbGFzc05hbWVzXG4gKi9cbmZ1bmN0aW9uIGJhdGNoQ2xvbmVDU1NTdHlsZShzb3VyY2VOb2RlOiBTVkdHRWxlbWVudCwgY2xvbmVOb2RlOiBTVkdHRWxlbWVudCwgaW5saW5lU3R5bGVDbGFzc05hbWVzOiBzdHJpbmcpIHtcbiAgICBpZiAoaW5saW5lU3R5bGVDbGFzc05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBpbmxpbmVTdHlsZUNsYXNzTmFtZXMgKyBgLC4ke0lNQUdFX0NPTlRBSU5FUn1gO1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlcyA9IEFycmF5LmZyb20oc291cmNlTm9kZS5xdWVyeVNlbGVjdG9yQWxsKGNsYXNzTmFtZXMpKTtcbiAgICAgICAgY29uc3QgY2xvbmVOb2RlcyA9IEFycmF5LmZyb20oY2xvbmVOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoY2xhc3NOYW1lcykpO1xuXG4gICAgICAgIHNvdXJjZU5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gQXJyYXkuZnJvbShub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSkuZmlsdGVyKGlzRWxlbWVudE5vZGUpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBjbG9uZUNoaWxkRWxlbWVudHMgPSBBcnJheS5mcm9tKGNsb25lTm9kZXNbaW5kZXhdLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSkuZmlsdGVyKGlzRWxlbWVudE5vZGUpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgICAgICBzb3VyY2VOb2Rlcy5wdXNoKC4uLmNoaWxkRWxlbWVudHMpO1xuICAgICAgICAgICAgY2xvbmVOb2Rlcy5wdXNoKC4uLmNsb25lQ2hpbGRFbGVtZW50cyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgc3R5bGVzXG4gICAgICAgIHNvdXJjZU5vZGVzLm1hcCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNsb25lQ1NTU3R5bGUobm9kZSBhcyBIVE1MRWxlbWVudCwgY2xvbmVOb2Rlc1tpbmRleF0gYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogY29udmVydCBpbWFnZXMgaW4gdGFyZ2V0IG5vZGVzIGluIGJhdGNoZXNcbiAqIEBwYXJhbSBzb3VyY2VOb2RlXG4gKiBAcGFyYW0gY2xvbmVOb2RlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGJhdGNoQ29udmVydEltYWdlKHNvdXJjZU5vZGU6IFNWR0dFbGVtZW50LCBjbG9uZU5vZGU6IFNWR0dFbGVtZW50KSB7XG4gICAgY29uc3Qgc291cmNlSW1hZ2VOb2RlcyA9IEFycmF5LmZyb20oc291cmNlTm9kZS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTUFHRV9DT05UQUlORVJ9YCkpO1xuICAgIGNvbnN0IGNsb25lSW1hZ2VOb2RlcyA9IEFycmF5LmZyb20oY2xvbmVOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke0lNQUdFX0NPTlRBSU5FUn1gKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHNvdXJjZUltYWdlTm9kZXMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsb25lSW1hZ2VOb2RlID0gY2xvbmVJbWFnZU5vZGVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzaW5nIGltYWdlXG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSAoY2xvbmVJbWFnZU5vZGUgYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGltYWdlPy5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgICAgICAgICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb252ZXJ0SW1hZ2VUb0Jhc2U2NCh1cmwpLnRoZW4oYmFzZTY0SW1hZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZT8uc2V0QXR0cmlidXRlKCdzcmMnLCBiYXNlNjRJbWFnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICApO1xufVxuXG4vKipcbiAqIGNsb25lIHN2ZyBlbGVtZW50XG4gKiBAcGFyYW0gYm9hcmQgYm9hcmRcbiAqIEBwYXJhbSBvcHRpb25zIHBhcmFtZXRlciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBjbG9uZSBzdmcgZWxlbWVudFxuICovXG5hc3luYyBmdW5jdGlvbiBjbG9uZVN2Zyhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogVG9JbWFnZU9wdGlvbnMpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSA9IHJlY3RhbmdsZTtcbiAgICBjb25zdCB7IHBhZGRpbmcgPSA0LCBpbmxpbmVTdHlsZUNsYXNzTmFtZXMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc291cmNlU3ZnID0gUGxhaXRCb2FyZC5nZXRIb3N0KGJvYXJkKTtcbiAgICBjb25zdCBzZWxlY3RlZEdFbGVtZW50cyA9IGVsZW1lbnRzLm1hcCh2YWx1ZSA9PiBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KHZhbHVlKS5nKTtcbiAgICBjb25zdCBjbG9uZVN2Z0VsZW1lbnQgPSBzb3VyY2VTdmcuY2xvbmVOb2RlKCkgYXMgU1ZHRWxlbWVudDtcbiAgICBjb25zdCBuZXdIb3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEhvc3QoYm9hcmQpLmNsb25lTm9kZSgpIGFzIFNWR0dFbGVtZW50O1xuXG4gICAgY2xvbmVTdmdFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJztcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCd3aWR0aCcsIGAke3dpZHRofWApO1xuICAgIGNsb25lU3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGAke2hlaWdodH1gKTtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgW3ggLSBwYWRkaW5nLCB5IC0gcGFkZGluZywgd2lkdGggKyAyICogcGFkZGluZywgaGVpZ2h0ICsgMiAqIHBhZGRpbmddLmpvaW4oJywnKSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgc2VsZWN0ZWRHRWxlbWVudHMubWFwKGFzeW5jIChjaGlsZCwgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVDaGlsZCA9IGNoaWxkLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdHRWxlbWVudDtcbiAgICAgICAgICAgIGJhdGNoQ2xvbmVDU1NTdHlsZShjaGlsZCwgY2xvbmVDaGlsZCwgaW5saW5lU3R5bGVDbGFzc05hbWVzIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICAgIGF3YWl0IGJhdGNoQ29udmVydEltYWdlKGNoaWxkLCBjbG9uZUNoaWxkKTtcbiAgICAgICAgICAgIG5ld0hvc3RFbGVtZW50LmFwcGVuZENoaWxkKGNsb25lQ2hpbGQpO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgY2xvbmVTdmdFbGVtZW50LmFwcGVuZENoaWxkKG5ld0hvc3RFbGVtZW50KTtcbiAgICByZXR1cm4gY2xvbmVTdmdFbGVtZW50O1xufVxuXG4vKipcbiAqIGN1cnJlbnQgYm9hcmQgdHJhbnNmZXIgcGljdHVyZXNcbiAqIEBwYXJhbSBib2FyZCBib2FyZFxuICogQHBhcmFtIG9wdGlvbnMgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIGltYWdlcyBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBiYXNlNjRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvSW1hZ2UoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9wdGlvbnM6IFRvSW1hZ2VPcHRpb25zKSB7XG4gICAgaWYgKCFib2FyZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50cyA9IG9wdGlvbnMuZWxlbWVudHNcbiAgICAgICAgPyBzb3J0RWxlbWVudHMoYm9hcmQsIG9wdGlvbnMuZWxlbWVudHMpXG4gICAgICAgIDogZmluZEVsZW1lbnRzKGJvYXJkLCB7IG1hdGNoOiAoKSA9PiB0cnVlLCByZWN1cnNpb246ICgpID0+IHRydWUsIGlzUmV2ZXJzZTogZmFsc2UgfSk7XG4gICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICBjb25zdCB7IHJhdGlvID0gMiwgZmlsbFN0eWxlID0gJ3RyYW5zcGFyZW50JyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRhcmdldFJlY3RhbmdsZTtcbiAgICBjb25zdCByYXRpb1dpZHRoID0gd2lkdGggKiByYXRpbztcbiAgICBjb25zdCByYXRpb0hlaWdodCA9IGhlaWdodCAqIHJhdGlvO1xuXG4gICAgY29uc3QgY2xvbmVTdmdFbGVtZW50ID0gYXdhaXQgY2xvbmVTdmcoYm9hcmQsIGVsZW1lbnRzLCB0YXJnZXRSZWN0YW5nbGUsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgY2FudmFzLCBjdHggfSA9IGNyZWF0ZUNhbnZhcyhyYXRpb1dpZHRoLCByYXRpb0hlaWdodCwgZmlsbFN0eWxlKTtcblxuICAgIGNvbnN0IHN2Z1N0ciA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoY2xvbmVTdmdFbGVtZW50KTtcbiAgICBjb25zdCBpbWdTcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyKX1gO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgbG9hZEltYWdlKGltZ1NyYyk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCByYXRpb1dpZHRoLCByYXRpb0hlaWdodCk7XG4gICAgICAgIHJldHVybiBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjb252ZXJ0aW5nIFNWRyB0byBpbWFnZTonLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIGRvd25sb2FkIHRoZSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lXG4gKiBAcGFyYW0gdXJsIGRvd25sb2FkIHVybFxuICogQHBhcmFtIG5hbWUgZmlsZSBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEltYWdlKHVybDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICBhLmRvd25sb2FkID0gbmFtZTtcbiAgICBhLmNsaWNrKCk7XG4gICAgYS5yZW1vdmUoKTtcbn1cbiJdfQ==
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8taW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy90by1pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVqRSxNQUFNLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQztBQVloRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsSUFBVTtJQUM3QixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQztBQUMvQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsU0FBUyxDQUFDLEdBQVc7SUFDMUIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3hCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLFNBQVMsR0FBRyxhQUFhO0lBQzFFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFB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LENBQUMsQ0FBQztLQUN4QztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLFNBQVMsQ0FBQztLQUNwQjtBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUNuRCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBmaW5kRWxlbWVudHMsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuXG5jb25zdCBJTUFHRV9DT05UQUlORVIgPSAncGxhaXQtaW1hZ2UtY29udGFpbmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBUb0ltYWdlT3B0aW9ucyB7XG4gICAgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXTtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHJhdGlvPzogbnVtYmVyO1xuICAgIHBhZGRpbmc/OiBudW1iZXI7XG4gICAgZmlsbFN0eWxlPzogc3RyaW5nO1xuICAgIC8vIOmAl+WPt+exu+WQjeWIl+ihqOOAgiDor6XliJfooajlv4Xpobvph4fnlKggY2xhc3MxLGNsYXNzMiwuLi4g55qE5b2i5byP44CCXG4gICAgaW5saW5lU3R5bGVDbGFzc05hbWVzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIElzIGVsZW1lbnQgbm9kZVxuICogQHBhcmFtIG5vZGVcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIGlzRWxlbWVudE5vZGUobm9kZTogTm9kZSk6IG5vZGUgaXMgSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuLyoqXG4gKiBsb2FkIGltYWdlIHJlc291cmNlc1xuICogQHBhcmFtIHVybCBpbWFnZSB1cmxcbiAqIEByZXR1cm5zIGltYWdlIGVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gbG9hZEltYWdlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxIVE1MSW1hZ2VFbGVtZW50PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGltZy5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWcpO1xuICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGltYWdlJykpO1xuICAgICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIGNyZWF0ZSBhbmQgcmV0dXJuIGNhbnZhcyBhbmQgY29udGV4dFxuICogQHBhcmFtIHdpZHRoIGNhbnZhcyB3aWR0aFxuICogQHBhcmFtIGhlaWdodCBjYW52YXMgaGVpZ2h0XG4gKiBAcGFyYW0gZmlsbFN0eWxlIGZpbGwgc3R5bGVcbiAqIEByZXR1cm5zIGNhbnZhcyBhbmQgY29udGV4dFxuICovXG5mdW5jdGlvbiBjcmVhdGVDYW52YXMod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGZpbGxTdHlsZSA9ICd0cmFuc3BhcmVudCcpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSE7XG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAnI2ZmZmZmZic7XG4gICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxTdHlsZTtcbiAgICBjdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBjYW52YXMsXG4gICAgICAgIGN0eFxuICAgIH07XG59XG5cbi8qKlxuICogY29udmVydCBpbWFnZSB0byBiYXNlNjRcbiAqIEBwYXJhbSB1cmwgaW1hZ2UgdXJsXG4gKiBAcmV0dXJucyBpbWFnZSBiYXNlNjRcbiAqL1xuZnVuY3Rpb24gY29udmVydEltYWdlVG9CYXNlNjQodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbG9hZEltYWdlKHVybCkudGhlbihpbWcgPT4ge1xuICAgICAgICBjb25zdCB7IGNhbnZhcywgY3R4IH0gPSBjcmVhdGVDYW52YXMoaW1nLndpZHRoLCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgY3R4Py5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIGNsb25lIG5vZGUgc3R5bGVcbiAqIEBwYXJhbSBuYXRpdmVOb2RlIHNvdXJjZSBub2RlXG4gKiBAcGFyYW0gY2xvbmVkTm9kZSBjbG9uZSBub2RlXG4gKi9cbmZ1bmN0aW9uIGNsb25lQ1NTU3R5bGU8VCBleHRlbmRzIEhUTUxFbGVtZW50PihuYXRpdmVOb2RlOiBULCBjbG9uZWROb2RlOiBUKSB7XG4gICAgY29uc3QgdGFyZ2V0U3R5bGUgPSBjbG9uZWROb2RlPy5zdHlsZTtcbiAgICBpZiAoIXRhcmdldFN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5hdGl2ZU5vZGUpO1xuICAgIGlmIChzb3VyY2VTdHlsZS5jc3NUZXh0KSB7XG4gICAgICAgIHRhcmdldFN0eWxlLmNzc1RleHQgPSBzb3VyY2VTdHlsZS5jc3NUZXh0O1xuICAgICAgICB0YXJnZXRTdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBzb3VyY2VTdHlsZS50cmFuc2Zvcm1PcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgQXJyYXkuZnJvbShzb3VyY2VTdHlsZSkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgICAgICAgICB0YXJnZXRTdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgc291cmNlU3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLyoqXG4gKiBiYXRjaCBjbG9uZSB0YXJnZXQgc3R5bGVzXG4gKiBAcGFyYW0gc291cmNlTm9kZVxuICogQHBhcmFtIGNsb25lTm9kZVxuICogQHBhcmFtIGlubGluZVN0eWxlQ2xhc3NOYW1lc1xuICovXG5mdW5jdGlvbiBiYXRjaENsb25lQ1NTU3R5bGUoc291cmNlTm9kZTogU1ZHR0VsZW1lbnQsIGNsb25lTm9kZTogU1ZHR0VsZW1lbnQsIGlubGluZVN0eWxlQ2xhc3NOYW1lczogc3RyaW5nKSB7XG4gICAgaWYgKGlubGluZVN0eWxlQ2xhc3NOYW1lcykge1xuICAgICAgICBjb25zdCBjbGFzc05hbWVzID0gaW5saW5lU3R5bGVDbGFzc05hbWVzICsgYCwuJHtJTUFHRV9DT05UQUlORVJ9YDtcbiAgICAgICAgY29uc3Qgc291cmNlTm9kZXMgPSBBcnJheS5mcm9tKHNvdXJjZU5vZGUucXVlcnlTZWxlY3RvckFsbChjbGFzc05hbWVzKSk7XG4gICAgICAgIGNvbnN0IGNsb25lTm9kZXMgPSBBcnJheS5mcm9tKGNsb25lTm9kZS5xdWVyeVNlbGVjdG9yQWxsKGNsYXNzTmFtZXMpKTtcblxuICAgICAgICBzb3VyY2VOb2Rlcy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IEFycmF5LmZyb20obm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihpc0VsZW1lbnROb2RlKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgICAgICAgY29uc3QgY2xvbmVDaGlsZEVsZW1lbnRzID0gQXJyYXkuZnJvbShjbG9uZU5vZGVzW2luZGV4XS5xdWVyeVNlbGVjdG9yQWxsKCcqJykpLmZpbHRlcihpc0VsZW1lbnROb2RlKSBhcyBIVE1MRWxlbWVudFtdO1xuICAgICAgICAgICAgc291cmNlTm9kZXMucHVzaCguLi5jaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIGNsb25lTm9kZXMucHVzaCguLi5jbG9uZUNoaWxkRWxlbWVudHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBwcm9jZXNzaW5nIHN0eWxlc1xuICAgICAgICBzb3VyY2VOb2Rlcy5tYXAoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjbG9uZUNTU1N0eWxlKG5vZGUgYXMgSFRNTEVsZW1lbnQsIGNsb25lTm9kZXNbaW5kZXhdIGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIGNvbnZlcnQgaW1hZ2VzIGluIHRhcmdldCBub2RlcyBpbiBiYXRjaGVzXG4gKiBAcGFyYW0gc291cmNlTm9kZVxuICogQHBhcmFtIGNsb25lTm9kZVxuICovXG5hc3luYyBmdW5jdGlvbiBiYXRjaENvbnZlcnRJbWFnZShzb3VyY2VOb2RlOiBTVkdHRWxlbWVudCwgY2xvbmVOb2RlOiBTVkdHRWxlbWVudCkge1xuICAgIGNvbnN0IHNvdXJjZUltYWdlTm9kZXMgPSBBcnJheS5mcm9tKHNvdXJjZU5vZGUucXVlcnlTZWxlY3RvckFsbChgLiR7SU1BR0VfQ09OVEFJTkVSfWApKTtcbiAgICBjb25zdCBjbG9uZUltYWdlTm9kZXMgPSBBcnJheS5mcm9tKGNsb25lTm9kZS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtJTUFHRV9DT05UQUlORVJ9YCkpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBzb3VyY2VJbWFnZU5vZGVzLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbG9uZUltYWdlTm9kZSA9IGNsb25lSW1hZ2VOb2Rlc1tpbmRleF07XG4gICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyBpbWFnZVxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gKGNsb25lSW1hZ2VOb2RlIGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBpbWFnZT8uZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udmVydEltYWdlVG9CYXNlNjQodXJsKS50aGVuKGJhc2U2NEltYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U/LnNldEF0dHJpYnV0ZSgnc3JjJywgYmFzZTY0SW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgKTtcbn1cblxuLyoqXG4gKiBjbG9uZSBzdmcgZWxlbWVudFxuICogQHBhcmFtIGJvYXJkIGJvYXJkXG4gKiBAcGFyYW0gb3B0aW9ucyBwYXJhbWV0ZXIgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgY2xvbmUgc3ZnIGVsZW1lbnRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gY2xvbmVTdmcoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IFRvSW1hZ2VPcHRpb25zKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB4LCB5IH0gPSByZWN0YW5nbGU7XG4gICAgY29uc3QgeyBwYWRkaW5nID0gNCwgaW5saW5lU3R5bGVDbGFzc05hbWVzIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IHNvdXJjZVN2ZyA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRHRWxlbWVudHMgPSBlbGVtZW50cy5tYXAodmFsdWUgPT4gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudCh2YWx1ZSkuZyk7XG4gICAgY29uc3QgY2xvbmVTdmdFbGVtZW50ID0gc291cmNlU3ZnLmNsb25lTm9kZSgpIGFzIFNWR0VsZW1lbnQ7XG4gICAgY29uc3QgbmV3SG9zdEVsZW1lbnQgPSBQbGFpdEJvYXJkLmdldEVsZW1lbnRIb3N0KGJvYXJkKS5jbG9uZU5vZGUoKSBhcyBTVkdHRWxlbWVudDtcblxuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgY2xvbmVTdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHt3aWR0aH1gKTtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtoZWlnaHR9YCk7XG4gICAgY2xvbmVTdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFt4IC0gcGFkZGluZywgeSAtIHBhZGRpbmcsIHdpZHRoICsgMiAqIHBhZGRpbmcsIGhlaWdodCArIDIgKiBwYWRkaW5nXS5qb2luKCcsJykpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHNlbGVjdGVkR0VsZW1lbnRzLm1hcChhc3luYyAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQ2hpbGQgPSBjaGlsZC5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgICAgICBiYXRjaENsb25lQ1NTU3R5bGUoY2hpbGQsIGNsb25lQ2hpbGQsIGlubGluZVN0eWxlQ2xhc3NOYW1lcyBhcyBzdHJpbmcpO1xuXG4gICAgICAgICAgICBhd2FpdCBiYXRjaENvbnZlcnRJbWFnZShjaGlsZCwgY2xvbmVDaGlsZCk7XG4gICAgICAgICAgICBuZXdIb3N0RWxlbWVudC5hcHBlbmRDaGlsZChjbG9uZUNoaWxkKTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIGNsb25lU3ZnRWxlbWVudC5hcHBlbmRDaGlsZChuZXdIb3N0RWxlbWVudCk7XG4gICAgcmV0dXJuIGNsb25lU3ZnRWxlbWVudDtcbn1cblxuLyoqXG4gKiBjdXJyZW50IGJvYXJkIHRyYW5zZmVyIHBpY3R1cmVzXG4gKiBAcGFyYW0gYm9hcmQgYm9hcmRcbiAqIEBwYXJhbSBvcHRpb25zIHBhcmFtZXRlciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBpbWFnZXMgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQgYmFzZTY0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0ltYWdlKGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zOiBUb0ltYWdlT3B0aW9ucykge1xuICAgIGlmICghYm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudHMgPSBvcHRpb25zLmVsZW1lbnRzIHx8IGZpbmRFbGVtZW50cyhib2FyZCwgeyBtYXRjaDogKCkgPT4gdHJ1ZSwgcmVjdXJzaW9uOiAoKSA9PiB0cnVlLCBpc1JldmVyc2U6IGZhbHNlIH0pO1xuICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3QgeyByYXRpbyA9IDIsIGZpbGxTdHlsZSA9ICd0cmFuc3BhcmVudCcgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0YXJnZXRSZWN0YW5nbGU7XG4gICAgY29uc3QgcmF0aW9XaWR0aCA9IHdpZHRoICogcmF0aW87XG4gICAgY29uc3QgcmF0aW9IZWlnaHQgPSBoZWlnaHQgKiByYXRpbztcblxuICAgIGNvbnN0IGNsb25lU3ZnRWxlbWVudCA9IGF3YWl0IGNsb25lU3ZnKGJvYXJkLCBlbGVtZW50cywgdGFyZ2V0UmVjdGFuZ2xlLCBvcHRpb25zKTtcbiAgICBjb25zdCB7IGNhbnZhcywgY3R4IH0gPSBjcmVhdGVDYW52YXMocmF0aW9XaWR0aCwgcmF0aW9IZWlnaHQsIGZpbGxTdHlsZSk7XG5cbiAgICBjb25zdCBzdmdTdHIgPSBuZXcgWE1MU2VyaWFsaXplcigpLnNlcmlhbGl6ZVRvU3RyaW5nKGNsb25lU3ZnRWxlbWVudCk7XG4gICAgY29uc3QgaW1nU3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z1N0cil9YDtcblxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGltZyA9IGF3YWl0IGxvYWRJbWFnZShpbWdTcmMpO1xuICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCwgcmF0aW9XaWR0aCwgcmF0aW9IZWlnaHQpO1xuICAgICAgICByZXR1cm4gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY29udmVydGluZyBTVkcgdG8gaW1hZ2U6JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBkb3dubG9hZCB0aGUgZmlsZSB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZVxuICogQHBhcmFtIHVybCBkb3dubG9hZCB1cmxcbiAqIEBwYXJhbSBuYW1lIGZpbGUgbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRJbWFnZSh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IG5hbWU7XG4gICAgYS5jbGljaygpO1xuICAgIGEucmVtb3ZlKCk7XG59XG4iXX0=
@@ -76,6 +76,14 @@ const Selection = {
76
76
  }
77
77
  };
78
78
 
79
+ const sortElements = (board, elements) => {
80
+ return [...elements].sort((a, b) => {
81
+ const pathA = PlaitBoard.findPath(board, a);
82
+ const pathB = PlaitBoard.findPath(board, b);
83
+ return pathA[0] - pathB[0];
84
+ });
85
+ };
86
+
79
87
  const getHitElementsBySelection = (board, selection, match = () => true) => {
80
88
  const newSelection = selection || board.selection;
81
89
  const rectangleHitElements = [];
@@ -120,7 +128,8 @@ const getHitElementByPoint = (board, point, match = () => true) => {
120
128
  return hitElement || rectangleHitElement;
121
129
  };
122
130
  const cacheSelectedElements = (board, selectedElements) => {
123
- BOARD_TO_SELECTED_ELEMENT.set(board, selectedElements);
131
+ const sortedElements = sortElements(board, selectedElements);
132
+ BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);
124
133
  };
125
134
  const getSelectedElements = (board) => {
126
135
  return BOARD_TO_SELECTED_ELEMENT.get(board) || [];
@@ -1545,6 +1554,14 @@ const debounce = (func, wait, options) => {
1545
1554
  };
1546
1555
  };
1547
1556
 
1557
+ const IS_DRAGGING = new WeakMap();
1558
+ const isDragging = (board) => {
1559
+ return !!IS_DRAGGING.get(board);
1560
+ };
1561
+ const setDragging = (board, state) => {
1562
+ IS_DRAGGING.set(board, state);
1563
+ };
1564
+
1548
1565
  const getMovingElements = (board) => {
1549
1566
  return BOARD_TO_MOVING_ELEMENT.get(board) || [];
1550
1567
  };
@@ -1555,22 +1572,16 @@ const addMovingElements = (board, elements) => {
1555
1572
  const movingElements = getMovingElements(board);
1556
1573
  const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));
1557
1574
  cacheMovingElements(board, [...movingElements, ...newElements]);
1575
+ setDragging(board, true);
1558
1576
  };
1559
1577
  const removeMovingElements = (board) => {
1560
1578
  BOARD_TO_MOVING_ELEMENT.delete(board);
1579
+ setDragging(board, false);
1561
1580
  };
1562
1581
  const cacheMovingElements = (board, elements) => {
1563
1582
  BOARD_TO_MOVING_ELEMENT.set(board, elements);
1564
1583
  };
1565
1584
 
1566
- const sortElements = (board, elements) => {
1567
- return [...elements].sort((a, b) => {
1568
- const pathA = PlaitBoard.findPath(board, a);
1569
- const pathB = PlaitBoard.findPath(board, b);
1570
- return pathA[0] - pathB[0];
1571
- });
1572
- };
1573
-
1574
1585
  const IMAGE_CONTAINER = 'plait-image-container';
1575
1586
  /**
1576
1587
  * Is element node
@@ -1735,9 +1746,7 @@ async function toImage(board, options) {
1735
1746
  if (!board) {
1736
1747
  return undefined;
1737
1748
  }
1738
- const elements = options.elements
1739
- ? sortElements(board, options.elements)
1740
- : findElements(board, { match: () => true, recursion: () => true, isReverse: false });
1749
+ const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });
1741
1750
  const targetRectangle = getRectangleByElements(board, elements, false);
1742
1751
  const { ratio = 2, fillStyle = 'transparent' } = options;
1743
1752
  const { width, height } = targetRectangle;
@@ -2597,46 +2606,35 @@ const NodeTransforms = {
2597
2606
  };
2598
2607
 
2599
2608
  function withSelection(board) {
2600
- const { pointerDown, globalPointerMove, globalPointerUp, keyup, onChange, afterChange } = board;
2609
+ const { pointerDown, pointerUp, globalPointerMove, globalPointerUp, keyup, onChange, afterChange } = board;
2601
2610
  let start = null;
2602
2611
  let end = null;
2603
2612
  let selectionMovingG;
2604
2613
  let selectionRectangleG;
2605
2614
  let previousSelectedElements;
2606
- // prevent text from being selected when user pressed main pointer and is moving
2607
- let needPreventNativeSelectionWhenMoving = false;
2608
2615
  let isShift = false;
2616
+ let isTextSelection = false;
2609
2617
  board.pointerDown = (event) => {
2610
- const isHitText = event.target instanceof Element && event.target.closest('.plait-richtext-container');
2611
2618
  if (event.shiftKey) {
2612
- event.preventDefault();
2613
2619
  isShift = true;
2614
2620
  }
2615
2621
  else {
2616
2622
  isShift = false;
2617
2623
  }
2618
- if (!isHitText) {
2619
- needPreventNativeSelectionWhenMoving = true;
2620
- }
2621
- if (!isMainPointer(event)) {
2622
- pointerDown(event);
2623
- return;
2624
+ const isHitText = !!(event.target instanceof Element && event.target.closest('.plait-richtext-container'));
2625
+ isTextSelection = isHitText && PlaitBoard.hasBeenTextEditing(board);
2626
+ // prevent text from being selected
2627
+ if (event.shiftKey && !isTextSelection) {
2628
+ event.preventDefault();
2624
2629
  }
2625
- const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2626
2630
  const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2627
- const selection = { anchor: point, focus: point };
2628
2631
  const hitElement = getHitElementByPoint(board, point);
2629
- const selectedElements = getSelectedElements(board);
2630
- if (!isShift && hitElement && selectedElements.includes(hitElement) && !options.isDisabledSelect) {
2631
- pointerDown(event);
2632
- return;
2633
- }
2632
+ const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2634
2633
  if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !hitElement && options.isMultiple && !options.isDisabledSelect) {
2635
- selectionRectangleG?.remove();
2636
- start = point;
2637
2634
  preventTouchMove(board, event, true);
2635
+ // start rectangle selection
2636
+ start = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2638
2637
  }
2639
- Transforms.setSelection(board, selection);
2640
2638
  pointerDown(event);
2641
2639
  };
2642
2640
  board.keyup = (event) => {
@@ -2646,7 +2644,7 @@ function withSelection(board) {
2646
2644
  keyup(event);
2647
2645
  };
2648
2646
  board.globalPointerMove = (event) => {
2649
- if (needPreventNativeSelectionWhenMoving) {
2647
+ if (!isTextSelection) {
2650
2648
  // prevent text from being selected
2651
2649
  event.preventDefault();
2652
2650
  }
@@ -2673,6 +2671,18 @@ function withSelection(board) {
2673
2671
  }
2674
2672
  globalPointerMove(event);
2675
2673
  };
2674
+ // handle the end of click select
2675
+ board.pointerUp = (event) => {
2676
+ const isSkip = !isMainPointer(event) || isDragging(board) || !PlaitBoard.isPointer(board, PlaitPointerType.selection);
2677
+ if (isSkip) {
2678
+ pointerDown(event);
2679
+ return;
2680
+ }
2681
+ const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2682
+ const selection = { anchor: point, focus: point };
2683
+ Transforms.setSelection(board, selection);
2684
+ pointerUp(event);
2685
+ };
2676
2686
  board.globalPointerUp = (event) => {
2677
2687
  if (start && end) {
2678
2688
  selectionMovingG?.remove();
@@ -2691,7 +2701,7 @@ function withSelection(board) {
2691
2701
  }
2692
2702
  start = null;
2693
2703
  end = null;
2694
- needPreventNativeSelectionWhenMoving = false;
2704
+ isTextSelection = false;
2695
2705
  preventTouchMove(board, event, false);
2696
2706
  globalPointerUp(event);
2697
2707
  };
@@ -2727,7 +2737,8 @@ function withSelection(board) {
2727
2737
  cacheSelectedElements(board, newSelectedElements);
2728
2738
  }
2729
2739
  else {
2730
- cacheSelectedElements(board, elements);
2740
+ const newSelectedElements = [...elements];
2741
+ cacheSelectedElements(board, newSelectedElements);
2731
2742
  }
2732
2743
  const newElements = getSelectedElements(board);
2733
2744
  previousSelectedElements = newElements;
@@ -2798,10 +2809,12 @@ function isSelectionMoving(board) {
2798
2809
  function setSelectionMoving(board) {
2799
2810
  PlaitBoard.getBoardContainer(board).classList.add('selection-moving');
2800
2811
  BOARD_TO_IS_SELECTION_MOVING.set(board, true);
2812
+ setDragging(board, true);
2801
2813
  }
2802
2814
  function clearSelectionMoving(board) {
2803
2815
  PlaitBoard.getBoardContainer(board).classList.remove('selection-moving');
2804
2816
  BOARD_TO_IS_SELECTION_MOVING.delete(board);
2817
+ setDragging(board, false);
2805
2818
  }
2806
2819
  function createSelectionRectangleG(board) {
2807
2820
  const elements = getSelectedElements(board);
@@ -2964,6 +2977,7 @@ function createBoard(children, options) {
2964
2977
  CoreTransforms.removeElements(board, elements);
2965
2978
  },
2966
2979
  getDeletedFragment: (data) => data,
2980
+ getRelatedFragment: (data) => data,
2967
2981
  drawElement: (context) => [],
2968
2982
  redrawElement: (context, previousContext) => { },
2969
2983
  destroyElement: (context) => { },
@@ -3563,7 +3577,8 @@ function withMoving(board) {
3563
3577
  const hitElement = getHitElementByPoint(board, point);
3564
3578
  if (hitElement && movableElements.includes(hitElement)) {
3565
3579
  if (selectedMovableElements.includes(hitElement)) {
3566
- activeElements = selectedMovableElements;
3580
+ const relatedElements = board.getRelatedFragment([]);
3581
+ activeElements = [...selectedMovableElements, ...relatedElements];
3567
3582
  }
3568
3583
  else {
3569
3584
  activeElements = [hitElement];
@@ -4544,5 +4559,5 @@ function createModModifierKeys() {
4544
4559
  * Generated bundle index. Do not edit.
4545
4560
  */
4546
4561
 
4547
- export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, toSVGScreenPoint, toScreenPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4562
+ export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_DRAGGING, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setDragging, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, toSVGScreenPoint, toScreenPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4548
4563
  //# sourceMappingURL=plait-core.mjs.map