@plait/mind 0.27.0-next.0 → 0.27.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/base/emoji-base.component.d.ts +2 -2
  2. package/base/index.d.ts +0 -1
  3. package/constants/default.d.ts +1 -0
  4. package/constants/node-topic-style.d.ts +4 -0
  5. package/drawer/{node-active.drawer.d.ts → node-active.generator.d.ts} +2 -2
  6. package/drawer/node-shape.generator.d.ts +10 -0
  7. package/esm2022/base/emoji-base.component.mjs +46 -0
  8. package/{esm2020 → esm2022}/base/index.mjs +1 -2
  9. package/{esm2020 → esm2022}/constants/abstract-node.mjs +1 -1
  10. package/{esm2020 → esm2022}/constants/default.mjs +2 -1
  11. package/{esm2020 → esm2022}/constants/index.mjs +1 -1
  12. package/esm2022/constants/node-topic-style.mjs +12 -0
  13. package/esm2022/drawer/node-active.generator.mjs +42 -0
  14. package/esm2022/drawer/node-shape.generator.mjs +19 -0
  15. package/esm2022/interfaces/element-data.mjs +2 -0
  16. package/esm2022/interfaces/element.mjs +118 -0
  17. package/{esm2020 → esm2022}/interfaces/index.mjs +2 -1
  18. package/esm2022/interfaces/options.mjs +2 -0
  19. package/{esm2020 → esm2022}/interfaces/theme-color.mjs +1 -1
  20. package/esm2022/mind-node.component.mjs +235 -0
  21. package/esm2022/mind.component.mjs +52 -0
  22. package/esm2022/plugins/with-abstract-resize.mjs +112 -0
  23. package/esm2022/plugins/with-mind-create.mjs +112 -0
  24. package/esm2022/plugins/with-mind-fragment.mjs +90 -0
  25. package/esm2022/plugins/with-mind-hotkey.mjs +67 -0
  26. package/esm2022/plugins/with-mind.mjs +91 -0
  27. package/esm2022/plugins/with-node-dnd.mjs +180 -0
  28. package/esm2022/plugins/with-node-image-resize.mjs +48 -0
  29. package/esm2022/plugins/with-node-image.mjs +98 -0
  30. package/esm2022/plugins/with-node-resize.mjs +133 -0
  31. package/{esm2020 → esm2022}/public-api.mjs +2 -3
  32. package/{esm2020 → esm2022}/transforms/image.mjs +1 -1
  33. package/esm2022/transforms/index.mjs +23 -0
  34. package/esm2022/transforms/node.mjs +66 -0
  35. package/{esm2020 → esm2022}/utils/abstract/common.mjs +2 -2
  36. package/{esm2020 → esm2022}/utils/abstract/resize.mjs +3 -3
  37. package/{esm2020 → esm2022}/utils/clipboard.mjs +3 -3
  38. package/{esm2020 → esm2022}/utils/dnd/common.mjs +1 -1
  39. package/esm2022/utils/draw/abstract-outline.mjs +117 -0
  40. package/esm2022/utils/draw/node-dnd.mjs +159 -0
  41. package/{esm2020 → esm2022}/utils/draw/node-shape.mjs +4 -3
  42. package/esm2022/utils/index.mjs +15 -0
  43. package/{esm2020 → esm2022}/utils/node/common.mjs +1 -1
  44. package/esm2022/utils/node/create-node.mjs +55 -0
  45. package/esm2022/utils/node/dynamic-width.mjs +19 -0
  46. package/esm2022/utils/node/image.mjs +23 -0
  47. package/esm2022/utils/position/image.mjs +36 -0
  48. package/esm2022/utils/position/node.mjs +36 -0
  49. package/esm2022/utils/position/topic.mjs +16 -0
  50. package/{esm2020 → esm2022}/utils/space/index.mjs +1 -1
  51. package/esm2022/utils/space/layout-options.mjs +69 -0
  52. package/esm2022/utils/space/node-space.mjs +137 -0
  53. package/{fesm2020 → fesm2022}/plait-mind.mjs +1383 -1569
  54. package/fesm2022/plait-mind.mjs.map +1 -0
  55. package/interfaces/element-data.d.ts +5 -9
  56. package/interfaces/element.d.ts +1 -0
  57. package/interfaces/index.d.ts +1 -0
  58. package/interfaces/options.d.ts +2 -4
  59. package/{node.component.d.ts → mind-node.component.d.ts} +11 -10
  60. package/mind.component.d.ts +2 -2
  61. package/package.json +7 -13
  62. package/plugins/with-mind-fragment.d.ts +5 -0
  63. package/plugins/with-mind-hotkey.d.ts +0 -6
  64. package/public-api.d.ts +1 -2
  65. package/styles/styles.scss +7 -3
  66. package/transforms/image.d.ts +3 -2
  67. package/transforms/index.d.ts +1 -2
  68. package/transforms/node.d.ts +0 -1
  69. package/utils/abstract/common.d.ts +2 -2
  70. package/utils/index.d.ts +0 -1
  71. package/utils/node/create-node.d.ts +2 -2
  72. package/utils/node/image.d.ts +0 -2
  73. package/utils/position/image.d.ts +1 -1
  74. package/utils/position/node.d.ts +1 -1
  75. package/utils/space/layout-options.d.ts +2 -2
  76. package/utils/space/node-space.d.ts +1 -5
  77. package/base/image-base.component.d.ts +0 -27
  78. package/constants/image.d.ts +0 -3
  79. package/drawer/node-image.drawer.d.ts +0 -15
  80. package/esm2020/base/emoji-base.component.mjs +0 -46
  81. package/esm2020/base/image-base.component.mjs +0 -67
  82. package/esm2020/constants/image.mjs +0 -4
  83. package/esm2020/constants/node-topic-style.mjs +0 -8
  84. package/esm2020/drawer/node-active.drawer.mjs +0 -44
  85. package/esm2020/drawer/node-image.drawer.mjs +0 -59
  86. package/esm2020/interfaces/element-data.mjs +0 -2
  87. package/esm2020/interfaces/element.mjs +0 -111
  88. package/esm2020/interfaces/options.mjs +0 -2
  89. package/esm2020/mind.component.mjs +0 -51
  90. package/esm2020/mind.module.mjs +0 -21
  91. package/esm2020/node.component.mjs +0 -248
  92. package/esm2020/plugins/with-abstract-resize.mjs +0 -112
  93. package/esm2020/plugins/with-mind-create.mjs +0 -109
  94. package/esm2020/plugins/with-mind-hotkey.mjs +0 -122
  95. package/esm2020/plugins/with-mind.mjs +0 -114
  96. package/esm2020/plugins/with-node-dnd.mjs +0 -180
  97. package/esm2020/plugins/with-node-image-resize.mjs +0 -48
  98. package/esm2020/plugins/with-node-image.mjs +0 -96
  99. package/esm2020/plugins/with-node-resize.mjs +0 -133
  100. package/esm2020/transforms/index.mjs +0 -24
  101. package/esm2020/transforms/node.mjs +0 -82
  102. package/esm2020/utils/draw/abstract-outline.mjs +0 -117
  103. package/esm2020/utils/draw/node-dnd.mjs +0 -159
  104. package/esm2020/utils/index.mjs +0 -16
  105. package/esm2020/utils/is-virtual-key.mjs +0 -13
  106. package/esm2020/utils/node/create-node.mjs +0 -52
  107. package/esm2020/utils/node/dynamic-width.mjs +0 -22
  108. package/esm2020/utils/node/image.mjs +0 -63
  109. package/esm2020/utils/position/image.mjs +0 -36
  110. package/esm2020/utils/position/node.mjs +0 -34
  111. package/esm2020/utils/position/topic.mjs +0 -17
  112. package/esm2020/utils/space/layout-options.mjs +0 -72
  113. package/esm2020/utils/space/node-space.mjs +0 -142
  114. package/fesm2015/plait-mind.mjs +0 -4402
  115. package/fesm2015/plait-mind.mjs.map +0 -1
  116. package/fesm2020/plait-mind.mjs.map +0 -1
  117. package/mind.module.d.ts +0 -11
  118. package/utils/is-virtual-key.d.ts +0 -1
  119. /package/{esm2020 → esm2022}/base/base.drawer.mjs +0 -0
  120. /package/{esm2020 → esm2022}/constants/node-style.mjs +0 -0
  121. /package/{esm2020 → esm2022}/constants/theme.mjs +0 -0
  122. /package/{esm2020 → esm2022}/drawer/node-collapse.drawer.mjs +0 -0
  123. /package/{esm2020 → esm2022}/drawer/node-emojis.drawer.mjs +0 -0
  124. /package/{esm2020 → esm2022}/drawer/node-insert.drawer.mjs +0 -0
  125. /package/{esm2020 → esm2022}/interfaces/layout.mjs +0 -0
  126. /package/{esm2020 → esm2022}/interfaces/node.mjs +0 -0
  127. /package/{esm2020 → esm2022}/interfaces/pointer.mjs +0 -0
  128. /package/{esm2020 → esm2022}/interfaces/types.mjs +0 -0
  129. /package/{esm2020 → esm2022}/plait-mind.mjs +0 -0
  130. /package/{esm2020 → esm2022}/plugins/with-abstract-resize.board.mjs +0 -0
  131. /package/{esm2020 → esm2022}/plugins/with-mind-extend.mjs +0 -0
  132. /package/{esm2020 → esm2022}/plugins/with-mind.board.mjs +0 -0
  133. /package/{esm2020 → esm2022}/plugins/with-node-hover-detect.mjs +0 -0
  134. /package/{esm2020 → esm2022}/queries/get-available-sublayouts-by-element.mjs +0 -0
  135. /package/{esm2020 → esm2022}/queries/get-branch-layouts.mjs +0 -0
  136. /package/{esm2020 → esm2022}/queries/get-correct-layout-by-element.mjs +0 -0
  137. /package/{esm2020 → esm2022}/queries/get-layout-by-element.mjs +0 -0
  138. /package/{esm2020 → esm2022}/queries/index.mjs +0 -0
  139. /package/{esm2020 → esm2022}/transforms/abstract-node.mjs +0 -0
  140. /package/{esm2020 → esm2022}/transforms/emoji.mjs +0 -0
  141. /package/{esm2020 → esm2022}/transforms/layout.mjs +0 -0
  142. /package/{esm2020 → esm2022}/utils/dnd/detector.mjs +0 -0
  143. /package/{esm2020 → esm2022}/utils/draw/node-link/abstract-link.mjs +0 -0
  144. /package/{esm2020 → esm2022}/utils/draw/node-link/draw-link.mjs +0 -0
  145. /package/{esm2020 → esm2022}/utils/draw/node-link/indented-link.mjs +0 -0
  146. /package/{esm2020 → esm2022}/utils/draw/node-link/logic-link.mjs +0 -0
  147. /package/{esm2020 → esm2022}/utils/layout.mjs +0 -0
  148. /package/{esm2020 → esm2022}/utils/mind.mjs +0 -0
  149. /package/{esm2020 → esm2022}/utils/node/adjust-node.mjs +0 -0
  150. /package/{esm2020 → esm2022}/utils/node/index.mjs +0 -0
  151. /package/{esm2020 → esm2022}/utils/node/right-node-count.mjs +0 -0
  152. /package/{esm2020 → esm2022}/utils/node-hover/extend.mjs +0 -0
  153. /package/{esm2020 → esm2022}/utils/node-style/branch.mjs +0 -0
  154. /package/{esm2020 → esm2022}/utils/node-style/common.mjs +0 -0
  155. /package/{esm2020 → esm2022}/utils/node-style/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/utils/node-style/shape.mjs +0 -0
  157. /package/{esm2020 → esm2022}/utils/path.mjs +0 -0
  158. /package/{esm2020 → esm2022}/utils/point-placement.mjs +0 -0
  159. /package/{esm2020 → esm2022}/utils/position/emoji.mjs +0 -0
  160. /package/{esm2020 → esm2022}/utils/position/index.mjs +0 -0
  161. /package/{esm2020 → esm2022}/utils/space/emoji.mjs +0 -0
  162. /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
@@ -1,63 +0,0 @@
1
- import { PlaitBoard, PlaitElement, PlaitContextService } from '@plait/core';
2
- import { MindTransforms } from '../../transforms';
3
- import { DEFAULT_IMAGE_WIDTH } from '../../constants/image';
4
- const BOARD_TO_SELECTED_IMAGE_ELEMENT = new WeakMap();
5
- export const getSelectedImageElement = (board) => {
6
- return BOARD_TO_SELECTED_IMAGE_ELEMENT.get(board);
7
- };
8
- export const addSelectedImageElement = (board, element) => {
9
- BOARD_TO_SELECTED_IMAGE_ELEMENT.set(board, element);
10
- };
11
- export const removeSelectedImageElement = (board) => {
12
- BOARD_TO_SELECTED_IMAGE_ELEMENT.delete(board);
13
- };
14
- export const setImageFocus = (board, element, isFocus) => {
15
- if (isFocus) {
16
- addSelectedImageElement(board, element);
17
- }
18
- else {
19
- removeSelectedImageElement(board);
20
- }
21
- const elementComponent = PlaitElement.getComponent(element);
22
- elementComponent.imageDrawer.componentRef.instance.isFocus = isFocus;
23
- elementComponent.imageDrawer.componentRef.instance.cdr.markForCheck();
24
- };
25
- export const selectImage = (board, element, acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp']) => {
26
- const inputFile = document.createElement('input');
27
- inputFile.setAttribute('type', 'file');
28
- const acceptImageTypesString = '.' + acceptImageTypes.join(',.');
29
- inputFile.setAttribute('accept', acceptImageTypesString);
30
- inputFile.onchange = (event) => {
31
- buildImage(board, element, event.target.files[0]);
32
- };
33
- inputFile.click();
34
- };
35
- export const buildImage = async (board, element, imageFile) => {
36
- let width = 0, height = 0;
37
- await getImageSize(imageFile).then((value) => {
38
- width = value.width;
39
- height = value.height;
40
- });
41
- let imageItem = null;
42
- const url = URL.createObjectURL(imageFile);
43
- const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);
44
- context.setUploadingFile({ url, file: imageFile });
45
- imageItem = {
46
- url,
47
- width,
48
- height
49
- };
50
- MindTransforms.setImage(board, element, imageItem);
51
- };
52
- function getImageSize(file, defaultImageWidth = DEFAULT_IMAGE_WIDTH) {
53
- return new Promise((resolve, reject) => {
54
- const image = new Image();
55
- image.src = URL.createObjectURL(file);
56
- image.onload = function () {
57
- const width = defaultImageWidth;
58
- const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;
59
- resolve(image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight });
60
- };
61
- });
62
- }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ub2RlL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxNQUFNLCtCQUErQixHQUFHLElBQUksT0FBTyxFQUFzQyxDQUFDO0FBRTFGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3pELE9BQU8sK0JBQStCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUErQixFQUFFLEVBQUU7SUFDMUYsK0JBQStCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM1RCwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUErQixFQUFFLE9BQWdCLEVBQUUsRUFBRTtJQUNsRyxJQUFJLE9BQU8sRUFBRTtRQUNULHVCQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMzQztTQUFNO1FBQ0gsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDckM7SUFFRCxNQUFNLGdCQUFnQixHQUFH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aUJBQWlCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQzFILENBQUM7UUFDTixDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBsYWl0Q29udGV4dFNlcnZpY2UgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kTm9kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL25vZGUuY29tcG9uZW50JztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEltYWdlRGF0YSwgSW1hZ2VJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50LWRhdGEnO1xuaW1wb3J0IHsgTWluZFRyYW5zZm9ybXMgfSBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IERFRkFVTFRfSU1BR0VfV0lEVEggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvaW1hZ2UnO1xuXG5jb25zdCBCT0FSRF9UT19TRUxFQ1RFRF9JTUFHRV9FTEVNRU5UID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgTWluZEVsZW1lbnQ8SW1hZ2VEYXRhPj4oKTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkSW1hZ2VFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX1NFTEVDVEVEX0lNQUdFX0VMRU1FTlQuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTZWxlY3RlZEltYWdlRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQ8SW1hZ2VEYXRhPikgPT4ge1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0lNQUdFX0VMRU1FTlQuc2V0KGJvYXJkLCBlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3RlZEltYWdlRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIEJPQVJEX1RPX1NFTEVDVEVEX0lNQUdFX0VMRU1FTlQuZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJbWFnZUZvY3VzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudDxJbWFnZURhdGE+LCBpc0ZvY3VzOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGlzRm9jdXMpIHtcbiAgICAgICAgYWRkU2VsZWN0ZWRJbWFnZUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZVNlbGVjdGVkSW1hZ2VFbGVtZW50KGJvYXJkKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50Q29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBlbGVtZW50Q29tcG9uZW50LmltYWdlRHJhd2VyLmNvbXBvbmVudFJlZiEuaW5zdGFuY2UuaXNGb2N1cyA9IGlzRm9jdXM7XG4gICAgZWxlbWVudENvbXBvbmVudC5pbWFnZURyYXdlci5jb21wb25lbnRSZWYhLmluc3RhbmNlLmNkci5tYXJrRm9yQ2hlY2soKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RJbWFnZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIGFjY2VwdEltYWdlVHlwZXM6IHN0cmluZ1tdID0gWydwbmcnLCAnanBlZycsICdnaWYnLCAnYm1wJ10pID0+IHtcbiAgICBjb25zdCBpbnB1dEZpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGlucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAnZmlsZScpO1xuICAgIGNvbnN0IGFjY2VwdEltYWdlVHlwZXNTdHJpbmcgPSAnLicgKyBhY2NlcHRJbWFnZVR5cGVzLmpvaW4oJywuJyk7XG4gICAgaW5wdXRGaWxlLnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgYWNjZXB0SW1hZ2VUeXBlc1N0cmluZyk7XG4gICAgaW5wdXRGaWxlLm9uY2hhbmdlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICBidWlsZEltYWdlKGJvYXJkLCBlbGVtZW50LCAoZXZlbnQudGFyZ2V0IGFzIGFueSkuZmlsZXNbMF0pO1xuICAgIH07XG4gICAgaW5wdXRGaWxlLmNsaWNrKCk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRJbWFnZSA9IGFzeW5jIChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIGltYWdlRmlsZTogRmlsZSkgPT4ge1xuICAgIGxldCB3aWR0aCA9IDAsXG4gICAgICAgIGhlaWdodCA9IDA7XG4gICAgYXdhaXQgZ2V0SW1hZ2VTaXplKGltYWdlRmlsZSkudGhlbigodmFsdWU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB3aWR0aCA9IHZhbHVlLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB2YWx1ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VJdGVtOiBJbWFnZUl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlRmlsZSk7XG4gICAgY29uc3QgY29udGV4dCA9IFBsYWl0Qm9hcmQuZ2V0Q29tcG9uZW50KGJvYXJkKS52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yLmdldChQbGFpdENvbnRleHRTZXJ2aWNlKTtcbiAgICBjb250ZXh0LnNldFVwbG9hZGluZ0ZpbGUoeyB1cmwsIGZpbGU6IGltYWdlRmlsZSB9KTtcblxuICAgIGltYWdlSXRlbSA9IHtcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcblxuICAgIE1pbmRUcmFuc2Zvcm1zLnNldEltYWdlKGJvYXJkLCBlbGVtZW50LCBpbWFnZUl0ZW0pO1xufTtcblxuZnVuY3Rpb24gZ2V0SW1hZ2VTaXplKGZpbGU6IEZpbGUsIGRlZmF1bHRJbWFnZVdpZHRoOiBudW1iZXIgPSBERUZBVUxUX0lNQUdFX1dJRFRIKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWFnZS5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkZWZhdWx0SW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IChkZWZhdWx0SW1hZ2VXaWR0aCAqIGltYWdlLm5hdHVyYWxIZWlnaHQpIC8gaW1hZ2UubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpbWFnZS5uYXR1cmFsV2lkdGggPiBkZWZhdWx0SW1hZ2VXaWR0aCA/IHsgd2lkdGgsIGhlaWdodCB9IDogeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbiJdfQ==
@@ -1,36 +0,0 @@
1
- import { RectangleClient } from '@plait/core';
2
- import { MindElement } from '../../interfaces/element';
3
- import { getRectangleByNode } from './node';
4
- import { NodeSpace } from '../space/node-space';
5
- import { RESIZE_HANDLE_DIAMETER, getRectangleResizeTargets } from '@plait/common';
6
- export function getImageForeignRectangle(board, element) {
7
- let { x, y } = getRectangleByNode(MindElement.getNode(element));
8
- const elementWidth = element.manualWidth || element.width;
9
- x =
10
- elementWidth > element.data.image.width
11
- ? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2
12
- : x + NodeSpace.getTextLeftSpace(board, element);
13
- y = NodeSpace.getImageTopSpace(board, element) + y;
14
- const { width, height } = element.data.image;
15
- const rectangle = {
16
- x,
17
- y,
18
- width,
19
- height
20
- };
21
- return rectangle;
22
- }
23
- export const isHitImage = (board, element, range) => {
24
- const imageRectangle = getImageForeignRectangle(board, element);
25
- const imageOutlineRectangle = RectangleClient.getOutlineRectangle(imageRectangle, -RESIZE_HANDLE_DIAMETER / 2);
26
- return RectangleClient.isHit(RectangleClient.toRectangleClient([range.anchor, range.focus]), imageOutlineRectangle);
27
- };
28
- export const getHitImageResizeHandleDirection = (board, element, point) => {
29
- const imageRectangle = getImageForeignRectangle(board, element);
30
- const resizeTargets = getRectangleResizeTargets(imageRectangle, RESIZE_HANDLE_DIAMETER);
31
- const result = resizeTargets.find(resizeTarget => {
32
- return RectangleClient.isHit(RectangleClient.toRectangleClient([point, point]), resizeTarget.rectangle);
33
- });
34
- return result;
35
- };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9wb3NpdGlvbi9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQXFCLEVBQUUsT0FBK0I7SUFDM0YsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBRTFELENBQUM7UUFDRyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUNuQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNoRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFNLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUc7UUFDZCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQStCLEVBQUUsS0FBWSxFQUFFLEVBQUU7SUFDM0YsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsS0FBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRixNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3hILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUErQixFQUFFLEtBQVksRUFBRSxFQUFFO0lBQ2pILE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLEtBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEYsTUFBTSxhQUFhLEdBQUcseUJBQXlCLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDeEYsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUM3QyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVHLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJhbmdlLCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBJbWFnZURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnQtZGF0YSc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHsgTm9kZVNwYWNlIH0gZnJvbSAnLi4vc3BhY2Uvbm9kZS1zcGFjZSc7XG5pbXBvcnQgeyBQbGFpdE1pbmRCb2FyZCB9IGZyb20gJy4uLy4uL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcbmltcG9ydCB7IFJFU0laRV9IQU5ETEVfRElBTUVURVIsIGdldFJlY3RhbmdsZVJlc2l6ZVRhcmdldHMgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlRm9yZWlnblJlY3RhbmdsZShib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50PEltYWdlRGF0YT4pOiBSZWN0YW5nbGVDbGllbnQge1xuICAgIGxldCB7IHgsIHkgfSA9IGdldFJlY3RhbmdsZUJ5Tm9kZShNaW5kRWxlbWVudC5nZXROb2RlKGVsZW1lbnQpKTtcbiAgICBjb25zdCBlbGVtZW50V2lkdGggPSBlbGVtZW50Lm1hbnVhbFdpZHRoIHx8IGVsZW1lbnQud2lkdGg7XG5cbiAgICB4ID1cbiAgICAgICAgZWxlbWVudFdpZHRoID4gZWxlbWVudC5kYXRhLmltYWdlLndpZHRoXG4gICAgICAgICAgICA/IHggKyBOb2RlU3BhY2UuZ2V0VGV4dExlZnRTcGFjZShib2FyZCwgZWxlbWVudCkgKyAoZWxlbWVudFdpZHRoIC0gZWxlbWVudC5kYXRhLmltYWdlLndpZHRoKSAvIDJcbiAgICAgICAgICAgIDogeCArIE5vZGVTcGFjZS5nZXRUZXh0TGVmdFNwYWNlKGJvYXJkLCBlbGVtZW50KTtcbiAgICB5ID0gTm9kZVNwYWNlLmdldEltYWdlVG9wU3BhY2UoYm9hcmQsIGVsZW1lbnQpICsgeTtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZGF0YS5pbWFnZSE7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0ge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgICByZXR1cm4gcmVjdGFuZ2xlO1xufVxuXG5leHBvcnQgY29uc3QgaXNIaXRJbWFnZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQ8SW1hZ2VEYXRhPiwgcmFuZ2U6IFJhbmdlKSA9PiB7XG4gICAgY29uc3QgaW1hZ2VSZWN0YW5nbGUgPSBnZXRJbWFnZUZvcmVpZ25SZWN0YW5nbGUoYm9hcmQgYXMgUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGltYWdlT3V0bGluZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKGltYWdlUmVjdGFuZ2xlLCAtUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiAvIDIpO1xuICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQoUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtyYW5nZS5hbmNob3IsIHJhbmdlLmZvY3VzXSksIGltYWdlT3V0bGluZVJlY3RhbmdsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0SW1hZ2VSZXNpemVIYW5kbGVEaXJlY3Rpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50PEltYWdlRGF0YT4sIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IGltYWdlUmVjdGFuZ2xlID0gZ2V0SW1hZ2VGb3JlaWduUmVjdGFuZ2xlKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCByZXNpemVUYXJnZXRzID0gZ2V0UmVjdGFuZ2xlUmVzaXplVGFyZ2V0cyhpbWFnZVJlY3RhbmdsZSwgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUik7XG4gICAgY29uc3QgcmVzdWx0ID0gcmVzaXplVGFyZ2V0cy5maW5kKHJlc2l6ZVRhcmdldCA9PiB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQoUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKSwgcmVzaXplVGFyZ2V0LnJlY3RhbmdsZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG4iXX0=
@@ -1,34 +0,0 @@
1
- import { distanceBetweenPointAndRectangle } from '@plait/core';
2
- import { MindElement } from '../../interfaces/element';
3
- import { NodeSpace } from '../space/node-space';
4
- export function getRectangleByNode(node) {
5
- const x = node.x + node.hGap;
6
- let y = node.y + node.vGap;
7
- const width = node.width - node.hGap * 2;
8
- const height = node.height - node.vGap * 2;
9
- return {
10
- x,
11
- y,
12
- width,
13
- height
14
- };
15
- }
16
- export function getRectangleByElement(board, originPoint, element) {
17
- const nodeRectangle = {
18
- x: originPoint[0],
19
- y: originPoint[1],
20
- width: NodeSpace.getNodeWidth(board, element),
21
- height: NodeSpace.getNodeHeight(board, element)
22
- };
23
- return nodeRectangle;
24
- }
25
- export function isHitMindElement(board, point, element) {
26
- const node = MindElement.getNode(element);
27
- if (node && distanceBetweenPointAndRectangle(point[0], point[1], getRectangleByNode(node)) === 0) {
28
- return true;
29
- }
30
- else {
31
- return false;
32
- }
33
- }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3Bvc2l0aW9uL25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQyxnQ0FBZ0MsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR2hELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFjO0lBQzdDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE9BQU87UUFDSCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBQUMsS0FBcUIsRUFBRSxXQUFrQixFQUFFLE9BQW9CO0lBQ2pHLE1BQU0sYUFBYSxHQUFHO1FBQ2xCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFDN0MsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztLQUNsRCxDQUFDO0lBQ0YsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLEtBQVksRUFBRSxPQUFvQjtJQUNsRixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLElBQUksSUFBSSxJQUFJLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDOUYsT0FBTyxJQUFJLENBQUM7S0FDZjtTQUFNO1FBQ0gsT0FBTyxLQUFLLENBQUM7S0FDaEI7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kTm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBOb2RlU3BhY2UgfSBmcm9tICcuLi9zcGFjZS9ub2RlLXNwYWNlJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5vZGU6IE1pbmROb2RlKTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBjb25zdCB4ID0gbm9kZS54ICsgbm9kZS5oR2FwO1xuICAgIGxldCB5ID0gbm9kZS55ICsgbm9kZS52R2FwO1xuICAgIGNvbnN0IHdpZHRoID0gbm9kZS53aWR0aCAtIG5vZGUuaEdhcCAqIDI7XG4gICAgY29uc3QgaGVpZ2h0ID0gbm9kZS5oZWlnaHQgLSBub2RlLnZHYXAgKiAyO1xuICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50KGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgb3JpZ2luUG9pbnQ6IFBvaW50LCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSB7XG4gICAgICAgIHg6IG9yaWdpblBvaW50WzBdLFxuICAgICAgICB5OiBvcmlnaW5Qb2ludFsxXSxcbiAgICAgICAgd2lkdGg6IE5vZGVTcGFjZS5nZXROb2RlV2lkdGgoYm9hcmQsIGVsZW1lbnQpLFxuICAgICAgICBoZWlnaHQ6IE5vZGVTcGFjZS5nZXROb2RlSGVpZ2h0KGJvYXJkLCBlbGVtZW50KVxuICAgIH07XG4gICAgcmV0dXJuIG5vZGVSZWN0YW5nbGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hpdE1pbmRFbGVtZW50KGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgY29uc3Qgbm9kZSA9IE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCk7XG4gICAgaWYgKG5vZGUgJiYgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRSZWN0YW5nbGUocG9pbnRbMF0sIHBvaW50WzFdLCBnZXRSZWN0YW5nbGVCeU5vZGUobm9kZSkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=
@@ -1,17 +0,0 @@
1
- import { NodeSpace } from '../space/node-space';
2
- import { getRectangleByNode } from './node';
3
- export function getTopicRectangleByNode(board, node) {
4
- let nodeRectangle = getRectangleByNode(node);
5
- const result = getTopicRectangleByElement(board, nodeRectangle, node.origin);
6
- // add buffer width to avoid unexpected text breaks in different scene
7
- result.width = result.width + 4;
8
- return result;
9
- }
10
- export function getTopicRectangleByElement(board, nodeRectangle, element) {
11
- const x = nodeRectangle.x + NodeSpace.getTextLeftSpace(board, element);
12
- const y = nodeRectangle.y + NodeSpace.getTextTopSpace(board, element);
13
- const width = NodeSpace.getNodeDynamicWidth(board, element);
14
- const height = Math.ceil(element.height);
15
- return { height, width, x, y };
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9waWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9wb3NpdGlvbi90b3BpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRzVDLE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxLQUFxQixFQUFFLElBQWM7SUFDekUsSUFBSSxhQUFhLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0MsTUFBTSxNQUFNLEdBQUcsMEJBQTBCLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0Usc0VBQXNFO0lBQ3RFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDaEMsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxLQUFxQixFQUFFLGFBQThCLEVBQUUsT0FBb0I7SUFDbEgsTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmROb2RlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi4vLi4vcGx1Z2lucy93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgTm9kZVNwYWNlIH0gZnJvbSAnLi4vc3BhY2Uvbm9kZS1zcGFjZSc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeU5vZGUgfSBmcm9tICcuL25vZGUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9waWNSZWN0YW5nbGVCeU5vZGUoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBub2RlOiBNaW5kTm9kZSkge1xuICAgIGxldCBub2RlUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlOb2RlKG5vZGUpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldFRvcGljUmVjdGFuZ2xlQnlFbGVtZW50KGJvYXJkLCBub2RlUmVjdGFuZ2xlLCBub2RlLm9yaWdpbik7XG4gICAgLy8gYWRkIGJ1ZmZlciB3aWR0aCB0byBhdm9pZCB1bmV4cGVjdGVkIHRleHQgYnJlYWtzIGluIGRpZmZlcmVudCBzY2VuZVxuICAgIHJlc3VsdC53aWR0aCA9IHJlc3VsdC53aWR0aCArIDQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvcGljUmVjdGFuZ2xlQnlFbGVtZW50KGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgbm9kZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgIGNvbnN0IHggPSBub2RlUmVjdGFuZ2xlLnggKyBOb2RlU3BhY2UuZ2V0VGV4dExlZnRTcGFjZShib2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgeSA9IG5vZGVSZWN0YW5nbGUueSArIE5vZGVTcGFjZS5nZXRUZXh0VG9wU3BhY2UoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IHdpZHRoID0gTm9kZVNwYWNlLmdldE5vZGVEeW5hbWljV2lkdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGguY2VpbChlbGVtZW50LmhlaWdodCk7XG4gICAgcmV0dXJuIHsgaGVpZ2h0LCB3aWR0aCwgeCwgeSB9O1xufVxuIl19
@@ -1,72 +0,0 @@
1
- import { ConnectingPosition, isHorizontalLayout, isHorizontalLogicLayout, isIndentedLayout } from "@plait/layouts";
2
- import { MindElementShape } from "../../interfaces/element";
3
- import { BASE, STROKE_WIDTH } from "../../constants/default";
4
- import { getRootLayout } from "../layout";
5
- import { NodeSpace } from "./node-space";
6
- export const getLayoutOptions = (board) => {
7
- function getMainAxle(element, parent) {
8
- const strokeWidth = element.strokeWidth || STROKE_WIDTH;
9
- if (element.isRoot) {
10
- return BASE * 12;
11
- }
12
- if (parent && parent.isRoot()) {
13
- return BASE * 3 + strokeWidth / 2;
14
- }
15
- return BASE * 3 + strokeWidth / 2;
16
- }
17
- function getSecondAxle(element, parent) {
18
- const strokeWidth = element.strokeWidth || STROKE_WIDTH;
19
- if (element.isRoot) {
20
- return BASE * 10 + strokeWidth / 2;
21
- }
22
- return BASE * 6 + strokeWidth / 2;
23
- }
24
- return {
25
- getHeight(element) {
26
- return NodeSpace.getNodeHeight(board, element);
27
- },
28
- getWidth(element) {
29
- return NodeSpace.getNodeWidth(board, element);
30
- },
31
- getHorizontalGap(element, parent) {
32
- const _layout = (parent && parent.layout) || getRootLayout(element);
33
- const isHorizontal = isHorizontalLayout(_layout);
34
- const strokeWidth = element.strokeWidth || STROKE_WIDTH;
35
- if (isIndentedLayout(_layout)) {
36
- return BASE * 4 + strokeWidth;
37
- }
38
- if (!isHorizontal) {
39
- return getMainAxle(element, parent);
40
- }
41
- else {
42
- return getSecondAxle(element, parent);
43
- }
44
- },
45
- getVerticalGap(element, parent) {
46
- const _layout = (parent && parent.layout) || getRootLayout(element);
47
- if (isIndentedLayout(_layout)) {
48
- return BASE;
49
- }
50
- const isHorizontal = isHorizontalLayout(_layout);
51
- if (isHorizontal) {
52
- return getMainAxle(element, parent);
53
- }
54
- else {
55
- return getSecondAxle(element, parent);
56
- }
57
- },
58
- getVerticalConnectingPosition(element, parent) {
59
- if (element.shape === MindElementShape.underline && parent && isHorizontalLogicLayout(parent.layout)) {
60
- return ConnectingPosition.bottom;
61
- }
62
- return undefined;
63
- },
64
- getExtendHeight(node) {
65
- return BASE * 6;
66
- },
67
- getIndentedCrossLevelGap() {
68
- return BASE * 2;
69
- }
70
- };
71
- };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9zcGFjZS9sYXlvdXQtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQXlDLGtCQUFrQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUosT0FBTyxFQUFlLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUU7SUFDdEQsU0FBUyxXQUFXLENBQUMsT0FBb0IsRUFBRSxNQUFtQjtRQUMxRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQztRQUN4RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO1NBQ3BCO1FBQ0QsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNCLE9BQU8sSUFBSSxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBQ0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsYUFBYSxDQUFDLE9BQW9CLEVBQUUsTUFBbUI7UUFDNUQsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUM7UUFDeEQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxHQUFHLEVBQUUsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELE9BQU87UUFDSCxTQUFTLENBQUMsT0FBb0I7WUFDMUIsT0FBTyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE9BQW9CO1lBQ3pCLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELGdCQUFnQixDQUFDLE9BQW9CLEVBQUUsTUFBbUI7WUFDdEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRSxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQztZQUN4RCxJQUFJLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzQixPQUFPLElBQUksR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDZixPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0gsT0FBTyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3pDO1FBQ0wsQ0FBQztRQUNELGNBQWMsQ0FBQyxPQUFvQixFQUFFLE1BQW1CO1lBQ3BELE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEUsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0IsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELElBQUksWUFBWSxFQUFFO2dCQUNkLE9BQU8sV0FBVyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzthQUN2QztpQkFBTTtnQkFDSCxPQUFPLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7UUFDTCxDQUFDO1FBQ0QsNkJBQTZCLENBQUMsT0FBb0IsRUFBRSxNQUFtQjtZQUNuRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsU0FBUyxJQUFJLE1BQU0sSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2xHLE9BQU8sa0JBQWtCLENBQUMsTUFBTSxDQUFDO2FBQ3BDO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztRQUNELGVBQWUsQ0FBQyxJQUFnQjtZQUM1QixPQUFPLElBQUksR0FBRyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUNELHdCQUF3QjtZQUNwQixPQUFPLElBQUksR0FBRyxDQUFDLENBQUM7UUFDcEIsQ0FBQztLQUNhLENBQUM7QUFDdkIsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29ubmVjdGluZ1Bvc2l0aW9uLCBMYXlvdXROb2RlLCBMYXlvdXRPcHRpb25zLCBPcmlnaW5Ob2RlLCBpc0hvcml6b250YWxMYXlvdXQsIGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0LCBpc0luZGVudGVkTGF5b3V0IH0gZnJvbSBcIkBwbGFpdC9sYXlvdXRzXCI7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgTWluZEVsZW1lbnRTaGFwZSB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnRcIjtcbmltcG9ydCB7IEJBU0UsIFNUUk9LRV9XSURUSCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMvZGVmYXVsdFwiO1xuaW1wb3J0IHsgZ2V0Um9vdExheW91dCB9IGZyb20gXCIuLi9sYXlvdXRcIjtcbmltcG9ydCB7IE5vZGVTcGFjZSB9IGZyb20gXCIuL25vZGUtc3BhY2VcIjtcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRMYXlvdXRPcHRpb25zID0gKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCkgPT4ge1xuICAgIGZ1bmN0aW9uIGdldE1haW5BeGxlKGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXJlbnQ/OiBMYXlvdXROb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBTVFJPS0VfV0lEVEg7XG4gICAgICAgIGlmIChlbGVtZW50LmlzUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIEJBU0UgKiAxMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pc1Jvb3QoKSkge1xuICAgICAgICAgICAgcmV0dXJuIEJBU0UgKiAzICsgc3Ryb2tlV2lkdGggLyAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBCQVNFICogMyArIHN0cm9rZVdpZHRoIC8gMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZWNvbmRBeGxlKGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXJlbnQ/OiBMYXlvdXROb2RlKSB7XG4gICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBTVFJPS0VfV0lEVEg7XG4gICAgICAgIGlmIChlbGVtZW50LmlzUm9vdCkge1xuICAgICAgICAgICAgcmV0dXJuIEJBU0UgKiAxMCArIHN0cm9rZVdpZHRoIC8gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQkFTRSAqIDYgKyBzdHJva2VXaWR0aCAvIDI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0SGVpZ2h0KGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gTm9kZVNwYWNlLmdldE5vZGVIZWlnaHQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRXaWR0aChlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGVTcGFjZS5nZXROb2RlV2lkdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRIb3Jpem9udGFsR2FwKGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXJlbnQ/OiBMYXlvdXROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBfbGF5b3V0ID0gKHBhcmVudCAmJiBwYXJlbnQubGF5b3V0KSB8fCBnZXRSb290TGF5b3V0KGVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsTGF5b3V0KF9sYXlvdXQpO1xuICAgICAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBlbGVtZW50LnN0cm9rZVdpZHRoIHx8IFNUUk9LRV9XSURUSDtcbiAgICAgICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KF9sYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJBU0UgKiA0ICsgc3Ryb2tlV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRNYWluQXhsZShlbGVtZW50LCBwYXJlbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2Vjb25kQXhsZShlbGVtZW50LCBwYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRWZXJ0aWNhbEdhcChlbGVtZW50OiBNaW5kRWxlbWVudCwgcGFyZW50PzogTGF5b3V0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgX2xheW91dCA9IChwYXJlbnQgJiYgcGFyZW50LmxheW91dCkgfHwgZ2V0Um9vdExheW91dChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpc0luZGVudGVkTGF5b3V0KF9sYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJBU0U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxMYXlvdXQoX2xheW91dCk7XG4gICAgICAgICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE1haW5BeGxlKGVsZW1lbnQsIHBhcmVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRTZWNvbmRBeGxlKGVsZW1lbnQsIHBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldFZlcnRpY2FsQ29ubmVjdGluZ1Bvc2l0aW9uKGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXJlbnQ/OiBMYXlvdXROb2RlKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zaGFwZSA9PT0gTWluZEVsZW1lbnRTaGFwZS51bmRlcmxpbmUgJiYgcGFyZW50ICYmIGlzSG9yaXpvbnRhbExvZ2ljTGF5b3V0KHBhcmVudC5sYXlvdXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbm5lY3RpbmdQb3NpdGlvbi5ib3R0b207XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBnZXRFeHRlbmRIZWlnaHQobm9kZTogT3JpZ2luTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIEJBU0UgKiA2O1xuICAgICAgICB9LFxuICAgICAgICBnZXRJbmRlbnRlZENyb3NzTGV2ZWxHYXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gQkFTRSAqIDI7XG4gICAgICAgIH1cbiAgICB9IGFzIExheW91dE9wdGlvbnM7XG59Il19
@@ -1,142 +0,0 @@
1
- import { DEFAULT_FONT_SIZE, MarkTypes, PlaitMarkEditor } from '@plait/text';
2
- import { BASE } from '../../constants/default';
3
- import { PlaitMind } from '../../interfaces/element';
4
- import { MindElement } from '../../interfaces/element';
5
- import { WithMindPluginKey, getStrokeWidthByElement } from '../../public-api';
6
- import { getEmojisWidthHeight } from './emoji';
7
- import { ROOT_TOPIC_FONT_SIZE } from '../../constants/node-topic-style';
8
- const NodeDefaultSpace = {
9
- horizontal: {
10
- nodeAndText: BASE * 2.5,
11
- emojiAndText: BASE * 1.5
12
- },
13
- vertical: {
14
- nodeAndText: BASE,
15
- nodeAndImage: BASE,
16
- imageAndText: BASE * 1.5
17
- }
18
- };
19
- const RootDefaultSpace = {
20
- horizontal: {
21
- nodeAndText: BASE * 4,
22
- emojiAndText: BASE * 2
23
- },
24
- vertical: {
25
- nodeAndText: BASE * 2
26
- }
27
- };
28
- const getHorizontalSpaceBetweenNodeAndText = (board, element) => {
29
- const isMind = PlaitMind.isMind(element);
30
- const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;
31
- const strokeWidth = getStrokeWidthByElement(board, element);
32
- return nodeAndText + strokeWidth / 2;
33
- };
34
- const getVerticalSpaceBetweenNodeAndText = (board, element) => {
35
- const isMind = PlaitMind.isMind(element);
36
- const strokeWidth = getStrokeWidthByElement(board, element);
37
- const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;
38
- return nodeAndText + strokeWidth / 2;
39
- };
40
- const getSpaceEmojiAndText = (element) => {
41
- const isMind = PlaitMind.isMind(element);
42
- const emojiAndText = isMind ? RootDefaultSpace.horizontal.emojiAndText : NodeDefaultSpace.horizontal.emojiAndText;
43
- return emojiAndText;
44
- };
45
- export const NodeSpace = {
46
- getNodeWidth(board, element) {
47
- const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
48
- if (MindElement.hasEmojis(element)) {
49
- return (NodeSpace.getEmojiLeftSpace(board, element) +
50
- getEmojisWidthHeight(board, element).width +
51
- getSpaceEmojiAndText(element) +
52
- NodeSpace.getNodeDynamicWidth(board, element) +
53
- nodeAndText);
54
- }
55
- return nodeAndText + NodeSpace.getNodeDynamicWidth(board, element) + nodeAndText;
56
- },
57
- getNodeHeight(board, element) {
58
- const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
59
- if (MindElement.hasImage(element)) {
60
- return NodeSpace.getTextTopSpace(board, element) + element.height + nodeAndText;
61
- }
62
- return nodeAndText + element.height + nodeAndText;
63
- },
64
- getNodeDynamicWidth(board, element) {
65
- const width = element.manualWidth || element.width;
66
- const imageWidth = MindElement.hasImage(element) ? element.data.image?.width : 0;
67
- return Math.max(width, imageWidth);
68
- },
69
- /**
70
- * use this when upload image first or resize image
71
- * @param board
72
- * @param element
73
- * @param imageWidth
74
- * @returns
75
- */
76
- getNodeNewDynamicWidth(board, element, imageWidth) {
77
- const width = element.manualWidth || element.width;
78
- return Math.max(width, imageWidth);
79
- },
80
- getNodeResizableMinWidth(board, element) {
81
- const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);
82
- if (MindElement.hasImage(element) && element.data.image.width > minTopicWidth) {
83
- return element.data.image.width;
84
- }
85
- else {
86
- return minTopicWidth;
87
- }
88
- },
89
- getNodeTopicMinWidth(board, element, isRoot = false) {
90
- const defaultFontSize = getNodeDefaultFontSize(isRoot);
91
- const editor = MindElement.getTextEditor(element);
92
- const marks = PlaitMarkEditor.getMarks(editor);
93
- const fontSize = marks[MarkTypes.fontSize] || defaultFontSize;
94
- return fontSize;
95
- },
96
- getTextLeftSpace(board, element) {
97
- const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
98
- if (MindElement.hasEmojis(element)) {
99
- return NodeSpace.getEmojiLeftSpace(board, element) + getEmojisWidthHeight(board, element).width + getSpaceEmojiAndText(element);
100
- }
101
- else {
102
- return nodeAndText;
103
- }
104
- },
105
- getTextTopSpace(board, element) {
106
- const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
107
- if (MindElement.hasImage(element)) {
108
- return NodeSpace.getImageTopSpace(board, element) + element.data.image.height + NodeDefaultSpace.vertical.imageAndText;
109
- }
110
- else {
111
- return nodeAndText;
112
- }
113
- },
114
- getImageTopSpace(board, element) {
115
- const strokeWidth = getStrokeWidthByElement(board, element);
116
- return strokeWidth / 2 + NodeDefaultSpace.vertical.nodeAndImage;
117
- },
118
- getEmojiLeftSpace(board, element) {
119
- const options = board.getPluginOptions(WithMindPluginKey);
120
- const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
121
- const strokeWidth = getStrokeWidthByElement(board, element);
122
- return strokeWidth / 2 + nodeAndText - options.emojiPadding;
123
- },
124
- getEmojiTopSpace(board, element) {
125
- const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
126
- return nodeAndText;
127
- }
128
- };
129
- export const getFontSizeBySlateElement = (text) => {
130
- const defaultFontSize = DEFAULT_FONT_SIZE;
131
- if (typeof text === 'string') {
132
- return defaultFontSize;
133
- }
134
- const marks = PlaitMarkEditor.getMarksByElement(text);
135
- const fontSize = marks[MarkTypes.fontSize] || defaultFontSize;
136
- return fontSize;
137
- };
138
- export const getNodeDefaultFontSize = (isRoot = false) => {
139
- const defaultFontSize = isRoot ? ROOT_TOPIC_FONT_SIZE : DEFAULT_FONT_SIZE;
140
- return defaultFontSize;
141
- };
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1zcGFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL3NwYWNlL25vZGUtc3BhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRS9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXhFLE1BQU0sZ0JBQWdCLEdBQUc7SUFDckIsVUFBVSxFQUFFO1FBQ1IsV0FBVyxFQUFFLElBQUksR0FBRyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxJQUFJLEdBQUcsR0FBRztLQUMzQjtJQUNELFFBQVEsRUFBRTtRQUNOLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLFlBQVksRUFBRSxJQUFJO1FBQ2xCLFlBQVksRUFBRSxJQUFJLEdBQUcsR0FBRztLQUMzQjtDQUNKLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHO0lBQ3JCLFVBQVUsRUFBRTtRQUNSLFdBQVcsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUNyQixZQUFZLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDekI7SUFDRCxRQUFRLEVBQUU7UUFDTixXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUM7S0FDeEI7Q0FDSixDQUFDO0FBRUYsTUFBTSxvQ0FBb0MsR0FBRyxDQUFDLEtBQXFCLEVBQUUsT0FB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aUJBQWlCLENBQUMsQ0FBQztRQUMzRSxNQUFNLFdBQVcsR0FBRyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekUsTUFBTSxXQUFXLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTVELE9BQU8sV0FBVyxHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztJQUNoRSxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsS0FBcUIsRUFBRSxPQUFvQjtRQUN4RCxNQUFNLFdBQVcsR0FBRyxrQ0FBa0MsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkUsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztDQUNKLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLElBQXNCLEVBQUUsRUFBRTtJQUNoRSxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztJQUMxQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUMxQixPQUFPLGVBQWUsQ0FBQztLQUMxQjtJQUNELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBWSxJQUFJLGVBQWUsQ0FBQztJQUMxRSxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUNyRCxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztJQUMxRSxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSwgTWFya1R5cGVzLCBQbGFpdE1hcmtFZGl0b3IgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5pbXBvcnQgeyBCQVNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHQnO1xuaW1wb3J0IHsgUGxhaXRNaW5kIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEVtb2ppRGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudC1kYXRhJztcbmltcG9ydCB7IFdpdGhNaW5kT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvb3B0aW9ucyc7XG5pbXBvcnQgeyBQbGFpdE1pbmRCb2FyZCB9IGZyb20gJy4uLy4uL3BsdWdpbnMvd2l0aC1taW5kLmJvYXJkJztcbmltcG9ydCB7IFdpdGhNaW5kUGx1Z2luS2V5LCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgZ2V0RW1vamlzV2lkdGhIZWlnaHQgfSBmcm9tICcuL2Vtb2ppJztcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBST09UX1RPUElDX0ZPTlRfU0laRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXRvcGljLXN0eWxlJztcblxuY29uc3QgTm9kZURlZmF1bHRTcGFjZSA9IHtcbiAgICBob3Jpem9udGFsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMi41LFxuICAgICAgICBlbW9qaUFuZFRleHQ6IEJBU0UgKiAxLjVcbiAgICB9LFxuICAgIHZlcnRpY2FsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFLFxuICAgICAgICBub2RlQW5kSW1hZ2U6IEJBU0UsXG4gICAgICAgIGltYWdlQW5kVGV4dDogQkFTRSAqIDEuNVxuICAgIH1cbn07XG5cbmNvbnN0IFJvb3REZWZhdWx0U3BhY2UgPSB7XG4gICAgaG9yaXpvbnRhbDoge1xuICAgICAgICBub2RlQW5kVGV4dDogQkFTRSAqIDQsXG4gICAgICAgIGVtb2ppQW5kVGV4dDogQkFTRSAqIDJcbiAgICB9LFxuICAgIHZlcnRpY2FsOiB7XG4gICAgICAgIG5vZGVBbmRUZXh0OiBCQVNFICogMlxuICAgIH1cbn07XG5cbmNvbnN0IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dCA9IChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgaXNNaW5kID0gUGxhaXRNaW5kLmlzTWluZChlbGVtZW50KTtcbiAgICBjb25zdCBub2RlQW5kVGV4dCA9IGlzTWluZCA/IFJvb3REZWZhdWx0U3BhY2UuaG9yaXpvbnRhbC5ub2RlQW5kVGV4dCA6IE5vZGVEZWZhdWx0U3BhY2UuaG9yaXpvbnRhbC5ub2RlQW5kVGV4dDtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50KTtcbiAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBzdHJva2VXaWR0aCAvIDI7XG59O1xuXG5jb25zdCBnZXRWZXJ0aWNhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0ID0gKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBpc01pbmQgPSBQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gaXNNaW5kID8gUm9vdERlZmF1bHRTcGFjZS52ZXJ0aWNhbC5ub2RlQW5kVGV4dCA6IE5vZGVEZWZhdWx0U3BhY2UudmVydGljYWwubm9kZUFuZFRleHQ7XG4gICAgcmV0dXJuIG5vZGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGggLyAyO1xufTtcblxuY29uc3QgZ2V0U3BhY2VFbW9qaUFuZFRleHQgPSAoZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBpc01pbmQgPSBQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpO1xuICAgIGNvbnN0IGVtb2ppQW5kVGV4dCA9IGlzTWluZCA/IFJvb3REZWZhdWx0U3BhY2UuaG9yaXpvbnRhbC5lbW9qaUFuZFRleHQgOiBOb2RlRGVmYXVsdFNwYWNlLmhvcml6b250YWwuZW1vamlBbmRUZXh0O1xuICAgIHJldHVybiBlbW9qaUFuZFRleHQ7XG59O1xuXG5leHBvcnQgY29uc3QgTm9kZVNwYWNlID0ge1xuICAgIGdldE5vZGVXaWR0aChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0SG9yaXpvbnRhbFNwYWNlQmV0d2Vlbk5vZGVBbmRUZXh0KGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgaWYgKE1pbmRFbGVtZW50Lmhhc0Vtb2ppcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBOb2RlU3BhY2UuZ2V0RW1vamlMZWZ0U3BhY2UoYm9hcmQsIGVsZW1lbnQpICtcbiAgICAgICAgICAgICAgICBnZXRFbW9qaXNXaWR0aEhlaWdodChib2FyZCwgZWxlbWVudCkud2lkdGggK1xuICAgICAgICAgICAgICAgIGdldFNwYWNlRW1vamlBbmRUZXh0KGVsZW1lbnQpICtcbiAgICAgICAgICAgICAgICBOb2RlU3BhY2UuZ2V0Tm9kZUR5bmFtaWNXaWR0aChib2FyZCwgZWxlbWVudCkgK1xuICAgICAgICAgICAgICAgIG5vZGVBbmRUZXh0XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub2RlQW5kVGV4dCArIE5vZGVTcGFjZS5nZXROb2RlRHluYW1pY1dpZHRoKGJvYXJkLCBlbGVtZW50KSArIG5vZGVBbmRUZXh0O1xuICAgIH0sXG4gICAgZ2V0Tm9kZUhlaWdodChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0VmVydGljYWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5oYXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGVTcGFjZS5nZXRUZXh0VG9wU3BhY2UoYm9hcmQsIGVsZW1lbnQpICsgZWxlbWVudC5oZWlnaHQgKyBub2RlQW5kVGV4dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQgKyBlbGVtZW50LmhlaWdodCArIG5vZGVBbmRUZXh0O1xuICAgIH0sXG4gICAgZ2V0Tm9kZUR5bmFtaWNXaWR0aChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5tYW51YWxXaWR0aCB8fCBlbGVtZW50LndpZHRoO1xuICAgICAgICBjb25zdCBpbWFnZVdpZHRoID0gTWluZEVsZW1lbnQuaGFzSW1hZ2UoZWxlbWVudCkgPyBlbGVtZW50LmRhdGEuaW1hZ2U/LndpZHRoIDogMDtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHdpZHRoLCBpbWFnZVdpZHRoKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIHVzZSB0aGlzIHdoZW4gdXBsb2FkIGltYWdlIGZpcnN0IG9yIHJlc2l6ZSBpbWFnZVxuICAgICAqIEBwYXJhbSBib2FyZCBcbiAgICAgKiBAcGFyYW0gZWxlbWVudCBcbiAgICAgKiBAcGFyYW0gaW1hZ2VXaWR0aCBcbiAgICAgKiBAcmV0dXJucyBcbiAgICAgKi9cbiAgICBnZXROb2RlTmV3RHluYW1pY1dpZHRoKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIGltYWdlV2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQubWFudWFsV2lkdGggfHwgZWxlbWVudC53aWR0aDtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHdpZHRoLCBpbWFnZVdpZHRoKTtcbiAgICB9LFxuICAgIGdldE5vZGVSZXNpemFibGVNaW5XaWR0aChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG1pblRvcGljV2lkdGggPSBOb2RlU3BhY2UuZ2V0Tm9kZVRvcGljTWluV2lkdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoTWluZEVsZW1lbnQuaGFzSW1hZ2UoZWxlbWVudCkgJiYgZWxlbWVudC5kYXRhLmltYWdlLndpZHRoID4gbWluVG9waWNXaWR0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZGF0YS5pbWFnZS53aWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaW5Ub3BpY1dpZHRoO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBnZXROb2RlVG9waWNNaW5XaWR0aChib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50LCBpc1Jvb3Q6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBkZWZhdWx0Rm9udFNpemUgPSBnZXROb2RlRGVmYXVsdEZvbnRTaXplKGlzUm9vdCk7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IE1pbmRFbGVtZW50LmdldFRleHRFZGl0b3IoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG1hcmtzID0gUGxhaXRNYXJrRWRpdG9yLmdldE1hcmtzKGVkaXRvcik7XG4gICAgICAgIGNvbnN0IGZvbnRTaXplID0gKG1hcmtzW01hcmtUeXBlcy5mb250U2l6ZV0gYXMgbnVtYmVyKSB8fCBkZWZhdWx0Rm9udFNpemU7XG4gICAgICAgIHJldHVybiBmb250U2l6ZTtcbiAgICB9LFxuICAgIGdldFRleHRMZWZ0U3BhY2UoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldEhvcml6b250YWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5oYXNFbW9qaXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOb2RlU3BhY2UuZ2V0RW1vamlMZWZ0U3BhY2UoYm9hcmQsIGVsZW1lbnQpICsgZ2V0RW1vamlzV2lkdGhIZWlnaHQoYm9hcmQsIGVsZW1lbnQpLndpZHRoICsgZ2V0U3BhY2VFbW9qaUFuZFRleHQoZWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGdldFRleHRUb3BTcGFjZShib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IG5vZGVBbmRUZXh0ID0gZ2V0VmVydGljYWxTcGFjZUJldHdlZW5Ob2RlQW5kVGV4dChib2FyZCwgZWxlbWVudCk7XG4gICAgICAgIGlmIChNaW5kRWxlbWVudC5oYXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIE5vZGVTcGFjZS5nZXRJbWFnZVRvcFNwYWNlKGJvYXJkLCBlbGVtZW50KSArIGVsZW1lbnQuZGF0YS5pbWFnZS5oZWlnaHQgKyBOb2RlRGVmYXVsdFNwYWNlLnZlcnRpY2FsLmltYWdlQW5kVGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlQW5kVGV4dDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZ2V0SW1hZ2VUb3BTcGFjZShib2FyZDogUGxhaXRNaW5kQm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoYm9hcmQsIGVsZW1lbnQpO1xuXG4gICAgICAgIHJldHVybiBzdHJva2VXaWR0aCAvIDIgKyBOb2RlRGVmYXVsdFNwYWNlLnZlcnRpY2FsLm5vZGVBbmRJbWFnZTtcbiAgICB9LFxuICAgIGdldEVtb2ppTGVmdFNwYWNlKGJvYXJkOiBQbGFpdE1pbmRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQ8RW1vamlEYXRhPikge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYm9hcmQuZ2V0UGx1Z2luT3B0aW9uczxXaXRoTWluZE9wdGlvbnM+KFdpdGhNaW5kUGx1Z2luS2V5KTtcbiAgICAgICAgY29uc3Qgbm9kZUFuZFRleHQgPSBnZXRIb3Jpem9udGFsU3BhY2VCZXR3ZWVuTm9kZUFuZFRleHQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGJvYXJkLCBlbGVtZW50KTtcblxuICAgICAgICByZXR1cm4gc3Ryb2tlV2lkdGggLyAyICsgbm9kZUFuZFRleHQgLSBvcHRpb25zLmVtb2ppUGFkZGluZztcbiAgICB9LFxuICAgIGdldEVtb2ppVG9wU3BhY2UoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkge1xuICAgICAgICBjb25zdCBub2RlQW5kVGV4dCA9IGdldFZlcnRpY2FsU3BhY2VCZXR3ZWVuTm9kZUFuZFRleHQoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gbm9kZUFuZFRleHQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZvbnRTaXplQnlTbGF0ZUVsZW1lbnQgPSAodGV4dDogc3RyaW5nIHwgRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRGb250U2l6ZSA9IERFRkFVTFRfRk9OVF9TSVpFO1xuICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRGb250U2l6ZTtcbiAgICB9XG4gICAgY29uc3QgbWFya3MgPSBQbGFpdE1hcmtFZGl0b3IuZ2V0TWFya3NCeUVsZW1lbnQodGV4dCk7XG4gICAgY29uc3QgZm9udFNpemUgPSAobWFya3NbTWFya1R5cGVzLmZvbnRTaXplXSBhcyBudW1iZXIpIHx8IGRlZmF1bHRGb250U2l6ZTtcbiAgICByZXR1cm4gZm9udFNpemU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZURlZmF1bHRGb250U2l6ZSA9IChpc1Jvb3QgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRGb250U2l6ZSA9IGlzUm9vdCA/IFJPT1RfVE9QSUNfRk9OVF9TSVpFIDogREVGQVVMVF9GT05UX1NJWkU7XG4gICAgcmV0dXJuIGRlZmF1bHRGb250U2l6ZTtcbn07XG4iXX0=