@plait/mind 0.20.0 → 0.22.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.
- package/base/image-base.component.d.ts +5 -3
- package/drawer/node-image.drawer.d.ts +3 -5
- package/esm2020/base/image-base.component.mjs +9 -5
- package/esm2020/drawer/node-image.drawer.mjs +34 -39
- package/esm2020/interfaces/element.mjs +1 -1
- package/esm2020/node.component.mjs +8 -9
- package/esm2020/plugins/with-abstract-resize.mjs +1 -2
- package/esm2020/plugins/with-mind-hotkey.mjs +3 -2
- package/esm2020/plugins/with-mind.mjs +5 -4
- package/esm2020/plugins/with-node-dnd.mjs +3 -3
- package/esm2020/plugins/with-node-hover-detect.mjs +16 -0
- package/esm2020/plugins/with-node-image.mjs +60 -0
- package/esm2020/plugins/with-node-resize.mjs +122 -0
- package/esm2020/transforms/index.mjs +3 -2
- package/esm2020/transforms/node.mjs +13 -2
- package/esm2020/utils/node/common.mjs +11 -2
- package/esm2020/utils/node/image.mjs +23 -0
- package/esm2020/utils/node/index.mjs +2 -1
- package/esm2020/utils/node-hover/extend.mjs +54 -0
- package/esm2020/utils/position/image.mjs +9 -4
- package/esm2020/utils/position/topic.mjs +3 -3
- package/esm2020/utils/space/node-space.mjs +23 -22
- package/fesm2015/plait-mind.mjs +328 -148
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +329 -148
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/interfaces/element.d.ts +1 -0
- package/node.component.d.ts +0 -1
- package/package.json +1 -1
- package/plugins/with-mind-hotkey.d.ts +1 -1
- package/plugins/with-node-hover-detect.d.ts +2 -0
- package/plugins/with-node-image.d.ts +2 -0
- package/plugins/with-node-resize.d.ts +10 -0
- package/styles/styles.scss +9 -2
- package/transforms/index.d.ts +1 -0
- package/transforms/node.d.ts +1 -0
- package/utils/node/common.d.ts +2 -0
- package/utils/node/image.d.ts +6 -0
- package/utils/node/index.d.ts +1 -0
- package/utils/node-hover/extend.d.ts +9 -0
- package/utils/space/node-space.d.ts +3 -3
- package/esm2020/plugins/with-mind-image.mjs +0 -49
- package/esm2020/plugins/with-node-hover.mjs +0 -58
- package/plugins/with-mind-image.d.ts +0 -2
- package/plugins/with-node-hover.d.ts +0 -5
package/fesm2020/plait-mind.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, BOARD_TO_HOST,
|
|
4
|
+
import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitNode, Path, PlaitBoard, depthFirstRecursion, getIsRecursionFunc, drawLinearPath, drawBezierPath, createG, updateForeignObject, drawRoundRectangle, getRectangleByElements, getSelectedElements, NODE_TO_PARENT, distanceBetweenPointAndRectangle, createForeignObject, createText, PlaitPointerType, PlaitPluginElementComponent, NODE_TO_INDEX, PlaitModule, isMainPointer, transformPoint, toPoint, getHitElements, distanceBetweenPointAndPoint, CLIP_BOARD_FORMAT_KEY, BOARD_TO_HOST, throttleRAF, BoardTransforms, removeSelectedElement, PlaitHistoryBoard, hotkeys, PRESS_AND_MOVE_BUFFER, MERGING, ResizeCursorClass } 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 { 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 { Node, Path as Path$1 } from 'slate';
|
|
8
|
+
import { Node as Node$1, Path as Path$1 } from 'slate';
|
|
9
9
|
import { isKeyHotkey } from 'is-hotkey';
|
|
10
10
|
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
11
11
|
import { take, filter } from 'rxjs/operators';
|
|
@@ -220,11 +220,11 @@ const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, "PingFang SC"';
|
|
|
220
220
|
|
|
221
221
|
const NodeDefaultSpace = {
|
|
222
222
|
horizontal: {
|
|
223
|
-
nodeAndText: BASE *
|
|
223
|
+
nodeAndText: BASE * 2.5,
|
|
224
224
|
emojiAndText: BASE * 1.5
|
|
225
225
|
},
|
|
226
226
|
vertical: {
|
|
227
|
-
nodeAndText: BASE
|
|
227
|
+
nodeAndText: BASE,
|
|
228
228
|
nodeAndImage: BASE,
|
|
229
229
|
imageAndText: BASE * 1.5
|
|
230
230
|
}
|
|
@@ -241,12 +241,14 @@ const RootDefaultSpace = {
|
|
|
241
241
|
const getHorizontalSpaceBetweenNodeAndText = (board, element) => {
|
|
242
242
|
const isMind = PlaitMind.isMind(element);
|
|
243
243
|
const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;
|
|
244
|
-
|
|
244
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
245
|
+
return nodeAndText + strokeWidth / 2;
|
|
245
246
|
};
|
|
246
|
-
const getVerticalSpaceBetweenNodeAndText = (element) => {
|
|
247
|
+
const getVerticalSpaceBetweenNodeAndText = (board, element) => {
|
|
247
248
|
const isMind = PlaitMind.isMind(element);
|
|
249
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
248
250
|
const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;
|
|
249
|
-
return nodeAndText;
|
|
251
|
+
return nodeAndText + strokeWidth / 2;
|
|
250
252
|
};
|
|
251
253
|
const getSpaceEmojiAndText = (element) => {
|
|
252
254
|
const isMind = PlaitMind.isMind(element);
|
|
@@ -266,19 +268,16 @@ const NodeSpace = {
|
|
|
266
268
|
return nodeAndText + NodeSpace.getNodeResizableWidth(board, element) + nodeAndText;
|
|
267
269
|
},
|
|
268
270
|
getNodeHeight(board, element) {
|
|
269
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
271
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
270
272
|
if (MindElement.hasImage(element)) {
|
|
271
|
-
return (
|
|
272
|
-
element.data.image.height +
|
|
273
|
-
NodeDefaultSpace.vertical.imageAndText +
|
|
274
|
-
element.height +
|
|
275
|
-
nodeAndText);
|
|
273
|
+
return NodeSpace.getTextTopSpace(board, element) + element.height + nodeAndText;
|
|
276
274
|
}
|
|
277
275
|
return nodeAndText + element.height + nodeAndText;
|
|
278
276
|
},
|
|
279
277
|
getNodeResizableWidth(board, element) {
|
|
278
|
+
const width = element.manualWidth || element.width;
|
|
280
279
|
const imageWidth = MindElement.hasImage(element) ? element.data.image?.width : 0;
|
|
281
|
-
return Math.max(
|
|
280
|
+
return Math.max(width, imageWidth);
|
|
282
281
|
},
|
|
283
282
|
getNodeResizableMinWidth(board, element) {
|
|
284
283
|
const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);
|
|
@@ -305,25 +304,27 @@ const NodeSpace = {
|
|
|
305
304
|
return nodeAndText;
|
|
306
305
|
}
|
|
307
306
|
},
|
|
308
|
-
getTextTopSpace(element) {
|
|
309
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
307
|
+
getTextTopSpace(board, element) {
|
|
308
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
310
309
|
if (MindElement.hasImage(element)) {
|
|
311
|
-
return element.data.image.height + NodeDefaultSpace.vertical.
|
|
310
|
+
return NodeSpace.getImageTopSpace(board, element) + element.data.image.height + NodeDefaultSpace.vertical.imageAndText;
|
|
312
311
|
}
|
|
313
312
|
else {
|
|
314
313
|
return nodeAndText;
|
|
315
314
|
}
|
|
316
315
|
},
|
|
317
|
-
getImageTopSpace(element) {
|
|
318
|
-
|
|
316
|
+
getImageTopSpace(board, element) {
|
|
317
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
318
|
+
return strokeWidth / 2 + NodeDefaultSpace.vertical.nodeAndImage;
|
|
319
319
|
},
|
|
320
320
|
getEmojiLeftSpace(board, element) {
|
|
321
321
|
const options = board.getPluginOptions(WithMindPluginKey);
|
|
322
322
|
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
|
|
323
|
-
|
|
323
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
324
|
+
return strokeWidth / 2 + nodeAndText - options.emojiPadding;
|
|
324
325
|
},
|
|
325
|
-
getEmojiTopSpace(element) {
|
|
326
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
326
|
+
getEmojiTopSpace(board, element) {
|
|
327
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
327
328
|
return nodeAndText;
|
|
328
329
|
}
|
|
329
330
|
};
|
|
@@ -376,23 +377,28 @@ function getTopicRectangleByNode(board, node) {
|
|
|
376
377
|
}
|
|
377
378
|
function getTopicRectangleByElement(board, nodeRectangle, element) {
|
|
378
379
|
const x = nodeRectangle.x + NodeSpace.getTextLeftSpace(board, element);
|
|
379
|
-
const y = nodeRectangle.y + NodeSpace.getTextTopSpace(element);
|
|
380
|
-
const width =
|
|
380
|
+
const y = nodeRectangle.y + NodeSpace.getTextTopSpace(board, element);
|
|
381
|
+
const width = NodeSpace.getNodeResizableWidth(board, element);
|
|
381
382
|
const height = Math.ceil(element.height);
|
|
382
383
|
return { height, width, x, y };
|
|
383
384
|
}
|
|
384
385
|
|
|
385
386
|
function getImageForeignRectangle(board, element) {
|
|
386
387
|
let { x, y } = getRectangleByNode(MindElement.getNode(element));
|
|
387
|
-
|
|
388
|
-
|
|
388
|
+
const elementWidth = element.manualWidth || element.width;
|
|
389
|
+
x =
|
|
390
|
+
elementWidth > element.data.image.width
|
|
391
|
+
? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2
|
|
392
|
+
: x + NodeSpace.getTextLeftSpace(board, element);
|
|
393
|
+
y = NodeSpace.getImageTopSpace(board, element) + y;
|
|
389
394
|
const { width, height } = element.data.image;
|
|
390
|
-
|
|
395
|
+
const rectangle = {
|
|
391
396
|
x,
|
|
392
397
|
y,
|
|
393
398
|
width,
|
|
394
399
|
height
|
|
395
400
|
};
|
|
401
|
+
return RectangleClient.getOutlineRectangle(rectangle, -6);
|
|
396
402
|
}
|
|
397
403
|
const isHitImage = (board, element, range) => {
|
|
398
404
|
const client = getImageForeignRectangle(board, element);
|
|
@@ -403,6 +409,15 @@ function editTopic(element) {
|
|
|
403
409
|
const component = PlaitElement.getComponent(element);
|
|
404
410
|
component?.editTopic();
|
|
405
411
|
}
|
|
412
|
+
const temporaryDisableSelection = (board) => {
|
|
413
|
+
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
414
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
415
|
+
isDisabledSelect: true
|
|
416
|
+
});
|
|
417
|
+
setTimeout(() => {
|
|
418
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
419
|
+
}, 0);
|
|
420
|
+
};
|
|
406
421
|
|
|
407
422
|
const createEmptyMind = (point) => {
|
|
408
423
|
const element = createMindElement('思维导图', 72, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });
|
|
@@ -498,7 +513,7 @@ const copyNewNode = (node) => {
|
|
|
498
513
|
const extractNodesText = (node) => {
|
|
499
514
|
let str = '';
|
|
500
515
|
if (node) {
|
|
501
|
-
str += Node.string(node.data.topic) + ' ';
|
|
516
|
+
str += Node$1.string(node.data.topic) + ' ';
|
|
502
517
|
for (const childNode of node.children) {
|
|
503
518
|
str += extractNodesText(childNode);
|
|
504
519
|
}
|
|
@@ -666,7 +681,7 @@ const adjustAbstractToNode = (node) => {
|
|
|
666
681
|
};
|
|
667
682
|
const adjustNodeToRoot = (board, node) => {
|
|
668
683
|
const newElement = { ...node };
|
|
669
|
-
if (!Node.string(newElement.data.topic)) {
|
|
684
|
+
if (!Node$1.string(newElement.data.topic)) {
|
|
670
685
|
newElement.data.topic = { children: [{ text: '思维导图' }] };
|
|
671
686
|
}
|
|
672
687
|
delete newElement?.strokeColor;
|
|
@@ -688,6 +703,28 @@ const adjustNodeToRoot = (board, node) => {
|
|
|
688
703
|
};
|
|
689
704
|
};
|
|
690
705
|
|
|
706
|
+
const BOARD_TO_SELECTED_IMAGE_ELEMENT = new WeakMap();
|
|
707
|
+
const getSelectedImageElement = (board) => {
|
|
708
|
+
return BOARD_TO_SELECTED_IMAGE_ELEMENT.get(board);
|
|
709
|
+
};
|
|
710
|
+
const addSelectedImageElement = (board, element) => {
|
|
711
|
+
BOARD_TO_SELECTED_IMAGE_ELEMENT.set(board, element);
|
|
712
|
+
};
|
|
713
|
+
const removeSelectedImageElement = (board) => {
|
|
714
|
+
BOARD_TO_SELECTED_IMAGE_ELEMENT.delete(board);
|
|
715
|
+
};
|
|
716
|
+
const setImageFocus = (board, element, isFocus) => {
|
|
717
|
+
if (isFocus) {
|
|
718
|
+
addSelectedImageElement(board, element);
|
|
719
|
+
}
|
|
720
|
+
else {
|
|
721
|
+
removeSelectedImageElement(board);
|
|
722
|
+
}
|
|
723
|
+
const elementComponent = PlaitElement.getComponent(element);
|
|
724
|
+
elementComponent.imageDrawer.componentRef.instance.isFocus = isFocus;
|
|
725
|
+
elementComponent.imageDrawer.componentRef.instance.cdr.markForCheck();
|
|
726
|
+
};
|
|
727
|
+
|
|
691
728
|
const DefaultAbstractNodeStyle = {
|
|
692
729
|
branch: { color: GRAY_COLOR, width: 2 },
|
|
693
730
|
shape: {
|
|
@@ -2302,11 +2339,22 @@ const setTopic = (board, element, topic, width, height) => {
|
|
|
2302
2339
|
const path = PlaitBoard.findPath(board, element);
|
|
2303
2340
|
Transforms.setNode(board, newElement, path);
|
|
2304
2341
|
};
|
|
2342
|
+
const setNodeManualWidth = (board, element, width, height) => {
|
|
2343
|
+
const path = PlaitBoard.findPath(board, element);
|
|
2344
|
+
const { width: normalizedWidth, height: normalizedHeight } = normalizeWidthAndHeight(board, element, width, height);
|
|
2345
|
+
const newElement = { manualWidth: normalizedWidth, height: normalizedHeight };
|
|
2346
|
+
Transforms.setNode(board, newElement, path);
|
|
2347
|
+
};
|
|
2305
2348
|
const setTopicSize = (board, element, width, height) => {
|
|
2306
2349
|
const newElement = {
|
|
2307
2350
|
...normalizeWidthAndHeight(board, element, width, height)
|
|
2308
2351
|
};
|
|
2309
|
-
|
|
2352
|
+
let isEqualWidth = Math.ceil(element.width) === Math.ceil(newElement.width);
|
|
2353
|
+
let isEqualHeight = Math.ceil(element.height) === Math.ceil(newElement.height);
|
|
2354
|
+
if (element.manualWidth) {
|
|
2355
|
+
isEqualWidth = true;
|
|
2356
|
+
}
|
|
2357
|
+
if (!isEqualWidth || !isEqualHeight) {
|
|
2310
2358
|
const path = PlaitBoard.findPath(board, element);
|
|
2311
2359
|
Transforms.setNode(board, newElement, path);
|
|
2312
2360
|
}
|
|
@@ -2403,6 +2451,7 @@ const MindTransforms = {
|
|
|
2403
2451
|
setLayout,
|
|
2404
2452
|
setTopic,
|
|
2405
2453
|
setTopicSize,
|
|
2454
|
+
setNodeManualWidth,
|
|
2406
2455
|
addEmoji,
|
|
2407
2456
|
removeEmoji,
|
|
2408
2457
|
replaceEmoji,
|
|
@@ -2777,13 +2826,15 @@ class MindImageBaseComponent {
|
|
|
2777
2826
|
get nativeElement() {
|
|
2778
2827
|
return this.elementRef.nativeElement;
|
|
2779
2828
|
}
|
|
2780
|
-
constructor(elementRef) {
|
|
2829
|
+
constructor(elementRef, cdr) {
|
|
2781
2830
|
this.elementRef = elementRef;
|
|
2831
|
+
this.cdr = cdr;
|
|
2832
|
+
this.isFocus = false;
|
|
2782
2833
|
}
|
|
2783
2834
|
ngOnInit() { }
|
|
2784
2835
|
}
|
|
2785
|
-
MindImageBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2786
|
-
MindImageBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindImageBaseComponent, inputs: { imageItem: "imageItem", board: "board", element: "element" }, host: { classAttribute: "mind-node-image" }, ngImport: i0 });
|
|
2836
|
+
MindImageBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2837
|
+
MindImageBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindImageBaseComponent, inputs: { imageItem: "imageItem", board: "board", element: "element", isFocus: "isFocus" }, host: { classAttribute: "mind-node-image" }, ngImport: i0 });
|
|
2787
2838
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, decorators: [{
|
|
2788
2839
|
type: Directive,
|
|
2789
2840
|
args: [{
|
|
@@ -2791,12 +2842,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
2791
2842
|
class: 'mind-node-image'
|
|
2792
2843
|
}
|
|
2793
2844
|
}]
|
|
2794
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { imageItem: [{
|
|
2845
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { imageItem: [{
|
|
2795
2846
|
type: Input
|
|
2796
2847
|
}], board: [{
|
|
2797
2848
|
type: Input
|
|
2798
2849
|
}], element: [{
|
|
2799
2850
|
type: Input
|
|
2851
|
+
}], isFocus: [{
|
|
2852
|
+
type: Input
|
|
2800
2853
|
}] } });
|
|
2801
2854
|
|
|
2802
2855
|
class NodeImageDrawer {
|
|
@@ -2805,44 +2858,39 @@ class NodeImageDrawer {
|
|
|
2805
2858
|
this.viewContainerRef = viewContainerRef;
|
|
2806
2859
|
this.componentRef = null;
|
|
2807
2860
|
}
|
|
2808
|
-
drawImage(element) {
|
|
2809
|
-
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
2813
|
-
const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
2814
|
-
this.g.append(foreignObject);
|
|
2815
|
-
if (this.componentRef) {
|
|
2816
|
-
this.componentRef.destroy();
|
|
2817
|
-
this.componentRef = null;
|
|
2818
|
-
}
|
|
2819
|
-
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType || MindImageBaseComponent;
|
|
2820
|
-
if (!componentType) {
|
|
2821
|
-
throw new Error('Not implement drawEmoji method error.');
|
|
2822
|
-
}
|
|
2823
|
-
this.componentRef = this.viewContainerRef.createComponent(componentType);
|
|
2824
|
-
this.componentRef.instance.board = this.board;
|
|
2825
|
-
this.componentRef.instance.element = element;
|
|
2826
|
-
this.componentRef.instance.imageItem = element.data.image;
|
|
2827
|
-
foreignObject.append(this.componentRef.instance.nativeElement);
|
|
2828
|
-
return this.g;
|
|
2861
|
+
drawImage(nodeG, element) {
|
|
2862
|
+
if (!MindElement.hasImage(element)) {
|
|
2863
|
+
this.destroy();
|
|
2864
|
+
return;
|
|
2829
2865
|
}
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
this.
|
|
2834
|
-
const
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
this.
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2866
|
+
this.g = createG();
|
|
2867
|
+
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
2868
|
+
const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
2869
|
+
this.g.append(foreignObject);
|
|
2870
|
+
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType || MindImageBaseComponent;
|
|
2871
|
+
if (!componentType) {
|
|
2872
|
+
throw new Error('Not implement drawEmoji method error.');
|
|
2873
|
+
}
|
|
2874
|
+
this.componentRef = this.viewContainerRef.createComponent(componentType);
|
|
2875
|
+
this.componentRef.instance.board = this.board;
|
|
2876
|
+
this.componentRef.instance.element = element;
|
|
2877
|
+
this.componentRef.instance.imageItem = element.data.image;
|
|
2878
|
+
this.componentRef.instance.cdr.markForCheck();
|
|
2879
|
+
foreignObject.append(this.componentRef.instance.nativeElement);
|
|
2880
|
+
nodeG.appendChild(this.g);
|
|
2881
|
+
}
|
|
2882
|
+
updateImage(nodeG, previous, current) {
|
|
2883
|
+
if (!MindElement.hasImage(previous) || !MindElement.hasImage(current)) {
|
|
2884
|
+
this.drawImage(nodeG, current);
|
|
2885
|
+
return;
|
|
2886
|
+
}
|
|
2887
|
+
if (previous !== current && this.componentRef) {
|
|
2888
|
+
this.componentRef.instance.element = current;
|
|
2889
|
+
this.componentRef.instance.imageItem = current.data.image;
|
|
2890
|
+
}
|
|
2891
|
+
const currentForeignObject = getImageForeignRectangle(this.board, current);
|
|
2892
|
+
updateForeignObject(this.g, currentForeignObject.width, currentForeignObject.height, currentForeignObject.x, currentForeignObject.y);
|
|
2893
|
+
this.componentRef?.instance.cdr.markForCheck();
|
|
2846
2894
|
}
|
|
2847
2895
|
destroy() {
|
|
2848
2896
|
if (this.g) {
|
|
@@ -2905,13 +2953,17 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2905
2953
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: this.textManage.isEditing });
|
|
2906
2954
|
this.drawEmojis();
|
|
2907
2955
|
this.drawExtend();
|
|
2908
|
-
this.drawImage();
|
|
2956
|
+
this.imageDrawer.drawImage(this.g, this.element);
|
|
2909
2957
|
if (PlaitMind.isMind(this.context.parent)) {
|
|
2910
2958
|
this.g.classList.add('branch');
|
|
2911
2959
|
}
|
|
2912
2960
|
}
|
|
2913
2961
|
editTopic() {
|
|
2914
2962
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: true });
|
|
2963
|
+
if (this.element.manualWidth) {
|
|
2964
|
+
const width = NodeSpace.getNodeResizableWidth(this.board, this.element);
|
|
2965
|
+
this.textManage.updateWidth(width);
|
|
2966
|
+
}
|
|
2915
2967
|
this.textManage.edit((origin) => {
|
|
2916
2968
|
if (origin === ExitOrigin.default) {
|
|
2917
2969
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: false });
|
|
@@ -2928,8 +2980,8 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2928
2980
|
this.drawShape();
|
|
2929
2981
|
this.drawLink();
|
|
2930
2982
|
this.drawEmojis();
|
|
2931
|
-
this.drawImage();
|
|
2932
2983
|
this.drawExtend();
|
|
2984
|
+
this.imageDrawer.updateImage(this.g, previous.element, value.element);
|
|
2933
2985
|
this.textManage.updateText(this.element.data.topic);
|
|
2934
2986
|
this.textManage.updateRectangle();
|
|
2935
2987
|
}
|
|
@@ -2950,12 +3002,6 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2950
3002
|
this.g.append(g);
|
|
2951
3003
|
}
|
|
2952
3004
|
}
|
|
2953
|
-
drawImage() {
|
|
2954
|
-
const image = this.imageDrawer.drawImage(this.element);
|
|
2955
|
-
if (image) {
|
|
2956
|
-
this.g.append(image);
|
|
2957
|
-
}
|
|
2958
|
-
}
|
|
2959
3005
|
drawShape() {
|
|
2960
3006
|
this.destroyShape();
|
|
2961
3007
|
const shape = getShapeByElement(this.board, this.node.origin);
|
|
@@ -3220,11 +3266,11 @@ const withNodeDnd = (board) => {
|
|
|
3220
3266
|
activeElements = [targetElement];
|
|
3221
3267
|
startPoint = point;
|
|
3222
3268
|
}
|
|
3223
|
-
event.preventDefault();
|
|
3224
3269
|
}
|
|
3225
3270
|
if (activeElements.length) {
|
|
3226
|
-
|
|
3271
|
+
// prevent text from being selected
|
|
3227
3272
|
event.preventDefault();
|
|
3273
|
+
correspondingElements = getOverallAbstracts(board, activeElements);
|
|
3228
3274
|
}
|
|
3229
3275
|
mousedown(event);
|
|
3230
3276
|
};
|
|
@@ -3499,7 +3545,6 @@ const withAbstract = (board) => {
|
|
|
3499
3545
|
const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
|
|
3500
3546
|
touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);
|
|
3501
3547
|
if (abstractHandlePosition && activeAbstractElement) {
|
|
3502
|
-
event.preventDefault();
|
|
3503
3548
|
const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
|
|
3504
3549
|
const element = abstractComponent.element;
|
|
3505
3550
|
const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement);
|
|
@@ -3677,7 +3722,8 @@ const withCreateMind = (board) => {
|
|
|
3677
3722
|
return newBoard;
|
|
3678
3723
|
};
|
|
3679
3724
|
|
|
3680
|
-
const withMindHotkey = (
|
|
3725
|
+
const withMindHotkey = (baseBoard) => {
|
|
3726
|
+
const board = baseBoard;
|
|
3681
3727
|
const { keydown } = board;
|
|
3682
3728
|
board.keydown = (event) => {
|
|
3683
3729
|
const selectedElements = getSelectedElements(board);
|
|
@@ -3789,49 +3835,45 @@ const isSpaceHotkey = (event) => {
|
|
|
3789
3835
|
return event.code === 'Space';
|
|
3790
3836
|
};
|
|
3791
3837
|
|
|
3792
|
-
const
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
board
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3799
|
-
depthFirstRecursion(board, element => {
|
|
3800
|
-
if (target) {
|
|
3801
|
-
return;
|
|
3802
|
-
}
|
|
3803
|
-
if (!MindElement.isMindElement(board, element)) {
|
|
3804
|
-
return;
|
|
3805
|
-
}
|
|
3806
|
-
const isHitElement = isHitMindElement(board, point, element);
|
|
3807
|
-
if (isHitElement) {
|
|
3808
|
-
target = element;
|
|
3809
|
-
}
|
|
3810
|
-
}, getIsRecursionFunc(board), true);
|
|
3811
|
-
if (hoveredMindElement && target && hoveredMindElement === target) {
|
|
3812
|
-
return;
|
|
3813
|
-
}
|
|
3814
|
-
if (hoveredMindElement) {
|
|
3815
|
-
removeHovered(hoveredMindElement);
|
|
3816
|
-
}
|
|
3817
|
-
if (target) {
|
|
3818
|
-
addHovered(target);
|
|
3819
|
-
hoveredMindElement = target;
|
|
3820
|
-
}
|
|
3821
|
-
else {
|
|
3822
|
-
hoveredMindElement = null;
|
|
3823
|
-
}
|
|
3824
|
-
});
|
|
3825
|
-
mousemove(event);
|
|
3826
|
-
};
|
|
3827
|
-
board.mouseleave = (event) => {
|
|
3828
|
-
if (hoveredMindElement) {
|
|
3829
|
-
removeHovered(hoveredMindElement);
|
|
3830
|
-
hoveredMindElement = null;
|
|
3838
|
+
const mouseMoveHandle = (board, event, nodeHoveredExtendRef) => {
|
|
3839
|
+
let target = null;
|
|
3840
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3841
|
+
depthFirstRecursion(board, element => {
|
|
3842
|
+
if (target) {
|
|
3843
|
+
return;
|
|
3831
3844
|
}
|
|
3832
|
-
|
|
3833
|
-
|
|
3834
|
-
|
|
3845
|
+
if (!MindElement.isMindElement(board, element)) {
|
|
3846
|
+
return;
|
|
3847
|
+
}
|
|
3848
|
+
const isHitElement = isHitMindElement(board, point, element);
|
|
3849
|
+
if (isHitElement) {
|
|
3850
|
+
target = element;
|
|
3851
|
+
}
|
|
3852
|
+
}, getIsRecursionFunc(board), true);
|
|
3853
|
+
if (nodeHoveredExtendRef && target && nodeHoveredExtendRef.element === target) {
|
|
3854
|
+
return nodeHoveredExtendRef;
|
|
3855
|
+
}
|
|
3856
|
+
if (nodeHoveredExtendRef) {
|
|
3857
|
+
removeHovered(nodeHoveredExtendRef.element);
|
|
3858
|
+
}
|
|
3859
|
+
if (target) {
|
|
3860
|
+
addHovered(target);
|
|
3861
|
+
if (nodeHoveredExtendRef) {
|
|
3862
|
+
nodeHoveredExtendRef.element = target;
|
|
3863
|
+
}
|
|
3864
|
+
else {
|
|
3865
|
+
nodeHoveredExtendRef = { element: target };
|
|
3866
|
+
}
|
|
3867
|
+
}
|
|
3868
|
+
else {
|
|
3869
|
+
nodeHoveredExtendRef = null;
|
|
3870
|
+
}
|
|
3871
|
+
return nodeHoveredExtendRef;
|
|
3872
|
+
};
|
|
3873
|
+
const mouseLeaveHandle = (board, event, nodeHoveredExtendRef) => {
|
|
3874
|
+
if (nodeHoveredExtendRef) {
|
|
3875
|
+
removeHovered(nodeHoveredExtendRef.element);
|
|
3876
|
+
}
|
|
3835
3877
|
};
|
|
3836
3878
|
const addHovered = (element) => {
|
|
3837
3879
|
const component = PlaitElement.getComponent(element);
|
|
@@ -3844,11 +3886,29 @@ const removeHovered = (element) => {
|
|
|
3844
3886
|
}
|
|
3845
3887
|
};
|
|
3846
3888
|
|
|
3847
|
-
const
|
|
3848
|
-
|
|
3849
|
-
|
|
3889
|
+
const withNodeHoverDetect = (board) => {
|
|
3890
|
+
const { mousemove, mouseleave } = board;
|
|
3891
|
+
let nodeHoveredExtendRef = null;
|
|
3892
|
+
board.mousemove = (event) => {
|
|
3893
|
+
nodeHoveredExtendRef = mouseMoveHandle(board, event, nodeHoveredExtendRef);
|
|
3894
|
+
mousemove(event);
|
|
3895
|
+
};
|
|
3896
|
+
board.mouseleave = (event) => {
|
|
3897
|
+
mouseLeaveHandle(board, event, nodeHoveredExtendRef);
|
|
3898
|
+
nodeHoveredExtendRef = null;
|
|
3899
|
+
mouseleave(event);
|
|
3900
|
+
};
|
|
3901
|
+
return board;
|
|
3902
|
+
};
|
|
3903
|
+
|
|
3904
|
+
const withNodeImage = (board) => {
|
|
3905
|
+
const { keydown, mousedown, globalMouseup } = board;
|
|
3850
3906
|
board.mousedown = (event) => {
|
|
3907
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3851
3908
|
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
3909
|
+
if (selectedImageElement) {
|
|
3910
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3911
|
+
}
|
|
3852
3912
|
mousedown(event);
|
|
3853
3913
|
return;
|
|
3854
3914
|
}
|
|
@@ -3857,38 +3917,159 @@ const withMindImage = (board) => {
|
|
|
3857
3917
|
const hitElements = getHitElements(board, { ranges: [range] });
|
|
3858
3918
|
const hasImage = hitElements.length && MindElement.hasImage(hitElements[0]);
|
|
3859
3919
|
const hitImage = hasImage && isHitImage(board, hitElements[0], range);
|
|
3920
|
+
if (selectedImageElement && hitImage && hitElements[0] === selectedImageElement) {
|
|
3921
|
+
temporaryDisableSelection(board);
|
|
3922
|
+
mousedown(event);
|
|
3923
|
+
return;
|
|
3924
|
+
}
|
|
3925
|
+
if (selectedImageElement) {
|
|
3926
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3927
|
+
}
|
|
3860
3928
|
if (hitImage) {
|
|
3861
|
-
|
|
3862
|
-
board
|
|
3863
|
-
isDisabledSelect: true
|
|
3864
|
-
});
|
|
3865
|
-
setTimeout(() => {
|
|
3866
|
-
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
3867
|
-
}, 0);
|
|
3868
|
-
selectedImageElement = hitElements[0];
|
|
3869
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
3870
|
-
component.imageDrawer.drawActive(selectedImageElement);
|
|
3929
|
+
temporaryDisableSelection(board);
|
|
3930
|
+
setImageFocus(board, hitElements[0], true);
|
|
3871
3931
|
clearSelectedElement(board);
|
|
3872
3932
|
}
|
|
3873
|
-
else {
|
|
3874
|
-
if (selectedImageElement) {
|
|
3875
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
3876
|
-
component && component.imageDrawer.destroyActive();
|
|
3877
|
-
}
|
|
3878
|
-
selectedImageElement = null;
|
|
3879
|
-
}
|
|
3880
3933
|
mousedown(event);
|
|
3881
3934
|
};
|
|
3882
3935
|
board.keydown = (event) => {
|
|
3936
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3883
3937
|
if (!PlaitBoard.isReadonly(board) && selectedImageElement && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {
|
|
3938
|
+
addSelectedElement(board, selectedImageElement);
|
|
3939
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3884
3940
|
MindTransforms.removeImage(board, selectedImageElement);
|
|
3885
|
-
selectedImageElement = null;
|
|
3886
3941
|
return;
|
|
3887
3942
|
}
|
|
3888
3943
|
keydown(event);
|
|
3889
3944
|
};
|
|
3945
|
+
board.globalMouseup = (event) => {
|
|
3946
|
+
if (PlaitBoard.isFocus(board)) {
|
|
3947
|
+
const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);
|
|
3948
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3949
|
+
// Clear image selection when mouse board outside area
|
|
3950
|
+
if (selectedImageElement && !isInBoard) {
|
|
3951
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3952
|
+
}
|
|
3953
|
+
}
|
|
3954
|
+
globalMouseup(event);
|
|
3955
|
+
};
|
|
3956
|
+
return board;
|
|
3957
|
+
};
|
|
3958
|
+
|
|
3959
|
+
const withNodeResize = (board) => {
|
|
3960
|
+
const { mousedown, mousemove, globalMouseup } = board;
|
|
3961
|
+
let targetElement = null;
|
|
3962
|
+
let targetElementRef = null;
|
|
3963
|
+
let startPoint = null;
|
|
3964
|
+
board.mousedown = (event) => {
|
|
3965
|
+
if (targetElement) {
|
|
3966
|
+
startPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3967
|
+
// prevent text from being selected
|
|
3968
|
+
event.preventDefault();
|
|
3969
|
+
return;
|
|
3970
|
+
}
|
|
3971
|
+
mousedown(event);
|
|
3972
|
+
};
|
|
3973
|
+
board.mousemove = (event) => {
|
|
3974
|
+
if (PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board)) {
|
|
3975
|
+
mousemove(event);
|
|
3976
|
+
return;
|
|
3977
|
+
}
|
|
3978
|
+
if (startPoint && targetElement && !isMindNodeResizing(board)) {
|
|
3979
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3980
|
+
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
3981
|
+
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
3982
|
+
startPoint = endPoint;
|
|
3983
|
+
addResizing(board, targetElement);
|
|
3984
|
+
targetElementRef = {
|
|
3985
|
+
minWidth: NodeSpace.getNodeResizableMinWidth(board, targetElement),
|
|
3986
|
+
currentWidth: NodeSpace.getNodeResizableWidth(board, targetElement),
|
|
3987
|
+
path: PlaitBoard.findPath(board, targetElement),
|
|
3988
|
+
textManage: PlaitElement.getComponent(targetElement).textManage
|
|
3989
|
+
};
|
|
3990
|
+
MERGING.set(board, true);
|
|
3991
|
+
}
|
|
3992
|
+
}
|
|
3993
|
+
if (isMindNodeResizing(board) && startPoint && targetElementRef) {
|
|
3994
|
+
throttleRAF(() => {
|
|
3995
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3996
|
+
const offsetX = endPoint[0] - startPoint[0];
|
|
3997
|
+
let resizedWidth = targetElementRef.currentWidth + offsetX;
|
|
3998
|
+
if (resizedWidth < targetElementRef.minWidth) {
|
|
3999
|
+
resizedWidth = targetElementRef.minWidth;
|
|
4000
|
+
}
|
|
4001
|
+
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
4002
|
+
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
4003
|
+
targetElementRef.textManage.updateWidth(resizedWidth);
|
|
4004
|
+
const { width, height } = targetElementRef.textManage.getSize();
|
|
4005
|
+
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth, height);
|
|
4006
|
+
}
|
|
4007
|
+
});
|
|
4008
|
+
return;
|
|
4009
|
+
}
|
|
4010
|
+
else {
|
|
4011
|
+
// press and start drag when node is non selected
|
|
4012
|
+
if (!isDragging(board)) {
|
|
4013
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
4014
|
+
const newTargetElement = getTargetElement(board, point);
|
|
4015
|
+
if (newTargetElement) {
|
|
4016
|
+
PlaitBoard.getBoardContainer(board).classList.add(ResizeCursorClass['ew-resize']);
|
|
4017
|
+
}
|
|
4018
|
+
else {
|
|
4019
|
+
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew-resize']);
|
|
4020
|
+
}
|
|
4021
|
+
targetElement = newTargetElement;
|
|
4022
|
+
}
|
|
4023
|
+
}
|
|
4024
|
+
mousemove(event);
|
|
4025
|
+
};
|
|
4026
|
+
board.globalMouseup = (event) => {
|
|
4027
|
+
globalMouseup(event);
|
|
4028
|
+
if (isMindNodeResizing(board) || targetElement) {
|
|
4029
|
+
targetElement && removeResizing(board, targetElement);
|
|
4030
|
+
targetElementRef = null;
|
|
4031
|
+
targetElement = null;
|
|
4032
|
+
startPoint = null;
|
|
4033
|
+
MERGING.set(board, false);
|
|
4034
|
+
}
|
|
4035
|
+
};
|
|
3890
4036
|
return board;
|
|
3891
4037
|
};
|
|
4038
|
+
const IS_MIND_NODE_RESIZING = new WeakMap();
|
|
4039
|
+
const isMindNodeResizing = (board) => {
|
|
4040
|
+
return !!IS_MIND_NODE_RESIZING.get(board);
|
|
4041
|
+
};
|
|
4042
|
+
const addResizing = (board, element) => {
|
|
4043
|
+
PlaitBoard.getBoardContainer(board).classList.add('mind-node-resizing');
|
|
4044
|
+
const component = PlaitElement.getComponent(element);
|
|
4045
|
+
component.g.classList.add('resizing');
|
|
4046
|
+
IS_MIND_NODE_RESIZING.set(board, true);
|
|
4047
|
+
};
|
|
4048
|
+
const removeResizing = (board, element) => {
|
|
4049
|
+
PlaitBoard.getBoardContainer(board).classList.remove('mind-node-resizing');
|
|
4050
|
+
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew-resize']);
|
|
4051
|
+
const component = PlaitElement.getComponent(element);
|
|
4052
|
+
if (component && component.g) {
|
|
4053
|
+
component.g.classList.remove('resizing');
|
|
4054
|
+
}
|
|
4055
|
+
IS_MIND_NODE_RESIZING.set(board, false);
|
|
4056
|
+
};
|
|
4057
|
+
const getTargetElement = (board, point) => {
|
|
4058
|
+
const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value));
|
|
4059
|
+
if (selectedElements.length > 0) {
|
|
4060
|
+
const target = selectedElements.find(value => {
|
|
4061
|
+
const rectangle = getResizeActiveRectangle(board, value);
|
|
4062
|
+
return distanceBetweenPointAndRectangle(point[0], point[1], rectangle) <= 0;
|
|
4063
|
+
});
|
|
4064
|
+
return target ? target : null;
|
|
4065
|
+
}
|
|
4066
|
+
return null;
|
|
4067
|
+
};
|
|
4068
|
+
const getResizeActiveRectangle = (board, element) => {
|
|
4069
|
+
const node = MindElement.getNode(element);
|
|
4070
|
+
const rectangle = getRectangleByNode(node);
|
|
4071
|
+
return { x: rectangle.x + rectangle.width - EXTEND_OFFSET, y: rectangle.y, width: EXTEND_OFFSET * 2, height: rectangle.height };
|
|
4072
|
+
};
|
|
3892
4073
|
|
|
3893
4074
|
const withMind = (baseBoard) => {
|
|
3894
4075
|
const board = baseBoard;
|
|
@@ -3995,7 +4176,7 @@ const withMind = (baseBoard) => {
|
|
|
3995
4176
|
MindTransforms.removeElements(board, selectedElements);
|
|
3996
4177
|
deleteFragment(data);
|
|
3997
4178
|
};
|
|
3998
|
-
return
|
|
4179
|
+
return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));
|
|
3999
4180
|
};
|
|
4000
4181
|
|
|
4001
4182
|
class MindEmojiBaseComponent {
|
|
@@ -4049,5 +4230,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
4049
4230
|
* Generated bundle index. Do not edit.
|
|
4050
4231
|
*/
|
|
4051
4232
|
|
|
4052
|
-
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, 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, getFillByElement, 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 };
|
|
4233
|
+
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, 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, addSelectedImageElement, 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, getFillByElement, getFirstLevelElement, getHitAbstractHandle, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNextBranchColor, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getSelectedImageElement, 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, removeSelectedImageElement, separateChildren, setImageFocus, setIsDragging, temporaryDisableSelection, withMind, withMindExtend };
|
|
4053
4234
|
//# sourceMappingURL=plait-mind.mjs.map
|