@idraw/core 0.4.0-beta.33 → 0.4.0-beta.35
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/config.d.ts +26 -1
- package/dist/esm/config.js +32 -1
- package/dist/esm/index.d.ts +7 -5
- package/dist/esm/index.js +6 -5
- package/dist/esm/lib/cursor.js +2 -1
- package/dist/esm/middleware/dragger/index.js +4 -3
- package/dist/esm/middleware/info/index.d.ts +2 -2
- package/dist/esm/middleware/info/index.js +2 -4
- package/dist/esm/middleware/layout-selector/index.d.ts +2 -2
- package/dist/esm/middleware/layout-selector/index.js +5 -5
- 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/index.d.ts +0 -1
- package/dist/esm/middleware/ruler/index.js +3 -3
- package/dist/esm/middleware/scaler/index.d.ts +0 -1
- package/dist/esm/middleware/scaler/index.js +2 -2
- package/dist/esm/middleware/scroller/index.js +2 -1
- package/dist/esm/middleware/selector/config.d.ts +0 -4
- package/dist/esm/middleware/selector/config.js +0 -4
- package/dist/esm/middleware/selector/index.d.ts +1 -2
- package/dist/esm/middleware/selector/index.js +92 -51
- package/dist/esm/middleware/text-editor/index.d.ts +2 -3
- package/dist/esm/middleware/text-editor/index.js +7 -6
- package/dist/index.global.js +453 -297
- package/dist/index.global.min.js +1 -1
- package/package.json +5 -5
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement, getElementSize } from '@idraw/util';
|
|
1
|
+
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, getElementPositionMapFromList, deepResizeGroupElement, getElementSize } from '@idraw/util';
|
|
2
2
|
import { drawHoverVertexesWrapper, drawLockedVertexesWrapper, drawArea, drawListArea, drawGroupQueueVertexesWrappers, drawSelectedElementControllersVertexes } from './draw-wrapper';
|
|
3
3
|
import { drawReferenceLines } from './draw-reference';
|
|
4
4
|
import { getPointTarget, resizeElement, rotateElement, getSelectedListArea, calcSelectedElementsArea, isElementInGroup, isPointInViewActiveGroup, calcMoveInGroup } from './util';
|
|
5
|
-
import {
|
|
5
|
+
import { keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize, defaultStyle } from './config';
|
|
6
6
|
import { calcReferenceInfo } from './reference';
|
|
7
|
-
import {
|
|
8
|
-
import { eventChange } from '../../config';
|
|
7
|
+
import { coreEventKeys } from '../../config';
|
|
9
8
|
import { keyLayoutIsSelected } from '../layout-selector';
|
|
10
9
|
export { keySelectedElementList, keyHoverElement, keyActionType, keyResizeType, keyGroupQueue };
|
|
11
|
-
export { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid };
|
|
12
10
|
export const MiddlewareSelector = (opts, config) => {
|
|
13
11
|
const innerConfig = Object.assign(Object.assign({}, defaultStyle), config);
|
|
14
12
|
const { activeColor, activeAreaColor, lockedColor, referenceColor } = innerConfig;
|
|
@@ -19,6 +17,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
19
17
|
let moveOriginalStartPoint = null;
|
|
20
18
|
let moveOriginalStartElementSize = null;
|
|
21
19
|
let inBusyMode = null;
|
|
20
|
+
let hasChangedData = null;
|
|
22
21
|
sharer.setSharedStorage(keyActionType, null);
|
|
23
22
|
sharer.setSharedStorage(keyEnableSnapToGrid, true);
|
|
24
23
|
const getActiveElements = () => {
|
|
@@ -72,7 +71,10 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
72
71
|
sharer.setSharedStorage(keySelectedElementPosition, []);
|
|
73
72
|
}
|
|
74
73
|
if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
|
|
75
|
-
|
|
74
|
+
const uuids = list.map((elem) => elem.uuid);
|
|
75
|
+
const data = sharer.getActiveStorage('data');
|
|
76
|
+
const positionMap = getElementPositionMapFromList(uuids, (data === null || data === void 0 ? void 0 : data.elements) || []);
|
|
77
|
+
eventHub.trigger(coreEventKeys.SELECT, { uuids, positions: list.map((elem) => [...positionMap[elem.uuid]]) });
|
|
76
78
|
}
|
|
77
79
|
};
|
|
78
80
|
const pointTargetBaseOptions = () => {
|
|
@@ -105,7 +107,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
105
107
|
sharer.setSharedStorage(keyIsMoving, null);
|
|
106
108
|
};
|
|
107
109
|
clear();
|
|
108
|
-
const selectCallback = ({ uuids, positions }) => {
|
|
110
|
+
const selectCallback = ({ uuids = [], positions }) => {
|
|
109
111
|
let elements = [];
|
|
110
112
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
111
113
|
const data = sharer.getActiveStorage('data');
|
|
@@ -144,16 +146,16 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
144
146
|
return {
|
|
145
147
|
name: '@middleware/selector',
|
|
146
148
|
use() {
|
|
147
|
-
eventHub.on(
|
|
148
|
-
eventHub.on(
|
|
149
|
-
eventHub.on(
|
|
150
|
-
eventHub.on(
|
|
149
|
+
eventHub.on(coreEventKeys.SELECT, selectCallback);
|
|
150
|
+
eventHub.on(coreEventKeys.CLEAR_SELECT, selectClearCallback);
|
|
151
|
+
eventHub.on(coreEventKeys.SELECT_IN_GROUP, selectInGroupCallback);
|
|
152
|
+
eventHub.on(coreEventKeys.SNAP_TO_GRID, setSnapToSnapCallback);
|
|
151
153
|
},
|
|
152
154
|
disuse() {
|
|
153
|
-
eventHub.off(
|
|
154
|
-
eventHub.off(
|
|
155
|
-
eventHub.off(
|
|
156
|
-
eventHub.off(
|
|
155
|
+
eventHub.off(coreEventKeys.SELECT, selectCallback);
|
|
156
|
+
eventHub.off(coreEventKeys.CLEAR_SELECT, selectClearCallback);
|
|
157
|
+
eventHub.off(coreEventKeys.SELECT_IN_GROUP, selectInGroupCallback);
|
|
158
|
+
eventHub.off(coreEventKeys.SNAP_TO_GRID, setSnapToSnapCallback);
|
|
157
159
|
},
|
|
158
160
|
hover: (e) => {
|
|
159
161
|
var _a, _b, _c, _d, _e;
|
|
@@ -167,7 +169,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
167
169
|
}
|
|
168
170
|
const cursor = target.type;
|
|
169
171
|
if (inBusyMode === null) {
|
|
170
|
-
eventHub.trigger(
|
|
172
|
+
eventHub.trigger(coreEventKeys.CURSOR, {
|
|
171
173
|
type: cursor,
|
|
172
174
|
groupQueue: target.groupQueue,
|
|
173
175
|
element: target.elements[0]
|
|
@@ -263,16 +265,15 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
263
265
|
groupQueue
|
|
264
266
|
})) {
|
|
265
267
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
updateHoverElement(null);
|
|
271
|
-
}
|
|
268
|
+
const isLockedElement = ((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_c = (_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.locked) === true;
|
|
269
|
+
updateHoverElement(null);
|
|
272
270
|
if (((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
|
|
273
271
|
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
274
272
|
}
|
|
275
|
-
if (
|
|
273
|
+
if (isLockedElement === true) {
|
|
274
|
+
clear();
|
|
275
|
+
}
|
|
276
|
+
else if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
|
|
276
277
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
277
278
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
278
279
|
}
|
|
@@ -297,30 +298,26 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
297
298
|
});
|
|
298
299
|
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
299
300
|
const isLockedElement = ((_g = target === null || target === void 0 ? void 0 : target.elements) === null || _g === void 0 ? void 0 : _g.length) === 1 && ((_j = (_h = target.elements[0]) === null || _h === void 0 ? void 0 : _h.operations) === null || _j === void 0 ? void 0 : _j.locked) === true;
|
|
300
|
-
|
|
301
|
-
updateHoverElement(null);
|
|
302
|
-
}
|
|
301
|
+
updateHoverElement(null);
|
|
303
302
|
if (((_k = target === null || target === void 0 ? void 0 : target.elements) === null || _k === void 0 ? void 0 : _k.length) === 1) {
|
|
304
303
|
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
305
304
|
}
|
|
306
|
-
if (
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
updateSelectedElementList([], { triggerEvent: true });
|
|
323
|
-
}
|
|
305
|
+
if (isLockedElement === true) {
|
|
306
|
+
clear();
|
|
307
|
+
sharer.setSharedStorage(keyActionType, 'area');
|
|
308
|
+
sharer.setSharedStorage(keyAreaStart, e.point);
|
|
309
|
+
updateSelectedElementList([], { triggerEvent: true });
|
|
310
|
+
}
|
|
311
|
+
else if (target.type === 'list-area') {
|
|
312
|
+
sharer.setSharedStorage(keyActionType, 'drag-list');
|
|
313
|
+
}
|
|
314
|
+
else if (target.type === 'over-element' && ((_l = target === null || target === void 0 ? void 0 : target.elements) === null || _l === void 0 ? void 0 : _l.length) === 1) {
|
|
315
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
316
|
+
sharer.setSharedStorage(keyActionType, 'drag');
|
|
317
|
+
}
|
|
318
|
+
else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
|
|
319
|
+
sharer.setSharedStorage(keyResizeType, target.type);
|
|
320
|
+
sharer.setSharedStorage(keyActionType, 'resize');
|
|
324
321
|
}
|
|
325
322
|
else {
|
|
326
323
|
clear();
|
|
@@ -346,6 +343,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
346
343
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
347
344
|
const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
|
|
348
345
|
if (actionType === 'drag') {
|
|
346
|
+
hasChangedData = true;
|
|
349
347
|
inBusyMode = 'drag';
|
|
350
348
|
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && moveOriginalStartElementSize && originalStart && end && ((_b = (_a = elems[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.locked) !== true) {
|
|
351
349
|
const { moveX, moveY } = calcMoveInGroup(originalStart, end, groupQueue);
|
|
@@ -391,6 +389,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
391
389
|
viewer.drawFrame();
|
|
392
390
|
}
|
|
393
391
|
else if (actionType === 'drag-list') {
|
|
392
|
+
hasChangedData = true;
|
|
394
393
|
inBusyMode = 'drag-list';
|
|
395
394
|
if (data && originalStart && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
|
|
396
395
|
const moveX = (end.x - start.x) / scale;
|
|
@@ -419,6 +418,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
419
418
|
}
|
|
420
419
|
else if (actionType === 'resize') {
|
|
421
420
|
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && originalStart && moveOriginalStartElementSize && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
|
|
421
|
+
hasChangedData = true;
|
|
422
422
|
inBusyMode = 'resize';
|
|
423
423
|
const pointGroupQueue = [];
|
|
424
424
|
groupQueue.forEach((group) => {
|
|
@@ -569,7 +569,10 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
569
569
|
if (type === 'resize') {
|
|
570
570
|
type = 'resizeElement';
|
|
571
571
|
}
|
|
572
|
-
|
|
572
|
+
if (hasChangedData) {
|
|
573
|
+
eventHub.trigger(coreEventKeys.CHANGE, { data, type, selectedElements, hoverElement });
|
|
574
|
+
hasChangedData = false;
|
|
575
|
+
}
|
|
573
576
|
}
|
|
574
577
|
viewer.drawFrame();
|
|
575
578
|
};
|
|
@@ -602,7 +605,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
602
605
|
}
|
|
603
606
|
}
|
|
604
607
|
else if (target.elements.length === 1 && ((_d = target.elements[0]) === null || _d === void 0 ? void 0 : _d.type) === 'text' && !((_f = (_e = target.elements[0]) === null || _e === void 0 ? void 0 : _e.operations) === null || _f === void 0 ? void 0 : _f.invisible)) {
|
|
605
|
-
eventHub.trigger(
|
|
608
|
+
eventHub.trigger(coreEventKeys.TEXT_EDIT, {
|
|
606
609
|
element: target.elements[0],
|
|
607
610
|
groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
|
|
608
611
|
position: getElementPositionFromList((_g = target.elements[0]) === null || _g === void 0 ? void 0 : _g.uuid, ((_h = sharer.getActiveStorage('data')) === null || _h === void 0 ? void 0 : _h.elements) || []),
|
|
@@ -611,6 +614,44 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
611
614
|
}
|
|
612
615
|
sharer.setSharedStorage(keyActionType, null);
|
|
613
616
|
},
|
|
617
|
+
contextMenu: (e) => {
|
|
618
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
619
|
+
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
620
|
+
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
621
|
+
if (isPointInViewActiveGroup(e.point, {
|
|
622
|
+
ctx: overlayContext,
|
|
623
|
+
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
624
|
+
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
625
|
+
groupQueue
|
|
626
|
+
})) {
|
|
627
|
+
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
628
|
+
if (((_a = target === null || target === void 0 ? void 0 : target.elements) === null || _a === void 0 ? void 0 : _a.length) === 1 && ((_c = (_b = target.elements[0]) === null || _b === void 0 ? void 0 : _b.operations) === null || _c === void 0 ? void 0 : _c.locked) !== true) {
|
|
629
|
+
clear();
|
|
630
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
631
|
+
viewer.drawFrame();
|
|
632
|
+
}
|
|
633
|
+
else if (!((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length)) {
|
|
634
|
+
clear();
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
|
|
640
|
+
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
641
|
+
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
642
|
+
calculator
|
|
643
|
+
});
|
|
644
|
+
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
645
|
+
if (((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1 && ((_g = (_f = target.elements[0]) === null || _f === void 0 ? void 0 : _f.operations) === null || _g === void 0 ? void 0 : _g.locked) !== true) {
|
|
646
|
+
clear();
|
|
647
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
648
|
+
viewer.drawFrame();
|
|
649
|
+
return;
|
|
650
|
+
}
|
|
651
|
+
else if (!((_h = target === null || target === void 0 ? void 0 : target.elements) === null || _h === void 0 ? void 0 : _h.length)) {
|
|
652
|
+
clear();
|
|
653
|
+
}
|
|
654
|
+
},
|
|
614
655
|
beforeDrawFrame({ snapshot }) {
|
|
615
656
|
var _a;
|
|
616
657
|
const { activeStore, sharedStore } = snapshot;
|
|
@@ -637,11 +678,11 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
637
678
|
viewScaleInfo
|
|
638
679
|
})
|
|
639
680
|
: null;
|
|
640
|
-
const
|
|
681
|
+
const isHoverLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
|
|
641
682
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
642
683
|
drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
|
|
643
684
|
if (hoverElement && actionType !== 'drag') {
|
|
644
|
-
if (
|
|
685
|
+
if (isHoverLocked) {
|
|
645
686
|
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
646
687
|
groupQueue,
|
|
647
688
|
controllerSize: 10,
|
|
@@ -652,7 +693,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
652
693
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
653
694
|
}
|
|
654
695
|
}
|
|
655
|
-
if (
|
|
696
|
+
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
656
697
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
657
698
|
if (actionType === 'drag') {
|
|
658
699
|
if (enableSnapToGrid === true) {
|
|
@@ -679,7 +720,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
679
720
|
}
|
|
680
721
|
else {
|
|
681
722
|
if (hoverElement && actionType !== 'drag') {
|
|
682
|
-
if (
|
|
723
|
+
if (isHoverLocked) {
|
|
683
724
|
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
684
725
|
groupQueue,
|
|
685
726
|
controllerSize: 10,
|
|
@@ -690,7 +731,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
690
731
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
691
732
|
}
|
|
692
733
|
}
|
|
693
|
-
if (
|
|
734
|
+
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
694
735
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
695
736
|
if (actionType === 'drag') {
|
|
696
737
|
if (enableSnapToGrid === true) {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { BoardMiddleware, CoreEventMap, Element, ViewScaleInfo, ElementPosition } from '@idraw/types';
|
|
2
|
-
|
|
3
|
-
export declare const middlewareEventTextChange = "@middleware/text-change";
|
|
2
|
+
import { coreEventKeys } from '../../config';
|
|
4
3
|
type TextEditEvent = {
|
|
5
4
|
element: Element<'text'>;
|
|
6
5
|
position: ElementPosition;
|
|
@@ -16,6 +15,6 @@ type TextChangeEvent = {
|
|
|
16
15
|
};
|
|
17
16
|
position: ElementPosition;
|
|
18
17
|
};
|
|
19
|
-
type ExtendEventMap = Record<typeof
|
|
18
|
+
type ExtendEventMap = Record<typeof coreEventKeys.TEXT_EDIT, TextEditEvent> & Record<typeof coreEventKeys.TEXT_CHANGE, TextChangeEvent>;
|
|
20
19
|
export declare const MiddlewareTextEditor: BoardMiddleware<ExtendEventMap, CoreEventMap & ExtendEventMap>;
|
|
21
20
|
export {};
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { limitAngle, getDefaultElementDetailConfig, enhanceFontFamliy } from '@idraw/util';
|
|
2
|
-
|
|
3
|
-
export const middlewareEventTextChange = '@middleware/text-change';
|
|
2
|
+
import { coreEventKeys } from '../../config';
|
|
4
3
|
const defaultElementDetail = getDefaultElementDetailConfig();
|
|
5
4
|
export const MiddlewareTextEditor = (opts) => {
|
|
6
5
|
const { eventHub, boardContent, viewer, sharer } = opts;
|
|
@@ -12,6 +11,8 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
12
11
|
const mask = document.createElement('div');
|
|
13
12
|
let activeElem = null;
|
|
14
13
|
let activePosition = [];
|
|
14
|
+
const id = `idraw-middleware-text-editor-${Math.random().toString(26).substring(2)}`;
|
|
15
|
+
mask.setAttribute('id', id);
|
|
15
16
|
canvasWrapper.appendChild(textarea);
|
|
16
17
|
canvasWrapper.style.position = 'absolute';
|
|
17
18
|
mask.appendChild(canvasWrapper);
|
|
@@ -163,7 +164,7 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
163
164
|
textarea.addEventListener('input', () => {
|
|
164
165
|
if (activeElem && activePosition) {
|
|
165
166
|
activeElem.detail.text = textarea.innerText || '';
|
|
166
|
-
eventHub.trigger(
|
|
167
|
+
eventHub.trigger(coreEventKeys.TEXT_CHANGE, {
|
|
167
168
|
element: {
|
|
168
169
|
uuid: activeElem.uuid,
|
|
169
170
|
detail: {
|
|
@@ -177,7 +178,7 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
177
178
|
});
|
|
178
179
|
textarea.addEventListener('blur', () => {
|
|
179
180
|
if (activeElem && activePosition) {
|
|
180
|
-
eventHub.trigger(
|
|
181
|
+
eventHub.trigger(coreEventKeys.TEXT_CHANGE, {
|
|
181
182
|
element: {
|
|
182
183
|
uuid: activeElem.uuid,
|
|
183
184
|
detail: {
|
|
@@ -213,10 +214,10 @@ export const MiddlewareTextEditor = (opts) => {
|
|
|
213
214
|
return {
|
|
214
215
|
name: '@middleware/text-editor',
|
|
215
216
|
use() {
|
|
216
|
-
eventHub.on(
|
|
217
|
+
eventHub.on(coreEventKeys.TEXT_EDIT, textEditCallback);
|
|
217
218
|
},
|
|
218
219
|
disuse() {
|
|
219
|
-
eventHub.off(
|
|
220
|
+
eventHub.off(coreEventKeys.TEXT_EDIT, textEditCallback);
|
|
220
221
|
}
|
|
221
222
|
};
|
|
222
223
|
};
|