@plait/common 0.30.0 → 0.32.0

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.
@@ -1,4 +1,4 @@
1
- import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, PlaitElement, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitContextService, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
1
+ import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, PlaitElement, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitContextService, downScale, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
2
2
  import { isKeyHotkey } from 'is-hotkey';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Directive, Input } from '@angular/core';
@@ -8,6 +8,7 @@ const PRIMARY_COLOR = '#6698FF';
8
8
  const RESIZE_HANDLE_DIAMETER = 8;
9
9
  const WithTextPluginKey = 'plait-text-plugin-key';
10
10
  const DEFAULT_ROUTE_MARGIN = 30;
11
+ const TRANSPARENT = 'transparent';
11
12
 
12
13
  var MediaKeys;
13
14
  (function (MediaKeys) {
@@ -29,7 +30,7 @@ var ResizeHandle;
29
30
  ResizeHandle["ne"] = "ne";
30
31
  ResizeHandle["n"] = "n";
31
32
  ResizeHandle["nw"] = "nw";
32
- ResizeHandle["e"] = "w";
33
+ ResizeHandle["e"] = "e";
33
34
  ResizeHandle["se"] = "se";
34
35
  ResizeHandle["s"] = "s";
35
36
  ResizeHandle["sw"] = "sw";
@@ -230,6 +231,14 @@ const getResizeHandleByIndex = (index) => {
230
231
  return ResizeHandle.se;
231
232
  case 3:
232
233
  return ResizeHandle.sw;
234
+ case 4:
235
+ return ResizeHandle.n;
236
+ case 5:
237
+ return ResizeHandle.e;
238
+ case 6:
239
+ return ResizeHandle.s;
240
+ case 7:
241
+ return ResizeHandle.w;
233
242
  default:
234
243
  return null;
235
244
  }
@@ -237,24 +246,28 @@ const getResizeHandleByIndex = (index) => {
237
246
  const getResizeCursorClassByIndex = (index) => {
238
247
  switch (index) {
239
248
  case 0:
240
- return ResizeCursorClass.nwse;
241
- case 1:
242
- return ResizeCursorClass.nesw;
243
249
  case 2:
244
250
  return ResizeCursorClass.nwse;
251
+ case 1:
245
252
  case 3:
246
253
  return ResizeCursorClass.nesw;
254
+ case 4:
255
+ case 6:
256
+ return ResizeCursorClass.ns;
257
+ case 5:
258
+ case 7:
259
+ return ResizeCursorClass.ew;
247
260
  default:
248
261
  return null;
249
262
  }
250
263
  };
251
264
  const getRectangleResizeHandleRefs = (rectangle, diameter) => {
252
- const centers = RectangleClient.getCornerPoints(rectangle);
253
- return centers.map((center, index) => {
265
+ const corners = RectangleClient.getCornerPoints(rectangle);
266
+ const refs = corners.map((corner, index) => {
254
267
  return {
255
268
  rectangle: {
256
- x: center[0] - diameter / 2,
257
- y: center[1] - diameter / 2,
269
+ x: corner[0] - diameter / 2,
270
+ y: corner[1] - diameter / 2,
258
271
  width: diameter,
259
272
  height: diameter
260
273
  },
@@ -262,6 +275,26 @@ const getRectangleResizeHandleRefs = (rectangle, diameter) => {
262
275
  cursorClass: getResizeCursorClassByIndex(index)
263
276
  };
264
277
  });
278
+ const rectangles = getResizeSideRectangles(corners, diameter / 2);
279
+ refs.push(...rectangles.map((rectangle, index) => {
280
+ return {
281
+ rectangle,
282
+ handle: getResizeHandleByIndex(index + 4),
283
+ cursorClass: getResizeCursorClassByIndex(index + 4)
284
+ };
285
+ }));
286
+ return refs;
287
+ };
288
+ const getResizeSideRectangles = (cornerPoints, offset) => {
289
+ const result = [];
290
+ for (let i = 0; i < cornerPoints.length; i++) {
291
+ let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);
292
+ const arr = new Array(2).fill(0);
293
+ arr[(i + 1) % 2] = offset / 2;
294
+ rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);
295
+ result.push(rectangle);
296
+ }
297
+ return result;
265
298
  };
266
299
  const IS_RESIZING = new WeakMap();
267
300
  const isResizing = (board) => {
@@ -309,7 +342,6 @@ const withResize = (board, options) => {
309
342
  handle: resizeDetectResult.handle
310
343
  };
311
344
  preventTouchMove(board, event, true);
312
- return;
313
345
  }
314
346
  pointerDown(event);
315
347
  };
@@ -347,6 +379,9 @@ const withResize = (board, options) => {
347
379
  const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
348
380
  const resizeDetectResult = options.detect(point);
349
381
  if (resizeDetectResult) {
382
+ if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {
383
+ PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);
384
+ }
350
385
  hoveDetectResult = resizeDetectResult;
351
386
  if (hoveDetectResult.cursorClass) {
352
387
  PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);
@@ -466,6 +501,12 @@ function getDirectionFactor(direction) {
466
501
  }
467
502
  function getFactorByPoints(source, target) {
468
503
  const distance = distanceBetweenPointAndPoint(...source, ...target);
504
+ if (Point.isEquals(source, target)) {
505
+ return {
506
+ x: 1,
507
+ y: 1
508
+ };
509
+ }
469
510
  return {
470
511
  x: (target[0] - source[0]) / distance,
471
512
  y: (target[1] - source[1]) / distance
@@ -626,6 +667,13 @@ const removeDuplicatePoints = (points) => {
626
667
  });
627
668
  return newArray;
628
669
  };
670
+ const getExtendPoint = (source, target, extendDistance) => {
671
+ const distance = distanceBetweenPointAndPoint(...source, ...target);
672
+ const isEqual = Point.isEquals(source, target);
673
+ const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
674
+ const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
675
+ return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
676
+ };
629
677
 
630
678
  function isVirtualKey(e) {
631
679
  const isMod = e.ctrlKey || e.metaKey;
@@ -921,8 +969,8 @@ const adjust = (route, options) => {
921
969
  if (pre &&
922
970
  current &&
923
971
  next &&
924
- !((Math.floor(current[0]) === Math.floor(pre[0]) && Math.floor(current[0]) === Math.floor(next[0])) ||
925
- (Math.floor(current[1]) === Math.floor(pre[1]) && Math.floor(current[1]) === Math.floor(next[1])))) {
972
+ !((downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||
973
+ (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1])))) {
926
974
  cornerCount++;
927
975
  }
928
976
  }
@@ -1218,5 +1266,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1218
1266
  * Generated bundle index. Do not edit.
1219
1267
  */
1220
1268
 
1221
- export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, selectImage, setCreationMode, withResize };
1269
+ export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, selectImage, setCreationMode, withResize };
1222
1270
  //# sourceMappingURL=plait-common.mjs.map