@plait/mind 0.24.1 → 0.26.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,4 +1,4 @@
1
- import { CLIP_BOARD_FORMAT_KEY, getRectangleByElements, getSelectedElements, PlaitBoard, Transforms } from '@plait/core';
1
+ import { CLIP_BOARD_FORMAT_KEY, CLIP_BOARD_IMAGE_FORMAT_KEY, getRectangleByElements, getSelectedElements, PlaitBoard, Transforms } from '@plait/core';
2
2
  import { MindElement, PlaitMind } from '../interfaces';
3
3
  import { copyNewNode, extractNodesText } from './mind';
4
4
  import { getRectangleByNode } from './position/node';
@@ -62,6 +62,20 @@ export const setClipboardData = (data, elements) => {
62
62
  data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
63
63
  data?.setData(`text/plain`, text);
64
64
  };
65
+ export const setClipboardDataByImage = (data, image) => {
66
+ const stringObj = JSON.stringify(image);
67
+ const encoded = window.btoa(encodeURIComponent(stringObj));
68
+ data?.setData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`, encoded);
69
+ };
70
+ export const getImageItemFromClipboard = (data) => {
71
+ const encoded = data?.getData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`);
72
+ let imageItem = null;
73
+ if (encoded) {
74
+ const decoded = decodeURIComponent(window.atob(encoded));
75
+ imageItem = JSON.parse(decoded);
76
+ }
77
+ return imageItem;
78
+ };
65
79
  export const getDataFromClipboard = (data) => {
66
80
  const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
67
81
  let nodesData = [];
@@ -123,4 +137,4 @@ export const insertClipboardText = (board, targetParent, text) => {
123
137
  Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));
124
138
  return;
125
139
  };
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUVuQixVQUFVLEVBR1YsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlGLE9BQU8sRUFBRSxXQUFXLEVBQW1CLE1BQU0sYUFBYSxDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUU5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQWEsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsZ0JBQStCLEVBQUUsRUFBRTtJQUNyRixJQUFJ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QUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFxQixFQUFFLFlBQTBCLEVBQUUsSUFBc0IsRUFBRSxFQUFFO0lBQzdHLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDekgsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3BGLE9BQU87QUFDWCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENMSVBfQk9BUkRfRk9STUFUX0tFWSxcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50LCBQbGFpdE1pbmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNvcHlOZXdOb2RlLCBleHRyYWN0Tm9kZXNUZXh0IH0gZnJvbSAnLi9taW5kJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4vcG9zaXRpb24vbm9kZSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUsIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4gfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBnZXRSZWxhdGl2ZVN0YXJ0RW5kQnlBYnN0cmFjdFJlZiwgZ2V0T3ZlcmFsbEFic3RyYWN0cywgZ2V0VmFsaWRBYnN0cmFjdFJlZnMgfSBmcm9tICcuL2Fic3RyYWN0L2NvbW1vbic7XG5pbXBvcnQgeyBjcmVhdGVNaW5kRWxlbWVudCB9IGZyb20gJy4vbm9kZS9jcmVhdGUtbm9kZSc7XG5pbXBvcnQgeyBhZGp1c3RBYnN0cmFjdFRvTm9kZSwgYWRqdXN0Tm9kZVRvUm9vdCwgYWRqdXN0Um9vdFRvTm9kZSB9IGZyb20gJy4vbm9kZS9hZGp1c3Qtbm9kZSc7XG5pbXBvcnQgeyBFbGVtZW50LCBOb2RlIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgZ2V0VGV4dFNpemUsIFBsYWl0TWFya0VkaXRvciB9IGZyb20gJ0BwbGFpdC90ZXh0JztcbmltcG9ydCB7IEJSQU5DSF9GT05UX0ZBTUlMWSwgREVGQVVMVF9GT05UX0ZBTUlMWSwgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCB9IGZyb20gJy4uL2NvbnN0YW50cy9ub2RlLXRvcGljLXN0eWxlJztcbmltcG9ydCB7IGZpbmROZXdDaGlsZE5vZGVQYXRoIH0gZnJvbSAnLi9wYXRoJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgZ2V0Rm9udFNpemVCeVNsYXRlRWxlbWVudCwgZ2V0Tm9kZURlZmF1bHRGb250U2l6ZSwgTm9kZVNwYWNlIH0gZnJvbSAnLi9zcGFjZS9ub2RlLXNwYWNlJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1pbmRFbGVtZW50W10gPSBbXTtcblxuICAgIC8vIGdldCBvdmVyYWxsIGFic3RyYWN0XG4gICAgY29uc3Qgb3ZlcmFsbEFic3RyYWN0cyA9IGdldE92ZXJhbGxBYnN0cmFjdHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpIGFzIE1pbmRFbGVtZW50W107XG4gICAgLy8gZ2V0IHZhbGlkIGFic3RyYWN0IHJlZnNcbiAgICBjb25zdCB2YWxpZEFic3RyYWN0UmVmcyA9IGdldFZhbGlkQWJzdHJhY3RSZWZzKGJvYXJkLCBbLi4uc2VsZWN0ZWRFbGVtZW50cywgLi4ub3ZlcmFsbEFic3RyYWN0c10pO1xuXG4gICAgLy8ga2VlcCBjb3JyZWN0IG9yZGVyXG4gICAgY29uc3QgbmV3U2VsZWN0ZWRFbGVtZW50cyA9IHNlbGVjdGVkRWxlbWVudHMuZmlsdGVyKHZhbHVlID0+ICF2YWxpZEFic3RyYWN0UmVmcy5maW5kKHJlZiA9PiByZWYuYWJzdHJhY3QgPT09IHZhbHVlKSk7XG4gICAgbmV3U2VsZWN0ZWRFbGVtZW50cy5wdXNoKC4uLnZhbGlkQWJzdHJhY3RSZWZzLm1hcCh2YWx1ZSA9PiB2YWx1ZS5hYnN0cmFjdCkpO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5kTm9kZXMgPSBuZXdTZWxlY3RlZEVsZW1lbnRzLm1hcCh2YWx1ZSA9PiBNaW5kRWxlbWVudC5nZXROb2RlKHZhbHVlKSk7XG4gICAgY29uc3Qgbm9kZXNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBuZXdTZWxlY3RlZEVsZW1lbnRzLCB0cnVlKTtcbiAgICBuZXdTZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIGhhbmRsZSByZWxhdGl2ZSBsb2NhdGlvblxuICAgICAgICBjb25zdCBub2RlUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKHNlbGVjdGVkTWluZE5vZGVzW2luZGV4XSk7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFtbbm9kZVJlY3RhbmdsZS54IC0gbm9kZXNSZWN0YW5nbGUueCwgbm9kZVJlY3RhbmdsZS55IC0gbm9kZXNSZWN0YW5nbGUueV1dIGFzIFBvaW50W107XG5cbiAgICAgICAgLy8gaGFuZGxlIGludmFsaWQgYWJzdHJhY3RcbiAgICAgICAgY29uc3QgYWJzdHJhY3RSZWYgPSB2YWxpZEFic3RyYWN0UmVmcy5maW5kKHJlZiA9PiByZWYuYWJzdHJhY3QgPT09IGVsZW1lbnQpO1xuICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZWxlbWVudCkgJiYgYWJzdHJhY3RSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gZ2V0UmVsYXRpdmVTdGFydEVuZEJ5QWJzdHJhY3RSZWYoYWJzdHJhY3RSZWYsIG5ld1NlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RWxlbWVudCA9IHsgLi4uZWxlbWVudCwgcG9pbnRzIH0gYXMgTWluZEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0VsZW1lbnQuc3RhcnQ7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld0VsZW1lbnQuZW5kO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHBvaW50czogcG9pbnRzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNldENsaXBib2FyZERhdGEgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCwgZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzdHJpbmdPYmogPSBKU09OLnN0cmluZ2lmeShlbGVtZW50cyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IHdpbmRvdy5idG9hKGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdPYmopKTtcbiAgICBjb25zdCB0ZXh0ID0gZWxlbWVudHMucmVkdWNlKChzdHJpbmcsIGN1cnJlbnROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdHJpbmcgKyBleHRyYWN0Tm9kZXNUZXh0KGN1cnJlbnROb2RlKTtcbiAgICB9LCAnJyk7XG4gICAgZGF0YT8uc2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQX0JPQVJEX0ZPUk1BVF9LRVl9YCwgZW5jb2RlZCk7XG4gICAgZGF0YT8uc2V0RGF0YShgdGV4dC9wbGFpbmAsIHRleHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFGcm9tQ2xpcGJvYXJkID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICBjb25zdCBlbmNvZGVkID0gZGF0YT8uZ2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQX0JPQVJEX0ZPUk1BVF9LRVl9YCk7XG4gICAgbGV0IG5vZGVzRGF0YTogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoZW5jb2RlZCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5hdG9iKGVuY29kZWQpKTtcbiAgICAgICAgbm9kZXNEYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzRGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDbGlwYm9hcmREYXRhID0gKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCB0YXJnZXRQb2ludDogUG9pbnQpID0+IHtcbiAgICBsZXQgbmV3RWxlbWVudDogTWluZEVsZW1lbnQsIHBhdGg6IFBhdGg7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGxldCBuZXdFTGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIGNvbnN0IGhhc1RhcmdldFBhcmVudCA9IHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxO1xuICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgY29uc3QgdGFyZ2V0UGFyZW50UGF0aCA9IHRhcmdldFBhcmVudCAmJiBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXRQYXJlbnQpO1xuICAgIGNvbnN0IG5vbkFic3RyYWN0Q2hpbGRyZW5MZW5ndGggPSB0YXJnZXRQYXJlbnQgJiYgZ2V0Tm9uQWJzdHJhY3RDaGlsZHJlbih0YXJnZXRQYXJlbnQpLmxlbmd0aDtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGl0ZW06IFBsYWl0RWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBuZXdFbGVtZW50ID0gY29weU5ld05vZGUoaXRlbSBhcyBNaW5kRWxlbWVudCk7XG5cbiAgICAgICAgaWYgKGhhc1RhcmdldFBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaXNSb290KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudCA9IGFkanVzdFJvb3RUb05vZGUoYm9hcmQsIG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0eWxlcyA9IFBsYWl0TWluZC5pc01pbmQodGFyZ2V0UGFyZW50KSA/IHsgZm9udEZhbWlseTogQlJBTkNIX0ZPTlRfRkFNSUxZIH0gOiB7IGZvbnRGYW1pbHk6IERFRkFVTFRfRk9OVF9GQU1JTFkgfTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFRleHRTaXplKGJvYXJkLCBuZXdFbGVtZW50LmRhdGEudG9waWMsIFRPUElDX0RFRkFVTFRfTUFYX1dPUkRfQ09VTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3R5bGVzLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbmV3RWxlbWVudC5tYW51YWxXaWR0aCA/IG5ld0VsZW1lbnQubWFudWFsV2lkdGggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LndpZHRoID0gTWF0aC5tYXgod2lkdGgsIGdldE5vZGVEZWZhdWx0Rm9udFNpemUoKSk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgYWJzdHJhY3Qgc3RhcnQgYW5kIGVuZFxuICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KG5ld0VsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdGFydCA9IG5ld0VsZW1lbnQuc3RhcnQgKyBub25BYnN0cmFjdENoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuZW5kID0gbmV3RWxlbWVudC5lbmQgKyBub25BYnN0cmFjdENoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aCA9IFsuLi50YXJnZXRQYXJlbnRQYXRoLCBub25BYnN0cmFjdENoaWxkcmVuTGVuZ3RoICsgaW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQ6IFBvaW50ID0gW3RhcmdldFBvaW50WzBdICsgaXRlbS5wb2ludHMhWzBdWzBdLCB0YXJnZXRQb2ludFsxXSArIGl0ZW0ucG9pbnRzIVswXVsxXV07XG4gICAgICAgICAgICBuZXdFbGVtZW50LnBvaW50cyA9IFtwb2ludF07XG5cbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSBhZGp1c3RBYnN0cmFjdFRvTm9kZShuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpdGVtLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSBhZGp1c3ROb2RlVG9Sb290KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF0aCA9IFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdO1xuICAgICAgICB9XG4gICAgICAgIG5ld0VMZW1lbnRzLnB1c2gobmV3RWxlbWVudCk7XG4gICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgICBUcmFuc2Zvcm1zLnNldFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgbmV3RUxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENsaXBib2FyZFRleHQgPSAoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCB0YXJnZXRQYXJlbnQ6IFBsYWl0RWxlbWVudCwgdGV4dDogc3RyaW5nIHwgRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHN0eWxlcyA9IFBsYWl0TWluZC5pc01pbmQodGFyZ2V0UGFyZW50KSA/IHsgZm9udEZhbWlseTogQlJBTkNIX0ZPTlRfRkFNSUxZIH0gOiB7IGZvbnRGYW1pbHk6IERFRkFVTFRfRk9OVF9GQU1JTFkgfTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFRleHRTaXplKGJvYXJkLCB0ZXh0LCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5ULCBzdHlsZXMpO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBjcmVhdGVNaW5kRWxlbWVudCh0ZXh0LCBNYXRoLm1heCh3aWR0aCwgZ2V0Rm9udFNpemVCeVNsYXRlRWxlbWVudCh0ZXh0KSksIGhlaWdodCwge30pO1xuICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgZmluZE5ld0NoaWxkTm9kZVBhdGgoYm9hcmQsIHRhcmdldFBhcmVudCkpO1xuICAgIHJldHVybjtcbn07XG4iXX0=
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsMkJBQTJCLEVBQzNCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFFbkIsVUFBVSxFQUdWLFVBQVUsRUFDYixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQWEsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RixPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLGFBQWEsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN0SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHNCQUFzQixFQUFhLE1BQU0sb0JBQW9CLENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLGdCQUErQixFQUFFLEVB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QUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pGLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDcEYsT0FBTztBQUNYLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ0xJUF9CT0FSRF9GT1JNQVRfS0VZLFxuICAgIENMSVBfQk9BUkRfSU1BR0VfRk9STUFUX0tFWSxcbiAgICBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgUGF0aCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBUcmFuc2Zvcm1zXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEltYWdlSXRlbSwgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY29weU5ld05vZGUsIGV4dHJhY3ROb2Rlc1RleHQgfSBmcm9tICcuL21pbmQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi9wb3NpdGlvbi9ub2RlJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSwgZ2V0Tm9uQWJzdHJhY3RDaGlsZHJlbiB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGdldFJlbGF0aXZlU3RhcnRFbmRCeUFic3RyYWN0UmVmLCBnZXRPdmVyYWxsQWJzdHJhY3RzLCBnZXRWYWxpZEFic3RyYWN0UmVmcyB9IGZyb20gJy4vYWJzdHJhY3QvY29tbW9uJztcbmltcG9ydCB7IGNyZWF0ZU1pbmRFbGVtZW50IH0gZnJvbSAnLi9ub2RlL2NyZWF0ZS1ub2RlJztcbmltcG9ydCB7IGFkanVzdEFic3RyYWN0VG9Ob2RlLCBhZGp1c3ROb2RlVG9Sb290LCBhZGp1c3RSb290VG9Ob2RlIH0gZnJvbSAnLi9ub2RlL2FkanVzdC1ub2RlJztcbmltcG9ydCB7IEVsZW1lbnQsIE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBnZXRUZXh0U2l6ZSwgUGxhaXRNYXJrRWRpdG9yIH0gZnJvbSAnQHBsYWl0L3RleHQnO1xuaW1wb3J0IHsgQlJBTkNIX0ZPTlRfRkFNSUxZLCBERUZBVUxUX0ZPTlRfRkFNSUxZLCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5UIH0gZnJvbSAnLi4vY29uc3RhbnRzL25vZGUtdG9waWMtc3R5bGUnO1xuaW1wb3J0IHsgZmluZE5ld0NoaWxkTm9kZVBhdGggfSBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuLi9wbHVnaW5zL3dpdGgtbWluZC5ib2FyZCc7XG5pbXBvcnQgeyBnZXRGb250U2l6ZUJ5U2xhdGVFbGVtZW50LCBnZXROb2RlRGVmYXVsdEZvbnRTaXplLCBOb2RlU3BhY2UgfSBmcm9tICcuL3NwYWNlL25vZGUtc3BhY2UnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRDbGlwYm9hcmREYXRhID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzOiBNaW5kRWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IHJlc3VsdDogTWluZEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgLy8gZ2V0IG92ZXJhbGwgYWJzdHJhY3RcbiAgICBjb25zdCBvdmVyYWxsQWJzdHJhY3RzID0gZ2V0T3ZlcmFsbEFic3RyYWN0cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cykgYXMgTWluZEVsZW1lbnRbXTtcbiAgICAvLyBnZXQgdmFsaWQgYWJzdHJhY3QgcmVmc1xuICAgIGNvbnN0IHZhbGlkQWJzdHJhY3RSZWZzID0gZ2V0VmFsaWRBYnN0cmFjdFJlZnMoYm9hcmQsIFsuLi5zZWxlY3RlZEVsZW1lbnRzLCAuLi5vdmVyYWxsQWJzdHJhY3RzXSk7XG5cbiAgICAvLyBrZWVwIGNvcnJlY3Qgb3JkZXJcbiAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gIXZhbGlkQWJzdHJhY3RSZWZzLmZpbmQocmVmID0+IHJlZi5hYnN0cmFjdCA9PT0gdmFsdWUpKTtcbiAgICBuZXdTZWxlY3RlZEVsZW1lbnRzLnB1c2goLi4udmFsaWRBYnN0cmFjdFJlZnMubWFwKHZhbHVlID0+IHZhbHVlLmFic3RyYWN0KSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZE1pbmROb2RlcyA9IG5ld1NlbGVjdGVkRWxlbWVudHMubWFwKHZhbHVlID0+IE1pbmRFbGVtZW50LmdldE5vZGUodmFsdWUpKTtcbiAgICBjb25zdCBub2Rlc1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMsIHRydWUpO1xuICAgIG5ld1NlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gaGFuZGxlIHJlbGF0aXZlIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeU5vZGUoc2VsZWN0ZWRNaW5kTm9kZXNbaW5kZXhdKTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW1tub2RlUmVjdGFuZ2xlLnggLSBub2Rlc1JlY3RhbmdsZS54LCBub2RlUmVjdGFuZ2xlLnkgLSBub2Rlc1JlY3RhbmdsZS55XV0gYXMgUG9pbnRbXTtcblxuICAgICAgICAvLyBoYW5kbGUgaW52YWxpZCBhYnN0cmFjdFxuICAgICAgICBjb25zdCBhYnN0cmFjdFJlZiA9IHZhbGlkQWJzdHJhY3RSZWZzLmZpbmQocmVmID0+IHJlZi5hYnN0cmFjdCA9PT0gZWxlbWVudCk7XG4gICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSAmJiBhYnN0cmFjdFJlZikge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRSZWxhdGl2ZVN0YXJ0RW5kQnlBYnN0cmFjdFJlZihhYnN0cmFjdFJlZiwgbmV3U2VsZWN0ZWRFbGVtZW50cyk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0geyAuLi5lbGVtZW50LCBwb2ludHMgfSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RWxlbWVudC5zdGFydDtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RWxlbWVudC5lbmQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBwb2ludHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCBlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHN0cmluZ09iaiA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnRzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ09iaikpO1xuICAgIGNvbnN0IHRleHQgPSBlbGVtZW50cy5yZWR1Y2UoKHN0cmluZywgY3VycmVudE5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0cmluZyArIGV4dHJhY3ROb2Rlc1RleHQoY3VycmVudE5vZGUpO1xuICAgIH0sICcnKTtcbiAgICBkYXRhPy5zZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfRk9STUFUX0tFWX1gLCBlbmNvZGVkKTtcbiAgICBkYXRhPy5zZXREYXRhKGB0ZXh0L3BsYWluYCwgdGV4dCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YUJ5SW1hZ2UgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCwgaW1hZ2U6IEltYWdlSXRlbSkgPT4ge1xuICAgIGNvbnN0IHN0cmluZ09iaiA9IEpTT04uc3RyaW5naWZ5KGltYWdlKTtcbiAgICBjb25zdCBlbmNvZGVkID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ09iaikpO1xuICAgIGRhdGE/LnNldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUF9CT0FSRF9JTUFHRV9GT1JNQVRfS0VZfWAsIGVuY29kZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEltYWdlSXRlbUZyb21DbGlwYm9hcmQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWQgPSBkYXRhPy5nZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfSU1BR0VfRk9STUFUX0tFWX1gKTtcbiAgICBsZXQgaW1hZ2VJdGVtID0gbnVsbDtcbiAgICBpZiAoZW5jb2RlZCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5hdG9iKGVuY29kZWQpKTtcbiAgICAgICAgaW1hZ2VJdGVtID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIGltYWdlSXRlbTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhRnJvbUNsaXBib2FyZCA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgZW5jb2RlZCA9IGRhdGE/LmdldERhdGEoYGFwcGxpY2F0aW9uLyR7Q0xJUF9CT0FSRF9GT1JNQVRfS0VZfWApO1xuICAgIGxldCBub2Rlc0RhdGE6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgaWYgKGVuY29kZWQpIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVVSSUNvbXBvbmVudCh3aW5kb3cuYXRvYihlbmNvZGVkKSk7XG4gICAgICAgIG5vZGVzRGF0YSA9IEpTT04ucGFyc2UoZGVjb2RlZCk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlc0RhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgdGFyZ2V0UG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgbGV0IG5ld0VsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXRoOiBQYXRoO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBsZXQgbmV3RUxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBjb25zdCBoYXNUYXJnZXRQYXJlbnQgPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgIGNvbnN0IHRhcmdldFBhcmVudFBhdGggPSB0YXJnZXRQYXJlbnQgJiYgUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0UGFyZW50KTtcbiAgICBjb25zdCBub25BYnN0cmFjdENoaWxkcmVuTGVuZ3RoID0gdGFyZ2V0UGFyZW50ICYmIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4odGFyZ2V0UGFyZW50KS5sZW5ndGg7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChpdGVtOiBQbGFpdEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbmV3RWxlbWVudCA9IGNvcHlOZXdOb2RlKGl0ZW0gYXMgTWluZEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChoYXNUYXJnZXRQYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSBhZGp1c3RSb290VG9Ob2RlKGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdHlsZXMgPSBQbGFpdE1pbmQuaXNNaW5kKHRhcmdldFBhcmVudCkgPyB7IGZvbnRGYW1pbHk6IEJSQU5DSF9GT05UX0ZBTUlMWSB9IDogeyBmb250RmFtaWx5OiBERUZBVUxUX0ZPTlRfRkFNSUxZIH07XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRUZXh0U2l6ZShib2FyZCwgbmV3RWxlbWVudC5kYXRhLnRvcGljLCBUT1BJQ19ERUZBVUxUX01BWF9XT1JEX0NPVU5ULCB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0eWxlcyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG5ld0VsZW1lbnQubWFudWFsV2lkdGggPyBuZXdFbGVtZW50Lm1hbnVhbFdpZHRoIDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC53aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBnZXROb2RlRGVmYXVsdEZvbnRTaXplKCkpO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaGFuZGxlIGFic3RyYWN0IHN0YXJ0IGFuZCBlbmRcbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChuZXdFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc3RhcnQgPSBuZXdFbGVtZW50LnN0YXJ0ICsgbm9uQWJzdHJhY3RDaGlsZHJlbkxlbmd0aDtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmVuZCA9IG5ld0VsZW1lbnQuZW5kICsgbm9uQWJzdHJhY3RDaGlsZHJlbkxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGggPSBbLi4udGFyZ2V0UGFyZW50UGF0aCwgbm9uQWJzdHJhY3RDaGlsZHJlbkxlbmd0aCArIGluZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50OiBQb2ludCA9IFt0YXJnZXRQb2ludFswXSArIGl0ZW0ucG9pbnRzIVswXVswXSwgdGFyZ2V0UG9pbnRbMV0gKyBpdGVtLnBvaW50cyFbMF1bMV1dO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5wb2ludHMgPSBbcG9pbnRdO1xuXG4gICAgICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50ID0gYWRqdXN0QWJzdHJhY3RUb05vZGUobmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaXRlbS5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50ID0gYWRqdXN0Tm9kZVRvUm9vdChib2FyZCwgbmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhdGggPSBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXTtcbiAgICAgICAgfVxuICAgICAgICBuZXdFTGVtZW50cy5wdXNoKG5ld0VsZW1lbnQpO1xuICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgICAgICByZXR1cm47XG4gICAgfSk7XG4gICAgVHJhbnNmb3Jtcy5zZXRTZWxlY3Rpb25XaXRoVGVtcG9yYXJ5RWxlbWVudHMoYm9hcmQsIG5ld0VMZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDbGlwYm9hcmRUZXh0ID0gKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgdGFyZ2V0UGFyZW50OiBQbGFpdEVsZW1lbnQsIHRleHQ6IHN0cmluZyB8IEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSBQbGFpdE1pbmQuaXNNaW5kKHRhcmdldFBhcmVudCkgPyB7IGZvbnRGYW1pbHk6IEJSQU5DSF9GT05UX0ZBTUlMWSB9IDogeyBmb250RmFtaWx5OiBERUZBVUxUX0ZPTlRfRkFNSUxZIH07XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRUZXh0U2l6ZShib2FyZCwgdGV4dCwgVE9QSUNfREVGQVVMVF9NQVhfV09SRF9DT1VOVCwgc3R5bGVzKTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gY3JlYXRlTWluZEVsZW1lbnQodGV4dCwgTWF0aC5tYXgod2lkdGgsIGdldEZvbnRTaXplQnlTbGF0ZUVsZW1lbnQodGV4dCkpLCBoZWlnaHQsIHt9KTtcbiAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIGZpbmROZXdDaGlsZE5vZGVQYXRoKGJvYXJkLCB0YXJnZXRQYXJlbnQpKTtcbiAgICByZXR1cm47XG59O1xuIl19
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, ChangeDetectionStrategy, NgModule, NgZone, Directive, Input, HostListener } from '@angular/core';
3
3
  import * as i2 from '@plait/core';
4
- import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, BOARD_TO_HOST, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys, PRESS_AND_MOVE_BUFFER, MERGING, ResizeCursorClass } from '@plait/core';
4
+ import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, CLIP_BOARD_IMAGE_FORMAT_KEY, BOARD_TO_HOST, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys, PRESS_AND_MOVE_BUFFER, MERGING, ResizeCursorClass } from '@plait/core';
5
5
  import { MindLayoutType, isIndentedLayout, AbstractNode, isStandardLayout, isHorizontalLogicLayout, isVerticalLogicLayout, getNonAbstractChildren, isLeftLayout, isRightLayout, isTopLayout, isBottomLayout, isHorizontalLayout, getCorrectStartEnd, ConnectingPosition, getAbstractLayout, GlobalLayout } from '@plait/layouts';
6
6
  import { PlaitMarkEditor, MarkTypes, DEFAULT_FONT_SIZE, TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
7
7
  import { fromEvent, Subject } from 'rxjs';
@@ -2942,6 +2942,7 @@ class NodeImageDrawer {
2942
2942
  this.g = createG();
2943
2943
  const foreignRectangle = getImageForeignRectangle(this.board, element);
2944
2944
  this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
2945
+ this.foreignObject.style.padding = `6px`;
2945
2946
  this.g.append(this.foreignObject);
2946
2947
  const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType;
2947
2948
  if (!componentType) {
@@ -3298,14 +3299,14 @@ const withNodeDnd = (board) => {
3298
3299
  }
3299
3300
  }
3300
3301
  if (activeElements.length) {
3301
- // prevent text from being selected
3302
- event.preventDefault();
3303
3302
  correspondingElements = getOverallAbstracts(board, activeElements);
3304
3303
  }
3305
3304
  mousedown(event);
3306
3305
  };
3307
3306
  board.mousemove = (event) => {
3308
3307
  if (!board.options.readonly && (activeElements === null || activeElements === void 0 ? void 0 : activeElements.length) && startPoint) {
3308
+ // prevent text from being selected
3309
+ event.preventDefault();
3309
3310
  const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
3310
3311
  const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
3311
3312
  if (distance < DRAG_MOVE_BUFFER) {
@@ -3475,6 +3476,20 @@ const setClipboardData = (data, elements) => {
3475
3476
  data === null || data === void 0 ? void 0 : data.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
3476
3477
  data === null || data === void 0 ? void 0 : data.setData(`text/plain`, text);
3477
3478
  };
3479
+ const setClipboardDataByImage = (data, image) => {
3480
+ const stringObj = JSON.stringify(image);
3481
+ const encoded = window.btoa(encodeURIComponent(stringObj));
3482
+ data === null || data === void 0 ? void 0 : data.setData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`, encoded);
3483
+ };
3484
+ const getImageItemFromClipboard = (data) => {
3485
+ const encoded = data === null || data === void 0 ? void 0 : data.getData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`);
3486
+ let imageItem = null;
3487
+ if (encoded) {
3488
+ const decoded = decodeURIComponent(window.atob(encoded));
3489
+ imageItem = JSON.parse(decoded);
3490
+ }
3491
+ return imageItem;
3492
+ };
3478
3493
  const getDataFromClipboard = (data) => {
3479
3494
  const encoded = data === null || data === void 0 ? void 0 : data.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
3480
3495
  let nodesData = [];
@@ -3555,8 +3570,6 @@ const withAbstract = (board) => {
3555
3570
  return abstractHandlePosition;
3556
3571
  });
3557
3572
  if (activeAbstractElement) {
3558
- // prevent text from being selected
3559
- event.preventDefault();
3560
3573
  if (newBoard === null || newBoard === void 0 ? void 0 : newBoard.onAbstractResize) {
3561
3574
  newBoard.onAbstractResize(AbstractResizeState.start);
3562
3575
  }
@@ -3571,6 +3584,8 @@ const withAbstract = (board) => {
3571
3584
  const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
3572
3585
  touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);
3573
3586
  if (abstractHandlePosition && activeAbstractElement) {
3587
+ // prevent text from being selected
3588
+ event.preventDefault();
3574
3589
  const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
3575
3590
  const element = abstractComponent.element;
3576
3591
  const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement);
@@ -3928,7 +3943,7 @@ const withNodeHoverDetect = (board) => {
3928
3943
  };
3929
3944
 
3930
3945
  const withNodeImage = (board) => {
3931
- const { keydown, mousedown, globalMouseup, insertFragment } = board;
3946
+ const { keydown, mousedown, globalMouseup, setFragment, insertFragment, deleteFragment } = board;
3932
3947
  board.mousedown = (event) => {
3933
3948
  const selectedImageElement = getSelectedImageElement(board);
3934
3949
  if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
@@ -3977,6 +3992,21 @@ const withNodeImage = (board) => {
3977
3992
  }
3978
3993
  globalMouseup(event);
3979
3994
  };
3995
+ board.setFragment = (data) => {
3996
+ const selectedImageElement = getSelectedImageElement(board);
3997
+ if (selectedImageElement) {
3998
+ setClipboardDataByImage(data, selectedImageElement.data.image);
3999
+ return;
4000
+ }
4001
+ setFragment(data);
4002
+ };
4003
+ board.deleteFragment = (data) => {
4004
+ const selectedImageElement = getSelectedImageElement(board);
4005
+ if (selectedImageElement) {
4006
+ MindTransforms.removeImage(board, selectedImageElement);
4007
+ }
4008
+ deleteFragment(data);
4009
+ };
3980
4010
  board.insertFragment = (data, targetPoint) => {
3981
4011
  const selectedElements = getSelectedElements(board);
3982
4012
  const isSelectedImage = !!getSelectedImageElement(board);
@@ -3990,6 +4020,11 @@ const withNodeImage = (board) => {
3990
4020
  return;
3991
4021
  }
3992
4022
  }
4023
+ const imageItem = getImageItemFromClipboard(data);
4024
+ if (imageItem && (isSingleSelection || isSelectedImage)) {
4025
+ const selectedElement = (selectedElements[0] || getSelectedImageElement(board));
4026
+ MindTransforms.setImage(board, selectedElement, imageItem);
4027
+ }
3993
4028
  insertFragment(data, targetPoint);
3994
4029
  };
3995
4030
  return board;
@@ -4003,8 +4038,6 @@ const withNodeResize = (board) => {
4003
4038
  board.mousedown = (event) => {
4004
4039
  if (targetElement) {
4005
4040
  startPoint = [event.x, event.y];
4006
- // prevent text from being selected
4007
- event.preventDefault();
4008
4041
  return;
4009
4042
  }
4010
4043
  mousedown(event);
@@ -4015,6 +4048,8 @@ const withNodeResize = (board) => {
4015
4048
  return;
4016
4049
  }
4017
4050
  if (startPoint && targetElement && !isMindNodeResizing(board)) {
4051
+ // prevent text from being selected
4052
+ event.preventDefault();
4018
4053
  const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
4019
4054
  const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
4020
4055
  if (distance > PRESS_AND_MOVE_BUFFER) {
@@ -4029,6 +4064,8 @@ const withNodeResize = (board) => {
4029
4064
  }
4030
4065
  }
4031
4066
  if (isMindNodeResizing(board) && startPoint && targetElementRef) {
4067
+ // prevent text from being selected
4068
+ event.preventDefault();
4032
4069
  throttleRAF(() => {
4033
4070
  if (!startPoint) {
4034
4071
  return;
@@ -4210,12 +4247,14 @@ const withMind = (baseBoard) => {
4210
4247
  };
4211
4248
  board.deleteFragment = (data) => {
4212
4249
  const selectedElements = getSelectedElements(board);
4213
- const deletableElements = getFirstLevelElement(selectedElements).reverse();
4214
- const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
4215
- MindTransforms.setAbstractsByRefs(board, abstractRefs);
4216
- const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
4217
- MindTransforms.setRightNodeCountByRefs(board, refs);
4218
- MindTransforms.removeElements(board, selectedElements);
4250
+ if (selectedElements.length) {
4251
+ const deletableElements = getFirstLevelElement(selectedElements).reverse();
4252
+ const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
4253
+ MindTransforms.setAbstractsByRefs(board, abstractRefs);
4254
+ const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
4255
+ MindTransforms.setRightNodeCountByRefs(board, refs);
4256
+ MindTransforms.removeElements(board, selectedElements);
4257
+ }
4219
4258
  deleteFragment(data);
4220
4259
  };
4221
4260
  return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));