@plait/draw 0.77.3 → 0.78.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.
Files changed (154) hide show
  1. package/fesm2022/plait-draw.mjs +2 -2
  2. package/fesm2022/plait-draw.mjs.map +1 -1
  3. package/package.json +1 -3
  4. package/esm2022/arrow-line.component.mjs +0 -165
  5. package/esm2022/constants/default.mjs +0 -7
  6. package/esm2022/constants/geometry.mjs +0 -272
  7. package/esm2022/constants/image.mjs +0 -2
  8. package/esm2022/constants/index.mjs +0 -9
  9. package/esm2022/constants/line.mjs +0 -12
  10. package/esm2022/constants/pointer.mjs +0 -23
  11. package/esm2022/constants/swimlane.mjs +0 -25
  12. package/esm2022/constants/text.mjs +0 -2
  13. package/esm2022/constants/theme.mjs +0 -28
  14. package/esm2022/engines/basic-shapes/cloud.mjs +0 -146
  15. package/esm2022/engines/basic-shapes/comment.mjs +0 -56
  16. package/esm2022/engines/basic-shapes/cross.mjs +0 -33
  17. package/esm2022/engines/basic-shapes/diamond.mjs +0 -16
  18. package/esm2022/engines/basic-shapes/ellipse.mjs +0 -53
  19. package/esm2022/engines/basic-shapes/hexagon.mjs +0 -27
  20. package/esm2022/engines/basic-shapes/left-arrow.mjs +0 -30
  21. package/esm2022/engines/basic-shapes/octagon.mjs +0 -29
  22. package/esm2022/engines/basic-shapes/parallelogram.mjs +0 -26
  23. package/esm2022/engines/basic-shapes/pentagon-arrow.mjs +0 -27
  24. package/esm2022/engines/basic-shapes/pentagon.mjs +0 -30
  25. package/esm2022/engines/basic-shapes/polygon.mjs +0 -56
  26. package/esm2022/engines/basic-shapes/process-arrow.mjs +0 -26
  27. package/esm2022/engines/basic-shapes/rectangle.mjs +0 -26
  28. package/esm2022/engines/basic-shapes/right-arrow.mjs +0 -28
  29. package/esm2022/engines/basic-shapes/round-comment.mjs +0 -82
  30. package/esm2022/engines/basic-shapes/round-rectangle.mjs +0 -58
  31. package/esm2022/engines/basic-shapes/star.mjs +0 -39
  32. package/esm2022/engines/basic-shapes/trapezoid.mjs +0 -26
  33. package/esm2022/engines/basic-shapes/triangle.mjs +0 -34
  34. package/esm2022/engines/basic-shapes/two-way-arrow.mjs +0 -25
  35. package/esm2022/engines/flowchart/database.mjs +0 -84
  36. package/esm2022/engines/flowchart/delay.mjs +0 -44
  37. package/esm2022/engines/flowchart/display.mjs +0 -74
  38. package/esm2022/engines/flowchart/document.mjs +0 -81
  39. package/esm2022/engines/flowchart/hard-disk.mjs +0 -84
  40. package/esm2022/engines/flowchart/internal-storage.mjs +0 -47
  41. package/esm2022/engines/flowchart/manual-input.mjs +0 -33
  42. package/esm2022/engines/flowchart/manual-loop.mjs +0 -26
  43. package/esm2022/engines/flowchart/merge.mjs +0 -34
  44. package/esm2022/engines/flowchart/multi-document.mjs +0 -143
  45. package/esm2022/engines/flowchart/note-curly-left.mjs +0 -86
  46. package/esm2022/engines/flowchart/note-curly-right.mjs +0 -89
  47. package/esm2022/engines/flowchart/note-square.mjs +0 -46
  48. package/esm2022/engines/flowchart/off-page.mjs +0 -32
  49. package/esm2022/engines/flowchart/or.mjs +0 -20
  50. package/esm2022/engines/flowchart/predefined-process.mjs +0 -47
  51. package/esm2022/engines/flowchart/preparation.mjs +0 -27
  52. package/esm2022/engines/flowchart/stored-data.mjs +0 -79
  53. package/esm2022/engines/flowchart/summing-junction.mjs +0 -23
  54. package/esm2022/engines/flowchart/terminal.mjs +0 -68
  55. package/esm2022/engines/index.mjs +0 -130
  56. package/esm2022/engines/table/table.mjs +0 -101
  57. package/esm2022/engines/uml/activity-class.mjs +0 -47
  58. package/esm2022/engines/uml/actor.mjs +0 -119
  59. package/esm2022/engines/uml/assembly.mjs +0 -105
  60. package/esm2022/engines/uml/combined-fragment.mjs +0 -66
  61. package/esm2022/engines/uml/component-box.mjs +0 -61
  62. package/esm2022/engines/uml/component.mjs +0 -117
  63. package/esm2022/engines/uml/container.mjs +0 -44
  64. package/esm2022/engines/uml/deletion.mjs +0 -54
  65. package/esm2022/engines/uml/note.mjs +0 -58
  66. package/esm2022/engines/uml/package.mjs +0 -105
  67. package/esm2022/engines/uml/provided-interface.mjs +0 -92
  68. package/esm2022/engines/uml/required-interface.mjs +0 -81
  69. package/esm2022/engines/uml/template.mjs +0 -47
  70. package/esm2022/generators/arrow-line-auto-complete.generator.mjs +0 -46
  71. package/esm2022/generators/arrow-line.generator.mjs +0 -13
  72. package/esm2022/generators/geometry-shape.generator.mjs +0 -29
  73. package/esm2022/generators/index.mjs +0 -7
  74. package/esm2022/generators/line-active.generator.mjs +0 -84
  75. package/esm2022/generators/single-text.generator.mjs +0 -16
  76. package/esm2022/generators/table.generator.mjs +0 -25
  77. package/esm2022/generators/text.generator.mjs +0 -131
  78. package/esm2022/generators/vector-line-generator.mjs +0 -13
  79. package/esm2022/geometry.component.mjs +0 -145
  80. package/esm2022/image.component.mjs +0 -67
  81. package/esm2022/interfaces/arrow-line.mjs +0 -70
  82. package/esm2022/interfaces/element.mjs +0 -9
  83. package/esm2022/interfaces/engine.mjs +0 -2
  84. package/esm2022/interfaces/geometry.mjs +0 -82
  85. package/esm2022/interfaces/image.mjs +0 -2
  86. package/esm2022/interfaces/index.mjs +0 -92
  87. package/esm2022/interfaces/line.mjs +0 -2
  88. package/esm2022/interfaces/options.mjs +0 -2
  89. package/esm2022/interfaces/swimlane.mjs +0 -13
  90. package/esm2022/interfaces/table.mjs +0 -13
  91. package/esm2022/interfaces/text.mjs +0 -2
  92. package/esm2022/interfaces/vector-line.mjs +0 -10
  93. package/esm2022/plait-draw.mjs +0 -5
  94. package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +0 -43
  95. package/esm2022/plugins/with-arrow-line-auto-complete.mjs +0 -76
  96. package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +0 -53
  97. package/esm2022/plugins/with-arrow-line-create.mjs +0 -51
  98. package/esm2022/plugins/with-arrow-line-resize.mjs +0 -158
  99. package/esm2022/plugins/with-arrow-line-text-move.mjs +0 -53
  100. package/esm2022/plugins/with-arrow-line-text.mjs +0 -73
  101. package/esm2022/plugins/with-draw-fragment.mjs +0 -98
  102. package/esm2022/plugins/with-draw-hotkey.mjs +0 -45
  103. package/esm2022/plugins/with-draw-resize.mjs +0 -269
  104. package/esm2022/plugins/with-draw-rotate.mjs +0 -132
  105. package/esm2022/plugins/with-draw.mjs +0 -144
  106. package/esm2022/plugins/with-geometry-create.mjs +0 -182
  107. package/esm2022/plugins/with-swimlane-create.mjs +0 -127
  108. package/esm2022/plugins/with-swimlane.mjs +0 -21
  109. package/esm2022/plugins/with-table-resize.mjs +0 -135
  110. package/esm2022/plugins/with-table.mjs +0 -109
  111. package/esm2022/plugins/with-vector-line-create.mjs +0 -85
  112. package/esm2022/plugins/with-vector-line-resize.mjs +0 -61
  113. package/esm2022/public-api.mjs +0 -11
  114. package/esm2022/table.component.mjs +0 -162
  115. package/esm2022/transforms/arrow-line.mjs +0 -66
  116. package/esm2022/transforms/common.mjs +0 -36
  117. package/esm2022/transforms/geometry-text.mjs +0 -59
  118. package/esm2022/transforms/geometry.mjs +0 -43
  119. package/esm2022/transforms/image.mjs +0 -33
  120. package/esm2022/transforms/index.mjs +0 -36
  121. package/esm2022/transforms/multi-text-geometry-text.mjs +0 -15
  122. package/esm2022/transforms/swimlane.mjs +0 -164
  123. package/esm2022/transforms/table-text.mjs +0 -44
  124. package/esm2022/transforms/table.mjs +0 -36
  125. package/esm2022/transforms/vector-line.mjs +0 -13
  126. package/esm2022/utils/arrow-line/arrow-line-arrow.mjs +0 -123
  127. package/esm2022/utils/arrow-line/arrow-line-basic.mjs +0 -205
  128. package/esm2022/utils/arrow-line/arrow-line-common.mjs +0 -162
  129. package/esm2022/utils/arrow-line/arrow-line-resize.mjs +0 -309
  130. package/esm2022/utils/arrow-line/elbow.mjs +0 -114
  131. package/esm2022/utils/arrow-line/index.mjs +0 -6
  132. package/esm2022/utils/clipboard.mjs +0 -55
  133. package/esm2022/utils/common.mjs +0 -184
  134. package/esm2022/utils/geometry.mjs +0 -178
  135. package/esm2022/utils/hit.mjs +0 -238
  136. package/esm2022/utils/index.mjs +0 -17
  137. package/esm2022/utils/line.mjs +0 -64
  138. package/esm2022/utils/memorize.mjs +0 -93
  139. package/esm2022/utils/multi-text-geometry.mjs +0 -61
  140. package/esm2022/utils/polygon.mjs +0 -30
  141. package/esm2022/utils/position/arrow-line.mjs +0 -20
  142. package/esm2022/utils/position/geometry.mjs +0 -30
  143. package/esm2022/utils/position/line.mjs +0 -51
  144. package/esm2022/utils/selected.mjs +0 -39
  145. package/esm2022/utils/shape.mjs +0 -11
  146. package/esm2022/utils/snap-resizing.mjs +0 -185
  147. package/esm2022/utils/style/index.mjs +0 -2
  148. package/esm2022/utils/style/stroke.mjs +0 -21
  149. package/esm2022/utils/swimlane.mjs +0 -124
  150. package/esm2022/utils/table-selected.mjs +0 -21
  151. package/esm2022/utils/table.mjs +0 -172
  152. package/esm2022/utils/uml.mjs +0 -90
  153. package/esm2022/utils/vector-line.mjs +0 -71
  154. package/esm2022/vector-line.component.mjs +0 -55
@@ -1,135 +0,0 @@
1
- import { PlaitBoard, RectangleClient, Transforms, isSelectedElement, getSelectedElements, hasValidAngle, } from '@plait/core';
2
- import { getIndexByResizeHandle, isCornerHandle, withResize, normalizeShapePoints } from '@plait/common';
3
- import { getCellsWithPoints, updateColumns, updateRows } from '../utils/table';
4
- import { getHitRectangleResizeHandleRef } from '../utils/position/geometry';
5
- import { getResizeOriginPointAndHandlePoint, getResizeZoom, movePointByZoomAndOriginPoint } from './with-draw-resize';
6
- import { getSnapResizingRef, getSnapResizingRefOptions } from '../utils/snap-resizing';
7
- import { PlaitDrawElement } from '../interfaces';
8
- import { isSingleSelectTable } from '../utils';
9
- const MIN_CELL_SIZE = 20;
10
- export function withTableResize(board) {
11
- let snapG;
12
- const options = {
13
- key: 'draw-table',
14
- canResize: () => {
15
- const selectedElements = getSelectedElements(board);
16
- return isSingleSelectTable(board) && !hasValidAngle(selectedElements[0]);
17
- },
18
- hitTest: (point) => {
19
- const selectedElements = getSelectedElements(board);
20
- const hitElement = selectedElements[0];
21
- // debugGenerator.clear();
22
- if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {
23
- let rectangle = board.getRectangle(hitElement);
24
- // debugGenerator.drawRectangle(board, rectangle);
25
- // debugGenerator.drawCircles(board, [point], 5);
26
- let handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, hitElement.angle);
27
- if (handleRef) {
28
- const selectElement = isSelectedElement(board, hitElement);
29
- if ((selectElement && isSingleSelectTable(board)) || (!selectElement && !isCornerHandle(board, handleRef.handle))) {
30
- return {
31
- element: hitElement,
32
- handle: handleRef.handle,
33
- cursorClass: handleRef.cursorClass,
34
- rectangle
35
- };
36
- }
37
- }
38
- const cells = getCellsWithPoints(board, hitElement);
39
- for (let i = 0; i < cells.length; i++) {
40
- rectangle = RectangleClient.getRectangleByPoints(cells[i].points);
41
- handleRef = getHitRectangleResizeHandleRef(board, rectangle, point, 0);
42
- if (handleRef && !isCornerHandle(board, handleRef.handle)) {
43
- return {
44
- element: hitElement,
45
- handle: handleRef.handle,
46
- cursorClass: handleRef.cursorClass,
47
- rectangle,
48
- options: {
49
- cell: cells[i]
50
- }
51
- };
52
- }
53
- }
54
- }
55
- return null;
56
- },
57
- onResize: (resizeRef, resizeState) => {
58
- snapG?.remove();
59
- const path = PlaitBoard.findPath(board, resizeRef.element);
60
- if (resizeRef.options?.cell && resizeRef.rectangle) {
61
- const handleIndex = getIndexByResizeHandle(resizeRef.handle);
62
- const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle);
63
- const resizePoints = [resizeState.startPoint, resizeState.endPoint];
64
- const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);
65
- const originPoints = resizeRef.options?.cell.points;
66
- const targetPoints = originPoints.map((p) => {
67
- return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);
68
- });
69
- const offsetX = targetPoints[1][0] - originPoints[1][0];
70
- const offsetY = targetPoints[1][1] - originPoints[1][1];
71
- const width = targetPoints[1][0] - targetPoints[0][0];
72
- const height = targetPoints[1][1] - targetPoints[0][1];
73
- if (offsetX !== 0 && width >= MIN_CELL_SIZE) {
74
- const { columns, points } = updateColumns(resizeRef.element, resizeRef.options?.cell.columnId, width, offsetX);
75
- Transforms.setNode(board, { columns, points }, path);
76
- }
77
- else if (offsetY !== 0 && height >= MIN_CELL_SIZE) {
78
- const { rows, points } = updateRows(resizeRef.element, resizeRef.options?.cell.rowId, height, offsetY);
79
- Transforms.setNode(board, { rows, points }, path);
80
- }
81
- }
82
- else {
83
- const isFromCorner = isCornerHandle(board, resizeRef.handle);
84
- const isAspectRatio = resizeState.isShift;
85
- const handleIndex = getIndexByResizeHandle(resizeRef.handle);
86
- const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle);
87
- const resizeSnapRefOptions = getSnapResizingRefOptions(board, resizeRef, resizeState, {
88
- originPoint,
89
- handlePoint
90
- }, isAspectRatio, isFromCorner);
91
- const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);
92
- snapG = resizeSnapRef.snapG;
93
- PlaitBoard.getElementTopHost(board).append(snapG);
94
- const points = resizeSnapRef.activePoints;
95
- const originPoints = resizeRef.element.points;
96
- const originRect = RectangleClient.getRectangleByPoints(originPoints);
97
- const targetRect = RectangleClient.getRectangleByPoints(points);
98
- const offsetWidth = targetRect.width - originRect.width;
99
- const offsetHeight = targetRect.height - originRect.height;
100
- let columns = [...resizeRef.element.columns];
101
- let rows = [...resizeRef.element.rows];
102
- if (offsetWidth !== 0) {
103
- columns = columns.map((item) => {
104
- if (item.width) {
105
- return {
106
- ...item,
107
- width: item.width + offsetWidth * (item.width / originRect.width)
108
- };
109
- }
110
- return item;
111
- });
112
- }
113
- if (offsetHeight !== 0) {
114
- rows = rows.map((item) => {
115
- if (item.height) {
116
- return {
117
- ...item,
118
- height: item.height + offsetHeight * (item.height / originRect.height)
119
- };
120
- }
121
- return item;
122
- });
123
- }
124
- Transforms.setNode(board, { points: normalizeShapePoints(points), columns, rows }, path);
125
- }
126
- },
127
- afterResize: (resizeRef) => {
128
- snapG?.remove();
129
- snapG = null;
130
- }
131
- };
132
- withResize(board, options);
133
- return board;
134
- }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10YWJsZS1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtdGFibGUtcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBRVYsZUFBZSxFQUNmLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGFBQWEsR0FDaEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNILHNCQUFzQixFQUN0QixjQUFjLEVBS2QsVUFBVSxFQUVWLG9CQUFvQixFQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFDSCxrQ0FBa0MsRUFDbEMsYUFBYSxFQUNiLDZCQUE2QixFQUNoQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFTL0MsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBRXpCLE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBc0I7SUFDbEQsSUFBSSxLQUF5QixDQUFDO0lBRTlCLE1BQU0sT0FBTyxHQUF3RTtRQUNqRixHQUFHLEVBQUUsWUFBWTtRQUNqQixTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ1osTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxPQUFPLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFB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QUFDOzZCQUNwRSxDQUFDO3dCQUNOLENBQUM7d0JBQ0QsT0FBTyxJQUFJLENBQUM7b0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7Z0JBQ0QsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ3JCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNkLE9BQU87Z0NBQ0gsR0FBRyxJQUFJO2dDQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzs2QkFDekUsQ0FBQzt3QkFDTixDQUFDO3dCQUNELE9BQU8sSUFBSSxDQUFDO29CQUNoQixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixDQUFDO1FBQ0wsQ0FBQztRQUNELFdBQVcsRUFBRSxDQUFDLFNBQXNFLEVBQUUsRUFBRTtZQUNwRixLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNqQixDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBbUQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdFLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgaXNTZWxlY3RlZEVsZW1lbnQsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBoYXNWYWxpZEFuZ2xlLFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEJhc2VUYWJsZSwgUGxhaXRUYWJsZUJvYXJkLCBQbGFpdFRhYmxlQ2VsbFdpdGhQb2ludHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RhYmxlJztcbmltcG9ydCB7XG4gICAgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSxcbiAgICBpc0Nvcm5lckhhbmRsZSxcbiAgICBSZXNpemVPcHRpb25zLFxuICAgIFJlc2l6ZUhhbmRsZSxcbiAgICBSZXNpemVSZWYsXG4gICAgUmVzaXplU3RhdGUsXG4gICAgd2l0aFJlc2l6ZSxcbiAgICBXaXRoUmVzaXplT3B0aW9ucyxcbiAgICBub3JtYWxpemVTaGFwZVBvaW50c1xufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldENlbGxzV2l0aFBvaW50cywgdXBkYXRlQ29sdW1ucywgdXBkYXRlUm93cyB9IGZyb20gJy4uL3V0aWxzL3RhYmxlJztcbmltcG9ydCB7IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZiB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7XG4gICAgZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludCxcbiAgICBnZXRSZXNpemVab29tLFxuICAgIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50XG59IGZyb20gJy4vd2l0aC1kcmF3LXJlc2l6ZSc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWYsIGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGlzU2luZ2xlU2VsZWN0VGFibGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8vIGNvbnN0IGRlYnVnS2V5ID0gJ2RlYnVnOnBsYWl0OnRhYmxlOnJlc2l6ZSc7XG4vLyBjb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuaW50ZXJmYWNlIFRhYmxlUmVzaXplT3B0aW9ucyBleHRlbmRzIFJlc2l6ZU9wdGlvbnMge1xuICAgIGNlbGw6IFBsYWl0VGFibGVDZWxsV2l0aFBvaW50cztcbn1cblxuY29uc3QgTUlOX0NFTExfU0laRSA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRhYmxlUmVzaXplKGJvYXJkOiBQbGFpdFRhYmxlQm9hcmQpIHtcbiAgICBsZXQgc25hcEc6IFNWR0dFbGVtZW50IHwgbnVsbDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0QmFzZVRhYmxlLCBSZXNpemVIYW5kbGUsIFRhYmxlUmVzaXplT3B0aW9ucz4gPSB7XG4gICAgICAgIGtleTogJ2RyYXctdGFibGUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIHJldHVybiBpc1NpbmdsZVNlbGVjdFRhYmxlKGJvYXJkKSAmJiAhaGFzVmFsaWRBbmdsZShzZWxlY3RlZEVsZW1lbnRzWzBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGl0VGVzdDogKHBvaW50OiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgICAgICAgICAvLyBkZWJ1Z0dlbmVyYXRvci5jbGVhcigpO1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQgJiYgUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShoaXRFbGVtZW50KSBhcyBSZWN0YW5nbGVDbGllbnQ7XG4gICAgICAgICAgICAgICAgLy8gZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAvLyBkZWJ1Z0dlbmVyYXRvci5kcmF3Q2lyY2xlcyhib2FyZCwgW3BvaW50XSwgNSk7XG4gICAgICAgICAgICAgICAgbGV0IGhhbmRsZVJlZiA9IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgcmVjdGFuZ2xlLCBwb2ludCwgaGl0RWxlbWVudC5hbmdsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZVJlZikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtZW50ID0gaXNTZWxlY3RlZEVsZW1lbnQoYm9hcmQsIGhpdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbGVjdEVsZW1lbnQgJiYgaXNTaW5nbGVTZWxlY3RUYWJsZShib2FyZCkpIHx8ICghc2VsZWN0RWxlbWVudCAmJiAhaXNDb3JuZXJIYW5kbGUoYm9hcmQsIGhhbmRsZVJlZi5oYW5kbGUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBoaXRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTogaGFuZGxlUmVmLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IGdldENlbGxzV2l0aFBvaW50cyhib2FyZCwgaGl0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoY2VsbHNbaV0ucG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUmVmID0gZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmKGJvYXJkLCByZWN0YW5nbGUsIHBvaW50LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZVJlZiAmJiAhaXNDb3JuZXJIYW5kbGUoYm9hcmQsIGhhbmRsZVJlZi5oYW5kbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGhpdEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvckNsYXNzOiBoYW5kbGVSZWYuY3Vyc29yQ2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbDogY2VsbHNbaV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXRCYXNlVGFibGUsIFJlc2l6ZUhhbmRsZSwgVGFibGVSZXNpemVPcHRpb25zPiwgcmVzaXplU3RhdGU6IFJlc2l6ZVN0YXRlKSA9PiB7XG4gICAgICAgICAgICBzbmFwRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5vcHRpb25zPy5jZWxsICYmIHJlc2l6ZVJlZi5yZWN0YW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQgfSA9IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQoYm9hcmQsIGhhbmRsZUluZGV4LCByZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplUG9pbnRzOiBbUG9pbnQsIFBvaW50XSA9IFtyZXNpemVTdGF0ZS5zdGFydFBvaW50LCByZXNpemVTdGF0ZS5lbmRQb2ludF07XG4gICAgICAgICAgICAgICAgY29uc3QgeyB4Wm9vbSwgeVpvb20gfSA9IGdldFJlc2l6ZVpvb20ocmVzaXplUG9pbnRzLCBvcmlnaW5Qb2ludCwgaGFuZGxlUG9pbnQsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luUG9pbnRzID0gcmVzaXplUmVmLm9wdGlvbnM/LmNlbGwucG9pbnRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvaW50cyA9IG9yaWdpblBvaW50cy5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCB4Wm9vbSwgeVpvb20pO1xuICAgICAgICAgICAgICAgIH0pIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSB0YXJnZXRQb2ludHNbMV1bMF0gLSBvcmlnaW5Qb2ludHNbMV1bMF07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IHRhcmdldFBvaW50c1sxXVsxXSAtIG9yaWdpblBvaW50c1sxXVsxXTtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRhcmdldFBvaW50c1sxXVswXSAtIHRhcmdldFBvaW50c1swXVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0YXJnZXRQb2ludHNbMV1bMV0gLSB0YXJnZXRQb2ludHNbMF1bMV07XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldFggIT09IDAgJiYgd2lkdGggPj0gTUlOX0NFTExfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGNvbHVtbnMsIHBvaW50cyB9ID0gdXBkYXRlQ29sdW1ucyhyZXNpemVSZWYuZWxlbWVudCwgcmVzaXplUmVmLm9wdGlvbnM/LmNlbGwuY29sdW1uSWQsIHdpZHRoLCBvZmZzZXRYKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IGNvbHVtbnMsIHBvaW50cyB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldFkgIT09IDAgJiYgaGVpZ2h0ID49IE1JTl9DRUxMX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyByb3dzLCBwb2ludHMgfSA9IHVwZGF0ZVJvd3MocmVzaXplUmVmLmVsZW1lbnQsIHJlc2l6ZVJlZi5vcHRpb25zPy5jZWxsLnJvd0lkLCBoZWlnaHQsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcm93cywgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNGcm9tQ29ybmVyID0gaXNDb3JuZXJIYW5kbGUoYm9hcmQsIHJlc2l6ZVJlZi5oYW5kbGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQXNwZWN0UmF0aW8gPSByZXNpemVTdGF0ZS5pc1NoaWZ0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZUluZGV4ID0gZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZShyZXNpemVSZWYuaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCB9ID0gZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludChib2FyZCwgaGFuZGxlSW5kZXgsIHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmT3B0aW9ucyA9IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgICAgICByZXNpemVSZWYsXG4gICAgICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVBvaW50XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzQXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgICAgIGlzRnJvbUNvcm5lclxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzaXplU25hcFJlZiA9IGdldFNuYXBSZXNpemluZ1JlZihib2FyZCwgW3Jlc2l6ZVJlZi5lbGVtZW50XSwgcmVzaXplU25hcFJlZk9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRUb3BIb3N0KGJvYXJkKS5hcHBlbmQoc25hcEcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50cyA9IHJlc2l6ZVNuYXBSZWYuYWN0aXZlUG9pbnRzIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpblBvaW50cyA9IHJlc2l6ZVJlZi5lbGVtZW50LnBvaW50cztcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5SZWN0ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKG9yaWdpblBvaW50cyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdGFyZ2V0UmVjdC53aWR0aCAtIG9yaWdpblJlY3Qud2lkdGg7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gdGFyZ2V0UmVjdC5oZWlnaHQgLSBvcmlnaW5SZWN0LmhlaWdodDtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFsuLi5yZXNpemVSZWYuZWxlbWVudC5jb2x1bW5zXTtcbiAgICAgICAgICAgICAgICBsZXQgcm93cyA9IFsuLi5yZXNpemVSZWYuZWxlbWVudC5yb3dzXTtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0V2lkdGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IGNvbHVtbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS53aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLndpZHRoICsgb2Zmc2V0V2lkdGggKiAoaXRlbS53aWR0aCAvIG9yaWdpblJlY3Qud2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldEhlaWdodCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzID0gcm93cy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgKyBvZmZzZXRIZWlnaHQgKiAoaXRlbS5oZWlnaHQgLyBvcmlnaW5SZWN0LmhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzOiBub3JtYWxpemVTaGFwZVBvaW50cyhwb2ludHMpLCBjb2x1bW5zLCByb3dzIH0sIHBhdGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0QmFzZVRhYmxlLCBSZXNpemVIYW5kbGUsIFRhYmxlUmVzaXplT3B0aW9ucz4pID0+IHtcbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHNuYXBHID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3aXRoUmVzaXplPFBsYWl0QmFzZVRhYmxlLCBSZXNpemVIYW5kbGUsIFRhYmxlUmVzaXplT3B0aW9ucz4oYm9hcmQsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufVxuIl19
@@ -1,109 +0,0 @@
1
- import { TableComponent } from '../table.component';
2
- import { PlaitBoard, RectangleClient, isLineHitRectangle, toViewBoxPoint, toHostPoint, getHitElementByPoint, getSelectedElements, PlaitPointerType, isDragging, isMainPointer, distanceBetweenPointAndPoint, HIT_DISTANCE_BUFFER } from '@plait/core';
3
- import { editCell, getHitCell } from '../utils/table';
4
- import { withTableResize } from './with-table-resize';
5
- import { isVirtualKey, isDelete, isSpaceHotkey } from '@plait/common';
6
- import { PlaitDrawElement } from '../interfaces';
7
- import { getSelectedCells, getSelectedTableElements, isSingleSelectTable, setSelectedCells } from '../utils';
8
- import { TableEngine } from '../engines/table/table';
9
- export const withTable = (board) => {
10
- const tableBoard = board;
11
- const { drawElement, getRectangle, isRectangleHit, isHit, isMovable, dblClick, keyDown, pointerUp } = tableBoard;
12
- tableBoard.drawElement = (context) => {
13
- if (PlaitDrawElement.isElementByTable(context.element)) {
14
- return TableComponent;
15
- }
16
- return drawElement(context);
17
- };
18
- tableBoard.isHit = (element, point, isStrict) => {
19
- if (PlaitDrawElement.isElementByTable(element)) {
20
- const client = RectangleClient.getRectangleByPoints(element.points);
21
- const nearestPoint = TableEngine.getNearestPoint(client, point);
22
- const distance = distanceBetweenPointAndPoint(nearestPoint[0], nearestPoint[1], point[0], point[1]);
23
- return distance <= HIT_DISTANCE_BUFFER || RectangleClient.isPointInRectangle(client, point);
24
- }
25
- return isHit(element, point, isStrict);
26
- };
27
- tableBoard.getRectangle = (element) => {
28
- if (PlaitDrawElement.isElementByTable(element)) {
29
- return RectangleClient.getRectangleByPoints(element.points);
30
- }
31
- return getRectangle(element);
32
- };
33
- tableBoard.isMovable = (element) => {
34
- if (PlaitDrawElement.isElementByTable(element)) {
35
- return true;
36
- }
37
- return isMovable(element);
38
- };
39
- tableBoard.isRectangleHit = (element, selection) => {
40
- if (PlaitDrawElement.isElementByTable(element)) {
41
- const rangeRectangle = RectangleClient.getRectangleByPoints([selection.anchor, selection.focus]);
42
- const client = RectangleClient.getRectangleByPoints(element.points);
43
- return isLineHitRectangle(RectangleClient.getCornerPoints(client), rangeRectangle);
44
- }
45
- return isRectangleHit(element, selection);
46
- };
47
- tableBoard.keyDown = (event) => {
48
- const selectedElements = getSelectedElements(board);
49
- const isSingleSelection = selectedElements.length === 1;
50
- const targetElement = selectedElements[0];
51
- if (!PlaitBoard.isReadonly(board) &&
52
- !PlaitBoard.hasBeenTextEditing(tableBoard) &&
53
- !isVirtualKey(event) &&
54
- !isDelete(event) &&
55
- !isSpaceHotkey(event) &&
56
- isSingleSelection) {
57
- event.preventDefault();
58
- if (PlaitDrawElement.isElementByTable(targetElement)) {
59
- const cells = getSelectedCells(targetElement);
60
- let cell = targetElement.cells.find((item) => item.text && item.textHeight);
61
- if (cells?.length) {
62
- cell = cells.find((item) => item.text && item.textHeight);
63
- }
64
- if (cell) {
65
- editCell(board, cell);
66
- return;
67
- }
68
- }
69
- }
70
- keyDown(event);
71
- };
72
- tableBoard.dblClick = (event) => {
73
- event.preventDefault();
74
- if (!PlaitBoard.isReadonly(board)) {
75
- const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
76
- const hitElement = getHitElementByPoint(board, point);
77
- if (hitElement && PlaitDrawElement.isElementByTable(hitElement)) {
78
- const hitCell = getHitCell(tableBoard, hitElement, point);
79
- if (hitCell && hitCell.text && hitCell.textHeight) {
80
- editCell(board, hitCell);
81
- return;
82
- }
83
- }
84
- }
85
- dblClick(event);
86
- };
87
- tableBoard.pointerUp = (event) => {
88
- const isSetSelectionPointer = PlaitBoard.isPointer(tableBoard, PlaitPointerType.selection) || PlaitBoard.isPointer(tableBoard, PlaitPointerType.hand);
89
- const isSkip = !isMainPointer(event) || isDragging(tableBoard) || !isSetSelectionPointer;
90
- if (isSkip) {
91
- pointerUp(event);
92
- return;
93
- }
94
- if (isSingleSelectTable(tableBoard)) {
95
- const point = toViewBoxPoint(tableBoard, toHostPoint(tableBoard, event.x, event.y));
96
- const element = getSelectedTableElements(tableBoard)[0];
97
- const hitCell = getHitCell(tableBoard, element, point);
98
- if (hitCell && hitCell.text && hitCell.textHeight) {
99
- setSelectedCells(element, [hitCell]);
100
- }
101
- }
102
- pointerUp(event);
103
- };
104
- tableBoard.buildTable = (element) => {
105
- return element;
106
- };
107
- return withTableResize(tableBoard);
108
- };
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC10YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBRWYsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLGFBQWEsRUFDYiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFvQixtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFckQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzNDLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7SUFFNUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFFakgsVUFBVSxDQUFDLFdBQVcsR0FBRyxDQUFD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VUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEYsTUFBTSxPQUFPLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdkQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2hELGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBRUYsVUFBVSxDQUFDLFVBQVUsR0FBRyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtRQUNoRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFpdEJhc2VUYWJsZSwgUGxhaXRUYWJsZUJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWJsZSc7XG5pbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFNlbGVjdGlvbixcbiAgICBpc0xpbmVIaXRSZWN0YW5nbGUsXG4gICAgdG9WaWV3Qm94UG9pbnQsXG4gICAgdG9Ib3N0UG9pbnQsXG4gICAgZ2V0SGl0RWxlbWVudEJ5UG9pbnQsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIGlzRHJhZ2dpbmcsXG4gICAgaXNNYWluUG9pbnRlcixcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIEhJVF9ESVNUQU5DRV9CVUZGRVJcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgZWRpdENlbGwsIGdldEhpdENlbGwgfSBmcm9tICcuLi91dGlscy90YWJsZSc7XG5pbXBvcnQgeyB3aXRoVGFibGVSZXNpemUgfSBmcm9tICcuL3dpdGgtdGFibGUtcmVzaXplJztcbmltcG9ydCB7IGlzVmlydHVhbEtleSwgaXNEZWxldGUsIGlzU3BhY2VIb3RrZXkgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldFNlbGVjdGVkQ2VsbHMsIGdldFNlbGVjdGVkVGFibGVFbGVtZW50cywgaXNIaXRFZGdlT2ZTaGFwZSwgaXNTaW5nbGVTZWxlY3RUYWJsZSwgc2V0U2VsZWN0ZWRDZWxscyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFRhYmxlRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcy90YWJsZS90YWJsZSc7XG5cbmV4cG9ydCBjb25zdCB3aXRoVGFibGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB0YWJsZUJvYXJkID0gYm9hcmQgYXMgUGxhaXRUYWJsZUJvYXJkO1xuXG4gICAgY29uc3QgeyBkcmF3RWxlbWVudCwgZ2V0UmVjdGFuZ2xlLCBpc1JlY3RhbmdsZUhpdCwgaXNIaXQsIGlzTW92YWJsZSwgZGJsQ2xpY2ssIGtleURvd24sIHBvaW50ZXJVcCB9ID0gdGFibGVCb2FyZDtcblxuICAgIHRhYmxlQm9hcmQuZHJhd0VsZW1lbnQgPSAoY29udGV4dDogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGNvbnRleHQuZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhd0VsZW1lbnQoY29udGV4dCk7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuaXNIaXQgPSAoZWxlbWVudCwgcG9pbnQsIGlzU3RyaWN0PzogYm9vbGVhbikgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICAgICAgY29uc3QgbmVhcmVzdFBvaW50ID0gVGFibGVFbmdpbmUuZ2V0TmVhcmVzdFBvaW50KGNsaWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KG5lYXJlc3RQb2ludFswXSwgbmVhcmVzdFBvaW50WzFdLCBwb2ludFswXSwgcG9pbnRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIGRpc3RhbmNlIDw9IEhJVF9ESVNUQU5DRV9CVUZGRVIgfHwgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZShjbGllbnQsIHBvaW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNIaXQoZWxlbWVudCwgcG9pbnQsIGlzU3RyaWN0KTtcbiAgICB9O1xuXG4gICAgdGFibGVCb2FyZC5nZXRSZWN0YW5nbGUgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuaXNNb3ZhYmxlID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc01vdmFibGUoZWxlbWVudCk7XG4gICAgfTtcblxuICAgIHRhYmxlQm9hcmQuaXNSZWN0YW5nbGVIaXQgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbikgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbc2VsZWN0aW9uLmFuY2hvciwgc2VsZWN0aW9uLmZvY3VzXSk7XG4gICAgICAgICAgICBjb25zdCBjbGllbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICAgICAgcmV0dXJuIGlzTGluZUhpdFJlY3RhbmdsZShSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKGNsaWVudCksIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNSZWN0YW5nbGVIaXQoZWxlbWVudCwgc2VsZWN0aW9uKTtcbiAgICB9O1xuXG4gICAgdGFibGVCb2FyZC5rZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgY29uc3QgaXNTaW5nbGVTZWxlY3Rpb24gPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHNlbGVjdGVkRWxlbWVudHNbMF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmXG4gICAgICAgICAgICAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGFibGVCb2FyZCkgJiZcbiAgICAgICAgICAgICFpc1ZpcnR1YWxLZXkoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNEZWxldGUoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNTcGFjZUhvdGtleShldmVudCkgJiZcbiAgICAgICAgICAgIGlzU2luZ2xlU2VsZWN0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IGdldFNlbGVjdGVkQ2VsbHModGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgbGV0IGNlbGwgPSB0YXJnZXRFbGVtZW50LmNlbGxzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udGV4dCAmJiBpdGVtLnRleHRIZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChjZWxscz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSBjZWxscy5maW5kKChpdGVtKSA9PiBpdGVtLnRleHQgJiYgaXRlbS50ZXh0SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdENlbGwoYm9hcmQsIGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICB0YWJsZUJvYXJkLmRibENsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQgJiYgUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGhpdEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGl0Q2VsbCA9IGdldEhpdENlbGwodGFibGVCb2FyZCwgaGl0RWxlbWVudCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgIGlmIChoaXRDZWxsICYmIGhpdENlbGwudGV4dCAmJiBoaXRDZWxsLnRleHRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdENlbGwoYm9hcmQsIGhpdENlbGwpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRibENsaWNrKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgdGFibGVCb2FyZC5wb2ludGVyVXAgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBpc1NldFNlbGVjdGlvblBvaW50ZXIgPVxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1BvaW50ZXIodGFibGVCb2FyZCwgUGxhaXRQb2ludGVyVHlwZS5zZWxlY3Rpb24pIHx8IFBsYWl0Qm9hcmQuaXNQb2ludGVyKHRhYmxlQm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuaGFuZCk7XG4gICAgICAgIGNvbnN0IGlzU2tpcCA9ICFpc01haW5Qb2ludGVyKGV2ZW50KSB8fCBpc0RyYWdnaW5nKHRhYmxlQm9hcmQpIHx8ICFpc1NldFNlbGVjdGlvblBvaW50ZXI7XG4gICAgICAgIGlmIChpc1NraXApIHtcbiAgICAgICAgICAgIHBvaW50ZXJVcChldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2luZ2xlU2VsZWN0VGFibGUodGFibGVCb2FyZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50ID0gdG9WaWV3Qm94UG9pbnQodGFibGVCb2FyZCwgdG9Ib3N0UG9pbnQodGFibGVCb2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGdldFNlbGVjdGVkVGFibGVFbGVtZW50cyh0YWJsZUJvYXJkKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGhpdENlbGwgPSBnZXRIaXRDZWxsKHRhYmxlQm9hcmQsIGVsZW1lbnQsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChoaXRDZWxsICYmIGhpdENlbGwudGV4dCAmJiBoaXRDZWxsLnRleHRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZENlbGxzKGVsZW1lbnQsIFtoaXRDZWxsXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlclVwKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgdGFibGVCb2FyZC5idWlsZFRhYmxlID0gKGVsZW1lbnQ6IFBsYWl0QmFzZVRhYmxlKSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG5cbiAgICByZXR1cm4gd2l0aFRhYmxlUmVzaXplKHRhYmxlQm9hcmQpO1xufTtcbiJdfQ==
@@ -1,85 +0,0 @@
1
- import { BoardTransforms, PlaitBoard, PlaitPointerType, Transforms, createG, distanceBetweenPointAndPoint, toHostPoint, toViewBoxPoint } from '@plait/core';
2
- import { VectorLineShape, VectorLinePointerType } from '../interfaces';
3
- import { LINE_HIT_GEOMETRY_BUFFER, getVectorLinePointers } from '../constants';
4
- import { isDrawingMode } from '@plait/common';
5
- import { vectorLineCreating } from '../utils';
6
- import { isKeyHotkey } from 'is-hotkey';
7
- export const withVectorLineCreateByDraw = (board) => {
8
- const { pointerDown, pointerMove, dblClick, globalKeyDown } = board;
9
- let lineShapeG = null;
10
- let temporaryElement = null;
11
- let drawPoints = [];
12
- const vectorLineComplete = () => {
13
- if (temporaryElement) {
14
- Transforms.insertNode(board, temporaryElement, [board.children.length]);
15
- }
16
- PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);
17
- lineShapeG?.remove();
18
- lineShapeG = null;
19
- temporaryElement = null;
20
- drawPoints = [];
21
- };
22
- board.pointerDown = (event) => {
23
- const penPointers = getVectorLinePointers();
24
- const isVectorLinePointer = PlaitBoard.isInPointer(board, penPointers);
25
- if (!PlaitBoard.isReadonly(board) && isVectorLinePointer && isDrawingMode(board)) {
26
- let point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
27
- if (drawPoints.length > 1) {
28
- const isClosed = distanceBetweenPointAndPoint(...point, ...drawPoints[0]) <= LINE_HIT_GEOMETRY_BUFFER;
29
- if (isClosed) {
30
- drawPoints.push(drawPoints[0]);
31
- vectorLineComplete();
32
- return;
33
- }
34
- }
35
- drawPoints.push(point);
36
- return;
37
- }
38
- pointerDown(event);
39
- };
40
- board.pointerMove = (event) => {
41
- lineShapeG?.remove();
42
- lineShapeG = createG();
43
- let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
44
- const pointer = PlaitBoard.getPointer(board);
45
- if (pointer === VectorLinePointerType.vectorLine) {
46
- if (drawPoints.length > 0) {
47
- const distance = distanceBetweenPointAndPoint(...movingPoint, ...drawPoints[0]);
48
- if (distance <= LINE_HIT_GEOMETRY_BUFFER) {
49
- movingPoint = drawPoints[0];
50
- PlaitBoard.getBoardContainer(board).classList.add(`vector-line-closed`);
51
- }
52
- else {
53
- PlaitBoard.getBoardContainer(board).classList.remove(`vector-line-closed`);
54
- }
55
- temporaryElement = vectorLineCreating(board, VectorLineShape.straight, drawPoints, movingPoint, lineShapeG);
56
- }
57
- }
58
- pointerMove(event);
59
- };
60
- board.dblClick = (event) => {
61
- if (!PlaitBoard.isReadonly(board)) {
62
- if (temporaryElement) {
63
- vectorLineComplete();
64
- BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
65
- return;
66
- }
67
- }
68
- dblClick(event);
69
- };
70
- board.globalKeyDown = (event) => {
71
- if (!PlaitBoard.isReadonly(board)) {
72
- const isEsc = isKeyHotkey('esc', event);
73
- const isV = isKeyHotkey('v', event);
74
- if ((isEsc || isV) && temporaryElement) {
75
- vectorLineComplete();
76
- if (isV) {
77
- BoardTransforms.updatePointerType(board, PlaitPointerType.selection);
78
- }
79
- }
80
- }
81
- globalKeyDown(event);
82
- };
83
- return board;
84
- };
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC12ZWN0b3ItbGluZS1jcmVhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtdmVjdG9yLWxpbmUtY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGdCQUFnQixFQUVoQixVQUFVLEVBRVYsT0FBTyxFQUNQLDRCQUE0QixFQUM1QixXQUFXLEVBQ1gsY0FBYyxFQUNqQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQW1CLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQW1CLHdCQUF3QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDNUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVwRSxJQUFJLFVBQVUsR0FBdUIsSUFBSSxDQUFDO0lBRTFDLElBQUksZ0JBQWdCLEdBQTJCLElBQUksQ0FBQztJQUVwRCxJQUFJLFVBQVUsR0FBWSxFQUFFLENBQUM7SUFFN0IsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVF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XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNyZWF0ZUcsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdFZlY3RvckxpbmUsIFZlY3RvckxpbmVTaGFwZSwgVmVjdG9yTGluZVBvaW50ZXJUeXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEcmF3UG9pbnRlclR5cGUsIExJTkVfSElUX0dFT01FVFJZX0JVRkZFUiwgZ2V0VmVjdG9yTGluZVBvaW50ZXJzIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRHJhd2luZ01vZGUgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IHZlY3RvckxpbmVDcmVhdGluZyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGNvbnN0IHdpdGhWZWN0b3JMaW5lQ3JlYXRlQnlEcmF3ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgeyBwb2ludGVyRG93biwgcG9pbnRlck1vdmUsIGRibENsaWNrLCBnbG9iYWxLZXlEb3duIH0gPSBib2FyZDtcblxuICAgIGxldCBsaW5lU2hhcGVHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IHRlbXBvcmFyeUVsZW1lbnQ6IFBsYWl0VmVjdG9yTGluZSB8IG51bGwgPSBudWxsO1xuXG4gICAgbGV0IGRyYXdQb2ludHM6IFBvaW50W10gPSBbXTtcblxuICAgIGNvbnN0IHZlY3RvckxpbmVDb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRlbXBvcmFyeUVsZW1lbnQpIHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgdGVtcG9yYXJ5RWxlbWVudCwgW2JvYXJkLmNoaWxkcmVuLmxlbmd0aF0pO1xuICAgICAgICB9XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYHZlY3Rvci1saW5lLWNsb3NlZGApO1xuICAgICAgICBsaW5lU2hhcGVHPy5yZW1vdmUoKTtcbiAgICAgICAgbGluZVNoYXBlRyA9IG51bGw7XG4gICAgICAgIHRlbXBvcmFyeUVsZW1lbnQgPSBudWxsO1xuICAgICAgICBkcmF3UG9pbnRzID0gW107XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3QgcGVuUG9pbnRlcnMgPSBnZXRWZWN0b3JMaW5lUG9pbnRlcnMoKTtcbiAgICAgICAgY29uc3QgaXNWZWN0b3JMaW5lUG9pbnRlciA9IFBsYWl0Qm9hcmQuaXNJblBvaW50ZXIoYm9hcmQsIHBlblBvaW50ZXJzKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmIGlzVmVjdG9yTGluZVBvaW50ZXIgJiYgaXNEcmF3aW5nTW9kZShib2FyZCkpIHtcbiAgICAgICAgICAgIGxldCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgaWYgKGRyYXdQb2ludHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2xvc2VkID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5wb2ludCwgLi4uZHJhd1BvaW50c1swXSkgPD0gTElORV9ISVRfR0VPTUVUUllfQlVGRkVSO1xuICAgICAgICAgICAgICAgIGlmIChpc0Nsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBkcmF3UG9pbnRzLnB1c2goZHJhd1BvaW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIHZlY3RvckxpbmVDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZHJhd1BvaW50cy5wdXNoKHBvaW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyRG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJNb3ZlID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgbGluZVNoYXBlRz8ucmVtb3ZlKCk7XG4gICAgICAgIGxpbmVTaGFwZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGxldCBtb3ZpbmdQb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBjb25zdCBwb2ludGVyID0gUGxhaXRCb2FyZC5nZXRQb2ludGVyKGJvYXJkKSBhcyBEcmF3UG9pbnRlclR5cGU7XG4gICAgICAgIGlmIChwb2ludGVyID09PSBWZWN0b3JMaW5lUG9pbnRlclR5cGUudmVjdG9yTGluZSkge1xuICAgICAgICAgICAgaWYgKGRyYXdQb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5tb3ZpbmdQb2ludCwgLi4uZHJhd1BvaW50c1swXSk7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDw9IExJTkVfSElUX0dFT01FVFJZX0JVRkZFUikge1xuICAgICAgICAgICAgICAgICAgICBtb3ZpbmdQb2ludCA9IGRyYXdQb2ludHNbMF07XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYHZlY3Rvci1saW5lLWNsb3NlZGApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYHZlY3Rvci1saW5lLWNsb3NlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlFbGVtZW50ID0gdmVjdG9yTGluZUNyZWF0aW5nKGJvYXJkLCBWZWN0b3JMaW5lU2hhcGUuc3RyYWlnaHQsIGRyYXdQb2ludHMsIG1vdmluZ1BvaW50LCBsaW5lU2hhcGVHKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmRibENsaWNrID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKHRlbXBvcmFyeUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB2ZWN0b3JMaW5lQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGJsQ2xpY2soZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgY29uc3QgaXNFc2MgPSBpc0tleUhvdGtleSgnZXNjJywgZXZlbnQpO1xuICAgICAgICAgICAgY29uc3QgaXNWID0gaXNLZXlIb3RrZXkoJ3YnLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoKGlzRXNjIHx8IGlzVikgJiYgdGVtcG9yYXJ5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZlY3RvckxpbmVDb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1YpIHtcbiAgICAgICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbEtleURvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
@@ -1,61 +0,0 @@
1
- import { Transforms, distanceBetweenPointAndPoint } from '@plait/core';
2
- import { withResize } from '@plait/common';
3
- import { getSelectedVectorLineElements } from '../utils/selected';
4
- import { getHitLineResizeHandleRef, LineResizeHandle } from '../utils/position/line';
5
- import { LINE_HIT_GEOMETRY_BUFFER } from '../constants';
6
- import { isClosedPoints } from '../utils';
7
- export const withVectorLineResize = (board) => {
8
- const options = {
9
- key: 'draw-vector-line',
10
- canResize: () => {
11
- return true;
12
- },
13
- hitTest: (point) => {
14
- const selectedVectorLineElements = getSelectedVectorLineElements(board);
15
- if (selectedVectorLineElements.length > 0) {
16
- let result = null;
17
- selectedVectorLineElements.forEach(value => {
18
- const handleRef = getHitLineResizeHandleRef(board, value, point);
19
- if (handleRef) {
20
- result = {
21
- element: value,
22
- handle: handleRef.handle,
23
- handleIndex: handleRef.handleIndex
24
- };
25
- }
26
- });
27
- return result;
28
- }
29
- return null;
30
- },
31
- onResize: (resizeRef, resizeState) => {
32
- let points = [...resizeRef.element.points];
33
- let handleIndex = resizeRef.handleIndex;
34
- if (resizeRef.handle === LineResizeHandle.source || resizeRef.handle === LineResizeHandle.target) {
35
- points[handleIndex] = resizeState.endPoint;
36
- if (isClosedPoints(resizeRef.element.points)) {
37
- points[points.length - 1] = resizeState.endPoint;
38
- }
39
- else {
40
- const targetPoint = resizeRef.handle === LineResizeHandle.source ? points[points.length - 1] : points[0];
41
- const distance = distanceBetweenPointAndPoint(...resizeState.endPoint, ...targetPoint);
42
- if (distance <= LINE_HIT_GEOMETRY_BUFFER) {
43
- points[handleIndex] = targetPoint;
44
- }
45
- }
46
- }
47
- else {
48
- if (resizeRef.handle === LineResizeHandle.addHandle) {
49
- points.splice(handleIndex + 1, 0, resizeState.endPoint);
50
- }
51
- else {
52
- points[handleIndex] = resizeState.endPoint;
53
- }
54
- }
55
- Transforms.setNode(board, { points }, resizeRef.path);
56
- }
57
- };
58
- withResize(board, options);
59
- return board;
60
- };
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC12ZWN0b3ItbGluZS1yZXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9wbHVnaW5zL3dpdGgtdmVjdG9yLWxpbmUtcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBMkIsVUFBVSxFQUFFLDRCQUE0QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hHLE9BQU8sRUFBNkMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXJGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3RELE1BQU0sT0FBTyxHQUF5RDtRQUNsRSxHQUFHLEVBQUUsa0JBQWtCO1FBQ3ZCLFNBQVMsRUFBRSxHQUFHLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdEIsTUFBTSwwQkFBMEIsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RSxJQUFJLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNsQiwwQkFBMEIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3ZDLE1BQU0sU0FBUyxHQUFHLHlCQUF5QixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2pFLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ1osTUFBTSxHQUFHOzRCQUNMLE9BQU8sRUFBRSxLQUFLOzRCQUNkLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTs0QkFDeEIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO3lCQUNyQyxDQUFDO29CQUNOLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLENBQUM7WUFDbEIsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxRQUFRLEVBQUUsQ0FBQyxTQUF1RCxFQUFFLFdBQXdCLEVBQUUsRUFBRTtZQUM1RixJQUFJLE1BQU0sR0FBWSxDQUFDLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUMsV0FBWSxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0YsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDckQsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6RyxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQztvQkFDdkYsSUFBSSxRQUFRLElBQUksd0JBQXdCLEVBQUUsQ0FBQzt3QkFDdkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztvQkFDdEMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzVELENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztnQkFDL0MsQ0FBQztZQUNMLENBQUM7WUFFRCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxJQUFZLENBQUMsQ0FBQztRQUNsRSxDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBb0MsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTlELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhdGgsIFBsYWl0Qm9hcmQsIFBvaW50LCBUcmFuc2Zvcm1zLCBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplUmVmLCBSZXNpemVTdGF0ZSwgV2l0aFJlc2l6ZU9wdGlvbnMsIHdpdGhSZXNpemUgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGdldFNlbGVjdGVkVmVjdG9yTGluZUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgZ2V0SGl0TGluZVJlc2l6ZUhhbmRsZVJlZiwgTGluZVJlc2l6ZUhhbmRsZSB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2xpbmUnO1xuaW1wb3J0IHsgUGxhaXRWZWN0b3JMaW5lIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBMSU5FX0hJVF9HRU9NRVRSWV9CVUZGRVIgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNDbG9zZWRQb2ludHMgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCB3aXRoVmVjdG9yTGluZVJlc2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPFBsYWl0VmVjdG9yTGluZSwgTGluZVJlc2l6ZUhhbmRsZT4gPSB7XG4gICAgICAgIGtleTogJ2RyYXctdmVjdG9yLWxpbmUnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZlY3RvckxpbmVFbGVtZW50cyA9IGdldFNlbGVjdGVkVmVjdG9yTGluZUVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFZlY3RvckxpbmVFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWZWN0b3JMaW5lRWxlbWVudHMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdExpbmVSZXNpemVIYW5kbGVSZWYoYm9hcmQsIHZhbHVlLCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGU6IGhhbmRsZVJlZi5oYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlSW5kZXg6IGhhbmRsZVJlZi5oYW5kbGVJbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcblxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0VmVjdG9yTGluZSwgTGluZVJlc2l6ZUhhbmRsZT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBvaW50czogUG9pbnRbXSA9IFsuLi5yZXNpemVSZWYuZWxlbWVudC5wb2ludHNdO1xuICAgICAgICAgICAgbGV0IGhhbmRsZUluZGV4ID0gcmVzaXplUmVmLmhhbmRsZUluZGV4ITtcbiAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSB8fCByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnRhcmdldCkge1xuICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICBpZiAoaXNDbG9zZWRQb2ludHMocmVzaXplUmVmLmVsZW1lbnQucG9pbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdID0gcmVzaXplU3RhdGUuZW5kUG9pbnQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSByZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLnNvdXJjZSA/IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0gOiBwb2ludHNbMF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCguLi5yZXNpemVTdGF0ZS5lbmRQb2ludCwgLi4udGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPD0gTElORV9ISVRfR0VPTUVUUllfQlVGRkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbaGFuZGxlSW5kZXhdID0gdGFyZ2V0UG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXNpemVSZWYuaGFuZGxlID09PSBMaW5lUmVzaXplSGFuZGxlLmFkZEhhbmRsZSkge1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMuc3BsaWNlKGhhbmRsZUluZGV4ICsgMSwgMCwgcmVzaXplU3RhdGUuZW5kUG9pbnQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50c1toYW5kbGVJbmRleF0gPSByZXNpemVTdGF0ZS5lbmRQb2ludDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcmVzaXplUmVmLnBhdGggYXMgUGF0aCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdFZlY3RvckxpbmUsIExpbmVSZXNpemVIYW5kbGU+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
@@ -1,11 +0,0 @@
1
- export * from './interfaces';
2
- export * from './plugins/with-draw';
3
- export * from './plugins/with-arrow-line-auto-complete';
4
- export * from './constants';
5
- export * from './utils';
6
- export * from './geometry.component';
7
- export * from './arrow-line.component';
8
- export * from './vector-line.component';
9
- export * from './transforms';
10
- export * from './generators/index';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wbHVnaW5zL3dpdGgtZHJhdyc7XG5leHBvcnQgKiBmcm9tICcuL3BsdWdpbnMvd2l0aC1hcnJvdy1saW5lLWF1dG8tY29tcGxldGUnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2dlb21ldHJ5LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2Fycm93LWxpbmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdmVjdG9yLWxpbmUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyYXRvcnMvaW5kZXgnO1xuIl19