@plait/mind 0.24.0 → 0.25.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/esm2020/drawer/node-image.drawer.mjs +2 -1
- package/esm2020/node.component.mjs +13 -4
- package/esm2020/plugins/with-mind.mjs +9 -7
- package/esm2020/plugins/with-node-image.mjs +23 -2
- package/esm2020/utils/clipboard.mjs +16 -2
- package/esm2020/utils/node/dynamic-width.mjs +5 -2
- package/fesm2015/plait-mind.mjs +59 -10
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +59 -10
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/styles.scss +0 -1
- package/utils/clipboard.d.ts +3 -1
- package/utils/node/dynamic-width.d.ts +2 -2
package/fesm2020/plait-mind.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, 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';
|
|
4
|
+
import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor, DarkThemeColor, StarryThemeColor, RectangleClient, PlaitElement, PlaitPluginKey, idCreator, isNullOrUndefined, Transforms, clearSelectedElement, addSelectedElement, PlaitBoard, Path, PlaitNode, PlaitContextService, 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, CLIP_BOARD_IMAGE_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, isStandardLayout, isHorizontalLogicLayout, isVerticalLogicLayout, getNonAbstractChildren, isLeftLayout, isRightLayout, isTopLayout, isBottomLayout, isHorizontalLayout, getCorrectStartEnd, ConnectingPosition, 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';
|
|
@@ -1119,6 +1119,9 @@ const getNewNodeHeight = (board, element, newNodeDynamicWidth) => {
|
|
|
1119
1119
|
if (height !== newHeight) {
|
|
1120
1120
|
return newHeight;
|
|
1121
1121
|
}
|
|
1122
|
+
if (Math.abs(newHeight / board.viewport.zoom - element.height) > 2) {
|
|
1123
|
+
return newHeight;
|
|
1124
|
+
}
|
|
1122
1125
|
return undefined;
|
|
1123
1126
|
};
|
|
1124
1127
|
|
|
@@ -2999,6 +3002,7 @@ class NodeImageDrawer {
|
|
|
2999
3002
|
this.g = createG();
|
|
3000
3003
|
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
3001
3004
|
this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
3005
|
+
this.foreignObject.style.padding = `6px`;
|
|
3002
3006
|
this.g.append(this.foreignObject);
|
|
3003
3007
|
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType;
|
|
3004
3008
|
if (!componentType) {
|
|
@@ -3064,8 +3068,6 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3064
3068
|
this.textManage = new TextManage(this.board, this.viewContainerRef, () => {
|
|
3065
3069
|
const rect = getTopicRectangleByNode(this.board, this.node);
|
|
3066
3070
|
return rect;
|
|
3067
|
-
}, (point) => {
|
|
3068
|
-
return isHitMindElement(this.board, point, this.element);
|
|
3069
3071
|
}, (textManageRef) => {
|
|
3070
3072
|
const width = textManageRef.width;
|
|
3071
3073
|
const height = textManageRef.height;
|
|
@@ -3204,10 +3206,21 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3204
3206
|
}
|
|
3205
3207
|
editTopic() {
|
|
3206
3208
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: true });
|
|
3209
|
+
// update text max-width when image width greater than topic default max width to cover node topic default max width style
|
|
3210
|
+
const defaultMaxWidth = TOPIC_DEFAULT_MAX_WORD_COUNT * (PlaitMind.isMind(this.element) ? ROOT_TOPIC_FONT_SIZE : TOPIC_FONT_SIZE);
|
|
3211
|
+
let hasMaxWidth = false;
|
|
3212
|
+
if (!this.element.manualWidth && MindElement.hasImage(this.element) && this.element.data.image.width > defaultMaxWidth) {
|
|
3213
|
+
const width = NodeSpace.getNodeDynamicWidth(this.board, this.element);
|
|
3214
|
+
this.textManage.updateWidth(width);
|
|
3215
|
+
hasMaxWidth = true;
|
|
3216
|
+
}
|
|
3207
3217
|
this.textManage.edit((origin) => {
|
|
3208
3218
|
if (origin === ExitOrigin.default) {
|
|
3209
3219
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: false });
|
|
3210
3220
|
}
|
|
3221
|
+
if (hasMaxWidth) {
|
|
3222
|
+
this.textManage.updateWidth(0);
|
|
3223
|
+
}
|
|
3211
3224
|
});
|
|
3212
3225
|
}
|
|
3213
3226
|
ngOnDestroy() {
|
|
@@ -3528,6 +3541,20 @@ const setClipboardData = (data, elements) => {
|
|
|
3528
3541
|
data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
|
|
3529
3542
|
data?.setData(`text/plain`, text);
|
|
3530
3543
|
};
|
|
3544
|
+
const setClipboardDataByImage = (data, image) => {
|
|
3545
|
+
const stringObj = JSON.stringify(image);
|
|
3546
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
3547
|
+
data?.setData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`, encoded);
|
|
3548
|
+
};
|
|
3549
|
+
const getImageItemFromClipboard = (data) => {
|
|
3550
|
+
const encoded = data?.getData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`);
|
|
3551
|
+
let imageItem = null;
|
|
3552
|
+
if (encoded) {
|
|
3553
|
+
const decoded = decodeURIComponent(window.atob(encoded));
|
|
3554
|
+
imageItem = JSON.parse(decoded);
|
|
3555
|
+
}
|
|
3556
|
+
return imageItem;
|
|
3557
|
+
};
|
|
3531
3558
|
const getDataFromClipboard = (data) => {
|
|
3532
3559
|
const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
|
|
3533
3560
|
let nodesData = [];
|
|
@@ -3984,7 +4011,7 @@ const withNodeHoverDetect = (board) => {
|
|
|
3984
4011
|
};
|
|
3985
4012
|
|
|
3986
4013
|
const withNodeImage = (board) => {
|
|
3987
|
-
const { keydown, mousedown, globalMouseup, insertFragment } = board;
|
|
4014
|
+
const { keydown, mousedown, globalMouseup, setFragment, insertFragment, deleteFragment } = board;
|
|
3988
4015
|
board.mousedown = (event) => {
|
|
3989
4016
|
const selectedImageElement = getSelectedImageElement(board);
|
|
3990
4017
|
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
@@ -4033,6 +4060,21 @@ const withNodeImage = (board) => {
|
|
|
4033
4060
|
}
|
|
4034
4061
|
globalMouseup(event);
|
|
4035
4062
|
};
|
|
4063
|
+
board.setFragment = (data) => {
|
|
4064
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
4065
|
+
if (selectedImageElement) {
|
|
4066
|
+
setClipboardDataByImage(data, selectedImageElement.data.image);
|
|
4067
|
+
return;
|
|
4068
|
+
}
|
|
4069
|
+
setFragment(data);
|
|
4070
|
+
};
|
|
4071
|
+
board.deleteFragment = (data) => {
|
|
4072
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
4073
|
+
if (selectedImageElement) {
|
|
4074
|
+
MindTransforms.removeImage(board, selectedImageElement);
|
|
4075
|
+
}
|
|
4076
|
+
deleteFragment(data);
|
|
4077
|
+
};
|
|
4036
4078
|
board.insertFragment = (data, targetPoint) => {
|
|
4037
4079
|
const selectedElements = getSelectedElements(board);
|
|
4038
4080
|
const isSelectedImage = !!getSelectedImageElement(board);
|
|
@@ -4046,6 +4088,11 @@ const withNodeImage = (board) => {
|
|
|
4046
4088
|
return;
|
|
4047
4089
|
}
|
|
4048
4090
|
}
|
|
4091
|
+
const imageItem = getImageItemFromClipboard(data);
|
|
4092
|
+
if (imageItem && (isSingleSelection || isSelectedImage)) {
|
|
4093
|
+
const selectedElement = (selectedElements[0] || getSelectedImageElement(board));
|
|
4094
|
+
MindTransforms.setImage(board, selectedElement, imageItem);
|
|
4095
|
+
}
|
|
4049
4096
|
insertFragment(data, targetPoint);
|
|
4050
4097
|
};
|
|
4051
4098
|
return board;
|
|
@@ -4266,12 +4313,14 @@ const withMind = (baseBoard) => {
|
|
|
4266
4313
|
};
|
|
4267
4314
|
board.deleteFragment = (data) => {
|
|
4268
4315
|
const selectedElements = getSelectedElements(board);
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4316
|
+
if (selectedElements.length) {
|
|
4317
|
+
const deletableElements = getFirstLevelElement(selectedElements).reverse();
|
|
4318
|
+
const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
|
|
4319
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
4320
|
+
const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
|
|
4321
|
+
MindTransforms.setRightNodeCountByRefs(board, refs);
|
|
4322
|
+
MindTransforms.removeElements(board, selectedElements);
|
|
4323
|
+
}
|
|
4275
4324
|
deleteFragment(data);
|
|
4276
4325
|
};
|
|
4277
4326
|
return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));
|