@idraw/core 0.4.0-beta.25 → 0.4.0-beta.26

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,6 +1,6 @@
1
1
  import type { Data, PointSize, CoreOptions, BoardMiddleware, ViewSizeInfo, CoreEventMap, ViewScaleInfo, LoadItemMap, ModifyOptions } from '@idraw/types';
2
2
  export { eventChange } from './config';
3
- export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup } from './middleware/selector';
3
+ export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid } from './middleware/selector';
4
4
  export { MiddlewareScroller } from './middleware/scroller';
5
5
  export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
6
6
  export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
package/dist/esm/index.js CHANGED
@@ -14,7 +14,7 @@ import { Board } from '@idraw/board';
14
14
  import { createBoardContent, validateElements } from '@idraw/util';
15
15
  import { Cursor } from './lib/cursor';
16
16
  export { eventChange } from './config';
17
- export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup } from './middleware/selector';
17
+ export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid } from './middleware/selector';
18
18
  export { MiddlewareScroller } from './middleware/scroller';
19
19
  export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
20
20
  export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
@@ -15,6 +15,7 @@ export declare const keyGroupQueue: unique symbol;
15
15
  export declare const keyGroupQueueVertexesList: unique symbol;
16
16
  export declare const keyIsMoving: unique symbol;
17
17
  export declare const keyEnableSelectInGroup: unique symbol;
18
+ export declare const keyEnableSnapToGrid: unique symbol;
18
19
  export declare const keyDebugElemCenter: unique symbol;
19
20
  export declare const keyDebugStartVertical: unique symbol;
20
21
  export declare const keyDebugEndVertical: unique symbol;
@@ -32,3 +33,4 @@ export declare const referenceColor = "#f7276e";
32
33
  export declare const middlewareEventSelect: string;
33
34
  export declare const middlewareEventSelectClear: string;
34
35
  export declare const middlewareEventSelectInGroup: string;
36
+ export declare const middlewareEventSnapToGrid: string;
@@ -14,7 +14,8 @@ export const keySelectedReferenceYLines = Symbol(`${key}_selectedReferenceYLines
14
14
  export const keyGroupQueue = Symbol(`${key}_groupQueue`);
15
15
  export const keyGroupQueueVertexesList = Symbol(`${key}_groupQueueVertexesList`);
16
16
  export const keyIsMoving = Symbol(`${key}_isMoving`);
17
- export const keyEnableSelectInGroup = Symbol(`${key}_canSelectInGroup`);
17
+ export const keyEnableSelectInGroup = Symbol(`${key}_enableSelectInGroup`);
18
+ export const keyEnableSnapToGrid = Symbol(`${key}_enableSnapToGrid`);
18
19
  export const keyDebugElemCenter = Symbol(`${key}_debug_elemCenter`);
19
20
  export const keyDebugStartVertical = Symbol(`${key}_debug_startVertical`);
20
21
  export const keyDebugEndVertical = Symbol(`${key}_debug_endVertical`);
@@ -32,3 +33,4 @@ export const referenceColor = '#f7276e';
32
33
  export const middlewareEventSelect = '@middleware/select';
33
34
  export const middlewareEventSelectClear = '@middleware/select-clear';
34
35
  export const middlewareEventSelectInGroup = '@middleware/select-in-group';
36
+ export const middlewareEventSnapToGrid = '@middleware/snap-to-grid';
@@ -1,7 +1,7 @@
1
1
  import type { CoreEventMap } from '@idraw/types';
2
2
  import type { BoardMiddleware, ActionType, DeepSelectorSharedStorage } from './types';
3
- import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, keyActionType, keyResizeType, keyGroupQueue, keySelectedElementList } from './config';
3
+ import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyGroupQueue, keySelectedElementList } from './config';
4
4
  export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue };
5
5
  export type { DeepSelectorSharedStorage, ActionType };
6
- export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup };
6
+ export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid };
7
7
  export declare const MiddlewareSelector: BoardMiddleware<DeepSelectorSharedStorage, CoreEventMap>;
@@ -2,18 +2,19 @@ import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueV
2
2
  import { drawHoverVertexesWrapper, drawLockVertexesWrapper, 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
- import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, controllerSize } from './config';
5
+ import { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize } from './config';
6
6
  import { calcReferenceInfo } from './reference';
7
7
  import { middlewareEventTextEdit } from '../text-editor';
8
8
  import { eventChange } from '../../config';
9
9
  export { keySelectedElementList, keyActionType, keyResizeType, keyGroupQueue };
10
- export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup };
10
+ export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid };
11
11
  export const MiddlewareSelector = (opts) => {
12
12
  const { viewer, sharer, boardContent, calculator, eventHub } = opts;
13
13
  const { overlayContext } = boardContent;
14
14
  let prevPoint = null;
15
15
  let inBusyMode = null;
16
16
  sharer.setSharedStorage(keyActionType, null);
17
+ sharer.setSharedStorage(keyEnableSnapToGrid, true);
17
18
  const getActiveElements = () => {
18
19
  return sharer.getSharedStorage(keySelectedElementList);
19
20
  };
@@ -131,6 +132,9 @@ export const MiddlewareSelector = (opts) => {
131
132
  clear();
132
133
  viewer.drawFrame();
133
134
  };
135
+ const setSnapToSnapCallback = (e) => {
136
+ sharer.setSharedStorage(keyEnableSnapToGrid, !!e.enable);
137
+ };
134
138
  const selectInGroupCallback = (e) => {
135
139
  sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable);
136
140
  };
@@ -140,11 +144,13 @@ export const MiddlewareSelector = (opts) => {
140
144
  eventHub.on(middlewareEventSelect, selectCallback);
141
145
  eventHub.on(middlewareEventSelectClear, selectClearCallback);
142
146
  eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
147
+ eventHub.on(middlewareEventSnapToGrid, setSnapToSnapCallback);
143
148
  },
144
149
  disuse() {
145
150
  eventHub.off(middlewareEventSelect, selectCallback);
146
151
  eventHub.off(middlewareEventSelectClear, selectClearCallback);
147
152
  eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
153
+ eventHub.off(middlewareEventSnapToGrid, setSnapToSnapCallback);
148
154
  },
149
155
  hover: (e) => {
150
156
  var _a, _b, _c, _d, _e;
@@ -319,33 +325,36 @@ export const MiddlewareSelector = (opts) => {
319
325
  const resizeType = sharer.getSharedStorage(keyResizeType);
320
326
  const actionType = sharer.getSharedStorage(keyActionType);
321
327
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
328
+ const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
322
329
  if (actionType === 'drag') {
323
330
  inBusyMode = 'drag';
324
331
  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) {
325
332
  const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
326
333
  let totalMoveX = calculator.toGridNum(moveX / scale);
327
334
  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);
335
+ if (enableSnapToGrid === true) {
336
+ const referenceInfo = calcReferenceInfo(elems[0].uuid, {
337
+ calculator,
338
+ data,
339
+ groupQueue,
340
+ viewScaleInfo,
341
+ viewSizeInfo
342
+ });
343
+ try {
344
+ if (referenceInfo) {
345
+ if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
346
+ totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
347
+ }
348
+ if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
349
+ totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
350
+ }
351
+ sharer.setSharedStorage(keySelectedReferenceXLines, referenceInfo.xLines);
352
+ sharer.setSharedStorage(keySelectedReferenceYLines, referenceInfo.yLines);
342
353
  }
343
- sharer.setSharedStorage(keySelectedReferenceXLines, referenceInfo.xLines);
344
- sharer.setSharedStorage(keySelectedReferenceYLines, referenceInfo.yLines);
345
354
  }
346
- }
347
- catch (err) {
348
- console.error(err);
355
+ catch (err) {
356
+ console.error(err);
357
+ }
349
358
  }
350
359
  elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
351
360
  elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
@@ -598,6 +607,7 @@ export const MiddlewareSelector = (opts) => {
598
607
  const groupQueue = sharedStore[keyGroupQueue];
599
608
  const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
600
609
  const isMoving = sharedStore[keyIsMoving];
610
+ const enableSnapToGrid = sharedStore[keyEnableSnapToGrid];
601
611
  const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
602
612
  const selectedElementController = elem
603
613
  ? calcElementSizeController(elem, {
@@ -626,10 +636,12 @@ export const MiddlewareSelector = (opts) => {
626
636
  if (actionType === 'drag') {
627
637
  const xLines = sharer.getSharedStorage(keySelectedReferenceXLines);
628
638
  const yLines = sharer.getSharedStorage(keySelectedReferenceYLines);
629
- drawReferenceLines(overlayContext, {
630
- xLines,
631
- yLines
632
- });
639
+ if (enableSnapToGrid === true) {
640
+ drawReferenceLines(overlayContext, {
641
+ xLines,
642
+ yLines
643
+ });
644
+ }
633
645
  }
634
646
  }
635
647
  }
@@ -651,10 +663,12 @@ export const MiddlewareSelector = (opts) => {
651
663
  if (actionType === 'drag') {
652
664
  const xLines = sharer.getSharedStorage(keySelectedReferenceXLines);
653
665
  const yLines = sharer.getSharedStorage(keySelectedReferenceYLines);
654
- drawReferenceLines(overlayContext, {
655
- xLines,
656
- yLines
657
- });
666
+ if (enableSnapToGrid === true) {
667
+ drawReferenceLines(overlayContext, {
668
+ xLines,
669
+ yLines
670
+ });
671
+ }
658
672
  }
659
673
  }
660
674
  else if (actionType === 'area' && areaStart && areaEnd) {
@@ -1,5 +1,5 @@
1
1
  import { Data, ElementSize, ElementType, Element, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware, ViewRectVertexes, ElementSizeController, ElementPosition } from '@idraw/types';
2
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
2
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
3
3
  export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware };
4
4
  export type ControllerStyle = ElementSize & {
5
5
  borderWidth: number;
@@ -35,6 +35,7 @@ export type DeepSelectorSharedStorage = {
35
35
  [keySelectedReferenceYLines]: Array<PointSize[]>;
36
36
  [keyIsMoving]: boolean | null;
37
37
  [keyEnableSelectInGroup]: boolean | null;
38
+ [keyEnableSnapToGrid]: boolean | null;
38
39
  [keyDebugElemCenter]: PointSize | null;
39
40
  [keyDebugEnd0]: PointSize | null;
40
41
  [keyDebugEndHorizontal]: PointSize | null;
@@ -1 +1 @@
1
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
1
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keySelectedReferenceXLines, keySelectedReferenceYLines, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
@@ -2520,7 +2520,7 @@ var __privateMethod = (obj, member, method) => {
2520
2520
  }
2521
2521
  function drawRect(ctx, elem, opts) {
2522
2522
  const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
2523
- const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo, viewSizeInfo }) || elem;
2523
+ const { x: x2, y: y2, w: w2, h: h2, angle: angle2 } = calcViewElementSize(elem, { viewScaleInfo }) || elem;
2524
2524
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2525
2525
  rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2526
2526
  drawBoxShadow(ctx, viewElem, {
@@ -2805,7 +2805,20 @@ var __privateMethod = (obj, member, method) => {
2805
2805
  });
2806
2806
  });
2807
2807
  }
2808
+ var __rest = function(s, e) {
2809
+ var t = {};
2810
+ for (var p in s)
2811
+ if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
2812
+ t[p] = s[p];
2813
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
2814
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
2815
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
2816
+ t[p[i]] = s[p[i]];
2817
+ }
2818
+ return t;
2819
+ };
2808
2820
  function drawPath(ctx, elem, opts) {
2821
+ var _a, _b;
2809
2822
  const { detail } = elem;
2810
2823
  const { originX, originY, originW, originH, fillRule } = detail;
2811
2824
  const { viewScaleInfo, viewSizeInfo, parentOpacity } = opts;
@@ -2816,11 +2829,31 @@ var __privateMethod = (obj, member, method) => {
2816
2829
  const viewOriginY = originY * scaleH;
2817
2830
  const internalX = x2 - viewOriginX;
2818
2831
  const internalY = y2 - viewOriginY;
2832
+ const _c = elem.detail, restDetail = __rest(_c, ["clipPath", "clipPathStrokeColor", "clipPathStrokeWidth"]);
2819
2833
  const scaleNum = viewScaleInfo.scale * viewSizeInfo.devicePixelRatio;
2820
2834
  const viewElem = Object.assign(Object.assign({}, elem), { x: x2, y: y2, w: w2, h: h2, angle: angle2 });
2835
+ let boxViewElem = Object.assign({}, viewElem);
2836
+ boxViewElem.detail = restDetail;
2837
+ let boxOriginElem = Object.assign({}, elem);
2838
+ boxOriginElem.detail = restDetail;
2839
+ if (detail.fill && detail.fill !== "string" && ((_b = (_a = detail.fill) === null || _a === void 0 ? void 0 : _a.type) === null || _b === void 0 ? void 0 : _b.includes("gradient"))) {
2840
+ boxViewElem = Object.assign(Object.assign({}, viewElem), {
2841
+ detail: Object.assign(Object.assign({}, viewElem.detail), {
2842
+ background: detail.fill,
2843
+ clipPath: {
2844
+ commands: detail.commands,
2845
+ originX,
2846
+ originY,
2847
+ originW,
2848
+ originH
2849
+ }
2850
+ })
2851
+ });
2852
+ boxOriginElem.detail = Object.assign({}, boxViewElem.detail);
2853
+ }
2821
2854
  rotateElement$1(ctx, { x: x2, y: y2, w: w2, h: h2, angle: angle2 }, () => {
2822
- drawBox(ctx, viewElem, {
2823
- originElem: elem,
2855
+ drawBox(ctx, boxViewElem, {
2856
+ originElem: boxOriginElem,
2824
2857
  calcElemSize: { x: x2, y: y2, w: w2, h: h2, angle: angle2 },
2825
2858
  viewScaleInfo,
2826
2859
  viewSizeInfo,
@@ -2836,7 +2869,13 @@ var __privateMethod = (obj, member, method) => {
2836
2869
  const pathStr = generateSVGPath(detail.commands || []);
2837
2870
  const path2d = new Path2D(pathStr);
2838
2871
  if (detail.fill) {
2839
- ctx.fillStyle = detail.fill;
2872
+ if (typeof detail.fill === "string") {
2873
+ ctx.fillStyle = detail.fill;
2874
+ } else {
2875
+ ctx.fillStyle = "transparent";
2876
+ }
2877
+ }
2878
+ if (detail.fill) {
2840
2879
  ctx.fill(path2d, fillRule);
2841
2880
  }
2842
2881
  if (detail.stroke && detail.strokeWidth !== 0) {
@@ -2853,6 +2892,7 @@ var __privateMethod = (obj, member, method) => {
2853
2892
  });
2854
2893
  });
2855
2894
  }
2895
+ const visiableMinSize = 0.4;
2856
2896
  function drawElement(ctx, elem, opts) {
2857
2897
  var _a, _b, _c;
2858
2898
  if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.invisible) === true) {
@@ -2860,7 +2900,7 @@ var __privateMethod = (obj, member, method) => {
2860
2900
  }
2861
2901
  const { w: w2, h: h2 } = elem;
2862
2902
  const { scale } = opts.viewScaleInfo;
2863
- if (scale < 1 && (w2 * scale < 1 || h2 * scale < 1) || opts.parentOpacity === 0) {
2903
+ if (scale < 1 && (w2 * scale < visiableMinSize || h2 * scale < visiableMinSize) || opts.parentOpacity === 0) {
2864
2904
  return;
2865
2905
  }
2866
2906
  const { overrideElementMap } = opts;
@@ -4515,7 +4555,8 @@ var __privateMethod = (obj, member, method) => {
4515
4555
  const keyGroupQueue = Symbol(`${key$3}_groupQueue`);
4516
4556
  const keyGroupQueueVertexesList = Symbol(`${key$3}_groupQueueVertexesList`);
4517
4557
  const keyIsMoving = Symbol(`${key$3}_isMoving`);
4518
- const keyEnableSelectInGroup = Symbol(`${key$3}_canSelectInGroup`);
4558
+ const keyEnableSelectInGroup = Symbol(`${key$3}_enableSelectInGroup`);
4559
+ const keyEnableSnapToGrid = Symbol(`${key$3}_enableSnapToGrid`);
4519
4560
  const selectWrapperBorderWidth = 2;
4520
4561
  const resizeControllerBorderWidth = 4;
4521
4562
  const areaBorderWidth = 1;
@@ -4526,6 +4567,7 @@ var __privateMethod = (obj, member, method) => {
4526
4567
  const middlewareEventSelect = "@middleware/select";
4527
4568
  const middlewareEventSelectClear = "@middleware/select-clear";
4528
4569
  const middlewareEventSelectInGroup = "@middleware/select-in-group";
4570
+ const middlewareEventSnapToGrid = "@middleware/snap-to-grid";
4529
4571
  function drawVertexes(ctx, vertexes, opts) {
4530
4572
  const { borderColor: borderColor2, borderWidth: borderWidth2, background: background2, lineDash } = opts;
4531
4573
  ctx.setLineDash([]);
@@ -6002,6 +6044,7 @@ var __privateMethod = (obj, member, method) => {
6002
6044
  let prevPoint = null;
6003
6045
  let inBusyMode = null;
6004
6046
  sharer.setSharedStorage(keyActionType, null);
6047
+ sharer.setSharedStorage(keyEnableSnapToGrid, true);
6005
6048
  const getActiveElements = () => {
6006
6049
  return sharer.getSharedStorage(keySelectedElementList);
6007
6050
  };
@@ -6114,6 +6157,9 @@ var __privateMethod = (obj, member, method) => {
6114
6157
  clear();
6115
6158
  viewer.drawFrame();
6116
6159
  };
6160
+ const setSnapToSnapCallback = (e) => {
6161
+ sharer.setSharedStorage(keyEnableSnapToGrid, !!e.enable);
6162
+ };
6117
6163
  const selectInGroupCallback = (e) => {
6118
6164
  sharer.setSharedStorage(keyEnableSelectInGroup, !!e.enable);
6119
6165
  };
@@ -6123,11 +6169,13 @@ var __privateMethod = (obj, member, method) => {
6123
6169
  eventHub.on(middlewareEventSelect, selectCallback);
6124
6170
  eventHub.on(middlewareEventSelectClear, selectClearCallback);
6125
6171
  eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
6172
+ eventHub.on(middlewareEventSnapToGrid, setSnapToSnapCallback);
6126
6173
  },
6127
6174
  disuse() {
6128
6175
  eventHub.off(middlewareEventSelect, selectCallback);
6129
6176
  eventHub.off(middlewareEventSelectClear, selectClearCallback);
6130
6177
  eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
6178
+ eventHub.off(middlewareEventSnapToGrid, setSnapToSnapCallback);
6131
6179
  },
6132
6180
  hover: (e) => {
6133
6181
  var _a, _b, _c, _d, _e;
@@ -6295,32 +6343,35 @@ var __privateMethod = (obj, member, method) => {
6295
6343
  const resizeType = sharer.getSharedStorage(keyResizeType);
6296
6344
  const actionType = sharer.getSharedStorage(keyActionType);
6297
6345
  const groupQueue = sharer.getSharedStorage(keyGroupQueue);
6346
+ const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
6298
6347
  if (actionType === "drag") {
6299
6348
  inBusyMode = "drag";
6300
6349
  if (data && (elems == null ? void 0 : elems.length) === 1 && start && end && ((_b = (_a = elems[0]) == null ? void 0 : _a.operations) == null ? void 0 : _b.lock) !== true) {
6301
6350
  const { moveX, moveY } = calcMoveInGroup(start, end, groupQueue);
6302
6351
  let totalMoveX = calculator.toGridNum(moveX / scale);
6303
6352
  let totalMoveY = calculator.toGridNum(moveY / scale);
6304
- const referenceInfo = calcReferenceInfo(elems[0].uuid, {
6305
- calculator,
6306
- data,
6307
- groupQueue,
6308
- viewScaleInfo,
6309
- viewSizeInfo
6310
- });
6311
- try {
6312
- if (referenceInfo) {
6313
- if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
6314
- totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
6315
- }
6316
- if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
6317
- totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
6353
+ if (enableSnapToGrid === true) {
6354
+ const referenceInfo = calcReferenceInfo(elems[0].uuid, {
6355
+ calculator,
6356
+ data,
6357
+ groupQueue,
6358
+ viewScaleInfo,
6359
+ viewSizeInfo
6360
+ });
6361
+ try {
6362
+ if (referenceInfo) {
6363
+ if (is.x(referenceInfo.offsetX) && referenceInfo.offsetX !== null) {
6364
+ totalMoveX = calculator.toGridNum(totalMoveX + referenceInfo.offsetX);
6365
+ }
6366
+ if (is.y(referenceInfo.offsetY) && referenceInfo.offsetY !== null) {
6367
+ totalMoveY = calculator.toGridNum(totalMoveY + referenceInfo.offsetY);
6368
+ }
6369
+ sharer.setSharedStorage(keySelectedReferenceXLines, referenceInfo.xLines);
6370
+ sharer.setSharedStorage(keySelectedReferenceYLines, referenceInfo.yLines);
6318
6371
  }
6319
- sharer.setSharedStorage(keySelectedReferenceXLines, referenceInfo.xLines);
6320
- sharer.setSharedStorage(keySelectedReferenceYLines, referenceInfo.yLines);
6372
+ } catch (err) {
6373
+ console.error(err);
6321
6374
  }
6322
- } catch (err) {
6323
- console.error(err);
6324
6375
  }
6325
6376
  elems[0].x = calculator.toGridNum(elems[0].x + totalMoveX);
6326
6377
  elems[0].y = calculator.toGridNum(elems[0].y + totalMoveY);
@@ -6560,6 +6611,7 @@ var __privateMethod = (obj, member, method) => {
6560
6611
  const groupQueue = sharedStore[keyGroupQueue];
6561
6612
  const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
6562
6613
  const isMoving = sharedStore[keyIsMoving];
6614
+ const enableSnapToGrid = sharedStore[keyEnableSnapToGrid];
6563
6615
  const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
6564
6616
  const selectedElementController = elem ? calcElementSizeController(elem, {
6565
6617
  groupQueue,
@@ -6593,10 +6645,12 @@ var __privateMethod = (obj, member, method) => {
6593
6645
  if (actionType === "drag") {
6594
6646
  const xLines = sharer2.getSharedStorage(keySelectedReferenceXLines);
6595
6647
  const yLines = sharer2.getSharedStorage(keySelectedReferenceYLines);
6596
- drawReferenceLines(overlayContext, {
6597
- xLines,
6598
- yLines
6599
- });
6648
+ if (enableSnapToGrid === true) {
6649
+ drawReferenceLines(overlayContext, {
6650
+ xLines,
6651
+ yLines
6652
+ });
6653
+ }
6600
6654
  }
6601
6655
  }
6602
6656
  } else {
@@ -6624,10 +6678,12 @@ var __privateMethod = (obj, member, method) => {
6624
6678
  if (actionType === "drag") {
6625
6679
  const xLines = sharer2.getSharedStorage(keySelectedReferenceXLines);
6626
6680
  const yLines = sharer2.getSharedStorage(keySelectedReferenceYLines);
6627
- drawReferenceLines(overlayContext, {
6628
- xLines,
6629
- yLines
6630
- });
6681
+ if (enableSnapToGrid === true) {
6682
+ drawReferenceLines(overlayContext, {
6683
+ xLines,
6684
+ yLines
6685
+ });
6686
+ }
6631
6687
  }
6632
6688
  } else if (actionType === "area" && areaStart && areaEnd) {
6633
6689
  drawArea(overlayContext, { start: areaStart, end: areaEnd });
@@ -7984,6 +8040,7 @@ var __privateMethod = (obj, member, method) => {
7984
8040
  exports.middlewareEventSelect = middlewareEventSelect;
7985
8041
  exports.middlewareEventSelectClear = middlewareEventSelectClear;
7986
8042
  exports.middlewareEventSelectInGroup = middlewareEventSelectInGroup;
8043
+ exports.middlewareEventSnapToGrid = middlewareEventSnapToGrid;
7987
8044
  exports.middlewareEventTextChange = middlewareEventTextChange;
7988
8045
  exports.middlewareEventTextEdit = middlewareEventTextEdit;
7989
8046
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });