@idraw/core 0.4.0-beta.3 → 0.4.0-beta.30

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 (63) hide show
  1. package/dist/esm/config.d.ts +1 -0
  2. package/dist/esm/config.js +1 -0
  3. package/dist/esm/index.d.ts +15 -5
  4. package/dist/esm/index.js +29 -8
  5. package/dist/esm/lib/cursor-image.d.ts +1 -0
  6. package/dist/esm/lib/cursor-image.js +1 -0
  7. package/dist/esm/lib/cursor.d.ts +3 -12
  8. package/dist/esm/lib/cursor.js +136 -112
  9. package/dist/esm/middleware/dragger/index.d.ts +2 -2
  10. package/dist/esm/middleware/dragger/index.js +1 -0
  11. package/dist/esm/middleware/info/draw-info.d.ts +31 -0
  12. package/dist/esm/middleware/info/draw-info.js +110 -0
  13. package/dist/esm/middleware/info/index.d.ts +3 -0
  14. package/dist/esm/middleware/info/index.js +110 -0
  15. package/dist/esm/middleware/info/types.d.ts +3 -0
  16. package/dist/esm/middleware/info/types.js +1 -0
  17. package/dist/esm/middleware/layout-selector/config.d.ts +9 -0
  18. package/dist/esm/middleware/layout-selector/config.js +9 -0
  19. package/dist/esm/middleware/layout-selector/index.d.ts +5 -0
  20. package/dist/esm/middleware/layout-selector/index.js +332 -0
  21. package/dist/esm/middleware/layout-selector/types.d.ts +15 -0
  22. package/dist/esm/middleware/layout-selector/types.js +2 -0
  23. package/dist/esm/middleware/layout-selector/util.d.ts +8 -0
  24. package/dist/esm/middleware/layout-selector/util.js +108 -0
  25. package/dist/esm/middleware/ruler/index.d.ts +3 -2
  26. package/dist/esm/middleware/ruler/index.js +12 -9
  27. package/dist/esm/middleware/ruler/types.d.ts +3 -0
  28. package/dist/esm/middleware/ruler/types.js +1 -0
  29. package/dist/esm/middleware/ruler/util.d.ts +15 -4
  30. package/dist/esm/middleware/ruler/util.js +81 -4
  31. package/dist/esm/middleware/scaler/index.d.ts +2 -2
  32. package/dist/esm/middleware/scaler/index.js +1 -0
  33. package/dist/esm/middleware/scroller/config.d.ts +2 -0
  34. package/dist/esm/middleware/scroller/config.js +2 -0
  35. package/dist/esm/middleware/scroller/index.d.ts +2 -1
  36. package/dist/esm/middleware/scroller/index.js +33 -5
  37. package/dist/esm/middleware/scroller/types.d.ts +11 -0
  38. package/dist/esm/middleware/scroller/types.js +1 -0
  39. package/dist/esm/middleware/scroller/util.d.ts +1 -1
  40. package/dist/esm/middleware/scroller/util.js +22 -17
  41. package/dist/esm/middleware/selector/config.d.ts +12 -0
  42. package/dist/esm/middleware/selector/config.js +12 -0
  43. package/dist/esm/middleware/selector/draw-auxiliary.d.ts +7 -0
  44. package/dist/esm/middleware/selector/draw-auxiliary.js +46 -0
  45. package/dist/esm/middleware/selector/draw-base.d.ts +30 -0
  46. package/dist/esm/middleware/selector/draw-base.js +100 -0
  47. package/dist/esm/middleware/selector/draw-reference.d.ts +5 -0
  48. package/dist/esm/middleware/selector/draw-reference.js +31 -0
  49. package/dist/esm/middleware/selector/draw-wrapper.d.ts +9 -1
  50. package/dist/esm/middleware/selector/draw-wrapper.js +34 -26
  51. package/dist/esm/middleware/selector/index.d.ts +7 -4
  52. package/dist/esm/middleware/selector/index.js +280 -45
  53. package/dist/esm/middleware/selector/reference.d.ts +13 -0
  54. package/dist/esm/middleware/selector/reference.js +267 -0
  55. package/dist/esm/middleware/selector/types.d.ts +9 -4
  56. package/dist/esm/middleware/selector/types.js +2 -1
  57. package/dist/esm/middleware/selector/util.d.ts +11 -2
  58. package/dist/esm/middleware/selector/util.js +36 -14
  59. package/dist/esm/middleware/text-editor/index.d.ts +20 -2
  60. package/dist/esm/middleware/text-editor/index.js +92 -16
  61. package/dist/index.global.js +3685 -953
  62. package/dist/index.global.min.js +1 -1
  63. package/package.json +5 -5
@@ -1,15 +1,21 @@
1
- import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions } 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';
1
+ import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement } from '@idraw/util';
2
+ import { drawHoverVertexesWrapper, drawLockVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
3
+ import { drawReferenceLines } from './draw-reference';
4
+ import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
5
+ import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize } from './config';
6
+ import { calcReferenceInfo } from './reference';
5
7
  import { middlewareEventTextEdit } from '../text-editor';
6
- export const middlewareEventSelect = '@middleware/select';
8
+ import { eventChange } from '../../config';
9
+ import { keyLayoutIsSelected } from '../layout-selector';
10
+ export { keySelectedElementList, keyHoverElement, keyActionType, keyResizeType, keyGroupQueue };
11
+ export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid };
7
12
  export const MiddlewareSelector = (opts) => {
8
13
  const { viewer, sharer, boardContent, calculator, eventHub } = opts;
9
- const { helperContext } = boardContent;
14
+ const { overlayContext } = boardContent;
10
15
  let prevPoint = null;
11
16
  let inBusyMode = null;
12
17
  sharer.setSharedStorage(keyActionType, null);
18
+ sharer.setSharedStorage(keyEnableSnapToGrid, true);
13
19
  const getActiveElements = () => {
14
20
  return sharer.getSharedStorage(keySelectedElementList);
15
21
  };
@@ -45,17 +51,20 @@ export const MiddlewareSelector = (opts) => {
45
51
  sharer.setSharedStorage(keyHoverElementVertexes, vertexes);
46
52
  };
47
53
  const updateSelectedElementList = (list, opts) => {
54
+ var _a;
48
55
  sharer.setSharedStorage(keySelectedElementList, list);
49
56
  if (list.length === 1) {
50
57
  const controller = calcElementSizeController(list[0], {
51
58
  groupQueue: sharer.getSharedStorage(keyGroupQueue),
52
- controllerSize: 10,
59
+ controllerSize,
53
60
  viewScaleInfo: sharer.getActiveViewScaleInfo()
54
61
  });
55
62
  sharer.setSharedStorage(keySelectedElementController, controller);
63
+ sharer.setSharedStorage(keySelectedElementPosition, getElementPositionFromList(list[0].uuid, ((_a = sharer.getActiveStorage('data')) === null || _a === void 0 ? void 0 : _a.elements) || []));
56
64
  }
57
65
  else {
58
66
  sharer.setSharedStorage(keySelectedElementController, null);
67
+ sharer.setSharedStorage(keySelectedElementPosition, []);
59
68
  }
60
69
  if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
61
70
  eventHub.trigger(middlewareEventSelect, { uuids: list.map((elem) => elem.uuid) });
@@ -63,7 +72,7 @@ export const MiddlewareSelector = (opts) => {
63
72
  };
64
73
  const pointTargetBaseOptions = () => {
65
74
  return {
66
- ctx: helperContext,
75
+ ctx: overlayContext,
67
76
  calculator,
68
77
  data: sharer.getActiveStorage('data'),
69
78
  selectedElements: getActiveElements(),
@@ -71,7 +80,8 @@ export const MiddlewareSelector = (opts) => {
71
80
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
72
81
  groupQueue: sharer.getSharedStorage(keyGroupQueue),
73
82
  areaSize: null,
74
- selectedElementController: sharer.getSharedStorage(keySelectedElementController)
83
+ selectedElementController: sharer.getSharedStorage(keySelectedElementController),
84
+ selectedElementPosition: sharer.getSharedStorage(keySelectedElementPosition)
75
85
  };
76
86
  };
77
87
  const clear = () => {
@@ -86,6 +96,9 @@ export const MiddlewareSelector = (opts) => {
86
96
  sharer.setSharedStorage(keySelectedElementList, []);
87
97
  sharer.setSharedStorage(keySelectedElementListVertexes, null);
88
98
  sharer.setSharedStorage(keySelectedElementController, null);
99
+ sharer.setSharedStorage(keySelectedElementPosition, []);
100
+ sharer.setSharedStorage(keyIsMoving, null);
101
+ sharer.setSharedStorage(keyEnableSelectInGroup, null);
89
102
  };
90
103
  clear();
91
104
  const selectCallback = ({ uuids, positions }) => {
@@ -114,19 +127,40 @@ export const MiddlewareSelector = (opts) => {
114
127
  viewer.drawFrame();
115
128
  }
116
129
  };
130
+ const selectClearCallback = () => {
131
+ clear();
132
+ viewer.drawFrame();
133
+ };
134
+ const setSnapToSnapCallback = (e) => {
135
+ sharer.setSharedStorage(keyEnableSnapToGrid, !!e.enable);
136
+ };
137
+ const selectInGroupCallback = (e) => {
138
+ sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable);
139
+ };
117
140
  return {
141
+ name: '@middleware/selector',
118
142
  use() {
119
143
  eventHub.on(middlewareEventSelect, selectCallback);
144
+ eventHub.on(middlewareEventSelectClear, selectClearCallback);
145
+ eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
146
+ eventHub.on(middlewareEventSnapToGrid, setSnapToSnapCallback);
120
147
  },
121
148
  disuse() {
122
149
  eventHub.off(middlewareEventSelect, selectCallback);
150
+ eventHub.off(middlewareEventSelectClear, selectClearCallback);
151
+ eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
152
+ eventHub.off(middlewareEventSnapToGrid, setSnapToSnapCallback);
123
153
  },
124
154
  hover: (e) => {
125
- var _a, _b;
155
+ var _a, _b, _c, _d, _e;
156
+ const layoutIsSelected = sharer.getSharedStorage(keyLayoutIsSelected);
126
157
  const resizeType = sharer.getSharedStorage(keyResizeType);
127
158
  const actionType = sharer.getSharedStorage(keyActionType);
128
159
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
129
160
  const triggerCursor = (target) => {
161
+ if (layoutIsSelected === true) {
162
+ return;
163
+ }
130
164
  const cursor = target.type;
131
165
  if (inBusyMode === null) {
132
166
  eventHub.trigger('cursor', {
@@ -138,7 +172,7 @@ export const MiddlewareSelector = (opts) => {
138
172
  };
139
173
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
140
174
  const isInActiveGroup = isPointInViewActiveGroup(e.point, {
141
- ctx: helperContext,
175
+ ctx: overlayContext,
142
176
  viewScaleInfo: sharer.getActiveViewScaleInfo(),
143
177
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
144
178
  groupQueue: sharer.getSharedStorage(keyGroupQueue)
@@ -181,8 +215,27 @@ export const MiddlewareSelector = (opts) => {
181
215
  calculator
182
216
  }) }));
183
217
  triggerCursor(target);
184
- if (target.type === 'over-element' && ((_b = target === null || target === void 0 ? void 0 : target.elements) === null || _b === void 0 ? void 0 : _b.length) === 1) {
185
- sharer.setSharedStorage(keyHoverElement, target.elements[0]);
218
+ if (target.type === null) {
219
+ if (sharer.getSharedStorage(keyHoverElement) || sharer.getSharedStorage(keyHoverElementVertexes)) {
220
+ sharer.setSharedStorage(keyHoverElement, null);
221
+ sharer.setSharedStorage(keyHoverElementVertexes, null);
222
+ viewer.drawFrame();
223
+ }
224
+ return;
225
+ }
226
+ if (target.type === 'over-element' &&
227
+ sharer.getSharedStorage(keyActionType) === 'select' &&
228
+ target.elements.length === 1 &&
229
+ target.elements[0].uuid === ((_c = (_b = getActiveElements()) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.uuid)) {
230
+ return;
231
+ }
232
+ if (target.type === 'over-element' &&
233
+ sharer.getSharedStorage(keyActionType) === null &&
234
+ target.elements.length === 1 &&
235
+ target.elements[0].uuid === ((_d = sharer.getSharedStorage(keyHoverElement)) === null || _d === void 0 ? void 0 : _d.uuid)) {
236
+ return;
237
+ }
238
+ if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
186
239
  updateHoverElement(target.elements[0]);
187
240
  viewer.drawFrame();
188
241
  return;
@@ -194,24 +247,28 @@ export const MiddlewareSelector = (opts) => {
194
247
  }
195
248
  },
196
249
  pointStart: (e) => {
197
- var _a, _b, _c, _d;
250
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
198
251
  prevPoint = e.point;
199
- updateHoverElement(null);
200
252
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
201
253
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
202
254
  if (isPointInViewActiveGroup(e.point, {
203
- ctx: helperContext,
255
+ ctx: overlayContext,
204
256
  viewScaleInfo: sharer.getActiveViewScaleInfo(),
205
257
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
206
258
  groupQueue
207
259
  })) {
208
260
  const target = getPointTarget(e.point, pointTargetBaseOptions());
209
- updateHoverElement(null);
210
- if (target.type === 'over-element' && ((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
261
+ if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_c = (_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.lock) === true) {
262
+ return;
263
+ }
264
+ else {
265
+ updateHoverElement(null);
266
+ }
267
+ if (target.type === 'over-element' && ((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
211
268
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
212
269
  sharer.setSharedStorage(keyActionType, 'drag');
213
270
  }
214
- else if ((_b = target.type) === null || _b === void 0 ? void 0 : _b.startsWith('resize-')) {
271
+ else if ((_e = target.type) === null || _e === void 0 ? void 0 : _e.startsWith('resize-')) {
215
272
  sharer.setSharedStorage(keyResizeType, target.type);
216
273
  sharer.setSharedStorage(keyActionType, 'resize');
217
274
  }
@@ -231,14 +288,20 @@ export const MiddlewareSelector = (opts) => {
231
288
  calculator
232
289
  });
233
290
  const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
291
+ if (((_f = target === null || target === void 0 ? void 0 : target.elements) === null || _f === void 0 ? void 0 : _f.length) === 1 && ((_h = (_g = target.elements[0]) === null || _g === void 0 ? void 0 : _g.operations) === null || _h === void 0 ? void 0 : _h.lock) === true) {
292
+ return;
293
+ }
294
+ else {
295
+ updateHoverElement(null);
296
+ }
234
297
  if (target.type === 'list-area') {
235
298
  sharer.setSharedStorage(keyActionType, 'drag-list');
236
299
  }
237
- 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) {
300
+ else if (target.type === 'over-element' && ((_j = target === null || target === void 0 ? void 0 : target.elements) === null || _j === void 0 ? void 0 : _j.length) === 1) {
238
301
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
239
302
  sharer.setSharedStorage(keyActionType, 'drag');
240
303
  }
241
- else if ((_d = target.type) === null || _d === void 0 ? void 0 : _d.startsWith('resize-')) {
304
+ else if ((_k = target.type) === null || _k === void 0 ? void 0 : _k.startsWith('resize-')) {
242
305
  sharer.setSharedStorage(keyResizeType, target.type);
243
306
  sharer.setSharedStorage(keyActionType, 'resize');
244
307
  }
@@ -251,21 +314,61 @@ export const MiddlewareSelector = (opts) => {
251
314
  viewer.drawFrame();
252
315
  },
253
316
  pointMove: (e) => {
317
+ var _a, _b, _c;
318
+ sharer.setSharedStorage(keyIsMoving, true);
254
319
  const data = sharer.getActiveStorage('data');
255
320
  const elems = getActiveElements();
256
321
  const scale = sharer.getActiveStorage('scale') || 1;
322
+ const viewScaleInfo = sharer.getActiveViewScaleInfo();
323
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
257
324
  const start = prevPoint;
258
325
  const end = e.point;
259
326
  const resizeType = sharer.getSharedStorage(keyResizeType);
260
327
  const actionType = sharer.getSharedStorage(keyActionType);
261
328
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
329
+ const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
262
330
  if (actionType === 'drag') {
263
331
  inBusyMode = 'drag';
264
- if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end) {
332
+ if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end && ((_b = (_a = elems[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.lock) !== true) {
265
333
  const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
266
- elems[0].x += moveX / scale;
267
- elems[0].y += moveY / scale;
334
+ let totalMoveX = calculator.toGridNum(moveX / scale);
335
+ let totalMoveY = calculator.toGridNum(moveY / scale);
336
+ if (enableSnapToGrid === true) {
337
+ const referenceInfo = calcReferenceInfo(elems[0].uuid, {
338
+ calculator,
339
+ data,
340
+ groupQueue,
341
+ viewScaleInfo,
342
+ viewSizeInfo
343
+ });
344
+ try {
345
+ if (referenceInfo) {
346
+ if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
347
+ totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
348
+ }
349
+ if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
350
+ totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
351
+ }
352
+ }
353
+ }
354
+ catch (err) {
355
+ console.error(err);
356
+ }
357
+ }
358
+ elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
359
+ elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
268
360
  updateSelectedElementList([elems[0]]);
361
+ calculator.modifyViewVisibleInfoMap(data, {
362
+ modifyOptions: {
363
+ type: 'updateElement',
364
+ content: {
365
+ element: elems[0],
366
+ position: sharer.getSharedStorage(keySelectedElementPosition) || []
367
+ }
368
+ },
369
+ viewSizeInfo,
370
+ viewScaleInfo
371
+ });
269
372
  }
270
373
  viewer.drawFrame();
271
374
  }
@@ -275,9 +378,21 @@ export const MiddlewareSelector = (opts) => {
275
378
  const moveX = (end.x - start.x) / scale;
276
379
  const moveY = (end.y - start.y) / scale;
277
380
  elems.forEach((elem) => {
278
- if (elem) {
279
- elem.x += moveX;
280
- elem.y += moveY;
381
+ var _a;
382
+ if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.lock) !== true) {
383
+ elem.x = calculator.toGridNum(elem.x + moveX);
384
+ elem.y = calculator.toGridNum(elem.y + moveY);
385
+ calculator.modifyViewVisibleInfoMap(data, {
386
+ modifyOptions: {
387
+ type: 'updateElement',
388
+ content: {
389
+ element: elem,
390
+ position: getElementPositionFromList(elem.uuid, data.elements) || []
391
+ }
392
+ },
393
+ viewSizeInfo,
394
+ viewScaleInfo
395
+ });
281
396
  }
282
397
  });
283
398
  sharer.setActiveStorage('data', data);
@@ -304,12 +419,54 @@ export const MiddlewareSelector = (opts) => {
304
419
  resizeStart = rotatePointInGroup(start, pointGroupQueue);
305
420
  resizeEnd = rotatePointInGroup(end, pointGroupQueue);
306
421
  }
307
- const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
308
- elems[0].x = resizedElemSize.x;
309
- elems[0].y = resizedElemSize.y;
310
- elems[0].w = resizedElemSize.w;
311
- elems[0].h = resizedElemSize.h;
422
+ if (resizeType === 'resize-rotate') {
423
+ const controller = sharer.getSharedStorage(keySelectedElementController);
424
+ const viewVertexes = [
425
+ controller.topLeft.center,
426
+ controller.topRight.center,
427
+ controller.bottomLeft.center,
428
+ controller.bottomRight.center
429
+ ];
430
+ const viewCenter = calcElementCenterFromVertexes(viewVertexes);
431
+ const resizedElemSize = rotateElement(elems[0], {
432
+ center: viewCenter,
433
+ viewScaleInfo,
434
+ viewSizeInfo,
435
+ start,
436
+ end,
437
+ resizeType,
438
+ sharer
439
+ });
440
+ elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
441
+ }
442
+ else {
443
+ const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
444
+ const calcOpts = { ignore: !!elems[0].angle };
445
+ elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
446
+ elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
447
+ if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
448
+ deepResizeGroupElement(elems[0], {
449
+ w: calculator.toGridNum(resizedElemSize.w, calcOpts),
450
+ h: calculator.toGridNum(resizedElemSize.h, calcOpts)
451
+ });
452
+ }
453
+ else {
454
+ elems[0].w = calculator.toGridNum(resizedElemSize.w, calcOpts);
455
+ elems[0].h = calculator.toGridNum(resizedElemSize.h, calcOpts);
456
+ }
457
+ }
312
458
  updateSelectedElementList([elems[0]]);
459
+ calculator.modifyViewVisibleInfoMap(data, {
460
+ modifyOptions: {
461
+ type: 'updateElement',
462
+ content: {
463
+ element: elems[0],
464
+ position: sharer.getSharedStorage(keySelectedElementPosition) || []
465
+ }
466
+ },
467
+ viewSizeInfo,
468
+ viewScaleInfo
469
+ });
313
470
  viewer.drawFrame();
314
471
  }
315
472
  }
@@ -322,7 +479,10 @@ export const MiddlewareSelector = (opts) => {
322
479
  },
323
480
  pointEnd(e) {
324
481
  inBusyMode = null;
482
+ sharer.setSharedStorage(keyIsMoving, false);
325
483
  const data = sharer.getActiveStorage('data');
484
+ const selectedElements = sharer.getSharedStorage(keySelectedElementList);
485
+ const hoverElement = sharer.getSharedStorage(keyHoverElement);
326
486
  const resizeType = sharer.getSharedStorage(keyResizeType);
327
487
  const actionType = sharer.getSharedStorage(keyActionType);
328
488
  const viewSizeInfo = sharer.getActiveViewSizeInfo();
@@ -385,7 +545,11 @@ export const MiddlewareSelector = (opts) => {
385
545
  sharer.setActiveStorage('contextWidth', viewInfo.contextSize.contextWidth);
386
546
  }
387
547
  if (data && ['drag', 'drag-list', 'drag-list-end', 'resize'].includes(actionType)) {
388
- eventHub.trigger('change', { data });
548
+ let type = 'dragElement';
549
+ if (type === 'resize') {
550
+ type = 'resizeElement';
551
+ }
552
+ eventHub.trigger(eventChange, { data, type, selectedElements, hoverElement });
389
553
  }
390
554
  viewer.drawFrame();
391
555
  };
@@ -397,9 +561,17 @@ export const MiddlewareSelector = (opts) => {
397
561
  viewer.drawFrame();
398
562
  },
399
563
  doubleClick(e) {
400
- var _a, _b;
564
+ var _a, _b, _c, _d, _e, _f, _g, _h;
565
+ if (sharer.getSharedStorage(keyEnableSelectInGroup) === false) {
566
+ return;
567
+ }
401
568
  const target = getPointTarget(e.point, pointTargetBaseOptions());
402
- if (target.elements.length === 1 && ((_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.type) === 'group') {
569
+ sharer.setSharedStorage(keySelectedElementController, null);
570
+ sharer.setSharedStorage(keySelectedElementList, []);
571
+ if (target.elements.length === 1 && ((_b = (_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.lock) === true) {
572
+ return;
573
+ }
574
+ if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
403
575
  const pushResult = pushGroupQueue(target.elements[0]);
404
576
  if (pushResult === true) {
405
577
  sharer.setSharedStorage(keyActionType, null);
@@ -407,16 +579,18 @@ export const MiddlewareSelector = (opts) => {
407
579
  return;
408
580
  }
409
581
  }
410
- else if (target.elements.length === 1 && ((_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.type) === 'text') {
582
+ else if (target.elements.length === 1 && ((_d = target.elements[0]) === null || _d === void 0 ? void 0 : _d.type) === 'text' && !((_f = (_e = target.elements[0]) === null || _e === void 0 ? void 0 : _e.operations) === null || _f === void 0 ? void 0 : _f.invisible)) {
411
583
  eventHub.trigger(middlewareEventTextEdit, {
412
584
  element: target.elements[0],
413
585
  groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
586
+ position: getElementPositionFromList((_g = target.elements[0]) === null || _g === void 0 ? void 0 : _g.uuid, ((_h = sharer.getActiveStorage('data')) === null || _h === void 0 ? void 0 : _h.elements) || []),
414
587
  viewScaleInfo: sharer.getActiveViewScaleInfo()
415
588
  });
416
589
  }
417
590
  sharer.setSharedStorage(keyActionType, null);
418
591
  },
419
592
  beforeDrawFrame({ snapshot }) {
593
+ var _a;
420
594
  const { activeStore, sharedStore } = snapshot;
421
595
  const { scale, offsetLeft, offsetTop, offsetRight, offsetBottom, width, height, contextHeight, contextWidth, devicePixelRatio } = activeStore;
422
596
  const sharer = opts.sharer;
@@ -431,6 +605,8 @@ export const MiddlewareSelector = (opts) => {
431
605
  const areaEnd = sharedStore[keyAreaEnd];
432
606
  const groupQueue = sharedStore[keyGroupQueue];
433
607
  const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
608
+ const isMoving = sharedStore[keyIsMoving];
609
+ const enableSnapToGrid = sharedStore[keyEnableSnapToGrid];
434
610
  const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
435
611
  const selectedElementController = elem
436
612
  ? calcElementSizeController(elem, {
@@ -439,24 +615,83 @@ export const MiddlewareSelector = (opts) => {
439
615
  viewScaleInfo
440
616
  })
441
617
  : null;
618
+ const isLock = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.lock);
442
619
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
443
- drawGroupQueueVertexesWrappers(helperContext, groupQueueVertexesList, drawBaseOpts);
620
+ drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
444
621
  if (hoverElement && actionType !== 'drag') {
445
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
622
+ if (isLock) {
623
+ drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
624
+ groupQueue,
625
+ controllerSize: 10,
626
+ viewScaleInfo
627
+ }) }));
628
+ }
629
+ else {
630
+ drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
631
+ }
446
632
  }
447
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
448
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
633
+ if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
634
+ drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag' }));
635
+ if (actionType === 'drag') {
636
+ if (enableSnapToGrid === true) {
637
+ const referenceInfo = calcReferenceInfo(elem.uuid, {
638
+ calculator,
639
+ data: activeStore.data,
640
+ groupQueue,
641
+ viewScaleInfo,
642
+ viewSizeInfo
643
+ });
644
+ if (referenceInfo) {
645
+ const { offsetX, offsetY, xLines, yLines } = referenceInfo;
646
+ if (offsetX === 0 || offsetY === 0) {
647
+ drawReferenceLines(overlayContext, {
648
+ xLines,
649
+ yLines
650
+ });
651
+ }
652
+ }
653
+ }
654
+ }
449
655
  }
450
656
  }
451
657
  else {
452
658
  if (hoverElement && actionType !== 'drag') {
453
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
659
+ if (isLock) {
660
+ drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
661
+ groupQueue,
662
+ controllerSize: 10,
663
+ viewScaleInfo
664
+ }) }));
665
+ }
666
+ else {
667
+ drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
668
+ }
454
669
  }
455
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
456
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
670
+ if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
671
+ drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag' }));
672
+ if (actionType === 'drag') {
673
+ if (enableSnapToGrid === true) {
674
+ const referenceInfo = calcReferenceInfo(elem.uuid, {
675
+ calculator,
676
+ data: activeStore.data,
677
+ groupQueue,
678
+ viewScaleInfo,
679
+ viewSizeInfo
680
+ });
681
+ if (referenceInfo) {
682
+ const { offsetX, offsetY, xLines, yLines } = referenceInfo;
683
+ if (offsetX === 0 || offsetY === 0) {
684
+ drawReferenceLines(overlayContext, {
685
+ xLines,
686
+ yLines
687
+ });
688
+ }
689
+ }
690
+ }
691
+ }
457
692
  }
458
693
  else if (actionType === 'area' && areaStart && areaEnd) {
459
- drawArea(helperContext, { start: areaStart, end: areaEnd });
694
+ drawArea(overlayContext, { start: areaStart, end: areaEnd });
460
695
  }
461
696
  else if (['drag-list', 'drag-list-end'].includes(actionType)) {
462
697
  const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
@@ -465,7 +700,7 @@ export const MiddlewareSelector = (opts) => {
465
700
  calculator
466
701
  });
467
702
  if (listAreaSize) {
468
- drawListArea(helperContext, { areaSize: listAreaSize });
703
+ drawListArea(overlayContext, { areaSize: listAreaSize });
469
704
  }
470
705
  }
471
706
  }
@@ -0,0 +1,13 @@
1
+ import type { Data, Element, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator } from '@idraw/types';
2
+ export declare function calcReferenceInfo(uuid: string, opts: {
3
+ data: Data;
4
+ groupQueue: Element<'group'>[];
5
+ calculator: ViewCalculator;
6
+ viewScaleInfo: ViewScaleInfo;
7
+ viewSizeInfo: ViewSizeInfo;
8
+ }): {
9
+ offsetX: number | null;
10
+ offsetY: number | null;
11
+ yLines: PointSize[][];
12
+ xLines: PointSize[][];
13
+ } | null;