@idraw/core 0.4.0-beta.33 → 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.
@@ -2,13 +2,11 @@ import { is, calcElementsViewInfo, calcElementVertexesInGroup, calcElementQueueV
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 { middlewareEventSelect, middlewareEventSelectClear, middlewareEventSelectInGroup, middlewareEventSnapToGrid, keyActionType, keyResizeType, keyAreaStart, keyAreaEnd, keyGroupQueue, keyGroupQueueVertexesList, keyHoverElement, keyHoverElementVertexes, keySelectedElementList, keySelectedElementListVertexes, keySelectedElementController, keySelectedElementPosition, keyIsMoving, keyEnableSelectInGroup, keyEnableSnapToGrid, controllerSize, defaultStyle } from './config';
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 { middlewareEventTextEdit } from '../text-editor';
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;
@@ -72,7 +70,7 @@ export const MiddlewareSelector = (opts, config) => {
72
70
  sharer.setSharedStorage(keySelectedElementPosition, []);
73
71
  }
74
72
  if ((opts === null || opts === void 0 ? void 0 : opts.triggerEvent) === true) {
75
- eventHub.trigger(middlewareEventSelect, { uuids: list.map((elem) => elem.uuid) });
73
+ eventHub.trigger(coreEventKeys.SELECT, { uuids: list.map((elem) => elem.uuid), positions: [] });
76
74
  }
77
75
  };
78
76
  const pointTargetBaseOptions = () => {
@@ -105,7 +103,7 @@ export const MiddlewareSelector = (opts, config) => {
105
103
  sharer.setSharedStorage(keyIsMoving, null);
106
104
  };
107
105
  clear();
108
- const selectCallback = ({ uuids, positions }) => {
106
+ const selectCallback = ({ uuids = [], positions }) => {
109
107
  let elements = [];
110
108
  const actionType = sharer.getSharedStorage(keyActionType);
111
109
  const data = sharer.getActiveStorage('data');
@@ -144,16 +142,16 @@ export const MiddlewareSelector = (opts, config) => {
144
142
  return {
145
143
  name: '@middleware/selector',
146
144
  use() {
147
- eventHub.on(middlewareEventSelect, selectCallback);
148
- eventHub.on(middlewareEventSelectClear, selectClearCallback);
149
- eventHub.on(middlewareEventSelectInGroup, selectInGroupCallback);
150
- eventHub.on(middlewareEventSnapToGrid, setSnapToSnapCallback);
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);
151
149
  },
152
150
  disuse() {
153
- eventHub.off(middlewareEventSelect, selectCallback);
154
- eventHub.off(middlewareEventSelectClear, selectClearCallback);
155
- eventHub.off(middlewareEventSelectInGroup, selectInGroupCallback);
156
- eventHub.off(middlewareEventSnapToGrid, setSnapToSnapCallback);
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);
157
155
  },
158
156
  hover: (e) => {
159
157
  var _a, _b, _c, _d, _e;
@@ -167,7 +165,7 @@ export const MiddlewareSelector = (opts, config) => {
167
165
  }
168
166
  const cursor = target.type;
169
167
  if (inBusyMode === null) {
170
- eventHub.trigger('cursor', {
168
+ eventHub.trigger(coreEventKeys.CURSOR, {
171
169
  type: cursor,
172
170
  groupQueue: target.groupQueue,
173
171
  element: target.elements[0]
@@ -263,16 +261,15 @@ export const MiddlewareSelector = (opts, config) => {
263
261
  groupQueue
264
262
  })) {
265
263
  const target = getPointTarget(e.point, pointTargetBaseOptions());
266
- 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) {
267
- return;
268
- }
269
- else {
270
- updateHoverElement(null);
271
- }
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);
272
266
  if (((_d = target === null || target === void 0 ? void 0 : target.elements) === null || _d === void 0 ? void 0 : _d.length) === 1) {
273
267
  moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
274
268
  }
275
- if (target.type === 'over-element' && ((_e = target === null || target === void 0 ? void 0 : target.elements) === null || _e === void 0 ? void 0 : _e.length) === 1) {
269
+ if (isLockedElement === true) {
270
+ clear();
271
+ }
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) {
276
273
  updateSelectedElementList([target.elements[0]], { triggerEvent: true });
277
274
  sharer.setSharedStorage(keyActionType, 'drag');
278
275
  }
@@ -297,30 +294,26 @@ export const MiddlewareSelector = (opts, config) => {
297
294
  });
298
295
  const target = getPointTarget(e.point, Object.assign(Object.assign({}, pointTargetBaseOptions()), { areaSize: listAreaSize, groupQueue: [] }));
299
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;
300
- if (!isLockedElement) {
301
- updateHoverElement(null);
302
- }
297
+ updateHoverElement(null);
303
298
  if (((_k = target === null || target === void 0 ? void 0 : target.elements) === null || _k === void 0 ? void 0 : _k.length) === 1) {
304
299
  moveOriginalStartElementSize = getElementSize(target === null || target === void 0 ? void 0 : target.elements[0]);
305
300
  }
306
- if (!isLockedElement) {
307
- if (target.type === 'list-area') {
308
- sharer.setSharedStorage(keyActionType, 'drag-list');
309
- }
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) {
311
- updateSelectedElementList([target.elements[0]], { triggerEvent: true });
312
- sharer.setSharedStorage(keyActionType, 'drag');
313
- }
314
- else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
315
- sharer.setSharedStorage(keyResizeType, target.type);
316
- sharer.setSharedStorage(keyActionType, 'resize');
317
- }
318
- else {
319
- clear();
320
- sharer.setSharedStorage(keyActionType, 'area');
321
- sharer.setSharedStorage(keyAreaStart, e.point);
322
- updateSelectedElementList([], { triggerEvent: true });
323
- }
301
+ if (isLockedElement === true) {
302
+ clear();
303
+ sharer.setSharedStorage(keyActionType, 'area');
304
+ sharer.setSharedStorage(keyAreaStart, e.point);
305
+ updateSelectedElementList([], { triggerEvent: true });
306
+ }
307
+ else if (target.type === 'list-area') {
308
+ sharer.setSharedStorage(keyActionType, 'drag-list');
309
+ }
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) {
311
+ updateSelectedElementList([target.elements[0]], { triggerEvent: true });
312
+ sharer.setSharedStorage(keyActionType, 'drag');
313
+ }
314
+ else if ((_m = target.type) === null || _m === void 0 ? void 0 : _m.startsWith('resize-')) {
315
+ sharer.setSharedStorage(keyResizeType, target.type);
316
+ sharer.setSharedStorage(keyActionType, 'resize');
324
317
  }
325
318
  else {
326
319
  clear();
@@ -569,7 +562,7 @@ export const MiddlewareSelector = (opts, config) => {
569
562
  if (type === 'resize') {
570
563
  type = 'resizeElement';
571
564
  }
572
- eventHub.trigger(eventChange, { data, type, selectedElements, hoverElement });
565
+ eventHub.trigger(coreEventKeys.CHANGE, { data, type, selectedElements, hoverElement });
573
566
  }
574
567
  viewer.drawFrame();
575
568
  };
@@ -602,7 +595,7 @@ export const MiddlewareSelector = (opts, config) => {
602
595
  }
603
596
  }
604
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)) {
605
- eventHub.trigger(middlewareEventTextEdit, {
598
+ eventHub.trigger(coreEventKeys.TEXT_EDIT, {
606
599
  element: target.elements[0],
607
600
  groupQueue: sharer.getSharedStorage(keyGroupQueue) || [],
608
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) || []),
@@ -611,6 +604,44 @@ export const MiddlewareSelector = (opts, config) => {
611
604
  }
612
605
  sharer.setSharedStorage(keyActionType, null);
613
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
+ },
614
645
  beforeDrawFrame({ snapshot }) {
615
646
  var _a;
616
647
  const { activeStore, sharedStore } = snapshot;
@@ -637,11 +668,11 @@ export const MiddlewareSelector = (opts, config) => {
637
668
  viewScaleInfo
638
669
  })
639
670
  : null;
640
- const isLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
671
+ const isHoverLocked = !!((_a = hoverElement === null || hoverElement === void 0 ? void 0 : hoverElement.operations) === null || _a === void 0 ? void 0 : _a.locked);
641
672
  if ((groupQueue === null || groupQueue === void 0 ? void 0 : groupQueue.length) > 0) {
642
673
  drawGroupQueueVertexesWrappers(overlayContext, groupQueueVertexesList, drawBaseOpts);
643
674
  if (hoverElement && actionType !== 'drag') {
644
- if (isLocked) {
675
+ if (isHoverLocked) {
645
676
  drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
646
677
  groupQueue,
647
678
  controllerSize: 10,
@@ -652,7 +683,7 @@ export const MiddlewareSelector = (opts, config) => {
652
683
  drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
653
684
  }
654
685
  }
655
- if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
686
+ if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
656
687
  drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
657
688
  if (actionType === 'drag') {
658
689
  if (enableSnapToGrid === true) {
@@ -679,7 +710,7 @@ export const MiddlewareSelector = (opts, config) => {
679
710
  }
680
711
  else {
681
712
  if (hoverElement && actionType !== 'drag') {
682
- if (isLocked) {
713
+ if (isHoverLocked) {
683
714
  drawLockedVertexesWrapper(overlayContext, hoverElementVertexes, Object.assign(Object.assign({}, drawBaseOpts), { controller: calcElementSizeController(hoverElement, {
684
715
  groupQueue,
685
716
  controllerSize: 10,
@@ -690,7 +721,7 @@ export const MiddlewareSelector = (opts, config) => {
690
721
  drawHoverVertexesWrapper(overlayContext, hoverElementVertexes, drawBaseOpts);
691
722
  }
692
723
  }
693
- if (!isLocked && elem && ['select', 'drag', 'resize'].includes(actionType)) {
724
+ if (elem && ['select', 'drag', 'resize'].includes(actionType)) {
694
725
  drawSelectedElementControllersVertexes(overlayContext, selectedElementController, Object.assign(Object.assign({}, drawBaseOpts), { element: elem, calculator, hideControllers: !!isMoving && actionType === 'drag', style }));
695
726
  if (actionType === 'drag') {
696
727
  if (enableSnapToGrid === true) {
@@ -1,6 +1,5 @@
1
1
  import type { BoardMiddleware, CoreEventMap, Element, ViewScaleInfo, ElementPosition } from '@idraw/types';
2
- export declare const middlewareEventTextEdit = "@middleware/text-edit";
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 middlewareEventTextEdit, TextEditEvent> & Record<typeof middlewareEventTextChange, TextChangeEvent>;
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
- export const middlewareEventTextEdit = '@middleware/text-edit';
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(middlewareEventTextChange, {
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(middlewareEventTextChange, {
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(middlewareEventTextEdit, textEditCallback);
217
+ eventHub.on(coreEventKeys.TEXT_EDIT, textEditCallback);
217
218
  },
218
219
  disuse() {
219
- eventHub.off(middlewareEventTextEdit, textEditCallback);
220
+ eventHub.off(coreEventKeys.TEXT_EDIT, textEditCallback);
220
221
  }
221
222
  };
222
223
  };