@idraw/core 0.4.0-beta.31 → 0.4.0-beta.33

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.
@@ -1,5 +1,5 @@
1
1
  import { formatNumber, getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot, createUUID, limitAngle, rotatePoint, parseAngleToRadian } from '@idraw/util';
2
- import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
2
+ import { keySelectedElementList, keyHoverElement, keyActionType, keyGroupQueue } from '../selector';
3
3
  import { drawSizeInfoText, drawPositionInfoText, drawAngleInfoText } from './draw-info';
4
4
  import { defaltStyle } from './config';
5
5
  const infoFontSize = 10;
@@ -16,11 +16,13 @@ export const MiddlewareInfo = (opts, config) => {
16
16
  return {
17
17
  name: '@middleware/info',
18
18
  beforeDrawFrame({ snapshot }) {
19
+ var _a;
19
20
  const { sharedStore } = snapshot;
20
21
  const selectedElementList = sharedStore[keySelectedElementList];
22
+ const hoverElement = sharedStore[keyHoverElement];
21
23
  const actionType = sharedStore[keyActionType];
22
24
  const groupQueue = sharedStore[keyGroupQueue] || [];
23
- if (selectedElementList.length === 1) {
25
+ if (selectedElementList.length === 1 && !((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked)) {
24
26
  const elem = selectedElementList[0];
25
27
  if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
26
28
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
@@ -1,3 +1,3 @@
1
- import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
1
+ import { keySelectedElementList, keyHoverElement, keyActionType, keyGroupQueue } from '../selector';
2
2
  import type { DeepSelectorSharedStorage } from '../selector';
3
- export type DeepInfoSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType | typeof keyGroupQueue>;
3
+ export type DeepInfoSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyHoverElement | typeof keyActionType | typeof keyGroupQueue>;
@@ -1,9 +1,9 @@
1
+ import type { MiddlewareLayoutSelectorStyle } from '@idraw/types';
1
2
  export declare const key = "LAYOUT_SELECT";
2
3
  export declare const keyLayoutActionType: unique symbol;
3
4
  export declare const keyLayoutControlType: unique symbol;
4
5
  export declare const keyLayoutController: unique symbol;
5
6
  export declare const keyLayoutIsHover: unique symbol;
6
7
  export declare const keyLayoutIsSelected: unique symbol;
7
- export declare const selectColor = "#b331c9";
8
- export declare const disableColor = "#5b5959b5";
9
8
  export declare const controllerSize = 10;
9
+ export declare const defaultStyle: MiddlewareLayoutSelectorStyle;
@@ -4,6 +4,7 @@ export const keyLayoutControlType = Symbol(`${key}_layoutControlType`);
4
4
  export const keyLayoutController = Symbol(`${key}_layoutController`);
5
5
  export const keyLayoutIsHover = Symbol(`${key}_layoutIsHover`);
6
6
  export const keyLayoutIsSelected = Symbol(`${key}_layoutIsSelected`);
7
- export const selectColor = '#b331c9';
8
- export const disableColor = '#5b5959b5';
9
7
  export const controllerSize = 10;
8
+ export const defaultStyle = {
9
+ activeColor: '#b331c9'
10
+ };
@@ -1,5 +1,5 @@
1
- import type { BoardMiddleware } from '@idraw/types';
1
+ import type { BoardMiddleware, MiddlewareLayoutSelectorConfig } from '@idraw/types';
2
2
  import type { LayoutSelectorSharedStorage } from './types';
3
3
  import { keyLayoutIsSelected } from './config';
4
4
  export { keyLayoutIsSelected };
5
- export declare const MiddlewareLayoutSelector: BoardMiddleware<LayoutSelectorSharedStorage>;
5
+ export declare const MiddlewareLayoutSelector: BoardMiddleware<LayoutSelectorSharedStorage, any, MiddlewareLayoutSelectorConfig>;
@@ -1,12 +1,15 @@
1
1
  import { calcLayoutSizeController, isViewPointInVertexes, getViewScaleInfoFromSnapshot, isViewPointInElementSize, calcViewElementSize } from '@idraw/util';
2
- import { keyLayoutActionType, keyLayoutController, keyLayoutControlType, keyLayoutIsHover, keyLayoutIsSelected, controllerSize } from './config';
2
+ import { keyLayoutActionType, keyLayoutController, keyLayoutControlType, keyLayoutIsHover, keyLayoutIsSelected, controllerSize, defaultStyle } from './config';
3
3
  import { keyActionType as keyElementActionType, keyHoverElement, middlewareEventSelectClear } from '../selector';
4
4
  import { drawLayoutController, drawLayoutHover } from './util';
5
5
  import { eventChange } from '../../config';
6
6
  export { keyLayoutIsSelected };
7
- export const MiddlewareLayoutSelector = (opts) => {
7
+ export const MiddlewareLayoutSelector = (opts, config) => {
8
8
  const { sharer, boardContent, calculator, viewer, eventHub } = opts;
9
9
  const { overlayContext } = boardContent;
10
+ const innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
11
+ const { activeColor } = innerConfig;
12
+ const style = { activeColor };
10
13
  let prevPoint = null;
11
14
  let prevIsHover = null;
12
15
  let prevIsSelected = null;
@@ -312,10 +315,10 @@ export const MiddlewareLayoutSelector = (opts) => {
312
315
  const controller = calcLayoutSizeController(size, { viewScaleInfo, controllerSize });
313
316
  if (layoutIsHover === true) {
314
317
  const viewSize = calcViewElementSize(size, { viewScaleInfo });
315
- drawLayoutHover(overlayContext, { layoutSize: viewSize });
318
+ drawLayoutHover(overlayContext, { layoutSize: viewSize, style });
316
319
  }
317
320
  if ((layoutActionType && ['resize'].includes(layoutActionType)) || layoutIsSelected === true) {
318
- drawLayoutController(overlayContext, { controller, operations: activeStore.data.layout.operations || {} });
321
+ drawLayoutController(overlayContext, { controller, style });
319
322
  }
320
323
  }
321
324
  },
@@ -1,8 +1,9 @@
1
- import type { ViewContext2D, LayoutSizeController, DataLayout, ElementSize } from '@idraw/types';
1
+ import type { ViewContext2D, LayoutSizeController, ElementSize, MiddlewareLayoutSelectorStyle } from '@idraw/types';
2
2
  export declare function drawLayoutController(ctx: ViewContext2D, opts: {
3
3
  controller: LayoutSizeController;
4
- operations: DataLayout['operations'];
4
+ style: MiddlewareLayoutSelectorStyle;
5
5
  }): void;
6
6
  export declare function drawLayoutHover(ctx: ViewContext2D, opts: {
7
7
  layoutSize: ElementSize;
8
+ style: MiddlewareLayoutSelectorStyle;
8
9
  }): void;
@@ -1,5 +1,5 @@
1
- import { selectColor, disableColor } from './config';
2
- function drawControllerBox(ctx, boxVertexes) {
1
+ function drawControllerBox(ctx, boxVertexes, style) {
2
+ const { activeColor } = style;
3
3
  ctx.setLineDash([]);
4
4
  ctx.fillStyle = '#FFFFFF';
5
5
  ctx.beginPath();
@@ -9,7 +9,7 @@ function drawControllerBox(ctx, boxVertexes) {
9
9
  ctx.lineTo(boxVertexes[3].x, boxVertexes[3].y);
10
10
  ctx.closePath();
11
11
  ctx.fill();
12
- ctx.strokeStyle = selectColor;
12
+ ctx.strokeStyle = activeColor;
13
13
  ctx.lineWidth = 2;
14
14
  ctx.beginPath();
15
15
  ctx.moveTo(boxVertexes[0].x, boxVertexes[0].y);
@@ -19,26 +19,11 @@ function drawControllerBox(ctx, boxVertexes) {
19
19
  ctx.closePath();
20
20
  ctx.stroke();
21
21
  }
22
- function drawControllerCross(ctx, opts) {
23
- const { vertexes, strokeStyle, lineWidth } = opts;
24
- ctx.setLineDash([]);
25
- ctx.strokeStyle = strokeStyle;
26
- ctx.lineWidth = lineWidth;
27
- ctx.beginPath();
28
- ctx.moveTo(vertexes[0].x, vertexes[0].y);
29
- ctx.lineTo(vertexes[2].x, vertexes[2].y);
30
- ctx.closePath();
31
- ctx.stroke();
32
- ctx.beginPath();
33
- ctx.moveTo(vertexes[1].x, vertexes[1].y);
34
- ctx.lineTo(vertexes[3].x, vertexes[3].y);
35
- ctx.closePath();
36
- ctx.stroke();
37
- }
38
22
  function drawControllerLine(ctx, opts) {
39
- const { start, end, centerVertexes, disabled } = opts;
40
- const lineWidth = disabled === true ? 1 : 2;
41
- const strokeStyle = disabled === true ? disableColor : selectColor;
23
+ const { start, end, style } = opts;
24
+ const { activeColor } = style;
25
+ const lineWidth = 2;
26
+ const strokeStyle = activeColor;
42
27
  ctx.setLineDash([]);
43
28
  ctx.strokeStyle = strokeStyle;
44
29
  ctx.lineWidth = lineWidth;
@@ -47,55 +32,25 @@ function drawControllerLine(ctx, opts) {
47
32
  ctx.lineTo(end.x, end.y);
48
33
  ctx.closePath();
49
34
  ctx.stroke();
50
- if (disabled === true) {
51
- drawControllerCross(ctx, {
52
- vertexes: centerVertexes,
53
- lineWidth,
54
- strokeStyle
55
- });
56
- }
57
35
  }
58
36
  export function drawLayoutController(ctx, opts) {
59
- const { controller, operations } = opts;
37
+ const { controller, style } = opts;
60
38
  const { topLeft, topRight, bottomLeft, bottomRight, topMiddle, rightMiddle, bottomMiddle, leftMiddle } = controller;
61
- drawControllerLine(ctx, { start: topLeft.center, end: topRight.center, centerVertexes: topMiddle.vertexes, disabled: !!(operations === null || operations === void 0 ? void 0 : operations.disabledTop) });
62
- drawControllerLine(ctx, { start: topRight.center, end: bottomRight.center, centerVertexes: rightMiddle.vertexes, disabled: !!(operations === null || operations === void 0 ? void 0 : operations.disabledRight) });
63
- drawControllerLine(ctx, { start: bottomRight.center, end: bottomLeft.center, centerVertexes: bottomMiddle.vertexes, disabled: !!(operations === null || operations === void 0 ? void 0 : operations.disabledBottom) });
64
- drawControllerLine(ctx, { start: bottomLeft.center, end: topLeft.center, centerVertexes: leftMiddle.vertexes, disabled: !!(operations === null || operations === void 0 ? void 0 : operations.disabledLeft) });
65
- const disabledOpts = {
66
- lineWidth: 1,
67
- strokeStyle: disableColor
68
- };
69
- if ((operations === null || operations === void 0 ? void 0 : operations.disabledTopLeft) === true) {
70
- drawControllerCross(ctx, Object.assign({ vertexes: topLeft.vertexes }, disabledOpts));
71
- }
72
- else {
73
- drawControllerBox(ctx, topLeft.vertexes);
74
- }
75
- if ((operations === null || operations === void 0 ? void 0 : operations.disabledTopRight) === true) {
76
- drawControllerCross(ctx, Object.assign({ vertexes: topRight.vertexes }, disabledOpts));
77
- }
78
- else {
79
- drawControllerBox(ctx, topRight.vertexes);
80
- }
81
- if ((operations === null || operations === void 0 ? void 0 : operations.disabledBottomRight) === true) {
82
- drawControllerCross(ctx, Object.assign({ vertexes: bottomRight.vertexes }, disabledOpts));
83
- }
84
- else {
85
- drawControllerBox(ctx, bottomRight.vertexes);
86
- }
87
- if ((operations === null || operations === void 0 ? void 0 : operations.disabledBottomLeft) === true) {
88
- drawControllerCross(ctx, Object.assign({ vertexes: bottomLeft.vertexes }, disabledOpts));
89
- }
90
- else {
91
- drawControllerBox(ctx, bottomLeft.vertexes);
92
- }
39
+ drawControllerLine(ctx, { start: topLeft.center, end: topRight.center, centerVertexes: topMiddle.vertexes, style });
40
+ drawControllerLine(ctx, { start: topRight.center, end: bottomRight.center, centerVertexes: rightMiddle.vertexes, style });
41
+ drawControllerLine(ctx, { start: bottomRight.center, end: bottomLeft.center, centerVertexes: bottomMiddle.vertexes, style });
42
+ drawControllerLine(ctx, { start: bottomLeft.center, end: topLeft.center, centerVertexes: leftMiddle.vertexes, style });
43
+ drawControllerBox(ctx, topLeft.vertexes, style);
44
+ drawControllerBox(ctx, topRight.vertexes, style);
45
+ drawControllerBox(ctx, bottomRight.vertexes, style);
46
+ drawControllerBox(ctx, bottomLeft.vertexes, style);
93
47
  }
94
48
  export function drawLayoutHover(ctx, opts) {
95
- const { layoutSize } = opts;
49
+ const { layoutSize, style } = opts;
50
+ const { activeColor } = style;
96
51
  const { x, y, w, h } = layoutSize;
97
52
  ctx.setLineDash([]);
98
- ctx.strokeStyle = selectColor;
53
+ ctx.strokeStyle = activeColor;
99
54
  ctx.lineWidth = 1;
100
55
  ctx.beginPath();
101
56
  ctx.moveTo(x, y);
@@ -1,11 +1,11 @@
1
- import type { Element, ElementType, PointSize, RendererDrawElementOptions, ViewContext2D, ViewRectVertexes, ViewScaleInfo, ViewSizeInfo, ElementSizeController, ViewCalculator } from '@idraw/types';
2
- import type { AreaSize, MiddlewareSelectorStyle } from './types';
1
+ import type { Element, ElementType, PointSize, RendererDrawElementOptions, ViewContext2D, ViewRectVertexes, ViewScaleInfo, ViewSizeInfo, ElementSizeController, ViewCalculator, MiddlewareSelectorStyle } from '@idraw/types';
2
+ import type { AreaSize } from './types';
3
3
  export declare function drawHoverVertexesWrapper(ctx: ViewContext2D, vertexes: ViewRectVertexes | null, opts: {
4
4
  viewScaleInfo: ViewScaleInfo;
5
5
  viewSizeInfo: ViewSizeInfo;
6
6
  style: MiddlewareSelectorStyle;
7
7
  }): void;
8
- export declare function drawLockVertexesWrapper(ctx: ViewContext2D, vertexes: ViewRectVertexes | null, opts: {
8
+ export declare function drawLockedVertexesWrapper(ctx: ViewContext2D, vertexes: ViewRectVertexes | null, opts: {
9
9
  viewScaleInfo: ViewScaleInfo;
10
10
  viewSizeInfo: ViewSizeInfo;
11
11
  controller?: ElementSizeController | null;
@@ -10,7 +10,7 @@ export function drawHoverVertexesWrapper(ctx, vertexes, opts) {
10
10
  const wrapperOpts = { borderColor: activeColor, borderWidth: 1, background: 'transparent', lineDash: [] };
11
11
  drawVertexes(ctx, calcViewVertexes(vertexes, opts), wrapperOpts);
12
12
  }
13
- export function drawLockVertexesWrapper(ctx, vertexes, opts) {
13
+ export function drawLockedVertexesWrapper(ctx, vertexes, opts) {
14
14
  if (!vertexes) {
15
15
  return;
16
16
  }
@@ -1,5 +1,5 @@
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';
1
+ import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement, getElementSize } from '@idraw/util';
2
+ import { drawHoverVertexesWrapper, drawLockedVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
3
3
  import { drawReferenceLines } from './draw-reference';
4
4
  import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
5
5
  import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize, defaultStyle } from './config';
@@ -16,6 +16,8 @@ export const MiddlewareSelector = (opts, config) => {
16
16
  const { viewer, sharer, boardContent, calculator, eventHub } = opts;
17
17
  const { overlayContext } = boardContent;
18
18
  let prevPoint = null;
19
+ let moveOriginalStartPoint = null;
20
+ let moveOriginalStartElementSize = null;
19
21
  let inBusyMode = null;
20
22
  sharer.setSharedStorage(keyActionType, null);
21
23
  sharer.setSharedStorage(keyEnableSnapToGrid, true);
@@ -101,7 +103,6 @@ export const MiddlewareSelector = (opts, config) => {
101
103
  sharer.setSharedStorage(keySelectedElementController, null);
102
104
  sharer.setSharedStorage(keySelectedElementPosition, []);
103
105
  sharer.setSharedStorage(keyIsMoving, null);
104
- sharer.setSharedStorage(keyEnableSelectInGroup, null);
105
106
  };
106
107
  clear();
107
108
  const selectCallback = ({ uuids, positions }) => {
@@ -250,8 +251,9 @@ export const MiddlewareSelector = (opts, config) => {
250
251
  }
251
252
  },
252
253
  pointStart: (e) => {
253
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
254
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
254
255
  prevPoint = e.point;
256
+ moveOriginalStartPoint = e.point;
255
257
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
256
258
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
257
259
  if (isPointInViewActiveGroup(e.point, {
@@ -261,17 +263,20 @@ export const MiddlewareSelector = (opts, config) => {
261
263
  groupQueue
262
264
  })) {
263
265
  const target = getPointTarget(e.point, pointTargetBaseOptions());
264
- 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) {
266
+ 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.locked) === true) {
265
267
  return;
266
268
  }
267
269
  else {
268
270
  updateHoverElement(null);
269
271
  }
270
- if (target.type === 'over-element' && ((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
272
+ if (((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
273
+ moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
274
+ }
275
+ if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
271
276
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
272
277
  sharer.setSharedStorage(keyActionType, 'drag');
273
278
  }
274
- else if ((_e = target.type) === null || _e === void 0 ? void 0 : _e.startsWith('resize-')) {
279
+ else if ((_f = target.type) === null || _f === void 0 ? void 0 : _f.startsWith('resize-')) {
275
280
  sharer.setSharedStorage(keyResizeType, target.type);
276
281
  sharer.setSharedStorage(keyActionType, 'resize');
277
282
  }
@@ -291,22 +296,31 @@ export const MiddlewareSelector = (opts, config) => {
291
296
  calculator
292
297
  });
293
298
  const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
294
- 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) {
295
- return;
296
- }
297
- else {
299
+ const isLockedElement = ((_g = target === null || target === void 0 ? void 0 : target.elements) === null || _g === void 0 ? void 0 : _g.length) === 1 && ((_j = (_h = target.elements[0]) === null || _h === void 0 ? void 0 : _h.operations) === null || _j === void 0 ? void 0 : _j.locked) === true;
300
+ if (!isLockedElement) {
298
301
  updateHoverElement(null);
299
302
  }
300
- if (target.type === 'list-area') {
301
- sharer.setSharedStorage(keyActionType, 'drag-list');
302
- }
303
- 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) {
304
- updateSelectedElementList([target.elements[0]], { triggerEvent: true });
305
- sharer.setSharedStorage(keyActionType, 'drag');
303
+ if (((_k = target === null || target === void 0 ? void 0 : target.elements) === null || _k === void 0 ? void 0 : _k.length) === 1) {
304
+ moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
306
305
  }
307
- else if ((_k = target.type) === null || _k === void 0 ? void 0 : _k.startsWith('resize-')) {
308
- sharer.setSharedStorage(keyResizeType, target.type);
309
- sharer.setSharedStorage(keyActionType, 'resize');
306
+ if (!isLockedElement) {
307
+ if (target.type === 'list-area') {
308
+ sharer.setSharedStorage(keyActionType, 'drag-list');
309
+ }
310
+ else if (target.type === 'over-element' && ((_l = target === null || target === void 0 ? void 0 : target.elements) === null || _l === void 0 ? void 0 : _l.length) === 1) {
311
+ updateSelectedElementList([target.elements[0]], { triggerEvent: true });
312
+ sharer.setSharedStorage(keyActionType, 'drag');
313
+ }
314
+ else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
315
+ sharer.setSharedStorage(keyResizeType, target.type);
316
+ sharer.setSharedStorage(keyActionType, 'resize');
317
+ }
318
+ else {
319
+ clear();
320
+ sharer.setSharedStorage(keyActionType, 'area');
321
+ sharer.setSharedStorage(keyAreaStart, e.point);
322
+ updateSelectedElementList([], { triggerEvent: true });
323
+ }
310
324
  }
311
325
  else {
312
326
  clear();
@@ -325,6 +339,7 @@ export const MiddlewareSelector = (opts, config) => {
325
339
  const viewScaleInfo = sharer.getActiveViewScaleInfo();
326
340
  const viewSizeInfo = sharer.getActiveViewSizeInfo();
327
341
  const start = prevPoint;
342
+ const originalStart = moveOriginalStartPoint;
328
343
  const end = e.point;
329
344
  const resizeType = sharer.getSharedStorage(keyResizeType);
330
345
  const actionType = sharer.getSharedStorage(keyActionType);
@@ -332,8 +347,8 @@ export const MiddlewareSelector = (opts, config) => {
332
347
  const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
333
348
  if (actionType === 'drag') {
334
349
  inBusyMode = 'drag';
335
- 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) {
336
- const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
350
+ if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && moveOriginalStartElementSize && originalStart && end && ((_b = (_a = elems[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.locked) !== true) {
351
+ const { moveX, moveY } = calcMoveInGroup(originalStart, end, groupQueue);
337
352
  let totalMoveX = calculator.toGridNum(moveX / scale);
338
353
  let totalMoveY = calculator.toGridNum(moveY / scale);
339
354
  if (enableSnapToGrid === true) {
@@ -358,8 +373,8 @@ export const MiddlewareSelector = (opts, config) => {
358
373
  console.error(err);
359
374
  }
360
375
  }
361
- elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
362
- elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
376
+ elems[0].x = calculator.toGridNum(moveOriginalStartElementSize.x + totalMoveX);
377
+ elems[0].y = calculator.toGridNum(moveOriginalStartElementSize.y + totalMoveY);
363
378
  updateSelectedElementList([elems[0]]);
364
379
  calculator.modifyViewVisibleInfoMap(data, {
365
380
  modifyOptions: {
@@ -377,12 +392,12 @@ export const MiddlewareSelector = (opts, config) => {
377
392
  }
378
393
  else if (actionType === 'drag-list') {
379
394
  inBusyMode = 'drag-list';
380
- if (data && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
395
+ if (data && originalStart && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
381
396
  const moveX = (end.x - start.x) / scale;
382
397
  const moveY = (end.y - start.y) / scale;
383
398
  elems.forEach((elem) => {
384
399
  var _a;
385
- if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.lock) !== true) {
400
+ if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) !== true) {
386
401
  elem.x = calculator.toGridNum(elem.x + moveX);
387
402
  elem.y = calculator.toGridNum(elem.y + moveY);
388
403
  calculator.modifyViewVisibleInfoMap(data, {
@@ -403,7 +418,7 @@ export const MiddlewareSelector = (opts, config) => {
403
418
  viewer.drawFrame();
404
419
  }
405
420
  else if (actionType === 'resize') {
406
- if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && start && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
421
+ if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && originalStart && moveOriginalStartElementSize && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
407
422
  inBusyMode = 'resize';
408
423
  const pointGroupQueue = [];
409
424
  groupQueue.forEach((group) => {
@@ -416,10 +431,10 @@ export const MiddlewareSelector = (opts, config) => {
416
431
  angle: 0 - angle
417
432
  });
418
433
  });
419
- let resizeStart = start;
434
+ let resizeStart = originalStart;
420
435
  let resizeEnd = end;
421
436
  if (groupQueue.length > 0) {
422
- resizeStart = rotatePointInGroup(start, pointGroupQueue);
437
+ resizeStart = rotatePointInGroup(originalStart, pointGroupQueue);
423
438
  resizeEnd = rotatePointInGroup(end, pointGroupQueue);
424
439
  }
425
440
  if (resizeType === 'resize-rotate') {
@@ -431,11 +446,11 @@ export const MiddlewareSelector = (opts, config) => {
431
446
  controller.bottomRight.center
432
447
  ];
433
448
  const viewCenter = calcElementCenterFromVertexes(viewVertexes);
434
- const resizedElemSize = rotateElement(elems[0], {
449
+ const resizedElemSize = rotateElement(moveOriginalStartElementSize, {
435
450
  center: viewCenter,
436
451
  viewScaleInfo,
437
452
  viewSizeInfo,
438
- start,
453
+ start: originalStart,
439
454
  end,
440
455
  resizeType,
441
456
  sharer
@@ -443,8 +458,8 @@ export const MiddlewareSelector = (opts, config) => {
443
458
  elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
444
459
  }
445
460
  else {
446
- const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
447
- const calcOpts = { ignore: !!elems[0].angle };
461
+ const resizedElemSize = resizeElement(moveOriginalStartElementSize, { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
462
+ const calcOpts = { ignore: !!moveOriginalStartElementSize.angle };
448
463
  elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
449
464
  elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
450
465
  if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
@@ -491,6 +506,8 @@ export const MiddlewareSelector = (opts, config) => {
491
506
  const viewSizeInfo = sharer.getActiveViewSizeInfo();
492
507
  let needDrawFrame = false;
493
508
  prevPoint = null;
509
+ moveOriginalStartPoint = null;
510
+ moveOriginalStartElementSize = null;
494
511
  if (actionType === 'resize' && resizeType) {
495
512
  sharer.setSharedStorage(keyResizeType, null);
496
513
  needDrawFrame = true;
@@ -560,6 +577,8 @@ export const MiddlewareSelector = (opts, config) => {
560
577
  },
561
578
  pointLeave() {
562
579
  prevPoint = null;
580
+ moveOriginalStartPoint = null;
581
+ moveOriginalStartElementSize = null;
563
582
  clear();
564
583
  viewer.drawFrame();
565
584
  },
@@ -571,7 +590,7 @@ export const MiddlewareSelector = (opts, config) => {
571
590
  const target = getPointTarget(e.point, pointTargetBaseOptions());
572
591
  sharer.setSharedStorage(keySelectedElementController, null);
573
592
  sharer.setSharedStorage(keySelectedElementList, []);
574
- 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) {
593
+ 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.locked) === true) {
575
594
  return;
576
595
  }
577
596
  if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
@@ -618,12 +637,12 @@ export const MiddlewareSelector = (opts, config) => {
618
637
  viewScaleInfo
619
638
  })
620
639
  : null;
621
- const isLock = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.lock);
640
+ const isLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
622
641
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
623
642
  drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
624
643
  if (hoverElement && actionType !== 'drag') {
625
- if (isLock) {
626
- drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
644
+ if (isLocked) {
645
+ drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
627
646
  groupQueue,
628
647
  controllerSize: 10,
629
648
  viewScaleInfo
@@ -633,7 +652,7 @@ export const MiddlewareSelector = (opts, config) => {
633
652
  drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
634
653
  }
635
654
  }
636
- if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
655
+ if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
637
656
  drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
638
657
  if (actionType === 'drag') {
639
658
  if (enableSnapToGrid === true) {
@@ -660,8 +679,8 @@ export const MiddlewareSelector = (opts, config) => {
660
679
  }
661
680
  else {
662
681
  if (hoverElement && actionType !== 'drag') {
663
- if (isLock) {
664
- drawLockVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
682
+ if (isLocked) {
683
+ drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
665
684
  groupQueue,
666
685
  controllerSize: 10,
667
686
  viewScaleInfo
@@ -671,7 +690,7 @@ export const MiddlewareSelector = (opts, config) => {
671
690
  drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
672
691
  }
673
692
  }
674
- if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
693
+ if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
675
694
  drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
676
695
  if (actionType === 'drag') {
677
696
  if (enableSnapToGrid === true) {
@@ -23,14 +23,14 @@ export declare function getPointTarget(p: PointSize, opts: {
23
23
  groupQueue: Element<'group'>[] | null;
24
24
  selectedElementController: ElementSizeController | null;
25
25
  }): PointTarget;
26
- export declare function resizeElement(elem: Element<ElementType>, opts: {
26
+ export declare function resizeElement(elem: ElementSize, opts: {
27
27
  start: PointSize;
28
28
  end: PointSize;
29
29
  resizeType: ResizeType;
30
30
  scale: number;
31
31
  sharer: StoreSharer;
32
32
  }): ElementSize;
33
- export declare function rotateElement(elem: Element<ElementType>, opts: {
33
+ export declare function rotateElement(elem: ElementSize, opts: {
34
34
  center: PointSize;
35
35
  start: PointSize;
36
36
  end: PointSize;
@@ -703,10 +703,10 @@ export function getSelectedListArea(data, opts) {
703
703
  const endY = Math.max(start.y, end.y);
704
704
  for (let idx = 0; idx < data.elements.length; idx++) {
705
705
  const elem = data.elements[idx];
706
- if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.lock) === true) {
706
+ if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) === true) {
707
707
  continue;
708
708
  }
709
- const elemSize = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo });
709
+ const elemSize = calcViewElementSize(elem, { viewScaleInfo });
710
710
  const center = calcElementCenter(elemSize);
711
711
  if (center.x >= startX && center.x <= endX && center.y >= startY && center.y <= endY) {
712
712
  indexes.push(idx);
@@ -733,14 +733,14 @@ export function calcSelectedElementsArea(elements, opts) {
733
733
  return null;
734
734
  }
735
735
  const area = { x: 0, y: 0, w: 0, h: 0 };
736
- const { viewScaleInfo, viewSizeInfo } = opts;
736
+ const { viewScaleInfo } = opts;
737
737
  let prevElemSize = null;
738
738
  for (let i = 0; i < elements.length; i++) {
739
739
  const elem = elements[i];
740
740
  if ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.invisible) {
741
741
  continue;
742
742
  }
743
- const elemSize = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo });
743
+ const elemSize = calcViewElementSize(elem, { viewScaleInfo });
744
744
  if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
745
745
  const ves = rotateElementVertexes(elemSize);
746
746
  if (ves.length === 4) {