@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.
@@ -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
- const deletableElements = getFirstLevelElement(selectedElements).reverse();
4282
- const abstractRefs = deleteElementHandleAbstract(board, deletableElements);
4283
- MindTransforms.setAbstractsByRefs(board, abstractRefs);
4284
- const refs = deleteElementsHandleRightNodeCount(board, selectedElements);
4285
- MindTransforms.setRightNodeCountByRefs(board, refs);
4286
- MindTransforms.removeElements(board, selectedElements);
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))))))));