@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.
- package/dist/esm/board/index.d.ts +44 -0
- package/dist/esm/board/index.js +358 -0
- package/dist/esm/board/sharer.d.ts +21 -0
- package/dist/esm/board/sharer.js +101 -0
- package/dist/esm/board/viewer.d.ts +32 -0
- package/dist/esm/board/viewer.js +165 -0
- package/dist/esm/board/watcher.d.ts +15 -0
- package/dist/esm/board/watcher.js +218 -0
- package/dist/esm/config.d.ts +28 -0
- package/dist/esm/config.js +34 -0
- package/dist/esm/index.d.ts +37 -8
- package/dist/esm/index.js +265 -10
- package/dist/esm/lib/cursor-image.d.ts +1 -0
- package/dist/esm/lib/cursor-image.js +1 -0
- package/dist/esm/lib/cursor.d.ts +3 -12
- package/dist/esm/lib/cursor.js +137 -112
- package/dist/esm/middleware/dragger/index.d.ts +2 -2
- package/dist/esm/middleware/dragger/index.js +5 -3
- package/dist/esm/middleware/info/config.d.ts +5 -0
- package/dist/esm/middleware/info/config.js +9 -0
- package/dist/esm/middleware/info/draw-info.d.ts +29 -0
- package/dist/esm/middleware/info/draw-info.js +113 -0
- package/dist/esm/middleware/info/index.d.ts +9 -0
- package/dist/esm/middleware/info/index.js +131 -0
- package/dist/esm/middleware/info/types.d.ts +3 -0
- package/dist/esm/middleware/info/types.js +1 -0
- package/dist/esm/middleware/layout-selector/config.d.ts +11 -0
- package/dist/esm/middleware/layout-selector/config.js +12 -0
- package/dist/esm/middleware/layout-selector/index.d.ts +5 -0
- package/dist/esm/middleware/layout-selector/index.js +371 -0
- package/dist/esm/middleware/layout-selector/types.d.ts +17 -0
- package/dist/esm/middleware/layout-selector/types.js +2 -0
- package/dist/esm/middleware/layout-selector/util.d.ts +9 -0
- package/dist/esm/middleware/layout-selector/util.js +78 -0
- package/dist/esm/middleware/pointer/index.d.ts +3 -0
- package/dist/esm/middleware/pointer/index.js +42 -0
- package/dist/esm/middleware/pointer/types.d.ts +3 -0
- package/dist/esm/middleware/pointer/types.js +1 -0
- package/dist/esm/middleware/ruler/config.d.ts +7 -0
- package/dist/esm/middleware/ruler/config.js +21 -0
- package/dist/esm/middleware/ruler/index.d.ts +3 -3
- package/dist/esm/middleware/ruler/index.js +33 -14
- package/dist/esm/middleware/ruler/types.d.ts +3 -0
- package/dist/esm/middleware/ruler/types.js +1 -0
- package/dist/esm/middleware/ruler/util.d.ts +20 -4
- package/dist/esm/middleware/ruler/util.js +99 -26
- package/dist/esm/middleware/scaler/index.d.ts +2 -3
- package/dist/esm/middleware/scaler/index.js +3 -2
- package/dist/esm/middleware/scroller/config.d.ts +4 -0
- package/dist/esm/middleware/scroller/config.js +10 -0
- package/dist/esm/middleware/scroller/index.d.ts +3 -2
- package/dist/esm/middleware/scroller/index.js +48 -6
- package/dist/esm/middleware/scroller/types.d.ts +11 -0
- package/dist/esm/middleware/scroller/types.js +1 -0
- package/dist/esm/middleware/scroller/util.d.ts +3 -2
- package/dist/esm/middleware/scroller/util.js +33 -44
- package/dist/esm/middleware/selector/config.d.ts +9 -1
- package/dist/esm/middleware/selector/config.js +17 -1
- package/dist/esm/middleware/selector/draw-auxiliary.d.ts +1 -0
- package/dist/esm/middleware/selector/draw-auxiliary.js +12 -0
- package/dist/esm/middleware/selector/draw-base.d.ts +30 -0
- package/dist/esm/middleware/selector/draw-base.js +100 -0
- package/dist/esm/middleware/selector/draw-debug.d.ts +5 -0
- package/dist/esm/middleware/selector/draw-debug.js +30 -0
- package/dist/esm/middleware/selector/draw-reference.d.ts +7 -0
- package/dist/esm/middleware/selector/draw-reference.js +31 -0
- package/dist/esm/middleware/selector/draw-wrapper.d.ts +16 -1
- package/dist/esm/middleware/selector/draw-wrapper.js +70 -38
- package/dist/esm/middleware/selector/index.d.ts +11 -4
- package/dist/esm/middleware/selector/index.js +450 -70
- package/dist/esm/middleware/selector/pattern/icon-rotate.d.ts +4 -0
- package/dist/esm/middleware/selector/pattern/icon-rotate.js +88 -0
- package/dist/esm/middleware/selector/pattern/index.d.ts +8 -0
- package/dist/esm/middleware/selector/pattern/index.js +38 -0
- package/dist/esm/middleware/selector/reference.d.ts +13 -0
- package/dist/esm/middleware/selector/reference.js +267 -0
- package/dist/esm/middleware/selector/types.d.ts +11 -5
- package/dist/esm/middleware/selector/types.js +2 -1
- package/dist/esm/middleware/selector/util.d.ts +14 -7
- package/dist/esm/middleware/selector/util.js +45 -43
- package/dist/esm/middleware/text-editor/index.d.ts +20 -3
- package/dist/esm/middleware/text-editor/index.js +168 -28
- package/dist/esm/record.d.ts +5 -0
- package/dist/esm/record.js +38 -0
- package/dist/index.global.js +5729 -1519
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -6
|
@@ -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,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
|
|
2
|
-
import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
|
|
3
|
-
import {
|
|
4
|
-
export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent,
|
|
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,
|
|
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:
|
|
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
|
-
};
|