@plait/mind 0.17.0 → 0.18.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.
@@ -3,20 +3,24 @@ import { getAvailableProperty } from './common';
3
3
  import { getDefaultBranchColor, getMindThemeColor } from './branch';
4
4
  import { AbstractNode } from '@plait/layouts';
5
5
  import { isChildOfAbstract } from '../abstract/common';
6
- import { DefaultAbstractNodeStyle } from '../../constants/node-style';
6
+ import { DefaultAbstractNodeStyle, DefaultNodeStyle } from '../../constants/node-style';
7
7
  export const getStrokeByMindElement = (board, element) => {
8
8
  if (PlaitMind.isMind(element)) {
9
9
  const defaultRootStroke = getMindThemeColor(board).rootFill;
10
10
  return element.strokeColor || defaultRootStroke;
11
11
  }
12
12
  if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {
13
- return element.strokeColor || DefaultAbstractNodeStyle.strokeColor;
14
- ;
13
+ return element.strokeColor || DefaultAbstractNodeStyle.shape.strokeColor;
15
14
  }
16
15
  return getAvailableProperty(board, element, 'strokeColor') || getDefaultBranchColor(board, element);
17
16
  };
17
+ export const getStrokeWidthByElement = (board, element) => {
18
+ const strokeWidth = element.strokeWidth ||
19
+ (AbstractNode.isAbstract(element) ? DefaultAbstractNodeStyle.shape.strokeWidth : DefaultNodeStyle.shape.strokeWidth);
20
+ return strokeWidth;
21
+ };
18
22
  export const getShapeByElement = (board, element) => {
19
23
  const shape = getAvailableProperty(board, element, 'shape');
20
24
  return shape || MindElementShape.roundRectangle;
21
25
  };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ub2RlLXN0eWxlL3NoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO0lBQzlFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM1RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLElBQUksaUJBQWlCLENBQUM7S0FDbkQ7SUFFRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLFdBQVcsSUFBSSx3QkFBd0IsQ0FBQyxXQUFXLENBQUM7UUFBQSxDQUFDO0tBQ3ZFO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBb0IsRUFBRTtJQUMzRixNQUFNLEtBQUssR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELE9BQU8sS0FBSyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztBQUNwRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIE1pbmRFbGVtZW50U2hhcGUsIFBsYWl0TWluZCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRBdmFpbGFibGVQcm9wZXJ0eSB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IGdldERlZmF1bHRCcmFuY2hDb2xvciwgZ2V0TWluZFRoZW1lQ29sb3IgfSBmcm9tICcuL2JyYW5jaCc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBpc0NoaWxkT2ZBYnN0cmFjdCB9IGZyb20gJy4uL2Fic3RyYWN0L2NvbW1vbic7XG5pbXBvcnQgeyBEZWZhdWx0QWJzdHJhY3ROb2RlU3R5bGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbm9kZS1zdHlsZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VCeU1pbmRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGlmIChQbGFpdE1pbmQuaXNNaW5kKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb290U3Ryb2tlID0gZ2V0TWluZFRoZW1lQ29sb3IoYm9hcmQpLnJvb3RGaWxsO1xuICAgICAgICByZXR1cm4gZWxlbWVudC5zdHJva2VDb2xvciB8fCBkZWZhdWx0Um9vdFN0cm9rZTtcbiAgICB9XG5cbiAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZWxlbWVudCkgfHwgaXNDaGlsZE9mQWJzdHJhY3QoYm9hcmQsIGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnN0cm9rZUNvbG9yIHx8IERlZmF1bHRBYnN0cmFjdE5vZGVTdHlsZS5zdHJva2VDb2xvcjs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldEF2YWlsYWJsZVByb3BlcnR5KGJvYXJkLCBlbGVtZW50LCAnc3Ryb2tlQ29sb3InKSB8fCBnZXREZWZhdWx0QnJhbmNoQ29sb3IoYm9hcmQsIGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXBlQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50U2hhcGUgPT4ge1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0QXZhaWxhYmxlUHJvcGVydHkoYm9hcmQsIGVsZW1lbnQsICdzaGFwZScpO1xuICAgIHJldHVybiBzaGFwZSB8fCBNaW5kRWxlbWVudFNoYXBlLnJvdW5kUmVjdGFuZ2xlO1xufTtcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9ub2RlLXN0eWxlL3NoYXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO0lBQzlFLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM1RCxPQUFPLE9BQU8sQ0FBQyxXQUFXLElBQUksaUJBQWlCLENBQUM7S0FDbkQ7SUFFRCxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ3ZFLE9BQU8sT0FBTyxDQUFDLFdBQVcsSUFBSSx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO0tBQzVFO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBb0IsRUFBRSxFQUFFO0lBQy9FLE1BQU0sV0FBVyxHQUNiLE9BQU8sQ0FBQyxXQUFXO1FBQ25CLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pILE9BQU8sV0FBVyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUFvQixFQUFvQixFQUFFO0lBQzNGLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsT0FBTyxLQUFLLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCwgTWluZEVsZW1lbnRTaGFwZSwgUGxhaXRNaW5kIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGdldEF2YWlsYWJsZVByb3BlcnR5IH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEJyYW5jaENvbG9yLCBnZXRNaW5kVGhlbWVDb2xvciB9IGZyb20gJy4vYnJhbmNoJztcbmltcG9ydCB7IEFic3RyYWN0Tm9kZSB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IGlzQ2hpbGRPZkFic3RyYWN0IH0gZnJvbSAnLi4vYWJzdHJhY3QvY29tbW9uJztcbmltcG9ydCB7IERlZmF1bHRBYnN0cmFjdE5vZGVTdHlsZSwgRGVmYXVsdE5vZGVTdHlsZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ub2RlLXN0eWxlJztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZUJ5TWluZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgaWYgKFBsYWl0TWluZC5pc01pbmQoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvb3RTdHJva2UgPSBnZXRNaW5kVGhlbWVDb2xvcihib2FyZCkucm9vdEZpbGw7XG4gICAgICAgIHJldHVybiBlbGVtZW50LnN0cm9rZUNvbG9yIHx8IGRlZmF1bHRSb290U3Ryb2tlO1xuICAgIH1cblxuICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSB8fCBpc0NoaWxkT2ZBYnN0cmFjdChib2FyZCwgZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuc3Ryb2tlQ29sb3IgfHwgRGVmYXVsdEFic3RyYWN0Tm9kZVN0eWxlLnNoYXBlLnN0cm9rZUNvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRBdmFpbGFibGVQcm9wZXJ0eShib2FyZCwgZWxlbWVudCwgJ3N0cm9rZUNvbG9yJykgfHwgZ2V0RGVmYXVsdEJyYW5jaENvbG9yKGJvYXJkLCBlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9XG4gICAgICAgIGVsZW1lbnQuc3Ryb2tlV2lkdGggfHxcbiAgICAgICAgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGVsZW1lbnQpID8gRGVmYXVsdEFic3RyYWN0Tm9kZVN0eWxlLnNoYXBlLnN0cm9rZVdpZHRoIDogRGVmYXVsdE5vZGVTdHlsZS5zaGFwZS5zdHJva2VXaWR0aCk7XG4gICAgcmV0dXJuIHN0cm9rZVdpZHRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXBlQnlFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudCk6IE1pbmRFbGVtZW50U2hhcGUgPT4ge1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0QXZhaWxhYmxlUHJvcGVydHkoYm9hcmQsIGVsZW1lbnQsICdzaGFwZScpO1xuICAgIHJldHVybiBzaGFwZSB8fCBNaW5kRWxlbWVudFNoYXBlLnJvdW5kUmVjdGFuZ2xlO1xufTtcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Directive, Input, Component, ChangeDetectionStrategy, NgModule, NgZone, HostListener } from '@angular/core';
3
3
  import * as i2 from '@plait/core';
4
- import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitNode, Path, PlaitBoard, depthFirstRecursion, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, drawAbstractRoundRectangle, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, isMainPointer, BOARD_TO_HOST, PlaitPluginKey, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys } from '@plait/core';
4
+ import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitNode, Path, PlaitBoard, depthFirstRecursion, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, isMainPointer, BOARD_TO_HOST, PlaitPluginKey, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys } from '@plait/core';
5
5
  import { MindLayoutType, isIndentedLayout, AbstractNode, getNonAbstractChildren, isStandardLayout, isLeftLayout, isRightLayout, isVerticalLogicLayout, isHorizontalLogicLayout, isTopLayout, isBottomLayout, isHorizontalLayout, getCorrectStartEnd, getAbstractLayout, ConnectingPosition, GlobalLayout } from '@plait/layouts';
6
6
  import { TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
7
7
  import { fromEvent, Subject } from 'rxjs';
@@ -626,15 +626,20 @@ const adjustNodeToRoot = (board, node) => {
626
626
  };
627
627
 
628
628
  const DefaultAbstractNodeStyle = {
629
- strokeColor: GRAY_COLOR,
630
- strokeWidth: 2,
631
629
  branchColor: GRAY_COLOR,
632
- branchWidth: 2
630
+ branchWidth: 2,
631
+ shape: {
632
+ strokeColor: GRAY_COLOR,
633
+ strokeWidth: 2
634
+ }
633
635
  };
634
636
  const DefaultNodeStyle = {
635
- strokeWidth: 3,
636
637
  branchWidth: 3,
637
- fill: 'none'
638
+ shape: {
639
+ rectangleRadius: 4,
640
+ strokeWidth: 3,
641
+ fill: 'none'
642
+ }
638
643
  };
639
644
 
640
645
  const getAvailableProperty = (board, element, propertyKey) => {
@@ -869,11 +874,15 @@ const getStrokeByMindElement = (board, element) => {
869
874
  return element.strokeColor || defaultRootStroke;
870
875
  }
871
876
  if (AbstractNode.isAbstract(element) || isChildOfAbstract(board, element)) {
872
- return element.strokeColor || DefaultAbstractNodeStyle.strokeColor;
873
- ;
877
+ return element.strokeColor || DefaultAbstractNodeStyle.shape.strokeColor;
874
878
  }
875
879
  return getAvailableProperty(board, element, 'strokeColor') || getDefaultBranchColor(board, element);
876
880
  };
881
+ const getStrokeWidthByElement = (board, element) => {
882
+ const strokeWidth = element.strokeWidth ||
883
+ (AbstractNode.isAbstract(element) ? DefaultAbstractNodeStyle.shape.strokeWidth : DefaultNodeStyle.shape.strokeWidth);
884
+ return strokeWidth;
885
+ };
877
886
  const getShapeByElement = (board, element) => {
878
887
  const shape = getAvailableProperty(board, element, 'shape');
879
888
  return shape || MindElementShape.roundRectangle;
@@ -1314,7 +1323,7 @@ function drawLogicLink(board, parent, node, isHorizontal, defaultStroke = null,
1314
1323
  const branchWidth = defaultStrokeWidth || getBranchWidthByMindElement(board, parent.origin);
1315
1324
  const hasStraightLine = branchShape === BranchShape.polyline ? true : !parent.origin.isRoot;
1316
1325
  const parentShape = getShapeByElement(board, parent.origin);
1317
- const shape = node.origin.shape ? node.origin.shape : parentShape;
1326
+ const shape = getShapeByElement(board, node.origin);
1318
1327
  const hasUnderlineShape = shape === MindElementShape.underline;
1319
1328
  const hasUnderlineShapeOfParent = parentShape === MindElementShape.underline;
1320
1329
  const nodeClient = getRectangleByNode(node);
@@ -1980,15 +1989,15 @@ function drawRoundRectangleByNode(board, node) {
1980
1989
  }
1981
1990
  function drawRoundRectangleByElement(board, nodeRectangle, element) {
1982
1991
  const defaultRootFill = getMindThemeColor(board).rootFill;
1983
- const fill = element.fill ? element.fill : element.isRoot ? defaultRootFill : DefaultNodeStyle.fill;
1992
+ const fill = element.fill ? element.fill : element.isRoot ? defaultRootFill : DefaultNodeStyle.shape.fill;
1984
1993
  const stroke = getStrokeByMindElement(board, element);
1985
- const strokeWidth = element.strokeWidth ? element.strokeWidth : DefaultNodeStyle.strokeWidth;
1994
+ const strokeWidth = getStrokeWidthByElement(board, element);
1986
1995
  const nodeG = drawRoundRectangle(PlaitBoard.getRoughSVG(board), nodeRectangle.x, nodeRectangle.y, nodeRectangle.x + nodeRectangle.width, nodeRectangle.y + nodeRectangle.height, {
1987
1996
  stroke,
1988
1997
  strokeWidth,
1989
1998
  fill,
1990
1999
  fillStyle: 'solid'
1991
- });
2000
+ }, false, DefaultNodeStyle.shape.rectangleRadius);
1992
2001
  return nodeG;
1993
2002
  }
1994
2003
 
@@ -2500,6 +2509,48 @@ function handleBoardClass(board, activeHandlePosition, isHorizontal) {
2500
2509
  PlaitBoard.getBoardContainer(board).classList.remove('abstract-resizing-vertical');
2501
2510
  }
2502
2511
  }
2512
+ function drawAbstractRoundRectangle(rs, x1, y1, x2, y2, isHorizontal, options) {
2513
+ const width = Math.abs(x1 - x2);
2514
+ const height = Math.abs(y1 - y2);
2515
+ const radius = 5;
2516
+ const handleGap = 4;
2517
+ const handleLength = 10;
2518
+ const handleSpace = handleLength + handleGap * 2;
2519
+ if (isHorizontal) {
2520
+ const handleSideLine = (width - handleSpace - radius * 2) / 2;
2521
+ const sideLine = height - radius * 2;
2522
+ return rs.path(`M${x1 + radius},${y1}
2523
+ l${handleSideLine},0
2524
+ m${handleSpace},0
2525
+ l${handleSideLine},0
2526
+ a${radius},${radius},0,0,1,${radius},${radius}
2527
+ l0,${sideLine}
2528
+ a${radius},${radius},0,0,1,-${radius},${radius}
2529
+ l-${handleSideLine},0
2530
+ m-${handleSpace},0
2531
+ l-${handleSideLine},0
2532
+ a${radius},${radius},0,0,1,-${radius},-${radius}
2533
+ l0,-${sideLine}
2534
+ a${radius},${radius},0,0,1,${radius},-${radius}`, options);
2535
+ }
2536
+ else {
2537
+ const handleSideLine = (height - handleSpace - radius * 2) / 2;
2538
+ const sideLine = width - radius * 2;
2539
+ return rs.path(`M${x1 + radius},${y1}
2540
+ l${sideLine},0
2541
+ a${radius},${radius},0,0,1,${radius},${radius}
2542
+ l0,${handleSideLine}
2543
+ m0,${handleSpace}
2544
+ l0,${handleSideLine}
2545
+ a${radius},${radius},0,0,1,-${radius},${radius}
2546
+ l-${sideLine},0
2547
+ a${radius},${radius},0,0,1,-${radius},-${radius}
2548
+ l0,-${handleSideLine}
2549
+ m0,-${handleSpace}
2550
+ l0,-${handleSideLine}
2551
+ a${radius},${radius},0,0,1,${radius},-${radius}`, options);
2552
+ }
2553
+ }
2503
2554
 
2504
2555
  class NodeActiveDrawer extends BaseDrawer {
2505
2556
  canDraw(element, data) {
@@ -2518,14 +2569,13 @@ class NodeActiveDrawer extends BaseDrawer {
2518
2569
  activeG.append(this.abstractOutlineG);
2519
2570
  }
2520
2571
  const node = MindElement.getNode(element);
2521
- let { x, y, width, height } = getRectangleByNode(node);
2522
- const strokeG = drawRoundRectangle(PlaitBoard.getRoughSVG(this.board), x - 2, y - 2, x + width + 2, y + height + 2, { stroke: PRIMARY_COLOR, strokeWidth: 2, fill: '' }, true);
2572
+ const rectangle = getRectangleByNode(node);
2573
+ const activeStrokeWidth = 2;
2574
+ // add 0.1 to avoid white gap
2575
+ const offset = (getStrokeWidthByElement(this.board, element) + activeStrokeWidth) / 2 - 0.1;
2576
+ const activeRectangle = RectangleClient.getOutlineRectangle(rectangle, -offset);
2577
+ const strokeG = drawRoundRectangle(PlaitBoard.getRoughSVG(this.board), activeRectangle.x, activeRectangle.y, activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height, { stroke: PRIMARY_COLOR, strokeWidth: activeStrokeWidth, fill: '' }, true, DefaultNodeStyle.shape.rectangleRadius + offset);
2523
2578
  this.g.appendChild(strokeG);
2524
- if (!data.isEditing) {
2525
- const fillG = drawRoundRectangle(PlaitBoard.getRoughSVG(this.board), x - 2, y - 2, x + width + 2, y + height + 2, { stroke: PRIMARY_COLOR, fill: PRIMARY_COLOR, fillStyle: 'solid' }, true);
2526
- fillG.style.opacity = '0.15';
2527
- this.g.appendChild(fillG);
2528
- }
2529
2579
  return activeG;
2530
2580
  }
2531
2581
  updateAbstractOutline(element, activeHandlePosition, resizingLocation) {
@@ -3765,15 +3815,9 @@ const withMind = (board) => {
3765
3815
  board.applyTheme = (element) => {
3766
3816
  const mindElement = element;
3767
3817
  const shouldClearProperty = !PlaitBoard.isBoard(element) && ((mindElement === null || mindElement === void 0 ? void 0 : mindElement.branchColor) || (mindElement === null || mindElement === void 0 ? void 0 : mindElement.fill) || (mindElement === null || mindElement === void 0 ? void 0 : mindElement.strokeColor));
3768
- const isAbstract = AbstractNode.isAbstract(element);
3769
3818
  if (shouldClearProperty) {
3770
3819
  const path = PlaitBoard.findPath(board, element);
3771
- if (isAbstract) {
3772
- Transforms.setNode(board, { fill: null, strokeColor: DefaultAbstractNodeStyle.strokeColor, branchColor: DefaultAbstractNodeStyle.branchColor }, path);
3773
- }
3774
- else {
3775
- Transforms.setNode(board, { fill: null, strokeColor: null, branchColor: null }, path);
3776
- }
3820
+ Transforms.setNode(board, { fill: null, strokeColor: null, branchColor: null }, path);
3777
3821
  }
3778
3822
  };
3779
3823
  board.getRectangle = element => {
@@ -3922,5 +3966,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
3922
3966
  * Generated bundle index. Do not edit.
3923
3967
  */
3924
3968
 
3925
- export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, NODE_MIN_WIDTH, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiForeignRectangle, getEmojiRectangle, getFirstLevelElement, getHitAbstractHandle, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNextBranchColor, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getShapeByElement, getStrokeByMindElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget, isVirtualKey, removeActiveOnDragOrigin, separateChildren, setIsDragging, withMind, withMindExtend };
3969
+ export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, NODE_MIN_WIDTH, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiForeignRectangle, getEmojiRectangle, getFirstLevelElement, getHitAbstractHandle, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNextBranchColor, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getShapeByElement, getStrokeByMindElement, getStrokeWidthByElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget, isVirtualKey, removeActiveOnDragOrigin, separateChildren, setIsDragging, withMind, withMindExtend };
3926
3970
  //# sourceMappingURL=plait-mind.mjs.map