@idraw/core 0.4.0-beta.13 → 0.4.0-beta.15
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/index.d.ts +3 -3
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/cursor.d.ts +2 -2
- package/dist/esm/middleware/dragger/index.d.ts +2 -2
- package/dist/esm/middleware/ruler/index.d.ts +2 -2
- package/dist/esm/middleware/scaler/index.d.ts +2 -2
- package/dist/esm/middleware/selector/config.d.ts +1 -0
- package/dist/esm/middleware/selector/config.js +1 -0
- package/dist/esm/middleware/selector/draw-auxiliary.d.ts +6 -0
- package/dist/esm/middleware/selector/draw-auxiliary.js +19 -0
- package/dist/esm/middleware/selector/draw-base.d.ts +25 -0
- package/dist/esm/middleware/selector/draw-base.js +71 -0
- package/dist/esm/middleware/selector/draw-wrapper.d.ts +3 -0
- package/dist/esm/middleware/selector/draw-wrapper.js +10 -77
- package/dist/esm/middleware/selector/index.d.ts +2 -2
- package/dist/esm/middleware/selector/index.js +10 -5
- package/dist/esm/middleware/selector/types.d.ts +2 -1
- package/dist/esm/middleware/selector/types.js +1 -1
- package/dist/esm/middleware/text-editor/index.d.ts +20 -2
- package/dist/esm/middleware/text-editor/index.js +48 -6
- package/dist/index.global.js +139 -28
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -5
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type { Data, PointSize, CoreOptions, BoardMiddleware, ViewSizeInfo,
|
|
1
|
+
import type { Data, PointSize, CoreOptions, BoardMiddleware, ViewSizeInfo, CoreEventMap, ViewScaleInfo, LoadItemMap } from '@idraw/types';
|
|
2
2
|
export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear } from './middleware/selector';
|
|
3
3
|
export { MiddlewareScroller } from './middleware/scroller';
|
|
4
4
|
export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
|
|
5
5
|
export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
|
|
6
|
-
export { MiddlewareTextEditor, middlewareEventTextEdit } from './middleware/text-editor';
|
|
6
|
+
export { MiddlewareTextEditor, middlewareEventTextEdit, middlewareEventTextChange } from './middleware/text-editor';
|
|
7
7
|
export { MiddlewareDragger } from './middleware/dragger';
|
|
8
|
-
export declare class Core<E extends
|
|
8
|
+
export declare class Core<E extends CoreEventMap = CoreEventMap> {
|
|
9
9
|
#private;
|
|
10
10
|
constructor(container: HTMLDivElement, opts: CoreOptions);
|
|
11
11
|
isDestroyed(): boolean;
|
package/dist/esm/index.js
CHANGED
|
@@ -17,7 +17,7 @@ export { MiddlewareSelector, middlewareEventSelect, middlewareEventSelectClear }
|
|
|
17
17
|
export { MiddlewareScroller } from './middleware/scroller';
|
|
18
18
|
export { MiddlewareScaler, middlewareEventScale } from './middleware/scaler';
|
|
19
19
|
export { MiddlewareRuler, middlewareEventRuler } from './middleware/ruler';
|
|
20
|
-
export { MiddlewareTextEditor, middlewareEventTextEdit } from './middleware/text-editor';
|
|
20
|
+
export { MiddlewareTextEditor, middlewareEventTextEdit, middlewareEventTextChange } from './middleware/text-editor';
|
|
21
21
|
export { MiddlewareDragger } from './middleware/dragger';
|
|
22
22
|
export class Core {
|
|
23
23
|
constructor(container, opts) {
|
package/dist/esm/lib/cursor.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { UtilEventEmitter,
|
|
1
|
+
import type { UtilEventEmitter, CoreEventMap } from '@idraw/types';
|
|
2
2
|
export declare class Cursor {
|
|
3
3
|
#private;
|
|
4
4
|
constructor(container: HTMLDivElement, opts: {
|
|
5
|
-
eventHub: UtilEventEmitter<
|
|
5
|
+
eventHub: UtilEventEmitter<CoreEventMap>;
|
|
6
6
|
});
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { BoardMiddleware,
|
|
1
|
+
import type { BoardMiddleware, CoreEventMap, Point } from '@idraw/types';
|
|
2
2
|
declare const keyPrevPoint: unique symbol;
|
|
3
3
|
type DraggerSharedStorage = {
|
|
4
4
|
[keyPrevPoint]: Point | null;
|
|
5
5
|
};
|
|
6
|
-
export declare const MiddlewareDragger: BoardMiddleware<DraggerSharedStorage,
|
|
6
|
+
export declare const MiddlewareDragger: BoardMiddleware<DraggerSharedStorage, CoreEventMap>;
|
|
7
7
|
export {};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { BoardMiddleware,
|
|
1
|
+
import type { BoardMiddleware, CoreEventMap } from '@idraw/types';
|
|
2
2
|
export declare const middlewareEventRuler = "@middleware/show-ruler";
|
|
3
|
-
export declare const MiddlewareRuler: BoardMiddleware<Record<string, any>,
|
|
3
|
+
export declare const MiddlewareRuler: BoardMiddleware<Record<string, any>, CoreEventMap>;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { BoardMiddleware,
|
|
1
|
+
import type { BoardMiddleware, CoreEventMap } from '@idraw/types';
|
|
2
2
|
export declare const middlewareEventScale = "@middleware/scale";
|
|
3
|
-
export declare const MiddlewareScaler: BoardMiddleware<Record<string, any>,
|
|
3
|
+
export declare const MiddlewareScaler: BoardMiddleware<Record<string, any>, CoreEventMap>;
|
|
@@ -10,6 +10,7 @@ export declare const keySelectedElementListVertexes: unique symbol;
|
|
|
10
10
|
export declare const keySelectedElementController: unique symbol;
|
|
11
11
|
export declare const keyGroupQueue: unique symbol;
|
|
12
12
|
export declare const keyGroupQueueVertexesList: unique symbol;
|
|
13
|
+
export declare const keyIsMoving: unique symbol;
|
|
13
14
|
export declare const keyDebugElemCenter: unique symbol;
|
|
14
15
|
export declare const keyDebugStartVertical: unique symbol;
|
|
15
16
|
export declare const keyDebugEndVertical: unique symbol;
|
|
@@ -10,6 +10,7 @@ export const keySelectedElementListVertexes = Symbol(`${key}_selectedElementList
|
|
|
10
10
|
export const keySelectedElementController = Symbol(`${key}_selectedElementController`);
|
|
11
11
|
export const keyGroupQueue = Symbol(`${key}_groupQueue`);
|
|
12
12
|
export const keyGroupQueueVertexesList = Symbol(`${key}_groupQueueVertexesList`);
|
|
13
|
+
export const keyIsMoving = Symbol(`${key}_isMoving`);
|
|
13
14
|
export const keyDebugElemCenter = Symbol(`${key}_debug_elemCenter`);
|
|
14
15
|
export const keyDebugStartVertical = Symbol(`${key}_debug_startVertical`);
|
|
15
16
|
export const keyDebugEndVertical = Symbol(`${key}_debug_endVertical`);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { drawLine } from './draw-base';
|
|
2
|
+
const auxiliaryColor = '#f7276e';
|
|
3
|
+
export function drawSizeAuxiliaryLines(ctx, opts) {
|
|
4
|
+
const { vertexes, element, groupQueue } = opts;
|
|
5
|
+
const point = vertexes[0];
|
|
6
|
+
const lineOpts = {
|
|
7
|
+
borderColor: auxiliaryColor,
|
|
8
|
+
borderWidth: 1,
|
|
9
|
+
lineDash: []
|
|
10
|
+
};
|
|
11
|
+
if (groupQueue.length > 0) {
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
if (!(element === null || element === void 0 ? void 0 : element.angle)) {
|
|
15
|
+
drawLine(ctx, { x: point.x, y: 0 }, point, lineOpts);
|
|
16
|
+
drawLine(ctx, { x: 0, y: point.y }, point, lineOpts);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { PointSize, ViewContext2D, ViewRectVertexes } from '@idraw/types';
|
|
2
|
+
export declare function drawVertexes(ctx: ViewContext2D, vertexes: ViewRectVertexes, opts: {
|
|
3
|
+
borderColor: string;
|
|
4
|
+
borderWidth: number;
|
|
5
|
+
background: string;
|
|
6
|
+
lineDash: number[];
|
|
7
|
+
}): void;
|
|
8
|
+
export declare function drawLine(ctx: ViewContext2D, start: PointSize, end: PointSize, opts: {
|
|
9
|
+
borderColor: string;
|
|
10
|
+
borderWidth: number;
|
|
11
|
+
lineDash: number[];
|
|
12
|
+
}): void;
|
|
13
|
+
export declare function drawCircleController(ctx: ViewContext2D, circleCenter: PointSize, opts: {
|
|
14
|
+
borderColor: string;
|
|
15
|
+
borderWidth: number;
|
|
16
|
+
background: string;
|
|
17
|
+
lineDash: number[];
|
|
18
|
+
size: number;
|
|
19
|
+
}): void;
|
|
20
|
+
export declare function drawCrossVertexes(ctx: ViewContext2D, vertexes: ViewRectVertexes, opts: {
|
|
21
|
+
borderColor: string;
|
|
22
|
+
borderWidth: number;
|
|
23
|
+
background: string;
|
|
24
|
+
lineDash: number[];
|
|
25
|
+
}): void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export function drawVertexes(ctx, vertexes, opts) {
|
|
2
|
+
const { borderColor, borderWidth, background, lineDash } = opts;
|
|
3
|
+
ctx.setLineDash([]);
|
|
4
|
+
ctx.lineWidth = borderWidth;
|
|
5
|
+
ctx.strokeStyle = borderColor;
|
|
6
|
+
ctx.fillStyle = background;
|
|
7
|
+
ctx.setLineDash(lineDash);
|
|
8
|
+
ctx.beginPath();
|
|
9
|
+
ctx.moveTo(vertexes[0].x, vertexes[0].y);
|
|
10
|
+
ctx.lineTo(vertexes[1].x, vertexes[1].y);
|
|
11
|
+
ctx.lineTo(vertexes[2].x, vertexes[2].y);
|
|
12
|
+
ctx.lineTo(vertexes[3].x, vertexes[3].y);
|
|
13
|
+
ctx.lineTo(vertexes[0].x, vertexes[0].y);
|
|
14
|
+
ctx.closePath();
|
|
15
|
+
ctx.stroke();
|
|
16
|
+
ctx.fill();
|
|
17
|
+
}
|
|
18
|
+
export function drawLine(ctx, start, end, opts) {
|
|
19
|
+
const { borderColor, borderWidth, lineDash } = opts;
|
|
20
|
+
ctx.setLineDash([]);
|
|
21
|
+
ctx.lineWidth = borderWidth;
|
|
22
|
+
ctx.strokeStyle = borderColor;
|
|
23
|
+
ctx.setLineDash(lineDash);
|
|
24
|
+
ctx.beginPath();
|
|
25
|
+
ctx.moveTo(start.x, start.y);
|
|
26
|
+
ctx.lineTo(end.x, end.y);
|
|
27
|
+
ctx.closePath();
|
|
28
|
+
ctx.stroke();
|
|
29
|
+
}
|
|
30
|
+
export function drawCircleController(ctx, circleCenter, opts) {
|
|
31
|
+
const { size, borderColor, borderWidth, background } = opts;
|
|
32
|
+
const center = circleCenter;
|
|
33
|
+
const r = size / 2;
|
|
34
|
+
const a = r;
|
|
35
|
+
const b = r;
|
|
36
|
+
if (a >= 0 && b >= 0) {
|
|
37
|
+
if (typeof borderWidth === 'number' && borderWidth > 0) {
|
|
38
|
+
const ba = borderWidth / 2 + a;
|
|
39
|
+
const bb = borderWidth / 2 + b;
|
|
40
|
+
ctx.beginPath();
|
|
41
|
+
ctx.strokeStyle = borderColor;
|
|
42
|
+
ctx.lineWidth = borderWidth;
|
|
43
|
+
ctx.circle(center.x, center.y, ba, bb, 0, 0, 2 * Math.PI);
|
|
44
|
+
ctx.closePath();
|
|
45
|
+
ctx.stroke();
|
|
46
|
+
}
|
|
47
|
+
ctx.beginPath();
|
|
48
|
+
ctx.fillStyle = background;
|
|
49
|
+
ctx.circle(center.x, center.y, a, b, 0, 0, 2 * Math.PI);
|
|
50
|
+
ctx.closePath();
|
|
51
|
+
ctx.fill();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function drawCrossVertexes(ctx, vertexes, opts) {
|
|
55
|
+
const { borderColor, borderWidth, background, lineDash } = opts;
|
|
56
|
+
ctx.setLineDash([]);
|
|
57
|
+
ctx.lineWidth = borderWidth;
|
|
58
|
+
ctx.strokeStyle = borderColor;
|
|
59
|
+
ctx.fillStyle = background;
|
|
60
|
+
ctx.setLineDash(lineDash);
|
|
61
|
+
ctx.beginPath();
|
|
62
|
+
ctx.moveTo(vertexes[0].x, vertexes[0].y);
|
|
63
|
+
ctx.lineTo(vertexes[2].x, vertexes[2].y);
|
|
64
|
+
ctx.closePath();
|
|
65
|
+
ctx.stroke();
|
|
66
|
+
ctx.beginPath();
|
|
67
|
+
ctx.moveTo(vertexes[1].x, vertexes[1].y);
|
|
68
|
+
ctx.lineTo(vertexes[3].x, vertexes[3].y);
|
|
69
|
+
ctx.closePath();
|
|
70
|
+
ctx.stroke();
|
|
71
|
+
}
|
|
@@ -10,8 +10,11 @@ export declare function drawLockVertexesWrapper(ctx: ViewContext2D, vertexes: Vi
|
|
|
10
10
|
controller?: ElementSizeController | null;
|
|
11
11
|
}): void;
|
|
12
12
|
export declare function drawSelectedElementControllersVertexes(ctx: ViewContext2D, controller: ElementSizeController | null, opts: {
|
|
13
|
+
hideControllers: boolean;
|
|
13
14
|
viewScaleInfo: ViewScaleInfo;
|
|
14
15
|
viewSizeInfo: ViewSizeInfo;
|
|
16
|
+
element: Element | null;
|
|
17
|
+
groupQueue: Element<'group'>[];
|
|
15
18
|
}): void;
|
|
16
19
|
export declare function drawElementListShadows(ctx: ViewContext2D, elements: Element<ElementType>[], opts?: Omit<RendererDrawElementOptions, 'loader'>): void;
|
|
17
20
|
export declare function drawArea(ctx: ViewContext2D, opts: {
|
|
@@ -1,58 +1,6 @@
|
|
|
1
1
|
import { rotateElementVertexes, calcViewPointSize, calcViewVertexes } from '@idraw/util';
|
|
2
2
|
import { resizeControllerBorderWidth, areaBorderWidth, wrapperColor, selectWrapperBorderWidth, lockColor, controllerSize } from './config';
|
|
3
|
-
|
|
4
|
-
const { borderColor, borderWidth, background, lineDash } = opts;
|
|
5
|
-
ctx.setLineDash([]);
|
|
6
|
-
ctx.lineWidth = borderWidth;
|
|
7
|
-
ctx.strokeStyle = borderColor;
|
|
8
|
-
ctx.fillStyle = background;
|
|
9
|
-
ctx.setLineDash(lineDash);
|
|
10
|
-
ctx.beginPath();
|
|
11
|
-
ctx.moveTo(vertexes[0].x, vertexes[0].y);
|
|
12
|
-
ctx.lineTo(vertexes[1].x, vertexes[1].y);
|
|
13
|
-
ctx.lineTo(vertexes[2].x, vertexes[2].y);
|
|
14
|
-
ctx.lineTo(vertexes[3].x, vertexes[3].y);
|
|
15
|
-
ctx.lineTo(vertexes[0].x, vertexes[0].y);
|
|
16
|
-
ctx.closePath();
|
|
17
|
-
ctx.stroke();
|
|
18
|
-
ctx.fill();
|
|
19
|
-
}
|
|
20
|
-
function drawLine(ctx, start, end, opts) {
|
|
21
|
-
const { borderColor, borderWidth, lineDash } = opts;
|
|
22
|
-
ctx.setLineDash([]);
|
|
23
|
-
ctx.lineWidth = borderWidth;
|
|
24
|
-
ctx.strokeStyle = borderColor;
|
|
25
|
-
ctx.setLineDash(lineDash);
|
|
26
|
-
ctx.beginPath();
|
|
27
|
-
ctx.moveTo(start.x, start.y);
|
|
28
|
-
ctx.lineTo(end.x, end.y);
|
|
29
|
-
ctx.closePath();
|
|
30
|
-
ctx.stroke();
|
|
31
|
-
}
|
|
32
|
-
function drawCircleController(ctx, circleCenter, opts) {
|
|
33
|
-
const { size, borderColor, borderWidth, background } = opts;
|
|
34
|
-
const center = circleCenter;
|
|
35
|
-
const r = size / 2;
|
|
36
|
-
const a = r;
|
|
37
|
-
const b = r;
|
|
38
|
-
if (a >= 0 && b >= 0) {
|
|
39
|
-
if (typeof borderWidth === 'number' && borderWidth > 0) {
|
|
40
|
-
const ba = borderWidth / 2 + a;
|
|
41
|
-
const bb = borderWidth / 2 + b;
|
|
42
|
-
ctx.beginPath();
|
|
43
|
-
ctx.strokeStyle = borderColor;
|
|
44
|
-
ctx.lineWidth = borderWidth;
|
|
45
|
-
ctx.circle(center.x, center.y, ba, bb, 0, 0, 2 * Math.PI);
|
|
46
|
-
ctx.closePath();
|
|
47
|
-
ctx.stroke();
|
|
48
|
-
}
|
|
49
|
-
ctx.beginPath();
|
|
50
|
-
ctx.fillStyle = background;
|
|
51
|
-
ctx.circle(center.x, center.y, a, b, 0, 0, 2 * Math.PI);
|
|
52
|
-
ctx.closePath();
|
|
53
|
-
ctx.fill();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
3
|
+
import { drawVertexes, drawLine, drawCircleController, drawCrossVertexes } from './draw-base';
|
|
56
4
|
export function drawHoverVertexesWrapper(ctx, vertexes, opts) {
|
|
57
5
|
if (!vertexes) {
|
|
58
6
|
return;
|
|
@@ -60,24 +8,6 @@ export function drawHoverVertexesWrapper(ctx, vertexes, opts) {
|
|
|
60
8
|
const wrapperOpts = { borderColor: wrapperColor, borderWidth: 1, background: 'transparent', lineDash: [] };
|
|
61
9
|
drawVertexes(ctx, calcViewVertexes(vertexes, opts), wrapperOpts);
|
|
62
10
|
}
|
|
63
|
-
function drawCrossVertexes(ctx, vertexes, opts) {
|
|
64
|
-
const { borderColor, borderWidth, background, lineDash } = opts;
|
|
65
|
-
ctx.setLineDash([]);
|
|
66
|
-
ctx.lineWidth = borderWidth;
|
|
67
|
-
ctx.strokeStyle = borderColor;
|
|
68
|
-
ctx.fillStyle = background;
|
|
69
|
-
ctx.setLineDash(lineDash);
|
|
70
|
-
ctx.beginPath();
|
|
71
|
-
ctx.moveTo(vertexes[0].x, vertexes[0].y);
|
|
72
|
-
ctx.lineTo(vertexes[2].x, vertexes[2].y);
|
|
73
|
-
ctx.closePath();
|
|
74
|
-
ctx.stroke();
|
|
75
|
-
ctx.beginPath();
|
|
76
|
-
ctx.moveTo(vertexes[1].x, vertexes[1].y);
|
|
77
|
-
ctx.lineTo(vertexes[3].x, vertexes[3].y);
|
|
78
|
-
ctx.closePath();
|
|
79
|
-
ctx.stroke();
|
|
80
|
-
}
|
|
81
11
|
export function drawLockVertexesWrapper(ctx, vertexes, opts) {
|
|
82
12
|
if (!vertexes) {
|
|
83
13
|
return;
|
|
@@ -102,16 +32,19 @@ export function drawSelectedElementControllersVertexes(ctx, controller, opts) {
|
|
|
102
32
|
if (!controller) {
|
|
103
33
|
return;
|
|
104
34
|
}
|
|
35
|
+
const { hideControllers } = opts;
|
|
105
36
|
const { elementWrapper, topLeft, topRight, bottomLeft, bottomRight, top, rotate } = controller;
|
|
106
37
|
const wrapperOpts = { borderColor: wrapperColor, borderWidth: selectWrapperBorderWidth, background: 'transparent', lineDash: [] };
|
|
107
38
|
const ctrlOpts = Object.assign(Object.assign({}, wrapperOpts), { borderWidth: resizeControllerBorderWidth, background: '#FFFFFF' });
|
|
108
|
-
drawLine(ctx, calcViewPointSize(top.center, opts), calcViewPointSize(rotate.center, opts), Object.assign(Object.assign({}, ctrlOpts), { borderWidth: 2 }));
|
|
109
39
|
drawVertexes(ctx, calcViewVertexes(elementWrapper, opts), wrapperOpts);
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
40
|
+
if (!hideControllers) {
|
|
41
|
+
drawLine(ctx, calcViewPointSize(top.center, opts), calcViewPointSize(rotate.center, opts), Object.assign(Object.assign({}, ctrlOpts), { borderWidth: 2 }));
|
|
42
|
+
drawVertexes(ctx, calcViewVertexes(topLeft.vertexes, opts), ctrlOpts);
|
|
43
|
+
drawVertexes(ctx, calcViewVertexes(topRight.vertexes, opts), ctrlOpts);
|
|
44
|
+
drawVertexes(ctx, calcViewVertexes(bottomLeft.vertexes, opts), ctrlOpts);
|
|
45
|
+
drawVertexes(ctx, calcViewVertexes(bottomRight.vertexes, opts), ctrlOpts);
|
|
46
|
+
drawCircleController(ctx, calcViewPointSize(rotate.center, opts), Object.assign(Object.assign({}, ctrlOpts), { size: controllerSize, borderWidth: 2 }));
|
|
47
|
+
}
|
|
115
48
|
}
|
|
116
49
|
export function drawElementListShadows(ctx, elements, opts) {
|
|
117
50
|
elements.forEach((elem) => {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CoreEventMap } from '@idraw/types';
|
|
2
2
|
import type { BoardMiddleware, DeepSelectorSharedStorage } from './types';
|
|
3
3
|
export declare const middlewareEventSelect: string;
|
|
4
4
|
export declare const middlewareEventSelectClear: string;
|
|
5
|
-
export declare const MiddlewareSelector: BoardMiddleware<DeepSelectorSharedStorage,
|
|
5
|
+
export declare const MiddlewareSelector: BoardMiddleware<DeepSelectorSharedStorage, CoreEventMap>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, deepResizeGroupElement } from '@idraw/util';
|
|
1
|
+
import { calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement } from '@idraw/util';
|
|
2
2
|
import { drawHoverVertexesWrapper, drawLockVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
|
|
3
3
|
import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
|
|
4
|
-
import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, controllerSize } from './config';
|
|
4
|
+
import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyIsMoving, controllerSize } from './config';
|
|
5
5
|
import { middlewareEventTextEdit } from '../text-editor';
|
|
6
6
|
export const middlewareEventSelect = '@middleware/select';
|
|
7
7
|
export const middlewareEventSelectClear = '@middleware/select-clear';
|
|
@@ -87,6 +87,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
87
87
|
sharer.setSharedStorage(keySelectedElementList, []);
|
|
88
88
|
sharer.setSharedStorage(keySelectedElementListVertexes, null);
|
|
89
89
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
90
|
+
sharer.setSharedStorage(keyIsMoving, null);
|
|
90
91
|
};
|
|
91
92
|
clear();
|
|
92
93
|
const selectCallback = ({ uuids, positions }) => {
|
|
@@ -284,6 +285,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
284
285
|
},
|
|
285
286
|
pointMove: (e) => {
|
|
286
287
|
var _a, _b, _c;
|
|
288
|
+
sharer.setSharedStorage(keyIsMoving, true);
|
|
287
289
|
const data = sharer.getActiveStorage('data');
|
|
288
290
|
const elems = getActiveElements();
|
|
289
291
|
const scale = sharer.getActiveStorage('scale') || 1;
|
|
@@ -388,6 +390,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
388
390
|
},
|
|
389
391
|
pointEnd(e) {
|
|
390
392
|
inBusyMode = null;
|
|
393
|
+
sharer.setSharedStorage(keyIsMoving, false);
|
|
391
394
|
const data = sharer.getActiveStorage('data');
|
|
392
395
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
393
396
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
@@ -467,7 +470,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
467
470
|
viewer.drawFrame();
|
|
468
471
|
},
|
|
469
472
|
doubleClick(e) {
|
|
470
|
-
var _a, _b, _c, _d;
|
|
473
|
+
var _a, _b, _c, _d, _e, _f;
|
|
471
474
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
472
475
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
473
476
|
sharer.setSharedStorage(keySelectedElementList, []);
|
|
@@ -486,6 +489,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
486
489
|
eventHub.trigger(middlewareEventTextEdit, {
|
|
487
490
|
element: target.elements[0],
|
|
488
491
|
groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
|
|
492
|
+
position: getElementPositionFromList((_e = target.elements[0]) === null || _e === void 0 ? void 0 : _e.uuid, ((_f = sharer.getActiveStorage('data')) === null || _f === void 0 ? void 0 : _f.elements) || []),
|
|
489
493
|
viewScaleInfo: sharer.getActiveViewScaleInfo()
|
|
490
494
|
});
|
|
491
495
|
}
|
|
@@ -507,6 +511,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
507
511
|
const areaEnd = sharedStore[keyAreaEnd];
|
|
508
512
|
const groupQueue = sharedStore[keyGroupQueue];
|
|
509
513
|
const groupQueueVertexesList = sharedStore[keyGroupQueueVertexesList];
|
|
514
|
+
const isMoving = sharedStore[keyIsMoving];
|
|
510
515
|
const drawBaseOpts = { calculator, viewScaleInfo, viewSizeInfo };
|
|
511
516
|
const selectedElementController = elem
|
|
512
517
|
? calcElementSizeController(elem, {
|
|
@@ -531,7 +536,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
531
536
|
}
|
|
532
537
|
}
|
|
533
538
|
if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
534
|
-
drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
|
|
539
|
+
drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, groupQueue, hideControllers: !!isMoving && actionType === 'drag' }));
|
|
535
540
|
}
|
|
536
541
|
}
|
|
537
542
|
else {
|
|
@@ -548,7 +553,7 @@ export const MiddlewareSelector = (opts) => {
|
|
|
548
553
|
}
|
|
549
554
|
}
|
|
550
555
|
if (!isLock && elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
551
|
-
drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign({}, drawBaseOpts));
|
|
556
|
+
drawSelectedElementControllersVertexes(helperContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, groupQueue, hideControllers: !!isMoving && actionType === 'drag' }));
|
|
552
557
|
}
|
|
553
558
|
else if (actionType === 'area' && areaStart && areaEnd) {
|
|
554
559
|
drawArea(helperContext, { start: areaStart, end: areaEnd });
|
|
@@ -1,5 +1,5 @@
|
|
|
1
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';
|
|
2
|
+
import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keyIsMoving, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
|
|
3
3
|
import { Data, ElementSize, ElementType, Element, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware, ViewRectVertexes } from '@idraw/types';
|
|
4
4
|
export { Data, ElementType, Element, ElementSize, ViewContext2D, Point, PointSize, ViewScaleInfo, ViewSizeInfo, ViewCalculator, PointWatcherEvent, BoardMiddleware };
|
|
5
5
|
export type ControllerStyle = ElementSize & {
|
|
@@ -31,6 +31,7 @@ export type DeepSelectorSharedStorage = {
|
|
|
31
31
|
[keySelectedElementList]: Array<Element<ElementType>>;
|
|
32
32
|
[keySelectedElementListVertexes]: ViewRectVertexes | null;
|
|
33
33
|
[keySelectedElementController]: ElementSizeController | null;
|
|
34
|
+
[keyIsMoving]: boolean | null;
|
|
34
35
|
[keyDebugElemCenter]: PointSize | null;
|
|
35
36
|
[keyDebugEnd0]: PointSize | null;
|
|
36
37
|
[keyDebugEndHorizontal]: PointSize | null;
|
|
@@ -1 +1 @@
|
|
|
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, keyIsMoving, keyDebugElemCenter, keyDebugEnd0, keyDebugEndHorizontal, keyDebugEndVertical, keyDebugStartHorizontal, keyDebugStartVertical } from './config';
|
|
@@ -1,3 +1,21 @@
|
|
|
1
|
-
import type { BoardMiddleware,
|
|
1
|
+
import type { BoardMiddleware, CoreEventMap, Element, ViewScaleInfo, ElementPosition } from '@idraw/types';
|
|
2
2
|
export declare const middlewareEventTextEdit = "@middleware/text-edit";
|
|
3
|
-
export declare const
|
|
3
|
+
export declare const middlewareEventTextChange = "@middleware/text-change";
|
|
4
|
+
type TextEditEvent = {
|
|
5
|
+
element: Element<'text'>;
|
|
6
|
+
position: ElementPosition;
|
|
7
|
+
groupQueue: Element<'group'>[];
|
|
8
|
+
viewScaleInfo: ViewScaleInfo;
|
|
9
|
+
};
|
|
10
|
+
type TextChangeEvent = {
|
|
11
|
+
element: {
|
|
12
|
+
uuid: string;
|
|
13
|
+
detail: {
|
|
14
|
+
text: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
position: ElementPosition;
|
|
18
|
+
};
|
|
19
|
+
type ExtendEventMap = Record<typeof middlewareEventTextEdit, TextEditEvent> & Record<typeof middlewareEventTextChange, TextChangeEvent>;
|
|
20
|
+
export declare const MiddlewareTextEditor: BoardMiddleware<ExtendEventMap, CoreEventMap & ExtendEventMap>;
|
|
21
|
+
export {};
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { limitAngle, getDefaultElementDetailConfig } from '@idraw/util';
|
|
2
2
|
export const middlewareEventTextEdit = '@middleware/text-edit';
|
|
3
|
+
export const middlewareEventTextChange = '@middleware/text-change';
|
|
3
4
|
const defaultElementDetail = getDefaultElementDetailConfig();
|
|
4
5
|
export const MiddlewareTextEditor = (opts) => {
|
|
5
6
|
const { eventHub, boardContent, viewer } = opts;
|
|
6
7
|
const canvas = boardContent.boardContext.canvas;
|
|
7
|
-
const textarea = document.createElement('
|
|
8
|
+
const textarea = document.createElement('div');
|
|
9
|
+
textarea.setAttribute('contenteditable', 'true');
|
|
8
10
|
const canvasWrapper = document.createElement('div');
|
|
9
11
|
const container = opts.container || document.body;
|
|
10
12
|
const mask = document.createElement('div');
|
|
11
13
|
let activeElem = null;
|
|
14
|
+
let activePosition = [];
|
|
12
15
|
canvasWrapper.appendChild(textarea);
|
|
13
16
|
canvasWrapper.style.position = 'absolute';
|
|
14
17
|
mask.appendChild(canvasWrapper);
|
|
@@ -27,6 +30,7 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
27
30
|
const hideTextArea = () => {
|
|
28
31
|
mask.style.display = 'none';
|
|
29
32
|
activeElem = null;
|
|
33
|
+
activePosition = [];
|
|
30
34
|
};
|
|
31
35
|
const getCanvasRect = () => {
|
|
32
36
|
const clientRect = canvas.getBoundingClientRect();
|
|
@@ -84,6 +88,23 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
84
88
|
elemW = element.w * scale;
|
|
85
89
|
elemH = element.h * scale;
|
|
86
90
|
}
|
|
91
|
+
let justifyContent = 'center';
|
|
92
|
+
let alignItems = 'center';
|
|
93
|
+
if (detail.textAlign === 'left') {
|
|
94
|
+
justifyContent = 'start';
|
|
95
|
+
}
|
|
96
|
+
else if (detail.textAlign === 'right') {
|
|
97
|
+
justifyContent = 'end';
|
|
98
|
+
}
|
|
99
|
+
if (detail.verticalAlign === 'top') {
|
|
100
|
+
alignItems = 'start';
|
|
101
|
+
}
|
|
102
|
+
else if (detail.verticalAlign === 'bottom') {
|
|
103
|
+
alignItems = 'end';
|
|
104
|
+
}
|
|
105
|
+
textarea.style.display = 'inline-flex';
|
|
106
|
+
textarea.style.justifyContent = justifyContent;
|
|
107
|
+
textarea.style.alignItems = alignItems;
|
|
87
108
|
textarea.style.position = 'absolute';
|
|
88
109
|
textarea.style.left = `${elemX - 1}px`;
|
|
89
110
|
textarea.style.top = `${elemY - 1}px`;
|
|
@@ -104,7 +125,7 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
104
125
|
textarea.style.padding = '0';
|
|
105
126
|
textarea.style.margin = '0';
|
|
106
127
|
textarea.style.outline = 'none';
|
|
107
|
-
textarea.
|
|
128
|
+
textarea.innerText = detail.text || '';
|
|
108
129
|
parent.appendChild(textarea);
|
|
109
130
|
};
|
|
110
131
|
const resetCanvasWrapper = () => {
|
|
@@ -122,19 +143,40 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
122
143
|
textarea.addEventListener('click', (e) => {
|
|
123
144
|
e.stopPropagation();
|
|
124
145
|
});
|
|
125
|
-
textarea.addEventListener('input', (
|
|
126
|
-
if (activeElem) {
|
|
127
|
-
activeElem.detail.text =
|
|
146
|
+
textarea.addEventListener('input', () => {
|
|
147
|
+
if (activeElem && activePosition) {
|
|
148
|
+
activeElem.detail.text = textarea.innerText || '';
|
|
149
|
+
eventHub.trigger(middlewareEventTextChange, {
|
|
150
|
+
element: {
|
|
151
|
+
uuid: activeElem.uuid,
|
|
152
|
+
detail: {
|
|
153
|
+
text: activeElem.detail.text
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
position: [...(activePosition || [])]
|
|
157
|
+
});
|
|
128
158
|
viewer.drawFrame();
|
|
129
159
|
}
|
|
130
160
|
});
|
|
131
161
|
textarea.addEventListener('blur', () => {
|
|
162
|
+
if (activeElem && activePosition) {
|
|
163
|
+
eventHub.trigger(middlewareEventTextChange, {
|
|
164
|
+
element: {
|
|
165
|
+
uuid: activeElem.uuid,
|
|
166
|
+
detail: {
|
|
167
|
+
text: activeElem.detail.text
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
position: [...activePosition]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
132
173
|
hideTextArea();
|
|
133
174
|
});
|
|
134
175
|
const textEditCallback = (e) => {
|
|
135
176
|
var _a;
|
|
136
|
-
if ((e === null || e === void 0 ? void 0 : e.element) && ((_a = e === null || e === void 0 ? void 0 : e.element) === null || _a === void 0 ? void 0 : _a.type) === 'text') {
|
|
177
|
+
if ((e === null || e === void 0 ? void 0 : e.position) && (e === null || e === void 0 ? void 0 : e.element) && ((_a = e === null || e === void 0 ? void 0 : e.element) === null || _a === void 0 ? void 0 : _a.type) === 'text') {
|
|
137
178
|
activeElem = e.element;
|
|
179
|
+
activePosition = e.position;
|
|
138
180
|
}
|
|
139
181
|
showTextArea(e);
|
|
140
182
|
};
|