@plait/draw 0.75.0 → 0.76.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,5 +1,5 @@
1
- import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR, ThemeColorMode, PlaitElement, RectangleClient, getSelectedElements, idCreator, catmullRomFitting, PlaitBoard, createG, drawLinearPath, setStrokeLinecap, setPathStrokeLinecap, getNearestPointBetweenPointAndArc, distanceBetweenPointAndPoint, distanceBetweenPointAndSegments, HIT_DISTANCE_BUFFER, isPointInPolygon, isLineHitRectangle, rotatePointsByAngle, createDebugGenerator, rotateAntiPointsByElement, getEllipseArcCenter, Transforms, clearSelectedElement, addSelectedElement, BoardTransforms, PlaitPointerType, depthFirstRecursion, getIsRecursionFunc, SNAPPING_STROKE_WIDTH, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, drawCircle, Point, arrowPoints, createPath, rotate, findElements, createMask, createRect, getElementById, rotatePointsByElement, PlaitNode, hasValidAngle, toViewBoxPoint, toHostPoint, Direction, rotatePoints, getRectangleByElements, getSelectionAngle, rotatedDataPoints, isAxisChangedByAngle, isSelectionMoving, drawRectangle, getRectangleByAngle, getSnapRectangles, getTripleAxis, getMinPointDelta, SNAP_TOLERANCE, drawPointSnapLines, drawSolidLines, getNearestPointBetweenPointAndSegments, isPointInEllipse, getNearestPointBetweenPointAndEllipse, getEllipseTangentSlope, getVectorFromPointAndSlope, drawRoundRectangle, isPointInRoundRectangle, getCrossingPointsBetweenEllipseAndSegment, drawLine, getNearestPointBetweenPointAndDiscreteSegments, getNearestPointBetweenPointAndSegment, Path, RgbaToHEX, SELECTION_RECTANGLE_CLASS_NAME, getHitElementByPoint, WritableClipboardOperationType, WritableClipboardType, addOrCreateClipboardContext, setAngleForG, CursorClass, temporaryDisableSelection, PRESS_AND_MOVE_BUFFER, isMainPointer, throttleRAF, getAngleBetweenPoints, normalizeAngle, degreesToRadians, rotateElements, MERGING, ROTATE_HANDLE_CLASS_NAME, isSelectedElement, isDragging } from '@plait/core';
2
- import { DEFAULT_FILL, Alignment, WithTextPluginKey, TextManage, getMemorizedLatest, memorizeLatest, getPointOnPolyline, buildText, Generator, getStrokeLineDash, StrokeStyle, getCrossingPointsBetweenPointAndSegment, isPointOnSegment, getFirstTextEditor, sortElementsByArea, isFilled, getTextEditorsByElement, removeDuplicatePoints, generateElbowLineRoute, simplifyOrthogonalPoints, getExtendPoint, getUnitVectorByPointAndPoint, getPointByVectorComponent, RESIZE_HANDLE_DIAMETER, measureElement, DEFAULT_FONT_FAMILY, getFirstTextManage, ActiveGenerator, isSourceAndTargetIntersect, getPoints, DEFAULT_ROUTE_MARGIN, normalizeShapePoints, resetPointsAfterResize, getDirectionByVector, getRectangleResizeHandleRefs, getRotatedResizeCursorClassByAngle, ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE, isCornerHandle, getIndexByResizeHandle, withResize, drawHandle, getSymmetricHandleIndex, getResizeHandlePointByIndex, getDirectionFactorByDirectionComponent, buildClipboardData as buildClipboardData$1, insertClipboardData as insertClipboardData$1, getDirectionByPointOfRectangle, getDirectionFactor, rotateVector, getOppositeDirection, rotateVectorAnti90, getSourceAndTargetOuterRectangle, getNextPoint, PRIMARY_COLOR, CommonElementFlavour, hasResizeHandle, drawPrimaryHandle, drawFillPrimaryHandle, isVirtualKey, isDelete, isSpaceHotkey, isDndMode, isDrawingMode, getElementsText, acceptImageTypes, getElementOfFocusedImage, buildImage, isResizingByCondition, getRatioByPoint, getTextManages, ImageGenerator, ResizeHandle, addRotating, removeRotating, drawRotateHandle } from '@plait/common';
1
+ import { ACTIVE_STROKE_WIDTH, DEFAULT_COLOR, ThemeColorMode, PlaitElement, RectangleClient, getSelectedElements, idCreator, catmullRomFitting, PlaitBoard, createG, drawLinearPath, setStrokeLinecap, setPathStrokeLinecap, getNearestPointBetweenPointAndArc, distanceBetweenPointAndPoint, distanceBetweenPointAndSegments, HIT_DISTANCE_BUFFER, isPointInPolygon, isLineHitRectangle, rotatePointsByAngle, createDebugGenerator, rotateAntiPointsByElement, getEllipseArcCenter, Transforms, clearSelectedElement, addSelectedElement, BoardTransforms, PlaitPointerType, depthFirstRecursion, getIsRecursionFunc, SNAPPING_STROKE_WIDTH, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, drawCircle, Point, arrowPoints, createPath, rotate, findElements, createMask, createRect, toActiveRectangleFromViewBoxRectangle, getElementById, rotatePointsByElement, PlaitNode, hasValidAngle, toViewBoxPoint, toHostPoint, Direction, rotatePoints, getRectangleByElements, getSelectionAngle, rotatedDataPoints, isAxisChangedByAngle, isSelectionMoving, drawRectangle, getRectangleByAngle, getSnapRectangles, getTripleAxis, getMinPointDelta, SNAP_TOLERANCE, drawPointSnapLines, drawSolidLines, getNearestPointBetweenPointAndSegments, isPointInEllipse, getNearestPointBetweenPointAndEllipse, getEllipseTangentSlope, getVectorFromPointAndSlope, drawRoundRectangle, isPointInRoundRectangle, getCrossingPointsBetweenEllipseAndSegment, drawLine, getNearestPointBetweenPointAndDiscreteSegments, getNearestPointBetweenPointAndSegment, Path, RgbaToHEX, SELECTION_RECTANGLE_CLASS_NAME, toActivePointFromViewBoxPoint, getHitElementByPoint, WritableClipboardOperationType, WritableClipboardType, addOrCreateClipboardContext, setAngleForG, CursorClass, toActivePoint, temporaryDisableSelection, toScreenPointFromActivePoint, PRESS_AND_MOVE_BUFFER, isMainPointer, throttleRAF, getAngleBetweenPoints, normalizeAngle, degreesToRadians, rotateElements, MERGING, ROTATE_HANDLE_CLASS_NAME, isSelectedElement, isDragging } from '@plait/core';
2
+ import { DEFAULT_FILL, Alignment, WithTextPluginKey, TextManage, getMemorizedLatest, memorizeLatest, getPointOnPolyline, buildText, Generator, getStrokeLineDash, StrokeStyle, getCrossingPointsBetweenPointAndSegment, isPointOnSegment, getFirstTextEditor, sortElementsByArea, isFilled, getTextEditorsByElement, removeDuplicatePoints, generateElbowLineRoute, simplifyOrthogonalPoints, getExtendPoint, getUnitVectorByPointAndPoint, getPointByVectorComponent, RESIZE_HANDLE_DIAMETER, measureElement, DEFAULT_FONT_FAMILY, getFirstTextManage, isSourceAndTargetIntersect, getPoints, DEFAULT_ROUTE_MARGIN, normalizeShapePoints, resetPointsAfterResize, getDirectionByVector, getRectangleResizeHandleRefs, getRotatedResizeCursorClassByAngle, ROTATE_HANDLE_DISTANCE_TO_ELEMENT, ROTATE_HANDLE_SIZE, isCornerHandle, getIndexByResizeHandle, withResize, drawHandle, getSymmetricHandleIndex, getResizeHandlePointByIndex, getDirectionFactorByDirectionComponent, buildClipboardData as buildClipboardData$1, insertClipboardData as insertClipboardData$1, getDirectionByPointOfRectangle, getDirectionFactor, rotateVector, getOppositeDirection, rotateVectorAnti90, getSourceAndTargetOuterRectangle, getNextPoint, PRIMARY_COLOR, CommonElementFlavour, createActiveGenerator, hasResizeHandle, ActiveGenerator, drawPrimaryHandle, drawFillPrimaryHandle, isVirtualKey, isDelete, isSpaceHotkey, isDndMode, isDrawingMode, getElementsText, acceptImageTypes, getElementOfFocusedImage, buildImage, isResizingByCondition, getRatioByPoint, getTextManages, ImageGenerator, ResizeHandle, addRotating, removeRotating, drawRotateHandle } from '@plait/common';
3
3
  import { pointsOnBezierCurves } from 'points-on-curve';
4
4
  import { TEXT_DEFAULT_HEIGHT, DEFAULT_FONT_SIZE, AlignEditor } from '@plait/text-plugins';
5
5
  import { Editor, Node } from 'slate';
@@ -1012,7 +1012,7 @@ const vectorLineCreating = (board, lineShape, points, movingPoint, lineShapeG) =
1012
1012
  const otherPoint = points[points.length - 1];
1013
1013
  temporaryLineElement.points[temporaryLineElement.points.length - 1] = alignPoints(otherPoint, movingPoint);
1014
1014
  lineGenerator.processDrawing(temporaryLineElement, lineShapeG);
1015
- PlaitBoard.getElementActiveHost(board).append(lineShapeG);
1015
+ PlaitBoard.getElementTopHost(board).append(lineShapeG);
1016
1016
  return temporaryLineElement;
1017
1017
  };
1018
1018
  const drawVectorLine = (board, element) => {
@@ -1344,7 +1344,7 @@ const debugGenerator$4 = createDebugGenerator(debugKey$4);
1344
1344
  const shapes = [BasicShapes.cloud];
1345
1345
  const isHitDrawElement = (board, element, point, isStrict = true) => {
1346
1346
  const rectangle = board.getRectangle(element);
1347
- point = rotateAntiPointsByElement(point, element) || point;
1347
+ point = rotateAntiPointsByElement(board, point, element) || point;
1348
1348
  if (PlaitDrawElement.isGeometry(element) && rectangle) {
1349
1349
  if (debugGenerator$4.isDebug() && shapes.includes(element.shape)) {
1350
1350
  debugGenerator$4.clear();
@@ -1405,7 +1405,7 @@ const isInsideOfShape = (board, element, point, hitDistanceBuffer) => {
1405
1405
  };
1406
1406
  const isHitElementInside = (board, element, point) => {
1407
1407
  const rectangle = board.getRectangle(element);
1408
- point = rotateAntiPointsByElement(point, element) || point;
1408
+ point = rotateAntiPointsByElement(board, point, element) || point;
1409
1409
  if (PlaitDrawElement.isGeometry(element) && !PlaitDrawElement.isGeometryByTable(element)) {
1410
1410
  const engine = getEngine(getElementShape(element));
1411
1411
  const isHitInside = engine.isInsidePoint(rectangle, point);
@@ -1473,12 +1473,12 @@ const isDrawElementIncludeText = (element) => {
1473
1473
  return editors.length > 0;
1474
1474
  }
1475
1475
  if (PlaitDrawElement.isElementByTable(element)) {
1476
- return element.cells.some(cell => isCellIncludeText(cell));
1476
+ return element.cells.some((cell) => isCellIncludeText(cell));
1477
1477
  }
1478
1478
  return true;
1479
1479
  };
1480
1480
  const isDrawElementsIncludeText = (elements) => {
1481
- return elements.some(item => {
1481
+ return elements.some((item) => {
1482
1482
  return isDrawElementIncludeText(item);
1483
1483
  });
1484
1484
  };
@@ -1511,7 +1511,7 @@ const getSnappingShape = (board, point) => {
1511
1511
  return null;
1512
1512
  };
1513
1513
  const getSnappingRef = (board, hitElement, point) => {
1514
- const rotatedPoint = rotateAntiPointsByElement(point, hitElement) || point;
1514
+ const rotatedPoint = rotateAntiPointsByElement(board, point, hitElement) || point;
1515
1515
  const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);
1516
1516
  const edgePoint = getNearestPoint(hitElement, rotatedPoint);
1517
1517
  const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);
@@ -1520,14 +1520,14 @@ const getSnappingRef = (board, hitElement, point) => {
1520
1520
  const getHitShape = (board, point, offset = LINE_HIT_GEOMETRY_BUFFER) => {
1521
1521
  let hitShape = null;
1522
1522
  traverseDrawShapes(board, (element) => {
1523
- if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(point, element) || point, offset * 2)) {
1523
+ if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(board, point, element) || point, offset * 2)) {
1524
1524
  hitShape = element;
1525
1525
  }
1526
1526
  });
1527
1527
  return hitShape;
1528
1528
  };
1529
1529
  const traverseDrawShapes = (board, callback) => {
1530
- depthFirstRecursion(board, node => {
1530
+ depthFirstRecursion(board, (node) => {
1531
1531
  if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {
1532
1532
  callback(node);
1533
1533
  }
@@ -1561,7 +1561,7 @@ const drawBoundReaction = (board, element, roughOptions = { hasMask: true, hasCo
1561
1561
  }
1562
1562
  if (roughOptions.hasConnector) {
1563
1563
  const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);
1564
- connectorPoints.forEach(point => {
1564
+ connectorPoints.forEach((point) => {
1565
1565
  const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 8, {
1566
1566
  stroke: SELECTION_BORDER_COLOR,
1567
1567
  strokeWidth: ACTIVE_STROKE_WIDTH,
@@ -1583,14 +1583,14 @@ const getTextKey = (element, text) => {
1583
1583
  };
1584
1584
  const getGeometryAlign = (board, element) => {
1585
1585
  if (isMultipleTextGeometry(element)) {
1586
- const drawShapeText = element.texts.find(item => item.id.includes(GeometryCommonTextKeys.content));
1586
+ const drawShapeText = element.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content));
1587
1587
  return drawShapeText?.text.align || Alignment.center;
1588
1588
  }
1589
1589
  if (isSingleTextGeometry(element)) {
1590
1590
  return element.text?.align || Alignment.center;
1591
1591
  }
1592
1592
  if (PlaitDrawElement.isElementByTable(element)) {
1593
- const firstTextCell = element.cells.find(item => item.text);
1593
+ const firstTextCell = element.cells.find((item) => item.text);
1594
1594
  return firstTextCell?.text?.align || Alignment.center;
1595
1595
  }
1596
1596
  return Alignment.center;
@@ -2155,7 +2155,7 @@ const getHitConnectorPoint = (point, hitElement) => {
2155
2155
  const rectangle = RectangleClient.getRectangleByPoints(hitElement.points);
2156
2156
  const shape = getElementShape(hitElement);
2157
2157
  const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);
2158
- return connectorPoints.find(connectorPoint => {
2158
+ return connectorPoints.find((connectorPoint) => {
2159
2159
  return distanceBetweenPointAndPoint(...connectorPoint, ...point) <= LINE_SNAPPING_CONNECTOR_BUFFER;
2160
2160
  });
2161
2161
  };
@@ -2212,7 +2212,7 @@ const handleArrowLineCreating = (board, lineShape, sourcePoint, movingPoint, sou
2212
2212
  const otherPoint = linePoints[0];
2213
2213
  temporaryLineElement.points[1] = alignPoints(otherPoint, movingPoint);
2214
2214
  lineGenerator.processDrawing(temporaryLineElement, lineShapeG);
2215
- PlaitBoard.getElementActiveHost(board).append(lineShapeG);
2215
+ PlaitBoard.getElementTopHost(board).append(lineShapeG);
2216
2216
  return temporaryLineElement;
2217
2217
  };
2218
2218
  function drawArrowLineMask(board, element, id) {
@@ -2449,11 +2449,12 @@ const createDefaultFlowchart = (point) => {
2449
2449
  ], { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id }, { marker: ArrowLineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id }, [], lineOptions);
2450
2450
  return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];
2451
2451
  };
2452
- const getAutoCompletePoints = (element) => {
2452
+ const getAutoCompletePoints = (board, element, isToActive = false) => {
2453
2453
  const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;
2454
- let rectangle = RectangleClient.getRectangleByPoints(element.points);
2455
- rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);
2456
- return RectangleClient.getEdgeCenterPoints(rectangle);
2454
+ const rectangle = RectangleClient.getRectangleByPoints(element.points);
2455
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
2456
+ const targetRectangle = isToActive ? activeRectangle : rectangle;
2457
+ return RectangleClient.getEdgeCenterPoints(RectangleClient.inflate(targetRectangle, AutoCompleteMargin));
2457
2458
  };
2458
2459
  const getHitIndexOfAutoCompletePoint = (movingPoint, points) => {
2459
2460
  return points.findIndex((point) => {
@@ -2531,12 +2532,6 @@ const editText = (board, element, text) => {
2531
2532
  textManage.edit(() => { });
2532
2533
  }
2533
2534
  };
2534
- const rerenderGeometryActive = (board, element) => {
2535
- const elementRef = PlaitElement.getElementRef(element);
2536
- const activeGenerator = elementRef.getGenerator(ActiveGenerator.key);
2537
- const selected = getSelectedElements(board).includes(element);
2538
- activeGenerator.processDrawing(element, PlaitBoard.getElementActiveHost(board), { selected });
2539
- };
2540
2535
  const isGeometryIncludeText = (element) => {
2541
2536
  return isSingleTextGeometry(element) || isMultipleTextGeometry(element);
2542
2537
  };
@@ -3392,7 +3387,7 @@ function withDrawResize(board) {
3392
3387
  const resizeSnapRef = getSnapResizingRef(board, resizeRef.element, resizeSnapRefOptions);
3393
3388
  resizeActivePoints = resizeSnapRef.activePoints;
3394
3389
  snapG = resizeSnapRef.snapG;
3395
- PlaitBoard.getElementActiveHost(board).append(snapG);
3390
+ PlaitBoard.getElementTopHost(board).append(snapG);
3396
3391
  if (bulkRotationRef) {
3397
3392
  const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle);
3398
3393
  const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map((p) => {
@@ -3491,23 +3486,25 @@ function withDrawResize(board) {
3491
3486
  const boundingRectangle = needCustomActiveRectangle
3492
3487
  ? RectangleClient.getRectangleByPoints(resizeActivePoints)
3493
3488
  : getRectangleByElements(board, elements, false);
3494
- let corners = RectangleClient.getCornerPoints(boundingRectangle);
3489
+ const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);
3490
+ let corners = RectangleClient.getCornerPoints(boundingActiveRectangle);
3495
3491
  const angle = getSelectionAngle(elements);
3496
3492
  if (angle) {
3497
- const centerPoint = RectangleClient.getCenterPoint(boundingRectangle);
3493
+ const centerPoint = RectangleClient.getCenterPoint(boundingActiveRectangle);
3498
3494
  corners = rotatePoints(corners, centerPoint, angle);
3499
3495
  }
3500
3496
  corners.forEach((corner) => {
3501
3497
  const g = drawHandle(board, corner);
3502
3498
  handleG && handleG.append(g);
3503
3499
  });
3504
- PlaitBoard.getElementActiveHost(board).append(handleG);
3500
+ PlaitBoard.getActiveHost(board).append(handleG);
3505
3501
  }
3506
3502
  };
3507
3503
  board.drawSelectionRectangle = () => {
3508
3504
  if (needCustomActiveRectangle) {
3509
3505
  const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints);
3510
- return drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {
3506
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
3507
+ return drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {
3511
3508
  stroke: SELECTION_BORDER_COLOR,
3512
3509
  strokeWidth: ACTIVE_STROKE_WIDTH
3513
3510
  });
@@ -7094,7 +7091,7 @@ class GeometryShapeGenerator extends Generator {
7094
7091
  class ArrowLineAutoCompleteGenerator extends Generator {
7095
7092
  static { this.key = 'line-auto-complete-generator'; }
7096
7093
  constructor(board) {
7097
- super(board);
7094
+ super(board, { active: true });
7098
7095
  this.board = board;
7099
7096
  this.hoverElement = null;
7100
7097
  }
@@ -7109,7 +7106,7 @@ class ArrowLineAutoCompleteGenerator extends Generator {
7109
7106
  }
7110
7107
  draw(element, data) {
7111
7108
  this.autoCompleteG = createG();
7112
- const middlePoints = getAutoCompletePoints(element);
7109
+ const middlePoints = getAutoCompletePoints(this.board, element, true);
7113
7110
  middlePoints.forEach((point, index) => {
7114
7111
  const circle = drawCircle(PlaitBoard.getRoughSVG(this.board), point, LINE_AUTO_COMPLETE_DIAMETER, {
7115
7112
  stroke: 'none',
@@ -7152,7 +7149,7 @@ class GeometryComponent extends CommonElementFlavour {
7152
7149
  super();
7153
7150
  }
7154
7151
  initializeGenerator() {
7155
- this.activeGenerator = new ActiveGenerator(this.board, {
7152
+ this.activeGenerator = createActiveGenerator(this.board, {
7156
7153
  getStrokeWidth: () => {
7157
7154
  const selectedElements = getSelectedElements(this.board);
7158
7155
  if (selectedElements.length === 1 && !isSelectionMoving(this.board)) {
@@ -7185,15 +7182,23 @@ class GeometryComponent extends CommonElementFlavour {
7185
7182
  }
7186
7183
  this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);
7187
7184
  this.getRef().addGenerator(ActiveGenerator.key, this.activeGenerator);
7185
+ this.getRef().updateActiveSection = () => {
7186
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7187
+ selected: this.selected
7188
+ });
7189
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7190
+ selected: this.selected
7191
+ });
7192
+ };
7188
7193
  }
7189
7194
  initialize() {
7190
7195
  super.initialize();
7191
7196
  this.initializeGenerator();
7192
7197
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7193
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7198
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7194
7199
  selected: this.selected
7195
7200
  });
7196
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7201
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementTopHost(this.board), {
7197
7202
  selected: this.selected
7198
7203
  });
7199
7204
  this.textGenerator && this.textGenerator.draw(this.getElementG());
@@ -7201,8 +7206,8 @@ class GeometryComponent extends CommonElementFlavour {
7201
7206
  onContextChanged(value, previous) {
7202
7207
  if (value.element !== previous.element || value.hasThemeChanged) {
7203
7208
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7204
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });
7205
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7209
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });
7210
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7206
7211
  selected: this.selected
7207
7212
  });
7208
7213
  this.textGenerator && this.updateText(previous.element, value.element);
@@ -7210,9 +7215,11 @@ class GeometryComponent extends CommonElementFlavour {
7210
7215
  else {
7211
7216
  const hasSameSelected = value.selected === previous.selected;
7212
7217
  const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;
7213
- if (!hasSameSelected || !hasSameHandleState) {
7214
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });
7215
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7218
+ if (!hasSameSelected || !hasSameHandleState || value.selected) {
7219
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7220
+ selected: this.selected
7221
+ });
7222
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7216
7223
  selected: this.selected
7217
7224
  });
7218
7225
  }
@@ -7321,8 +7328,9 @@ function getHitPointIndex(points, movingPoint) {
7321
7328
  }
7322
7329
 
7323
7330
  class LineActiveGenerator extends Generator {
7324
- constructor() {
7325
- super(...arguments);
7331
+ constructor(board, options = { active: true }) {
7332
+ super(board, options);
7333
+ this.board = board;
7326
7334
  this.onlySelectedCurrentLine = false;
7327
7335
  }
7328
7336
  canDraw(element, data) {
@@ -7346,16 +7354,18 @@ class LineActiveGenerator extends Generator {
7346
7354
  updatePoints = points.slice(0, 1).concat(points.slice(-1));
7347
7355
  elbowNextRenderPoints = getNextRenderPoints(this.board, element, data.linePoints);
7348
7356
  }
7349
- updatePoints.forEach(point => {
7357
+ const activePoints = updatePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));
7358
+ activePoints.forEach((point) => {
7350
7359
  const updateHandle = drawPrimaryHandle(this.board, point);
7351
7360
  activeG.appendChild(updateHandle);
7352
7361
  });
7353
7362
  const middlePoints = getMiddlePoints(this.board, element);
7363
+ const activeMiddlePoints = middlePoints.map((point) => toActivePointFromViewBoxPoint(this.board, point));
7354
7364
  if (!PlaitBoard.hasBeenTextEditing(this.board)) {
7355
- for (let i = 0; i < middlePoints.length; i++) {
7356
- const point = middlePoints[i];
7365
+ for (let i = 0; i < activeMiddlePoints.length; i++) {
7366
+ const point = activeMiddlePoints[i];
7357
7367
  if (element.shape === ArrowLineShape.elbow && elbowNextRenderPoints.length) {
7358
- const handleIndex = getHitPointIndex(middlePoints, point);
7368
+ const handleIndex = getHitPointIndex(activeMiddlePoints, point);
7359
7369
  const isUpdateHandleIndex = isUpdatedHandleIndex(this.board, element, [...points], elbowNextRenderPoints, handleIndex);
7360
7370
  if (isUpdateHandleIndex) {
7361
7371
  const updateHandle = drawPrimaryHandle(this.board, point);
@@ -7369,8 +7379,9 @@ class LineActiveGenerator extends Generator {
7369
7379
  }
7370
7380
  }
7371
7381
  else {
7372
- const activeRectangle = this.board.getRectangle(element);
7373
- if (activeRectangle) {
7382
+ const rectangle = this.board.getRectangle(element);
7383
+ if (rectangle) {
7384
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(this.board, rectangle);
7374
7385
  let opacity = '0.5';
7375
7386
  if (activeRectangle.height === 0 || activeRectangle.width === 0) {
7376
7387
  opacity = '0.8';
@@ -7408,13 +7419,20 @@ class ArrowLineComponent extends CommonElementFlavour {
7408
7419
  this.initializeGenerator();
7409
7420
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7410
7421
  const linePoints = getArrowLinePoints(this.board, this.element);
7411
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7422
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7412
7423
  selected: this.selected,
7413
7424
  linePoints
7414
7425
  });
7415
7426
  super.initialize();
7416
7427
  this.boundedElements = this.getBoundedElements();
7417
7428
  this.drawText();
7429
+ this.getRef().updateActiveSection = () => {
7430
+ const linePoints = getArrowLinePoints(this.board, this.element);
7431
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7432
+ selected: this.selected,
7433
+ linePoints
7434
+ });
7435
+ };
7418
7436
  debugGenerator.isDebug() && debugGenerator.drawCircles(this.board, this.element.points.slice(1, -1), 4, true);
7419
7437
  }
7420
7438
  getBoundedElements() {
@@ -7440,7 +7458,7 @@ class ArrowLineComponent extends CommonElementFlavour {
7440
7458
  const linePoints = getArrowLinePoints(this.board, this.element);
7441
7459
  if (value.element !== previous.element || value.hasThemeChanged) {
7442
7460
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7443
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7461
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7444
7462
  selected: this.selected,
7445
7463
  linePoints
7446
7464
  });
@@ -7449,8 +7467,8 @@ class ArrowLineComponent extends CommonElementFlavour {
7449
7467
  }
7450
7468
  else {
7451
7469
  const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();
7452
- if (needUpdate) {
7453
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7470
+ if (needUpdate || value.selected) {
7471
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7454
7472
  selected: this.selected,
7455
7473
  linePoints
7456
7474
  });
@@ -7458,7 +7476,7 @@ class ArrowLineComponent extends CommonElementFlavour {
7458
7476
  }
7459
7477
  if (isBoundedElementsChanged) {
7460
7478
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7461
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7479
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7462
7480
  selected: this.selected,
7463
7481
  linePoints
7464
7482
  });
@@ -7530,7 +7548,7 @@ class ArrowLineComponent extends CommonElementFlavour {
7530
7548
  }
7531
7549
  updateTextRectangle() {
7532
7550
  const textManages = this.getRef().getTextManages();
7533
- textManages.forEach(manage => {
7551
+ textManages.forEach((manage) => {
7534
7552
  manage.updateRectangle();
7535
7553
  });
7536
7554
  }
@@ -7548,12 +7566,19 @@ class VectorLineComponent extends CommonElementFlavour {
7548
7566
  initializeGenerator() {
7549
7567
  this.shapeGenerator = new VectorLineShapeGenerator(this.board);
7550
7568
  this.activeGenerator = new LineActiveGenerator(this.board);
7569
+ this.getRef().updateActiveSection = () => {
7570
+ const linePoints = getVectorLinePoints(this.board, this.element);
7571
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7572
+ selected: this.selected,
7573
+ linePoints
7574
+ });
7575
+ };
7551
7576
  }
7552
7577
  initialize() {
7553
7578
  this.initializeGenerator();
7554
7579
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7555
7580
  const linePoints = getVectorLinePoints(this.board, this.element);
7556
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7581
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7557
7582
  selected: this.selected,
7558
7583
  linePoints
7559
7584
  });
@@ -7563,15 +7588,15 @@ class VectorLineComponent extends CommonElementFlavour {
7563
7588
  const linePoints = getVectorLinePoints(this.board, this.element);
7564
7589
  if (value.element !== previous.element || value.hasThemeChanged) {
7565
7590
  this.shapeGenerator.processDrawing(this.element, this.getElementG());
7566
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7591
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7567
7592
  selected: this.selected,
7568
7593
  linePoints
7569
7594
  });
7570
7595
  }
7571
7596
  else {
7572
- const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate();
7597
+ const needUpdate = value.selected !== previous.selected || this.activeGenerator.needUpdate() || value.selected;
7573
7598
  if (needUpdate) {
7574
- this.activeGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
7599
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
7575
7600
  selected: this.selected,
7576
7601
  linePoints
7577
7602
  });
@@ -7707,7 +7732,7 @@ const withGeometryCreateByDrag = (board) => {
7707
7732
  const points = getDefaultGeometryPoints(pointer, movingPoint);
7708
7733
  temporaryElement = createDefaultGeometry(board, points, pointer);
7709
7734
  geometryGenerator.processDrawing(temporaryElement, geometryShapeG);
7710
- PlaitBoard.getElementActiveHost(board).append(geometryShapeG);
7735
+ PlaitBoard.getElementTopHost(board).append(geometryShapeG);
7711
7736
  }
7712
7737
  }
7713
7738
  pointerMove(event);
@@ -7783,11 +7808,11 @@ const withGeometryCreateByDrawing = (board) => {
7783
7808
  isCreate: true
7784
7809
  });
7785
7810
  snapG = resizeSnapRef.snapG;
7786
- PlaitBoard.getElementActiveHost(board).append(snapG);
7811
+ PlaitBoard.getElementTopHost(board).append(snapG);
7787
7812
  points = normalizeShapePoints(resizeSnapRef.activePoints, isShift);
7788
7813
  temporaryElement = createDefaultGeometry(board, points, pointer);
7789
7814
  geometryGenerator.processDrawing(temporaryElement, geometryShapeG);
7790
- PlaitBoard.getElementActiveHost(board).append(geometryShapeG);
7815
+ PlaitBoard.getElementTopHost(board).append(geometryShapeG);
7791
7816
  }
7792
7817
  pointerMove(event);
7793
7818
  };
@@ -8112,7 +8137,7 @@ const withArrowLineBoundReaction = (board) => {
8112
8137
  const linePointers = Object.keys(ArrowLineShape);
8113
8138
  const isLinePointer = PlaitBoard.isInPointer(board, linePointers);
8114
8139
  const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8115
- const isLineResizing = isResizingByCondition(board, resizeRef => {
8140
+ const isLineResizing = isResizingByCondition(board, (resizeRef) => {
8116
8141
  const { element, handle } = resizeRef;
8117
8142
  const isSourceOrTarget = handle === LineResizeHandle.target || handle === LineResizeHandle.source;
8118
8143
  return PlaitDrawElement.isArrowLine(element) && isSourceOrTarget;
@@ -8135,12 +8160,12 @@ const withArrowLineBoundReaction = (board) => {
8135
8160
  if (hasValidAngle(hitElement)) {
8136
8161
  setAngleForG(boundShapeG, RectangleClient.getCenterPointByPoints(hitElement.points), hitElement.angle);
8137
8162
  }
8138
- PlaitBoard.getElementActiveHost(board).append(boundShapeG);
8163
+ PlaitBoard.getElementTopHost(board).append(boundShapeG);
8139
8164
  }
8140
8165
  }
8141
8166
  pointerMove(event);
8142
8167
  };
8143
- board.pointerUp = event => {
8168
+ board.pointerUp = (event) => {
8144
8169
  boundShapeG?.remove();
8145
8170
  boundShapeG = null;
8146
8171
  pointerUp(event);
@@ -8214,7 +8239,7 @@ class ImageComponent extends CommonElementFlavour {
8214
8239
  height: element.points[1][1] - element.points[0][1]
8215
8240
  };
8216
8241
  },
8217
- getImageItem: element => {
8242
+ getImageItem: (element) => {
8218
8243
  return {
8219
8244
  url: element.url,
8220
8245
  width: element.points[1][0] - element.points[0][0],
@@ -8224,12 +8249,18 @@ class ImageComponent extends CommonElementFlavour {
8224
8249
  });
8225
8250
  this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);
8226
8251
  this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);
8252
+ this.getRef().updateActiveSection = () => {
8253
+ this.imageGenerator.setFocus(this.element, this.selected);
8254
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8255
+ selected: this.selected
8256
+ });
8257
+ };
8227
8258
  }
8228
8259
  initialize() {
8229
8260
  super.initialize();
8230
8261
  this.initializeGenerator();
8231
8262
  this.imageGenerator.processDrawing(this.element, this.getElementG());
8232
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
8263
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8233
8264
  selected: this.selected
8234
8265
  });
8235
8266
  }
@@ -8237,7 +8268,7 @@ class ImageComponent extends CommonElementFlavour {
8237
8268
  if (value.element !== previous.element) {
8238
8269
  this.imageGenerator.updateImage(this.getElementG(), previous.element, value.element);
8239
8270
  this.imageGenerator.setFocus(this.element, this.selected);
8240
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
8271
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8241
8272
  selected: this.selected
8242
8273
  });
8243
8274
  }
@@ -8245,9 +8276,9 @@ class ImageComponent extends CommonElementFlavour {
8245
8276
  const hasSameSelected = value.selected === previous.selected;
8246
8277
  const hasSameHandleState = this.imageGenerator.activeGenerator &&
8247
8278
  this.imageGenerator.activeGenerator.options.hasResizeHandle() === this.imageGenerator.activeGenerator.hasResizeHandle;
8248
- if (!hasSameSelected || !hasSameHandleState) {
8279
+ if (!hasSameSelected || !hasSameHandleState || value.selected) {
8249
8280
  this.imageGenerator.setFocus(this.element, this.selected);
8250
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
8281
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8251
8282
  selected: this.selected
8252
8283
  });
8253
8284
  }
@@ -8268,10 +8299,10 @@ const withArrowLineAutoCompleteReaction = (board) => {
8268
8299
  PlaitBoard.getBoardContainer(board).classList.remove(CursorClass.crosshair);
8269
8300
  const selectedElements = getSelectedDrawElements(board);
8270
8301
  const targetElement = selectedElements.length === 1 && selectedElements[0];
8271
- const movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8302
+ const activePoint = toActivePoint(board, event.x, event.y);
8272
8303
  if (!PlaitBoard.isReadonly(board) && !isSelectionMoving(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {
8273
- const points = getAutoCompletePoints(targetElement);
8274
- const hitIndex = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(movingPoint, targetElement) || movingPoint, points);
8304
+ const points = getAutoCompletePoints(board, targetElement, true);
8305
+ const hitIndex = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(board, activePoint, targetElement, true) || activePoint, points);
8275
8306
  const hitPoint = points[hitIndex];
8276
8307
  const ref = PlaitElement.getElementRef(targetElement);
8277
8308
  const lineAutoCompleteGenerator = ref.getGenerator(ArrowLineAutoCompleteGenerator.key);
@@ -8283,10 +8314,12 @@ const withArrowLineAutoCompleteReaction = (board) => {
8283
8314
  fill: RgbaToHEX(PRIMARY_COLOR, LINE_AUTO_COMPLETE_HOVERED_OPACITY),
8284
8315
  fillStyle: 'solid'
8285
8316
  });
8286
- PlaitBoard.getElementActiveHost(board).append(reactionG);
8317
+ PlaitBoard.getActiveHost(board).append(reactionG);
8287
8318
  PlaitBoard.getBoardContainer(board).classList.add(CursorClass.crosshair);
8288
8319
  if (hasValidAngle(targetElement)) {
8289
- setAngleForG(reactionG, RectangleClient.getCenterPoint(board.getRectangle(targetElement)), targetElement.angle);
8320
+ const rectangle = board.getRectangle(targetElement);
8321
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
8322
+ setAngleForG(reactionG, RectangleClient.getCenterPoint(activeRectangle), targetElement.angle);
8290
8323
  }
8291
8324
  }
8292
8325
  }
@@ -8305,14 +8338,15 @@ const withArrowLineAutoComplete = (board) => {
8305
8338
  board.pointerDown = (event) => {
8306
8339
  const selectedElements = getSelectedDrawElements(board);
8307
8340
  const targetElement = selectedElements.length === 1 && selectedElements[0];
8308
- const clickPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8341
+ const activePoint = toActivePoint(board, event.x, event.y);
8309
8342
  if (!PlaitBoard.isReadonly(board) && targetElement && PlaitDrawElement.isShapeElement(targetElement)) {
8310
- const points = getAutoCompletePoints(targetElement);
8311
- const index = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(clickPoint, targetElement) || clickPoint, points);
8343
+ const points = getAutoCompletePoints(board, targetElement, true);
8344
+ const index = getHitIndexOfAutoCompletePoint(rotateAntiPointsByElement(board, activePoint, targetElement, true) || activePoint, points);
8312
8345
  const hitPoint = points[index];
8313
8346
  if (hitPoint) {
8314
8347
  temporaryDisableSelection(board);
8315
- autoCompletePoint = hitPoint;
8348
+ const screenPoint = toScreenPointFromActivePoint(board, hitPoint);
8349
+ autoCompletePoint = toViewBoxPoint(board, toHostPoint(board, screenPoint[0], screenPoint[1]));
8316
8350
  sourceElement = targetElement;
8317
8351
  BoardTransforms.updatePointerType(board, ArrowLineShape.elbow);
8318
8352
  }
@@ -8324,7 +8358,7 @@ const withArrowLineAutoComplete = (board) => {
8324
8358
  lineShapeG = createG();
8325
8359
  let movingPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8326
8360
  if (autoCompletePoint && sourceElement) {
8327
- const distance = distanceBetweenPointAndPoint(...(rotateAntiPointsByElement(movingPoint, sourceElement) || movingPoint), ...autoCompletePoint);
8361
+ const distance = distanceBetweenPointAndPoint(...(rotateAntiPointsByElement(board, movingPoint, sourceElement) || movingPoint), ...autoCompletePoint);
8328
8362
  if (distance > PRESS_AND_MOVE_BUFFER) {
8329
8363
  const rectangle = RectangleClient.getRectangleByPoints(sourceElement.points);
8330
8364
  const shape = getElementShape(sourceElement);
@@ -8342,7 +8376,7 @@ const withArrowLineAutoComplete = (board) => {
8342
8376
  }
8343
8377
  pointerMove(event);
8344
8378
  };
8345
- board.globalPointerUp = event => {
8379
+ board.globalPointerUp = (event) => {
8346
8380
  if (temporaryElement) {
8347
8381
  Transforms.insertNode(board, temporaryElement, [board.children.length]);
8348
8382
  clearSelectedElement(board);
@@ -8418,7 +8452,7 @@ const withDrawRotate = (board) => {
8418
8452
  const canRotate = () => {
8419
8453
  const elements = getSelectedElements(board);
8420
8454
  return (elements.length > 0 &&
8421
- elements.every(el => (PlaitDrawElement.isDrawElement(el) && !PlaitDrawElement.isArrowLine(el)) ||
8455
+ elements.every((el) => (PlaitDrawElement.isDrawElement(el) && !PlaitDrawElement.isArrowLine(el)) ||
8422
8456
  PlaitDrawElement.isCustomGeometryElement(board, el)));
8423
8457
  };
8424
8458
  board.pointerDown = (event) => {
@@ -8426,16 +8460,17 @@ const withDrawRotate = (board) => {
8426
8460
  pointerDown(event);
8427
8461
  return;
8428
8462
  }
8429
- const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8463
+ const activePoint = toActivePoint(board, event.x, event.y);
8430
8464
  const elements = getSelectedElements(board);
8431
- const boundingRectangle = getRectangleByElements(board, elements, false);
8432
- const handleRectangle = getRotateHandleRectangle(boundingRectangle);
8465
+ const rectangle = getRectangleByElements(board, elements, false);
8466
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
8467
+ const handleRectangle = getRotateHandleRectangle(activeRectangle);
8433
8468
  const angle = getSelectionAngle(elements);
8434
- const rotatedPoint = angle ? rotatePoints(point, RectangleClient.getCenterPoint(boundingRectangle), -angle) : point;
8469
+ const rotatedPoint = angle ? rotatePoints(activePoint, RectangleClient.getCenterPoint(activeRectangle), -angle) : activePoint;
8435
8470
  if (handleRectangle && RectangleClient.isHit(RectangleClient.getRectangleByPoints([rotatedPoint, rotatedPoint]), handleRectangle)) {
8436
8471
  rotateRef = {
8437
8472
  elements: [...elements],
8438
- startPoint: point
8473
+ startPoint: activePoint
8439
8474
  };
8440
8475
  }
8441
8476
  pointerDown(event);
@@ -8445,9 +8480,10 @@ const withDrawRotate = (board) => {
8445
8480
  event.preventDefault();
8446
8481
  const isShift = !!event.shiftKey;
8447
8482
  addRotating(board, rotateRef);
8448
- const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
8449
- const selectionRectangle = getRectangleByElements(board, rotateRef.elements, false);
8450
- const selectionCenterPoint = RectangleClient.getCenterPoint(selectionRectangle);
8483
+ const endPoint = toActivePoint(board, event.x, event.y);
8484
+ const rectangle = getRectangleByElements(board, rotateRef.elements, false);
8485
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
8486
+ const selectionCenterPoint = RectangleClient.getCenterPoint(activeRectangle);
8451
8487
  if (!getSelectionAngle(rotateRef.elements) && rotateRef.elements.length > 1) {
8452
8488
  needCustomActiveRectangle = true;
8453
8489
  }
@@ -8499,32 +8535,35 @@ const withDrawRotate = (board) => {
8499
8535
  if (canRotate() && !isSelectionMoving(board)) {
8500
8536
  if (needCustomActiveRectangle && rotateRef) {
8501
8537
  const boundingRectangle = getRectangleByElements(board, rotateRef.elements, false);
8502
- rotateHandleG = drawRotateHandle(board, boundingRectangle);
8538
+ const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);
8539
+ rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);
8503
8540
  rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);
8504
8541
  if (rotateRef.angle) {
8505
- setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), rotateRef.angle);
8542
+ setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), rotateRef.angle);
8506
8543
  }
8507
8544
  }
8508
8545
  else {
8509
8546
  const elements = getSelectedElements(board);
8510
8547
  const boundingRectangle = getRectangleByElements(board, elements, false);
8511
- rotateHandleG = drawRotateHandle(board, boundingRectangle);
8548
+ const boundingActiveRectangle = toActiveRectangleFromViewBoxRectangle(board, boundingRectangle);
8549
+ rotateHandleG = drawRotateHandle(board, boundingActiveRectangle);
8512
8550
  rotateHandleG.classList.add(ROTATE_HANDLE_CLASS_NAME);
8513
- setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingRectangle), getSelectionAngle(elements));
8551
+ setAngleForG(rotateHandleG, RectangleClient.getCenterPoint(boundingActiveRectangle), getSelectionAngle(elements));
8514
8552
  }
8515
- PlaitBoard.getElementActiveHost(board).append(rotateHandleG);
8553
+ PlaitBoard.getActiveHost(board).append(rotateHandleG);
8516
8554
  }
8517
8555
  };
8518
8556
  board.drawSelectionRectangle = () => {
8519
8557
  if (needCustomActiveRectangle && rotateRef) {
8520
8558
  const rectangle = getRectangleByElements(board, rotateRef.elements, false);
8521
- const rectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {
8559
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
8560
+ const rectangleG = drawRectangle(board, RectangleClient.inflate(activeRectangle, ACTIVE_STROKE_WIDTH), {
8522
8561
  stroke: SELECTION_BORDER_COLOR,
8523
8562
  strokeWidth: ACTIVE_STROKE_WIDTH
8524
8563
  });
8525
8564
  rectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);
8526
8565
  if (rotateRef.angle) {
8527
- setAngleForG(rectangleG, RectangleClient.getCenterPoint(rectangle), rotateRef.angle);
8566
+ setAngleForG(rectangleG, RectangleClient.getCenterPoint(activeRectangle), rotateRef.angle);
8528
8567
  }
8529
8568
  return rectangleG;
8530
8569
  }
@@ -8538,7 +8577,7 @@ class TableComponent extends CommonElementFlavour {
8538
8577
  super();
8539
8578
  }
8540
8579
  initializeGenerator() {
8541
- this.activeGenerator = new ActiveGenerator(this.board, {
8580
+ this.activeGenerator = createActiveGenerator(this.board, {
8542
8581
  getStrokeWidth: () => {
8543
8582
  return ACTIVE_STROKE_WIDTH;
8544
8583
  },
@@ -8564,6 +8603,14 @@ class TableComponent extends CommonElementFlavour {
8564
8603
  this.initializeTextManage();
8565
8604
  this.lineAutoCompleteGenerator = new ArrowLineAutoCompleteGenerator(this.board);
8566
8605
  this.getRef().addGenerator(ArrowLineAutoCompleteGenerator.key, this.lineAutoCompleteGenerator);
8606
+ this.getRef().updateActiveSection = () => {
8607
+ this.activeGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8608
+ selected: this.selected
8609
+ });
8610
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8611
+ selected: this.selected
8612
+ });
8613
+ };
8567
8614
  }
8568
8615
  initialize() {
8569
8616
  super.initialize();
@@ -8574,13 +8621,13 @@ class TableComponent extends CommonElementFlavour {
8574
8621
  this.tableGenerator.processDrawing(this.element, this.getElementG());
8575
8622
  this.textGenerator.draw(this.getElementG());
8576
8623
  this.rotateVerticalText();
8577
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
8624
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8578
8625
  selected: this.selected
8579
8626
  });
8580
8627
  }
8581
8628
  rotateVerticalText() {
8582
8629
  const table = this.board.buildTable(this.element);
8583
- table.cells.forEach(item => {
8630
+ table.cells.forEach((item) => {
8584
8631
  if (PlaitTableElement.isVerticalText(item)) {
8585
8632
  const textManage = getTextManageByCell(this.board, item);
8586
8633
  if (textManage) {
@@ -8594,8 +8641,8 @@ class TableComponent extends CommonElementFlavour {
8594
8641
  }
8595
8642
  getDrawShapeTexts(cells) {
8596
8643
  return cells
8597
- .filter(item => isCellIncludeText(item))
8598
- .map(item => {
8644
+ .filter((item) => isCellIncludeText(item))
8645
+ .map((item) => {
8599
8646
  return {
8600
8647
  id: item.id,
8601
8648
  text: item.text,
@@ -8643,7 +8690,7 @@ class TableComponent extends CommonElementFlavour {
8643
8690
  setSelectedCells(value.element, previousSelectedCells);
8644
8691
  }
8645
8692
  this.tableGenerator.processDrawing(value.element, this.getElementG());
8646
- this.activeGenerator.processDrawing(value.element, PlaitBoard.getElementActiveHost(this.board), { selected: this.selected });
8693
+ this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), { selected: this.selected });
8647
8694
  const previousTexts = this.getDrawShapeTexts(previous.element.cells);
8648
8695
  const currentTexts = this.getDrawShapeTexts(value.element.cells);
8649
8696
  this.textGenerator.update(value.element, previousTexts, currentTexts, this.getElementG());
@@ -8653,8 +8700,8 @@ class TableComponent extends CommonElementFlavour {
8653
8700
  const hasSameSelected = value.selected === previous.selected;
8654
8701
  const hasSameHandleState = this.activeGenerator.options.hasResizeHandle() === this.activeGenerator.hasResizeHandle;
8655
8702
  const currentSelectedCells = getSelectedCells(value.element);
8656
- if (!hasSameSelected || !hasSameHandleState || currentSelectedCells?.length) {
8657
- this.activeGenerator.processDrawing(value.element, PlaitBoard.getElementActiveHost(this.board), {
8703
+ if (!hasSameSelected || !hasSameHandleState || currentSelectedCells?.length || value.selected) {
8704
+ this.activeGenerator.processDrawing(value.element, PlaitBoard.getActiveHost(this.board), {
8658
8705
  selected: this.selected
8659
8706
  });
8660
8707
  }
@@ -8662,7 +8709,7 @@ class TableComponent extends CommonElementFlavour {
8662
8709
  clearSelectedCells(value.element);
8663
8710
  }
8664
8711
  }
8665
- this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getElementActiveHost(this.board), {
8712
+ this.lineAutoCompleteGenerator.processDrawing(this.element, PlaitBoard.getActiveHost(this.board), {
8666
8713
  selected: this.selected
8667
8714
  });
8668
8715
  }
@@ -8728,7 +8775,7 @@ function withTableResize(board) {
8728
8775
  const resizePoints = [resizeState.startPoint, resizeState.endPoint];
8729
8776
  const { xZoom, yZoom } = getResizeZoom(resizePoints, originPoint, handlePoint, false, false);
8730
8777
  const originPoints = resizeRef.options?.cell.points;
8731
- const targetPoints = originPoints.map(p => {
8778
+ const targetPoints = originPoints.map((p) => {
8732
8779
  return movePointByZoomAndOriginPoint(p, originPoint, xZoom, yZoom);
8733
8780
  });
8734
8781
  const offsetX = targetPoints[1][0] - originPoints[1][0];
@@ -8755,7 +8802,7 @@ function withTableResize(board) {
8755
8802
  }, isAspectRatio, isFromCorner);
8756
8803
  const resizeSnapRef = getSnapResizingRef(board, [resizeRef.element], resizeSnapRefOptions);
8757
8804
  snapG = resizeSnapRef.snapG;
8758
- PlaitBoard.getElementActiveHost(board).append(snapG);
8805
+ PlaitBoard.getElementTopHost(board).append(snapG);
8759
8806
  const points = resizeSnapRef.activePoints;
8760
8807
  const originPoints = resizeRef.element.points;
8761
8808
  const originRect = RectangleClient.getRectangleByPoints(originPoints);
@@ -8765,7 +8812,7 @@ function withTableResize(board) {
8765
8812
  let columns = [...resizeRef.element.columns];
8766
8813
  let rows = [...resizeRef.element.rows];
8767
8814
  if (offsetWidth !== 0) {
8768
- columns = columns.map(item => {
8815
+ columns = columns.map((item) => {
8769
8816
  if (item.width) {
8770
8817
  return {
8771
8818
  ...item,
@@ -8776,7 +8823,7 @@ function withTableResize(board) {
8776
8823
  });
8777
8824
  }
8778
8825
  if (offsetHeight !== 0) {
8779
- rows = rows.map(item => {
8826
+ rows = rows.map((item) => {
8780
8827
  if (item.height) {
8781
8828
  return {
8782
8829
  ...item,
@@ -8922,7 +8969,7 @@ const withSwimlaneCreateByDrag = (board) => {
8922
8969
  const points = getDefaultSwimlanePoints(pointer, movingPoint);
8923
8970
  temporaryElement = createDefaultSwimlane(pointer, points);
8924
8971
  tableGenerator.processDrawing(temporaryElement, swimlaneG);
8925
- PlaitBoard.getElementActiveHost(board).append(swimlaneG);
8972
+ PlaitBoard.getElementTopHost(board).append(swimlaneG);
8926
8973
  }
8927
8974
  pointerMove(event);
8928
8975
  };
@@ -8985,11 +9032,11 @@ const withSwimlaneCreateByDrawing = (board) => {
8985
9032
  isCreate: true
8986
9033
  });
8987
9034
  snapG = resizeSnapRef.snapG;
8988
- PlaitBoard.getElementActiveHost(board).append(snapG);
9035
+ PlaitBoard.getElementTopHost(board).append(snapG);
8989
9036
  points = normalizeShapePoints(resizeSnapRef.activePoints, isShift);
8990
9037
  temporaryElement = createDefaultSwimlane(pointer, points);
8991
9038
  tableGenerator.processDrawing(temporaryElement, swimlaneG);
8992
- PlaitBoard.getElementActiveHost(board).append(swimlaneG);
9039
+ PlaitBoard.getElementTopHost(board).append(swimlaneG);
8993
9040
  }
8994
9041
  pointerMove(event);
8995
9042
  };
@@ -9291,5 +9338,5 @@ const withDraw = (board) => {
9291
9338
  * Generated bundle index. Do not edit.
9292
9339
  */
9293
9340
 
9294
- export { ArrowLineAutoCompleteGenerator, ArrowLineComponent, ArrowLineHandleKey, ArrowLineMarkerType, ArrowLineShape, BasicShapes, DEFAULT_IMAGE_WIDTH, DefaultActivationProperty, DefaultActorProperty, DefaultArrowProperty, DefaultAssemblyProperty, DefaultBasicShapeProperty, DefaultBasicShapePropertyMap, DefaultClassProperty, DefaultCloudProperty, DefaultCombinedFragmentProperty, DefaultComponentBoxProperty, DefaultConnectorProperty, DefaultContainerProperty, DefaultDataBaseProperty, DefaultDataProperty, DefaultDecisionProperty, DefaultDeletionProperty, DefaultDocumentProperty, DefaultDrawActiveStyle, DefaultDrawStyle, DefaultFlowchartProperty, DefaultFlowchartPropertyMap, DefaultInterfaceProperty, DefaultInternalStorageProperty, DefaultManualInputProperty, DefaultMergeProperty, DefaultMultiDocumentProperty, DefaultNoteProperty, DefaultObjectProperty, DefaultPackageProperty, DefaultPentagonArrowProperty, DefaultPortProperty, DefaultProvidedInterfaceProperty, DefaultRequiredInterfaceProperty, DefaultSwimlaneHorizontalProperty, DefaultSwimlaneHorizontalWithHeaderProperty, DefaultSwimlanePropertyMap, DefaultSwimlaneVerticalProperty, DefaultSwimlaneVerticalWithHeaderProperty, DefaultTextProperty, DefaultTwoWayArrowProperty, DefaultUMLPropertyMap, DrawThemeColors, DrawTransforms, FlowchartSymbols, GEOMETRY_NOT_CLOSED, GEOMETRY_WITHOUT_TEXT, GEOMETRY_WITH_MULTIPLE_TEXT, GeometryCommonTextKeys, GeometryComponent, GeometryShapeGenerator, GeometryThreshold, KEY_TO_TEXT_MANAGE, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, LINE_SNAPPING_CONNECTOR_BUFFER, LineActiveGenerator, MIN_TEXT_WIDTH, MemorizeKey, MultipleTextGeometryTextKeys, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitTableElement, Q2C, SELECTED_CELLS, SWIMLANE_HEADER_SIZE, ShapeDefaultSpace, SingleTextGenerator, SwimlaneDrawSymbols, SwimlaneSymbols, TableGenerator, TableSymbols, TextGenerator, UMLSymbols, VectorLineComponent, VectorLinePointerType, VectorLineShape, WithArrowLineAutoCompletePluginKey, WithDrawPluginKey, adjustSwimlaneShape, alignElbowSegment, alignPoints, buildClipboardData, buildDefaultTextsByShape, buildSwimlaneTable, clearSelectedCells, collectArrowLineUpdatedRefsByGeometry, createArrowLineElement, createCell, createDefaultCells, createDefaultFlowchart, createDefaultGeometry, createDefaultRowsOrColumns, createDefaultSwimlane, createGeometryElement, createGeometryElementWithText, createGeometryElementWithoutText, createMultipleTextGeometryElement, createTextElement, createUMLClassOrInterfaceGeometryElement, createVectorLineElement, debugGenerator$1 as debugGenerator, deleteTextManage, drawArrowLine, drawArrowLineArrow, drawBoundReaction, drawGeometry, drawShape, drawVectorLine, editCell, editText, getArrowLineHandleRefPair, getArrowLinePointers, getArrowLinePoints, getArrowLineTextRectangle, getArrowLines, getAutoCompletePoints, getBasicPointers, getCellWithPoints, getCellsRectangle, getCellsWithPoints, getCenterPointsOnPolygon, getConnectionPoint, getCurvePoints, getDefaultBasicShapeProperty, getDefaultFlowchartProperty, getDefaultGeometryPoints, getDefaultGeometryProperty, getDefaultSwimlanePoints, getDefaultTextPoints, getDefaultUMLProperty, getDrawDefaultStrokeColor, getElbowLineRouteOptions, getElbowPoints, getFillByElement, getFirstFilledDrawElement, getFirstTextOrLineElement, getFlowchartDefaultFill, getFlowchartPointers, getGeometryAlign, getGeometryPointers, getHitCell, getHitConnection, getHitConnectorPoint, getHitDrawElement, getHitIndexOfAutoCompletePoint, getHitMultipleGeometryText, getHitShape, getIndexAndDeleteCountByKeyPoint, getLineMemorizedLatest, getMemorizeKey, getMemorizedLatestByPointer, getMemorizedLatestShape, getMidKeyPoints, getMiddlePoints, getMirrorDataPoints, getMultipleTextGeometryTextKeys, getNearestPoint, getNextRenderPoints, getNextSourceAndTargetPoints, getResizedPreviousAndNextPoint, getSelectedArrowLineElements, getSelectedCells, getSelectedCustomGeometryElements, getSelectedDrawElements, getSelectedGeometryElements, getSelectedImageElements, getSelectedSwimlane, getSelectedTableCellsEditor, getSelectedTableElements, getSelectedVectorLineElements, getSnapResizingRef, getSnapResizingRefOptions, getSnappingRef, getSnappingShape, getSourceAndTargetRectangle, getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement, getSwimlaneCount, getSwimlanePointers, getTextKey, getTextManage, getTextManageByCell, getTextRectangle, getTextShapeProperty, getUMLPointers, getVectorByConnection, getVectorLinePointers, getVectorLinePoints, handleArrowLineCreating, hasIllegalElbowPoint, insertClipboardData, insertElement, isCellIncludeText, isClosedCustomGeometry, isClosedDrawElement, isClosedPoints, isDrawElementIncludeText, isDrawElementsIncludeText, isEmptyTextElement, isFilledDrawElement, isGeometryClosed, isGeometryIncludeText, isHitArrowLine, isHitArrowLineText, isHitDrawElement, isHitEdgeOfShape, isHitElementInside, isHitElementText, isHitPolyLine, isHitVectorLine, isInsideOfShape, isMultipleTextGeometry, isMultipleTextShape, isRectangleHitDrawElement, isRectangleHitElementText, isRectangleHitRotatedElement, isRectangleHitRotatedPoints, isSelfLoop, isSingleSelectElementByTable, isSingleSelectLine, isSingleSelectSwimlane, isSingleSelectTable, isSingleTextGeometry, isSingleTextShape, isSwimlanePointers, isSwimlaneWithHeader, isTextExceedingBounds, isUpdatedHandleIndex, isUseDefaultOrthogonalRoute, memorizeLatestShape, memorizeLatestText, rerenderGeometryActive, setSelectedCells, setTextManage, traverseDrawShapes, updateCellIds, updateCellIdsByRowOrColumn, updateColumns, updateRowOrColumnIds, updateRows, vectorLineCreating, withArrowLineAutoComplete, withDraw };
9341
+ export { ArrowLineAutoCompleteGenerator, ArrowLineComponent, ArrowLineHandleKey, ArrowLineMarkerType, ArrowLineShape, BasicShapes, DEFAULT_IMAGE_WIDTH, DefaultActivationProperty, DefaultActorProperty, DefaultArrowProperty, DefaultAssemblyProperty, DefaultBasicShapeProperty, DefaultBasicShapePropertyMap, DefaultClassProperty, DefaultCloudProperty, DefaultCombinedFragmentProperty, DefaultComponentBoxProperty, DefaultConnectorProperty, DefaultContainerProperty, DefaultDataBaseProperty, DefaultDataProperty, DefaultDecisionProperty, DefaultDeletionProperty, DefaultDocumentProperty, DefaultDrawActiveStyle, DefaultDrawStyle, DefaultFlowchartProperty, DefaultFlowchartPropertyMap, DefaultInterfaceProperty, DefaultInternalStorageProperty, DefaultManualInputProperty, DefaultMergeProperty, DefaultMultiDocumentProperty, DefaultNoteProperty, DefaultObjectProperty, DefaultPackageProperty, DefaultPentagonArrowProperty, DefaultPortProperty, DefaultProvidedInterfaceProperty, DefaultRequiredInterfaceProperty, DefaultSwimlaneHorizontalProperty, DefaultSwimlaneHorizontalWithHeaderProperty, DefaultSwimlanePropertyMap, DefaultSwimlaneVerticalProperty, DefaultSwimlaneVerticalWithHeaderProperty, DefaultTextProperty, DefaultTwoWayArrowProperty, DefaultUMLPropertyMap, DrawThemeColors, DrawTransforms, FlowchartSymbols, GEOMETRY_NOT_CLOSED, GEOMETRY_WITHOUT_TEXT, GEOMETRY_WITH_MULTIPLE_TEXT, GeometryCommonTextKeys, GeometryComponent, GeometryShapeGenerator, GeometryThreshold, KEY_TO_TEXT_MANAGE, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, LINE_SNAPPING_CONNECTOR_BUFFER, LineActiveGenerator, MIN_TEXT_WIDTH, MemorizeKey, MultipleTextGeometryTextKeys, PlaitArrowLine, PlaitDrawElement, PlaitGeometry, PlaitTableElement, Q2C, SELECTED_CELLS, SWIMLANE_HEADER_SIZE, ShapeDefaultSpace, SingleTextGenerator, SwimlaneDrawSymbols, SwimlaneSymbols, TableGenerator, TableSymbols, TextGenerator, UMLSymbols, VectorLineComponent, VectorLinePointerType, VectorLineShape, WithArrowLineAutoCompletePluginKey, WithDrawPluginKey, adjustSwimlaneShape, alignElbowSegment, alignPoints, buildClipboardData, buildDefaultTextsByShape, buildSwimlaneTable, clearSelectedCells, collectArrowLineUpdatedRefsByGeometry, createArrowLineElement, createCell, createDefaultCells, createDefaultFlowchart, createDefaultGeometry, createDefaultRowsOrColumns, createDefaultSwimlane, createGeometryElement, createGeometryElementWithText, createGeometryElementWithoutText, createMultipleTextGeometryElement, createTextElement, createUMLClassOrInterfaceGeometryElement, createVectorLineElement, debugGenerator$1 as debugGenerator, deleteTextManage, drawArrowLine, drawArrowLineArrow, drawBoundReaction, drawGeometry, drawShape, drawVectorLine, editCell, editText, getArrowLineHandleRefPair, getArrowLinePointers, getArrowLinePoints, getArrowLineTextRectangle, getArrowLines, getAutoCompletePoints, getBasicPointers, getCellWithPoints, getCellsRectangle, getCellsWithPoints, getCenterPointsOnPolygon, getConnectionPoint, getCurvePoints, getDefaultBasicShapeProperty, getDefaultFlowchartProperty, getDefaultGeometryPoints, getDefaultGeometryProperty, getDefaultSwimlanePoints, getDefaultTextPoints, getDefaultUMLProperty, getDrawDefaultStrokeColor, getElbowLineRouteOptions, getElbowPoints, getFillByElement, getFirstFilledDrawElement, getFirstTextOrLineElement, getFlowchartDefaultFill, getFlowchartPointers, getGeometryAlign, getGeometryPointers, getHitCell, getHitConnection, getHitConnectorPoint, getHitDrawElement, getHitIndexOfAutoCompletePoint, getHitMultipleGeometryText, getHitShape, getIndexAndDeleteCountByKeyPoint, getLineMemorizedLatest, getMemorizeKey, getMemorizedLatestByPointer, getMemorizedLatestShape, getMidKeyPoints, getMiddlePoints, getMirrorDataPoints, getMultipleTextGeometryTextKeys, getNearestPoint, getNextRenderPoints, getNextSourceAndTargetPoints, getResizedPreviousAndNextPoint, getSelectedArrowLineElements, getSelectedCells, getSelectedCustomGeometryElements, getSelectedDrawElements, getSelectedGeometryElements, getSelectedImageElements, getSelectedSwimlane, getSelectedTableCellsEditor, getSelectedTableElements, getSelectedVectorLineElements, getSnapResizingRef, getSnapResizingRefOptions, getSnappingRef, getSnappingShape, getSourceAndTargetRectangle, getStrokeColorByElement, getStrokeStyleByElement, getStrokeWidthByElement, getSwimlaneCount, getSwimlanePointers, getTextKey, getTextManage, getTextManageByCell, getTextRectangle, getTextShapeProperty, getUMLPointers, getVectorByConnection, getVectorLinePointers, getVectorLinePoints, handleArrowLineCreating, hasIllegalElbowPoint, insertClipboardData, insertElement, isCellIncludeText, isClosedCustomGeometry, isClosedDrawElement, isClosedPoints, isDrawElementIncludeText, isDrawElementsIncludeText, isEmptyTextElement, isFilledDrawElement, isGeometryClosed, isGeometryIncludeText, isHitArrowLine, isHitArrowLineText, isHitDrawElement, isHitEdgeOfShape, isHitElementInside, isHitElementText, isHitPolyLine, isHitVectorLine, isInsideOfShape, isMultipleTextGeometry, isMultipleTextShape, isRectangleHitDrawElement, isRectangleHitElementText, isRectangleHitRotatedElement, isRectangleHitRotatedPoints, isSelfLoop, isSingleSelectElementByTable, isSingleSelectLine, isSingleSelectSwimlane, isSingleSelectTable, isSingleTextGeometry, isSingleTextShape, isSwimlanePointers, isSwimlaneWithHeader, isTextExceedingBounds, isUpdatedHandleIndex, isUseDefaultOrthogonalRoute, memorizeLatestShape, memorizeLatestText, setSelectedCells, setTextManage, traverseDrawShapes, updateCellIds, updateCellIdsByRowOrColumn, updateColumns, updateRowOrColumnIds, updateRows, vectorLineCreating, withArrowLineAutoComplete, withDraw };
9295
9342
  //# sourceMappingURL=plait-draw.mjs.map