@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/fesm2015/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';
|
|
@@ -1081,6 +1081,9 @@ const getNewNodeHeight = (board, element, newNodeDynamicWidth) => {
|
|
|
1081
1081
|
if (height !== newHeight) {
|
|
1082
1082
|
return newHeight;
|
|
1083
1083
|
}
|
|
1084
|
+
if (Math.abs(newHeight / board.viewport.zoom - element.height) > 2) {
|
|
1085
|
+
return newHeight;
|
|
1086
|
+
}
|
|
1084
1087
|
return undefined;
|
|
1085
1088
|
};
|
|
1086
1089
|
|
|
@@ -2939,6 +2942,7 @@ class NodeImageDrawer {
|
|
|
2939
2942
|
this.g = createG();
|
|
2940
2943
|
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
2941
2944
|
this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
2945
|
+
this.foreignObject.style.padding = `6px`;
|
|
2942
2946
|
this.g.append(this.foreignObject);
|
|
2943
2947
|
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType;
|
|
2944
2948
|
if (!componentType) {
|
|
@@ -3005,8 +3009,6 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3005
3009
|
this.textManage = new TextManage(this.board, this.viewContainerRef, () => {
|
|
3006
3010
|
const rect = getTopicRectangleByNode(this.board, this.node);
|
|
3007
3011
|
return rect;
|
|
3008
|
-
}, (point) => {
|
|
3009
|
-
return isHitMindElement(this.board, point, this.element);
|
|
3010
3012
|
}, (textManageRef) => {
|
|
3011
3013
|
const width = textManageRef.width;
|
|
3012
3014
|
const height = textManageRef.height;
|
|
@@ -3145,10 +3147,21 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3145
3147
|
}
|
|
3146
3148
|
editTopic() {
|
|
3147
3149
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: true });
|
|
3150
|
+
// update text max-width when image width greater than topic default max width to cover node topic default max width style
|
|
3151
|
+
const defaultMaxWidth = TOPIC_DEFAULT_MAX_WORD_COUNT * (PlaitMind.isMind(this.element) ? ROOT_TOPIC_FONT_SIZE : TOPIC_FONT_SIZE);
|
|
3152
|
+
let hasMaxWidth = false;
|
|
3153
|
+
if (!this.element.manualWidth && MindElement.hasImage(this.element) && this.element.data.image.width > defaultMaxWidth) {
|
|
3154
|
+
const width = NodeSpace.getNodeDynamicWidth(this.board, this.element);
|
|
3155
|
+
this.textManage.updateWidth(width);
|
|
3156
|
+
hasMaxWidth = true;
|
|
3157
|
+
}
|
|
3148
3158
|
this.textManage.edit((origin) => {
|
|
3149
3159
|
if (origin === ExitOrigin.default) {
|
|
3150
3160
|
this.activeDrawer.draw(this.element, this.g, { selected: this.selected, isEditing: false });
|
|
3151
3161
|
}
|
|
3162
|
+
if (hasMaxWidth) {
|
|
3163
|
+
this.textManage.updateWidth(0);
|
|
3164
|
+
}
|
|
3152
3165
|
});
|
|
3153
3166
|
}
|
|
3154
3167
|
ngOnDestroy() {
|
|
@@ -3463,6 +3476,20 @@ const setClipboardData = (data, elements) => {
|
|
|
3463
3476
|
data === null || data === void 0 ? void 0 : data.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
|
|
3464
3477
|
data === null || data === void 0 ? void 0 : data.setData(`text/plain`, text);
|
|
3465
3478
|
};
|
|
3479
|
+
const setClipboardDataByImage = (data, image) => {
|
|
3480
|
+
const stringObj = JSON.stringify(image);
|
|
3481
|
+
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
3482
|
+
data === null || data === void 0 ? void 0 : data.setData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`, encoded);
|
|
3483
|
+
};
|
|
3484
|
+
const getImageItemFromClipboard = (data) => {
|
|
3485
|
+
const encoded = data === null || data === void 0 ? void 0 : data.getData(`application/${CLIP_BOARD_IMAGE_FORMAT_KEY}`);
|
|
3486
|
+
let imageItem = null;
|
|
3487
|
+
if (encoded) {
|
|
3488
|
+
const decoded = decodeURIComponent(window.atob(encoded));
|
|
3489
|
+
imageItem = JSON.parse(decoded);
|
|
3490
|
+
}
|
|
3491
|
+
return imageItem;
|
|
3492
|
+
};
|
|
3466
3493
|
const getDataFromClipboard = (data) => {
|
|
3467
3494
|
const encoded = data === null || data === void 0 ? void 0 : data.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
|
|
3468
3495
|
let nodesData = [];
|
|
@@ -3916,7 +3943,7 @@ const withNodeHoverDetect = (board) => {
|
|
|
3916
3943
|
};
|
|
3917
3944
|
|
|
3918
3945
|
const withNodeImage = (board) => {
|
|
3919
|
-
const { keydown, mousedown, globalMouseup, insertFragment } = board;
|
|
3946
|
+
const { keydown, mousedown, globalMouseup, setFragment, insertFragment, deleteFragment } = board;
|
|
3920
3947
|
board.mousedown = (event) => {
|
|
3921
3948
|
const selectedImageElement = getSelectedImageElement(board);
|
|
3922
3949
|
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
@@ -3965,6 +3992,21 @@ const withNodeImage = (board) => {
|
|
|
3965
3992
|
}
|
|
3966
3993
|
globalMouseup(event);
|
|
3967
3994
|
};
|
|
3995
|
+
board.setFragment = (data) => {
|
|
3996
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
3997
|
+
if (selectedImageElement) {
|
|
3998
|
+
setClipboardDataByImage(data, selectedImageElement.data.image);
|
|
3999
|
+
return;
|
|
4000
|
+
}
|
|
4001
|
+
setFragment(data);
|
|
4002
|
+
};
|
|
4003
|
+
board.deleteFragment = (data) => {
|
|
4004
|
+
const selectedImageElement = getSelectedImageElement(board);
|
|
4005
|
+
if (selectedImageElement) {
|
|
4006
|
+
MindTransforms.removeImage(board, selectedImageElement);
|
|
4007
|
+
}
|
|
4008
|
+
deleteFragment(data);
|
|
4009
|
+
};
|
|
3968
4010
|
board.insertFragment = (data, targetPoint) => {
|
|
3969
4011
|
const selectedElements = getSelectedElements(board);
|
|
3970
4012
|
const isSelectedImage = !!getSelectedImageElement(board);
|
|
@@ -3978,6 +4020,11 @@ const withNodeImage = (board) => {
|
|
|
3978
4020
|
return;
|
|
3979
4021
|
}
|
|
3980
4022
|
}
|
|
4023
|
+
const imageItem = getImageItemFromClipboard(data);
|
|
4024
|
+
if (imageItem && (isSingleSelection || isSelectedImage)) {
|
|
4025
|
+
const selectedElement = (selectedElements[0] || getSelectedImageElement(board));
|
|
4026
|
+
MindTransforms.setImage(board, selectedElement, imageItem);
|
|
4027
|
+
}
|
|
3981
4028
|
insertFragment(data, targetPoint);
|
|
3982
4029
|
};
|
|
3983
4030
|
return board;
|
|
@@ -4198,12 +4245,14 @@ const withMind = (baseBoard) => {
|
|
|
4198
4245
|
};
|
|
4199
4246
|
board.deleteFragment = (data) => {
|
|
4200
4247
|
const selectedElements = getSelectedElements(board);
|
|
4201
|
-
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
|
|
4206
|
-
|
|
4248
|
+
if (selectedElements.length) {
|
|
4249
|
+
const deletableElements = getFirstLevelElement(selectedElements).reverse();
|
|
4250
|
+
const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
|
|
4251
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
4252
|
+
const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
|
|
4253
|
+
MindTransforms.setRightNodeCountByRefs(board, refs);
|
|
4254
|
+
MindTransforms.removeElements(board, selectedElements);
|
|
4255
|
+
}
|
|
4207
4256
|
deleteFragment(data);
|
|
4208
4257
|
};
|
|
4209
4258
|
return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));
|