@idraw/core 0.4.0-beta.4 → 0.4.0-beta.40
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 +46 -0
- package/dist/esm/board/index.js +371 -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 +23 -9
- package/dist/esm/index.js +36 -12
- 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 +349 -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 +63 -0
- package/dist/esm/middleware/pointer/index.d.ts +3 -0
- package/dist/esm/middleware/pointer/index.js +43 -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 +97 -25
- 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 +32 -43
- 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 +57 -35
- package/dist/esm/middleware/selector/index.d.ts +11 -4
- package/dist/esm/middleware/selector/index.js +420 -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 +10 -4
- 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 +96 -19
- package/dist/index.global.js +4765 -1466
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { calcElementCenter, rotateElementVertexes, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcViewPointSize,
|
|
1
|
+
import { calcElementCenter, rotateElementVertexes, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcViewPointSize, calcViewElementSize, rotatePoint, parseAngleToRadian, parseRadianToAngle, limitAngle, calcRadian } from '@idraw/util';
|
|
2
2
|
function parseRadian(angle) {
|
|
3
3
|
return (angle * Math.PI) / 180;
|
|
4
4
|
}
|
|
@@ -9,11 +9,11 @@ function changeMoveDistDirect(moveDist, moveDirect) {
|
|
|
9
9
|
return moveDirect > 0 ? Math.abs(moveDist) : 0 - Math.abs(moveDist);
|
|
10
10
|
}
|
|
11
11
|
export function isPointInViewActiveVertexes(p, opts) {
|
|
12
|
-
const { ctx, viewScaleInfo,
|
|
13
|
-
const v0 = calcViewPointSize(vertexes[0], { viewScaleInfo
|
|
14
|
-
const v1 = calcViewPointSize(vertexes[1], { viewScaleInfo
|
|
15
|
-
const v2 = calcViewPointSize(vertexes[2], { viewScaleInfo
|
|
16
|
-
const v3 = calcViewPointSize(vertexes[3], { viewScaleInfo
|
|
12
|
+
const { ctx, viewScaleInfo, vertexes } = opts;
|
|
13
|
+
const v0 = calcViewPointSize(vertexes[0], { viewScaleInfo });
|
|
14
|
+
const v1 = calcViewPointSize(vertexes[1], { viewScaleInfo });
|
|
15
|
+
const v2 = calcViewPointSize(vertexes[2], { viewScaleInfo });
|
|
16
|
+
const v3 = calcViewPointSize(vertexes[3], { viewScaleInfo });
|
|
17
17
|
ctx.beginPath();
|
|
18
18
|
ctx.moveTo(v0.x, v0.y);
|
|
19
19
|
ctx.lineTo(v1.x, v1.y);
|
|
@@ -39,7 +39,7 @@ export function isPointInViewActiveGroup(p, opts) {
|
|
|
39
39
|
return isPointInViewActiveVertexes(p, { ctx, vertexes, viewScaleInfo, viewSizeInfo });
|
|
40
40
|
}
|
|
41
41
|
export function getPointTarget(p, opts) {
|
|
42
|
-
var _a, _b, _c;
|
|
42
|
+
var _a, _b, _c, _d, _e;
|
|
43
43
|
const target = {
|
|
44
44
|
type: null,
|
|
45
45
|
elements: [],
|
|
@@ -49,8 +49,11 @@ export function getPointTarget(p, opts) {
|
|
|
49
49
|
};
|
|
50
50
|
const { ctx, data, calculator, selectedElements, viewScaleInfo, viewSizeInfo, areaSize, groupQueue, selectedElementController } = opts;
|
|
51
51
|
if (selectedElementController) {
|
|
52
|
-
const { left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight } = selectedElementController;
|
|
52
|
+
const { left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight, rotate } = selectedElementController;
|
|
53
53
|
const ctrls = [left, right, top, bottom, topLeft, topRight, bottomLeft, bottomRight];
|
|
54
|
+
if ((selectedElements === null || selectedElements === void 0 ? void 0 : selectedElements.length) === 1 && ((_b = (_a = selectedElements === null || selectedElements === void 0 ? void 0 : selectedElements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.rotatable) !== false) {
|
|
55
|
+
ctrls.push(rotate);
|
|
56
|
+
}
|
|
54
57
|
for (let i = 0; i < ctrls.length; i++) {
|
|
55
58
|
const ctrl = ctrls[i];
|
|
56
59
|
if (isPointInViewActiveVertexes(p, { ctx, vertexes: ctrl.vertexes, viewSizeInfo, viewScaleInfo })) {
|
|
@@ -65,7 +68,7 @@ export function getPointTarget(p, opts) {
|
|
|
65
68
|
}
|
|
66
69
|
if (groupQueue && Array.isArray(groupQueue) && groupQueue.length > 0) {
|
|
67
70
|
const lastGroup = groupQueue[groupQueue.length - 1];
|
|
68
|
-
if (((
|
|
71
|
+
if (((_c = lastGroup === null || lastGroup === void 0 ? void 0 : lastGroup.detail) === null || _c === void 0 ? void 0 : _c.children) && Array.isArray((_d = lastGroup === null || lastGroup === void 0 ? void 0 : lastGroup.detail) === null || _d === void 0 ? void 0 : _d.children)) {
|
|
69
72
|
for (let i = lastGroup.detail.children.length - 1; i >= 0; i--) {
|
|
70
73
|
const child = lastGroup.detail.children[i];
|
|
71
74
|
const vertexes = calcElementVertexesInGroup(child, { groupQueue });
|
|
@@ -94,7 +97,7 @@ export function getPointTarget(p, opts) {
|
|
|
94
97
|
}
|
|
95
98
|
if (data) {
|
|
96
99
|
const { index, element } = calculator.getPointElement(p, { data, viewScaleInfo, viewSizeInfo });
|
|
97
|
-
if (index >= 0 && element && ((
|
|
100
|
+
if (index >= 0 && element && ((_e = element === null || element === void 0 ? void 0 : element.operations) === null || _e === void 0 ? void 0 : _e.invisible) !== true) {
|
|
98
101
|
target.elements = [element];
|
|
99
102
|
target.type = 'over-element';
|
|
100
103
|
return target;
|
|
@@ -410,7 +413,8 @@ export function resizeElement(elem, opts) {
|
|
|
410
413
|
let centerY = elemCenter.y;
|
|
411
414
|
if (angle < 90) {
|
|
412
415
|
moveVerticalDist = 0 - changeMoveDistDirect(moveVerticalDist, moveVerticalY);
|
|
413
|
-
moveHorizontalDist =
|
|
416
|
+
moveHorizontalDist =
|
|
417
|
+
0 - changeMoveDistDirect(moveHorizontalDist, limitRatio ? 0 - moveVerticalDist : moveHorizontalX);
|
|
414
418
|
const centerMoveVerticalDist = moveVerticalDist / 2;
|
|
415
419
|
centerX = centerX + centerMoveVerticalDist * Math.sin(radian);
|
|
416
420
|
centerY = centerY - centerMoveVerticalDist * Math.cos(radian);
|
|
@@ -545,7 +549,8 @@ export function resizeElement(elem, opts) {
|
|
|
545
549
|
let centerY = elemCenter.y;
|
|
546
550
|
if (angle < 90) {
|
|
547
551
|
moveVerticalDist = changeMoveDistDirect(moveVerticalDist, moveVerticalY);
|
|
548
|
-
moveHorizontalDist =
|
|
552
|
+
moveHorizontalDist =
|
|
553
|
+
0 - changeMoveDistDirect(moveHorizontalDist, limitRatio ? 0 - moveVerticalDist : moveHorizontalX);
|
|
549
554
|
const radian = parseRadian(angle);
|
|
550
555
|
const centerMoveVerticalDist = moveVerticalDist / 2;
|
|
551
556
|
centerX = centerX - centerMoveVerticalDist * Math.sin(radian);
|
|
@@ -671,11 +676,29 @@ export function resizeElement(elem, opts) {
|
|
|
671
676
|
}
|
|
672
677
|
return { x, y, w, h, angle: elem.angle };
|
|
673
678
|
}
|
|
679
|
+
export function rotateElement(elem, opts) {
|
|
680
|
+
const { x, y, w, h, angle = 0 } = elem;
|
|
681
|
+
const { center, start, end, viewScaleInfo } = opts;
|
|
682
|
+
const elemCenter = calcViewPointSize(center, {
|
|
683
|
+
viewScaleInfo
|
|
684
|
+
});
|
|
685
|
+
const startAngle = limitAngle(angle);
|
|
686
|
+
const changedRadian = calcRadian(elemCenter, start, end);
|
|
687
|
+
const endAngle = limitAngle(startAngle + parseRadianToAngle(changedRadian));
|
|
688
|
+
return {
|
|
689
|
+
x,
|
|
690
|
+
y,
|
|
691
|
+
w,
|
|
692
|
+
h,
|
|
693
|
+
angle: endAngle
|
|
694
|
+
};
|
|
695
|
+
}
|
|
674
696
|
export function getSelectedListArea(data, opts) {
|
|
697
|
+
var _a;
|
|
675
698
|
const indexes = [];
|
|
676
699
|
const uuids = [];
|
|
677
700
|
const elements = [];
|
|
678
|
-
const {
|
|
701
|
+
const { viewScaleInfo, start, end } = opts;
|
|
679
702
|
if (!(Array.isArray(data.elements) && start && end)) {
|
|
680
703
|
return { indexes, uuids, elements };
|
|
681
704
|
}
|
|
@@ -683,8 +706,12 @@ export function getSelectedListArea(data, opts) {
|
|
|
683
706
|
const endX = Math.max(start.x, end.x);
|
|
684
707
|
const startY = Math.min(start.y, end.y);
|
|
685
708
|
const endY = Math.max(start.y, end.y);
|
|
686
|
-
data.elements.
|
|
687
|
-
const
|
|
709
|
+
for (let idx = 0; idx < data.elements.length; idx++) {
|
|
710
|
+
const elem = data.elements[idx];
|
|
711
|
+
if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) === true) {
|
|
712
|
+
continue;
|
|
713
|
+
}
|
|
714
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
688
715
|
const center = calcElementCenter(elemSize);
|
|
689
716
|
if (center.x >= startX && center.x <= endX && center.y >= startY && center.y <= endY) {
|
|
690
717
|
indexes.push(idx);
|
|
@@ -702,7 +729,7 @@ export function getSelectedListArea(data, opts) {
|
|
|
702
729
|
}
|
|
703
730
|
}
|
|
704
731
|
}
|
|
705
|
-
}
|
|
732
|
+
}
|
|
706
733
|
return { indexes, uuids, elements };
|
|
707
734
|
}
|
|
708
735
|
export function calcSelectedElementsArea(elements, opts) {
|
|
@@ -711,14 +738,14 @@ export function calcSelectedElementsArea(elements, opts) {
|
|
|
711
738
|
return null;
|
|
712
739
|
}
|
|
713
740
|
const area = { x: 0, y: 0, w: 0, h: 0 };
|
|
714
|
-
const {
|
|
741
|
+
const { viewScaleInfo } = opts;
|
|
715
742
|
let prevElemSize = null;
|
|
716
743
|
for (let i = 0; i < elements.length; i++) {
|
|
717
744
|
const elem = elements[i];
|
|
718
745
|
if ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.invisible) {
|
|
719
746
|
continue;
|
|
720
747
|
}
|
|
721
|
-
const elemSize =
|
|
748
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
722
749
|
if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
|
|
723
750
|
const ves = rotateElementVertexes(elemSize);
|
|
724
751
|
if (ves.length === 4) {
|
|
@@ -762,28 +789,3 @@ export function isElementInGroup(elem, group) {
|
|
|
762
789
|
}
|
|
763
790
|
return false;
|
|
764
791
|
}
|
|
765
|
-
export function calcMoveInGroup(start, end, groupQueue) {
|
|
766
|
-
let moveX = end.x - start.x;
|
|
767
|
-
let moveY = end.y - start.y;
|
|
768
|
-
const pointGroupQueue = [];
|
|
769
|
-
groupQueue.forEach((group) => {
|
|
770
|
-
const { x, y, w, h, angle = 0 } = group;
|
|
771
|
-
pointGroupQueue.push({
|
|
772
|
-
x,
|
|
773
|
-
y,
|
|
774
|
-
w,
|
|
775
|
-
h,
|
|
776
|
-
angle: 0 - angle
|
|
777
|
-
});
|
|
778
|
-
});
|
|
779
|
-
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
780
|
-
const startInGroup = rotatePointInGroup(start, pointGroupQueue);
|
|
781
|
-
const endInGroup = rotatePointInGroup(end, pointGroupQueue);
|
|
782
|
-
moveX = endInGroup.x - startInGroup.x;
|
|
783
|
-
moveY = endInGroup.y - startInGroup.y;
|
|
784
|
-
}
|
|
785
|
-
return {
|
|
786
|
-
moveX,
|
|
787
|
-
moveY
|
|
788
|
-
};
|
|
789
|
-
}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
-
import type { BoardMiddleware,
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { BoardMiddleware, CoreEventMap, Element, ViewScaleInfo, ElementPosition } from '@idraw/types';
|
|
2
|
+
import { coreEventKeys } from '../../config';
|
|
3
|
+
type TextEditEvent = {
|
|
4
|
+
element: Element<'text'>;
|
|
5
|
+
position: ElementPosition;
|
|
6
|
+
groupQueue: Element<'group'>[];
|
|
7
|
+
viewScaleInfo: ViewScaleInfo;
|
|
8
|
+
};
|
|
9
|
+
type TextChangeEvent = {
|
|
10
|
+
element: {
|
|
11
|
+
uuid: string;
|
|
12
|
+
detail: {
|
|
13
|
+
text: string;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
position: ElementPosition;
|
|
17
|
+
};
|
|
18
|
+
type ExtendEventMap = Record<typeof coreEventKeys.TEXT_EDIT, TextEditEvent> & Record<typeof coreEventKeys.TEXT_CHANGE, TextChangeEvent>;
|
|
19
|
+
export declare const MiddlewareTextEditor: BoardMiddleware<ExtendEventMap, CoreEventMap & ExtendEventMap>;
|
|
20
|
+
export {};
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
import { limitAngle, getDefaultElementDetailConfig } from '@idraw/util';
|
|
2
|
-
|
|
1
|
+
import { limitAngle, getDefaultElementDetailConfig, enhanceFontFamliy } from '@idraw/util';
|
|
2
|
+
import { coreEventKeys } from '../../config';
|
|
3
3
|
const defaultElementDetail = getDefaultElementDetailConfig();
|
|
4
4
|
export const MiddlewareTextEditor = (opts) => {
|
|
5
|
-
const { eventHub, boardContent, viewer } = opts;
|
|
5
|
+
const { eventHub, boardContent, viewer, sharer } = opts;
|
|
6
6
|
const canvas = boardContent.boardContext.canvas;
|
|
7
|
-
const textarea = document.createElement('
|
|
7
|
+
const textarea = document.createElement('div');
|
|
8
|
+
textarea.setAttribute('contenteditable', 'true');
|
|
8
9
|
const canvasWrapper = document.createElement('div');
|
|
9
10
|
const container = opts.container || document.body;
|
|
10
11
|
const mask = document.createElement('div');
|
|
11
12
|
let activeElem = null;
|
|
13
|
+
let activePosition = [];
|
|
14
|
+
const id = `idraw-middleware-text-editor-${Math.random().toString(26).substring(2)}`;
|
|
15
|
+
mask.setAttribute('id', id);
|
|
12
16
|
canvasWrapper.appendChild(textarea);
|
|
13
17
|
canvasWrapper.style.position = 'absolute';
|
|
14
18
|
mask.appendChild(canvasWrapper);
|
|
@@ -23,10 +27,27 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
23
27
|
resetCanvasWrapper();
|
|
24
28
|
resetTextArea(e);
|
|
25
29
|
mask.style.display = 'block';
|
|
30
|
+
if (activeElem === null || activeElem === void 0 ? void 0 : activeElem.uuid) {
|
|
31
|
+
sharer.setActiveOverrideElemenentMap({
|
|
32
|
+
[activeElem.uuid]: {
|
|
33
|
+
operations: { invisible: true }
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
viewer.drawFrame();
|
|
37
|
+
}
|
|
26
38
|
};
|
|
27
39
|
const hideTextArea = () => {
|
|
40
|
+
if (activeElem === null || activeElem === void 0 ? void 0 : activeElem.uuid) {
|
|
41
|
+
const map = sharer.getActiveOverrideElemenentMap();
|
|
42
|
+
if (map) {
|
|
43
|
+
delete map[activeElem.uuid];
|
|
44
|
+
}
|
|
45
|
+
sharer.setActiveOverrideElemenentMap(map);
|
|
46
|
+
viewer.drawFrame();
|
|
47
|
+
}
|
|
28
48
|
mask.style.display = 'none';
|
|
29
49
|
activeElem = null;
|
|
50
|
+
activePosition = [];
|
|
30
51
|
};
|
|
31
52
|
const getCanvasRect = () => {
|
|
32
53
|
const clientRect = canvas.getBoundingClientRect();
|
|
@@ -84,24 +105,45 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
84
105
|
elemW = element.w * scale;
|
|
85
106
|
elemH = element.h * scale;
|
|
86
107
|
}
|
|
108
|
+
let justifyContent = 'center';
|
|
109
|
+
let alignItems = 'center';
|
|
110
|
+
if (detail.textAlign === 'left') {
|
|
111
|
+
justifyContent = 'start';
|
|
112
|
+
}
|
|
113
|
+
else if (detail.textAlign === 'right') {
|
|
114
|
+
justifyContent = 'end';
|
|
115
|
+
}
|
|
116
|
+
if (detail.verticalAlign === 'top') {
|
|
117
|
+
alignItems = 'start';
|
|
118
|
+
}
|
|
119
|
+
else if (detail.verticalAlign === 'bottom') {
|
|
120
|
+
alignItems = 'end';
|
|
121
|
+
}
|
|
122
|
+
textarea.style.display = 'inline-flex';
|
|
123
|
+
textarea.style.justifyContent = justifyContent;
|
|
124
|
+
textarea.style.alignItems = alignItems;
|
|
87
125
|
textarea.style.position = 'absolute';
|
|
88
|
-
textarea.style.left = `${elemX}px`;
|
|
89
|
-
textarea.style.top = `${elemY}px`;
|
|
90
|
-
textarea.style.width = `${elemW}px`;
|
|
91
|
-
textarea.style.height = `${elemH}px`;
|
|
126
|
+
textarea.style.left = `${elemX - 1}px`;
|
|
127
|
+
textarea.style.top = `${elemY - 1}px`;
|
|
128
|
+
textarea.style.width = `${elemW + 2}px`;
|
|
129
|
+
textarea.style.height = `${elemH + 2}px`;
|
|
92
130
|
textarea.style.transform = `rotate(${limitAngle(element.angle || 0)}deg)`;
|
|
93
131
|
textarea.style.boxSizing = 'border-box';
|
|
94
132
|
textarea.style.border = '1px solid #1973ba';
|
|
95
133
|
textarea.style.resize = 'none';
|
|
96
134
|
textarea.style.overflow = 'hidden';
|
|
97
135
|
textarea.style.wordBreak = 'break-all';
|
|
98
|
-
textarea.style.
|
|
99
|
-
textarea.style.
|
|
136
|
+
textarea.style.borderRadius = `${(typeof detail.borderRadius === 'number' ? detail.borderRadius : 0) * scale}px`;
|
|
137
|
+
textarea.style.background = `${detail.background || 'transparent'}`;
|
|
138
|
+
textarea.style.color = `${detail.color || '#333333'}`;
|
|
100
139
|
textarea.style.fontSize = `${detail.fontSize * scale}px`;
|
|
101
|
-
textarea.style.lineHeight = `${detail.lineHeight * scale}px`;
|
|
102
|
-
textarea.style.fontFamily = detail.fontFamily;
|
|
140
|
+
textarea.style.lineHeight = `${(detail.lineHeight || detail.fontSize) * scale}px`;
|
|
141
|
+
textarea.style.fontFamily = enhanceFontFamliy(detail.fontFamily);
|
|
103
142
|
textarea.style.fontWeight = `${detail.fontWeight}`;
|
|
104
|
-
textarea.
|
|
143
|
+
textarea.style.padding = '0';
|
|
144
|
+
textarea.style.margin = '0';
|
|
145
|
+
textarea.style.outline = 'none';
|
|
146
|
+
textarea.innerText = detail.text || '';
|
|
105
147
|
parent.appendChild(textarea);
|
|
106
148
|
};
|
|
107
149
|
const resetCanvasWrapper = () => {
|
|
@@ -119,28 +161,63 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
119
161
|
textarea.addEventListener('click', (e) => {
|
|
120
162
|
e.stopPropagation();
|
|
121
163
|
});
|
|
122
|
-
textarea.addEventListener('input', (
|
|
123
|
-
if (activeElem) {
|
|
124
|
-
activeElem.detail.text =
|
|
164
|
+
textarea.addEventListener('input', () => {
|
|
165
|
+
if (activeElem && activePosition) {
|
|
166
|
+
activeElem.detail.text = textarea.innerText || '';
|
|
167
|
+
eventHub.trigger(coreEventKeys.TEXT_CHANGE, {
|
|
168
|
+
element: {
|
|
169
|
+
uuid: activeElem.uuid,
|
|
170
|
+
detail: {
|
|
171
|
+
text: activeElem.detail.text
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
position: [...(activePosition || [])]
|
|
175
|
+
});
|
|
125
176
|
viewer.drawFrame();
|
|
126
177
|
}
|
|
127
178
|
});
|
|
128
179
|
textarea.addEventListener('blur', () => {
|
|
180
|
+
if (activeElem && activePosition) {
|
|
181
|
+
eventHub.trigger(coreEventKeys.TEXT_CHANGE, {
|
|
182
|
+
element: {
|
|
183
|
+
uuid: activeElem.uuid,
|
|
184
|
+
detail: {
|
|
185
|
+
text: activeElem.detail.text
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
position: [...activePosition]
|
|
189
|
+
});
|
|
190
|
+
}
|
|
129
191
|
hideTextArea();
|
|
130
192
|
});
|
|
193
|
+
textarea.addEventListener('keydown', (e) => {
|
|
194
|
+
e.stopPropagation();
|
|
195
|
+
});
|
|
196
|
+
textarea.addEventListener('keypress', (e) => {
|
|
197
|
+
e.stopPropagation();
|
|
198
|
+
});
|
|
199
|
+
textarea.addEventListener('keyup', (e) => {
|
|
200
|
+
e.stopPropagation();
|
|
201
|
+
});
|
|
202
|
+
textarea.addEventListener('wheel', (e) => {
|
|
203
|
+
e.stopPropagation();
|
|
204
|
+
e.preventDefault();
|
|
205
|
+
});
|
|
131
206
|
const textEditCallback = (e) => {
|
|
132
207
|
var _a;
|
|
133
|
-
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') {
|
|
208
|
+
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') {
|
|
134
209
|
activeElem = e.element;
|
|
210
|
+
activePosition = e.position;
|
|
135
211
|
}
|
|
136
212
|
showTextArea(e);
|
|
137
213
|
};
|
|
138
214
|
return {
|
|
215
|
+
name: '@middleware/text-editor',
|
|
139
216
|
use() {
|
|
140
|
-
eventHub.on(
|
|
217
|
+
eventHub.on(coreEventKeys.TEXT_EDIT, textEditCallback);
|
|
141
218
|
},
|
|
142
219
|
disuse() {
|
|
143
|
-
eventHub.off(
|
|
220
|
+
eventHub.off(coreEventKeys.TEXT_EDIT, textEditCallback);
|
|
144
221
|
}
|
|
145
222
|
};
|
|
146
223
|
};
|