@idraw/core 0.4.0-beta.17 → 0.4.0-beta.18

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.
@@ -5,6 +5,7 @@ export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
5
5
  export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
6
6
  export { MiddlewareTextEditor, middlewareEventTextEdit, middlewareEventTextChange } from './middleware/text-editor';
7
7
  export { MiddlewareDragger } from './middleware/dragger';
8
+ export { MiddlewareInfo } from './middleware/info';
8
9
  export declare class Core<E extends CoreEventMap = CoreEventMap> {
9
10
  #private;
10
11
  constructor(container: HTMLDivElement, opts: CoreOptions);
package/dist/esm/index.js CHANGED
@@ -19,6 +19,7 @@ export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
19
19
  export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
20
20
  export { MiddlewareTextEditor, middlewareEventTextEdit, middlewareEventTextChange } from './middleware/text-editor';
21
21
  export { MiddlewareDragger } from './middleware/dragger';
22
+ export { MiddlewareInfo } from './middleware/info';
22
23
  export class Core {
23
24
  constructor(container, opts) {
24
25
  _Core_instances.add(this);
@@ -0,0 +1,31 @@
1
+ import type { PointSize, ViewContext2D } from '@idraw/types';
2
+ export declare function drawSizeInfoText(ctx: ViewContext2D, opts: {
3
+ point: PointSize;
4
+ rotateCenter: PointSize;
5
+ angle: number;
6
+ text: string;
7
+ fontSize: number;
8
+ lineHeight: number;
9
+ color: string;
10
+ background: string;
11
+ }): void;
12
+ export declare function drawPositionInfoText(ctx: ViewContext2D, opts: {
13
+ point: PointSize;
14
+ rotateCenter: PointSize;
15
+ angle: number;
16
+ text: string;
17
+ fontSize: number;
18
+ lineHeight: number;
19
+ color: string;
20
+ background: string;
21
+ }): void;
22
+ export declare function drawAngleInfoText(ctx: ViewContext2D, opts: {
23
+ point: PointSize;
24
+ rotateCenter: PointSize;
25
+ angle: number;
26
+ text: string;
27
+ fontSize: number;
28
+ lineHeight: number;
29
+ color: string;
30
+ background: string;
31
+ }): void;
@@ -0,0 +1,110 @@
1
+ import { rotateByCenter } from '@idraw/util';
2
+ const fontFamily = 'monospace';
3
+ export function drawSizeInfoText(ctx, opts) {
4
+ const { point, rotateCenter, angle, text, color, background, fontSize, lineHeight } = opts;
5
+ rotateByCenter(ctx, angle, rotateCenter, () => {
6
+ ctx.$setFont({
7
+ fontWeight: '300',
8
+ fontSize,
9
+ fontFamily
10
+ });
11
+ const padding = (lineHeight - fontSize) / 2;
12
+ const textWidth = ctx.$undoPixelRatio(ctx.measureText(text).width);
13
+ const bgStart = {
14
+ x: point.x - textWidth / 2 - padding,
15
+ y: point.y
16
+ };
17
+ const bgEnd = {
18
+ x: bgStart.x + textWidth + padding * 2,
19
+ y: bgStart.y + fontSize + padding
20
+ };
21
+ const textStart = {
22
+ x: point.x - textWidth / 2,
23
+ y: point.y
24
+ };
25
+ ctx.setLineDash([]);
26
+ ctx.fillStyle = background;
27
+ ctx.beginPath();
28
+ ctx.moveTo(bgStart.x, bgStart.y);
29
+ ctx.lineTo(bgEnd.x, bgStart.y);
30
+ ctx.lineTo(bgEnd.x, bgEnd.y);
31
+ ctx.lineTo(bgStart.x, bgEnd.y);
32
+ ctx.closePath();
33
+ ctx.fill();
34
+ ctx.fillStyle = color;
35
+ ctx.textBaseline = 'top';
36
+ ctx.fillText(text, textStart.x, textStart.y + padding);
37
+ });
38
+ }
39
+ export function drawPositionInfoText(ctx, opts) {
40
+ const { point, rotateCenter, angle, text, color, background, fontSize, lineHeight } = opts;
41
+ rotateByCenter(ctx, angle, rotateCenter, () => {
42
+ ctx.$setFont({
43
+ fontWeight: '300',
44
+ fontSize,
45
+ fontFamily
46
+ });
47
+ const padding = (lineHeight - fontSize) / 2;
48
+ const textWidth = ctx.$undoPixelRatio(ctx.measureText(text).width);
49
+ const bgStart = {
50
+ x: point.x,
51
+ y: point.y
52
+ };
53
+ const bgEnd = {
54
+ x: bgStart.x + textWidth + padding * 2,
55
+ y: bgStart.y + fontSize + padding
56
+ };
57
+ const textStart = {
58
+ x: point.x + padding,
59
+ y: point.y
60
+ };
61
+ ctx.setLineDash([]);
62
+ ctx.fillStyle = background;
63
+ ctx.beginPath();
64
+ ctx.moveTo(bgStart.x, bgStart.y);
65
+ ctx.lineTo(bgEnd.x, bgStart.y);
66
+ ctx.lineTo(bgEnd.x, bgEnd.y);
67
+ ctx.lineTo(bgStart.x, bgEnd.y);
68
+ ctx.closePath();
69
+ ctx.fill();
70
+ ctx.fillStyle = color;
71
+ ctx.textBaseline = 'top';
72
+ ctx.fillText(text, textStart.x, textStart.y + padding);
73
+ });
74
+ }
75
+ export function drawAngleInfoText(ctx, opts) {
76
+ const { point, rotateCenter, angle, text, color, background, fontSize, lineHeight } = opts;
77
+ rotateByCenter(ctx, angle, rotateCenter, () => {
78
+ ctx.$setFont({
79
+ fontWeight: '300',
80
+ fontSize,
81
+ fontFamily
82
+ });
83
+ const padding = (lineHeight - fontSize) / 2;
84
+ const textWidth = ctx.$undoPixelRatio(ctx.measureText(text).width);
85
+ const bgStart = {
86
+ x: point.x,
87
+ y: point.y
88
+ };
89
+ const bgEnd = {
90
+ x: bgStart.x + textWidth + padding * 2,
91
+ y: bgStart.y + fontSize + padding
92
+ };
93
+ const textStart = {
94
+ x: point.x + padding,
95
+ y: point.y
96
+ };
97
+ ctx.setLineDash([]);
98
+ ctx.fillStyle = background;
99
+ ctx.beginPath();
100
+ ctx.moveTo(bgStart.x, bgStart.y);
101
+ ctx.lineTo(bgEnd.x, bgStart.y);
102
+ ctx.lineTo(bgEnd.x, bgEnd.y);
103
+ ctx.lineTo(bgStart.x, bgEnd.y);
104
+ ctx.closePath();
105
+ ctx.fill();
106
+ ctx.fillStyle = color;
107
+ ctx.textBaseline = 'top';
108
+ ctx.fillText(text, textStart.x, textStart.y + padding);
109
+ });
110
+ }
@@ -0,0 +1,3 @@
1
+ import type { BoardMiddleware } from '@idraw/types';
2
+ import type { DeepInfoSharedStorage } from './types';
3
+ export declare const MiddlewareInfo: BoardMiddleware<DeepInfoSharedStorage>;
@@ -0,0 +1,110 @@
1
+ import { formatNumber, getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot, createUUID, limitAngle, rotatePoint, parseAngleToRadian } from '@idraw/util';
2
+ import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
3
+ import { drawSizeInfoText, drawPositionInfoText, drawAngleInfoText } from './draw-info';
4
+ const infoBackground = '#1973bac6';
5
+ const infoTextColor = '#ffffff';
6
+ const infoFontSize = 10;
7
+ const infoLineHeight = 16;
8
+ export const MiddlewareInfo = (opts) => {
9
+ const { boardContent, calculator } = opts;
10
+ const { helperContext } = boardContent;
11
+ return {
12
+ name: '@middleware/info',
13
+ beforeDrawFrame({ snapshot }) {
14
+ const { sharedStore } = snapshot;
15
+ const selectedElementList = sharedStore[keySelectedElementList];
16
+ const actionType = sharedStore[keyActionType];
17
+ const groupQueue = sharedStore[keyGroupQueue] || [];
18
+ if (selectedElementList.length === 1) {
19
+ const elem = selectedElementList[0];
20
+ if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
21
+ const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
22
+ const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
23
+ const { x, y, w, h, angle } = elem;
24
+ const totalGroupQueue = [
25
+ ...groupQueue,
26
+ ...[
27
+ {
28
+ uuid: createUUID(),
29
+ x,
30
+ y,
31
+ w,
32
+ h,
33
+ angle,
34
+ type: 'group',
35
+ detail: { children: [] }
36
+ }
37
+ ]
38
+ ];
39
+ const calcOpts = { viewScaleInfo, viewSizeInfo };
40
+ const rangeRectInfo = calculator.calcViewRectInfoFromOrigin(elem.uuid, calcOpts);
41
+ let totalAngle = 0;
42
+ totalGroupQueue.forEach((group) => {
43
+ totalAngle += group.angle || 0;
44
+ });
45
+ const totalRadian = parseAngleToRadian(limitAngle(0 - totalAngle));
46
+ if (rangeRectInfo) {
47
+ const elemCenter = rangeRectInfo === null || rangeRectInfo === void 0 ? void 0 : rangeRectInfo.center;
48
+ const rectInfo = {
49
+ topLeft: rotatePoint(elemCenter, rangeRectInfo.topLeft, totalRadian),
50
+ topRight: rotatePoint(elemCenter, rangeRectInfo.topRight, totalRadian),
51
+ bottomRight: rotatePoint(elemCenter, rangeRectInfo.bottomRight, totalRadian),
52
+ bottomLeft: rotatePoint(elemCenter, rangeRectInfo.bottomLeft, totalRadian),
53
+ center: rotatePoint(elemCenter, rangeRectInfo.center, totalRadian),
54
+ top: rotatePoint(elemCenter, rangeRectInfo.top, totalRadian),
55
+ right: rotatePoint(elemCenter, rangeRectInfo.right, totalRadian),
56
+ bottom: rotatePoint(elemCenter, rangeRectInfo.bottom, totalRadian),
57
+ left: rotatePoint(elemCenter, rangeRectInfo.left, totalRadian)
58
+ };
59
+ const x = formatNumber(elem.x, { decimalPlaces: 2 });
60
+ const y = formatNumber(elem.y, { decimalPlaces: 2 });
61
+ const w = formatNumber(elem.w, { decimalPlaces: 2 });
62
+ const h = formatNumber(elem.h, { decimalPlaces: 2 });
63
+ const xyText = `${formatNumber(x, { decimalPlaces: 0 })},${formatNumber(y, { decimalPlaces: 0 })}`;
64
+ const whText = `${formatNumber(w, { decimalPlaces: 0 })}x${formatNumber(h, { decimalPlaces: 0 })}`;
65
+ const angleText = `${formatNumber(elem.angle || 0, { decimalPlaces: 0 })}°`;
66
+ drawSizeInfoText(helperContext, {
67
+ point: {
68
+ x: rectInfo.bottom.x,
69
+ y: rectInfo.bottom.y + infoFontSize
70
+ },
71
+ rotateCenter: rectInfo.center,
72
+ angle: totalAngle,
73
+ text: whText,
74
+ fontSize: infoFontSize,
75
+ lineHeight: infoLineHeight,
76
+ color: infoTextColor,
77
+ background: infoBackground
78
+ });
79
+ drawPositionInfoText(helperContext, {
80
+ point: {
81
+ x: rectInfo.topLeft.x,
82
+ y: rectInfo.topLeft.y - infoFontSize * 2
83
+ },
84
+ rotateCenter: rectInfo.center,
85
+ angle: totalAngle,
86
+ text: xyText,
87
+ fontSize: infoFontSize,
88
+ lineHeight: infoLineHeight,
89
+ color: infoTextColor,
90
+ background: infoBackground
91
+ });
92
+ drawAngleInfoText(helperContext, {
93
+ point: {
94
+ x: rectInfo.top.x + infoFontSize,
95
+ y: rectInfo.top.y - infoFontSize * 2
96
+ },
97
+ rotateCenter: rectInfo.center,
98
+ angle: totalAngle,
99
+ text: angleText,
100
+ fontSize: infoFontSize,
101
+ lineHeight: infoLineHeight,
102
+ color: infoTextColor,
103
+ background: infoBackground
104
+ });
105
+ }
106
+ }
107
+ }
108
+ }
109
+ };
110
+ };
@@ -0,0 +1,3 @@
1
+ import { keySelectedElementList, keyActionType, keyGroupQueue } from '../selector';
2
+ import type { DeepSelectorSharedStorage } from '../selector';
3
+ export type DeepInfoSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType | typeof keyGroupQueue>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
1
  import type { BoardMiddleware, CoreEventMap } from '@idraw/types';
2
+ import type { DeepRulerSharedStorage } from './types';
2
3
  export declare const middlewareEventRuler = "@middleware/show-ruler";
3
- export declare const MiddlewareRuler: BoardMiddleware<Record<string, any>, CoreEventMap>;
4
+ export declare const MiddlewareRuler: BoardMiddleware<DeepRulerSharedStorage, CoreEventMap>;
@@ -1,8 +1,8 @@
1
1
  import { getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot } from '@idraw/util';
2
- import { drawRulerBackground, drawXRuler, drawYRuler, calcXRulerScaleList, calcYRulerScaleList, drawUnderGrid } from './util';
2
+ import { drawRulerBackground, drawXRuler, drawYRuler, calcXRulerScaleList, calcYRulerScaleList, drawUnderGrid, drawScrollerSelectedArea } from './util';
3
3
  export const middlewareEventRuler = '@middleware/show-ruler';
4
4
  export const MiddlewareRuler = (opts) => {
5
- const { boardContent, viewer, eventHub } = opts;
5
+ const { boardContent, viewer, eventHub, calculator } = opts;
6
6
  const { helperContext, underContext } = boardContent;
7
7
  let show = true;
8
8
  let showGrid = true;
@@ -29,6 +29,7 @@ export const MiddlewareRuler = (opts) => {
29
29
  if (show === true) {
30
30
  const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
31
31
  const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
32
+ drawScrollerSelectedArea(helperContext, { snapshot, calculator });
32
33
  drawRulerBackground(helperContext, { viewScaleInfo, viewSizeInfo });
33
34
  const xList = calcXRulerScaleList({ viewScaleInfo, viewSizeInfo });
34
35
  drawXRuler(helperContext, { scaleList: xList });
@@ -0,0 +1,3 @@
1
+ import { keySelectedElementList, keyActionType } from '../selector';
2
+ import type { DeepSelectorSharedStorage } from '../selector';
3
+ export type DeepRulerSharedStorage = Pick<DeepSelectorSharedStorage, typeof keySelectedElementList | typeof keyActionType>;
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
- import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D } from '@idraw/types';
1
+ import type { ViewScaleInfo, ViewSizeInfo, ViewContext2D, BoardViewerFrameSnapshot, ViewCalculator } from '@idraw/types';
2
+ import type { DeepRulerSharedStorage } from './types';
2
3
  interface RulerScale {
3
4
  num: number;
4
5
  showNum: boolean;
@@ -30,4 +31,8 @@ export declare function drawUnderGrid(ctx: ViewContext2D, opts: {
30
31
  viewScaleInfo: ViewScaleInfo;
31
32
  viewSizeInfo: ViewSizeInfo;
32
33
  }): void;
34
+ export declare function drawScrollerSelectedArea(ctx: ViewContext2D, opts: {
35
+ snapshot: BoardViewerFrameSnapshot<DeepRulerSharedStorage>;
36
+ calculator: ViewCalculator;
37
+ }): void;
33
38
  export {};
@@ -1,4 +1,5 @@
1
- import { formatNumber, rotateByCenter } from '@idraw/util';
1
+ import { formatNumber, rotateByCenter, getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot } from '@idraw/util';
2
+ import { keySelectedElementList, keyActionType } from '../selector';
2
3
  const rulerSize = 16;
3
4
  const background = '#FFFFFFA8';
4
5
  const borderColor = '#00000080';
@@ -10,6 +11,7 @@ const fontWeight = 100;
10
11
  const gridColor = '#AAAAAA20';
11
12
  const gridKeyColor = '#AAAAAA40';
12
13
  const lineSize = 1;
14
+ const selectedAreaColor = '#196097';
13
15
  function calcRulerScaleList(opts) {
14
16
  const { scale, viewLength, viewOffset } = opts;
15
17
  const list = [];
@@ -185,3 +187,55 @@ export function drawUnderGrid(ctx, opts) {
185
187
  ctx.stroke();
186
188
  }
187
189
  }
190
+ export function drawScrollerSelectedArea(ctx, opts) {
191
+ const { snapshot, calculator } = opts;
192
+ const { sharedStore } = snapshot;
193
+ const selectedElementList = sharedStore[keySelectedElementList];
194
+ const actionType = sharedStore[keyActionType];
195
+ if (['select', 'drag', 'drag-list', 'drag-list-end'].includes(actionType) && selectedElementList.length > 0) {
196
+ const viewScaleInfo = getViewScaleInfoFromSnapshot(snapshot);
197
+ const viewSizeInfo = getViewSizeInfoFromSnapshot(snapshot);
198
+ const rangeRectInfoList = [];
199
+ const xAreaStartList = [];
200
+ const xAreaEndList = [];
201
+ const yAreaStartList = [];
202
+ const yAreaEndList = [];
203
+ selectedElementList.forEach((elem) => {
204
+ const rectInfo = calculator.calcViewRectInfoFromRange(elem.uuid, {
205
+ viewScaleInfo,
206
+ viewSizeInfo
207
+ });
208
+ if (rectInfo) {
209
+ rangeRectInfoList.push(rectInfo);
210
+ xAreaStartList.push(rectInfo.left.x);
211
+ xAreaEndList.push(rectInfo.right.x);
212
+ yAreaStartList.push(rectInfo.top.y);
213
+ yAreaEndList.push(rectInfo.bottom.y);
214
+ }
215
+ });
216
+ if (!(rangeRectInfoList.length > 0)) {
217
+ return;
218
+ }
219
+ const xAreaStart = Math.min(...xAreaStartList);
220
+ const xAreaEnd = Math.max(...xAreaEndList);
221
+ const yAreaStart = Math.min(...yAreaStartList);
222
+ const yAreaEnd = Math.max(...yAreaEndList);
223
+ ctx.globalAlpha = 1;
224
+ ctx.beginPath();
225
+ ctx.moveTo(xAreaStart, 0);
226
+ ctx.lineTo(xAreaEnd, 0);
227
+ ctx.lineTo(xAreaEnd, rulerSize);
228
+ ctx.lineTo(xAreaStart, rulerSize);
229
+ ctx.fillStyle = selectedAreaColor;
230
+ ctx.closePath();
231
+ ctx.fill();
232
+ ctx.beginPath();
233
+ ctx.moveTo(0, yAreaStart);
234
+ ctx.lineTo(rulerSize, yAreaStart);
235
+ ctx.lineTo(rulerSize, yAreaEnd);
236
+ ctx.lineTo(0, yAreaEnd);
237
+ ctx.fillStyle = selectedAreaColor;
238
+ ctx.closePath();
239
+ ctx.fill();
240
+ }
241
+ }
@@ -1,2 +1,3 @@
1
1
  import type { BoardMiddleware } from '@idraw/types';
2
- export declare const MiddlewareScroller: BoardMiddleware;
2
+ import type { DeepScrollerSharedStorage } from './types';
3
+ export declare const MiddlewareScroller: BoardMiddleware<DeepScrollerSharedStorage>;
@@ -0,0 +1,9 @@
1
+ import type { Point, ElementSize } from '@idraw/types';
2
+ import { keyXThumbRect, keyYThumbRect, keyPrevPoint, keyActivePoint, keyActiveThumbType } from './config';
3
+ export type DeepScrollerSharedStorage = {
4
+ [keyXThumbRect]: null | ElementSize;
5
+ [keyYThumbRect]: null | ElementSize;
6
+ [keyPrevPoint]: null | Point;
7
+ [keyActivePoint]: null | Point;
8
+ [keyActiveThumbType]: null | 'X' | 'Y';
9
+ };
@@ -0,0 +1 @@
1
+ import { keyXThumbRect, keyYThumbRect, keyPrevPoint, keyActivePoint, keyActiveThumbType } from './config';
@@ -2,7 +2,7 @@ import { getViewScaleInfoFromSnapshot, getViewSizeInfoFromSnapshot } from '@idra
2
2
  import { keyActivePoint, keyActiveThumbType, keyPrevPoint, keyXThumbRect, keyYThumbRect } from './config';
3
3
  const minScrollerWidth = 12;
4
4
  const scrollerLineWidth = 16;
5
- const scrollerThumbAlpha = 0.36;
5
+ const scrollerThumbAlpha = 0.3;
6
6
  const scrollConfig = {
7
7
  width: minScrollerWidth,
8
8
  thumbColor: '#000000AA',
@@ -1,5 +1,8 @@
1
1
  import type { CoreEventMap } from '@idraw/types';
2
2
  import type { BoardMiddleware, DeepSelectorSharedStorage } from './types';
3
+ import { keyActionType, keyResizeType, keyGroupQueue, keySelectedElementList } from './config';
4
+ export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue };
5
+ export type { DeepSelectorSharedStorage };
3
6
  export declare const middlewareEventSelect: string;
4
7
  export declare const middlewareEventSelectClear: string;
5
8
  export declare const MiddlewareSelector: BoardMiddleware<DeepSelectorSharedStorage, CoreEventMap>;
@@ -5,6 +5,7 @@ import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calc
5
5
  import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, controllerSize } from './config';
6
6
  import { calcReferenceInfo } from './reference';
7
7
  import { middlewareEventTextEdit } from '../text-editor';
8
+ export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue };
8
9
  export const middlewareEventSelect = '@middleware/select';
9
10
  export const middlewareEventSelectClear = '@middleware/select-clear';
10
11
  export const MiddlewareSelector = (opts) => {
@@ -367,7 +368,7 @@ export const MiddlewareSelector = (opts) => {
367
368
  type: 'updateElement',
368
369
  content: {
369
370
  element: elem,
370
- position: sharer.getSharedStorage(keySelectedElementPosition) || []
371
+ position: getElementPositionFromList(elem.uuid, data.elements) || []
371
372
  }
372
373
  },
373
374
  viewSizeInfo,
@@ -417,21 +418,22 @@ export const MiddlewareSelector = (opts) => {
417
418
  resizeType,
418
419
  sharer
419
420
  });
420
- elems[0].angle = resizedElemSize.angle;
421
+ elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
421
422
  }
422
423
  else {
423
424
  const resizedElemSize = resizeElement(elems[0], { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
424
- elems[0].x = calculator.toGridNum(resizedElemSize.x);
425
- elems[0].y = calculator.toGridNum(resizedElemSize.y);
425
+ const calcOpts = { ignore: !!elems[0].angle };
426
+ elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
427
+ elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
426
428
  if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
427
429
  deepResizeGroupElement(elems[0], {
428
- w: calculator.toGridNum(resizedElemSize.w),
429
- h: calculator.toGridNum(resizedElemSize.h)
430
+ w: calculator.toGridNum(resizedElemSize.w, calcOpts),
431
+ h: calculator.toGridNum(resizedElemSize.h, calcOpts)
430
432
  });
431
433
  }
432
434
  else {
433
- elems[0].w = calculator.toGridNum(resizedElemSize.w);
434
- elems[0].h = calculator.toGridNum(resizedElemSize.h);
435
+ elems[0].w = calculator.toGridNum(resizedElemSize.w, calcOpts);
436
+ elems[0].h = calculator.toGridNum(resizedElemSize.h, calcOpts);
435
437
  }
436
438
  }
437
439
  updateSelectedElementList([elems[0]]);