@plait/mind 0.24.1 → 0.26.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/plugins/with-abstract-resize.mjs +3 -3
- package/esm2020/plugins/with-mind.mjs +9 -7
- package/esm2020/plugins/with-node-dnd.mjs +3 -3
- package/esm2020/plugins/with-node-image.mjs +23 -2
- package/esm2020/plugins/with-node-resize.mjs +5 -3
- package/esm2020/utils/clipboard.mjs +16 -2
- package/fesm2015/plait-mind.mjs +53 -14
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +53 -14
- 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/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';
|
|
@@ -3002,6 +3002,7 @@ class NodeImageDrawer {
|
|
|
3002
3002
|
this.g = createG();
|
|
3003
3003
|
const foreignRectangle = getImageForeignRectangle(this.board, element);
|
|
3004
3004
|
this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
|
|
3005
|
+
this.foreignObject.style.padding = `6px`;
|
|
3005
3006
|
this.g.append(this.foreignObject);
|
|
3006
3007
|
const componentType = this.board.getPluginOptions(WithMindPluginKey).imageComponentType;
|
|
3007
3008
|
if (!componentType) {
|
|
@@ -3357,14 +3358,14 @@ const withNodeDnd = (board) => {
|
|
|
3357
3358
|
}
|
|
3358
3359
|
}
|
|
3359
3360
|
if (activeElements.length) {
|
|
3360
|
-
// prevent text from being selected
|
|
3361
|
-
event.preventDefault();
|
|
3362
3361
|
correspondingElements = getOverallAbstracts(board, activeElements);
|
|
3363
3362
|
}
|
|
3364
3363
|
mousedown(event);
|
|
3365
3364
|
};
|
|
3366
3365
|
board.mousemove = (event) => {
|
|
3367
3366
|
if (!board.options.readonly && activeElements?.length && startPoint) {
|
|
3367
|
+
// prevent text from being selected
|
|
3368
|
+
event.preventDefault();
|
|
3368
3369
|
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
3369
3370
|
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
3370
3371
|
if (distance < DRAG_MOVE_BUFFER) {
|
|
@@ -3540,6 +3541,20 @@ const setClipboardData = (data, elements) => {
|
|
|
3540
3541
|
data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
|
|
3541
3542
|
data?.setData(`text/plain`, text);
|
|
3542
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
|
+
};
|
|
3543
3558
|
const getDataFromClipboard = (data) => {
|
|
3544
3559
|
const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
|
|
3545
3560
|
let nodesData = [];
|
|
@@ -3623,8 +3638,6 @@ const withAbstract = (board) => {
|
|
|
3623
3638
|
return abstractHandlePosition;
|
|
3624
3639
|
});
|
|
3625
3640
|
if (activeAbstractElement) {
|
|
3626
|
-
// prevent text from being selected
|
|
3627
|
-
event.preventDefault();
|
|
3628
3641
|
if (newBoard?.onAbstractResize) {
|
|
3629
3642
|
newBoard.onAbstractResize(AbstractResizeState.start);
|
|
3630
3643
|
}
|
|
@@ -3639,6 +3652,8 @@ const withAbstract = (board) => {
|
|
|
3639
3652
|
const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
|
|
3640
3653
|
touchedAbstract = handleTouchedAbstract(board, touchedAbstract, endPoint);
|
|
3641
3654
|
if (abstractHandlePosition && activeAbstractElement) {
|
|
3655
|
+
// prevent text from being selected
|
|
3656
|
+
event.preventDefault();
|
|
3642
3657
|
const abstractComponent = PlaitElement.getComponent(activeAbstractElement);
|
|
3643
3658
|
const element = abstractComponent.element;
|
|
3644
3659
|
const nodeLayout = MindQueries.getCorrectLayoutByElement(board, activeAbstractElement);
|
|
@@ -3996,7 +4011,7 @@ const withNodeHoverDetect = (board) => {
|
|
|
3996
4011
|
};
|
|
3997
4012
|
|
|
3998
4013
|
const withNodeImage = (board) => {
|
|
3999
|
-
const { keydown, mousedown, globalMouseup, insertFragment } = board;
|
|
4014
|
+
const { keydown, mousedown, globalMouseup, setFragment, insertFragment, deleteFragment } = board;
|
|
4000
4015
|
board.mousedown = (event) => {
|
|
4001
4016
|
const selectedImageElement = getSelectedImageElement(board);
|
|
4002
4017
|
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
@@ -4045,6 +4060,21 @@ const withNodeImage = (board) => {
|
|
|
4045
4060
|
}
|
|
4046
4061
|
globalMouseup(event);
|
|
4047
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
|
+
};
|
|
4048
4078
|
board.insertFragment = (data, targetPoint) => {
|
|
4049
4079
|
const selectedElements = getSelectedElements(board);
|
|
4050
4080
|
const isSelectedImage = !!getSelectedImageElement(board);
|
|
@@ -4058,6 +4088,11 @@ const withNodeImage = (board) => {
|
|
|
4058
4088
|
return;
|
|
4059
4089
|
}
|
|
4060
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
|
+
}
|
|
4061
4096
|
insertFragment(data, targetPoint);
|
|
4062
4097
|
};
|
|
4063
4098
|
return board;
|
|
@@ -4071,8 +4106,6 @@ const withNodeResize = (board) => {
|
|
|
4071
4106
|
board.mousedown = (event) => {
|
|
4072
4107
|
if (targetElement) {
|
|
4073
4108
|
startPoint = [event.x, event.y];
|
|
4074
|
-
// prevent text from being selected
|
|
4075
|
-
event.preventDefault();
|
|
4076
4109
|
return;
|
|
4077
4110
|
}
|
|
4078
4111
|
mousedown(event);
|
|
@@ -4083,6 +4116,8 @@ const withNodeResize = (board) => {
|
|
|
4083
4116
|
return;
|
|
4084
4117
|
}
|
|
4085
4118
|
if (startPoint && targetElement && !isMindNodeResizing(board)) {
|
|
4119
|
+
// prevent text from being selected
|
|
4120
|
+
event.preventDefault();
|
|
4086
4121
|
const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
4087
4122
|
const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
4088
4123
|
if (distance > PRESS_AND_MOVE_BUFFER) {
|
|
@@ -4097,6 +4132,8 @@ const withNodeResize = (board) => {
|
|
|
4097
4132
|
}
|
|
4098
4133
|
}
|
|
4099
4134
|
if (isMindNodeResizing(board) && startPoint && targetElementRef) {
|
|
4135
|
+
// prevent text from being selected
|
|
4136
|
+
event.preventDefault();
|
|
4100
4137
|
throttleRAF(() => {
|
|
4101
4138
|
if (!startPoint) {
|
|
4102
4139
|
return;
|
|
@@ -4278,12 +4315,14 @@ const withMind = (baseBoard) => {
|
|
|
4278
4315
|
};
|
|
4279
4316
|
board.deleteFragment = (data) => {
|
|
4280
4317
|
const selectedElements = getSelectedElements(board);
|
|
4281
|
-
|
|
4282
|
-
|
|
4283
|
-
|
|
4284
|
-
|
|
4285
|
-
|
|
4286
|
-
|
|
4318
|
+
if (selectedElements.length) {
|
|
4319
|
+
const deletableElements = getFirstLevelElement(selectedElements).reverse();
|
|
4320
|
+
const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
|
|
4321
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
4322
|
+
const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
|
|
4323
|
+
MindTransforms.setRightNodeCountByRefs(board, refs);
|
|
4324
|
+
MindTransforms.removeElements(board, selectedElements);
|
|
4325
|
+
}
|
|
4287
4326
|
deleteFragment(data);
|
|
4288
4327
|
};
|
|
4289
4328
|
return withNodeResize(withNodeImage(withNodeHoverDetect(withMindHotkey(withMindExtend(withCreateMind(withAbstract(withNodeDnd(board))))))));
|