@plait/core 0.10.0 → 0.12.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,10 +1,15 @@
1
1
  import { PlaitBoard } from '../interfaces/board';
2
2
  import { depthFirstRecursion } from './tree';
3
3
  import { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';
4
+ import { Selection } from '../interfaces/selection';
4
5
  export const getHitElements = (board, selection) => {
5
6
  const realSelection = selection || board.selection;
6
7
  const selectedElements = [];
8
+ const isCollapsed = realSelection && realSelection.ranges.length === 1 && Selection.isCollapsed(realSelection.ranges[0]);
7
9
  depthFirstRecursion(board, node => {
10
+ if (selectedElements.length > 0 && isCollapsed) {
11
+ return;
12
+ }
8
13
  if (!PlaitBoard.isBoard(node) &&
9
14
  realSelection &&
10
15
  realSelection.ranges.some(range => {
@@ -19,10 +24,16 @@ export const getHitElements = (board, selection) => {
19
24
  else {
20
25
  return false;
21
26
  }
22
- });
27
+ }, true);
23
28
  return selectedElements;
24
29
  };
25
- export const isIntersectionElements = (board, elements, ranges) => {
30
+ export const getHitElementOfRoot = (board, rootElements, range) => {
31
+ const newRootElements = [...rootElements].reverse();
32
+ return newRootElements.find(item => {
33
+ return board.isHitSelection(item, range);
34
+ });
35
+ };
36
+ export const isHitElements = (board, elements, ranges) => {
26
37
  let isIntersectionElements = false;
27
38
  if (elements.length) {
28
39
  elements.map(item => {
@@ -57,4 +68,4 @@ export const isSelectedElement = (board, element) => {
57
68
  const selectedElements = getSelectedElements(board);
58
69
  return !!selectedElements.find(value => value === element);
59
70
  };
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy91dGlscy9zZWxlY3RlZC1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSXhELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsU0FBcUIsRUFBRSxFQUFFO0lBQ3ZFLE1BQU0sYUFBYSxHQUFHLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ25ELE1BQU0sZ0JBQWdCLEdBQW1CLEVBQUUsQ0FBQztJQUM1QyxtQkFBbUIsQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLEVBQUU7UUFDSCxJQUNJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDekIsYUFBYTtZQUNiLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxFQUNKO1lBQ0UsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQyxFQUNELElBQUksQ0FBQyxFQUFFO1FBQ0gsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDckQsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDLENBQ0osQ0FBQztJQUNGLE9BQU8sZ0JBQWdCLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXdCLEVBQUUsTUFBZSxFQUFFLEVBQUU7SUFDbkcsSUFBSSxzQkFBc0IsR0FBRyxLQUFLLENBQUM7SUFDbkMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFO1FBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUN6QixzQkFBc0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUN6QyxPQUFPLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7S0FDTjtJQUNELE9BQU8sc0JBQXNCLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLGdCQUFnQyxFQUFFLEVBQUU7SUFDekYseUJBQXlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3JELE9BQU8seUJBQXlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFxQixFQUFFLEVBQUU7SUFDOUUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztJQUNoRixxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN0RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0RCxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQXFCLEVBQUUsRUFBRTtJQUMxRSxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQztBQUMvRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQgfSBmcm9tICcuL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBTZWxlY3Rpb24sIFJhbmdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IGdldEhpdEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzZWxlY3Rpb24/OiBTZWxlY3Rpb24pID0+IHtcbiAgICBjb25zdCByZWFsU2VsZWN0aW9uID0gc2VsZWN0aW9uIHx8IGJvYXJkLnNlbGVjdGlvbjtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICBib2FyZCxcbiAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSAmJlxuICAgICAgICAgICAgICAgIHJlYWxTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICByZWFsU2VsZWN0aW9uLnJhbmdlcy5zb21lKHJhbmdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvYXJkLmlzSGl0U2VsZWN0aW9uKG5vZGUsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ludGVyc2VjdGlvbkVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10sIHJhbmdlczogUmFuZ2VbXSkgPT4ge1xuICAgIGxldCBpc0ludGVyc2VjdGlvbkVsZW1lbnRzID0gZmFsc2U7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBlbGVtZW50cy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzSW50ZXJzZWN0aW9uRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBpc0ludGVyc2VjdGlvbkVsZW1lbnRzID0gcmFuZ2VzLnNvbWUocmFuZ2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9hcmQuaXNIaXRTZWxlY3Rpb24oaXRlbSwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzSW50ZXJzZWN0aW9uRWxlbWVudHM7XG59O1xuXG5leHBvcnQgY29uc3QgY2FjaGVTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuc2V0KGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWxlY3RlZEVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1NFTEVDVEVEX0VMRU1FTlQuZ2V0KGJvYXJkKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFsuLi5zZWxlY3RlZEVsZW1lbnRzLCBlbGVtZW50XSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBlbGVtZW50KTtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY2FjaGVTZWxlY3RlZEVsZW1lbnRzKGJvYXJkLCBbXSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZEVsZW1lbnRzLmZpbmQodmFsdWUgPT4gdmFsdWUgPT09IGVsZW1lbnQpO1xufTtcbiJdfQ==
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy91dGlscy9zZWxlY3RlZC1lbGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQVMsTUFBTSx5QkFBeUIsQ0FBQztBQUczRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFNBQXFCLEVBQUUsRUFBRTtJQUN2RSxNQUFNLGFBQWEsR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNuRCxNQUFNLGdCQUFnQixHQUFtQixFQUFFLENBQUM7SUFDNUMsTUFBTSxXQUFXLEdBQUcsYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6SCxtQkFBbUIsQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLEVBQUU7UUFDSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxFQUFFO1lBQzVDLE9BQU87U0FDVjtRQUNELElBQ0ksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUN6QixhQUFhO1lBQ2IsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLEVBQ0o7WUFD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QUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFxQixFQUFFLEVBQUU7SUFDMUUsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgQW5jZXN0b3IgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgZGVwdGhGaXJzdFJlY3Vyc2lvbiB9IGZyb20gJy4vdHJlZSc7XG5pbXBvcnQgeyBCT0FSRF9UT19TRUxFQ1RFRF9FTEVNRU5UIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgU2VsZWN0aW9uLCBSYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0aW9uPzogU2VsZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgcmVhbFNlbGVjdGlvbiA9IHNlbGVjdGlvbiB8fCBib2FyZC5zZWxlY3Rpb247XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHJlYWxTZWxlY3Rpb24gJiYgcmVhbFNlbGVjdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxICYmIFNlbGVjdGlvbi5pc0NvbGxhcHNlZChyZWFsU2VsZWN0aW9uLnJhbmdlc1swXSk7XG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSAmJlxuICAgICAgICAgICAgICAgIHJlYWxTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICByZWFsU2VsZWN0aW9uLnJhbmdlcy5zb21lKHJhbmdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJvYXJkLmlzSGl0U2VsZWN0aW9uKG5vZGUsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBub2RlID0+IHtcbiAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgYm9hcmQuaXNSZWN1cnNpb24obm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50T2ZSb290ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCByb290RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCByYW5nZTogUmFuZ2UpID0+IHtcbiAgICBjb25zdCBuZXdSb290RWxlbWVudHMgPSBbLi4ucm9vdEVsZW1lbnRzXS5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIG5ld1Jvb3RFbGVtZW50cy5maW5kKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gYm9hcmQuaXNIaXRTZWxlY3Rpb24oaXRlbSwgcmFuZ2UpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSGl0RWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgcmFuZ2VzOiBSYW5nZVtdKSA9PiB7XG4gICAgbGV0IGlzSW50ZXJzZWN0aW9uRWxlbWVudHMgPSBmYWxzZTtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGVsZW1lbnRzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICghaXNJbnRlcnNlY3Rpb25FbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGlzSW50ZXJzZWN0aW9uRWxlbWVudHMgPSByYW5nZXMuc29tZShyYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib2FyZC5pc0hpdFNlbGVjdGlvbihpdGVtLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXNJbnRlcnNlY3Rpb25FbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5zZXQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5nZXQoYm9hcmQpIHx8IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgWy4uLnNlbGVjdGVkRWxlbWVudHMsIGVsZW1lbnRdKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IGVsZW1lbnQpO1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgbmV3U2VsZWN0ZWRFbGVtZW50cyk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIFtdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkRWxlbWVudHMuZmluZCh2YWx1ZSA9PiB2YWx1ZSA9PT0gZWxlbWVudCk7XG59O1xuIl19
@@ -0,0 +1,106 @@
1
+ import { PlaitBoard } from '../interfaces';
2
+ import { getRectangleByElements } from './element';
3
+ function cloneCSSStyle(nativeNode, clonedNode) {
4
+ const targetStyle = clonedNode.style;
5
+ if (!targetStyle) {
6
+ return;
7
+ }
8
+ const sourceStyle = window.getComputedStyle(nativeNode);
9
+ if (sourceStyle.cssText) {
10
+ targetStyle.cssText = sourceStyle.cssText;
11
+ targetStyle.transformOrigin = sourceStyle.transformOrigin;
12
+ }
13
+ else {
14
+ Array.from(sourceStyle).forEach(name => {
15
+ let value = sourceStyle.getPropertyValue(name);
16
+ targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));
17
+ });
18
+ }
19
+ }
20
+ function createCanvas(width, height, fillStyle) {
21
+ const canvas = document.createElement('canvas');
22
+ const ctx = canvas.getContext('2d');
23
+ canvas.width = width;
24
+ canvas.height = height;
25
+ canvas.style.width = `${width}px`;
26
+ canvas.style.height = `${height}px`;
27
+ ctx.strokeStyle = '#ffffff';
28
+ ctx.fillStyle = fillStyle;
29
+ ctx.fillRect(0, 0, width, height);
30
+ return {
31
+ canvas,
32
+ ctx
33
+ };
34
+ }
35
+ function isElementNode(node) {
36
+ return node.nodeType === Node.ELEMENT_NODE;
37
+ }
38
+ function cloneSvg(board, options) {
39
+ const elementHostBox = getRectangleByElements(board, board.children, true);
40
+ const { width, height, x, y } = elementHostBox;
41
+ const { padding = 4, inlineStyleClassNames } = options;
42
+ const sourceSvg = PlaitBoard.getHost(board);
43
+ const cloneSvgElement = sourceSvg.cloneNode(true);
44
+ cloneSvgElement.style.width = `${width}px`;
45
+ cloneSvgElement.style.height = `${height}px`;
46
+ cloneSvgElement.style.backgroundColor = '';
47
+ cloneSvgElement.setAttribute('width', `${width}`);
48
+ cloneSvgElement.setAttribute('height', `${height}`);
49
+ cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));
50
+ if (inlineStyleClassNames) {
51
+ const sourceNodes = Array.from(sourceSvg.querySelectorAll(inlineStyleClassNames));
52
+ const cloneNodes = Array.from(cloneSvgElement.querySelectorAll(inlineStyleClassNames));
53
+ sourceNodes.forEach((node, index) => {
54
+ const cloneNode = cloneNodes[index];
55
+ const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode);
56
+ const cloneChildElements = Array.from(cloneNode.querySelectorAll('*')).filter(isElementNode);
57
+ sourceNodes.push(...childElements);
58
+ cloneNodes.push(...cloneChildElements);
59
+ });
60
+ sourceNodes.forEach((node, index) => {
61
+ const cloneNode = cloneNodes[index];
62
+ cloneCSSStyle(node, cloneNode);
63
+ });
64
+ }
65
+ return cloneSvgElement;
66
+ }
67
+ function loadImage(src) {
68
+ return new Promise((resolve, reject) => {
69
+ const img = new Image();
70
+ img.onload = () => resolve(img);
71
+ img.onerror = () => reject(new Error('Failed to load image'));
72
+ img.src = src;
73
+ });
74
+ }
75
+ export async function toImage(board, options) {
76
+ if (!board) {
77
+ return undefined;
78
+ }
79
+ const elementHostBox = getRectangleByElements(board, board.children, true);
80
+ const { ratio = 2, fillStyle = 'transparent' } = options;
81
+ const { width, height } = elementHostBox;
82
+ const ratioWidth = width * ratio;
83
+ const ratioHeight = height * ratio;
84
+ const cloneSvgElement = cloneSvg(board, options);
85
+ const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);
86
+ const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);
87
+ const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;
88
+ try {
89
+ const img = await loadImage(imgSrc);
90
+ ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);
91
+ const url = canvas.toDataURL('image/png');
92
+ return url;
93
+ }
94
+ catch (error) {
95
+ console.error('Error converting SVG to image:', error);
96
+ return undefined;
97
+ }
98
+ }
99
+ export function downloadImage(url, name) {
100
+ const a = document.createElement('a');
101
+ a.href = url;
102
+ a.download = name;
103
+ a.click();
104
+ a.remove();
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8taW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvdXRpbHMvdG8taW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFXbkQsU0FBUyxhQUFhLENBQXdCLFVBQWEsRUFBRSxVQUFhO0lBQ3RFLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDckMsSUFBSSxDQUFDLFdBQVcsRUFBRTtRQUNkLE9BQU87S0FDVjtJQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7UUFDckIsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQzFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztLQUM3RDtTQUFNO1FBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0wsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBRSxNQUFjLEVBQUUsU0FBaUI7SUFDbEUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxN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R0FBRyxDQUFDO0lBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDbEIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRvSW1hZ2VPcHRpb25zIHtcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIHJhdGlvPzogbnVtYmVyO1xuICAgIHBhZGRpbmc/OiBudW1iZXI7XG4gICAgZmlsbFN0eWxlPzogc3RyaW5nO1xuICAgIC8vIOmAl+WPt+exu+WQjeWIl+ihqOOAgiDor6XliJfooajlv4Xpobvph4fnlKggY2xhc3MxLGNsYXNzMiwuLi4g55qE5b2i5byP44CCXG4gICAgaW5saW5lU3R5bGVDbGFzc05hbWVzPzogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNTU1N0eWxlPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4obmF0aXZlTm9kZTogVCwgY2xvbmVkTm9kZTogVCkge1xuICAgIGNvbnN0IHRhcmdldFN0eWxlID0gY2xvbmVkTm9kZS5zdHlsZTtcbiAgICBpZiAoIXRhcmdldFN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG5hdGl2ZU5vZGUpO1xuICAgIGlmIChzb3VyY2VTdHlsZS5jc3NUZXh0KSB7XG4gICAgICAgIHRhcmdldFN0eWxlLmNzc1RleHQgPSBzb3VyY2VTdHlsZS5jc3NUZXh0O1xuICAgICAgICB0YXJnZXRTdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBzb3VyY2VTdHlsZS50cmFuc2Zvcm1PcmlnaW47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgQXJyYXkuZnJvbShzb3VyY2VTdHlsZSkuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHNvdXJjZVN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gICAgICAgICAgICB0YXJnZXRTdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgc291cmNlU3R5bGUuZ2V0UHJvcGVydHlQcmlvcml0eShuYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBmaWxsU3R5bGU6IHN0cmluZykge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpITtcblxuICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjZmZmZmZmJztcbiAgICBjdHguZmlsbFN0eWxlID0gZmlsbFN0eWxlO1xuICAgIGN0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY3R4XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShub2RlOiBOb2RlKTogbm9kZSBpcyBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjbG9uZVN2Zyhib2FyZDogUGxhaXRCb2FyZCwgb3B0aW9uczogVG9JbWFnZU9wdGlvbnMpIHtcbiAgICBjb25zdCBlbGVtZW50SG9zdEJveCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIHgsIHkgfSA9IGVsZW1lbnRIb3N0Qm94O1xuICAgIGNvbnN0IHsgcGFkZGluZyA9IDQsIGlubGluZVN0eWxlQ2xhc3NOYW1lcyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzb3VyY2VTdmcgPSBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpO1xuICAgIGNvbnN0IGNsb25lU3ZnRWxlbWVudCA9IHNvdXJjZVN2Zy5jbG9uZU5vZGUodHJ1ZSkgYXMgU1ZHRWxlbWVudDtcblxuICAgIGNsb25lU3ZnRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7XG4gICAgY2xvbmVTdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBgJHt3aWR0aH1gKTtcbiAgICBjbG9uZVN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtoZWlnaHR9YCk7XG4gICAgY2xvbmVTdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFt4IC0gcGFkZGluZywgeSAtIHBhZGRpbmcsIHdpZHRoICsgMiAqIHBhZGRpbmcsIGhlaWdodCArIDIgKiBwYWRkaW5nXS5qb2luKCcsJykpO1xuXG4gICAgaWYgKGlubGluZVN0eWxlQ2xhc3NOYW1lcykge1xuICAgICAgICBjb25zdCBzb3VyY2VOb2RlcyA9IEFycmF5LmZyb20oc291cmNlU3ZnLnF1ZXJ5U2VsZWN0b3JBbGwoaW5saW5lU3R5bGVDbGFzc05hbWVzKSk7XG4gICAgICAgIGNvbnN0IGNsb25lTm9kZXMgPSBBcnJheS5mcm9tKGNsb25lU3ZnRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGlubGluZVN0eWxlQ2xhc3NOYW1lcykpO1xuXG4gICAgICAgIHNvdXJjZU5vZGVzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZU5vZGUgPSBjbG9uZU5vZGVzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSBBcnJheS5mcm9tKG5vZGUucXVlcnlTZWxlY3RvckFsbCgnKicpKS5maWx0ZXIoaXNFbGVtZW50Tm9kZSkgYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQ2hpbGRFbGVtZW50cyA9IEFycmF5LmZyb20oY2xvbmVOb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSkuZmlsdGVyKGlzRWxlbWVudE5vZGUpIGFzIEhUTUxFbGVtZW50W107XG4gICAgICAgICAgICBzb3VyY2VOb2Rlcy5wdXNoKC4uLmNoaWxkRWxlbWVudHMpO1xuICAgICAgICAgICAgY2xvbmVOb2Rlcy5wdXNoKC4uLmNsb25lQ2hpbGRFbGVtZW50cyk7XG4gICAgICAgIH0pO1xuICAgICAgICBzb3VyY2VOb2Rlcy5mb3JFYWNoKChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2xvbmVOb2RlID0gY2xvbmVOb2Rlc1tpbmRleF07XG4gICAgICAgICAgICBjbG9uZUNTU1N0eWxlKG5vZGUgYXMgSFRNTEVsZW1lbnQsIGNsb25lTm9kZSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZVN2Z0VsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGxvYWRJbWFnZShzcmM6IHN0cmluZyk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZShpbWcpO1xuICAgICAgICBpbWcub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGltYWdlJykpO1xuICAgICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9JbWFnZShib2FyZDogUGxhaXRCb2FyZCwgb3B0aW9uczogVG9JbWFnZU9wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghYm9hcmQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SG9zdEJveCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB7IHJhdGlvID0gMiwgZmlsbFN0eWxlID0gJ3RyYW5zcGFyZW50JyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnRIb3N0Qm94O1xuICAgIGNvbnN0IHJhdGlvV2lkdGggPSB3aWR0aCAqIHJhdGlvO1xuICAgIGNvbnN0IHJhdGlvSGVpZ2h0ID0gaGVpZ2h0ICogcmF0aW87XG4gICAgY29uc3QgY2xvbmVTdmdFbGVtZW50ID0gY2xvbmVTdmcoYm9hcmQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IHsgY2FudmFzLCBjdHggfSA9IGNyZWF0ZUNhbnZhcyhyYXRpb1dpZHRoLCByYXRpb0hlaWdodCwgZmlsbFN0eWxlKTtcblxuICAgIGNvbnN0IHN2Z1N0ciA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoY2xvbmVTdmdFbGVtZW50KTtcbiAgICBjb25zdCBpbWdTcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyKX1gO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW1nID0gYXdhaXQgbG9hZEltYWdlKGltZ1NyYyk7XG4gICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCByYXRpb1dpZHRoLCByYXRpb0hlaWdodCk7XG4gICAgICAgIGNvbnN0IHVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbnZlcnRpbmcgU1ZHIHRvIGltYWdlOicsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZEltYWdlKHVybDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGEuaHJlZiA9IHVybDtcbiAgICBhLmRvd25sb2FkID0gbmFtZTtcbiAgICBhLmNsaWNrKCk7XG4gICAgYS5yZW1vdmUoKTtcbn1cbiJdfQ==
@@ -1,9 +1,14 @@
1
- export function depthFirstRecursion(node, callback, recursion) {
1
+ export function depthFirstRecursion(node, callback, recursion, isReverse) {
2
2
  if (!recursion || recursion(node)) {
3
- node.children?.forEach(child => {
3
+ let children = [];
4
+ if (node.children) {
5
+ children = [...node.children];
6
+ }
7
+ children = isReverse ? children.reverse() : children;
8
+ children.forEach(child => {
4
9
  depthFirstRecursion(child, callback, recursion);
5
10
  });
6
11
  }
7
12
  callback(node);
8
13
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy91dGlscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxtQkFBbUIsQ0FBZ0MsSUFBTyxFQUFFLFFBQTJCLEVBQUUsU0FBZ0M7SUFDckksSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDM0IsbUJBQW1CLENBQUMsS0FBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZGVwdGhGaXJzdFJlY3Vyc2lvbjxUIGV4dGVuZHMgVHJlZU5vZGUgPSBUcmVlTm9kZT4obm9kZTogVCwgY2FsbGJhY2s6IChub2RlOiBUKSA9PiB2b2lkLCByZWN1cnNpb24/OiAobm9kZTogVCkgPT4gYm9vbGVhbikge1xuICAgIGlmICghcmVjdXJzaW9uIHx8IHJlY3Vyc2lvbihub2RlKSkge1xuICAgICAgICBub2RlLmNoaWxkcmVuPy5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oY2hpbGQgYXMgVCwgY2FsbGJhY2ssIHJlY3Vyc2lvbik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYWxsYmFjayhub2RlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmVlTm9kZSB7XG4gICAgY2hpbGRyZW4/OiBUcmVlTm9kZVtdO1xufVxuIl19
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYWl0L3NyYy91dGlscy90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxtQkFBbUIsQ0FDL0IsSUFBTyxFQUNQLFFBQTJCLEVBQzNCLFNBQWdDLEVBQ2hDLFNBQW1CO0lBRW5CLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQy9CLElBQUksUUFBUSxHQUFlLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixRQUFRLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqQztRQUNELFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3JELFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsbUJBQW1CLENBQUMsS0FBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztLQUNOO0lBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gZGVwdGhGaXJzdFJlY3Vyc2lvbjxUIGV4dGVuZHMgVHJlZU5vZGUgPSBUcmVlTm9kZT4oXG4gICAgbm9kZTogVCxcbiAgICBjYWxsYmFjazogKG5vZGU6IFQpID0+IHZvaWQsXG4gICAgcmVjdXJzaW9uPzogKG5vZGU6IFQpID0+IGJvb2xlYW4sXG4gICAgaXNSZXZlcnNlPzogYm9vbGVhblxuKSB7XG4gICAgaWYgKCFyZWN1cnNpb24gfHwgcmVjdXJzaW9uKG5vZGUpKSB7XG4gICAgICAgIGxldCBjaGlsZHJlbjogVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgY2hpbGRyZW4gPSBbLi4ubm9kZS5jaGlsZHJlbl07XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW4gPSBpc1JldmVyc2UgPyBjaGlsZHJlbi5yZXZlcnNlKCkgOiBjaGlsZHJlbjtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKGNoaWxkIGFzIFQsIGNhbGxiYWNrLCByZWN1cnNpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2FsbGJhY2sobm9kZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJlZU5vZGUge1xuICAgIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcbn1cbiJdfQ==
@@ -7,7 +7,7 @@ const IS_FROM_VIEWPORT_CHANGE = new WeakMap();
7
7
  export function getViewportContainerRect(board) {
8
8
  const { hideScrollbar } = board.options;
9
9
  const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
10
- const viewportRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
10
+ const viewportRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
11
11
  return {
12
12
  width: viewportRect.width + scrollBarWidth,
13
13
  height: viewportRect.height + scrollBarWidth
@@ -15,7 +15,7 @@ export function getViewportContainerRect(board) {
15
15
  }
16
16
  export function getElementHostBBox(board, zoom) {
17
17
  const childrenRect = getRectangleByElements(board, board.children, true);
18
- const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
18
+ const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
19
19
  const containerWidth = viewportContainerRect.width / zoom;
20
20
  const containerHeight = viewportContainerRect.height / zoom;
21
21
  let left;
@@ -60,7 +60,7 @@ export function clampZoomLevel(zoom, minZoom = 0.2, maxZoom = 4) {
60
60
  return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;
61
61
  }
62
62
  export function getViewBox(board, zoom) {
63
- const boardContainerRectangle = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
63
+ const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
64
64
  const elementHostBBox = getElementHostBBox(board, zoom);
65
65
  const horizontalPadding = boardContainerRectangle.width / 2;
66
66
  const verticalPadding = boardContainerRectangle.height / 2;
@@ -72,6 +72,10 @@ export function getViewBox(board, zoom) {
72
72
  ];
73
73
  return viewBox;
74
74
  }
75
+ export function getViewBoxCenterPoint(board) {
76
+ const childrenRectangle = getRectangleByElements(board, board.children, true);
77
+ return [childrenRectangle.x + childrenRectangle.width / 2, childrenRectangle.y + childrenRectangle.height / 2];
78
+ }
75
79
  export function setSVGViewBox(board, viewBox) {
76
80
  const zoom = board.viewport.zoom;
77
81
  const hostElement = PlaitBoard.getHost(board);
@@ -114,7 +118,7 @@ export function initializeViewBox(board) {
114
118
  export function initializeViewportOffset(board) {
115
119
  if (!board.viewport?.origination) {
116
120
  const zoom = board.viewport.zoom;
117
- const viewportContainerRect = PlaitBoard.getBoardNativeElement(board).getBoundingClientRect();
121
+ const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
118
122
  const viewBox = getViewBox(board, zoom);
119
123
  const centerX = viewBox[0] + viewBox[2] / 2;
120
124
  const centerY = viewBox[1] + viewBox[3] / 2;
@@ -153,4 +157,4 @@ export const setIsFromViewportChange = (board, state) => {
153
157
  IS_FROM_VIEWPORT_CHANGE.set(board, state);
154
158
  };
155
159
  export function scrollToRectangle(board, client) { }
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvdXRpbHMvdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUU3RCxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFpQjtJQUN0RCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN4QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFckYsT0FBTztRQUNILEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxHQUFHLGNBQWM7UUFDMUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsY0FBYztLQUMvQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFpQixFQUFFLElBQVk7SUFDOUQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUMscUJBQXFC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VEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTiB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuY29uc3QgSVNfRlJPTV9TQ1JPTExJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5jb25zdCBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGhpZGVTY3JvbGxiYXIgfSA9IGJvYXJkLm9wdGlvbnM7XG4gICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBoaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgY29uc3Qgdmlld3BvcnRSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZE5hdGl2ZUVsZW1lbnQoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHZpZXdwb3J0UmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0UmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkTmF0aXZlRWxlbWVudChib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyB6b29tO1xuICAgIGNvbnN0IGNvbnRhaW5lckhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyB6b29tO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG4gICAgbGV0IHJpZ2h0OiBudW1iZXI7XG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBib3R0b206IG51bWJlcjtcblxuICAgIGlmIChjaGlsZHJlblJlY3Qud2lkdGggPCBjb250YWluZXJXaWR0aCkge1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gY2hpbGRyZW5SZWN0LnggKyBjaGlsZHJlblJlY3Qud2lkdGggLyAyO1xuICAgICAgICBjb25zdCBoYWxmQ29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aCAvIDI7XG4gICAgICAgIGxlZnQgPSBjZW50ZXJYIC0gaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgICAgICByaWdodCA9IGNlbnRlclggKyBoYWxmQ29udGFpbmVyV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGVmdCA9IGNoaWxkcmVuUmVjdC54O1xuICAgICAgICByaWdodCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoO1xuICAgIH1cbiAgICBpZiAoY2hpbGRyZW5SZWN0LmhlaWdodCA8IGNvbnRhaW5lckhlaWdodCkge1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gY2hpbGRyZW5SZWN0LnkgKyBjaGlsZHJlblJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lckhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAvIDI7XG4gICAgICAgIHRvcCA9IGNlbnRlclkgLSBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgICAgICBib3R0b20gPSBjZW50ZXJZICsgaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBjaGlsZHJlblJlY3QueTtcbiAgICAgICAgYm90dG9tID0gY2hpbGRyZW5SZWN0LnkgKyBjaGlsZHJlblJlY3QuaGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBsZWZ0LFxuICAgICAgICByaWdodCxcbiAgICAgICAgdG9wLFxuICAgICAgICBib3R0b21cbiAgICB9O1xufVxuXG4vKipcbiAqIOmqjOivgee8qeaUvuavlOaYr+WQpuespuWQiOmZkOWItu+8jOWmguaenOi2heWHuumZkOWItu+8jOWImei/lOWbnuWQiOmAgueahOe8qeaUvuavlFxuICogQHBhcmFtIHpvb20g57yp5pS+5q+UXG4gKiBAcGFyYW0gbWluWm9vbSDmnIDlsI/nvKnmlL7mr5RcbiAqIEBwYXJhbSBtYXhab29tIOacgOWkp+e8qeaUvuavlFxuICogQHJldHVybnMg5q2j56Gu55qE57yp5pS+5q+UXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFpvb21MZXZlbCh6b29tOiBudW1iZXIsIG1pblpvb20gPSAwLjIsIG1heFpvb20gPSA0KSB7XG4gICAgcmV0dXJuIHpvb20gPCBtaW5ab29tID8gbWluWm9vbSA6IHpvb20gPiBtYXhab29tID8gbWF4Wm9vbSA6IHpvb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkLCB6b29tOiBudW1iZXIpIHtcbiAgICBjb25zdCBib2FyZENvbnRhaW5lclJlY3RhbmdsZSA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmROYXRpdmVFbGVtZW50KGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbGVtZW50SG9zdEJCb3ggPSBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQsIHpvb20pO1xuXG4gICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSBib2FyZENvbnRhaW5lclJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgY29uc3QgdmVydGljYWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUuaGVpZ2h0IC8gMjtcbiAgICBjb25zdCB2aWV3Qm94ID0gW1xuICAgICAgICBlbGVtZW50SG9zdEJCb3gubGVmdCAtIGhvcml6b250YWxQYWRkaW5nIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LnRvcCAtIHZlcnRpY2FsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5yaWdodCAtIGVsZW1lbnRIb3N0QkJveC5sZWZ0ICsgKGhvcml6b250YWxQYWRkaW5nICogMikgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3guYm90dG9tIC0gZWxlbWVudEhvc3RCQm94LnRvcCArICh2ZXJ0aWNhbFBhZGRpbmcgKiAyKSAvIHpvb21cbiAgICBdO1xuICAgIHJldHVybiB2aWV3Qm94O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCB7IHpvb20gfSA9IGJvYXJkLnZpZXdwb3J0O1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKG9yaWdpbmF0aW9uIVswXSAtIHZpZXdCb3hbMF0pICogem9vbTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAob3JpZ2luYXRpb24hWzFdIC0gdmlld0JveFsxXSkgKiB6b29tO1xuICAgIHVwZGF0ZVZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQ6IFBsYWl0Qm9hcmQsIGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGlzRnJvbVZpZXdwb3J0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgaWYgKHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgIT09IGxlZnQgfHwgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wICE9PSB0b3ApIHtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCA9IHRvcDtcbiAgICAgICAgaXNGcm9tVmlld3BvcnRDaGFuZ2UgJiYgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UoYm9hcmQsIHRydWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydENvbnRhaW5lcihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lciA9IFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpO1xuICAgIHZpZXdwb3J0Q29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHZpZXdwb3J0Q29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld0JveChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBzZXRTVkdWaWV3Qm94KGJvYXJkLCB2aWV3Qm94KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGlmICghYm9hcmQudmlld3BvcnQ/Lm9yaWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkTmF0aXZlRWxlbWVudChib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHZpZXdCb3hbMV0gKyB2aWV3Qm94WzNdIC8gMjtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb24gPSBbY2VudGVyWCAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIgLyB6b29tLCBjZW50ZXJZIC0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDIgLyB6b29tXSBhcyBQb2ludDtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb246IFBvaW50KSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uc2V0KGJvYXJkLCBvcmlnaW5hdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5nZXQoYm9hcmQpO1xuICAgIGlmIChvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gb3JpZ2luYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnZpZXdwb3J0Lm9yaWdpbmF0aW9uO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1NDUk9MTElORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1NDUk9MTElORy5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fVklFV1BPUlRfQ0hBTkdFLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0Uuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7fVxuIl19
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFpdC9zcmMvdXRpbHMvdmlld3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUU3RCxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxLQUFpQjtJQUN0RCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUN4QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFFakYsT0FBTztRQUNILEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxHQUFHLGNBQWM7UUFDMUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEdBQUcsY0FBYztLQUMvQyxDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFpQixFQUFFLElBQVk7SUFDOUQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUMsaUJBQWlC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QUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYyxFQUFFLEVBQUU7SUFDekUsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxNQUF1QixJQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTQ1JPTExfQkFSX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04gfSBmcm9tICcuL3dlYWstbWFwcyc7XG5cbmNvbnN0IElTX0ZST01fU0NST0xMSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuY29uc3QgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0UgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBoaWRlU2Nyb2xsYmFyIH0gPSBib2FyZC5vcHRpb25zO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgIGNvbnN0IHZpZXdwb3J0UmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHZpZXdwb3J0UmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0UmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIHpvb207XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIHpvb207XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gICAgaWYgKGNoaWxkcmVuUmVjdC53aWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IGNlbnRlclggLSBoYWxmQ29udGFpbmVyV2lkdGg7XG4gICAgICAgIHJpZ2h0ID0gY2VudGVyWCArIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gY2hpbGRyZW5SZWN0Lng7XG4gICAgICAgIHJpZ2h0ID0gY2hpbGRyZW5SZWN0LnggKyBjaGlsZHJlblJlY3Qud2lkdGg7XG4gICAgfVxuICAgIGlmIChjaGlsZHJlblJlY3QuaGVpZ2h0IDwgY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBoYWxmQ29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC8gMjtcbiAgICAgICAgdG9wID0gY2VudGVyWSAtIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJvdHRvbSA9IGNlbnRlclkgKyBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IGNoaWxkcmVuUmVjdC55O1xuICAgICAgICBib3R0b20gPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICB0b3AsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5cbi8qKlxuICog6aqM6K+B57yp5pS+5q+U5piv5ZCm56ym5ZCI6ZmQ5Yi277yM5aaC5p6c6LaF5Ye66ZmQ5Yi277yM5YiZ6L+U5Zue5ZCI6YCC55qE57yp5pS+5q+UXG4gKiBAcGFyYW0gem9vbSDnvKnmlL7mr5RcbiAqIEBwYXJhbSBtaW5ab29tIOacgOWwj+e8qeaUvuavlFxuICogQHBhcmFtIG1heFpvb20g5pyA5aSn57yp5pS+5q+UXG4gKiBAcmV0dXJucyDmraPnoa7nmoTnvKnmlL7mr5RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wWm9vbUxldmVsKHpvb206IG51bWJlciwgbWluWm9vbSA9IDAuMiwgbWF4Wm9vbSA9IDQpIHtcbiAgICByZXR1cm4gem9vbSA8IG1pblpvb20gPyBtaW5ab29tIDogem9vbSA+IG1heFpvb20gPyBtYXhab29tIDogem9vbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWxlbWVudEhvc3RCQm94ID0gZ2V0RWxlbWVudEhvc3RCQm94KGJvYXJkLCB6b29tKTtcblxuICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUud2lkdGggLyAyO1xuICAgIGNvbnN0IHZlcnRpY2FsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmxlZnQgLSBob3Jpem9udGFsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC50b3AgLSB2ZXJ0aWNhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gucmlnaHQgLSBlbGVtZW50SG9zdEJCb3gubGVmdCArIChob3Jpem9udGFsUGFkZGluZyAqIDIpIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmJvdHRvbSAtIGVsZW1lbnRIb3N0QkJveC50b3AgKyAodmVydGljYWxQYWRkaW5nICogMikgLyB6b29tXG4gICAgXTtcbiAgICByZXR1cm4gdmlld0JveDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3hDZW50ZXJQb2ludChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIHJldHVybiBbY2hpbGRyZW5SZWN0YW5nbGUueCArIGNoaWxkcmVuUmVjdGFuZ2xlLndpZHRoIC8gMiwgY2hpbGRyZW5SZWN0YW5nbGUueSArIGNoaWxkcmVuUmVjdGFuZ2xlLmhlaWdodCAvIDJdIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSByZXR1cm47XG5cbiAgICBjb25zdCB7IHpvb20gfSA9IGJvYXJkLnZpZXdwb3J0O1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gKG9yaWdpbmF0aW9uIVswXSAtIHZpZXdCb3hbMF0pICogem9vbTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSAob3JpZ2luYXRpb24hWzFdIC0gdmlld0JveFsxXSkgKiB6b29tO1xuICAgIHVwZGF0ZVZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkLCBzY3JvbGxMZWZ0LCBzY3JvbGxUb3ApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQ6IFBsYWl0Qm9hcmQsIGxlZnQ6IG51bWJlciwgdG9wOiBudW1iZXIsIGlzRnJvbVZpZXdwb3J0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgaWYgKHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgIT09IGxlZnQgfHwgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wICE9PSB0b3ApIHtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCA9IGxlZnQ7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCA9IHRvcDtcbiAgICAgICAgaXNGcm9tVmlld3BvcnRDaGFuZ2UgJiYgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UoYm9hcmQsIHRydWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydENvbnRhaW5lcihib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lciA9IFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpO1xuICAgIHZpZXdwb3J0Q29udGFpbmVyLnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHZpZXdwb3J0Q29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld0JveChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBzZXRTVkdWaWV3Qm94KGJvYXJkLCB2aWV3Qm94KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGlmICghYm9hcmQudmlld3BvcnQ/Lm9yaWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gdmlld0JveFswXSArIHZpZXdCb3hbMl0gLyAyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gdmlld0JveFsxXSArIHZpZXdCb3hbM10gLyAyO1xuICAgICAgICBjb25zdCBvcmlnaW5hdGlvbiA9IFtjZW50ZXJYIC0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gMiAvIHpvb20sIGNlbnRlclkgLSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gMiAvIHpvb21dIGFzIFBvaW50O1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkLCBvcmlnaW5hdGlvbik7XG4gICAgICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvcmlnaW5hdGlvbjogUG9pbnQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5zZXQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5kZWxldGUoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLmdldChib2FyZCk7XG4gICAgaWYgKG9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYm9hcmQudmlld3BvcnQub3JpZ2luYXRpb247XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fU0NST0xMSU5HLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tU2Nyb2xsaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGF0ZTogYm9vbGVhbikgPT4ge1xuICAgIElTX0ZST01fU0NST0xMSU5HLnNldChib2FyZCwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRnJvbVZpZXdwb3J0Q2hhbmdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0UuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRS5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1JlY3RhbmdsZShib2FyZDogUGxhaXRCb2FyZCwgY2xpZW50OiBSZWN0YW5nbGVDbGllbnQpIHt9XG4iXX0=