@plait/core 0.44.0 → 0.45.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.
@@ -1554,6 +1554,14 @@ const debounce = (func, wait, options) => {
1554
1554
  };
1555
1555
  };
1556
1556
 
1557
+ const IS_DRAGGING = new WeakMap();
1558
+ const isDragging = (board) => {
1559
+ return !!IS_DRAGGING.get(board);
1560
+ };
1561
+ const setDragging = (board, state) => {
1562
+ IS_DRAGGING.set(board, state);
1563
+ };
1564
+
1557
1565
  const getMovingElements = (board) => {
1558
1566
  return BOARD_TO_MOVING_ELEMENT.get(board) || [];
1559
1567
  };
@@ -1564,9 +1572,11 @@ const addMovingElements = (board, elements) => {
1564
1572
  const movingElements = getMovingElements(board);
1565
1573
  const newElements = elements.filter(item => !movingElements.find(movingElement => movingElement.key === item.key));
1566
1574
  cacheMovingElements(board, [...movingElements, ...newElements]);
1575
+ setDragging(board, true);
1567
1576
  };
1568
1577
  const removeMovingElements = (board) => {
1569
1578
  BOARD_TO_MOVING_ELEMENT.delete(board);
1579
+ setDragging(board, false);
1570
1580
  };
1571
1581
  const cacheMovingElements = (board, elements) => {
1572
1582
  BOARD_TO_MOVING_ELEMENT.set(board, elements);
@@ -2596,46 +2606,35 @@ const NodeTransforms = {
2596
2606
  };
2597
2607
 
2598
2608
  function withSelection(board) {
2599
- const { pointerDown, globalPointerMove, globalPointerUp, keyup, onChange, afterChange } = board;
2609
+ const { pointerDown, pointerUp, globalPointerMove, globalPointerUp, keyup, onChange, afterChange } = board;
2600
2610
  let start = null;
2601
2611
  let end = null;
2602
2612
  let selectionMovingG;
2603
2613
  let selectionRectangleG;
2604
2614
  let previousSelectedElements;
2605
- // prevent text from being selected when user pressed main pointer and is moving
2606
- let needPreventNativeSelectionWhenMoving = false;
2607
2615
  let isShift = false;
2616
+ let isTextSelection = false;
2608
2617
  board.pointerDown = (event) => {
2609
- const isHitText = event.target instanceof Element && event.target.closest('.plait-richtext-container');
2610
2618
  if (event.shiftKey) {
2611
- event.preventDefault();
2612
2619
  isShift = true;
2613
2620
  }
2614
2621
  else {
2615
2622
  isShift = false;
2616
2623
  }
2617
- if (!isHitText) {
2618
- needPreventNativeSelectionWhenMoving = true;
2619
- }
2620
- if (!isMainPointer(event)) {
2621
- pointerDown(event);
2622
- return;
2624
+ const isHitText = !!(event.target instanceof Element && event.target.closest('.plait-richtext-container'));
2625
+ isTextSelection = isHitText && PlaitBoard.hasBeenTextEditing(board);
2626
+ // prevent text from being selected
2627
+ if (event.shiftKey && !isTextSelection) {
2628
+ event.preventDefault();
2623
2629
  }
2624
- const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2625
2630
  const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2626
- const selection = { anchor: point, focus: point };
2627
2631
  const hitElement = getHitElementByPoint(board, point);
2628
- const selectedElements = getSelectedElements(board);
2629
- if (!isShift && hitElement && selectedElements.includes(hitElement) && !options.isDisabledSelect) {
2630
- pointerDown(event);
2631
- return;
2632
- }
2632
+ const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2633
2633
  if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !hitElement && options.isMultiple && !options.isDisabledSelect) {
2634
- selectionRectangleG?.remove();
2635
- start = point;
2636
2634
  preventTouchMove(board, event, true);
2635
+ // start rectangle selection
2636
+ start = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2637
2637
  }
2638
- Transforms.setSelection(board, selection);
2639
2638
  pointerDown(event);
2640
2639
  };
2641
2640
  board.keyup = (event) => {
@@ -2645,7 +2644,7 @@ function withSelection(board) {
2645
2644
  keyup(event);
2646
2645
  };
2647
2646
  board.globalPointerMove = (event) => {
2648
- if (needPreventNativeSelectionWhenMoving) {
2647
+ if (!isTextSelection) {
2649
2648
  // prevent text from being selected
2650
2649
  event.preventDefault();
2651
2650
  }
@@ -2672,6 +2671,18 @@ function withSelection(board) {
2672
2671
  }
2673
2672
  globalPointerMove(event);
2674
2673
  };
2674
+ // handle the end of click select
2675
+ board.pointerUp = (event) => {
2676
+ const isSkip = !isMainPointer(event) || isDragging(board) || !PlaitBoard.isPointer(board, PlaitPointerType.selection);
2677
+ if (isSkip) {
2678
+ pointerDown(event);
2679
+ return;
2680
+ }
2681
+ const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
2682
+ const selection = { anchor: point, focus: point };
2683
+ Transforms.setSelection(board, selection);
2684
+ pointerUp(event);
2685
+ };
2675
2686
  board.globalPointerUp = (event) => {
2676
2687
  if (start && end) {
2677
2688
  selectionMovingG?.remove();
@@ -2690,7 +2701,7 @@ function withSelection(board) {
2690
2701
  }
2691
2702
  start = null;
2692
2703
  end = null;
2693
- needPreventNativeSelectionWhenMoving = false;
2704
+ isTextSelection = false;
2694
2705
  preventTouchMove(board, event, false);
2695
2706
  globalPointerUp(event);
2696
2707
  };
@@ -2726,7 +2737,8 @@ function withSelection(board) {
2726
2737
  cacheSelectedElements(board, newSelectedElements);
2727
2738
  }
2728
2739
  else {
2729
- cacheSelectedElements(board, elements);
2740
+ const newSelectedElements = [...elements];
2741
+ cacheSelectedElements(board, newSelectedElements);
2730
2742
  }
2731
2743
  const newElements = getSelectedElements(board);
2732
2744
  previousSelectedElements = newElements;
@@ -2797,10 +2809,12 @@ function isSelectionMoving(board) {
2797
2809
  function setSelectionMoving(board) {
2798
2810
  PlaitBoard.getBoardContainer(board).classList.add('selection-moving');
2799
2811
  BOARD_TO_IS_SELECTION_MOVING.set(board, true);
2812
+ setDragging(board, true);
2800
2813
  }
2801
2814
  function clearSelectionMoving(board) {
2802
2815
  PlaitBoard.getBoardContainer(board).classList.remove('selection-moving');
2803
2816
  BOARD_TO_IS_SELECTION_MOVING.delete(board);
2817
+ setDragging(board, false);
2804
2818
  }
2805
2819
  function createSelectionRectangleG(board) {
2806
2820
  const elements = getSelectedElements(board);
@@ -2963,6 +2977,7 @@ function createBoard(children, options) {
2963
2977
  CoreTransforms.removeElements(board, elements);
2964
2978
  },
2965
2979
  getDeletedFragment: (data) => data,
2980
+ getRelatedFragment: (data) => data,
2966
2981
  drawElement: (context) => [],
2967
2982
  redrawElement: (context, previousContext) => { },
2968
2983
  destroyElement: (context) => { },
@@ -3562,7 +3577,8 @@ function withMoving(board) {
3562
3577
  const hitElement = getHitElementByPoint(board, point);
3563
3578
  if (hitElement && movableElements.includes(hitElement)) {
3564
3579
  if (selectedMovableElements.includes(hitElement)) {
3565
- activeElements = selectedMovableElements;
3580
+ const relatedElements = board.getRelatedFragment([]);
3581
+ activeElements = [...selectedMovableElements, ...relatedElements];
3566
3582
  }
3567
3583
  else {
3568
3584
  activeElements = [hitElement];
@@ -4543,5 +4559,5 @@ function createModModifierKeys() {
4543
4559
  * Generated bundle index. Do not edit.
4544
4560
  */
4545
4561
 
4546
- export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, toSVGScreenPoint, toScreenPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4562
+ export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_DRAGGING, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setDragging, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, toSVGScreenPoint, toScreenPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4547
4563
  //# sourceMappingURL=plait-core.mjs.map