@idraw/core 0.4.0-beta.2 → 0.4.0-beta.20

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 (60) 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 +17 -5
  4. package/dist/esm/index.js +35 -10
  5. package/dist/esm/lib/cursor-image.d.ts +3 -0
  6. package/dist/esm/lib/cursor-image.js +3 -0
  7. package/dist/esm/lib/cursor.d.ts +3 -12
  8. package/dist/esm/lib/cursor.js +138 -106
  9. package/dist/esm/middleware/dragger/index.d.ts +7 -0
  10. package/dist/esm/middleware/dragger/index.js +43 -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 +6 -0
  18. package/dist/esm/middleware/layout-selector/config.js +6 -0
  19. package/dist/esm/middleware/layout-selector/index.d.ts +3 -0
  20. package/dist/esm/middleware/layout-selector/index.js +251 -0
  21. package/dist/esm/middleware/layout-selector/types.d.ts +12 -0
  22. package/dist/esm/middleware/layout-selector/types.js +2 -0
  23. package/dist/esm/middleware/layout-selector/util.d.ts +5 -0
  24. package/dist/esm/middleware/layout-selector/util.js +93 -0
  25. package/dist/esm/middleware/ruler/index.d.ts +3 -2
  26. package/dist/esm/middleware/ruler/index.js +13 -8
  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 +6 -1
  30. package/dist/esm/middleware/ruler/util.js +55 -1
  31. package/dist/esm/middleware/scaler/index.d.ts +2 -2
  32. package/dist/esm/middleware/scaler/index.js +1 -3
  33. package/dist/esm/middleware/scroller/index.d.ts +2 -1
  34. package/dist/esm/middleware/scroller/index.js +5 -5
  35. package/dist/esm/middleware/scroller/types.d.ts +9 -0
  36. package/dist/esm/middleware/scroller/types.js +1 -0
  37. package/dist/esm/middleware/scroller/util.js +1 -1
  38. package/dist/esm/middleware/selector/config.d.ts +12 -0
  39. package/dist/esm/middleware/selector/config.js +12 -0
  40. package/dist/esm/middleware/selector/draw-auxiliary.d.ts +7 -0
  41. package/dist/esm/middleware/selector/draw-auxiliary.js +46 -0
  42. package/dist/esm/middleware/selector/draw-base.d.ts +30 -0
  43. package/dist/esm/middleware/selector/draw-base.js +100 -0
  44. package/dist/esm/middleware/selector/draw-reference.d.ts +5 -0
  45. package/dist/esm/middleware/selector/draw-reference.js +31 -0
  46. package/dist/esm/middleware/selector/draw-wrapper.d.ts +9 -1
  47. package/dist/esm/middleware/selector/draw-wrapper.js +34 -26
  48. package/dist/esm/middleware/selector/index.d.ts +7 -4
  49. package/dist/esm/middleware/selector/index.js +275 -68
  50. package/dist/esm/middleware/selector/reference.d.ts +13 -0
  51. package/dist/esm/middleware/selector/reference.js +273 -0
  52. package/dist/esm/middleware/selector/types.d.ts +8 -4
  53. package/dist/esm/middleware/selector/types.js +1 -1
  54. package/dist/esm/middleware/selector/util.d.ts +11 -2
  55. package/dist/esm/middleware/selector/util.js +36 -14
  56. package/dist/esm/middleware/text-editor/index.d.ts +20 -2
  57. package/dist/esm/middleware/text-editor/index.js +79 -17
  58. package/dist/index.global.js +3477 -1066
  59. package/dist/index.global.min.js +1 -1
  60. package/package.json +5 -5
@@ -1,40 +1,18 @@
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 { key, 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, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, 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
+ export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue };
10
+ export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup };
7
11
  export const MiddlewareSelector = (opts) => {
8
- const { viewer, sharer, viewContent, calculator, eventHub } = opts;
9
- const { helperContext } = viewContent;
12
+ const { viewer, sharer, boardContent, calculator, eventHub } = opts;
13
+ const { helperContext } = boardContent;
10
14
  let prevPoint = null;
11
15
  let inBusyMode = null;
12
- eventHub.on(middlewareEventSelect, ({ uuids, positions }) => {
13
- let elements = [];
14
- const actionType = sharer.getSharedStorage(keyActionType);
15
- const data = sharer.getActiveStorage('data');
16
- if (positions && Array.isArray(positions)) {
17
- elements = findElementsFromListByPositions(positions, (data === null || data === void 0 ? void 0 : data.elements) || []);
18
- }
19
- else {
20
- elements = findElementsFromList(uuids, (data === null || data === void 0 ? void 0 : data.elements) || []);
21
- }
22
- let needRefresh = false;
23
- if (!actionType && elements.length === 1) {
24
- sharer.setSharedStorage(keyActionType, 'select');
25
- needRefresh = true;
26
- }
27
- else if (actionType === 'select' && elements.length === 1) {
28
- needRefresh = true;
29
- }
30
- if (needRefresh) {
31
- const elem = elements[0];
32
- const groupQueue = getGroupQueueFromList(elem.uuid, (data === null || data === void 0 ? void 0 : data.elements) || []);
33
- sharer.setSharedStorage(keyGroupQueue, groupQueue);
34
- updateSelectedElementList(elements);
35
- viewer.drawFrame();
36
- }
37
- });
38
16
  sharer.setSharedStorage(keyActionType, null);
39
17
  const getActiveElements = () => {
40
18
  return sharer.getSharedStorage(keySelectedElementList);
@@ -71,17 +49,20 @@ export const MiddlewareSelector = (opts) => {
71
49
  sharer.setSharedStorage(keyHoverElementVertexes, vertexes);
72
50
  };
73
51
  const updateSelectedElementList = (list, opts) => {
52
+ var _a;
74
53
  sharer.setSharedStorage(keySelectedElementList, list);
75
54
  if (list.length === 1) {
76
55
  const controller = calcElementSizeController(list[0], {
77
56
  groupQueue: sharer.getSharedStorage(keyGroupQueue),
78
- controllerSize: 10,
57
+ controllerSize,
79
58
  viewScaleInfo: sharer.getActiveViewScaleInfo()
80
59
  });
81
60
  sharer.setSharedStorage(keySelectedElementController, controller);
61
+ sharer.setSharedStorage(keySelectedElementPosition, getElementPositionFromList(list[0].uuid, ((_a = sharer.getActiveStorage('data')) === null || _a === void 0 ? void 0 : _a.elements) || []));
82
62
  }
83
63
  else {
84
64
  sharer.setSharedStorage(keySelectedElementController, null);
65
+ sharer.setSharedStorage(keySelectedElementPosition, []);
85
66
  }
86
67
  if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
87
68
  eventHub.trigger(middlewareEventSelect, { uuids: list.map((elem) => elem.uuid) });
@@ -97,7 +78,8 @@ export const MiddlewareSelector = (opts) => {
97
78
  viewSizeInfo: sharer.getActiveViewSizeInfo(),
98
79
  groupQueue: sharer.getSharedStorage(keyGroupQueue),
99
80
  areaSize: null,
100
- selectedElementController: sharer.getSharedStorage(keySelectedElementController)
81
+ selectedElementController: sharer.getSharedStorage(keySelectedElementController),
82
+ selectedElementPosition: sharer.getSharedStorage(keySelectedElementPosition)
101
83
  };
102
84
  };
103
85
  const clear = () => {
@@ -112,17 +94,65 @@ export const MiddlewareSelector = (opts) => {
112
94
  sharer.setSharedStorage(keySelectedElementList, []);
113
95
  sharer.setSharedStorage(keySelectedElementListVertexes, null);
114
96
  sharer.setSharedStorage(keySelectedElementController, null);
97
+ sharer.setSharedStorage(keySelectedElementPosition, []);
98
+ sharer.setSharedStorage(keySelectedReferenceXLines, []);
99
+ sharer.setSharedStorage(keySelectedReferenceYLines, []);
100
+ sharer.setSharedStorage(keyIsMoving, null);
101
+ sharer.setSharedStorage(keyEnableSelectInGroup, null);
115
102
  };
116
103
  clear();
104
+ const selectCallback = ({ uuids, positions }) => {
105
+ let elements = [];
106
+ const actionType = sharer.getSharedStorage(keyActionType);
107
+ const data = sharer.getActiveStorage('data');
108
+ if (positions && Array.isArray(positions)) {
109
+ elements = findElementsFromListByPositions(positions, (data === null || data === void 0 ? void 0 : data.elements) || []);
110
+ }
111
+ else {
112
+ elements = findElementsFromList(uuids, (data === null || data === void 0 ? void 0 : data.elements) || []);
113
+ }
114
+ let needRefresh = false;
115
+ if (!actionType && elements.length === 1) {
116
+ sharer.setSharedStorage(keyActionType, 'select');
117
+ needRefresh = true;
118
+ }
119
+ else if (actionType === 'select' && elements.length === 1) {
120
+ needRefresh = true;
121
+ }
122
+ if (needRefresh) {
123
+ const elem = elements[0];
124
+ const groupQueue = getGroupQueueFromList(elem.uuid, (data === null || data === void 0 ? void 0 : data.elements) || []);
125
+ sharer.setSharedStorage(keyGroupQueue, groupQueue);
126
+ updateSelectedElementList(elements);
127
+ viewer.drawFrame();
128
+ }
129
+ };
130
+ const selectClearCallback = () => {
131
+ clear();
132
+ viewer.drawFrame();
133
+ };
134
+ const selectInGroupCallback = (e) => {
135
+ sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable);
136
+ };
117
137
  return {
118
- mode: key,
138
+ name: '@middleware/selector',
139
+ use() {
140
+ eventHub.on(middlewareEventSelect, selectCallback);
141
+ eventHub.on(middlewareEventSelectClear, selectClearCallback);
142
+ eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
143
+ },
144
+ disuse() {
145
+ eventHub.off(middlewareEventSelect, selectCallback);
146
+ eventHub.off(middlewareEventSelectClear, selectClearCallback);
147
+ eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
148
+ },
119
149
  hover: (e) => {
120
- var _a, _b;
150
+ var _a, _b, _c, _d, _e;
121
151
  const resizeType = sharer.getSharedStorage(keyResizeType);
122
152
  const actionType = sharer.getSharedStorage(keyActionType);
123
153
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
124
154
  const triggerCursor = (target) => {
125
- let cursor = target.type;
155
+ const cursor = target.type;
126
156
  if (inBusyMode === null) {
127
157
  eventHub.trigger('cursor', {
128
158
  type: cursor,
@@ -176,8 +206,27 @@ export const MiddlewareSelector = (opts) => {
176
206
  calculator
177
207
  }) }));
178
208
  triggerCursor(target);
179
- if (target.type === 'over-element' && ((_b = target === null || target === void 0 ? void 0 : target.elements) === null || _b === void 0 ? void 0 : _b.length) === 1) {
180
- sharer.setSharedStorage(keyHoverElement, target.elements[0]);
209
+ if (target.type === null) {
210
+ if (sharer.getSharedStorage(keyHoverElement) || sharer.getSharedStorage(keyHoverElementVertexes)) {
211
+ sharer.setSharedStorage(keyHoverElement, null);
212
+ sharer.setSharedStorage(keyHoverElementVertexes, null);
213
+ viewer.drawFrame();
214
+ }
215
+ return;
216
+ }
217
+ if (target.type === 'over-element' &&
218
+ sharer.getSharedStorage(keyActionType) === 'select' &&
219
+ target.elements.length === 1 &&
220
+ target.elements[0].uuid === ((_c = (_b = getActiveElements()) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.uuid)) {
221
+ return;
222
+ }
223
+ if (target.type === 'over-element' &&
224
+ sharer.getSharedStorage(keyActionType) === null &&
225
+ target.elements.length === 1 &&
226
+ target.elements[0].uuid === ((_d = sharer.getSharedStorage(keyHoverElement)) === null || _d === void 0 ? void 0 : _d.uuid)) {
227
+ return;
228
+ }
229
+ if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
181
230
  updateHoverElement(target.elements[0]);
182
231
  viewer.drawFrame();
183
232
  return;
@@ -189,9 +238,8 @@ export const MiddlewareSelector = (opts) => {
189
238
  }
190
239
  },
191
240
  pointStart: (e) => {
192
- var _a, _b, _c, _d;
241
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
193
242
  prevPoint = e.point;
194
- updateHoverElement(null);
195
243
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
196
244
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
197
245
  if (isPointInViewActiveGroup(e.point, {
@@ -201,12 +249,17 @@ export const MiddlewareSelector = (opts) => {
201
249
  groupQueue
202
250
  })) {
203
251
  const target = getPointTarget(e.point, pointTargetBaseOptions());
204
- updateHoverElement(null);
205
- if (target.type === 'over-element' && ((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1) {
252
+ 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) {
253
+ return;
254
+ }
255
+ else {
256
+ updateHoverElement(null);
257
+ }
258
+ if (target.type === 'over-element' && ((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
206
259
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
207
260
  sharer.setSharedStorage(keyActionType, 'drag');
208
261
  }
209
- else if ((_b = target.type) === null || _b === void 0 ? void 0 : _b.startsWith('resize-')) {
262
+ else if ((_e = target.type) === null || _e === void 0 ? void 0 : _e.startsWith('resize-')) {
210
263
  sharer.setSharedStorage(keyResizeType, target.type);
211
264
  sharer.setSharedStorage(keyActionType, 'resize');
212
265
  }
@@ -226,14 +279,20 @@ export const MiddlewareSelector = (opts) => {
226
279
  calculator
227
280
  });
228
281
  const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
282
+ 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) {
283
+ return;
284
+ }
285
+ else {
286
+ updateHoverElement(null);
287
+ }
229
288
  if (target.type === 'list-area') {
230
289
  sharer.setSharedStorage(keyActionType, 'drag-list');
231
290
  }
232
- 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) {
291
+ 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) {
233
292
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
234
293
  sharer.setSharedStorage(keyActionType, 'drag');
235
294
  }
236
- else if ((_d = target.type) === null || _d === void 0 ? void 0 : _d.startsWith('resize-')) {
295
+ else if ((_k = target.type) === null || _k === void 0 ? void 0 : _k.startsWith('resize-')) {
237
296
  sharer.setSharedStorage(keyResizeType, target.type);
238
297
  sharer.setSharedStorage(keyActionType, 'resize');
239
298
  }
@@ -246,9 +305,15 @@ export const MiddlewareSelector = (opts) => {
246
305
  viewer.drawFrame();
247
306
  },
248
307
  pointMove: (e) => {
308
+ var _a, _b, _c;
309
+ sharer.setSharedStorage(keySelectedReferenceXLines, []);
310
+ sharer.setSharedStorage(keySelectedReferenceYLines, []);
311
+ sharer.setSharedStorage(keyIsMoving, true);
249
312
  const data = sharer.getActiveStorage('data');
250
313
  const elems = getActiveElements();
251
314
  const scale = sharer.getActiveStorage('scale') || 1;
315
+ const viewScaleInfo = sharer.getActiveViewScaleInfo();
316
+ const viewSizeInfo = sharer.getActiveViewSizeInfo();
252
317
  const start = prevPoint;
253
318
  const end = e.point;
254
319
  const resizeType = sharer.getSharedStorage(keyResizeType);
@@ -256,11 +321,46 @@ export const MiddlewareSelector = (opts) => {
256
321
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
257
322
  if (actionType === 'drag') {
258
323
  inBusyMode = 'drag';
259
- if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && end) {
324
+ 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) {
260
325
  const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
261
- elems[0].x += moveX / scale;
262
- elems[0].y += moveY / scale;
326
+ let totalMoveX = calculator.toGridNum(moveX / scale);
327
+ let totalMoveY = calculator.toGridNum(moveY / scale);
328
+ const referenceInfo = calcReferenceInfo(elems[0].uuid, {
329
+ calculator,
330
+ data,
331
+ groupQueue,
332
+ viewScaleInfo,
333
+ viewSizeInfo
334
+ });
335
+ try {
336
+ if (referenceInfo) {
337
+ if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
338
+ totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
339
+ }
340
+ if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
341
+ totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
342
+ }
343
+ sharer.setSharedStorage(keySelectedReferenceXLines, referenceInfo.xLines);
344
+ sharer.setSharedStorage(keySelectedReferenceYLines, referenceInfo.yLines);
345
+ }
346
+ }
347
+ catch (err) {
348
+ console.error(err);
349
+ }
350
+ elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
351
+ elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
263
352
  updateSelectedElementList([elems[0]]);
353
+ calculator.modifyViewVisibleInfoMap(data, {
354
+ modifyOptions: {
355
+ type: 'updateElement',
356
+ content: {
357
+ element: elems[0],
358
+ position: sharer.getSharedStorage(keySelectedElementPosition) || []
359
+ }
360
+ },
361
+ viewSizeInfo,
362
+ viewScaleInfo
363
+ });
264
364
  }
265
365
  viewer.drawFrame();
266
366
  }
@@ -270,9 +370,21 @@ export const MiddlewareSelector = (opts) => {
270
370
  const moveX = (end.x - start.x) / scale;
271
371
  const moveY = (end.y - start.y) / scale;
272
372
  elems.forEach((elem) => {
273
- if (elem) {
274
- elem.x += moveX;
275
- elem.y += moveY;
373
+ var _a;
374
+ if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.lock) !== true) {
375
+ elem.x = calculator.toGridNum(elem.x + moveX);
376
+ elem.y = calculator.toGridNum(elem.y + moveY);
377
+ calculator.modifyViewVisibleInfoMap(data, {
378
+ modifyOptions: {
379
+ type: 'updateElement',
380
+ content: {
381
+ element: elem,
382
+ position: getElementPositionFromList(elem.uuid, data.elements) || []
383
+ }
384
+ },
385
+ viewSizeInfo,
386
+ viewScaleInfo
387
+ });
276
388
  }
277
389
  });
278
390
  sharer.setActiveStorage('data', data);
@@ -299,12 +411,54 @@ export const MiddlewareSelector = (opts) => {
299
411
  resizeStart = rotatePointInGroup(start, pointGroupQueue);
300
412
  resizeEnd = rotatePointInGroup(end, pointGroupQueue);
301
413
  }
302
- const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
303
- elems[0].x = resizedElemSize.x;
304
- elems[0].y = resizedElemSize.y;
305
- elems[0].w = resizedElemSize.w;
306
- elems[0].h = resizedElemSize.h;
414
+ if (resizeType === 'resize-rotate') {
415
+ const controller = sharer.getSharedStorage(keySelectedElementController);
416
+ const viewVertexes = [
417
+ controller.topLeft.center,
418
+ controller.topRight.center,
419
+ controller.bottomLeft.center,
420
+ controller.bottomRight.center
421
+ ];
422
+ const viewCenter = calcElementCenterFromVertexes(viewVertexes);
423
+ const resizedElemSize = rotateElement(elems[0], {
424
+ center: viewCenter,
425
+ viewScaleInfo,
426
+ viewSizeInfo,
427
+ start,
428
+ end,
429
+ resizeType,
430
+ sharer
431
+ });
432
+ elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
433
+ }
434
+ else {
435
+ const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
436
+ const calcOpts = { ignore: !!elems[0].angle };
437
+ elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
438
+ elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
439
+ if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
440
+ deepResizeGroupElement(elems[0], {
441
+ w: calculator.toGridNum(resizedElemSize.w, calcOpts),
442
+ h: calculator.toGridNum(resizedElemSize.h, calcOpts)
443
+ });
444
+ }
445
+ else {
446
+ elems[0].w = calculator.toGridNum(resizedElemSize.w, calcOpts);
447
+ elems[0].h = calculator.toGridNum(resizedElemSize.h, calcOpts);
448
+ }
449
+ }
307
450
  updateSelectedElementList([elems[0]]);
451
+ calculator.modifyViewVisibleInfoMap(data, {
452
+ modifyOptions: {
453
+ type: 'updateElement',
454
+ content: {
455
+ element: elems[0],
456
+ position: sharer.getSharedStorage(keySelectedElementPosition) || []
457
+ }
458
+ },
459
+ viewSizeInfo,
460
+ viewScaleInfo
461
+ });
308
462
  viewer.drawFrame();
309
463
  }
310
464
  }
@@ -317,6 +471,9 @@ export const MiddlewareSelector = (opts) => {
317
471
  },
318
472
  pointEnd(e) {
319
473
  inBusyMode = null;
474
+ sharer.setSharedStorage(keySelectedReferenceXLines, []);
475
+ sharer.setSharedStorage(keySelectedReferenceYLines, []);
476
+ sharer.setSharedStorage(keyIsMoving, false);
320
477
  const data = sharer.getActiveStorage('data');
321
478
  const resizeType = sharer.getSharedStorage(keyResizeType);
322
479
  const actionType = sharer.getSharedStorage(keyActionType);
@@ -380,7 +537,11 @@ export const MiddlewareSelector = (opts) => {
380
537
  sharer.setActiveStorage('contextWidth', viewInfo.contextSize.contextWidth);
381
538
  }
382
539
  if (data && ['drag', 'drag-list', 'drag-list-end', 'resize'].includes(actionType)) {
383
- eventHub.trigger('change', { data });
540
+ let type = 'dragElement';
541
+ if (type === 'resize') {
542
+ type = 'resizeElement';
543
+ }
544
+ eventHub.trigger(eventChange, { data, type });
384
545
  }
385
546
  viewer.drawFrame();
386
547
  };
@@ -392,9 +553,17 @@ export const MiddlewareSelector = (opts) => {
392
553
  viewer.drawFrame();
393
554
  },
394
555
  doubleClick(e) {
395
- var _a, _b;
556
+ var _a, _b, _c, _d, _e, _f;
557
+ if (sharer.getSharedStorage(keyEnableSelectInGroup) === false) {
558
+ return;
559
+ }
396
560
  const target = getPointTarget(e.point, pointTargetBaseOptions());
397
- if (target.elements.length === 1 && ((_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.type) === 'group') {
561
+ sharer.setSharedStorage(keySelectedElementController, null);
562
+ sharer.setSharedStorage(keySelectedElementList, []);
563
+ 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) {
564
+ return;
565
+ }
566
+ if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
398
567
  const pushResult = pushGroupQueue(target.elements[0]);
399
568
  if (pushResult === true) {
400
569
  sharer.setSharedStorage(keyActionType, null);
@@ -402,16 +571,18 @@ export const MiddlewareSelector = (opts) => {
402
571
  return;
403
572
  }
404
573
  }
405
- else if (target.elements.length === 1 && ((_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.type) === 'text') {
574
+ else if (target.elements.length === 1 && ((_d = target.elements[0]) === null || _d === void 0 ? void 0 : _d.type) === 'text') {
406
575
  eventHub.trigger(middlewareEventTextEdit, {
407
576
  element: target.elements[0],
408
577
  groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
578
+ position: getElementPositionFromList((_e = target.elements[0]) === null || _e === void 0 ? void 0 : _e.uuid, ((_f = sharer.getActiveStorage('data')) === null || _f === void 0 ? void 0 : _f.elements) || []),
409
579
  viewScaleInfo: sharer.getActiveViewScaleInfo()
410
580
  });
411
581
  }
412
582
  sharer.setSharedStorage(keyActionType, null);
413
583
  },
414
584
  beforeDrawFrame({ snapshot }) {
585
+ var _a;
415
586
  const { activeStore, sharedStore } = snapshot;
416
587
  const { scale, offsetLeft, offsetTop, offsetRight, offsetBottom, width, height, contextHeight, contextWidth, devicePixelRatio } = activeStore;
417
588
  const sharer = opts.sharer;
@@ -426,6 +597,7 @@ export const MiddlewareSelector = (opts) => {
426
597
  const areaEnd = sharedStore[keyAreaEnd];
427
598
  const groupQueue = sharedStore[keyGroupQueue];
428
599
  const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
600
+ const isMoving = sharedStore[keyIsMoving];
429
601
  const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
430
602
  const selectedElementController = elem
431
603
  ? calcElementSizeController(elem, {
@@ -434,21 +606,56 @@ export const MiddlewareSelector = (opts) => {
434
606
  viewScaleInfo
435
607
  })
436
608
  : null;
609
+ const isLock = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.lock);
437
610
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
438
611
  drawGroupQueueVertexesWrappers(helperContext, groupQueueVertexesList, drawBaseOpts);
439
612
  if (hoverElement && actionType !== 'drag') {
440
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
613
+ if (isLock) {
614
+ drawLockVertexesWrapper(helperContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
615
+ groupQueue,
616
+ controllerSize: 10,
617
+ viewScaleInfo
618
+ }) }));
619
+ }
620
+ else {
621
+ drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
622
+ }
441
623
  }
442
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
443
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
624
+ if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
625
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag' }));
626
+ if (actionType === 'drag') {
627
+ const xLines = sharer.getSharedStorage(keySelectedReferenceXLines);
628
+ const yLines = sharer.getSharedStorage(keySelectedReferenceYLines);
629
+ drawReferenceLines(helperContext, {
630
+ xLines,
631
+ yLines
632
+ });
633
+ }
444
634
  }
445
635
  }
446
636
  else {
447
637
  if (hoverElement && actionType !== 'drag') {
448
- drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
638
+ if (isLock) {
639
+ drawLockVertexesWrapper(helperContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
640
+ groupQueue,
641
+ controllerSize: 10,
642
+ viewScaleInfo
643
+ }) }));
644
+ }
645
+ else {
646
+ drawHoverVertexesWrapper(helperContext, hoverElementVertexes, drawBaseOpts);
647
+ }
449
648
  }
450
- if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
451
- drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
649
+ if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
650
+ drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag' }));
651
+ if (actionType === 'drag') {
652
+ const xLines = sharer.getSharedStorage(keySelectedReferenceXLines);
653
+ const yLines = sharer.getSharedStorage(keySelectedReferenceYLines);
654
+ drawReferenceLines(helperContext, {
655
+ xLines,
656
+ yLines
657
+ });
658
+ }
452
659
  }
453
660
  else if (actionType === 'area' && areaStart && areaEnd) {
454
661
  drawArea(helperContext, { start: areaStart, end: areaEnd });
@@ -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;