@idraw/core 0.4.0-beta.32 → 0.4.0-beta.34
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/types.d.ts +2 -2
- 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/draw-wrapper.d.ts +3 -3
- package/dist/esm/middleware/selector/draw-wrapper.js +1 -1
- package/dist/esm/middleware/selector/index.d.ts +1 -2
- package/dist/esm/middleware/selector/index.js +105 -54
- package/dist/esm/middleware/selector/util.d.ts +2 -2
- package/dist/esm/middleware/selector/util.js +4 -4
- 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 +450 -316
- 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 } from '@idraw/util';
|
|
2
|
-
import { drawHoverVertexesWrapper,
|
|
1
|
+
import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueVertexesQueueInGroup, calcElementSizeController, calcElementCenterFromVertexes, rotatePointInGroup, getGroupQueueFromList, findElementsFromList, findElementsFromListByPositions, getElementPositionFromList, deepResizeGroupElement, getElementSize } from '@idraw/util';
|
|
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;
|
|
@@ -16,6 +14,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
16
14
|
const { viewer, sharer, boardContent, calculator, eventHub } = opts;
|
|
17
15
|
const { overlayContext } = boardContent;
|
|
18
16
|
let prevPoint = null;
|
|
17
|
+
let moveOriginalStartPoint = null;
|
|
18
|
+
let moveOriginalStartElementSize = null;
|
|
19
19
|
let inBusyMode = null;
|
|
20
20
|
sharer.setSharedStorage(keyActionType, null);
|
|
21
21
|
sharer.setSharedStorage(keyEnableSnapToGrid, true);
|
|
@@ -70,7 +70,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
70
70
|
sharer.setSharedStorage(keySelectedElementPosition, []);
|
|
71
71
|
}
|
|
72
72
|
if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
|
|
73
|
-
eventHub.trigger(
|
|
73
|
+
eventHub.trigger(coreEventKeys.SELECT, { uuids: list.map((elem) => elem.uuid), positions: [] });
|
|
74
74
|
}
|
|
75
75
|
};
|
|
76
76
|
const pointTargetBaseOptions = () => {
|
|
@@ -103,7 +103,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
103
103
|
sharer.setSharedStorage(keyIsMoving, null);
|
|
104
104
|
};
|
|
105
105
|
clear();
|
|
106
|
-
const selectCallback = ({ uuids, positions }) => {
|
|
106
|
+
const selectCallback = ({ uuids = [], positions }) => {
|
|
107
107
|
let elements = [];
|
|
108
108
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
109
109
|
const data = sharer.getActiveStorage('data');
|
|
@@ -142,16 +142,16 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
142
142
|
return {
|
|
143
143
|
name: '@middleware/selector',
|
|
144
144
|
use() {
|
|
145
|
-
eventHub.on(
|
|
146
|
-
eventHub.on(
|
|
147
|
-
eventHub.on(
|
|
148
|
-
eventHub.on(
|
|
145
|
+
eventHub.on(coreEventKeys.SELECT, selectCallback);
|
|
146
|
+
eventHub.on(coreEventKeys.CLEAR_SELECT, selectClearCallback);
|
|
147
|
+
eventHub.on(coreEventKeys.SELECT_IN_GROUP, selectInGroupCallback);
|
|
148
|
+
eventHub.on(coreEventKeys.SNAP_TO_GRID, setSnapToSnapCallback);
|
|
149
149
|
},
|
|
150
150
|
disuse() {
|
|
151
|
-
eventHub.off(
|
|
152
|
-
eventHub.off(
|
|
153
|
-
eventHub.off(
|
|
154
|
-
eventHub.off(
|
|
151
|
+
eventHub.off(coreEventKeys.SELECT, selectCallback);
|
|
152
|
+
eventHub.off(coreEventKeys.CLEAR_SELECT, selectClearCallback);
|
|
153
|
+
eventHub.off(coreEventKeys.SELECT_IN_GROUP, selectInGroupCallback);
|
|
154
|
+
eventHub.off(coreEventKeys.SNAP_TO_GRID, setSnapToSnapCallback);
|
|
155
155
|
},
|
|
156
156
|
hover: (e) => {
|
|
157
157
|
var _a, _b, _c, _d, _e;
|
|
@@ -165,7 +165,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
165
165
|
}
|
|
166
166
|
const cursor = target.type;
|
|
167
167
|
if (inBusyMode === null) {
|
|
168
|
-
eventHub.trigger(
|
|
168
|
+
eventHub.trigger(coreEventKeys.CURSOR, {
|
|
169
169
|
type: cursor,
|
|
170
170
|
groupQueue: target.groupQueue,
|
|
171
171
|
element: target.elements[0]
|
|
@@ -249,8 +249,9 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
249
249
|
}
|
|
250
250
|
},
|
|
251
251
|
pointStart: (e) => {
|
|
252
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
252
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
253
253
|
prevPoint = e.point;
|
|
254
|
+
moveOriginalStartPoint = e.point;
|
|
254
255
|
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
255
256
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
256
257
|
if (isPointInViewActiveGroup(e.point, {
|
|
@@ -260,17 +261,19 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
260
261
|
groupQueue
|
|
261
262
|
})) {
|
|
262
263
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
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;
|
|
265
|
+
updateHoverElement(null);
|
|
266
|
+
if (((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
|
|
267
|
+
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
265
268
|
}
|
|
266
|
-
|
|
267
|
-
|
|
269
|
+
if (isLockedElement === true) {
|
|
270
|
+
clear();
|
|
268
271
|
}
|
|
269
|
-
if (target.type === 'over-element' && ((
|
|
272
|
+
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) {
|
|
270
273
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
271
274
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
272
275
|
}
|
|
273
|
-
else if ((
|
|
276
|
+
else if ((_f = target.type) === null || _f === void 0 ? void 0 : _f.startsWith('resize-')) {
|
|
274
277
|
sharer.setSharedStorage(keyResizeType, target.type);
|
|
275
278
|
sharer.setSharedStorage(keyActionType, 'resize');
|
|
276
279
|
}
|
|
@@ -290,20 +293,25 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
290
293
|
calculator
|
|
291
294
|
});
|
|
292
295
|
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
293
|
-
|
|
294
|
-
|
|
296
|
+
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;
|
|
297
|
+
updateHoverElement(null);
|
|
298
|
+
if (((_k = target === null || target === void 0 ? void 0 : target.elements) === null || _k === void 0 ? void 0 : _k.length) === 1) {
|
|
299
|
+
moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
|
|
295
300
|
}
|
|
296
|
-
|
|
297
|
-
|
|
301
|
+
if (isLockedElement === true) {
|
|
302
|
+
clear();
|
|
303
|
+
sharer.setSharedStorage(keyActionType, 'area');
|
|
304
|
+
sharer.setSharedStorage(keyAreaStart, e.point);
|
|
305
|
+
updateSelectedElementList([], { triggerEvent: true });
|
|
298
306
|
}
|
|
299
|
-
if (target.type === 'list-area') {
|
|
307
|
+
else if (target.type === 'list-area') {
|
|
300
308
|
sharer.setSharedStorage(keyActionType, 'drag-list');
|
|
301
309
|
}
|
|
302
|
-
else if (target.type === 'over-element' && ((
|
|
310
|
+
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) {
|
|
303
311
|
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
304
312
|
sharer.setSharedStorage(keyActionType, 'drag');
|
|
305
313
|
}
|
|
306
|
-
else if ((
|
|
314
|
+
else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
|
|
307
315
|
sharer.setSharedStorage(keyResizeType, target.type);
|
|
308
316
|
sharer.setSharedStorage(keyActionType, 'resize');
|
|
309
317
|
}
|
|
@@ -324,6 +332,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
324
332
|
const viewScaleInfo = sharer.getActiveViewScaleInfo();
|
|
325
333
|
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
326
334
|
const start = prevPoint;
|
|
335
|
+
const originalStart = moveOriginalStartPoint;
|
|
327
336
|
const end = e.point;
|
|
328
337
|
const resizeType = sharer.getSharedStorage(keyResizeType);
|
|
329
338
|
const actionType = sharer.getSharedStorage(keyActionType);
|
|
@@ -331,8 +340,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
331
340
|
const enableSnapToGrid = sharer.getSharedStorage(keyEnableSnapToGrid);
|
|
332
341
|
if (actionType === 'drag') {
|
|
333
342
|
inBusyMode = 'drag';
|
|
334
|
-
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 &&
|
|
335
|
-
const { moveX, moveY } = calcMoveInGroup(
|
|
343
|
+
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) {
|
|
344
|
+
const { moveX, moveY } = calcMoveInGroup(originalStart, end, groupQueue);
|
|
336
345
|
let totalMoveX = calculator.toGridNum(moveX / scale);
|
|
337
346
|
let totalMoveY = calculator.toGridNum(moveY / scale);
|
|
338
347
|
if (enableSnapToGrid === true) {
|
|
@@ -357,8 +366,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
357
366
|
console.error(err);
|
|
358
367
|
}
|
|
359
368
|
}
|
|
360
|
-
elems[0].x = calculator.toGridNum(
|
|
361
|
-
elems[0].y = calculator.toGridNum(
|
|
369
|
+
elems[0].x = calculator.toGridNum(moveOriginalStartElementSize.x + totalMoveX);
|
|
370
|
+
elems[0].y = calculator.toGridNum(moveOriginalStartElementSize.y + totalMoveY);
|
|
362
371
|
updateSelectedElementList([elems[0]]);
|
|
363
372
|
calculator.modifyViewVisibleInfoMap(data, {
|
|
364
373
|
modifyOptions: {
|
|
@@ -376,12 +385,12 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
376
385
|
}
|
|
377
386
|
else if (actionType === 'drag-list') {
|
|
378
387
|
inBusyMode = 'drag-list';
|
|
379
|
-
if (data && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
|
|
388
|
+
if (data && originalStart && start && end && (elems === null || elems === void 0 ? void 0 : elems.length) > 1) {
|
|
380
389
|
const moveX = (end.x - start.x) / scale;
|
|
381
390
|
const moveY = (end.y - start.y) / scale;
|
|
382
391
|
elems.forEach((elem) => {
|
|
383
392
|
var _a;
|
|
384
|
-
if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.
|
|
393
|
+
if (elem && ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) !== true) {
|
|
385
394
|
elem.x = calculator.toGridNum(elem.x + moveX);
|
|
386
395
|
elem.y = calculator.toGridNum(elem.y + moveY);
|
|
387
396
|
calculator.modifyViewVisibleInfoMap(data, {
|
|
@@ -402,7 +411,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
402
411
|
viewer.drawFrame();
|
|
403
412
|
}
|
|
404
413
|
else if (actionType === 'resize') {
|
|
405
|
-
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 &&
|
|
414
|
+
if (data && (elems === null || elems === void 0 ? void 0 : elems.length) === 1 && originalStart && moveOriginalStartElementSize && (resizeType === null || resizeType === void 0 ? void 0 : resizeType.startsWith('resize-'))) {
|
|
406
415
|
inBusyMode = 'resize';
|
|
407
416
|
const pointGroupQueue = [];
|
|
408
417
|
groupQueue.forEach((group) => {
|
|
@@ -415,10 +424,10 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
415
424
|
angle: 0 - angle
|
|
416
425
|
});
|
|
417
426
|
});
|
|
418
|
-
let resizeStart =
|
|
427
|
+
let resizeStart = originalStart;
|
|
419
428
|
let resizeEnd = end;
|
|
420
429
|
if (groupQueue.length > 0) {
|
|
421
|
-
resizeStart = rotatePointInGroup(
|
|
430
|
+
resizeStart = rotatePointInGroup(originalStart, pointGroupQueue);
|
|
422
431
|
resizeEnd = rotatePointInGroup(end, pointGroupQueue);
|
|
423
432
|
}
|
|
424
433
|
if (resizeType === 'resize-rotate') {
|
|
@@ -430,11 +439,11 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
430
439
|
controller.bottomRight.center
|
|
431
440
|
];
|
|
432
441
|
const viewCenter = calcElementCenterFromVertexes(viewVertexes);
|
|
433
|
-
const resizedElemSize = rotateElement(
|
|
442
|
+
const resizedElemSize = rotateElement(moveOriginalStartElementSize, {
|
|
434
443
|
center: viewCenter,
|
|
435
444
|
viewScaleInfo,
|
|
436
445
|
viewSizeInfo,
|
|
437
|
-
start,
|
|
446
|
+
start: originalStart,
|
|
438
447
|
end,
|
|
439
448
|
resizeType,
|
|
440
449
|
sharer
|
|
@@ -442,8 +451,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
442
451
|
elems[0].angle = calculator.toGridNum(resizedElemSize.angle || 0);
|
|
443
452
|
}
|
|
444
453
|
else {
|
|
445
|
-
const resizedElemSize = resizeElement(
|
|
446
|
-
const calcOpts = { ignore: !!
|
|
454
|
+
const resizedElemSize = resizeElement(moveOriginalStartElementSize, { scale, start: resizeStart, end: resizeEnd, resizeType, sharer });
|
|
455
|
+
const calcOpts = { ignore: !!moveOriginalStartElementSize.angle };
|
|
447
456
|
elems[0].x = calculator.toGridNum(resizedElemSize.x, calcOpts);
|
|
448
457
|
elems[0].y = calculator.toGridNum(resizedElemSize.y, calcOpts);
|
|
449
458
|
if (elems[0].type === 'group' && ((_c = elems[0].operations) === null || _c === void 0 ? void 0 : _c.deepResize) === true) {
|
|
@@ -490,6 +499,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
490
499
|
const viewSizeInfo = sharer.getActiveViewSizeInfo();
|
|
491
500
|
let needDrawFrame = false;
|
|
492
501
|
prevPoint = null;
|
|
502
|
+
moveOriginalStartPoint = null;
|
|
503
|
+
moveOriginalStartElementSize = null;
|
|
493
504
|
if (actionType === 'resize' && resizeType) {
|
|
494
505
|
sharer.setSharedStorage(keyResizeType, null);
|
|
495
506
|
needDrawFrame = true;
|
|
@@ -551,7 +562,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
551
562
|
if (type === 'resize') {
|
|
552
563
|
type = 'resizeElement';
|
|
553
564
|
}
|
|
554
|
-
eventHub.trigger(
|
|
565
|
+
eventHub.trigger(coreEventKeys.CHANGE, { data, type, selectedElements, hoverElement });
|
|
555
566
|
}
|
|
556
567
|
viewer.drawFrame();
|
|
557
568
|
};
|
|
@@ -559,6 +570,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
559
570
|
},
|
|
560
571
|
pointLeave() {
|
|
561
572
|
prevPoint = null;
|
|
573
|
+
moveOriginalStartPoint = null;
|
|
574
|
+
moveOriginalStartElementSize = null;
|
|
562
575
|
clear();
|
|
563
576
|
viewer.drawFrame();
|
|
564
577
|
},
|
|
@@ -570,7 +583,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
570
583
|
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
571
584
|
sharer.setSharedStorage(keySelectedElementController, null);
|
|
572
585
|
sharer.setSharedStorage(keySelectedElementList, []);
|
|
573
|
-
if (target.elements.length === 1 && ((_b = (_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.
|
|
586
|
+
if (target.elements.length === 1 && ((_b = (_a = target.elements[0]) === null || _a === void 0 ? void 0 : _a.operations) === null || _b === void 0 ? void 0 : _b.locked) === true) {
|
|
574
587
|
return;
|
|
575
588
|
}
|
|
576
589
|
if (target.elements.length === 1 && ((_c = target.elements[0]) === null || _c === void 0 ? void 0 : _c.type) === 'group') {
|
|
@@ -582,7 +595,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
582
595
|
}
|
|
583
596
|
}
|
|
584
597
|
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)) {
|
|
585
|
-
eventHub.trigger(
|
|
598
|
+
eventHub.trigger(coreEventKeys.TEXT_EDIT, {
|
|
586
599
|
element: target.elements[0],
|
|
587
600
|
groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
|
|
588
601
|
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) || []),
|
|
@@ -591,6 +604,44 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
591
604
|
}
|
|
592
605
|
sharer.setSharedStorage(keyActionType, null);
|
|
593
606
|
},
|
|
607
|
+
contextMenu: (e) => {
|
|
608
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
609
|
+
const groupQueue = sharer.getSharedStorage(keyGroupQueue);
|
|
610
|
+
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
611
|
+
if (isPointInViewActiveGroup(e.point, {
|
|
612
|
+
ctx: overlayContext,
|
|
613
|
+
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
614
|
+
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
615
|
+
groupQueue
|
|
616
|
+
})) {
|
|
617
|
+
const target = getPointTarget(e.point, pointTargetBaseOptions());
|
|
618
|
+
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) {
|
|
619
|
+
clear();
|
|
620
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
621
|
+
viewer.drawFrame();
|
|
622
|
+
}
|
|
623
|
+
else if (!((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length)) {
|
|
624
|
+
clear();
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
const listAreaSize = calcSelectedElementsArea(getActiveElements(), {
|
|
630
|
+
viewScaleInfo: sharer.getActiveViewScaleInfo(),
|
|
631
|
+
viewSizeInfo: sharer.getActiveViewSizeInfo(),
|
|
632
|
+
calculator
|
|
633
|
+
});
|
|
634
|
+
const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
|
|
635
|
+
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) {
|
|
636
|
+
clear();
|
|
637
|
+
updateSelectedElementList([target.elements[0]], { triggerEvent: true });
|
|
638
|
+
viewer.drawFrame();
|
|
639
|
+
return;
|
|
640
|
+
}
|
|
641
|
+
else if (!((_h = target === null || target === void 0 ? void 0 : target.elements) === null || _h === void 0 ? void 0 : _h.length)) {
|
|
642
|
+
clear();
|
|
643
|
+
}
|
|
644
|
+
},
|
|
594
645
|
beforeDrawFrame({ snapshot }) {
|
|
595
646
|
var _a;
|
|
596
647
|
const { activeStore, sharedStore } = snapshot;
|
|
@@ -617,12 +668,12 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
617
668
|
viewScaleInfo
|
|
618
669
|
})
|
|
619
670
|
: null;
|
|
620
|
-
const
|
|
671
|
+
const isHoverLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
|
|
621
672
|
if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
|
|
622
673
|
drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
|
|
623
674
|
if (hoverElement && actionType !== 'drag') {
|
|
624
|
-
if (
|
|
625
|
-
|
|
675
|
+
if (isHoverLocked) {
|
|
676
|
+
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
626
677
|
groupQueue,
|
|
627
678
|
controllerSize: 10,
|
|
628
679
|
viewScaleInfo
|
|
@@ -632,7 +683,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
632
683
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
633
684
|
}
|
|
634
685
|
}
|
|
635
|
-
if (
|
|
686
|
+
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
636
687
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
637
688
|
if (actionType === 'drag') {
|
|
638
689
|
if (enableSnapToGrid === true) {
|
|
@@ -659,8 +710,8 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
659
710
|
}
|
|
660
711
|
else {
|
|
661
712
|
if (hoverElement && actionType !== 'drag') {
|
|
662
|
-
if (
|
|
663
|
-
|
|
713
|
+
if (isHoverLocked) {
|
|
714
|
+
drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
|
|
664
715
|
groupQueue,
|
|
665
716
|
controllerSize: 10,
|
|
666
717
|
viewScaleInfo
|
|
@@ -670,7 +721,7 @@ export const MiddlewareSelector = (opts, config) => {
|
|
|
670
721
|
drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
|
|
671
722
|
}
|
|
672
723
|
}
|
|
673
|
-
if (
|
|
724
|
+
if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
|
|
674
725
|
drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
|
|
675
726
|
if (actionType === 'drag') {
|
|
676
727
|
if (enableSnapToGrid === true) {
|
|
@@ -23,14 +23,14 @@ 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, opts: {
|
|
27
27
|
start: PointSize;
|
|
28
28
|
end: PointSize;
|
|
29
29
|
resizeType: ResizeType;
|
|
30
30
|
scale: number;
|
|
31
31
|
sharer: StoreSharer;
|
|
32
32
|
}): ElementSize;
|
|
33
|
-
export declare function rotateElement(elem:
|
|
33
|
+
export declare function rotateElement(elem: ElementSize, opts: {
|
|
34
34
|
center: PointSize;
|
|
35
35
|
start: PointSize;
|
|
36
36
|
end: PointSize;
|
|
@@ -703,10 +703,10 @@ export function getSelectedListArea(data, opts) {
|
|
|
703
703
|
const endY = Math.max(start.y, end.y);
|
|
704
704
|
for (let idx = 0; idx < data.elements.length; idx++) {
|
|
705
705
|
const elem = data.elements[idx];
|
|
706
|
-
if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.
|
|
706
|
+
if (((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.locked) === true) {
|
|
707
707
|
continue;
|
|
708
708
|
}
|
|
709
|
-
const elemSize = calcViewElementSize(elem, { viewScaleInfo
|
|
709
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
710
710
|
const center = calcElementCenter(elemSize);
|
|
711
711
|
if (center.x >= startX && center.x <= endX && center.y >= startY && center.y <= endY) {
|
|
712
712
|
indexes.push(idx);
|
|
@@ -733,14 +733,14 @@ export function calcSelectedElementsArea(elements, opts) {
|
|
|
733
733
|
return null;
|
|
734
734
|
}
|
|
735
735
|
const area = { x: 0, y: 0, w: 0, h: 0 };
|
|
736
|
-
const { viewScaleInfo
|
|
736
|
+
const { viewScaleInfo } = opts;
|
|
737
737
|
let prevElemSize = null;
|
|
738
738
|
for (let i = 0; i < elements.length; i++) {
|
|
739
739
|
const elem = elements[i];
|
|
740
740
|
if ((_a = elem === null || elem === void 0 ? void 0 : elem.operations) === null || _a === void 0 ? void 0 : _a.invisible) {
|
|
741
741
|
continue;
|
|
742
742
|
}
|
|
743
|
-
const elemSize = calcViewElementSize(elem, { viewScaleInfo
|
|
743
|
+
const elemSize = calcViewElementSize(elem, { viewScaleInfo });
|
|
744
744
|
if (elemSize.angle && (elemSize.angle > 0 || elemSize.angle < 0)) {
|
|
745
745
|
const ves = rotateElementVertexes(elemSize);
|
|
746
746
|
if (ves.length === 4) {
|
|
@@ -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
|
};
|