@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/fesm2015/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';
|
|
@@ -190,11 +190,11 @@ const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, "PingFang SC"';
|
|
|
190
190
|
|
|
191
191
|
const NodeDefaultSpace = {
|
|
192
192
|
horizontal: {
|
|
193
|
-
nodeAndText: BASE *
|
|
193
|
+
nodeAndText: BASE * 2.5,
|
|
194
194
|
emojiAndText: BASE * 1.5
|
|
195
195
|
},
|
|
196
196
|
vertical: {
|
|
197
|
-
nodeAndText: BASE
|
|
197
|
+
nodeAndText: BASE,
|
|
198
198
|
nodeAndImage: BASE,
|
|
199
199
|
imageAndText: BASE * 1.5
|
|
200
200
|
}
|
|
@@ -211,12 +211,14 @@ const RootDefaultSpace = {
|
|
|
211
211
|
const getHorizontalSpaceBetweenNodeAndText = (board, element) => {
|
|
212
212
|
const isMind = PlaitMind.isMind(element);
|
|
213
213
|
const nodeAndText = isMind ? RootDefaultSpace.horizontal.nodeAndText : NodeDefaultSpace.horizontal.nodeAndText;
|
|
214
|
-
|
|
214
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
215
|
+
return nodeAndText + strokeWidth / 2;
|
|
215
216
|
};
|
|
216
|
-
const getVerticalSpaceBetweenNodeAndText = (element) => {
|
|
217
|
+
const getVerticalSpaceBetweenNodeAndText = (board, element) => {
|
|
217
218
|
const isMind = PlaitMind.isMind(element);
|
|
219
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
218
220
|
const nodeAndText = isMind ? RootDefaultSpace.vertical.nodeAndText : NodeDefaultSpace.vertical.nodeAndText;
|
|
219
|
-
return nodeAndText;
|
|
221
|
+
return nodeAndText + strokeWidth / 2;
|
|
220
222
|
};
|
|
221
223
|
const getSpaceEmojiAndText = (element) => {
|
|
222
224
|
const isMind = PlaitMind.isMind(element);
|
|
@@ -236,20 +238,17 @@ const NodeSpace = {
|
|
|
236
238
|
return nodeAndText + NodeSpace.getNodeResizableWidth(board, element) + nodeAndText;
|
|
237
239
|
},
|
|
238
240
|
getNodeHeight(board, element) {
|
|
239
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
241
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
240
242
|
if (MindElement.hasImage(element)) {
|
|
241
|
-
return (
|
|
242
|
-
element.data.image.height +
|
|
243
|
-
NodeDefaultSpace.vertical.imageAndText +
|
|
244
|
-
element.height +
|
|
245
|
-
nodeAndText);
|
|
243
|
+
return NodeSpace.getTextTopSpace(board, element) + element.height + nodeAndText;
|
|
246
244
|
}
|
|
247
245
|
return nodeAndText + element.height + nodeAndText;
|
|
248
246
|
},
|
|
249
247
|
getNodeResizableWidth(board, element) {
|
|
250
248
|
var _a;
|
|
249
|
+
const width = element.manualWidth || element.width;
|
|
251
250
|
const imageWidth = MindElement.hasImage(element) ? (_a = element.data.image) === null || _a === void 0 ? void 0 : _a.width : 0;
|
|
252
|
-
return Math.max(
|
|
251
|
+
return Math.max(width, imageWidth);
|
|
253
252
|
},
|
|
254
253
|
getNodeResizableMinWidth(board, element) {
|
|
255
254
|
const minTopicWidth = NodeSpace.getNodeTopicMinWidth(board, element);
|
|
@@ -276,25 +275,27 @@ const NodeSpace = {
|
|
|
276
275
|
return nodeAndText;
|
|
277
276
|
}
|
|
278
277
|
},
|
|
279
|
-
getTextTopSpace(element) {
|
|
280
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
278
|
+
getTextTopSpace(board, element) {
|
|
279
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
281
280
|
if (MindElement.hasImage(element)) {
|
|
282
|
-
return element.data.image.height + NodeDefaultSpace.vertical.
|
|
281
|
+
return NodeSpace.getImageTopSpace(board, element) + element.data.image.height + NodeDefaultSpace.vertical.imageAndText;
|
|
283
282
|
}
|
|
284
283
|
else {
|
|
285
284
|
return nodeAndText;
|
|
286
285
|
}
|
|
287
286
|
},
|
|
288
|
-
getImageTopSpace(element) {
|
|
289
|
-
|
|
287
|
+
getImageTopSpace(board, element) {
|
|
288
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
289
|
+
return strokeWidth / 2 + NodeDefaultSpace.vertical.nodeAndImage;
|
|
290
290
|
},
|
|
291
291
|
getEmojiLeftSpace(board, element) {
|
|
292
292
|
const options = board.getPluginOptions(WithMindPluginKey);
|
|
293
293
|
const nodeAndText = getHorizontalSpaceBetweenNodeAndText(board, element);
|
|
294
|
-
|
|
294
|
+
const strokeWidth = getStrokeWidthByElement(board, element);
|
|
295
|
+
return strokeWidth / 2 + nodeAndText - options.emojiPadding;
|
|
295
296
|
},
|
|
296
|
-
getEmojiTopSpace(element) {
|
|
297
|
-
const nodeAndText = getVerticalSpaceBetweenNodeAndText(element);
|
|
297
|
+
getEmojiTopSpace(board, element) {
|
|
298
|
+
const nodeAndText = getVerticalSpaceBetweenNodeAndText(board, element);
|
|
298
299
|
return nodeAndText;
|
|
299
300
|
}
|
|
300
301
|
};
|
|
@@ -347,23 +348,28 @@ function getTopicRectangleByNode(board, node) {
|
|
|
347
348
|
}
|
|
348
349
|
function getTopicRectangleByElement(board, nodeRectangle, element) {
|
|
349
350
|
const x = nodeRectangle.x + NodeSpace.getTextLeftSpace(board, element);
|
|
350
|
-
const y = nodeRectangle.y + NodeSpace.getTextTopSpace(element);
|
|
351
|
-
const width =
|
|
351
|
+
const y = nodeRectangle.y + NodeSpace.getTextTopSpace(board, element);
|
|
352
|
+
const width = NodeSpace.getNodeResizableWidth(board, element);
|
|
352
353
|
const height = Math.ceil(element.height);
|
|
353
354
|
return { height, width, x, y };
|
|
354
355
|
}
|
|
355
356
|
|
|
356
357
|
function getImageForeignRectangle(board, element) {
|
|
357
358
|
let { x, y } = getRectangleByNode(MindElement.getNode(element));
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
const elementWidth = element.manualWidth || element.width;
|
|
360
|
+
x =
|
|
361
|
+
elementWidth > element.data.image.width
|
|
362
|
+
? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2
|
|
363
|
+
: x + NodeSpace.getTextLeftSpace(board, element);
|
|
364
|
+
y = NodeSpace.getImageTopSpace(board, element) + y;
|
|
360
365
|
const { width, height } = element.data.image;
|
|
361
|
-
|
|
366
|
+
const rectangle = {
|
|
362
367
|
x,
|
|
363
368
|
y,
|
|
364
369
|
width,
|
|
365
370
|
height
|
|
366
371
|
};
|
|
372
|
+
return RectangleClient.getOutlineRectangle(rectangle, -6);
|
|
367
373
|
}
|
|
368
374
|
const isHitImage = (board, element, range) => {
|
|
369
375
|
const client = getImageForeignRectangle(board, element);
|
|
@@ -374,6 +380,15 @@ function editTopic(element) {
|
|
|
374
380
|
const component = PlaitElement.getComponent(element);
|
|
375
381
|
component === null || component === void 0 ? void 0 : component.editTopic();
|
|
376
382
|
}
|
|
383
|
+
const temporaryDisableSelection = (board) => {
|
|
384
|
+
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
385
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
386
|
+
isDisabledSelect: true
|
|
387
|
+
});
|
|
388
|
+
setTimeout(() => {
|
|
389
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, Object.assign({}, currentOptions));
|
|
390
|
+
}, 0);
|
|
391
|
+
};
|
|
377
392
|
|
|
378
393
|
const createEmptyMind = (point) => {
|
|
379
394
|
const element = createMindElement('思维导图', 72, ROOT_TOPIC_HEIGHT, { layout: MindLayoutType.right });
|
|
@@ -469,7 +484,7 @@ const copyNewNode = (node) => {
|
|
|
469
484
|
const extractNodesText = (node) => {
|
|
470
485
|
let str = '';
|
|
471
486
|
if (node) {
|
|
472
|
-
str += Node.string(node.data.topic) + ' ';
|
|
487
|
+
str += Node$1.string(node.data.topic) + ' ';
|
|
473
488
|
for (const childNode of node.children) {
|
|
474
489
|
str += extractNodesText(childNode);
|
|
475
490
|
}
|
|
@@ -638,7 +653,7 @@ const adjustAbstractToNode = (node) => {
|
|
|
638
653
|
const adjustNodeToRoot = (board, node) => {
|
|
639
654
|
var _a;
|
|
640
655
|
const newElement = Object.assign({}, node);
|
|
641
|
-
if (!Node.string(newElement.data.topic)) {
|
|
656
|
+
if (!Node$1.string(newElement.data.topic)) {
|
|
642
657
|
newElement.data.topic = { children: [{ text: '思维导图' }] };
|
|
643
658
|
}
|
|
644
659
|
newElement === null || newElement === void 0 ? true : delete newElement.strokeColor;
|
|
@@ -655,6 +670,28 @@ const adjustNodeToRoot = (board, node) => {
|
|
|
655
670
|
return Object.assign(Object.assign({}, newElement), { layout: (_a = newElement.layout) !== null && _a !== void 0 ? _a : MindLayoutType.right, isRoot: true, type: 'mindmap' });
|
|
656
671
|
};
|
|
657
672
|
|
|
673
|
+
const BOARD_TO_SELECTED_IMAGE_ELEMENT = new WeakMap();
|
|
674
|
+
const getSelectedImageElement = (board) => {
|
|
675
|
+
return BOARD_TO_SELECTED_IMAGE_ELEMENT.get(board);
|
|
676
|
+
};
|
|
677
|
+
const addSelectedImageElement = (board, element) => {
|
|
678
|
+
BOARD_TO_SELECTED_IMAGE_ELEMENT.set(board, element);
|
|
679
|
+
};
|
|
680
|
+
const removeSelectedImageElement = (board) => {
|
|
681
|
+
BOARD_TO_SELECTED_IMAGE_ELEMENT.delete(board);
|
|
682
|
+
};
|
|
683
|
+
const setImageFocus = (board, element, isFocus) => {
|
|
684
|
+
if (isFocus) {
|
|
685
|
+
addSelectedImageElement(board, element);
|
|
686
|
+
}
|
|
687
|
+
else {
|
|
688
|
+
removeSelectedImageElement(board);
|
|
689
|
+
}
|
|
690
|
+
const elementComponent = PlaitElement.getComponent(element);
|
|
691
|
+
elementComponent.imageDrawer.componentRef.instance.isFocus = isFocus;
|
|
692
|
+
elementComponent.imageDrawer.componentRef.instance.cdr.markForCheck();
|
|
693
|
+
};
|
|
694
|
+
|
|
658
695
|
const DefaultAbstractNodeStyle = {
|
|
659
696
|
branch: { color: GRAY_COLOR, width: 2 },
|
|
660
697
|
shape: {
|
|
@@ -2246,9 +2283,20 @@ const setTopic = (board, element, topic, width, height) => {
|
|
|
2246
2283
|
const path = PlaitBoard.findPath(board, element);
|
|
2247
2284
|
Transforms.setNode(board, newElement, path);
|
|
2248
2285
|
};
|
|
2286
|
+
const setNodeManualWidth = (board, element, width, height) => {
|
|
2287
|
+
const path = PlaitBoard.findPath(board, element);
|
|
2288
|
+
const { width: normalizedWidth, height: normalizedHeight } = normalizeWidthAndHeight(board, element, width, height);
|
|
2289
|
+
const newElement = { manualWidth: normalizedWidth, height: normalizedHeight };
|
|
2290
|
+
Transforms.setNode(board, newElement, path);
|
|
2291
|
+
};
|
|
2249
2292
|
const setTopicSize = (board, element, width, height) => {
|
|
2250
2293
|
const newElement = Object.assign({}, normalizeWidthAndHeight(board, element, width, height));
|
|
2251
|
-
|
|
2294
|
+
let isEqualWidth = Math.ceil(element.width) === Math.ceil(newElement.width);
|
|
2295
|
+
let isEqualHeight = Math.ceil(element.height) === Math.ceil(newElement.height);
|
|
2296
|
+
if (element.manualWidth) {
|
|
2297
|
+
isEqualWidth = true;
|
|
2298
|
+
}
|
|
2299
|
+
if (!isEqualWidth || !isEqualHeight) {
|
|
2252
2300
|
const path = PlaitBoard.findPath(board, element);
|
|
2253
2301
|
Transforms.setNode(board, newElement, path);
|
|
2254
2302
|
}
|
|
@@ -2342,6 +2390,7 @@ const MindTransforms = {
|
|
|
2342
2390
|
setLayout,
|
|
2343
2391
|
setTopic,
|
|
2344
2392
|
setTopicSize,
|
|
2393
|
+
setNodeManualWidth,
|
|
2345
2394
|
addEmoji,
|
|
2346
2395
|
removeEmoji,
|
|
2347
2396
|
replaceEmoji,
|
|
@@ -2716,13 +2765,15 @@ class MindImageBaseComponent {
|
|
|
2716
2765
|
get nativeElement() {
|
|
2717
2766
|
return this.elementRef.nativeElement;
|
|
2718
2767
|
}
|
|
2719
|
-
constructor(elementRef) {
|
|
2768
|
+
constructor(elementRef, cdr) {
|
|
2720
2769
|
this.elementRef = elementRef;
|
|
2770
|
+
this.cdr = cdr;
|
|
2771
|
+
this.isFocus = false;
|
|
2721
2772
|
}
|
|
2722
2773
|
ngOnInit() { }
|
|
2723
2774
|
}
|
|
2724
|
-
MindImageBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
2725
|
-
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 });
|
|
2775
|
+
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 });
|
|
2776
|
+
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 });
|
|
2726
2777
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, decorators: [{
|
|
2727
2778
|
type: Directive,
|
|
2728
2779
|
args: [{
|
|
@@ -2730,12 +2781,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
2730
2781
|
class: 'mind-node-image'
|
|
2731
2782
|
}
|
|
2732
2783
|
}]
|
|
2733
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { imageItem: [{
|
|
2784
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { imageItem: [{
|
|
2734
2785
|
type: Input
|
|
2735
2786
|
}], board: [{
|
|
2736
2787
|
type: Input
|
|
2737
2788
|
}], element: [{
|
|
2738
2789
|
type: Input
|
|
2790
|
+
}], isFocus: [{
|
|
2791
|
+
type: Input
|
|
2739
2792
|
}] } });
|
|
2740
2793
|
|
|
2741
2794
|
class NodeImageDrawer {
|
|
@@ -2744,46 +2797,40 @@ class NodeImageDrawer {
|
|
|
2744
2797
|
this.viewContainerRef = viewContainerRef;
|
|
2745
2798
|
this.componentRef = null;
|
|
2746
2799
|
}
|
|
2747
|
-
drawImage(element) {
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2751
|
-
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
2752
|
-
const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
2753
|
-
this.g.append(foreignObject);
|
|
2754
|
-
if (this.componentRef) {
|
|
2755
|
-
this.componentRef.destroy();
|
|
2756
|
-
this.componentRef = null;
|
|
2757
|
-
}
|
|
2758
|
-
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType || MindImageBaseComponent;
|
|
2759
|
-
if (!componentType) {
|
|
2760
|
-
throw new Error('Not implement drawEmoji method error.');
|
|
2761
|
-
}
|
|
2762
|
-
this.componentRef = this.viewContainerRef.createComponent(componentType);
|
|
2763
|
-
this.componentRef.instance.board = this.board;
|
|
2764
|
-
this.componentRef.instance.element = element;
|
|
2765
|
-
this.componentRef.instance.imageItem = element.data.image;
|
|
2766
|
-
foreignObject.append(this.componentRef.instance.nativeElement);
|
|
2767
|
-
return this.g;
|
|
2800
|
+
drawImage(nodeG, element) {
|
|
2801
|
+
if (!MindElement.hasImage(element)) {
|
|
2802
|
+
this.destroy();
|
|
2803
|
+
return;
|
|
2768
2804
|
}
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
this.
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
this.
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
|
|
2805
|
+
this.g = createG();
|
|
2806
|
+
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
2807
|
+
const foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
2808
|
+
this.g.append(foreignObject);
|
|
2809
|
+
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType || MindImageBaseComponent;
|
|
2810
|
+
if (!componentType) {
|
|
2811
|
+
throw new Error('Not implement drawEmoji method error.');
|
|
2812
|
+
}
|
|
2813
|
+
this.componentRef = this.viewContainerRef.createComponent(componentType);
|
|
2814
|
+
this.componentRef.instance.board = this.board;
|
|
2815
|
+
this.componentRef.instance.element = element;
|
|
2816
|
+
this.componentRef.instance.imageItem = element.data.image;
|
|
2817
|
+
this.componentRef.instance.cdr.markForCheck();
|
|
2818
|
+
foreignObject.append(this.componentRef.instance.nativeElement);
|
|
2819
|
+
nodeG.appendChild(this.g);
|
|
2783
2820
|
}
|
|
2784
|
-
|
|
2821
|
+
updateImage(nodeG, previous, current) {
|
|
2785
2822
|
var _a;
|
|
2786
|
-
(
|
|
2823
|
+
if (!MindElement.hasImage(previous) || !MindElement.hasImage(current)) {
|
|
2824
|
+
this.drawImage(nodeG, current);
|
|
2825
|
+
return;
|
|
2826
|
+
}
|
|
2827
|
+
if (previous !== current && this.componentRef) {
|
|
2828
|
+
this.componentRef.instance.element = current;
|
|
2829
|
+
this.componentRef.instance.imageItem = current.data.image;
|
|
2830
|
+
}
|
|
2831
|
+
const currentForeignObject = getImageForeignRectangle(this.board, current);
|
|
2832
|
+
updateForeignObject(this.g, currentForeignObject.width, currentForeignObject.height, currentForeignObject.x, currentForeignObject.y);
|
|
2833
|
+
(_a = this.componentRef) === null || _a === void 0 ? void 0 : _a.instance.cdr.markForCheck();
|
|
2787
2834
|
}
|
|
2788
2835
|
destroy() {
|
|
2789
2836
|
if (this.g) {
|
|
@@ -2846,13 +2893,17 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2846
2893
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: this.textManage.isEditing });
|
|
2847
2894
|
this.drawEmojis();
|
|
2848
2895
|
this.drawExtend();
|
|
2849
|
-
this.drawImage();
|
|
2896
|
+
this.imageDrawer.drawImage(this.g, this.element);
|
|
2850
2897
|
if (PlaitMind.isMind(this.context.parent)) {
|
|
2851
2898
|
this.g.classList.add('branch');
|
|
2852
2899
|
}
|
|
2853
2900
|
}
|
|
2854
2901
|
editTopic() {
|
|
2855
2902
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: true });
|
|
2903
|
+
if (this.element.manualWidth) {
|
|
2904
|
+
const width = NodeSpace.getNodeResizableWidth(this.board, this.element);
|
|
2905
|
+
this.textManage.updateWidth(width);
|
|
2906
|
+
}
|
|
2856
2907
|
this.textManage.edit((origin) => {
|
|
2857
2908
|
if (origin === ExitOrigin.default) {
|
|
2858
2909
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: false });
|
|
@@ -2869,8 +2920,8 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2869
2920
|
this.drawShape();
|
|
2870
2921
|
this.drawLink();
|
|
2871
2922
|
this.drawEmojis();
|
|
2872
|
-
this.drawImage();
|
|
2873
2923
|
this.drawExtend();
|
|
2924
|
+
this.imageDrawer.updateImage(this.g, previous.element, value.element);
|
|
2874
2925
|
this.textManage.updateText(this.element.data.topic);
|
|
2875
2926
|
this.textManage.updateRectangle();
|
|
2876
2927
|
}
|
|
@@ -2891,12 +2942,6 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
2891
2942
|
this.g.append(g);
|
|
2892
2943
|
}
|
|
2893
2944
|
}
|
|
2894
|
-
drawImage() {
|
|
2895
|
-
const image = this.imageDrawer.drawImage(this.element);
|
|
2896
|
-
if (image) {
|
|
2897
|
-
this.g.append(image);
|
|
2898
|
-
}
|
|
2899
|
-
}
|
|
2900
2945
|
drawShape() {
|
|
2901
2946
|
this.destroyShape();
|
|
2902
2947
|
const shape = getShapeByElement(this.board, this.node.origin);
|
|
@@ -3161,11 +3206,11 @@ const withNodeDnd = (board) => {
|
|
|
3161
3206
|
activeElements = [targetElement];
|
|
3162
3207
|
startPoint = point;
|
|
3163
3208
|
}
|
|
3164
|
-
event.preventDefault();
|
|
3165
3209
|
}
|
|
3166
3210
|
if (activeElements.length) {
|
|
3167
|
-
|
|
3211
|
+
// prevent text from being selected
|
|
3168
3212
|
event.preventDefault();
|
|
3213
|
+
correspondingElements = getOverallAbstracts(board, activeElements);
|
|
3169
3214
|
}
|
|
3170
3215
|
mousedown(event);
|
|
3171
3216
|
};
|
|
@@ -3434,7 +3479,6 @@ const withAbstract = (board) => {
|
|
|
3434
3479
|
const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
|
|
3435
3480
|
touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);
|
|
3436
3481
|
if (abstractHandlePosition && activeAbstractElement) {
|
|
3437
|
-
event.preventDefault();
|
|
3438
3482
|
const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
|
|
3439
3483
|
const element = abstractComponent.element;
|
|
3440
3484
|
const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement);
|
|
@@ -3612,7 +3656,8 @@ const withCreateMind = (board) => {
|
|
|
3612
3656
|
return newBoard;
|
|
3613
3657
|
};
|
|
3614
3658
|
|
|
3615
|
-
const withMindHotkey = (
|
|
3659
|
+
const withMindHotkey = (baseBoard) => {
|
|
3660
|
+
const board = baseBoard;
|
|
3616
3661
|
const { keydown } = board;
|
|
3617
3662
|
board.keydown = (event) => {
|
|
3618
3663
|
const selectedElements = getSelectedElements(board);
|
|
@@ -3724,49 +3769,45 @@ const isSpaceHotkey = (event) => {
|
|
|
3724
3769
|
return event.code === 'Space';
|
|
3725
3770
|
};
|
|
3726
3771
|
|
|
3727
|
-
const
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
board
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3734
|
-
depthFirstRecursion(board, element => {
|
|
3735
|
-
if (target) {
|
|
3736
|
-
return;
|
|
3737
|
-
}
|
|
3738
|
-
if (!MindElement.isMindElement(board, element)) {
|
|
3739
|
-
return;
|
|
3740
|
-
}
|
|
3741
|
-
const isHitElement = isHitMindElement(board, point, element);
|
|
3742
|
-
if (isHitElement) {
|
|
3743
|
-
target = element;
|
|
3744
|
-
}
|
|
3745
|
-
}, getIsRecursionFunc(board), true);
|
|
3746
|
-
if (hoveredMindElement && target && hoveredMindElement === target) {
|
|
3747
|
-
return;
|
|
3748
|
-
}
|
|
3749
|
-
if (hoveredMindElement) {
|
|
3750
|
-
removeHovered(hoveredMindElement);
|
|
3751
|
-
}
|
|
3752
|
-
if (target) {
|
|
3753
|
-
addHovered(target);
|
|
3754
|
-
hoveredMindElement = target;
|
|
3755
|
-
}
|
|
3756
|
-
else {
|
|
3757
|
-
hoveredMindElement = null;
|
|
3758
|
-
}
|
|
3759
|
-
});
|
|
3760
|
-
mousemove(event);
|
|
3761
|
-
};
|
|
3762
|
-
board.mouseleave = (event) => {
|
|
3763
|
-
if (hoveredMindElement) {
|
|
3764
|
-
removeHovered(hoveredMindElement);
|
|
3765
|
-
hoveredMindElement = null;
|
|
3772
|
+
const mouseMoveHandle = (board, event, nodeHoveredExtendRef) => {
|
|
3773
|
+
let target = null;
|
|
3774
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3775
|
+
depthFirstRecursion(board, element => {
|
|
3776
|
+
if (target) {
|
|
3777
|
+
return;
|
|
3766
3778
|
}
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3779
|
+
if (!MindElement.isMindElement(board, element)) {
|
|
3780
|
+
return;
|
|
3781
|
+
}
|
|
3782
|
+
const isHitElement = isHitMindElement(board, point, element);
|
|
3783
|
+
if (isHitElement) {
|
|
3784
|
+
target = element;
|
|
3785
|
+
}
|
|
3786
|
+
}, getIsRecursionFunc(board), true);
|
|
3787
|
+
if (nodeHoveredExtendRef && target && nodeHoveredExtendRef.element === target) {
|
|
3788
|
+
return nodeHoveredExtendRef;
|
|
3789
|
+
}
|
|
3790
|
+
if (nodeHoveredExtendRef) {
|
|
3791
|
+
removeHovered(nodeHoveredExtendRef.element);
|
|
3792
|
+
}
|
|
3793
|
+
if (target) {
|
|
3794
|
+
addHovered(target);
|
|
3795
|
+
if (nodeHoveredExtendRef) {
|
|
3796
|
+
nodeHoveredExtendRef.element = target;
|
|
3797
|
+
}
|
|
3798
|
+
else {
|
|
3799
|
+
nodeHoveredExtendRef = { element: target };
|
|
3800
|
+
}
|
|
3801
|
+
}
|
|
3802
|
+
else {
|
|
3803
|
+
nodeHoveredExtendRef = null;
|
|
3804
|
+
}
|
|
3805
|
+
return nodeHoveredExtendRef;
|
|
3806
|
+
};
|
|
3807
|
+
const mouseLeaveHandle = (board, event, nodeHoveredExtendRef) => {
|
|
3808
|
+
if (nodeHoveredExtendRef) {
|
|
3809
|
+
removeHovered(nodeHoveredExtendRef.element);
|
|
3810
|
+
}
|
|
3770
3811
|
};
|
|
3771
3812
|
const addHovered = (element) => {
|
|
3772
3813
|
const component = PlaitElement.getComponent(element);
|
|
@@ -3779,11 +3820,29 @@ const removeHovered = (element) => {
|
|
|
3779
3820
|
}
|
|
3780
3821
|
};
|
|
3781
3822
|
|
|
3782
|
-
const
|
|
3783
|
-
|
|
3784
|
-
|
|
3823
|
+
const withNodeHoverDetect = (board) => {
|
|
3824
|
+
const { mousemove, mouseleave } = board;
|
|
3825
|
+
let nodeHoveredExtendRef = null;
|
|
3826
|
+
board.mousemove = (event) => {
|
|
3827
|
+
nodeHoveredExtendRef = mouseMoveHandle(board, event, nodeHoveredExtendRef);
|
|
3828
|
+
mousemove(event);
|
|
3829
|
+
};
|
|
3830
|
+
board.mouseleave = (event) => {
|
|
3831
|
+
mouseLeaveHandle(board, event, nodeHoveredExtendRef);
|
|
3832
|
+
nodeHoveredExtendRef = null;
|
|
3833
|
+
mouseleave(event);
|
|
3834
|
+
};
|
|
3835
|
+
return board;
|
|
3836
|
+
};
|
|
3837
|
+
|
|
3838
|
+
const withNodeImage = (board) => {
|
|
3839
|
+
const { keydown, mousedown, globalMouseup } = board;
|
|
3785
3840
|
board.mousedown = (event) => {
|
|
3841
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3786
3842
|
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
3843
|
+
if (selectedImageElement) {
|
|
3844
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3845
|
+
}
|
|
3787
3846
|
mousedown(event);
|
|
3788
3847
|
return;
|
|
3789
3848
|
}
|
|
@@ -3792,38 +3851,159 @@ const withMindImage = (board) => {
|
|
|
3792
3851
|
const hitElements = getHitElements(board, { ranges: [range] });
|
|
3793
3852
|
const hasImage = hitElements.length && MindElement.hasImage(hitElements[0]);
|
|
3794
3853
|
const hitImage = hasImage && isHitImage(board, hitElements[0], range);
|
|
3854
|
+
if (selectedImageElement && hitImage && hitElements[0] === selectedImageElement) {
|
|
3855
|
+
temporaryDisableSelection(board);
|
|
3856
|
+
mousedown(event);
|
|
3857
|
+
return;
|
|
3858
|
+
}
|
|
3859
|
+
if (selectedImageElement) {
|
|
3860
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3861
|
+
}
|
|
3795
3862
|
if (hitImage) {
|
|
3796
|
-
|
|
3797
|
-
board
|
|
3798
|
-
isDisabledSelect: true
|
|
3799
|
-
});
|
|
3800
|
-
setTimeout(() => {
|
|
3801
|
-
board.setPluginOptions(PlaitPluginKey.withSelection, Object.assign({}, currentOptions));
|
|
3802
|
-
}, 0);
|
|
3803
|
-
selectedImageElement = hitElements[0];
|
|
3804
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
3805
|
-
component.imageDrawer.drawActive(selectedImageElement);
|
|
3863
|
+
temporaryDisableSelection(board);
|
|
3864
|
+
setImageFocus(board, hitElements[0], true);
|
|
3806
3865
|
clearSelectedElement(board);
|
|
3807
3866
|
}
|
|
3808
|
-
else {
|
|
3809
|
-
if (selectedImageElement) {
|
|
3810
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
3811
|
-
component && component.imageDrawer.destroyActive();
|
|
3812
|
-
}
|
|
3813
|
-
selectedImageElement = null;
|
|
3814
|
-
}
|
|
3815
3867
|
mousedown(event);
|
|
3816
3868
|
};
|
|
3817
3869
|
board.keydown = (event) => {
|
|
3870
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3818
3871
|
if (!PlaitBoard.isReadonly(board) && selectedImageElement && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {
|
|
3872
|
+
addSelectedElement(board, selectedImageElement);
|
|
3873
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3819
3874
|
MindTransforms.removeImage(board, selectedImageElement);
|
|
3820
|
-
selectedImageElement = null;
|
|
3821
3875
|
return;
|
|
3822
3876
|
}
|
|
3823
3877
|
keydown(event);
|
|
3824
3878
|
};
|
|
3879
|
+
board.globalMouseup = (event) => {
|
|
3880
|
+
if (PlaitBoard.isFocus(board)) {
|
|
3881
|
+
const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);
|
|
3882
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3883
|
+
// Clear image selection when mouse board outside area
|
|
3884
|
+
if (selectedImageElement && !isInBoard) {
|
|
3885
|
+
setImageFocus(board, selectedImageElement, false);
|
|
3886
|
+
}
|
|
3887
|
+
}
|
|
3888
|
+
globalMouseup(event);
|
|
3889
|
+
};
|
|
3890
|
+
return board;
|
|
3891
|
+
};
|
|
3892
|
+
|
|
3893
|
+
const withNodeResize = (board) => {
|
|
3894
|
+
const { mousedown, mousemove, globalMouseup } = board;
|
|
3895
|
+
let targetElement = null;
|
|
3896
|
+
let targetElementRef = null;
|
|
3897
|
+
let startPoint = null;
|
|
3898
|
+
board.mousedown = (event) => {
|
|
3899
|
+
if (targetElement) {
|
|
3900
|
+
startPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3901
|
+
// prevent text from being selected
|
|
3902
|
+
event.preventDefault();
|
|
3903
|
+
return;
|
|
3904
|
+
}
|
|
3905
|
+
mousedown(event);
|
|
3906
|
+
};
|
|
3907
|
+
board.mousemove = (event) => {
|
|
3908
|
+
if (PlaitBoard.isReadonly(board) || PlaitBoard.hasBeenTextEditing(board)) {
|
|
3909
|
+
mousemove(event);
|
|
3910
|
+
return;
|
|
3911
|
+
}
|
|
3912
|
+
if (startPoint && targetElement && !isMindNodeResizing(board)) {
|
|
3913
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3914
|
+
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
3915
|
+
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
3916
|
+
startPoint = endPoint;
|
|
3917
|
+
addResizing(board, targetElement);
|
|
3918
|
+
targetElementRef = {
|
|
3919
|
+
minWidth: NodeSpace.getNodeResizableMinWidth(board, targetElement),
|
|
3920
|
+
currentWidth: NodeSpace.getNodeResizableWidth(board, targetElement),
|
|
3921
|
+
path: PlaitBoard.findPath(board, targetElement),
|
|
3922
|
+
textManage: PlaitElement.getComponent(targetElement).textManage
|
|
3923
|
+
};
|
|
3924
|
+
MERGING.set(board, true);
|
|
3925
|
+
}
|
|
3926
|
+
}
|
|
3927
|
+
if (isMindNodeResizing(board) && startPoint && targetElementRef) {
|
|
3928
|
+
throttleRAF(() => {
|
|
3929
|
+
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3930
|
+
const offsetX = endPoint[0] - startPoint[0];
|
|
3931
|
+
let resizedWidth = targetElementRef.currentWidth + offsetX;
|
|
3932
|
+
if (resizedWidth < targetElementRef.minWidth) {
|
|
3933
|
+
resizedWidth = targetElementRef.minWidth;
|
|
3934
|
+
}
|
|
3935
|
+
const newTarget = PlaitNode.get(board, targetElementRef.path);
|
|
3936
|
+
if (newTarget && NodeSpace.getNodeTopicMinWidth(board, newTarget) !== resizedWidth) {
|
|
3937
|
+
targetElementRef.textManage.updateWidth(resizedWidth);
|
|
3938
|
+
const { width, height } = targetElementRef.textManage.getSize();
|
|
3939
|
+
MindTransforms.setNodeManualWidth(board, newTarget, resizedWidth, height);
|
|
3940
|
+
}
|
|
3941
|
+
});
|
|
3942
|
+
return;
|
|
3943
|
+
}
|
|
3944
|
+
else {
|
|
3945
|
+
// press and start drag when node is non selected
|
|
3946
|
+
if (!isDragging(board)) {
|
|
3947
|
+
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3948
|
+
const newTargetElement = getTargetElement(board, point);
|
|
3949
|
+
if (newTargetElement) {
|
|
3950
|
+
PlaitBoard.getBoardContainer(board).classList.add(ResizeCursorClass['ew-resize']);
|
|
3951
|
+
}
|
|
3952
|
+
else {
|
|
3953
|
+
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew-resize']);
|
|
3954
|
+
}
|
|
3955
|
+
targetElement = newTargetElement;
|
|
3956
|
+
}
|
|
3957
|
+
}
|
|
3958
|
+
mousemove(event);
|
|
3959
|
+
};
|
|
3960
|
+
board.globalMouseup = (event) => {
|
|
3961
|
+
globalMouseup(event);
|
|
3962
|
+
if (isMindNodeResizing(board) || targetElement) {
|
|
3963
|
+
targetElement && removeResizing(board, targetElement);
|
|
3964
|
+
targetElementRef = null;
|
|
3965
|
+
targetElement = null;
|
|
3966
|
+
startPoint = null;
|
|
3967
|
+
MERGING.set(board, false);
|
|
3968
|
+
}
|
|
3969
|
+
};
|
|
3825
3970
|
return board;
|
|
3826
3971
|
};
|
|
3972
|
+
const IS_MIND_NODE_RESIZING = new WeakMap();
|
|
3973
|
+
const isMindNodeResizing = (board) => {
|
|
3974
|
+
return !!IS_MIND_NODE_RESIZING.get(board);
|
|
3975
|
+
};
|
|
3976
|
+
const addResizing = (board, element) => {
|
|
3977
|
+
PlaitBoard.getBoardContainer(board).classList.add('mind-node-resizing');
|
|
3978
|
+
const component = PlaitElement.getComponent(element);
|
|
3979
|
+
component.g.classList.add('resizing');
|
|
3980
|
+
IS_MIND_NODE_RESIZING.set(board, true);
|
|
3981
|
+
};
|
|
3982
|
+
const removeResizing = (board, element) => {
|
|
3983
|
+
PlaitBoard.getBoardContainer(board).classList.remove('mind-node-resizing');
|
|
3984
|
+
PlaitBoard.getBoardContainer(board).classList.remove(ResizeCursorClass['ew-resize']);
|
|
3985
|
+
const component = PlaitElement.getComponent(element);
|
|
3986
|
+
if (component && component.g) {
|
|
3987
|
+
component.g.classList.remove('resizing');
|
|
3988
|
+
}
|
|
3989
|
+
IS_MIND_NODE_RESIZING.set(board, false);
|
|
3990
|
+
};
|
|
3991
|
+
const getTargetElement = (board, point) => {
|
|
3992
|
+
const selectedElements = getSelectedElements(board).filter(value => MindElement.isMindElement(board, value));
|
|
3993
|
+
if (selectedElements.length > 0) {
|
|
3994
|
+
const target = selectedElements.find(value => {
|
|
3995
|
+
const rectangle = getResizeActiveRectangle(board, value);
|
|
3996
|
+
return distanceBetweenPointAndRectangle(point[0], point[1], rectangle) <= 0;
|
|
3997
|
+
});
|
|
3998
|
+
return target ? target : null;
|
|
3999
|
+
}
|
|
4000
|
+
return null;
|
|
4001
|
+
};
|
|
4002
|
+
const getResizeActiveRectangle = (board, element) => {
|
|
4003
|
+
const node = MindElement.getNode(element);
|
|
4004
|
+
const rectangle = getRectangleByNode(node);
|
|
4005
|
+
return { x: rectangle.x + rectangle.width - EXTEND_OFFSET, y: rectangle.y, width: EXTEND_OFFSET * 2, height: rectangle.height };
|
|
4006
|
+
};
|
|
3827
4007
|
|
|
3828
4008
|
const withMind = (baseBoard) => {
|
|
3829
4009
|
const board = baseBoard;
|
|
@@ -3930,7 +4110,7 @@ const withMind = (baseBoard) => {
|
|
|
3930
4110
|
MindTransforms.removeElements(board, selectedElements);
|
|
3931
4111
|
deleteFragment(data);
|
|
3932
4112
|
};
|
|
3933
|
-
return
|
|
4113
|
+
return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));
|
|
3934
4114
|
};
|
|
3935
4115
|
|
|
3936
4116
|
class MindEmojiBaseComponent {
|
|
@@ -3984,5 +4164,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
3984
4164
|
* Generated bundle index. Do not edit.
|
|
3985
4165
|
*/
|
|
3986
4166
|
|
|
3987
|
-
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 };
|
|
4167
|
+
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 };
|
|
3988
4168
|
//# sourceMappingURL=plait-mind.mjs.map
|