@idraw/core 0.3.1 → 0.4.0-alpha.2

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 (74) hide show
  1. package/dist/esm/index.d.ts +19 -55
  2. package/dist/esm/index.js +52 -188
  3. package/dist/esm/lib/cursor-image.d.ts +2 -0
  4. package/dist/esm/lib/cursor-image.js +2 -0
  5. package/dist/esm/lib/cursor.d.ts +16 -0
  6. package/dist/esm/lib/cursor.js +121 -0
  7. package/dist/esm/middleware/scaler/index.d.ts +2 -0
  8. package/dist/esm/middleware/scaler/index.js +22 -0
  9. package/dist/esm/middleware/scroller/config.d.ts +6 -0
  10. package/dist/esm/middleware/scroller/config.js +6 -0
  11. package/dist/esm/middleware/scroller/index.d.ts +2 -0
  12. package/dist/esm/middleware/scroller/index.js +97 -0
  13. package/dist/esm/middleware/scroller/util.d.ts +12 -0
  14. package/dist/esm/middleware/scroller/util.js +192 -0
  15. package/dist/esm/middleware/selector/config.d.ts +20 -0
  16. package/dist/esm/middleware/selector/config.js +20 -0
  17. package/dist/esm/middleware/selector/draw-wrapper.d.ts +22 -0
  18. package/dist/esm/middleware/selector/draw-wrapper.js +111 -0
  19. package/dist/esm/middleware/selector/index.d.ts +3 -0
  20. package/dist/esm/middleware/selector/index.js +454 -0
  21. package/dist/esm/middleware/selector/types.d.ts +40 -0
  22. package/dist/esm/middleware/selector/types.js +1 -0
  23. package/dist/esm/middleware/selector/util.d.ts +53 -0
  24. package/dist/esm/middleware/selector/util.js +789 -0
  25. package/dist/index.global.js +3825 -3991
  26. package/dist/index.global.min.js +1 -1
  27. package/package.json +7 -7
  28. package/LICENSE +0 -21
  29. package/dist/esm/constant/element.d.ts +0 -2
  30. package/dist/esm/constant/element.js +0 -10
  31. package/dist/esm/constant/static.d.ts +0 -11
  32. package/dist/esm/constant/static.js +0 -13
  33. package/dist/esm/lib/calculate.d.ts +0 -5
  34. package/dist/esm/lib/calculate.js +0 -64
  35. package/dist/esm/lib/check.d.ts +0 -28
  36. package/dist/esm/lib/check.js +0 -115
  37. package/dist/esm/lib/config.d.ts +0 -3
  38. package/dist/esm/lib/config.js +0 -20
  39. package/dist/esm/lib/core-event.d.ts +0 -49
  40. package/dist/esm/lib/core-event.js +0 -50
  41. package/dist/esm/lib/diff.d.ts +0 -6
  42. package/dist/esm/lib/diff.js +0 -82
  43. package/dist/esm/lib/draw/base.d.ts +0 -5
  44. package/dist/esm/lib/draw/base.js +0 -90
  45. package/dist/esm/lib/draw/wrapper.d.ts +0 -4
  46. package/dist/esm/lib/draw/wrapper.js +0 -168
  47. package/dist/esm/lib/element.d.ts +0 -15
  48. package/dist/esm/lib/element.js +0 -442
  49. package/dist/esm/lib/engine-temp.d.ts +0 -22
  50. package/dist/esm/lib/engine-temp.js +0 -29
  51. package/dist/esm/lib/engine.d.ts +0 -47
  52. package/dist/esm/lib/engine.js +0 -323
  53. package/dist/esm/lib/helper.d.ts +0 -30
  54. package/dist/esm/lib/helper.js +0 -363
  55. package/dist/esm/lib/index.d.ts +0 -13
  56. package/dist/esm/lib/index.js +0 -13
  57. package/dist/esm/lib/is.d.ts +0 -26
  58. package/dist/esm/lib/is.js +0 -100
  59. package/dist/esm/lib/mapper.d.ts +0 -26
  60. package/dist/esm/lib/mapper.js +0 -89
  61. package/dist/esm/lib/parse.d.ts +0 -2
  62. package/dist/esm/lib/parse.js +0 -32
  63. package/dist/esm/lib/temp.d.ts +0 -11
  64. package/dist/esm/lib/temp.js +0 -19
  65. package/dist/esm/lib/transform.d.ts +0 -4
  66. package/dist/esm/lib/transform.js +0 -20
  67. package/dist/esm/lib/value.d.ts +0 -2
  68. package/dist/esm/lib/value.js +0 -7
  69. package/dist/esm/mixins/element.d.ts +0 -18
  70. package/dist/esm/mixins/element.js +0 -168
  71. package/dist/esm/plugins/helper.d.ts +0 -12
  72. package/dist/esm/plugins/helper.js +0 -16
  73. package/dist/esm/util/filter.d.ts +0 -1
  74. package/dist/esm/util/filter.js +0 -3
@@ -0,0 +1,454 @@
1
+ import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, rotatePointInGroup, getGroupQueueFromList, findElementsFromList } 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 { key, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController } from './config';
5
+ export const MiddlewareSelector = (opts) => {
6
+ const { viewer, sharer, viewContent, calculator, eventHub } = opts;
7
+ const { helperContext } = viewContent;
8
+ let prevPoint = null;
9
+ let inBusyMode = null;
10
+ eventHub.on('select', ({ uuids }) => {
11
+ const actionType = sharer.getSharedStorage(keyActionType);
12
+ const data = sharer.getActiveStorage('data');
13
+ const elements = findElementsFromList(uuids, (data === null || data === void 0 ? void 0 : data.elements) || []);
14
+ let needRefresh = false;
15
+ if (!actionType && elements.length === 1) {
16
+ sharer.setSharedStorage(keyActionType, 'select');
17
+ needRefresh = true;
18
+ }
19
+ else if (actionType === 'select' && elements.length === 1) {
20
+ needRefresh = true;
21
+ }
22
+ if (needRefresh) {
23
+ const elem = elements[0];
24
+ const groupQueue = getGroupQueueFromList(elem.uuid, (data === null || data === void 0 ? void 0 : data.elements) || []);
25
+ sharer.setSharedStorage(keyGroupQueue, groupQueue);
26
+ updateSelectedElementList(elements);
27
+ viewer.drawFrame();
28
+ }
29
+ });
30
+ sharer.setSharedStorage(keyActionType, null);
31
+ const getActiveElements = () => {
32
+ return sharer.getSharedStorage(keySelectedElementList);
33
+ };
34
+ const pushGroupQueue = (elem) => {
35
+ let groupQueue = sharer.getSharedStorage(keyGroupQueue);
36
+ if (!Array.isArray(groupQueue)) {
37
+ groupQueue = [];
38
+ }
39
+ if (groupQueue.length > 0) {
40
+ if (isElementInGroup(elem, groupQueue[groupQueue.length - 1])) {
41
+ groupQueue.push(elem);
42
+ }
43
+ else {
44
+ groupQueue = [];
45
+ }
46
+ }
47
+ else if (groupQueue.length === 0) {
48
+ groupQueue.push(elem);
49
+ }
50
+ const vertexesList = calcElementQueueVertexesQueueInGroup(groupQueue);
51
+ sharer.setSharedStorage(keyGroupQueue, groupQueue);
52
+ sharer.setSharedStorage(keyGroupQueueVertexesList, vertexesList);
53
+ return groupQueue.length > 0;
54
+ };
55
+ const updateHoverElement = (elem) => {
56
+ sharer.setSharedStorage(keyHoverElement, elem);
57
+ let vertexes = null;
58
+ if (elem) {
59
+ vertexes = calcElementVertexesInGroup(elem, {
60
+ groupQueue: sharer.getSharedStorage(keyGroupQueue)
61
+ });
62
+ }
63
+ sharer.setSharedStorage(keyHoverElementVertexes, vertexes);
64
+ };
65
+ const updateSelectedElementList = (list, opts) => {
66
+ sharer.setSharedStorage(keySelectedElementList, list);
67
+ if (list.length === 1) {
68
+ const controller = calcElementSizeController(list[0], {
69
+ groupQueue: sharer.getSharedStorage(keyGroupQueue),
70
+ controllerSize: 10,
71
+ viewScaleInfo: sharer.getActiveViewScaleInfo()
72
+ });
73
+ sharer.setSharedStorage(keySelectedElementController, controller);
74
+ }
75
+ else {
76
+ sharer.setSharedStorage(keySelectedElementController, null);
77
+ }
78
+ if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
79
+ eventHub.trigger('select', { uuids: list.map((elem) => elem.uuid) });
80
+ }
81
+ };
82
+ const pointTargetBaseOptions = () => {
83
+ return {
84
+ ctx: helperContext,
85
+ calculator,
86
+ data: sharer.getActiveStorage('data'),
87
+ selectedElements: getActiveElements(),
88
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
89
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
90
+ groupQueue: sharer.getSharedStorage(keyGroupQueue),
91
+ areaSize: null,
92
+ selectedElementController: sharer.getSharedStorage(keySelectedElementController)
93
+ };
94
+ };
95
+ const clear = () => {
96
+ sharer.setSharedStorage(keyActionType, null);
97
+ sharer.setSharedStorage(keyResizeType, null);
98
+ sharer.setSharedStorage(keyAreaStart, null);
99
+ sharer.setSharedStorage(keyAreaEnd, null);
100
+ sharer.setSharedStorage(keyGroupQueue, []);
101
+ sharer.setSharedStorage(keyGroupQueueVertexesList, []);
102
+ sharer.setSharedStorage(keyHoverElement, null);
103
+ sharer.setSharedStorage(keyHoverElementVertexes, null);
104
+ sharer.setSharedStorage(keySelectedElementList, []);
105
+ sharer.setSharedStorage(keySelectedElementListVertexes, null);
106
+ sharer.setSharedStorage(keySelectedElementController, null);
107
+ };
108
+ clear();
109
+ return {
110
+ mode: key,
111
+ hover: (e) => {
112
+ var _a, _b;
113
+ const resizeType = sharer.getSharedStorage(keyResizeType);
114
+ const actionType = sharer.getSharedStorage(keyActionType);
115
+ const groupQueue = sharer.getSharedStorage(keyGroupQueue);
116
+ const triggerCursor = (target) => {
117
+ let cursor = target.type;
118
+ if (inBusyMode === null) {
119
+ eventHub.trigger('cursor', {
120
+ type: cursor,
121
+ groupQueue: target.groupQueue,
122
+ element: target.elements[0]
123
+ });
124
+ }
125
+ };
126
+ if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
127
+ const isInActiveGroup = isPointInViewActiveGroup(e.point, {
128
+ ctx: helperContext,
129
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
130
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
131
+ groupQueue: sharer.getSharedStorage(keyGroupQueue)
132
+ });
133
+ if (!isInActiveGroup) {
134
+ updateHoverElement(null);
135
+ viewer.drawFrame();
136
+ return;
137
+ }
138
+ const target = getPointTarget(e.point, pointTargetBaseOptions());
139
+ triggerCursor(target);
140
+ if (resizeType || ['area', 'drag', 'drag-list'].includes(actionType)) {
141
+ updateHoverElement(null);
142
+ viewer.drawFrame();
143
+ return;
144
+ }
145
+ if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
146
+ updateHoverElement(target.elements[0]);
147
+ viewer.drawFrame();
148
+ return;
149
+ }
150
+ updateHoverElement(null);
151
+ viewer.drawFrame();
152
+ return;
153
+ }
154
+ if (resizeType || ['area', 'drag', 'drag-list'].includes(actionType)) {
155
+ updateHoverElement(null);
156
+ return;
157
+ }
158
+ if (actionType === 'drag') {
159
+ updateHoverElement(null);
160
+ return;
161
+ }
162
+ const selectedElements = getActiveElements();
163
+ const viewScaleInfo = sharer.getActiveViewScaleInfo();
164
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
165
+ const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: calcSelectedElementsArea(selectedElements, {
166
+ viewScaleInfo,
167
+ viewSizeInfo,
168
+ calculator
169
+ }) }));
170
+ triggerCursor(target);
171
+ if (target.type === 'over-element' && ((_b = target === null || target === void 0 ? void 0 : target.elements) === null || _b === void 0 ? void 0 : _b.length) === 1) {
172
+ sharer.setSharedStorage(keyHoverElement, target.elements[0]);
173
+ updateHoverElement(target.elements[0]);
174
+ viewer.drawFrame();
175
+ return;
176
+ }
177
+ if (sharer.getSharedStorage(keyHoverElement)) {
178
+ updateHoverElement(null);
179
+ viewer.drawFrame();
180
+ return;
181
+ }
182
+ },
183
+ pointStart: (e) => {
184
+ var _a, _b, _c, _d;
185
+ prevPoint = e.point;
186
+ updateHoverElement(null);
187
+ const groupQueue = sharer.getSharedStorage(keyGroupQueue);
188
+ if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
189
+ if (isPointInViewActiveGroup(e.point, {
190
+ ctx: helperContext,
191
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
192
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
193
+ groupQueue
194
+ })) {
195
+ const target = getPointTarget(e.point, pointTargetBaseOptions());
196
+ updateHoverElement(null);
197
+ if (target.type === 'over-element' && ((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
198
+ updateSelectedElementList([target.elements[0]], { triggerEvent: true });
199
+ sharer.setSharedStorage(keyActionType, 'drag');
200
+ }
201
+ else if ((_b = target.type) === null || _b === void 0 ? void 0 : _b.startsWith('resize-')) {
202
+ sharer.setSharedStorage(keyResizeType, target.type);
203
+ sharer.setSharedStorage(keyActionType, 'resize');
204
+ }
205
+ else {
206
+ updateSelectedElementList([], { triggerEvent: true });
207
+ }
208
+ }
209
+ else {
210
+ clear();
211
+ }
212
+ viewer.drawFrame();
213
+ return;
214
+ }
215
+ const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
216
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
217
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
218
+ calculator
219
+ });
220
+ const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
221
+ if (target.type === 'list-area') {
222
+ sharer.setSharedStorage(keyActionType, 'drag-list');
223
+ }
224
+ 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) {
225
+ updateSelectedElementList([target.elements[0]], { triggerEvent: true });
226
+ sharer.setSharedStorage(keyActionType, 'drag');
227
+ }
228
+ else if ((_d = target.type) === null || _d === void 0 ? void 0 : _d.startsWith('resize-')) {
229
+ sharer.setSharedStorage(keyResizeType, target.type);
230
+ sharer.setSharedStorage(keyActionType, 'resize');
231
+ }
232
+ else {
233
+ clear();
234
+ sharer.setSharedStorage(keyActionType, 'area');
235
+ sharer.setSharedStorage(keyAreaStart, e.point);
236
+ updateSelectedElementList([], { triggerEvent: true });
237
+ }
238
+ viewer.drawFrame();
239
+ },
240
+ pointMove: (e) => {
241
+ const data = sharer.getActiveStorage('data');
242
+ const elems = getActiveElements();
243
+ const scale = sharer.getActiveStorage('scale') || 1;
244
+ const start = prevPoint;
245
+ const end = e.point;
246
+ const resizeType = sharer.getSharedStorage(keyResizeType);
247
+ const actionType = sharer.getSharedStorage(keyActionType);
248
+ const groupQueue = sharer.getSharedStorage(keyGroupQueue);
249
+ if (actionType === 'drag') {
250
+ inBusyMode = 'drag';
251
+ if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end) {
252
+ const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
253
+ elems[0].x += moveX / scale;
254
+ elems[0].y += moveY / scale;
255
+ updateSelectedElementList([elems[0]]);
256
+ }
257
+ viewer.drawFrame();
258
+ }
259
+ else if (actionType === 'drag-list') {
260
+ inBusyMode = 'drag-list';
261
+ if (data && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
262
+ const moveX = (end.x - start.x) / scale;
263
+ const moveY = (end.y - start.y) / scale;
264
+ elems.forEach((elem) => {
265
+ if (elem) {
266
+ elem.x += moveX;
267
+ elem.y += moveY;
268
+ }
269
+ });
270
+ sharer.setActiveStorage('data', data);
271
+ }
272
+ viewer.drawFrame();
273
+ }
274
+ else if (actionType === 'resize') {
275
+ if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
276
+ inBusyMode = 'resize';
277
+ const pointGroupQueue = [];
278
+ groupQueue.forEach((group) => {
279
+ const { x, y, w, h, angle = 0 } = group;
280
+ pointGroupQueue.push({
281
+ x,
282
+ y,
283
+ w,
284
+ h,
285
+ angle: 0 - angle
286
+ });
287
+ });
288
+ let resizeStart = start;
289
+ let resizeEnd = end;
290
+ if (groupQueue.length > 0) {
291
+ resizeStart = rotatePointInGroup(start, pointGroupQueue);
292
+ resizeEnd = rotatePointInGroup(end, pointGroupQueue);
293
+ }
294
+ const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
295
+ elems[0].x = resizedElemSize.x;
296
+ elems[0].y = resizedElemSize.y;
297
+ elems[0].w = resizedElemSize.w;
298
+ elems[0].h = resizedElemSize.h;
299
+ updateSelectedElementList([elems[0]]);
300
+ viewer.drawFrame();
301
+ }
302
+ }
303
+ else if (actionType === 'area') {
304
+ inBusyMode = 'area';
305
+ sharer.setSharedStorage(keyAreaEnd, e.point);
306
+ viewer.drawFrame();
307
+ }
308
+ prevPoint = e.point;
309
+ },
310
+ pointEnd(e) {
311
+ inBusyMode = null;
312
+ const data = sharer.getActiveStorage('data');
313
+ const resizeType = sharer.getSharedStorage(keyResizeType);
314
+ const actionType = sharer.getSharedStorage(keyActionType);
315
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
316
+ let needDrawFrame = false;
317
+ prevPoint = null;
318
+ if (actionType === 'resize' && resizeType) {
319
+ sharer.setSharedStorage(keyResizeType, null);
320
+ needDrawFrame = true;
321
+ }
322
+ else if (actionType === 'area') {
323
+ sharer.setSharedStorage(keyActionType, null);
324
+ if (data) {
325
+ const start = sharer.getSharedStorage(keyAreaStart);
326
+ const end = sharer.getSharedStorage(keyAreaEnd);
327
+ if (start && end) {
328
+ const { elements } = getSelectedListArea(data, {
329
+ start,
330
+ end,
331
+ calculator,
332
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
333
+ viewSizeInfo: sharer.getActiveViewSizeInfo()
334
+ });
335
+ if (elements.length > 0) {
336
+ sharer.setSharedStorage(keyActionType, 'drag-list');
337
+ updateSelectedElementList(elements, { triggerEvent: true });
338
+ needDrawFrame = true;
339
+ }
340
+ }
341
+ }
342
+ }
343
+ else if (actionType === 'drag-list') {
344
+ sharer.setSharedStorage(keyActionType, 'drag-list-end');
345
+ needDrawFrame = true;
346
+ }
347
+ else if (data) {
348
+ const result = calculator.getPointElement(e.point, {
349
+ data,
350
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
351
+ viewSizeInfo: sharer.getActiveViewSizeInfo()
352
+ });
353
+ if (result.element) {
354
+ sharer.setSharedStorage(keyActionType, 'select');
355
+ needDrawFrame = true;
356
+ }
357
+ else {
358
+ sharer.setSharedStorage(keyActionType, null);
359
+ }
360
+ }
361
+ if (sharer.getSharedStorage(keyActionType) === null) {
362
+ clear();
363
+ needDrawFrame = true;
364
+ }
365
+ const finalDrawFrame = () => {
366
+ if (!needDrawFrame) {
367
+ return;
368
+ }
369
+ if (data && Array.isArray(data === null || data === void 0 ? void 0 : data.elements) && ['drag', 'drag-list'].includes(actionType)) {
370
+ const viewInfo = calcElementsViewInfo(data.elements, viewSizeInfo, { extend: true });
371
+ sharer.setActiveStorage('contextHeight', viewInfo.contextSize.contextHeight);
372
+ sharer.setActiveStorage('contextWidth', viewInfo.contextSize.contextWidth);
373
+ }
374
+ if (data && ['drag', 'drag-list', 'drag-list-end', 'resize'].includes(actionType)) {
375
+ eventHub.trigger('change', { data });
376
+ }
377
+ viewer.drawFrame();
378
+ };
379
+ finalDrawFrame();
380
+ },
381
+ pointLeave() {
382
+ prevPoint = null;
383
+ clear();
384
+ viewer.drawFrame();
385
+ },
386
+ doubleClick(e) {
387
+ var _a;
388
+ const target = getPointTarget(e.point, pointTargetBaseOptions());
389
+ if (target.elements.length === 1 && ((_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.type) === 'group') {
390
+ const pushResult = pushGroupQueue(target.elements[0]);
391
+ if (pushResult === true) {
392
+ sharer.setSharedStorage(keyActionType, null);
393
+ viewer.drawFrame();
394
+ return;
395
+ }
396
+ }
397
+ sharer.setSharedStorage(keyActionType, null);
398
+ },
399
+ beforeDrawFrame({ snapshot }) {
400
+ const { activeStore, sharedStore } = snapshot;
401
+ const { scale, offsetLeft, offsetTop, offsetRight, offsetBottom, width, height, contextHeight, contextWidth, devicePixelRatio } = activeStore;
402
+ const sharer = opts.sharer;
403
+ const viewScaleInfo = { scale, offsetLeft, offsetTop, offsetRight, offsetBottom };
404
+ const viewSizeInfo = { width, height, contextHeight, contextWidth, devicePixelRatio };
405
+ const selectedElements = sharedStore[keySelectedElementList];
406
+ const elem = selectedElements[0];
407
+ const hoverElement = sharedStore[keyHoverElement];
408
+ const hoverElementVertexes = sharedStore[keyHoverElementVertexes];
409
+ const actionType = sharedStore[keyActionType];
410
+ const areaStart = sharedStore[keyAreaStart];
411
+ const areaEnd = sharedStore[keyAreaEnd];
412
+ const groupQueue = sharedStore[keyGroupQueue];
413
+ const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
414
+ const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
415
+ const selectedElementController = elem
416
+ ? calcElementSizeController(elem, {
417
+ groupQueue,
418
+ controllerSize: 10,
419
+ viewScaleInfo
420
+ })
421
+ : null;
422
+ if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
423
+ drawGroupQueueVertexesWrappers(helperContext, groupQueueVertexesList, drawBaseOpts);
424
+ if (hoverElement && actionType !== 'drag') {
425
+ drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
426
+ }
427
+ if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
428
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
429
+ }
430
+ }
431
+ else {
432
+ if (hoverElement && actionType !== 'drag') {
433
+ drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
434
+ }
435
+ if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
436
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
437
+ }
438
+ else if (actionType === 'area' && areaStart && areaEnd) {
439
+ drawArea(helperContext, { start: areaStart, end: areaEnd });
440
+ }
441
+ else if (['drag-list', 'drag-list-end'].includes(actionType)) {
442
+ const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
443
+ viewScaleInfo: sharer.getActiveViewScaleInfo(),
444
+ viewSizeInfo: sharer.getActiveViewSizeInfo(),
445
+ calculator
446
+ });
447
+ if (listAreaSize) {
448
+ drawListArea(helperContext, { areaSize: listAreaSize });
449
+ }
450
+ }
451
+ }
452
+ }
453
+ };
454
+ };
@@ -0,0 +1,40 @@
1
+ import type { ElementSizeController } from '@idraw/types';
2
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
3
+ import { Data, ElementSize, ElementType, Element, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware, ViewRectVertexes } from '@idraw/types';
4
+ export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware };
5
+ export type ControllerStyle = ElementSize & {
6
+ borderWidth: number;
7
+ borderColor: string;
8
+ background: string;
9
+ };
10
+ export type SelectedElementSizeController = Record<string, ControllerStyle>;
11
+ export type ResizeType = 'resize-left' | 'resize-right' | 'resize-top' | 'resize-bottom' | 'resize-top-left' | 'resize-top-right' | 'resize-bottom-left' | 'resize-bottom-right';
12
+ export type PointTargetType = null | ResizeType | 'list-area' | 'over-element';
13
+ export interface PointTarget {
14
+ type: PointTargetType;
15
+ elements: Element<ElementType>[];
16
+ groupQueue: Element<'group'>[];
17
+ elementVertexesList: ViewRectVertexes[];
18
+ groupQueueVertexesList: ViewRectVertexes[];
19
+ }
20
+ export type AreaSize = ElementSize;
21
+ export type ActionType = 'select' | 'drag-list' | 'drag-list-end' | 'drag' | 'hover' | 'resize' | 'area' | null;
22
+ export type DeepSelectorSharedStorage = {
23
+ [keyActionType]: ActionType | null;
24
+ [keyResizeType]: ResizeType | null;
25
+ [keyAreaStart]: Point | null;
26
+ [keyAreaEnd]: Point | null;
27
+ [keyGroupQueue]: Element<'group'>[];
28
+ [keyGroupQueueVertexesList]: ViewRectVertexes[];
29
+ [keyHoverElement]: Element<ElementType> | null;
30
+ [keyHoverElementVertexes]: ViewRectVertexes | null;
31
+ [keySelectedElementList]: Array<Element<ElementType>>;
32
+ [keySelectedElementListVertexes]: ViewRectVertexes | null;
33
+ [keySelectedElementController]: ElementSizeController | null;
34
+ [keyDebugElemCenter]: PointSize | null;
35
+ [keyDebugEnd0]: PointSize | null;
36
+ [keyDebugEndHorizontal]: PointSize | null;
37
+ [keyDebugEndVertical]: PointSize | null;
38
+ [keyDebugStartHorizontal]: PointSize | null;
39
+ [keyDebugStartVertical]: PointSize | null;
40
+ };
@@ -0,0 +1 @@
1
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
@@ -0,0 +1,53 @@
1
+ import type { ViewRectVertexes, ElementSizeController, StoreSharer } from '@idraw/types';
2
+ import type { Data, Element, ViewContext2D, Point, PointSize, PointTarget, ViewScaleInfo, ViewCalculator, ElementType, ElementSize, ResizeType, AreaSize, ViewSizeInfo } from './types';
3
+ export declare function isPointInViewActiveVertexes(p: PointSize, opts: {
4
+ ctx: ViewContext2D;
5
+ vertexes: ViewRectVertexes;
6
+ viewScaleInfo: ViewScaleInfo;
7
+ viewSizeInfo: ViewSizeInfo;
8
+ }): boolean;
9
+ export declare function isPointInViewActiveGroup(p: PointSize, opts: {
10
+ ctx: ViewContext2D;
11
+ viewScaleInfo: ViewScaleInfo;
12
+ viewSizeInfo: ViewSizeInfo;
13
+ groupQueue: Element<'group'>[] | null;
14
+ }): boolean;
15
+ export declare function getPointTarget(p: PointSize, opts: {
16
+ ctx: ViewContext2D;
17
+ data?: Data | null;
18
+ selectedElements?: Element<ElementType>[];
19
+ areaSize?: AreaSize | null;
20
+ viewScaleInfo: ViewScaleInfo;
21
+ viewSizeInfo: ViewSizeInfo;
22
+ calculator: ViewCalculator;
23
+ groupQueue: Element<'group'>[] | null;
24
+ selectedElementController: ElementSizeController | null;
25
+ }): PointTarget;
26
+ export declare function resizeElement(elem: Element<ElementType>, opts: {
27
+ start: PointSize;
28
+ end: PointSize;
29
+ resizeType: ResizeType;
30
+ scale: number;
31
+ sharer: StoreSharer;
32
+ }): ElementSize;
33
+ export declare function getSelectedListArea(data: Data, opts: {
34
+ start: Point;
35
+ end: Point;
36
+ viewScaleInfo: ViewScaleInfo;
37
+ viewSizeInfo: ViewSizeInfo;
38
+ calculator: ViewCalculator;
39
+ }): {
40
+ indexes: number[];
41
+ uuids: string[];
42
+ elements: Element<ElementType>[];
43
+ };
44
+ export declare function calcSelectedElementsArea(elements: Element<ElementType>[], opts: {
45
+ viewScaleInfo: ViewScaleInfo;
46
+ viewSizeInfo: ViewSizeInfo;
47
+ calculator: ViewCalculator;
48
+ }): AreaSize | null;
49
+ export declare function isElementInGroup(elem: Element<ElementType>, group: Element<'group'>): boolean;
50
+ export declare function calcMoveInGroup(start: PointSize, end: PointSize, groupQueue: Element<'group'>[]): {
51
+ moveX: number;
52
+ moveY: number;
53
+ };