@plait/mind 0.27.0-next.4 → 0.27.0-next.5

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,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component, ChangeDetectionStrategy, NgModule, NgZone, Directive, Input, HostListener } from '@angular/core';
3
3
  import * as i2 from '@plait/core';
4
- import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, getSelectedElements, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, setStrokeLinecap, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, setClipboardData, setClipboardDataByText, BOARD_TO_HOST, BoardTransforms, throttleRAF, removeSelectedElement, PlaitHistoryBoard, hotkeys, setClipboardDataByMedia, getClipboardDataByMedia, ResizeCursorClass, preventTouchMove, PRESS_AND_MOVE_BUFFER, MERGING, getDataFromClipboard } from '@plait/core';
4
+ import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, getSelectedElements, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, setStrokeLinecap, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CoreTransforms, BOARD_TO_HOST, BoardTransforms, throttleRAF, removeSelectedElement, PlaitHistoryBoard, hotkeys, setClipboardDataByMedia, getClipboardDataByMedia, ResizeCursorClass, preventTouchMove, PRESS_AND_MOVE_BUFFER, MERGING, setClipboardData, setClipboardDataByText, getDataFromClipboard } from '@plait/core';
5
5
  import { MindLayoutType, isIndentedLayout, isHorizontalLayout, isHorizontalLogicLayout, ConnectingPosition, AbstractNode, isStandardLayout, isVerticalLogicLayout, getNonAbstractChildren, isLeftLayout, isRightLayout, isTopLayout, isBottomLayout, getCorrectStartEnd, getAbstractLayout, GlobalLayout } from '@plait/layouts';
6
6
  import { PlaitMarkEditor, MarkTypes, DEFAULT_FONT_SIZE, TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
7
7
  import { fromEvent, Subject } from 'rxjs';
8
- import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, isDrawingMode, isDndMode, setCreationMode, BoardCreationMode, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isSpaceHotkey, MediaKeys, ResizeHandle, withResize, ActiveGenerator } from '@plait/common';
8
+ import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, WithTextPluginKey, isDrawingMode, isDndMode, setCreationMode, BoardCreationMode, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isDelete, isSpaceHotkey, MediaKeys, ResizeHandle, withResize, ActiveGenerator } from '@plait/common';
9
9
  import { Node as Node$1, Path as Path$1 } from 'slate';
10
10
  import { pointsOnBezierCurves } from 'points-on-curve';
11
11
  import { take, filter } from 'rxjs/operators';
@@ -1107,21 +1107,6 @@ const setTopicSize = (board, element, width, height) => {
1107
1107
  Transforms.setNode(board, newElement, path);
1108
1108
  }
1109
1109
  };
1110
- const removeElements = (board, elements) => {
1111
- const deletableElements = getFirstLevelElement(elements);
1112
- deletableElements
1113
- .map(element => {
1114
- const path = PlaitBoard.findPath(board, element);
1115
- const ref = board.pathRef(path);
1116
- return () => {
1117
- Transforms.removeNode(board, ref.current);
1118
- ref.unref();
1119
- };
1120
- })
1121
- .forEach(action => {
1122
- action();
1123
- });
1124
- };
1125
1110
  const insertNodes = (board, elements, path) => {
1126
1111
  const pathRef = board.pathRef(path);
1127
1112
  elements.forEach(element => {
@@ -1245,7 +1230,6 @@ const MindTransforms = {
1245
1230
  insertAbstract,
1246
1231
  setAbstractsByRefs,
1247
1232
  setAbstractByStandardLayout,
1248
- removeElements,
1249
1233
  insertNodes,
1250
1234
  insertAbstractNodes,
1251
1235
  setRightNodeCountByRefs,
@@ -3063,7 +3047,7 @@ class MindNodeComponent extends PlaitPluginElementComponent {
3063
3047
  this.activeDrawer = new NodeActiveDrawer(this.board);
3064
3048
  this.collapseDrawer = new CollapseDrawer(this.board);
3065
3049
  this.imageDrawer = new NodeImageDrawer(this.board, this.viewContainerRef);
3066
- const plugins = this.board.getPluginOptions(WithMindPluginKey).textPlugins;
3050
+ const plugins = this.board.getPluginOptions(WithTextPluginKey).textPlugins;
3067
3051
  this.textManage = new TextManage(this.board, this.viewContainerRef, {
3068
3052
  getRectangle: () => {
3069
3053
  const rect = getTopicRectangleByNode(this.board, this.node);
@@ -3432,7 +3416,7 @@ const withNodeDnd = (board) => {
3432
3416
  refs = insertElementHandleRightNodeCount(board, targetElementPathRef.current.slice(0, 1), normalElements.length, refs);
3433
3417
  }
3434
3418
  MindTransforms.setRightNodeCountByRefs(board, refs);
3435
- MindTransforms.removeElements(board, firstLevelElements);
3419
+ CoreTransforms.removeElements(board, firstLevelElements);
3436
3420
  let insertPath = targetPathRef.current;
3437
3421
  const parentPath = Path.parent(targetPathRef.current || targetPath);
3438
3422
  if (!insertPath) {
@@ -3481,108 +3465,6 @@ const withNodeDnd = (board) => {
3481
3465
  return board;
3482
3466
  };
3483
3467
 
3484
- const buildClipboardData = (board, selectedElements, startPoint) => {
3485
- let result = [];
3486
- // get overall abstract
3487
- const overallAbstracts = getOverallAbstracts(board, selectedElements);
3488
- // get valid abstract refs
3489
- const validAbstractRefs = getValidAbstractRefs(board, [...selectedElements, ...overallAbstracts]);
3490
- // keep correct order
3491
- const newSelectedElements = selectedElements.filter(value => !validAbstractRefs.find(ref => ref.abstract === value));
3492
- newSelectedElements.push(...validAbstractRefs.map(value => value.abstract));
3493
- const selectedMindNodes = newSelectedElements.map(value => MindElement.getNode(value));
3494
- newSelectedElements.forEach((element, index) => {
3495
- // handle relative location
3496
- const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);
3497
- const points = [[nodeRectangle.x - startPoint[0], nodeRectangle.y - startPoint[1]]];
3498
- // handle invalid abstract
3499
- const abstractRef = validAbstractRefs.find(ref => ref.abstract === element);
3500
- if (AbstractNode.isAbstract(element) && abstractRef) {
3501
- const { start, end } = getRelativeStartEndByAbstractRef(abstractRef, newSelectedElements);
3502
- result.push({
3503
- ...element,
3504
- points,
3505
- start,
3506
- end
3507
- });
3508
- }
3509
- else {
3510
- if (AbstractNode.isAbstract(element)) {
3511
- let newElement = { ...element, points };
3512
- delete newElement.start;
3513
- delete newElement.end;
3514
- result.push(newElement);
3515
- }
3516
- else {
3517
- result.push({
3518
- ...element,
3519
- points: points
3520
- });
3521
- }
3522
- }
3523
- });
3524
- return result;
3525
- };
3526
- const setMindClipboardData = (data, elements) => {
3527
- const text = elements.reduce((string, currentNode) => {
3528
- return string + extractNodesText(currentNode);
3529
- }, '');
3530
- setClipboardData(data, elements);
3531
- setClipboardDataByText(data, text);
3532
- };
3533
- const insertClipboardData = (board, elements, targetPoint) => {
3534
- let newElement, path;
3535
- const selectedElements = getSelectedElements(board);
3536
- let newELements = [];
3537
- const hasTargetParent = selectedElements.length === 1;
3538
- const targetParent = selectedElements[0];
3539
- const targetParentPath = targetParent && PlaitBoard.findPath(board, targetParent);
3540
- const nonAbstractChildrenLength = targetParent && getNonAbstractChildren(targetParent).length;
3541
- elements.forEach((item, index) => {
3542
- newElement = copyNewNode(item);
3543
- if (hasTargetParent) {
3544
- if (item.isRoot) {
3545
- newElement = adjustRootToNode(board, newElement);
3546
- const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
3547
- const { width, height } = getTextSize(board, newElement.data.topic, TOPIC_DEFAULT_MAX_WORD_COUNT, {
3548
- ...styles,
3549
- width: newElement.manualWidth ? newElement.manualWidth : undefined
3550
- });
3551
- newElement.width = Math.max(width, getNodeDefaultFontSize());
3552
- newElement.height = height;
3553
- }
3554
- // handle abstract start and end
3555
- if (AbstractNode.isAbstract(newElement)) {
3556
- newElement.start = newElement.start + nonAbstractChildrenLength;
3557
- newElement.end = newElement.end + nonAbstractChildrenLength;
3558
- }
3559
- path = [...targetParentPath, nonAbstractChildrenLength + index];
3560
- }
3561
- else {
3562
- const point = [targetPoint[0] + item.points[0][0], targetPoint[1] + item.points[0][1]];
3563
- newElement.points = [point];
3564
- if (AbstractNode.isAbstract(item)) {
3565
- newElement = adjustAbstractToNode(newElement);
3566
- }
3567
- if (!item.isRoot) {
3568
- newElement = adjustNodeToRoot(board, newElement);
3569
- }
3570
- path = [board.children.length];
3571
- }
3572
- newELements.push(newElement);
3573
- Transforms.insertNode(board, newElement, path);
3574
- return;
3575
- });
3576
- Transforms.setSelectionWithTemporaryElements(board, newELements);
3577
- };
3578
- const insertClipboardText = (board, targetParent, text) => {
3579
- const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
3580
- const { width, height } = getTextSize(board, text, TOPIC_DEFAULT_MAX_WORD_COUNT, styles);
3581
- const newElement = createMindElement(text, Math.max(width, getFontSizeBySlateElement(text)), height, {});
3582
- Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));
3583
- return;
3584
- };
3585
-
3586
3468
  const withAbstract = (board) => {
3587
3469
  const newBoard = board;
3588
3470
  const { mousedown, mousemove, mouseup } = board;
@@ -3803,7 +3685,7 @@ const withCreateMind = (board) => {
3803
3685
 
3804
3686
  const withMindHotkey = (baseBoard) => {
3805
3687
  const board = baseBoard;
3806
- const { keydown, deleteFragment } = board;
3688
+ const { keydown } = board;
3807
3689
  board.keydown = (event) => {
3808
3690
  const selectedElements = getSelectedElements(board);
3809
3691
  const isSingleSelection = selectedElements.length === 1;
@@ -3843,7 +3725,11 @@ const withMindHotkey = (baseBoard) => {
3843
3725
  insertMindElement(board, targetElement, findNewSiblingNodePath(board, targetElement));
3844
3726
  return;
3845
3727
  }
3846
- if (!isVirtualKey(event) && !isSpaceHotkey(event) && isSingleSelection && MindElement.isMindElement(board, targetElement)) {
3728
+ if (!isVirtualKey(event) &&
3729
+ !isDelete(event) &&
3730
+ !isSpaceHotkey(event) &&
3731
+ isSingleSelection &&
3732
+ MindElement.isMindElement(board, targetElement)) {
3847
3733
  event.preventDefault();
3848
3734
  editTopic(targetElement);
3849
3735
  return;
@@ -3851,54 +3737,8 @@ const withMindHotkey = (baseBoard) => {
3851
3737
  }
3852
3738
  keydown(event);
3853
3739
  };
3854
- board.deleteFragment = (data) => {
3855
- const targetMindElements = getSelectedMindElements(board);
3856
- if (targetMindElements.length) {
3857
- const firstLevelElements = getFirstLevelElement(targetMindElements).reverse();
3858
- const abstractRefs = deleteElementHandleAbstract(board, firstLevelElements);
3859
- MindTransforms.setAbstractsByRefs(board, abstractRefs);
3860
- const refs = deleteElementsHandleRightNodeCount(board, targetMindElements);
3861
- MindTransforms.setRightNodeCountByRefs(board, refs);
3862
- MindTransforms.removeElements(board, targetMindElements);
3863
- const nextSelected = getNextSelectedElement(board, firstLevelElements);
3864
- if (nextSelected) {
3865
- addSelectedElement(board, nextSelected);
3866
- }
3867
- }
3868
- deleteFragment(data);
3869
- };
3870
3740
  return board;
3871
3741
  };
3872
- const getNextSelectedElement = (board, firstLevelElements) => {
3873
- let activeElement;
3874
- const firstLevelElement = firstLevelElements[0];
3875
- const firstLevelElementPath = PlaitBoard.findPath(board, firstLevelElement);
3876
- let nextSelectedPath = firstLevelElementPath;
3877
- if (Path.hasPrevious(firstLevelElementPath)) {
3878
- nextSelectedPath = Path.previous(firstLevelElementPath);
3879
- }
3880
- if (AbstractNode.isAbstract(firstLevelElement)) {
3881
- const parent = MindElement.getParent(firstLevelElement);
3882
- if (!firstLevelElements.includes(parent.children[firstLevelElement.start])) {
3883
- activeElement = parent.children[firstLevelElement.start];
3884
- }
3885
- }
3886
- try {
3887
- if (!activeElement) {
3888
- activeElement = PlaitNode.get(board, nextSelectedPath);
3889
- }
3890
- }
3891
- catch (error) { }
3892
- const firstElement = firstLevelElements[0];
3893
- const firstElementParent = MindElement.findParent(firstElement);
3894
- const hasSameParent = firstLevelElements.every(element => {
3895
- return MindElement.findParent(element) === firstElementParent;
3896
- });
3897
- if (firstElementParent && hasSameParent && !activeElement) {
3898
- activeElement = firstElementParent;
3899
- }
3900
- return activeElement;
3901
- };
3902
3742
 
3903
3743
  const mouseMoveHandle = (board, event, nodeHoveredExtendRef) => {
3904
3744
  let target = null;
@@ -4224,9 +4064,191 @@ const withNodeImageResize = (board) => {
4224
4064
  return board;
4225
4065
  };
4226
4066
 
4067
+ const buildClipboardData = (board, selectedElements, startPoint) => {
4068
+ let result = [];
4069
+ // get overall abstract
4070
+ const overallAbstracts = getOverallAbstracts(board, selectedElements);
4071
+ // get valid abstract refs
4072
+ const validAbstractRefs = getValidAbstractRefs(board, [...selectedElements, ...overallAbstracts]);
4073
+ // keep correct order
4074
+ const newSelectedElements = selectedElements.filter(value => !validAbstractRefs.find(ref => ref.abstract === value));
4075
+ newSelectedElements.push(...validAbstractRefs.map(value => value.abstract));
4076
+ const selectedMindNodes = newSelectedElements.map(value => MindElement.getNode(value));
4077
+ newSelectedElements.forEach((element, index) => {
4078
+ // handle relative location
4079
+ const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);
4080
+ const points = [[nodeRectangle.x - startPoint[0], nodeRectangle.y - startPoint[1]]];
4081
+ // handle invalid abstract
4082
+ const abstractRef = validAbstractRefs.find(ref => ref.abstract === element);
4083
+ if (AbstractNode.isAbstract(element) && abstractRef) {
4084
+ const { start, end } = getRelativeStartEndByAbstractRef(abstractRef, newSelectedElements);
4085
+ result.push({
4086
+ ...element,
4087
+ points,
4088
+ start,
4089
+ end
4090
+ });
4091
+ }
4092
+ else {
4093
+ if (AbstractNode.isAbstract(element)) {
4094
+ let newElement = { ...element, points };
4095
+ delete newElement.start;
4096
+ delete newElement.end;
4097
+ result.push(newElement);
4098
+ }
4099
+ else {
4100
+ result.push({
4101
+ ...element,
4102
+ points: points
4103
+ });
4104
+ }
4105
+ }
4106
+ });
4107
+ return result;
4108
+ };
4109
+ const setMindClipboardData = (data, elements) => {
4110
+ const text = elements.reduce((string, currentNode) => {
4111
+ return string + extractNodesText(currentNode);
4112
+ }, '');
4113
+ setClipboardData(data, elements);
4114
+ setClipboardDataByText(data, text);
4115
+ };
4116
+ const insertClipboardData = (board, elements, targetPoint) => {
4117
+ let newElement, path;
4118
+ const selectedElements = getSelectedElements(board);
4119
+ let newELements = [];
4120
+ const hasTargetParent = selectedElements.length === 1;
4121
+ const targetParent = selectedElements[0];
4122
+ const targetParentPath = targetParent && PlaitBoard.findPath(board, targetParent);
4123
+ const nonAbstractChildrenLength = targetParent && getNonAbstractChildren(targetParent).length;
4124
+ elements.forEach((item, index) => {
4125
+ newElement = copyNewNode(item);
4126
+ if (hasTargetParent) {
4127
+ if (item.isRoot) {
4128
+ newElement = adjustRootToNode(board, newElement);
4129
+ const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
4130
+ const { width, height } = getTextSize(board, newElement.data.topic, TOPIC_DEFAULT_MAX_WORD_COUNT, {
4131
+ ...styles,
4132
+ width: newElement.manualWidth ? newElement.manualWidth : undefined
4133
+ });
4134
+ newElement.width = Math.max(width, getNodeDefaultFontSize());
4135
+ newElement.height = height;
4136
+ }
4137
+ // handle abstract start and end
4138
+ if (AbstractNode.isAbstract(newElement)) {
4139
+ newElement.start = newElement.start + nonAbstractChildrenLength;
4140
+ newElement.end = newElement.end + nonAbstractChildrenLength;
4141
+ }
4142
+ path = [...targetParentPath, nonAbstractChildrenLength + index];
4143
+ }
4144
+ else {
4145
+ const point = [targetPoint[0] + item.points[0][0], targetPoint[1] + item.points[0][1]];
4146
+ newElement.points = [point];
4147
+ if (AbstractNode.isAbstract(item)) {
4148
+ newElement = adjustAbstractToNode(newElement);
4149
+ }
4150
+ if (!item.isRoot) {
4151
+ newElement = adjustNodeToRoot(board, newElement);
4152
+ }
4153
+ path = [board.children.length];
4154
+ }
4155
+ newELements.push(newElement);
4156
+ Transforms.insertNode(board, newElement, path);
4157
+ return;
4158
+ });
4159
+ Transforms.setSelectionWithTemporaryElements(board, newELements);
4160
+ };
4161
+ const insertClipboardText = (board, targetParent, text) => {
4162
+ const styles = PlaitMind.isMind(targetParent) ? { fontFamily: BRANCH_FONT_FAMILY } : { fontFamily: DEFAULT_FONT_FAMILY };
4163
+ const { width, height } = getTextSize(board, text, TOPIC_DEFAULT_MAX_WORD_COUNT, styles);
4164
+ const newElement = createMindElement(text, Math.max(width, getFontSizeBySlateElement(text)), height, {});
4165
+ Transforms.insertNode(board, newElement, findNewChildNodePath(board, targetParent));
4166
+ return;
4167
+ };
4168
+
4169
+ const withMindFragment = (baseBoard) => {
4170
+ const board = baseBoard;
4171
+ const { getDeletedFragment, insertFragment, setFragment } = board;
4172
+ board.getDeletedFragment = (data) => {
4173
+ const targetMindElements = getSelectedMindElements(board);
4174
+ if (targetMindElements.length) {
4175
+ const firstLevelElements = getFirstLevelElement(targetMindElements).reverse();
4176
+ const abstractRefs = deleteElementHandleAbstract(board, firstLevelElements);
4177
+ MindTransforms.setAbstractsByRefs(board, abstractRefs);
4178
+ const refs = deleteElementsHandleRightNodeCount(board, targetMindElements);
4179
+ MindTransforms.setRightNodeCountByRefs(board, refs);
4180
+ const deletableElements = getFirstLevelElement(targetMindElements);
4181
+ data.push(...deletableElements);
4182
+ const nextSelected = getNextSelectedElement(board, firstLevelElements);
4183
+ if (nextSelected) {
4184
+ addSelectedElement(board, nextSelected);
4185
+ }
4186
+ }
4187
+ return getDeletedFragment(data);
4188
+ };
4189
+ board.setFragment = (data, rectangle) => {
4190
+ const targetMindElements = getSelectedMindElements(board);
4191
+ const firstLevelElements = getFirstLevelElement(targetMindElements);
4192
+ if (firstLevelElements.length) {
4193
+ const elements = buildClipboardData(board, firstLevelElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);
4194
+ setMindClipboardData(data, elements);
4195
+ }
4196
+ setFragment(data, rectangle);
4197
+ };
4198
+ board.insertFragment = (data, targetPoint) => {
4199
+ const elements = getDataFromClipboard(data);
4200
+ const mindElements = elements.filter(value => MindElement.isMindElement(board, value));
4201
+ if (elements.length > 0 && mindElements.length > 0) {
4202
+ insertClipboardData(board, mindElements, targetPoint);
4203
+ }
4204
+ else if (elements.length === 0) {
4205
+ const mindElements = getSelectedMindElements(board);
4206
+ if (mindElements.length === 1) {
4207
+ const text = getTextFromClipboard(data);
4208
+ if (text) {
4209
+ insertClipboardText(board, mindElements[0], buildText(text));
4210
+ return;
4211
+ }
4212
+ }
4213
+ }
4214
+ insertFragment(data, targetPoint);
4215
+ };
4216
+ return board;
4217
+ };
4218
+ const getNextSelectedElement = (board, firstLevelElements) => {
4219
+ let activeElement;
4220
+ const firstLevelElement = firstLevelElements[0];
4221
+ const firstLevelElementPath = PlaitBoard.findPath(board, firstLevelElement);
4222
+ let nextSelectedPath = firstLevelElementPath;
4223
+ if (Path.hasPrevious(firstLevelElementPath)) {
4224
+ nextSelectedPath = Path.previous(firstLevelElementPath);
4225
+ }
4226
+ if (AbstractNode.isAbstract(firstLevelElement)) {
4227
+ const parent = MindElement.getParent(firstLevelElement);
4228
+ if (!firstLevelElements.includes(parent.children[firstLevelElement.start])) {
4229
+ activeElement = parent.children[firstLevelElement.start];
4230
+ }
4231
+ }
4232
+ try {
4233
+ if (!activeElement) {
4234
+ activeElement = PlaitNode.get(board, nextSelectedPath);
4235
+ }
4236
+ }
4237
+ catch (error) { }
4238
+ const firstElement = firstLevelElements[0];
4239
+ const firstElementParent = MindElement.findParent(firstElement);
4240
+ const hasSameParent = firstLevelElements.every(element => {
4241
+ return MindElement.findParent(element) === firstElementParent;
4242
+ });
4243
+ if (firstElementParent && hasSameParent && !activeElement) {
4244
+ activeElement = firstElementParent;
4245
+ }
4246
+ return activeElement;
4247
+ };
4248
+
4227
4249
  const withMind = (baseBoard) => {
4228
4250
  const board = baseBoard;
4229
- const { drawElement, dblclick, insertFragment, setFragment, isHitSelection, getRectangle, isMovable, isRecursion } = board;
4251
+ const { drawElement, dblclick, isHitSelection, getRectangle, isMovable, isRecursion } = board;
4230
4252
  board.drawElement = (context) => {
4231
4253
  if (PlaitMind.isMind(context.element)) {
4232
4254
  return PlaitMindComponent;
@@ -4290,34 +4312,7 @@ const withMind = (baseBoard) => {
4290
4312
  }
4291
4313
  dblclick(event);
4292
4314
  };
4293
- board.setFragment = (data, rectangle) => {
4294
- const targetMindElements = getSelectedMindElements(board);
4295
- const firstLevelElements = getFirstLevelElement(targetMindElements);
4296
- if (firstLevelElements.length) {
4297
- const elements = buildClipboardData(board, firstLevelElements, rectangle ? [rectangle.x, rectangle.y] : [0, 0]);
4298
- setMindClipboardData(data, elements);
4299
- }
4300
- setFragment(data, rectangle);
4301
- };
4302
- board.insertFragment = (data, targetPoint) => {
4303
- const elements = getDataFromClipboard(data);
4304
- const mindElements = elements.filter(value => MindElement.isMindElement(board, value));
4305
- if (elements.length > 0 && mindElements.length > 0) {
4306
- insertClipboardData(board, mindElements, targetPoint);
4307
- }
4308
- else if (elements.length === 0) {
4309
- const mindElements = getSelectedMindElements(board);
4310
- if (mindElements.length === 1) {
4311
- const text = getTextFromClipboard(data);
4312
- if (text) {
4313
- insertClipboardText(board, mindElements[0], buildText(text));
4314
- return;
4315
- }
4316
- }
4317
- }
4318
- insertFragment(data, targetPoint);
4319
- };
4320
- return withNodeResize(withNodeImageResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board)))))))));
4315
+ return withNodeResize(withNodeImageResize(withNodeImage(withNodeHoverDetect(withMindFragment(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))))));
4321
4316
  };
4322
4317
 
4323
4318
  class MindEmojiBaseComponent {