@plait/core 0.65.2 → 0.66.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.
@@ -1,6 +1,7 @@
1
1
  import { PlaitBoard, RectangleClient } from '../interfaces';
2
2
  import { getSelectionAngle, hasSameAngle, getRotatedBoundingRectangle, rotatePointsByElement, getRectangleByAngle } from './angle';
3
3
  import { depthFirstRecursion, getIsRecursionFunc } from './tree';
4
+ import { KEY_TO_ELEMENT_MAP } from './weak-maps';
4
5
  export function getRectangleByElements(board, elements, recursion) {
5
6
  const rectanglesCornerPoints = [];
6
7
  const callback = (node) => {
@@ -52,12 +53,23 @@ export function getBoardRectangle(board) {
52
53
  return getRectangleByElements(board, board.children, true);
53
54
  }
54
55
  export function getElementById(board, id, dataSource) {
56
+ const cachedElement = getElementMap(board).get(id);
57
+ if (cachedElement) {
58
+ return cachedElement;
59
+ }
55
60
  if (!dataSource) {
56
61
  dataSource = findElements(board, { match: element => true, recursion: element => true });
57
62
  }
58
63
  let element = dataSource.find(element => element.id === id);
59
64
  return element;
60
65
  }
66
+ export function getElementMap(board) {
67
+ const elementMap = KEY_TO_ELEMENT_MAP.get(board);
68
+ if (!elementMap) {
69
+ throw new Error('can not resolve element map');
70
+ }
71
+ return elementMap;
72
+ }
61
73
  export function findElements(board, options) {
62
74
  let elements = [];
63
75
  const isReverse = options.isReverse ?? true;
@@ -75,4 +87,4 @@ export function findElements(board, options) {
75
87
  }, isReverse);
76
88
  return elements;
77
89
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFVBQVUsRUFBdUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkksT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRWpFLE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxLQUFpQixFQUFFLFFBQXdCLEVBQUUsU0FBa0I7SUFDbEcsTUFBTSxzQkFBc0IsR0FBbUMsRUFBRSxDQUFDO0lBQ2xFLE1BQU0sUUFBUSxHQUFHLENBQUMsSUFBa0IsRUFBRSxFQUFFO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sbUJBQW1CLEdBQUcscUJBQXFCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQztZQUN0RixzQkFBc0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUNGLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLG1CQUFtQixDQUNmLE9BQU8s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SSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEUsQ0FBQztJQUNMLENBQUMsRUFDRCxTQUFTLENBQ1osQ0FBQztJQUNGLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbmNlc3RvciwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRTZWxlY3Rpb25BbmdsZSwgaGFzU2FtZUFuZ2xlLCBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUsIHJvdGF0ZVBvaW50c0J5RWxlbWVudCwgZ2V0UmVjdGFuZ2xlQnlBbmdsZSB9IGZyb20gJy4vYW5nbGUnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiwgZ2V0SXNSZWN1cnNpb25GdW5jIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgcmVjdXJzaW9uOiBib29sZWFuKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBjb25zdCByZWN0YW5nbGVzQ29ybmVyUG9pbnRzOiBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdW10gPSBbXTtcbiAgICBjb25zdCBjYWxsYmFjayA9IChub2RlOiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShub2RlKTtcbiAgICAgICAgaWYgKG5vZGVSZWN0YW5nbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMobm9kZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICBjb25zdCByb3RhdGVkQ29ybmVyUG9pbnRzID0gcm90YXRlUG9pbnRzQnlFbGVtZW50KGNvcm5lclBvaW50cywgbm9kZSkgfHwgY29ybmVyUG9pbnRzO1xuICAgICAgICAgICAgcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5wdXNoKHJvdGF0ZWRDb3JuZXJQb2ludHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgY2FuIG5vdCBnZXQgcmVjdGFuZ2xlIG9mIGVsZW1lbnQ6YCwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGlmIChyZWN1cnNpb24pIHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICBub2RlID0+IGNhbGxiYWNrKG5vZGUpLFxuICAgICAgICAgICAgICAgIG5vZGUgPT4gYm9hcmQuaXNSZWN1cnNpb24obm9kZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChyZWN0YW5nbGVzQ29ybmVyUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKGhhc1NhbWVBbmdsZShlbGVtZW50cykpIHtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGdldFJvdGF0ZWRCb3VuZGluZ1JlY3RhbmdsZShyZWN0YW5nbGVzQ29ybmVyUG9pbnRzLCBhbmdsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBmbGF0Q29ybmVyUG9pbnRzOiBQb2ludFtdID0gcmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5yZWR1Y2UoKGFjYzogUG9pbnRbXSwgdmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsKTtcbiAgICAgICAgICAgIH0sIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZmxhdENvcm5lclBvaW50cyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgIGhlaWdodDogMFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCByZWN1cnNpb246IGJvb2xlYW4pOiBSZWN0YW5nbGVDbGllbnQge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCByZWN1cnNpb24pITtcbiAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlBbmdsZShyZWN0YW5nbGUsIGFuZ2xlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJvYXJkUmVjdGFuZ2xlKGJvYXJkOiBQbGFpdEJvYXJkKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudEJ5SWQ8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4oXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkYXRhU291cmNlPzogUGxhaXRFbGVtZW50W11cbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGF0YVNvdXJjZSkge1xuICAgICAgICBkYXRhU291cmNlID0gZmluZEVsZW1lbnRzKGJvYXJkLCB7IG1hdGNoOiBlbGVtZW50ID0+IHRydWUsIHJlY3Vyc2lvbjogZWxlbWVudCA9PiB0cnVlIH0pO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudCA9IGRhdGFTb3VyY2UuZmluZChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IGlkKSBhcyBUO1xuICAgIHJldHVybiBlbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnRzPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+KFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgICAgIHJlY3Vyc2lvbjogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICAgICAgaXNSZXZlcnNlPzogYm9vbGVhbjtcbiAgICB9XG4pOiBUW10ge1xuICAgIGxldCBlbGVtZW50czogVFtdID0gW107XG4gICAgY29uc3QgaXNSZXZlcnNlID0gb3B0aW9ucy5pc1JldmVyc2UgPz8gdHJ1ZTtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgb3B0aW9ucy5tYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobm9kZSBhcyBUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHZhbHVlOiBBbmNlc3RvcikgPT4ge1xuICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCkodmFsdWUpICYmIG9wdGlvbnMucmVjdXJzaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNSZXZlcnNlXG4gICAgKTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2VsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFZLFVBQVUsRUFBdUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsMkJBQTJCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDbkksT0FBTyxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVqRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsS0FBaUIsRUFBRSxRQUF3QixFQUFFLFNBQWtCO0lBQ2xHLE1BQU0sc0JBQXNCLEdBQW1DLEVBQUUsQ0FBQztJQUNsRSxNQUFNLFFBQVEsR0FBRyxDQUFDLElBQWtCLEVBQUUsRUFBRTtRQUNwQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNwRSxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxZQUFZLENBQUM7WUFDdEYsc0JBQXNCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDckQsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDTCxDQUFDLENBQUM7SUFDRixRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZC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TyxVQUFVLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQ3hCLEtBQWlCLEVBQ2pCLE9BSUM7SUFFRCxJQUFJLFFBQVEsR0FBUSxFQUFFLENBQUM7SUFDdkIsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7SUFDNUMsbUJBQW1CLENBQ2YsS0FBSyxFQUNMLElBQUksQ0FBQyxFQUFFO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUMsRUFDRCxDQUFDLEtBQWUsRUFBRSxFQUFFO1FBQ2hCLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDLEVBQ0QsU0FBUyxDQUNaLENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uQW5nbGUsIGhhc1NhbWVBbmdsZSwgZ2V0Um90YXRlZEJvdW5kaW5nUmVjdGFuZ2xlLCByb3RhdGVQb2ludHNCeUVsZW1lbnQsIGdldFJlY3RhbmdsZUJ5QW5nbGUgfSBmcm9tICcuL2FuZ2xlJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24sIGdldElzUmVjdXJzaW9uRnVuYyB9IGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgeyBLRVlfVE9fRUxFTUVOVF9NQVAgfSBmcm9tICcuL3dlYWstbWFwcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10sIHJlY3Vyc2lvbjogYm9vbGVhbik6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgY29uc3QgcmVjdGFuZ2xlc0Nvcm5lclBvaW50czogW1BvaW50LCBQb2ludCwgUG9pbnQsIFBvaW50XVtdID0gW107XG4gICAgY29uc3QgY2FsbGJhY2sgPSAobm9kZTogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSBib2FyZC5nZXRSZWN0YW5nbGUobm9kZSk7XG4gICAgICAgIGlmIChub2RlUmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKG5vZGVSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3Qgcm90YXRlZENvcm5lclBvaW50cyA9IHJvdGF0ZVBvaW50c0J5RWxlbWVudChjb3JuZXJQb2ludHMsIG5vZGUpIHx8IGNvcm5lclBvaW50cztcbiAgICAgICAgICAgIHJlY3RhbmdsZXNDb3JuZXJQb2ludHMucHVzaChyb3RhdGVkQ29ybmVyUG9pbnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYGNhbiBub3QgZ2V0IHJlY3RhbmdsZSBvZiBlbGVtZW50OmAsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAocmVjdXJzaW9uKSB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgbm9kZSA9PiBjYWxsYmFjayhub2RlKSxcbiAgICAgICAgICAgICAgICBub2RlID0+IGJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocmVjdGFuZ2xlc0Nvcm5lclBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmIChoYXNTYW1lQW5nbGUoZWxlbWVudHMpKSB7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRSb3RhdGVkQm91bmRpbmdSZWN0YW5nbGUocmVjdGFuZ2xlc0Nvcm5lclBvaW50cywgYW5nbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmxhdENvcm5lclBvaW50czogUG9pbnRbXSA9IHJlY3RhbmdsZXNDb3JuZXJQb2ludHMucmVkdWNlKChhY2M6IFBvaW50W10sIHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2MuY29uY2F0KHZhbCk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGZsYXRDb3JuZXJQb2ludHMpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDBcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb3VuZGluZ1JlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgcmVjdXJzaW9uOiBib29sZWFuKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cywgcmVjdXJzaW9uKSE7XG4gICAgY29uc3QgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShlbGVtZW50cyk7XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5QW5nbGUocmVjdGFuZ2xlLCBhbmdsZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2FyZFJlY3RhbmdsZShib2FyZDogUGxhaXRCb2FyZCk6IFJlY3RhbmdsZUNsaWVudCB7XG4gICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+KFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGF0YVNvdXJjZT86IFBsYWl0RWxlbWVudFtdXG4pOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjYWNoZWRFbGVtZW50ID0gZ2V0RWxlbWVudE1hcChib2FyZCkuZ2V0KGlkKTtcbiAgICBpZiAoY2FjaGVkRWxlbWVudCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkRWxlbWVudCBhcyBUO1xuICAgIH1cbiAgICBpZiAoIWRhdGFTb3VyY2UpIHtcbiAgICAgICAgZGF0YVNvdXJjZSA9IGZpbmRFbGVtZW50cyhib2FyZCwgeyBtYXRjaDogZWxlbWVudCA9PiB0cnVlLCByZWN1cnNpb246IGVsZW1lbnQgPT4gdHJ1ZSB9KTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnQgPSBkYXRhU291cmNlLmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSBpZCkgYXMgVDtcbiAgICByZXR1cm4gZWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRNYXAoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCBlbGVtZW50TWFwID0gS0VZX1RPX0VMRU1FTlRfTUFQLmdldChib2FyZCk7XG4gICAgaWYgKCFlbGVtZW50TWFwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCByZXNvbHZlIGVsZW1lbnQgbWFwJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50TWFwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZEVsZW1lbnRzPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+KFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW47XG4gICAgICAgIHJlY3Vyc2lvbjogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbjtcbiAgICAgICAgaXNSZXZlcnNlPzogYm9vbGVhbjtcbiAgICB9XG4pOiBUW10ge1xuICAgIGxldCBlbGVtZW50czogVFtdID0gW107XG4gICAgY29uc3QgaXNSZXZlcnNlID0gb3B0aW9ucy5pc1JldmVyc2UgPz8gdHJ1ZTtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgb3B0aW9ucy5tYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobm9kZSBhcyBUKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHZhbHVlOiBBbmNlc3RvcikgPT4ge1xuICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCkodmFsdWUpICYmIG9wdGlvbnMucmVjdXJzaW9uKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaXNSZXZlcnNlXG4gICAgKTtcbiAgICByZXR1cm4gZWxlbWVudHM7XG59XG4iXX0=
@@ -114,6 +114,10 @@ export const removeSelectedElement = (board, element, isRemoveChildren = false)
114
114
  cacheSelectedElements(board, newSelectedElements);
115
115
  }
116
116
  };
117
+ export const replaceSelectedElement = (board, element, newElement) => {
118
+ const selectedElements = getSelectedElements(board);
119
+ selectedElements.splice(selectedElements.indexOf(element), 1, newElement);
120
+ };
117
121
  export const clearSelectedElement = (board) => {
118
122
  cacheSelectedElements(board, []);
119
123
  };
@@ -138,4 +142,4 @@ export const isHitElement = (board, point) => {
138
142
  const hitElement = getHitElementByPoint(board, point);
139
143
  return !!hitElement || isHitSelectedRectangle(board, point);
140
144
  };
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUE4QixNQUFNLHNCQUFzQixDQUFDO0FBRWxGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLEtBQWlCLEVBQ2pCLFNBQXFCLEVBQ3JCLFFBQTRDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDeEQsRUFBRTtJQUNBLE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSyxLQUFLLENBQUMsU0FBdUIsQ0FBQztJQUNqRSxNQUFNLG9CQUFvQixHQUFtQixFQUFFLENBQUM7SUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsSUFB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Q0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFZLEVBQUUsRUFBRTtJQUM1RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLENBQUMsVUFBVSxJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uLCBnZXRJc1JlY3Vyc2lvbkZ1bmMgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgc29ydEVsZW1lbnRzIH0gZnJvbSAnLi9wb3NpdGlvbic7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1vcHRpb25zJztcbmltcG9ydCB7IGlzRGVidWcgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luS2V5LCBXaXRoU2VsZWN0aW9uUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGx1Z2luJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IChib2FyZC5zZWxlY3Rpb24gYXMgU2VsZWN0aW9uKTtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnRzID0gZ2V0SGl0RWxlbWVudHNCeVBvaW50KGJvYXJkLCBuZXdTZWxlY3Rpb24uYW5jaG9yLCBtYXRjaCk7XG4gICAgICAgIGlmIChoaXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0RWxlbWVudHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIG1hdGNoKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlzUmVjdGFuZ2xlSGl0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaXNSZWN0YW5nbGVIaXQgPSBib2FyZC5pc1JlY3RhbmdsZUhpdChub2RlLCBuZXdTZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlYnVnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lzUmVjdGFuZ2xlSGl0JywgZXJyb3IsICdub2RlJywgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVjdGFuZ2xlSGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gcmVjdGFuZ2xlSGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudHNCeVBvaW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHBvaW50OiBQb2ludCxcbiAgICBtYXRjaDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbik6IFBsYWl0RWxlbWVudFtdID0+IHtcbiAgICBsZXQgaGl0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgIW1hdGNoKG5vZGUpIHx8ICFQbGFpdEVsZW1lbnQuaGFzTW91bnRlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpc0hpdCA9IGZhbHNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpc0hpdCA9IGJvYXJkLmlzSGl0KG5vZGUsIHBvaW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVidWcoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpc0hpdCcsIGVycm9yLCAnbm9kZScsIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0hpdCkge1xuICAgICAgICAgICAgICAgIGhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gaGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudEJ5UG9pbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnQ6IFBvaW50LFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKTogdW5kZWZpbmVkIHwgUGxhaXRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBwb2ludEhpdEVsZW1lbnRzID0gZ2V0SGl0RWxlbWVudHNCeVBvaW50KGJvYXJkLCBwb2ludCwgbWF0Y2gpO1xuICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBib2FyZC5nZXRIaXRFbGVtZW50KHBvaW50SGl0RWxlbWVudHMpO1xuICAgIHJldHVybiBoaXRFbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGlzSW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICBpZiAoaXNJblRhcmdldFJlY3RhbmdsZSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhY2hlU2VsZWN0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzb3J0ZWRFbGVtZW50cyA9IHNvcnRFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5zZXQoYm9hcmQsIHNvcnRlZEVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuZ2V0KGJvYXJkKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IGVsZW1lbnRzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaCguLi5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbLi4uc2VsZWN0ZWRFbGVtZW50cywgLi4uZWxlbWVudHNdKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgaXNSZW1vdmVDaGlsZHJlbiA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICBpZiAoYm9hcmQuaXNSZWN1cnNpb24oZWxlbWVudCkgJiYgaXNSZW1vdmVDaGlsZHJlbikge1xuICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9kZSA9PiBib2FyZC5pc1JlY3Vyc2lvbihub2RlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKHZhbHVlID0+ICF0YXJnZXRFbGVtZW50cy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgW10pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWRFbGVtZW50cy5maW5kKHZhbHVlID0+IHZhbHVlID09PSBlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCB0ZW1wb3JhcnlEaXNhYmxlU2VsZWN0aW9uID0gKGJvYXJkOiBQbGFpdE9wdGlvbnNCb2FyZCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gYm9hcmQuZ2V0UGx1Z2luT3B0aW9ucyhQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uKTtcbiAgICBib2FyZC5zZXRQbHVnaW5PcHRpb25zPFdpdGhTZWxlY3Rpb25QbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7XG4gICAgICAgIGlzRGlzYWJsZWRTZWxlY3Rpb246IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgYm9hcmQuc2V0UGx1Z2luT3B0aW9uczxXaXRoU2VsZWN0aW9uUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbiwgeyAuLi5jdXJyZW50T3B0aW9ucyB9KTtcbiAgICB9LCAwKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdFNlbGVjdGVkUmVjdGFuZ2xlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBoaXRTZWxlY3RlZEVsZW1lbnRzID0gZ2V0SGl0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgcG9pbnQpO1xuICAgIHJldHVybiBoaXRTZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDA7XG59O1xuXG5leHBvcnQgY29uc3QgaXNIaXRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBoaXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIHBvaW50KTtcbiAgICByZXR1cm4gISFoaXRFbGVtZW50IHx8IGlzSGl0U2VsZWN0ZWRSZWN0YW5nbGUoYm9hcmQsIHBvaW50KTtcbn07XG4iXX0=
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUE4QixNQUFNLHNCQUFzQixDQUFDO0FBRWxGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQ3JDLEtBQWlCLEVBQ2pCLFNBQXFCLEVBQ3JCLFFBQTRDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDeEQsRUFBRTtJQUNBLE1BQU0sWUFBWSxHQUFHLFNBQVMsSUFBSyxLQUFLLENBQUMsU0FBdUIsQ0FBQztJQUNqRSxNQUFNLG9CQUFvQixHQUFtQixFQUFFLENBQUM7SUFDaEQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEQsSUFB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QUUsQ0FBQyxDQUFDO0lBQzVHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFZLEVBQUUsRUFBRTtJQUN0RSxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxPQUFPLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFZLEVBQUUsRUFBRTtJQUM1RCxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLENBQUMsVUFBVSxJQUFJLHNCQUFzQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uLCBnZXRJc1JlY3Vyc2lvbkZ1bmMgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgc29ydEVsZW1lbnRzIH0gZnJvbSAnLi9wb3NpdGlvbic7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3JlY3RhbmdsZS1jbGllbnQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE9wdGlvbnNCb2FyZCB9IGZyb20gJy4uL3BsdWdpbnMvd2l0aC1vcHRpb25zJztcbmltcG9ydCB7IGlzRGVidWcgfSBmcm9tICcuL2RlYnVnJztcbmltcG9ydCB7IFBsYWl0UGx1Z2luS2V5LCBXaXRoU2VsZWN0aW9uUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGx1Z2luJztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzQnlTZWxlY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgc2VsZWN0aW9uPzogU2VsZWN0aW9uLFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IChib2FyZC5zZWxlY3Rpb24gYXMgU2VsZWN0aW9uKTtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnRzID0gZ2V0SGl0RWxlbWVudHNCeVBvaW50KGJvYXJkLCBuZXdTZWxlY3Rpb24uYW5jaG9yLCBtYXRjaCk7XG4gICAgICAgIGlmIChoaXRFbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gaGl0RWxlbWVudHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIG1hdGNoKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGlzUmVjdGFuZ2xlSGl0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaXNSZWN0YW5nbGVIaXQgPSBib2FyZC5pc1JlY3RhbmdsZUhpdChub2RlLCBuZXdTZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0RlYnVnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2lzUmVjdGFuZ2xlSGl0JywgZXJyb3IsICdub2RlJywgbm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzUmVjdGFuZ2xlSGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gcmVjdGFuZ2xlSGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudHNCeVBvaW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHBvaW50OiBQb2ludCxcbiAgICBtYXRjaDogKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4gYm9vbGVhbiA9ICgpID0+IHRydWVcbik6IFBsYWl0RWxlbWVudFtdID0+IHtcbiAgICBsZXQgaGl0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgIW1hdGNoKG5vZGUpIHx8ICFQbGFpdEVsZW1lbnQuaGFzTW91bnRlZChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpc0hpdCA9IGZhbHNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpc0hpdCA9IGJvYXJkLmlzSGl0KG5vZGUsIHBvaW50KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRGVidWcoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdpc0hpdCcsIGVycm9yLCAnbm9kZScsIG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0hpdCkge1xuICAgICAgICAgICAgICAgIGhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gaGl0RWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudEJ5UG9pbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnQ6IFBvaW50LFxuICAgIG1hdGNoOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZVxuKTogdW5kZWZpbmVkIHwgUGxhaXRFbGVtZW50ID0+IHtcbiAgICBjb25zdCBwb2ludEhpdEVsZW1lbnRzID0gZ2V0SGl0RWxlbWVudHNCeVBvaW50KGJvYXJkLCBwb2ludCwgbWF0Y2gpO1xuICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBib2FyZC5nZXRIaXRFbGVtZW50KHBvaW50SGl0RWxlbWVudHMpO1xuICAgIHJldHVybiBoaXRFbGVtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGlzSW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICBpZiAoaXNJblRhcmdldFJlY3RhbmdsZSkge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNhY2hlU2VsZWN0ZWRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzb3J0ZWRFbGVtZW50cyA9IHNvcnRFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5zZXQoYm9hcmQsIHNvcnRlZEVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuZ2V0KGJvYXJkKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IGVsZW1lbnRzID0gW107XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaCguLi5lbGVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbLi4uc2VsZWN0ZWRFbGVtZW50cywgLi4uZWxlbWVudHNdKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgaXNSZW1vdmVDaGlsZHJlbiA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgICAgICBpZiAoYm9hcmQuaXNSZWN1cnNpb24oZWxlbWVudCkgJiYgaXNSZW1vdmVDaGlsZHJlbikge1xuICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9kZSA9PiBib2FyZC5pc1JlY3Vyc2lvbihub2RlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKHZhbHVlID0+ICF0YXJnZXRFbGVtZW50cy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgICAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXBsYWNlU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQsIG5ld0VsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzLnNwbGljZShzZWxlY3RlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCksIDEsIG5ld0VsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZEVsZW1lbnRzLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09IGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRlbXBvcmFyeURpc2FibGVTZWxlY3Rpb24gPSAoYm9hcmQ6IFBsYWl0T3B0aW9uc0JvYXJkKSA9PiB7XG4gICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSBib2FyZC5nZXRQbHVnaW5PcHRpb25zKFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24pO1xuICAgIGJvYXJkLnNldFBsdWdpbk9wdGlvbnM8V2l0aFNlbGVjdGlvblBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHtcbiAgICAgICAgaXNEaXNhYmxlZFNlbGVjdGlvbjogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBib2FyZC5zZXRQbHVnaW5PcHRpb25zPFdpdGhTZWxlY3Rpb25QbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7IC4uLmN1cnJlbnRPcHRpb25zIH0pO1xuICAgIH0sIDApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0U2VsZWN0ZWRSZWN0YW5nbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IGhpdFNlbGVjdGVkRWxlbWVudHMgPSBnZXRIaXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBwb2ludCk7XG4gICAgcmV0dXJuIGhpdFNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0hpdEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgcG9pbnQpO1xuICAgIHJldHVybiAhIWhpdEVsZW1lbnQgfHwgaXNIaXRTZWxlY3RlZFJlY3RhbmdsZShib2FyZCwgcG9pbnQpO1xufTtcbiJdfQ==
@@ -1,10 +1,7 @@
1
1
  import { PlaitBoard } from '../interfaces/board';
2
2
  export function depthFirstRecursion(node, callback, recursion, isReverse) {
3
- if (!recursion || recursion(node)) {
4
- let children = [];
5
- if (node.children) {
6
- children = [...node.children];
7
- }
3
+ if (node.children && (!recursion || recursion(node))) {
4
+ let children = [...node.children];
8
5
  children = isReverse ? children.reverse() : children;
9
6
  children.forEach(child => {
10
7
  depthFirstRecursion(child, callback, recursion);
@@ -22,4 +19,4 @@ export const getIsRecursionFunc = (board) => {
22
19
  }
23
20
  };
24
21
  };
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBTyxFQUNQLFFBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFNBQW1CO0lBRW5CLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEMsSUFBSSxRQUFRLEdBQWUsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRCxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLG1CQUFtQixDQUFDLEtBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHRoRmlyc3RSZWN1cnNpb248VCBleHRlbmRzIFRyZWVOb2RlID0gVHJlZU5vZGU+KFxuICAgIG5vZGU6IFQsXG4gICAgY2FsbGJhY2s6IChub2RlOiBUKSA9PiB2b2lkLFxuICAgIHJlY3Vyc2lvbj86IChub2RlOiBUKSA9PiBib29sZWFuLFxuICAgIGlzUmV2ZXJzZT86IGJvb2xlYW5cbikge1xuICAgIGlmICghcmVjdXJzaW9uIHx8IHJlY3Vyc2lvbihub2RlKSkge1xuICAgICAgICBsZXQgY2hpbGRyZW46IFRyZWVOb2RlW10gPSBbXTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkcmVuID0gaXNSZXZlcnNlID8gY2hpbGRyZW4ucmV2ZXJzZSgpIDogY2hpbGRyZW47XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbihjaGlsZCBhcyBULCBjYWxsYmFjaywgcmVjdXJzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhbGxiYWNrKG5vZGUpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SXNSZWN1cnNpb25GdW5jID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIChlbGVtZW50OiBQbGFpdEVsZW1lbnQgfCBQbGFpdEJvYXJkKSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQoZWxlbWVudCkgfHwgYm9hcmQuaXNSZWN1cnNpb24oZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICAgIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcbn1cbiJdfQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2pELE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBTyxFQUNQLFFBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFNBQW1CO0lBRW5CLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkQsSUFBSSxRQUFRLEdBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxRQUFRLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUNyRCxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLG1CQUFtQixDQUFDLEtBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNwRCxPQUFPLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQzFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0wsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHRoRmlyc3RSZWN1cnNpb248VCBleHRlbmRzIFRyZWVOb2RlID0gVHJlZU5vZGU+KFxuICAgIG5vZGU6IFQsXG4gICAgY2FsbGJhY2s6IChub2RlOiBUKSA9PiB2b2lkLFxuICAgIHJlY3Vyc2lvbj86IChub2RlOiBUKSA9PiBib29sZWFuLFxuICAgIGlzUmV2ZXJzZT86IGJvb2xlYW5cbikge1xuICAgIGlmIChub2RlLmNoaWxkcmVuICYmICghcmVjdXJzaW9uIHx8IHJlY3Vyc2lvbihub2RlKSkpIHtcbiAgICAgICAgbGV0IGNoaWxkcmVuOiBUcmVlTm9kZVtdID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICBjaGlsZHJlbiA9IGlzUmV2ZXJzZSA/IGNoaWxkcmVuLnJldmVyc2UoKSA6IGNoaWxkcmVuO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oY2hpbGQgYXMgVCwgY2FsbGJhY2ssIHJlY3Vyc2lvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxsYmFjayhub2RlKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldElzUmVjdXJzaW9uRnVuYyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAoZWxlbWVudDogUGxhaXRFbGVtZW50IHwgUGxhaXRCb2FyZCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKGVsZW1lbnQpIHx8IGJvYXJkLmlzUmVjdXJzaW9uKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVOb2RlIHtcbiAgICBjaGlsZHJlbj86IFRyZWVOb2RlW107XG59XG4iXX0=
@@ -3,6 +3,7 @@ export const IS_BOARD_CACHE = new WeakMap();
3
3
  export const FLUSHING = new WeakMap();
4
4
  export const NODE_TO_INDEX = new WeakMap();
5
5
  export const NODE_TO_PARENT = new WeakMap();
6
+ export const KEY_TO_ELEMENT_MAP = new WeakMap();
6
7
  export const NODE_TO_G = new WeakMap();
7
8
  export const NODE_TO_CONTAINER_G = new WeakMap();
8
9
  export const IS_TEXT_EDITABLE = new WeakMap();
@@ -23,4 +24,4 @@ export const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap();
23
24
  export const BOARD_TO_MOVING_ELEMENT = new WeakMap();
24
25
  export const PATH_REFS = new WeakMap();
25
26
  export const ELEMENT_TO_REF = new WeakMap();
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvd2Vhay1tYXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLDhCQUE4QjtBQUM5QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBNkIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBVTdDLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBOEIsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUUvRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQTRELENBQUM7QUFFbkgsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFzQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBMkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Tm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQYXRoUmVmIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wYXRoLXJlZic7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnRSZWYgfSBmcm9tICcuLi9jb3JlL2VsZW1lbnQvZWxlbWVudC1yZWYnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcblxuLy8gcmVjb3JkIHJpY2h0ZXh0IHR5cGUgc3RhdHVzXG5leHBvcnQgY29uc3QgSVNfQk9BUkRfQ0FDSEUgPSBuZXcgV2Vha01hcDxPYmplY3QsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBGTFVTSElORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBOT0RFX1RPX0lOREVYID0gbmV3IFdlYWtNYXA8UGxhaXROb2RlLCBudW1iZXI+KCk7XG5cbmV4cG9ydCBjb25zdCBOT0RFX1RPX1BBUkVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Tm9kZSwgQW5jZXN0b3I+KCk7XG5cbmV4cG9ydCBjb25zdCBOT0RFX1RPX0cgPSBuZXcgV2Vha01hcDxQbGFpdE5vZGUsIFNWR0dFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgTk9ERV9UT19DT05UQUlORVJfRyA9IG5ldyBXZWFrTWFwPFBsYWl0Tm9kZSwgU1ZHR0VsZW1lbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBJU19URVhUX0VESVRBQkxFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX09OX0NIQU5HRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsICgpID0+IHZvaWQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19BRlRFUl9DSEFOR0UgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCAoKSA9PiB2b2lkPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fUk9VR0hfU1ZHID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUm91Z2hTVkc+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19IT1NUID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgU1ZHU1ZHRWxlbWVudD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0NPTlRFWFQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQbGFpdEJvYXJkQ29udGV4dD4oKTtcblxuZXhwb3J0IGNvbnN0IElTX0JPQVJEX0FMSVZFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0VMRU1FTlRfSE9TVCA9IG5ldyBXZWFrTWFwPFxuICAgIFBsYWl0Qm9hcmQsXG4gICAge1xuICAgICAgICBsb3dlckhvc3Q6IFNWR0dFbGVtZW50O1xuICAgICAgICBob3N0OiBTVkdHRWxlbWVudDtcbiAgICAgICAgdXBwZXJIb3N0OiBTVkdHRWxlbWVudDtcbiAgICAgICAgYWN0aXZlSG9zdDogU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICB9XG4+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5UID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50W10+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQb2ludD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX01PVklOR19QT0lOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBvaW50PigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04gPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQb2ludD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX0lTX1NFTEVDVElPTl9NT1ZJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG4vLyBzYXZlIG5vIHN0YW5kYXJkIHNlbGVjdGVkIGVsZW1lbnRzXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fVEVNUE9SQVJZX0VMRU1FTlRTID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgeyBlbGVtZW50czogUGxhaXRFbGVtZW50W107IHRpbWVvdXRJZDogYW55IH0+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19NT1ZJTkdfRUxFTUVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudFtdPigpO1xuXG5leHBvcnQgY29uc3QgUEFUSF9SRUZTOiBXZWFrTWFwPFBsYWl0Qm9hcmQsIFNldDxQYXRoUmVmPj4gPSBuZXcgV2Vha01hcCgpO1xuXG5leHBvcnQgY29uc3QgRUxFTUVOVF9UT19SRUY6IFdlYWtNYXA8UGxhaXRFbGVtZW50LCBQbGFpdEVsZW1lbnRSZWY+ID0gbmV3IFdlYWtNYXAoKTtcbiJdfQ==
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vhay1tYXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvd2Vhay1tYXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLDhCQUE4QjtBQUM5QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRTNELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQXlDLENBQUM7QUFFdkYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRS9ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRXhFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksT0FBTyxFQUEwQixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUF3QixDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBNkIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBaUMsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFakUsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBVTdDLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBOEIsQ0FBQztBQUVuRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUUvRSxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUU5RSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUUvRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQTRELENBQUM7QUFFbkgsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQThCLENBQUM7QUFFakYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFzQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBRTFFLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBMkMsSUFBSSxPQUFPLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Tm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQYXRoUmVmIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wYXRoLXJlZic7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnRSZWYgfSBmcm9tICcuLi9jb3JlL2VsZW1lbnQvZWxlbWVudC1yZWYnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0JztcblxuLy8gcmVjb3JkIHJpY2h0ZXh0IHR5cGUgc3RhdHVzXG5leHBvcnQgY29uc3QgSVNfQk9BUkRfQ0FDSEUgPSBuZXcgV2Vha01hcDxPYmplY3QsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBGTFVTSElORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBOT0RFX1RPX0lOREVYID0gbmV3IFdlYWtNYXA8UGxhaXROb2RlLCBudW1iZXI+KCk7XG5cbmV4cG9ydCBjb25zdCBOT0RFX1RPX1BBUkVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Tm9kZSwgQW5jZXN0b3I+KCk7XG5cbmV4cG9ydCBjb25zdCBLRVlfVE9fRUxFTUVOVF9NQVAgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBNYXA8U3RyaW5nLCBQbGFpdEVsZW1lbnQ+PigpO1xuXG5leHBvcnQgY29uc3QgTk9ERV9UT19HID0gbmV3IFdlYWtNYXA8UGxhaXROb2RlLCBTVkdHRWxlbWVudD4oKTtcblxuZXhwb3J0IGNvbnN0IE5PREVfVE9fQ09OVEFJTkVSX0cgPSBuZXcgV2Vha01hcDxQbGFpdE5vZGUsIFNWR0dFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgSVNfVEVYVF9FRElUQUJMRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19PTl9DSEFOR0UgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCAoKSA9PiB2b2lkPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fQUZURVJfQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgKCkgPT4gdm9pZD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX1JPVUdIX1NWRyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFJvdWdoU1ZHPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fSE9TVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFNWR1NWR0VsZW1lbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19DT05URVhUID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUGxhaXRCb2FyZENvbnRleHQ+KCk7XG5cbmV4cG9ydCBjb25zdCBJU19CT0FSRF9BTElWRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19FTEVNRU5UX0hPU1QgPSBuZXcgV2Vha01hcDxcbiAgICBQbGFpdEJvYXJkLFxuICAgIHtcbiAgICAgICAgbG93ZXJIb3N0OiBTVkdHRWxlbWVudDtcbiAgICAgICAgaG9zdDogU1ZHR0VsZW1lbnQ7XG4gICAgICAgIHVwcGVySG9zdDogU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGFjdGl2ZUhvc3Q6IFNWR0dFbGVtZW50O1xuICAgICAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgfVxuPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudFtdPigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJEID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUG9pbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19NT1ZJTkdfUE9JTlQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQb2ludD4oKTtcblxuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUG9pbnQ+KCk7XG5cbmV4cG9ydCBjb25zdCBCT0FSRF9UT19JU19TRUxFQ1RJT05fTU9WSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuLy8gc2F2ZSBubyBzdGFuZGFyZCBzZWxlY3RlZCBlbGVtZW50c1xuZXhwb3J0IGNvbnN0IEJPQVJEX1RPX1RFTVBPUkFSWV9FTEVNRU5UUyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIHsgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdOyB0aW1lb3V0SWQ6IGFueSB9PigpO1xuXG5leHBvcnQgY29uc3QgQk9BUkRfVE9fTU9WSU5HX0VMRU1FTlQgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnRbXT4oKTtcblxuZXhwb3J0IGNvbnN0IFBBVEhfUkVGUzogV2Vha01hcDxQbGFpdEJvYXJkLCBTZXQ8UGF0aFJlZj4+ID0gbmV3IFdlYWtNYXAoKTtcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVE9fUkVGOiBXZWFrTWFwPFBsYWl0RWxlbWVudCwgUGxhaXRFbGVtZW50UmVmPiA9IG5ldyBXZWFrTWFwKCk7XG4iXX0=
@@ -184,6 +184,7 @@ const IS_BOARD_CACHE = new WeakMap();
184
184
  const FLUSHING = new WeakMap();
185
185
  const NODE_TO_INDEX = new WeakMap();
186
186
  const NODE_TO_PARENT = new WeakMap();
187
+ const KEY_TO_ELEMENT_MAP = new WeakMap();
187
188
  const NODE_TO_G = new WeakMap();
188
189
  const NODE_TO_CONTAINER_G = new WeakMap();
189
190
  const IS_TEXT_EDITABLE = new WeakMap();
@@ -1486,11 +1487,8 @@ function idCreator(length = 5) {
1486
1487
  }
1487
1488
 
1488
1489
  function depthFirstRecursion(node, callback, recursion, isReverse) {
1489
- if (!recursion || recursion(node)) {
1490
- let children = [];
1491
- if (node.children) {
1492
- children = [...node.children];
1493
- }
1490
+ if (node.children && (!recursion || recursion(node))) {
1491
+ let children = [...node.children];
1494
1492
  children = isReverse ? children.reverse() : children;
1495
1493
  children.forEach(child => {
1496
1494
  depthFirstRecursion(child, callback, recursion);
@@ -1773,6 +1771,10 @@ const removeSelectedElement = (board, element, isRemoveChildren = false) => {
1773
1771
  cacheSelectedElements(board, newSelectedElements);
1774
1772
  }
1775
1773
  };
1774
+ const replaceSelectedElement = (board, element, newElement) => {
1775
+ const selectedElements = getSelectedElements(board);
1776
+ selectedElements.splice(selectedElements.indexOf(element), 1, newElement);
1777
+ };
1776
1778
  const clearSelectedElement = (board) => {
1777
1779
  cacheSelectedElements(board, []);
1778
1780
  };
@@ -3960,12 +3962,23 @@ function getBoardRectangle(board) {
3960
3962
  return getRectangleByElements(board, board.children, true);
3961
3963
  }
3962
3964
  function getElementById(board, id, dataSource) {
3965
+ const cachedElement = getElementMap(board).get(id);
3966
+ if (cachedElement) {
3967
+ return cachedElement;
3968
+ }
3963
3969
  if (!dataSource) {
3964
3970
  dataSource = findElements(board, { match: element => true, recursion: element => true });
3965
3971
  }
3966
3972
  let element = dataSource.find(element => element.id === id);
3967
3973
  return element;
3968
3974
  }
3975
+ function getElementMap(board) {
3976
+ const elementMap = KEY_TO_ELEMENT_MAP.get(board);
3977
+ if (!elementMap) {
3978
+ throw new Error('can not resolve element map');
3979
+ }
3980
+ return elementMap;
3981
+ }
3969
3982
  function findElements(board, options) {
3970
3983
  let elements = [];
3971
3984
  const isReverse = options.isReverse ?? true;
@@ -5057,8 +5070,7 @@ const getContext = (board, element, index, parent, previousContext) => {
5057
5070
  const previousElement = previousContext && previousContext.element;
5058
5071
  if (previousElement && previousElement !== element && isSelectedElement(board, previousElement)) {
5059
5072
  isSelected = true;
5060
- removeSelectedElement(board, previousElement);
5061
- addSelectedElement(board, element);
5073
+ replaceSelectedElement(board, previousElement, element);
5062
5074
  }
5063
5075
  const context = {
5064
5076
  element: element,
@@ -5155,6 +5167,7 @@ class ElementFlavour {
5155
5167
  const containerG = this.getContainerG();
5156
5168
  NODE_TO_G.set(this.element, elementG);
5157
5169
  NODE_TO_CONTAINER_G.set(this.element, containerG);
5170
+ getElementMap(this.board).set(this.element.id, this.element);
5158
5171
  ELEMENT_TO_REF.set(this.element, this.ref);
5159
5172
  this.updateListRender();
5160
5173
  if (hasOnContextChanged(this)) {
@@ -5174,6 +5187,7 @@ class ElementFlavour {
5174
5187
  NODE_TO_G.set(this.element, this._g);
5175
5188
  NODE_TO_CONTAINER_G.set(this.element, this._containerG);
5176
5189
  ELEMENT_TO_REF.set(this.element, this.ref);
5190
+ getElementMap(this.board).set(this.element.id, this.element);
5177
5191
  }
5178
5192
  }
5179
5193
  get context() {
@@ -5255,6 +5269,7 @@ class ElementFlavour {
5255
5269
  if (NODE_TO_G.get(this.element) === this._g) {
5256
5270
  NODE_TO_G.delete(this.element);
5257
5271
  }
5272
+ getElementMap(this.board).delete(this.element.id);
5258
5273
  if (NODE_TO_CONTAINER_G.get(this.element) === this._containerG) {
5259
5274
  NODE_TO_CONTAINER_G.delete(this.element);
5260
5275
  }
@@ -6092,7 +6107,7 @@ function getSelectedTargetElements(board) {
6092
6107
  return targetElements;
6093
6108
  }
6094
6109
  function getValidElements(board, activeElements) {
6095
- const validElements = [...activeElements].filter(element => !PlaitGroupElement.isGroup(element) && board.children.findIndex(item => item.id === element.id) > -1);
6110
+ const validElements = [...activeElements].filter(element => !PlaitGroupElement.isGroup(element) && PlaitElement.isRootElement(element));
6096
6111
  return validElements;
6097
6112
  }
6098
6113
  function updatePoints(board, activeElements, offsetX, offsetY) {
@@ -6100,7 +6115,7 @@ function updatePoints(board, activeElements, offsetX, offsetY) {
6100
6115
  const currentElements = validElements.map(element => {
6101
6116
  const points = element.points || [];
6102
6117
  const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]);
6103
- const index = board.children.findIndex(item => item.id === element.id);
6118
+ const index = NODE_TO_INDEX.get(element);
6104
6119
  Transforms.setNode(board, {
6105
6120
  points: newPoints
6106
6121
  }, [index]);
@@ -6333,7 +6348,7 @@ function withSelection(board) {
6333
6348
  }
6334
6349
  }
6335
6350
  const newElements = getSelectedElements(board);
6336
- previousSelectedElements = newElements;
6351
+ previousSelectedElements = [...newElements];
6337
6352
  deleteTemporaryElements(board);
6338
6353
  if (!isSelectionMoving(board)) {
6339
6354
  selectionRectangleG?.remove();
@@ -6360,7 +6375,7 @@ function withSelection(board) {
6360
6375
  selectionRectangleG?.remove();
6361
6376
  selectionRectangleG = board.drawActiveRectangle();
6362
6377
  PlaitBoard.getElementActiveHost(board).append(selectionRectangleG);
6363
- previousSelectedElements = currentSelectedElements;
6378
+ previousSelectedElements = [...currentSelectedElements];
6364
6379
  }
6365
6380
  }
6366
6381
  else {
@@ -6418,6 +6433,7 @@ const createTestingBoard = (plugins, children, options = { readonly: false, hide
6418
6433
  plugins.forEach(plugin => {
6419
6434
  board = plugin(board);
6420
6435
  });
6436
+ KEY_TO_ELEMENT_MAP.set(board, new Map());
6421
6437
  return board;
6422
6438
  };
6423
6439
 
@@ -6576,5 +6592,5 @@ function createModModifierKeys() {
6576
6592
  * Generated bundle index. Do not edit.
6577
6593
  */
6578
6594
 
6579
- 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_CONTEXT, 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, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DebugGenerator, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_REF, END, ENTER, EQUALS, ESCAPE, ElementFlavour, 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, HIT_DISTANCE_BUFFER, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_ALIVE, 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, ListRender, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MAX_ZOOM, MERGING, META, MIN_ZOOM, MUTE, N, NINE, NODE_TO_CONTAINER_G, NODE_TO_G, 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, PlaitBoardContext, PlaitElement, PlaitGroupElement, PlaitHistoryBoard, PlaitNode, PlaitOperation, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RESIZE_CURSORS, RESIZE_HANDLE_CLASS_NAME, RIGHT_ARROW, ROTATE_HANDLE_CLASS_NAME, 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, SNAPPING_STROKE_WIDTH, SNAP_TOLERANCE, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, WritableClipboardOperationType, WritableClipboardType, X, Y, Z, ZERO, ZOOM_STEP, addClipboardContext, addSelectedElement, approximately, arrowPoints, buildPlaitHtml, cacheMovingElements, cacheSelectedElements, cacheSelectedElementsWithGroup, cacheSelectedElementsWithGroupOnShift, calcNewViewBox, canAddGroup, canRemoveGroup, canSetZIndex, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createBoard, createClipboardContext, createDebugGenerator, createFakeEvent, createForeignObject, createG, createGroup, createGroupRectangleG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createTestingBoard, createText, createTouchEvent, debounce, degreesToRadians, deleteFragment, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawDashedLines, drawEntireActiveRectangleG, drawLine, drawLinearPath, drawPendingNodesG, drawPointSnapLines, drawRectangle, drawRoundRectangle, drawSolidLines, duplicateElements, fakeNodeWeakMap, filterSelectedGroups, findElements, findIndex, findLastIndex, getAllElementsInGroup, getAllMoveOptions, getAngleBetweenPoints, getAngleByElement, getBarPoint, getBoardRectangle, getBoundingRectangleByElements, getClipboardData, getClipboardFromHtml, getCrossingPointsBetweenEllipseAndSegment, getDataTransferClipboard, getDataTransferClipboardText, getEditingGroup, getElementById, getElementHostBBox, getElementsInGroup, getElementsInGroupByElement, getElementsIndices, getEllipseTangentSlope, getGroupByElement, getHighestGroup, getHighestIndexOfElement, getHighestSelectedElements, getHighestSelectedGroup, getHighestSelectedGroups, getHitElementByPoint, getHitElementsByPoint, getHitElementsBySelection, getHitSelectedElements, getIsRecursionFunc, getMinPointDelta, getMovingElements, getNearestDelta, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getNearestPointRectangle, getOffsetAfterRotate, getOneMoveOptions, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, getProbablySupportsClipboardWriteText, getRealScrollBarWidth, getRectangleByAngle, getRectangleByElements, getRectangleByGroup, getRotatedBoundingRectangle, getSelectedElements, getSelectedGroups, getSelectedIsolatedElements, getSelectedIsolatedElementsCanAddToGroup, getSelectedTargetElements, getSelectionAngle, getSelectionOptions, getSnapRectangles, getTemporaryElements, getTemporaryRef, getTripleAxis, getValidElements, getVectorFromPointAndSlope, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnContextChanged, hasSameAngle, hasSelectedElementsInSameGroup, hasSetSelectionOperation, hasValidAngle, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isAxisChangedByAngle, isContextmenu, isDOMElement, isDOMNode, isDebug, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isHitElement, isHitSelectedRectangle, isInPlaitBoard, isIndicesContinuous, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedAllElementsInGroup, isSelectedElement, isSelectedElementOrGroup, isSelectionMoving, isSetSelectionOperation, isSetThemeOperation, isSetViewportOperation, isSnapPoint, mountElementG, moveElementsToNewPath, moveElementsToNewPathAfterAddGroup, nonGroupInHighestSelectedElements, normalizeAngle, normalizePoint, preventTouchMove, radiansToDegrees, removeMovingElements, removeSelectedElement, replaceAngleBrackets, reverseReplaceAngleBrackets, rotate, rotateAntiPointsByElement, rotateElements, rotatePoints, rotatePointsByElement, rotatedDataPoints, scrollToRectangle, setAngleForG, setClipboardData, setDataTransferClipboard, setDataTransferClipboardText, setDragging, setFragment, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectedElementsWithGroup, setSelectionMoving, setSelectionOptions, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, sortElements, stripHtml, temporaryDisableSelection, throttleRAF, toDomPrecision, toFixed, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, uniqueById, updateForeignObject, updateForeignObjectWidth, updatePoints, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withArrowMoving, withBoard, withHandPointer, withHistory, withHotkey, withMoving, withOptions, withRelatedFragment, withSelection, withViewport };
6595
+ 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_CONTEXT, 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, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DebugGenerator, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_REF, END, ENTER, EQUALS, ESCAPE, ElementFlavour, 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, HIT_DISTANCE_BUFFER, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_ALIVE, 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, KEY_TO_ELEMENT_MAP, L, LAST_MEDIA, LEFT_ARROW, ListRender, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MAX_ZOOM, MERGING, META, MIN_ZOOM, MUTE, N, NINE, NODE_TO_CONTAINER_G, NODE_TO_G, 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, PlaitBoardContext, PlaitElement, PlaitGroupElement, PlaitHistoryBoard, PlaitNode, PlaitOperation, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RESIZE_CURSORS, RESIZE_HANDLE_CLASS_NAME, RIGHT_ARROW, ROTATE_HANDLE_CLASS_NAME, 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, SNAPPING_STROKE_WIDTH, SNAP_TOLERANCE, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, WritableClipboardOperationType, WritableClipboardType, X, Y, Z, ZERO, ZOOM_STEP, addClipboardContext, addSelectedElement, approximately, arrowPoints, buildPlaitHtml, cacheMovingElements, cacheSelectedElements, cacheSelectedElementsWithGroup, cacheSelectedElementsWithGroupOnShift, calcNewViewBox, canAddGroup, canRemoveGroup, canSetZIndex, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createBoard, createClipboardContext, createDebugGenerator, createFakeEvent, createForeignObject, createG, createGroup, createGroupRectangleG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createTestingBoard, createText, createTouchEvent, debounce, degreesToRadians, deleteFragment, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawDashedLines, drawEntireActiveRectangleG, drawLine, drawLinearPath, drawPendingNodesG, drawPointSnapLines, drawRectangle, drawRoundRectangle, drawSolidLines, duplicateElements, fakeNodeWeakMap, filterSelectedGroups, findElements, findIndex, findLastIndex, getAllElementsInGroup, getAllMoveOptions, getAngleBetweenPoints, getAngleByElement, getBarPoint, getBoardRectangle, getBoundingRectangleByElements, getClipboardData, getClipboardFromHtml, getCrossingPointsBetweenEllipseAndSegment, getDataTransferClipboard, getDataTransferClipboardText, getEditingGroup, getElementById, getElementHostBBox, getElementMap, getElementsInGroup, getElementsInGroupByElement, getElementsIndices, getEllipseTangentSlope, getGroupByElement, getHighestGroup, getHighestIndexOfElement, getHighestSelectedElements, getHighestSelectedGroup, getHighestSelectedGroups, getHitElementByPoint, getHitElementsByPoint, getHitElementsBySelection, getHitSelectedElements, getIsRecursionFunc, getMinPointDelta, getMovingElements, getNearestDelta, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getNearestPointRectangle, getOffsetAfterRotate, getOneMoveOptions, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, getProbablySupportsClipboardWriteText, getRealScrollBarWidth, getRectangleByAngle, getRectangleByElements, getRectangleByGroup, getRotatedBoundingRectangle, getSelectedElements, getSelectedGroups, getSelectedIsolatedElements, getSelectedIsolatedElementsCanAddToGroup, getSelectedTargetElements, getSelectionAngle, getSelectionOptions, getSnapRectangles, getTemporaryElements, getTemporaryRef, getTripleAxis, getValidElements, getVectorFromPointAndSlope, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnContextChanged, hasSameAngle, hasSelectedElementsInSameGroup, hasSetSelectionOperation, hasValidAngle, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isAxisChangedByAngle, isContextmenu, isDOMElement, isDOMNode, isDebug, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isHitElement, isHitSelectedRectangle, isInPlaitBoard, isIndicesContinuous, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedAllElementsInGroup, isSelectedElement, isSelectedElementOrGroup, isSelectionMoving, isSetSelectionOperation, isSetThemeOperation, isSetViewportOperation, isSnapPoint, mountElementG, moveElementsToNewPath, moveElementsToNewPathAfterAddGroup, nonGroupInHighestSelectedElements, normalizeAngle, normalizePoint, preventTouchMove, radiansToDegrees, removeMovingElements, removeSelectedElement, replaceAngleBrackets, replaceSelectedElement, reverseReplaceAngleBrackets, rotate, rotateAntiPointsByElement, rotateElements, rotatePoints, rotatePointsByElement, rotatedDataPoints, scrollToRectangle, setAngleForG, setClipboardData, setDataTransferClipboard, setDataTransferClipboardText, setDragging, setFragment, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectedElementsWithGroup, setSelectionMoving, setSelectionOptions, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, sortElements, stripHtml, temporaryDisableSelection, throttleRAF, toDomPrecision, toFixed, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, uniqueById, updateForeignObject, updateForeignObjectWidth, updatePoints, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withArrowMoving, withBoard, withHandPointer, withHistory, withHotkey, withMoving, withOptions, withRelatedFragment, withSelection, withViewport };
6580
6596
  //# sourceMappingURL=plait-core.mjs.map