@idraw/core 0.4.0-beta.9 → 0.4.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 (101) hide show
  1. package/dist/esm/board/index.d.ts +44 -0
  2. package/dist/esm/board/index.js +366 -0
  3. package/dist/esm/board/sharer.d.ts +21 -0
  4. package/dist/esm/board/sharer.js +101 -0
  5. package/dist/esm/board/viewer.d.ts +32 -0
  6. package/dist/esm/board/viewer.js +165 -0
  7. package/dist/esm/board/watcher.d.ts +15 -0
  8. package/dist/esm/board/watcher.js +218 -0
  9. package/dist/esm/config.d.ts +28 -0
  10. package/dist/esm/config.js +34 -0
  11. package/dist/esm/{lib → cursor}/cursor-image.d.ts +1 -0
  12. package/dist/esm/{lib → cursor}/cursor-image.js +1 -0
  13. package/dist/esm/cursor/cursor.d.ts +7 -0
  14. package/dist/esm/cursor/cursor.js +154 -0
  15. package/dist/esm/index.d.ts +39 -10
  16. package/dist/esm/index.js +296 -17
  17. package/dist/esm/middlewares/dragger/index.d.ts +7 -0
  18. package/dist/esm/{middleware → middlewares}/dragger/index.js +4 -3
  19. package/dist/esm/middlewares/info/config.d.ts +5 -0
  20. package/dist/esm/middlewares/info/config.js +9 -0
  21. package/dist/esm/middlewares/info/draw-info.d.ts +29 -0
  22. package/dist/esm/middlewares/info/draw-info.js +113 -0
  23. package/dist/esm/middlewares/info/index.d.ts +9 -0
  24. package/dist/esm/middlewares/info/index.js +131 -0
  25. package/dist/esm/middlewares/info/types.d.ts +3 -0
  26. package/dist/esm/middlewares/info/types.js +1 -0
  27. package/dist/esm/middlewares/layout-selector/config.d.ts +11 -0
  28. package/dist/esm/middlewares/layout-selector/config.js +12 -0
  29. package/dist/esm/middlewares/layout-selector/index.d.ts +5 -0
  30. package/dist/esm/middlewares/layout-selector/index.js +371 -0
  31. package/dist/esm/middlewares/layout-selector/types.d.ts +17 -0
  32. package/dist/esm/middlewares/layout-selector/types.js +2 -0
  33. package/dist/esm/middlewares/layout-selector/util.d.ts +9 -0
  34. package/dist/esm/middlewares/layout-selector/util.js +78 -0
  35. package/dist/esm/middlewares/pointer/index.d.ts +3 -0
  36. package/dist/esm/middlewares/pointer/index.js +42 -0
  37. package/dist/esm/middlewares/pointer/types.d.ts +3 -0
  38. package/dist/esm/middlewares/pointer/types.js +1 -0
  39. package/dist/esm/middlewares/ruler/config.d.ts +7 -0
  40. package/dist/esm/middlewares/ruler/config.js +21 -0
  41. package/dist/esm/middlewares/ruler/index.d.ts +3 -0
  42. package/dist/esm/middlewares/ruler/index.js +66 -0
  43. package/dist/esm/middlewares/ruler/types.d.ts +3 -0
  44. package/dist/esm/middlewares/ruler/types.js +1 -0
  45. package/dist/esm/{middleware → middlewares}/ruler/util.d.ts +20 -4
  46. package/dist/esm/{middleware → middlewares}/ruler/util.js +99 -26
  47. package/dist/esm/middlewares/scaler/index.d.ts +2 -0
  48. package/dist/esm/{middleware → middlewares}/scaler/index.js +2 -2
  49. package/dist/esm/{middleware → middlewares}/scroller/config.d.ts +4 -0
  50. package/dist/esm/middlewares/scroller/config.js +16 -0
  51. package/dist/esm/middlewares/scroller/index.d.ts +3 -0
  52. package/dist/esm/{middleware → middlewares}/scroller/index.js +47 -6
  53. package/dist/esm/middlewares/scroller/types.d.ts +11 -0
  54. package/dist/esm/middlewares/scroller/types.js +1 -0
  55. package/dist/esm/{middleware → middlewares}/scroller/util.d.ts +3 -2
  56. package/dist/esm/{middleware → middlewares}/scroller/util.js +33 -44
  57. package/dist/esm/{middleware → middlewares}/selector/config.d.ts +9 -1
  58. package/dist/esm/{middleware → middlewares}/selector/config.js +17 -1
  59. package/dist/esm/middlewares/selector/draw-auxiliary.d.ts +1 -0
  60. package/dist/esm/middlewares/selector/draw-auxiliary.js +12 -0
  61. package/dist/esm/middlewares/selector/draw-base.d.ts +30 -0
  62. package/dist/esm/middlewares/selector/draw-base.js +100 -0
  63. package/dist/esm/middlewares/selector/draw-debug.d.ts +5 -0
  64. package/dist/esm/middlewares/selector/draw-debug.js +30 -0
  65. package/dist/esm/middlewares/selector/draw-reference.d.ts +7 -0
  66. package/dist/esm/middlewares/selector/draw-reference.js +31 -0
  67. package/dist/esm/{middleware → middlewares}/selector/draw-wrapper.d.ts +16 -1
  68. package/dist/esm/middlewares/selector/draw-wrapper.js +139 -0
  69. package/dist/esm/middlewares/selector/index.d.ts +11 -0
  70. package/dist/esm/middlewares/selector/index.js +879 -0
  71. package/dist/esm/middlewares/selector/pattern/icon-rotate.d.ts +4 -0
  72. package/dist/esm/middlewares/selector/pattern/icon-rotate.js +88 -0
  73. package/dist/esm/middlewares/selector/pattern/index.d.ts +8 -0
  74. package/dist/esm/middlewares/selector/pattern/index.js +38 -0
  75. package/dist/esm/middlewares/selector/reference.d.ts +13 -0
  76. package/dist/esm/middlewares/selector/reference.js +267 -0
  77. package/dist/esm/{middleware → middlewares}/selector/types.d.ts +11 -5
  78. package/dist/esm/middlewares/selector/types.js +2 -0
  79. package/dist/esm/{middleware → middlewares}/selector/util.d.ts +14 -7
  80. package/dist/esm/{middleware → middlewares}/selector/util.js +46 -43
  81. package/dist/esm/middlewares/text-editor/index.d.ts +20 -0
  82. package/dist/esm/middlewares/text-editor/index.js +286 -0
  83. package/dist/esm/record.d.ts +5 -0
  84. package/dist/esm/record.js +38 -0
  85. package/dist/index.global.js +5740 -1632
  86. package/dist/index.global.min.js +1 -1
  87. package/package.json +5 -6
  88. package/dist/esm/lib/cursor.d.ts +0 -16
  89. package/dist/esm/lib/cursor.js +0 -129
  90. package/dist/esm/middleware/dragger/index.d.ts +0 -7
  91. package/dist/esm/middleware/ruler/index.d.ts +0 -3
  92. package/dist/esm/middleware/ruler/index.js +0 -48
  93. package/dist/esm/middleware/scaler/index.d.ts +0 -3
  94. package/dist/esm/middleware/scroller/config.js +0 -6
  95. package/dist/esm/middleware/scroller/index.d.ts +0 -2
  96. package/dist/esm/middleware/selector/draw-wrapper.js +0 -107
  97. package/dist/esm/middleware/selector/index.d.ts +0 -5
  98. package/dist/esm/middleware/selector/index.js +0 -510
  99. package/dist/esm/middleware/selector/types.js +0 -1
  100. package/dist/esm/middleware/text-editor/index.d.ts +0 -3
  101. package/dist/esm/middleware/text-editor/index.js +0 -147
@@ -1,510 +0,0 @@
1
- import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, deepResizeGroupElement } from '@idraw/util';
2
- import { drawHoverVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
3
- import { getPointTarget, resizeElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
4
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController } from './config';
5
- import { middlewareEventTextEdit } from '../text-editor';
6
- export const middlewareEventSelect = '@middleware/select';
7
- export const middlewareEventSelectClear = '@middleware/select-clear';
8
- export const MiddlewareSelector = (opts) => {
9
- const { viewer, sharer, boardContent, calculator, eventHub } = opts;
10
- const { helperContext } = boardContent;
11
- let prevPoint = null;
12
- let inBusyMode = null;
13
- sharer.setSharedStorage(keyActionType, null);
14
- const getActiveElements = () => {
15
- return sharer.getSharedStorage(keySelectedElementList);
16
- };
17
- const pushGroupQueue = (elem) => {
18
- let groupQueue = sharer.getSharedStorage(keyGroupQueue);
19
- if (!Array.isArray(groupQueue)) {
20
- groupQueue = [];
21
- }
22
- if (groupQueue.length > 0) {
23
- if (isElementInGroup(elem, groupQueue[groupQueue.length - 1])) {
24
- groupQueue.push(elem);
25
- }
26
- else {
27
- groupQueue = [];
28
- }
29
- }
30
- else if (groupQueue.length === 0) {
31
- groupQueue.push(elem);
32
- }
33
- const vertexesList = calcElementQueueVertexesQueueInGroup(groupQueue);
34
- sharer.setSharedStorage(keyGroupQueue, groupQueue);
35
- sharer.setSharedStorage(keyGroupQueueVertexesList, vertexesList);
36
- return groupQueue.length > 0;
37
- };
38
- const updateHoverElement = (elem) => {
39
- sharer.setSharedStorage(keyHoverElement, elem);
40
- let vertexes = null;
41
- if (elem) {
42
- vertexes = calcElementVertexesInGroup(elem, {
43
- groupQueue: sharer.getSharedStorage(keyGroupQueue)
44
- });
45
- }
46
- sharer.setSharedStorage(keyHoverElementVertexes, vertexes);
47
- };
48
- const updateSelectedElementList = (list, opts) => {
49
- sharer.setSharedStorage(keySelectedElementList, list);
50
- if (list.length === 1) {
51
- const controller = calcElementSizeController(list[0], {
52
- groupQueue: sharer.getSharedStorage(keyGroupQueue),
53
- controllerSize: 10,
54
- viewScaleInfo: sharer.getActiveViewScaleInfo()
55
- });
56
- sharer.setSharedStorage(keySelectedElementController, controller);
57
- }
58
- else {
59
- sharer.setSharedStorage(keySelectedElementController, null);
60
- }
61
- if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
62
- eventHub.trigger(middlewareEventSelect, { uuids: list.map((elem) => elem.uuid) });
63
- }
64
- };
65
- const pointTargetBaseOptions = () => {
66
- return {
67
- ctx: helperContext,
68
- calculator,
69
- data: sharer.getActiveStorage('data'),
70
- selectedElements: getActiveElements(),
71
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
72
- viewSizeInfo: sharer.getActiveViewSizeInfo(),
73
- groupQueue: sharer.getSharedStorage(keyGroupQueue),
74
- areaSize: null,
75
- selectedElementController: sharer.getSharedStorage(keySelectedElementController)
76
- };
77
- };
78
- const clear = () => {
79
- sharer.setSharedStorage(keyActionType, null);
80
- sharer.setSharedStorage(keyResizeType, null);
81
- sharer.setSharedStorage(keyAreaStart, null);
82
- sharer.setSharedStorage(keyAreaEnd, null);
83
- sharer.setSharedStorage(keyGroupQueue, []);
84
- sharer.setSharedStorage(keyGroupQueueVertexesList, []);
85
- sharer.setSharedStorage(keyHoverElement, null);
86
- sharer.setSharedStorage(keyHoverElementVertexes, null);
87
- sharer.setSharedStorage(keySelectedElementList, []);
88
- sharer.setSharedStorage(keySelectedElementListVertexes, null);
89
- sharer.setSharedStorage(keySelectedElementController, null);
90
- };
91
- clear();
92
- const selectCallback = ({ uuids, positions }) => {
93
- let elements = [];
94
- const actionType = sharer.getSharedStorage(keyActionType);
95
- const data = sharer.getActiveStorage('data');
96
- if (positions && Array.isArray(positions)) {
97
- elements = findElementsFromListByPositions(positions, (data === null || data === void 0 ? void 0 : data.elements) || []);
98
- }
99
- else {
100
- elements = findElementsFromList(uuids, (data === null || data === void 0 ? void 0 : data.elements) || []);
101
- }
102
- let needRefresh = false;
103
- if (!actionType && elements.length === 1) {
104
- sharer.setSharedStorage(keyActionType, 'select');
105
- needRefresh = true;
106
- }
107
- else if (actionType === 'select' && elements.length === 1) {
108
- needRefresh = true;
109
- }
110
- if (needRefresh) {
111
- const elem = elements[0];
112
- const groupQueue = getGroupQueueFromList(elem.uuid, (data === null || data === void 0 ? void 0 : data.elements) || []);
113
- sharer.setSharedStorage(keyGroupQueue, groupQueue);
114
- updateSelectedElementList(elements);
115
- viewer.drawFrame();
116
- }
117
- };
118
- const selectClearCallback = () => {
119
- clear();
120
- viewer.drawFrame();
121
- };
122
- return {
123
- name: '@middleware/selector',
124
- use() {
125
- eventHub.on(middlewareEventSelect, selectCallback);
126
- eventHub.on(middlewareEventSelectClear, selectClearCallback);
127
- },
128
- disuse() {
129
- eventHub.off(middlewareEventSelect, selectCallback);
130
- eventHub.off(middlewareEventSelectClear, selectClearCallback);
131
- },
132
- hover: (e) => {
133
- var _a, _b, _c, _d, _e;
134
- const resizeType = sharer.getSharedStorage(keyResizeType);
135
- const actionType = sharer.getSharedStorage(keyActionType);
136
- const groupQueue = sharer.getSharedStorage(keyGroupQueue);
137
- const triggerCursor = (target) => {
138
- const cursor = target.type;
139
- if (inBusyMode === null) {
140
- eventHub.trigger('cursor', {
141
- type: cursor,
142
- groupQueue: target.groupQueue,
143
- element: target.elements[0]
144
- });
145
- }
146
- };
147
- if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
148
- const isInActiveGroup = isPointInViewActiveGroup(e.point, {
149
- ctx: helperContext,
150
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
151
- viewSizeInfo: sharer.getActiveViewSizeInfo(),
152
- groupQueue: sharer.getSharedStorage(keyGroupQueue)
153
- });
154
- if (!isInActiveGroup) {
155
- updateHoverElement(null);
156
- viewer.drawFrame();
157
- return;
158
- }
159
- const target = getPointTarget(e.point, pointTargetBaseOptions());
160
- triggerCursor(target);
161
- if (resizeType || ['area', 'drag', 'drag-list'].includes(actionType)) {
162
- updateHoverElement(null);
163
- viewer.drawFrame();
164
- return;
165
- }
166
- if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
167
- updateHoverElement(target.elements[0]);
168
- viewer.drawFrame();
169
- return;
170
- }
171
- updateHoverElement(null);
172
- viewer.drawFrame();
173
- return;
174
- }
175
- if (resizeType || ['area', 'drag', 'drag-list'].includes(actionType)) {
176
- updateHoverElement(null);
177
- return;
178
- }
179
- if (actionType === 'drag') {
180
- updateHoverElement(null);
181
- return;
182
- }
183
- const selectedElements = getActiveElements();
184
- const viewScaleInfo = sharer.getActiveViewScaleInfo();
185
- const viewSizeInfo = sharer.getActiveViewSizeInfo();
186
- const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: calcSelectedElementsArea(selectedElements, {
187
- viewScaleInfo,
188
- viewSizeInfo,
189
- calculator
190
- }) }));
191
- triggerCursor(target);
192
- if (target.type === null) {
193
- return;
194
- }
195
- if (target.type === 'over-element' &&
196
- sharer.getSharedStorage(keyActionType) === 'select' &&
197
- target.elements.length === 1 &&
198
- target.elements[0].uuid === ((_c = (_b = getActiveElements()) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.uuid)) {
199
- return;
200
- }
201
- if (target.type === 'over-element' &&
202
- sharer.getSharedStorage(keyActionType) === null &&
203
- target.elements.length === 1 &&
204
- target.elements[0].uuid === ((_d = sharer.getSharedStorage(keyHoverElement)) === null || _d === void 0 ? void 0 : _d.uuid)) {
205
- return;
206
- }
207
- if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
208
- sharer.setSharedStorage(keyHoverElement, target.elements[0]);
209
- updateHoverElement(target.elements[0]);
210
- viewer.drawFrame();
211
- return;
212
- }
213
- if (sharer.getSharedStorage(keyHoverElement)) {
214
- updateHoverElement(null);
215
- viewer.drawFrame();
216
- return;
217
- }
218
- },
219
- pointStart: (e) => {
220
- var _a, _b, _c, _d;
221
- prevPoint = e.point;
222
- updateHoverElement(null);
223
- const groupQueue = sharer.getSharedStorage(keyGroupQueue);
224
- if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
225
- if (isPointInViewActiveGroup(e.point, {
226
- ctx: helperContext,
227
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
228
- viewSizeInfo: sharer.getActiveViewSizeInfo(),
229
- groupQueue
230
- })) {
231
- const target = getPointTarget(e.point, pointTargetBaseOptions());
232
- updateHoverElement(null);
233
- if (target.type === 'over-element' && ((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
234
- updateSelectedElementList([target.elements[0]], { triggerEvent: true });
235
- sharer.setSharedStorage(keyActionType, 'drag');
236
- }
237
- else if ((_b = target.type) === null || _b === void 0 ? void 0 : _b.startsWith('resize-')) {
238
- sharer.setSharedStorage(keyResizeType, target.type);
239
- sharer.setSharedStorage(keyActionType, 'resize');
240
- }
241
- else {
242
- updateSelectedElementList([], { triggerEvent: true });
243
- }
244
- }
245
- else {
246
- clear();
247
- }
248
- viewer.drawFrame();
249
- return;
250
- }
251
- const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
252
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
253
- viewSizeInfo: sharer.getActiveViewSizeInfo(),
254
- calculator
255
- });
256
- const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
257
- if (target.type === 'list-area') {
258
- sharer.setSharedStorage(keyActionType, 'drag-list');
259
- }
260
- else if (target.type === 'over-element' && ((_c = target === null || target === void 0 ? void 0 : target.elements) === null || _c === void 0 ? void 0 : _c.length) === 1) {
261
- updateSelectedElementList([target.elements[0]], { triggerEvent: true });
262
- sharer.setSharedStorage(keyActionType, 'drag');
263
- }
264
- else if ((_d = target.type) === null || _d === void 0 ? void 0 : _d.startsWith('resize-')) {
265
- sharer.setSharedStorage(keyResizeType, target.type);
266
- sharer.setSharedStorage(keyActionType, 'resize');
267
- }
268
- else {
269
- clear();
270
- sharer.setSharedStorage(keyActionType, 'area');
271
- sharer.setSharedStorage(keyAreaStart, e.point);
272
- updateSelectedElementList([], { triggerEvent: true });
273
- }
274
- viewer.drawFrame();
275
- },
276
- pointMove: (e) => {
277
- var _a;
278
- const data = sharer.getActiveStorage('data');
279
- const elems = getActiveElements();
280
- const scale = sharer.getActiveStorage('scale') || 1;
281
- const start = prevPoint;
282
- const end = e.point;
283
- const resizeType = sharer.getSharedStorage(keyResizeType);
284
- const actionType = sharer.getSharedStorage(keyActionType);
285
- const groupQueue = sharer.getSharedStorage(keyGroupQueue);
286
- if (actionType === 'drag') {
287
- inBusyMode = 'drag';
288
- if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end) {
289
- const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
290
- elems[0].x += moveX / scale;
291
- elems[0].y += moveY / scale;
292
- updateSelectedElementList([elems[0]]);
293
- }
294
- viewer.drawFrame();
295
- }
296
- else if (actionType === 'drag-list') {
297
- inBusyMode = 'drag-list';
298
- if (data && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
299
- const moveX = (end.x - start.x) / scale;
300
- const moveY = (end.y - start.y) / scale;
301
- elems.forEach((elem) => {
302
- if (elem) {
303
- elem.x += moveX;
304
- elem.y += moveY;
305
- }
306
- });
307
- sharer.setActiveStorage('data', data);
308
- }
309
- viewer.drawFrame();
310
- }
311
- else if (actionType === 'resize') {
312
- if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
313
- inBusyMode = 'resize';
314
- const pointGroupQueue = [];
315
- groupQueue.forEach((group) => {
316
- const { x, y, w, h, angle = 0 } = group;
317
- pointGroupQueue.push({
318
- x,
319
- y,
320
- w,
321
- h,
322
- angle: 0 - angle
323
- });
324
- });
325
- let resizeStart = start;
326
- let resizeEnd = end;
327
- if (groupQueue.length > 0) {
328
- resizeStart = rotatePointInGroup(start, pointGroupQueue);
329
- resizeEnd = rotatePointInGroup(end, pointGroupQueue);
330
- }
331
- const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
332
- elems[0].x = resizedElemSize.x;
333
- elems[0].y = resizedElemSize.y;
334
- if (elems[0].type === 'group' && ((_a = elems[0].operations) === null || _a === void 0 ? void 0 : _a.deepResize) === true) {
335
- deepResizeGroupElement(elems[0], {
336
- w: resizedElemSize.w,
337
- h: resizedElemSize.h
338
- });
339
- }
340
- else {
341
- elems[0].w = resizedElemSize.w;
342
- elems[0].h = resizedElemSize.h;
343
- }
344
- updateSelectedElementList([elems[0]]);
345
- viewer.drawFrame();
346
- }
347
- }
348
- else if (actionType === 'area') {
349
- inBusyMode = 'area';
350
- sharer.setSharedStorage(keyAreaEnd, e.point);
351
- viewer.drawFrame();
352
- }
353
- prevPoint = e.point;
354
- },
355
- pointEnd(e) {
356
- inBusyMode = null;
357
- const data = sharer.getActiveStorage('data');
358
- const resizeType = sharer.getSharedStorage(keyResizeType);
359
- const actionType = sharer.getSharedStorage(keyActionType);
360
- const viewSizeInfo = sharer.getActiveViewSizeInfo();
361
- let needDrawFrame = false;
362
- prevPoint = null;
363
- if (actionType === 'resize' && resizeType) {
364
- sharer.setSharedStorage(keyResizeType, null);
365
- needDrawFrame = true;
366
- }
367
- else if (actionType === 'area') {
368
- sharer.setSharedStorage(keyActionType, null);
369
- if (data) {
370
- const start = sharer.getSharedStorage(keyAreaStart);
371
- const end = sharer.getSharedStorage(keyAreaEnd);
372
- if (start && end) {
373
- const { elements } = getSelectedListArea(data, {
374
- start,
375
- end,
376
- calculator,
377
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
378
- viewSizeInfo: sharer.getActiveViewSizeInfo()
379
- });
380
- if (elements.length > 0) {
381
- sharer.setSharedStorage(keyActionType, 'drag-list');
382
- updateSelectedElementList(elements, { triggerEvent: true });
383
- needDrawFrame = true;
384
- }
385
- }
386
- }
387
- }
388
- else if (actionType === 'drag-list') {
389
- sharer.setSharedStorage(keyActionType, 'drag-list-end');
390
- needDrawFrame = true;
391
- }
392
- else if (data) {
393
- const result = calculator.getPointElement(e.point, {
394
- data,
395
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
396
- viewSizeInfo: sharer.getActiveViewSizeInfo()
397
- });
398
- if (result.element) {
399
- sharer.setSharedStorage(keyActionType, 'select');
400
- needDrawFrame = true;
401
- }
402
- else {
403
- sharer.setSharedStorage(keyActionType, null);
404
- }
405
- }
406
- if (sharer.getSharedStorage(keyActionType) === null) {
407
- clear();
408
- needDrawFrame = true;
409
- }
410
- const finalDrawFrame = () => {
411
- if (!needDrawFrame) {
412
- return;
413
- }
414
- if (data && Array.isArray(data === null || data === void 0 ? void 0 : data.elements) && ['drag', 'drag-list'].includes(actionType)) {
415
- const viewInfo = calcElementsViewInfo(data.elements, viewSizeInfo, { extend: true });
416
- sharer.setActiveStorage('contextHeight', viewInfo.contextSize.contextHeight);
417
- sharer.setActiveStorage('contextWidth', viewInfo.contextSize.contextWidth);
418
- }
419
- if (data && ['drag', 'drag-list', 'drag-list-end', 'resize'].includes(actionType)) {
420
- let type = 'drag-element';
421
- if (type === 'resize') {
422
- type = 'resize-element';
423
- }
424
- eventHub.trigger('change', { data, type });
425
- }
426
- viewer.drawFrame();
427
- };
428
- finalDrawFrame();
429
- },
430
- pointLeave() {
431
- prevPoint = null;
432
- clear();
433
- viewer.drawFrame();
434
- },
435
- doubleClick(e) {
436
- var _a, _b;
437
- const target = getPointTarget(e.point, pointTargetBaseOptions());
438
- if (target.elements.length === 1 && ((_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.type) === 'group') {
439
- const pushResult = pushGroupQueue(target.elements[0]);
440
- if (pushResult === true) {
441
- sharer.setSharedStorage(keyActionType, null);
442
- viewer.drawFrame();
443
- return;
444
- }
445
- }
446
- else if (target.elements.length === 1 && ((_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.type) === 'text') {
447
- eventHub.trigger(middlewareEventTextEdit, {
448
- element: target.elements[0],
449
- groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
450
- viewScaleInfo: sharer.getActiveViewScaleInfo()
451
- });
452
- }
453
- sharer.setSharedStorage(keyActionType, null);
454
- },
455
- beforeDrawFrame({ snapshot }) {
456
- const { activeStore, sharedStore } = snapshot;
457
- const { scale, offsetLeft, offsetTop, offsetRight, offsetBottom, width, height, contextHeight, contextWidth, devicePixelRatio } = activeStore;
458
- const sharer = opts.sharer;
459
- const viewScaleInfo = { scale, offsetLeft, offsetTop, offsetRight, offsetBottom };
460
- const viewSizeInfo = { width, height, contextHeight, contextWidth, devicePixelRatio };
461
- const selectedElements = sharedStore[keySelectedElementList];
462
- const elem = selectedElements[0];
463
- const hoverElement = sharedStore[keyHoverElement];
464
- const hoverElementVertexes = sharedStore[keyHoverElementVertexes];
465
- const actionType = sharedStore[keyActionType];
466
- const areaStart = sharedStore[keyAreaStart];
467
- const areaEnd = sharedStore[keyAreaEnd];
468
- const groupQueue = sharedStore[keyGroupQueue];
469
- const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
470
- const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
471
- const selectedElementController = elem
472
- ? calcElementSizeController(elem, {
473
- groupQueue,
474
- controllerSize: 10,
475
- viewScaleInfo
476
- })
477
- : null;
478
- if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
479
- drawGroupQueueVertexesWrappers(helperContext, groupQueueVertexesList, drawBaseOpts);
480
- if (hoverElement && actionType !== 'drag') {
481
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
482
- }
483
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
484
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
485
- }
486
- }
487
- else {
488
- if (hoverElement && actionType !== 'drag') {
489
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
490
- }
491
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
492
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
493
- }
494
- else if (actionType === 'area' && areaStart && areaEnd) {
495
- drawArea(helperContext, { start: areaStart, end: areaEnd });
496
- }
497
- else if (['drag-list', 'drag-list-end'].includes(actionType)) {
498
- const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
499
- viewScaleInfo: sharer.getActiveViewScaleInfo(),
500
- viewSizeInfo: sharer.getActiveViewSizeInfo(),
501
- calculator
502
- });
503
- if (listAreaSize) {
504
- drawListArea(helperContext, { areaSize: listAreaSize });
505
- }
506
- }
507
- }
508
- }
509
- };
510
- };
@@ -1 +0,0 @@
1
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
@@ -1,3 +0,0 @@
1
- import type { BoardMiddleware, CoreEvent } from '@idraw/types';
2
- export declare const middlewareEventTextEdit = "@middleware/text-edit";
3
- export declare const MiddlewareTextEditor: BoardMiddleware<Record<string, any>, CoreEvent>;
@@ -1,147 +0,0 @@
1
- import { limitAngle, getDefaultElementDetailConfig } from '@idraw/util';
2
- export const middlewareEventTextEdit = '@middleware/text-edit';
3
- const defaultElementDetail = getDefaultElementDetailConfig();
4
- export const MiddlewareTextEditor = (opts) => {
5
- const { eventHub, boardContent, viewer } = opts;
6
- const canvas = boardContent.boardContext.canvas;
7
- const textarea = document.createElement('textarea');
8
- const canvasWrapper = document.createElement('div');
9
- const container = opts.container || document.body;
10
- const mask = document.createElement('div');
11
- let activeElem = null;
12
- canvasWrapper.appendChild(textarea);
13
- canvasWrapper.style.position = 'absolute';
14
- mask.appendChild(canvasWrapper);
15
- mask.style.position = 'fixed';
16
- mask.style.top = '0';
17
- mask.style.bottom = '0';
18
- mask.style.left = '0';
19
- mask.style.right = '0';
20
- mask.style.display = 'none';
21
- container.appendChild(mask);
22
- const showTextArea = (e) => {
23
- resetCanvasWrapper();
24
- resetTextArea(e);
25
- mask.style.display = 'block';
26
- };
27
- const hideTextArea = () => {
28
- mask.style.display = 'none';
29
- activeElem = null;
30
- };
31
- const getCanvasRect = () => {
32
- const clientRect = canvas.getBoundingClientRect();
33
- const { left, top, width, height } = clientRect;
34
- return { left, top, width, height };
35
- };
36
- const createBox = (opts) => {
37
- const { size, parent } = opts;
38
- const div = document.createElement('div');
39
- const { x, y, w, h } = size;
40
- const angle = limitAngle(size.angle || 0);
41
- div.style.position = 'absolute';
42
- div.style.left = `${x}px`;
43
- div.style.top = `${y}px`;
44
- div.style.width = `${w}px`;
45
- div.style.height = `${h}px`;
46
- div.style.transform = `rotate(${angle}deg)`;
47
- parent.appendChild(div);
48
- return div;
49
- };
50
- const resetTextArea = (e) => {
51
- const { viewScaleInfo, element, groupQueue } = e;
52
- const { scale, offsetTop, offsetLeft } = viewScaleInfo;
53
- if (canvasWrapper.children) {
54
- Array.from(canvasWrapper.children).forEach((child) => {
55
- child.remove();
56
- });
57
- }
58
- let parent = canvasWrapper;
59
- for (let i = 0; i < groupQueue.length; i++) {
60
- const group = groupQueue[i];
61
- const { x, y, w, h } = group;
62
- const angle = limitAngle(group.angle || 0);
63
- const size = {
64
- x: x * scale,
65
- y: y * scale,
66
- w: w * scale,
67
- h: h * scale,
68
- angle
69
- };
70
- if (i === 0) {
71
- size.x += offsetLeft;
72
- size.y += offsetTop;
73
- }
74
- parent = createBox({ size, parent });
75
- }
76
- const detail = Object.assign(Object.assign({}, defaultElementDetail), element.detail);
77
- let elemX = element.x * scale + offsetLeft;
78
- let elemY = element.y * scale + offsetTop;
79
- let elemW = element.w * scale;
80
- let elemH = element.h * scale;
81
- if (groupQueue.length > 0) {
82
- elemX = element.x * scale;
83
- elemY = element.y * scale;
84
- elemW = element.w * scale;
85
- elemH = element.h * scale;
86
- }
87
- textarea.style.position = 'absolute';
88
- textarea.style.left = `${elemX}px`;
89
- textarea.style.top = `${elemY}px`;
90
- textarea.style.width = `${elemW}px`;
91
- textarea.style.height = `${elemH}px`;
92
- textarea.style.transform = `rotate(${limitAngle(element.angle || 0)}deg)`;
93
- textarea.style.boxSizing = 'border-box';
94
- textarea.style.border = '1px solid #1973ba';
95
- textarea.style.resize = 'none';
96
- textarea.style.overflow = 'hidden';
97
- textarea.style.wordBreak = 'break-all';
98
- textarea.style.background = '#FFFFFF';
99
- textarea.style.color = '#333333';
100
- textarea.style.fontSize = `${detail.fontSize * scale}px`;
101
- textarea.style.lineHeight = `${detail.lineHeight * scale}px`;
102
- textarea.style.fontFamily = detail.fontFamily;
103
- textarea.style.fontWeight = `${detail.fontWeight}`;
104
- textarea.value = detail.text || '';
105
- parent.appendChild(textarea);
106
- };
107
- const resetCanvasWrapper = () => {
108
- const { left, top, width, height } = getCanvasRect();
109
- canvasWrapper.style.position = 'absolute';
110
- canvasWrapper.style.overflow = 'hidden';
111
- canvasWrapper.style.top = `${top}px`;
112
- canvasWrapper.style.left = `${left}px`;
113
- canvasWrapper.style.width = `${width}px`;
114
- canvasWrapper.style.height = `${height}px`;
115
- };
116
- mask.addEventListener('click', () => {
117
- hideTextArea();
118
- });
119
- textarea.addEventListener('click', (e) => {
120
- e.stopPropagation();
121
- });
122
- textarea.addEventListener('input', (e) => {
123
- if (activeElem) {
124
- activeElem.detail.text = e.target.value || '';
125
- viewer.drawFrame();
126
- }
127
- });
128
- textarea.addEventListener('blur', () => {
129
- hideTextArea();
130
- });
131
- const textEditCallback = (e) => {
132
- var _a;
133
- if ((e === null || e === void 0 ? void 0 : e.element) && ((_a = e === null || e === void 0 ? void 0 : e.element) === null || _a === void 0 ? void 0 : _a.type) === 'text') {
134
- activeElem = e.element;
135
- }
136
- showTextArea(e);
137
- };
138
- return {
139
- name: '@middleware/text-editor',
140
- use() {
141
- eventHub.on(middlewareEventTextEdit, textEditCallback);
142
- },
143
- disuse() {
144
- eventHub.off(middlewareEventTextEdit, textEditCallback);
145
- }
146
- };
147
- };