@idraw/core 0.4.0-beta.4 → 0.4.0-beta.41

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 (87) hide show
  1. package/dist/esm/board/index.d.ts +44 -0
  2. package/dist/esm/board/index.js +358 -0
  3. package/dist/esm/board/sharer.d.ts +21 -0
  4. package/dist/esm/board/sharer.js +101 -0
  5. package/dist/esm/board/viewer.d.ts +32 -0
  6. package/dist/esm/board/viewer.js +165 -0
  7. package/dist/esm/board/watcher.d.ts +15 -0
  8. package/dist/esm/board/watcher.js +218 -0
  9. package/dist/esm/config.d.ts +28 -0
  10. package/dist/esm/config.js +34 -0
  11. package/dist/esm/index.d.ts +37 -8
  12. package/dist/esm/index.js +265 -10
  13. package/dist/esm/lib/cursor-image.d.ts +1 -0
  14. package/dist/esm/lib/cursor-image.js +1 -0
  15. package/dist/esm/lib/cursor.d.ts +3 -12
  16. package/dist/esm/lib/cursor.js +137 -112
  17. package/dist/esm/middleware/dragger/index.d.ts +2 -2
  18. package/dist/esm/middleware/dragger/index.js +5 -3
  19. package/dist/esm/middleware/info/config.d.ts +5 -0
  20. package/dist/esm/middleware/info/config.js +9 -0
  21. package/dist/esm/middleware/info/draw-info.d.ts +29 -0
  22. package/dist/esm/middleware/info/draw-info.js +113 -0
  23. package/dist/esm/middleware/info/index.d.ts +9 -0
  24. package/dist/esm/middleware/info/index.js +131 -0
  25. package/dist/esm/middleware/info/types.d.ts +3 -0
  26. package/dist/esm/middleware/info/types.js +1 -0
  27. package/dist/esm/middleware/layout-selector/config.d.ts +11 -0
  28. package/dist/esm/middleware/layout-selector/config.js +12 -0
  29. package/dist/esm/middleware/layout-selector/index.d.ts +5 -0
  30. package/dist/esm/middleware/layout-selector/index.js +371 -0
  31. package/dist/esm/middleware/layout-selector/types.d.ts +17 -0
  32. package/dist/esm/middleware/layout-selector/types.js +2 -0
  33. package/dist/esm/middleware/layout-selector/util.d.ts +9 -0
  34. package/dist/esm/middleware/layout-selector/util.js +78 -0
  35. package/dist/esm/middleware/pointer/index.d.ts +3 -0
  36. package/dist/esm/middleware/pointer/index.js +42 -0
  37. package/dist/esm/middleware/pointer/types.d.ts +3 -0
  38. package/dist/esm/middleware/pointer/types.js +1 -0
  39. package/dist/esm/middleware/ruler/config.d.ts +7 -0
  40. package/dist/esm/middleware/ruler/config.js +21 -0
  41. package/dist/esm/middleware/ruler/index.d.ts +3 -3
  42. package/dist/esm/middleware/ruler/index.js +33 -14
  43. package/dist/esm/middleware/ruler/types.d.ts +3 -0
  44. package/dist/esm/middleware/ruler/types.js +1 -0
  45. package/dist/esm/middleware/ruler/util.d.ts +20 -4
  46. package/dist/esm/middleware/ruler/util.js +99 -26
  47. package/dist/esm/middleware/scaler/index.d.ts +2 -3
  48. package/dist/esm/middleware/scaler/index.js +3 -2
  49. package/dist/esm/middleware/scroller/config.d.ts +4 -0
  50. package/dist/esm/middleware/scroller/config.js +10 -0
  51. package/dist/esm/middleware/scroller/index.d.ts +3 -2
  52. package/dist/esm/middleware/scroller/index.js +48 -6
  53. package/dist/esm/middleware/scroller/types.d.ts +11 -0
  54. package/dist/esm/middleware/scroller/types.js +1 -0
  55. package/dist/esm/middleware/scroller/util.d.ts +3 -2
  56. package/dist/esm/middleware/scroller/util.js +33 -44
  57. package/dist/esm/middleware/selector/config.d.ts +9 -1
  58. package/dist/esm/middleware/selector/config.js +17 -1
  59. package/dist/esm/middleware/selector/draw-auxiliary.d.ts +1 -0
  60. package/dist/esm/middleware/selector/draw-auxiliary.js +12 -0
  61. package/dist/esm/middleware/selector/draw-base.d.ts +30 -0
  62. package/dist/esm/middleware/selector/draw-base.js +100 -0
  63. package/dist/esm/middleware/selector/draw-debug.d.ts +5 -0
  64. package/dist/esm/middleware/selector/draw-debug.js +30 -0
  65. package/dist/esm/middleware/selector/draw-reference.d.ts +7 -0
  66. package/dist/esm/middleware/selector/draw-reference.js +31 -0
  67. package/dist/esm/middleware/selector/draw-wrapper.d.ts +16 -1
  68. package/dist/esm/middleware/selector/draw-wrapper.js +70 -38
  69. package/dist/esm/middleware/selector/index.d.ts +11 -4
  70. package/dist/esm/middleware/selector/index.js +450 -70
  71. package/dist/esm/middleware/selector/pattern/icon-rotate.d.ts +4 -0
  72. package/dist/esm/middleware/selector/pattern/icon-rotate.js +88 -0
  73. package/dist/esm/middleware/selector/pattern/index.d.ts +8 -0
  74. package/dist/esm/middleware/selector/pattern/index.js +38 -0
  75. package/dist/esm/middleware/selector/reference.d.ts +13 -0
  76. package/dist/esm/middleware/selector/reference.js +267 -0
  77. package/dist/esm/middleware/selector/types.d.ts +11 -5
  78. package/dist/esm/middleware/selector/types.js +2 -1
  79. package/dist/esm/middleware/selector/util.d.ts +14 -7
  80. package/dist/esm/middleware/selector/util.js +45 -43
  81. package/dist/esm/middleware/text-editor/index.d.ts +20 -3
  82. package/dist/esm/middleware/text-editor/index.js +168 -28
  83. package/dist/esm/record.d.ts +5 -0
  84. package/dist/esm/record.js +38 -0
  85. package/dist/index.global.js +5729 -1519
  86. package/dist/index.global.min.js +1 -1
  87. package/package.json +5 -6
@@ -0,0 +1,4 @@
1
+ import type { Element } from '@idraw/types';
2
+ export declare const createIconRotate: (opts?: {
3
+ fill?: string;
4
+ }) => Element<"path", Record<string, any>>;
@@ -0,0 +1,88 @@
1
+ import { createUUID } from '@idraw/util';
2
+ export const createIconRotate = (opts) => {
3
+ const iconRotate = {
4
+ uuid: createUUID(),
5
+ type: 'path',
6
+ x: 0,
7
+ y: 0,
8
+ w: 200,
9
+ h: 200,
10
+ detail: Object.assign({ commands: [
11
+ {
12
+ type: 'M',
13
+ params: [512, 0]
14
+ },
15
+ {
16
+ type: 'c',
17
+ params: [282.8, 0, 512, 229.2, 512, 512]
18
+ },
19
+ {
20
+ type: 's',
21
+ params: [-229.2, 512, -512, 512]
22
+ },
23
+ {
24
+ type: 'S',
25
+ params: [0, 794.8, 0, 512, 229.2, 0, 512, 0]
26
+ },
27
+ {
28
+ type: 'z',
29
+ params: []
30
+ },
31
+ {
32
+ type: 'm',
33
+ params: [309.8, 253.8]
34
+ },
35
+ {
36
+ type: 'c',
37
+ params: [0, -10.5, -6.5, -19.8, -15.7, -23.8, -9.7, -4, -21, -2, -28.2, 5.6]
38
+ },
39
+ {
40
+ type: 'l',
41
+ params: [-52.5, 52]
42
+ },
43
+ {
44
+ type: 'c',
45
+ params: [
46
+ -56.9, -53.7, -133.9, -85.5, -213.4, -85.5, -170.7, 0, -309.8, 139.2, -309.8, 309.8, 0, 170.6, 139.2, 309.8, 309.8, 309.8, 92.4, 0, 179.5, -40.8,
47
+ 238.4, -111.8, 4, -5.2, 4, -12.9, -0.8, -17.3
48
+ ]
49
+ },
50
+ {
51
+ type: 'L',
52
+ params: [694.3, 637]
53
+ },
54
+ {
55
+ type: 'c',
56
+ params: [
57
+ -2.8, -2.4, -6.5, -3.6, -10.1, -3.6, -3.6, 0.4, -7.3, 2, -9.3, 4.8, -39.5, 51.2, -98.8, 80.3, -163, 80.3, -113.8, 0, -206.5, -92.8, -206.5, -206.5,
58
+ 0, -113.8, 92.8, -206.5, 206.5, -206.5, 52.8, 0, 102.9, 20.2, 140.8, 55.3
59
+ ]
60
+ },
61
+ {
62
+ type: 'L',
63
+ params: [597, 416.5]
64
+ },
65
+ {
66
+ type: 'c',
67
+ params: [-7.7, 7.3, -9.7, 18.6, -5.6, 27.9, 4, 9.7, 13.3, 16.1, 23.8, 16.1]
68
+ },
69
+ {
70
+ type: 'H',
71
+ params: [796]
72
+ },
73
+ {
74
+ type: 'c',
75
+ params: [14.1, 0, 25.8, -11.7, 25.8, -25.8]
76
+ },
77
+ {
78
+ type: 'V',
79
+ params: [253.8]
80
+ },
81
+ {
82
+ type: 'z',
83
+ params: []
84
+ }
85
+ ], fill: '#2c2c2c', stroke: 'transparent', strokeWidth: 0, originX: 0, originY: 0, originW: 1024, originH: 1024, opacity: 1 }, opts)
86
+ };
87
+ return iconRotate;
88
+ };
@@ -0,0 +1,8 @@
1
+ import type { ViewContext2D } from '@idraw/types';
2
+ export declare function createRotateControllerPattern(opts: {
3
+ fill: string;
4
+ devicePixelRatio: number;
5
+ }): {
6
+ context2d: ViewContext2D;
7
+ fill: string;
8
+ };
@@ -0,0 +1,38 @@
1
+ import { createOffscreenContext2D } from '@idraw/util';
2
+ import { drawElement } from '@idraw/renderer';
3
+ import { createIconRotate } from './icon-rotate';
4
+ export function createRotateControllerPattern(opts) {
5
+ const { fill, devicePixelRatio } = opts;
6
+ const iconRotate = createIconRotate({ fill });
7
+ const { w, h } = iconRotate;
8
+ const context2d = createOffscreenContext2D({
9
+ width: w,
10
+ height: h,
11
+ devicePixelRatio
12
+ });
13
+ drawElement(context2d, iconRotate, {
14
+ loader: undefined,
15
+ viewScaleInfo: {
16
+ scale: 1,
17
+ offsetTop: 0,
18
+ offsetBottom: 0,
19
+ offsetLeft: 0,
20
+ offsetRight: 0
21
+ },
22
+ viewSizeInfo: {
23
+ width: w,
24
+ height: h,
25
+ devicePixelRatio,
26
+ contextWidth: w,
27
+ contextHeight: h
28
+ },
29
+ parentElementSize: {
30
+ x: 0,
31
+ y: 0,
32
+ w,
33
+ h
34
+ },
35
+ parentOpacity: 1
36
+ });
37
+ return { context2d, fill };
38
+ }
@@ -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;
@@ -0,0 +1,267 @@
1
+ import { is } from '@idraw/util';
2
+ const unitSize = 2;
3
+ function getViewBoxInfo(rectInfo) {
4
+ const boxInfo = {
5
+ minX: rectInfo.topLeft.x,
6
+ minY: rectInfo.topLeft.y,
7
+ maxX: rectInfo.bottomRight.x,
8
+ maxY: rectInfo.bottomRight.y,
9
+ midX: rectInfo.center.x,
10
+ midY: rectInfo.center.y
11
+ };
12
+ return boxInfo;
13
+ }
14
+ const getClosestNumInSortedKeys = (sortedKeys, target) => {
15
+ if (sortedKeys.length === 0) {
16
+ throw null;
17
+ }
18
+ if (sortedKeys.length === 1) {
19
+ return sortedKeys[0];
20
+ }
21
+ let left = 0;
22
+ let right = sortedKeys.length - 1;
23
+ while (left <= right) {
24
+ const mid = Math.floor((left + right) / 2);
25
+ if (sortedKeys[mid] === target) {
26
+ return sortedKeys[mid];
27
+ }
28
+ else if (sortedKeys[mid] < target) {
29
+ left = mid + 1;
30
+ }
31
+ else {
32
+ right = mid - 1;
33
+ }
34
+ }
35
+ if (left >= sortedKeys.length) {
36
+ return sortedKeys[right];
37
+ }
38
+ if (right < 0) {
39
+ return sortedKeys[left];
40
+ }
41
+ return Math.abs(sortedKeys[right] - target) <= Math.abs(sortedKeys[left] - target) ? sortedKeys[right] : sortedKeys[left];
42
+ };
43
+ const isEqualNum = (a, b) => Math.abs(a - b) < 0.00001;
44
+ export function calcReferenceInfo(uuid, opts) {
45
+ var _a, _b;
46
+ const { data, groupQueue, calculator, viewScaleInfo, viewSizeInfo } = opts;
47
+ let targetElements = data.elements || [];
48
+ if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
49
+ targetElements = ((_b = (_a = groupQueue[groupQueue.length - 1]) === null || _a === void 0 ? void 0 : _a.detail) === null || _b === void 0 ? void 0 : _b.children) || [];
50
+ }
51
+ const siblingViewRectInfoList = [];
52
+ targetElements.forEach((elem) => {
53
+ if (elem.uuid !== uuid) {
54
+ const info = calculator.calcViewRectInfoFromRange(elem.uuid, { checkVisible: true, viewScaleInfo, viewSizeInfo });
55
+ if (info) {
56
+ siblingViewRectInfoList.push(info);
57
+ }
58
+ }
59
+ });
60
+ const targetRectInfo = calculator.calcViewRectInfoFromRange(uuid, { viewScaleInfo, viewSizeInfo });
61
+ if (!targetRectInfo) {
62
+ return null;
63
+ }
64
+ const vTargetLineDotMap = {};
65
+ const hTargetLineDotMap = {};
66
+ const vRefLineDotMap = {};
67
+ const hRefLineDotMap = {};
68
+ const vHelperLineDotMapList = [];
69
+ const hHelperLineDotMapList = [];
70
+ let sortedRefXKeys = [];
71
+ let sortedRefYKeys = [];
72
+ const targetBox = getViewBoxInfo(targetRectInfo);
73
+ vTargetLineDotMap[targetBox.minX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
74
+ vTargetLineDotMap[targetBox.midX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
75
+ vTargetLineDotMap[targetBox.maxX] = [targetBox.minY, targetBox.midY, targetBox.maxY];
76
+ hTargetLineDotMap[targetBox.minY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
77
+ hTargetLineDotMap[targetBox.midY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
78
+ hTargetLineDotMap[targetBox.maxY] = [targetBox.minX, targetBox.midX, targetBox.maxX];
79
+ siblingViewRectInfoList.forEach((info) => {
80
+ const box = getViewBoxInfo(info);
81
+ if (!vRefLineDotMap[box.minX]) {
82
+ vRefLineDotMap[box.minX] = [];
83
+ }
84
+ if (!vRefLineDotMap[box.midX]) {
85
+ vRefLineDotMap[box.midX] = [];
86
+ }
87
+ if (!vRefLineDotMap[box.maxX]) {
88
+ vRefLineDotMap[box.maxX] = [];
89
+ }
90
+ if (!hRefLineDotMap[box.minY]) {
91
+ hRefLineDotMap[box.minY] = [];
92
+ }
93
+ if (!hRefLineDotMap[box.midY]) {
94
+ hRefLineDotMap[box.midY] = [];
95
+ }
96
+ if (!hRefLineDotMap[box.maxY]) {
97
+ hRefLineDotMap[box.maxY] = [];
98
+ }
99
+ vRefLineDotMap[box.minX] = [box.minY, box.midY, box.maxY];
100
+ vRefLineDotMap[box.midX] = [box.minY, box.midY, box.maxY];
101
+ vRefLineDotMap[box.maxX] = [box.minY, box.midY, box.maxY];
102
+ sortedRefXKeys.push(box.minX);
103
+ sortedRefXKeys.push(box.midX);
104
+ sortedRefXKeys.push(box.maxX);
105
+ hRefLineDotMap[box.minY] = [box.minX, box.midX, box.maxX];
106
+ hRefLineDotMap[box.midY] = [box.minX, box.midX, box.maxX];
107
+ hRefLineDotMap[box.maxY] = [box.minX, box.midX, box.maxX];
108
+ sortedRefYKeys.push(box.minY);
109
+ sortedRefYKeys.push(box.midY);
110
+ sortedRefYKeys.push(box.maxY);
111
+ });
112
+ sortedRefXKeys = sortedRefXKeys.sort((a, b) => a - b);
113
+ sortedRefYKeys = sortedRefYKeys.sort((a, b) => a - b);
114
+ let offsetX = null;
115
+ let offsetY = null;
116
+ let closestMinX = null;
117
+ let closestMidX = null;
118
+ let closestMaxX = null;
119
+ let closestMinY = null;
120
+ let closestMidY = null;
121
+ let closestMaxY = null;
122
+ if (sortedRefXKeys.length > 0) {
123
+ closestMinX = getClosestNumInSortedKeys(sortedRefXKeys, targetBox.minX);
124
+ closestMidX = getClosestNumInSortedKeys(sortedRefXKeys, targetBox.midX);
125
+ closestMaxX = getClosestNumInSortedKeys(sortedRefXKeys, targetBox.maxX);
126
+ const distMinX = Math.abs(closestMinX - targetBox.minX);
127
+ const distMidX = Math.abs(closestMidX - targetBox.midX);
128
+ const distMaxX = Math.abs(closestMaxX - targetBox.maxX);
129
+ const closestXDist = Math.min(distMinX, distMidX, distMaxX);
130
+ if (closestXDist <= unitSize / viewScaleInfo.scale) {
131
+ if (isEqualNum(closestXDist, distMinX)) {
132
+ offsetX = closestMinX - targetBox.minX;
133
+ }
134
+ else if (isEqualNum(closestXDist, distMidX)) {
135
+ offsetX = closestMidX - targetBox.midX;
136
+ }
137
+ else if (isEqualNum(closestXDist, distMaxX)) {
138
+ offsetX = closestMaxX - targetBox.maxX;
139
+ }
140
+ }
141
+ }
142
+ if (sortedRefYKeys.length > 0) {
143
+ closestMinY = getClosestNumInSortedKeys(sortedRefYKeys, targetBox.minY);
144
+ closestMidY = getClosestNumInSortedKeys(sortedRefYKeys, targetBox.midY);
145
+ closestMaxY = getClosestNumInSortedKeys(sortedRefYKeys, targetBox.maxY);
146
+ const distMinY = Math.abs(closestMinY - targetBox.minY);
147
+ const distMidY = Math.abs(closestMidY - targetBox.midY);
148
+ const distMaxY = Math.abs(closestMaxY - targetBox.maxY);
149
+ const closestYDist = Math.min(distMinY, distMidY, distMaxY);
150
+ if (closestYDist <= unitSize / viewScaleInfo.scale) {
151
+ if (isEqualNum(closestYDist, distMinY)) {
152
+ offsetY = closestMinY - targetBox.minY;
153
+ }
154
+ else if (isEqualNum(closestYDist, distMidY)) {
155
+ offsetY = closestMidY - targetBox.midY;
156
+ }
157
+ else if (isEqualNum(closestYDist, distMaxY)) {
158
+ offsetY = closestMaxY - targetBox.maxY;
159
+ }
160
+ }
161
+ }
162
+ const newTargetBox = Object.assign({}, targetBox);
163
+ if (offsetX !== null) {
164
+ newTargetBox.minX += offsetX;
165
+ newTargetBox.midX += offsetX;
166
+ newTargetBox.maxX += offsetX;
167
+ }
168
+ if (offsetY !== null) {
169
+ newTargetBox.minY += offsetY;
170
+ newTargetBox.midY += offsetY;
171
+ newTargetBox.maxY += offsetY;
172
+ }
173
+ if (is.x(offsetX) && offsetX !== null && closestMinX !== null && closestMidX !== null && closestMaxX !== null) {
174
+ if (isEqualNum(offsetX, closestMinX - targetBox.minX)) {
175
+ const vLine = {
176
+ x: closestMinX,
177
+ yList: []
178
+ };
179
+ vLine.yList.push(newTargetBox.minY);
180
+ vLine.yList.push(newTargetBox.maxY);
181
+ vLine.yList.push(...((hRefLineDotMap === null || hRefLineDotMap === void 0 ? void 0 : hRefLineDotMap[closestMinX]) || []));
182
+ vHelperLineDotMapList.push(vLine);
183
+ }
184
+ if (isEqualNum(offsetX, closestMidX - targetBox.minX)) {
185
+ const vLine = {
186
+ x: closestMidX,
187
+ yList: []
188
+ };
189
+ vLine.yList.push(newTargetBox.minY);
190
+ vLine.yList.push(newTargetBox.maxY);
191
+ vLine.yList.push(...((hRefLineDotMap === null || hRefLineDotMap === void 0 ? void 0 : hRefLineDotMap[closestMidX]) || []));
192
+ vHelperLineDotMapList.push(vLine);
193
+ }
194
+ if (isEqualNum(offsetX, closestMaxX - targetBox.minX)) {
195
+ const vLine = {
196
+ x: closestMaxX,
197
+ yList: []
198
+ };
199
+ vLine.yList.push(newTargetBox.minY);
200
+ vLine.yList.push(newTargetBox.maxY);
201
+ vLine.yList.push(...((hRefLineDotMap === null || hRefLineDotMap === void 0 ? void 0 : hRefLineDotMap[closestMaxX]) || []));
202
+ vHelperLineDotMapList.push(vLine);
203
+ }
204
+ }
205
+ if (is.y(offsetY) && offsetY !== null && closestMinY !== null && closestMidY !== null && closestMaxY !== null) {
206
+ if (isEqualNum(offsetY, closestMinY - targetBox.minY)) {
207
+ const hLine = {
208
+ y: closestMinY,
209
+ xList: []
210
+ };
211
+ hLine.xList.push(newTargetBox.minX);
212
+ hLine.xList.push(newTargetBox.maxX);
213
+ hLine.xList.push(...((vRefLineDotMap === null || vRefLineDotMap === void 0 ? void 0 : vRefLineDotMap[closestMinY]) || []));
214
+ hHelperLineDotMapList.push(hLine);
215
+ }
216
+ if (isEqualNum(offsetY, closestMidY - targetBox.midY)) {
217
+ const hLine = {
218
+ y: closestMidY,
219
+ xList: []
220
+ };
221
+ hLine.xList.push(newTargetBox.minX);
222
+ hLine.xList.push(newTargetBox.maxX);
223
+ hLine.xList.push(...((vRefLineDotMap === null || vRefLineDotMap === void 0 ? void 0 : vRefLineDotMap[closestMinY]) || []));
224
+ hHelperLineDotMapList.push(hLine);
225
+ }
226
+ if (isEqualNum(offsetY, closestMaxY - targetBox.maxY)) {
227
+ const hLine = {
228
+ y: closestMaxY,
229
+ xList: []
230
+ };
231
+ hLine.xList.push(newTargetBox.minX);
232
+ hLine.xList.push(newTargetBox.maxX);
233
+ hLine.xList.push(...((vRefLineDotMap === null || vRefLineDotMap === void 0 ? void 0 : vRefLineDotMap[closestMaxY]) || []));
234
+ hHelperLineDotMapList.push(hLine);
235
+ }
236
+ }
237
+ const yLines = [];
238
+ if ((vHelperLineDotMapList === null || vHelperLineDotMapList === void 0 ? void 0 : vHelperLineDotMapList.length) > 0) {
239
+ vHelperLineDotMapList.forEach((item, i) => {
240
+ yLines.push([]);
241
+ item.yList.forEach((y) => {
242
+ yLines[i].push({
243
+ x: item.x,
244
+ y
245
+ });
246
+ });
247
+ });
248
+ }
249
+ const xLines = [];
250
+ if ((hHelperLineDotMapList === null || hHelperLineDotMapList === void 0 ? void 0 : hHelperLineDotMapList.length) > 0) {
251
+ hHelperLineDotMapList.forEach((item, i) => {
252
+ xLines.push([]);
253
+ item.xList.forEach((x) => {
254
+ xLines[i].push({
255
+ x,
256
+ y: item.y
257
+ });
258
+ });
259
+ });
260
+ }
261
+ return {
262
+ offsetX,
263
+ offsetY,
264
+ yLines,
265
+ xLines
266
+ };
267
+ }
@@ -1,14 +1,14 @@
1
- import type { ElementSizeController } from '@idraw/types';
2
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
3
- import { Data, ElementSize, ElementType, Element, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware, ViewRectVertexes } from '@idraw/types';
4
- export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware };
1
+ import { Data, ElementSize, ElementType, Element, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, Middleware, ViewRectVertexes, ElementSizeController, ElementPosition } from '@idraw/types';
2
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
3
+ import { keyLayoutIsSelected, keyLayoutIsBusyMoving } from '../layout-selector';
4
+ export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, Middleware };
5
5
  export type ControllerStyle = ElementSize & {
6
6
  borderWidth: number;
7
7
  borderColor: string;
8
8
  background: string;
9
9
  };
10
10
  export type SelectedElementSizeController = Record<string, ControllerStyle>;
11
- export type ResizeType = 'resize-left' | 'resize-right' | 'resize-top' | 'resize-bottom' | 'resize-top-left' | 'resize-top-right' | 'resize-bottom-left' | 'resize-bottom-right';
11
+ export type ResizeType = 'resize-left' | 'resize-right' | 'resize-top' | 'resize-bottom' | 'resize-top-left' | 'resize-top-right' | 'resize-bottom-left' | 'resize-bottom-right' | 'resize-rotate';
12
12
  export type PointTargetType = null | ResizeType | 'list-area' | 'over-element';
13
13
  export interface PointTarget {
14
14
  type: PointTargetType;
@@ -31,10 +31,16 @@ export type DeepSelectorSharedStorage = {
31
31
  [keySelectedElementList]: Array<Element<ElementType>>;
32
32
  [keySelectedElementListVertexes]: ViewRectVertexes | null;
33
33
  [keySelectedElementController]: ElementSizeController | null;
34
+ [keySelectedElementPosition]: ElementPosition;
35
+ [keyIsMoving]: boolean | null;
36
+ [keyEnableSelectInGroup]: boolean | null;
37
+ [keyEnableSnapToGrid]: boolean | null;
34
38
  [keyDebugElemCenter]: PointSize | null;
35
39
  [keyDebugEnd0]: PointSize | null;
36
40
  [keyDebugEndHorizontal]: PointSize | null;
37
41
  [keyDebugEndVertical]: PointSize | null;
38
42
  [keyDebugStartHorizontal]: PointSize | null;
39
43
  [keyDebugStartVertical]: PointSize | null;
44
+ [keyLayoutIsSelected]: boolean | null;
45
+ [keyLayoutIsBusyMoving]: boolean | null;
40
46
  };
@@ -1 +1,2 @@
1
- import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
1
+ import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
2
+ import { keyLayoutIsSelected, keyLayoutIsBusyMoving } from '../layout-selector';
@@ -1,5 +1,5 @@
1
- import type { ViewRectVertexes, ElementSizeController, StoreSharer } from '@idraw/types';
2
- import type { Data, Element, ViewContext2D, Point, PointSize, PointTarget, ViewScaleInfo, ViewCalculator, ElementType, ElementSize, ResizeType, AreaSize, ViewSizeInfo } from './types';
1
+ import type { ViewRectVertexes, ElementSizeController, StoreSharer, ViewScaleInfo, ViewSizeInfo, ElementOperations } from '@idraw/types';
2
+ import type { Data, Element, ViewContext2D, Point, PointSize, PointTarget, ViewCalculator, ElementType, ElementSize, ResizeType, AreaSize } from './types';
3
3
  export declare function isPointInViewActiveVertexes(p: PointSize, opts: {
4
4
  ctx: ViewContext2D;
5
5
  vertexes: ViewRectVertexes;
@@ -23,13 +23,24 @@ 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 & {
27
+ operations?: ElementOperations;
28
+ }, opts: {
27
29
  start: PointSize;
28
30
  end: PointSize;
29
31
  resizeType: ResizeType;
30
32
  scale: number;
31
33
  sharer: StoreSharer;
32
34
  }): ElementSize;
35
+ export declare function rotateElement(elem: ElementSize, opts: {
36
+ center: PointSize;
37
+ start: PointSize;
38
+ end: PointSize;
39
+ resizeType: ResizeType;
40
+ viewScaleInfo: ViewScaleInfo;
41
+ viewSizeInfo: ViewSizeInfo;
42
+ sharer: StoreSharer;
43
+ }): ElementSize;
33
44
  export declare function getSelectedListArea(data: Data, opts: {
34
45
  start: Point;
35
46
  end: Point;
@@ -47,7 +58,3 @@ export declare function calcSelectedElementsArea(elements: Element<ElementType>[
47
58
  calculator: ViewCalculator;
48
59
  }): AreaSize | null;
49
60
  export declare function isElementInGroup(elem: Element<ElementType>, group: Element<'group'>): boolean;
50
- export declare function calcMoveInGroup(start: PointSize, end: PointSize, groupQueue: Element<'group'>[]): {
51
- moveX: number;
52
- moveY: number;
53
- };