@plait/core 0.35.0 → 0.36.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.
@@ -281,8 +281,15 @@ const MAC_META = 224;
281
281
 
282
282
  var ResizeCursorClass;
283
283
  (function (ResizeCursorClass) {
284
- ResizeCursorClass["ew-resize"] = "ew-resize";
284
+ ResizeCursorClass["ew"] = "ew-resize";
285
+ ResizeCursorClass["ns"] = "ns-resize";
286
+ ResizeCursorClass["nesw"] = "nesw-resize";
287
+ ResizeCursorClass["nwse"] = "nwse-resize";
285
288
  })(ResizeCursorClass || (ResizeCursorClass = {}));
289
+ var CursorClass;
290
+ (function (CursorClass) {
291
+ CursorClass["crosshair"] = "crosshair";
292
+ })(CursorClass || (CursorClass = {}));
286
293
 
287
294
  const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';
288
295
  const ACTIVE_STROKE_WIDTH = 1;
@@ -870,6 +877,9 @@ function normalizePoint(point) {
870
877
  }
871
878
  : point;
872
879
  }
880
+ const RgbaToHEX = (Rgb, opacity) => {
881
+ return Rgb + Math.floor(opacity * 255).toString(16);
882
+ };
873
883
 
874
884
  /**
875
885
  * Check whether to merge an operation into the previous operation.
@@ -1565,7 +1575,7 @@ function convertImageToBase64(url) {
1565
1575
  * @param clonedNode clone node
1566
1576
  */
1567
1577
  function cloneCSSStyle(nativeNode, clonedNode) {
1568
- const targetStyle = clonedNode.style;
1578
+ const targetStyle = clonedNode?.style;
1569
1579
  if (!targetStyle) {
1570
1580
  return;
1571
1581
  }
@@ -1582,48 +1592,41 @@ function cloneCSSStyle(nativeNode, clonedNode) {
1582
1592
  }
1583
1593
  }
1584
1594
  /**
1585
- * clone svg element
1586
- * @param board board
1587
- * @param options parameter configuration
1588
- * @returns clone svg element
1595
+ * batch clone target styles
1596
+ * @param sourceNode
1597
+ * @param cloneNode
1598
+ * @param inlineStyleClassNames
1589
1599
  */
1590
- async function cloneSvg(board, options) {
1591
- const elementHostBox = getRectangleByElements(board, board.children, true);
1592
- const { width, height, x, y } = elementHostBox;
1593
- const { padding = 4, inlineStyleClassNames } = options;
1594
- const sourceSvg = PlaitBoard.getHost(board);
1595
- const cloneSvgElement = sourceSvg.cloneNode(true);
1596
- cloneSvgElement.style.width = `${width}px`;
1597
- cloneSvgElement.style.height = `${height}px`;
1598
- cloneSvgElement.style.backgroundColor = '';
1599
- cloneSvgElement.setAttribute('width', `${width}`);
1600
- cloneSvgElement.setAttribute('height', `${height}`);
1601
- cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));
1600
+ function batchCloneCSSStyle(sourceNode, cloneNode, inlineStyleClassNames) {
1602
1601
  if (inlineStyleClassNames) {
1603
1602
  const classNames = inlineStyleClassNames + `,.${IMAGE_CONTAINER}`;
1604
- const sourceNodes = Array.from(sourceSvg.querySelectorAll(classNames));
1605
- const cloneNodes = Array.from(cloneSvgElement.querySelectorAll(classNames));
1603
+ const sourceNodes = Array.from(sourceNode.querySelectorAll(classNames));
1604
+ const cloneNodes = Array.from(cloneNode.querySelectorAll(classNames));
1606
1605
  sourceNodes.forEach((node, index) => {
1607
- const cloneNode = cloneNodes[index];
1608
1606
  const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode);
1609
- const cloneChildElements = Array.from(cloneNode.querySelectorAll('*')).filter(isElementNode);
1607
+ const cloneChildElements = Array.from(cloneNodes[index].querySelectorAll('*')).filter(isElementNode);
1610
1608
  sourceNodes.push(...childElements);
1611
1609
  cloneNodes.push(...cloneChildElements);
1612
1610
  });
1613
1611
  // processing styles
1614
1612
  sourceNodes.map((node, index) => {
1615
- const cloneNode = cloneNodes[index];
1616
- cloneCSSStyle(node, cloneNode);
1613
+ cloneCSSStyle(node, cloneNodes[index]);
1617
1614
  });
1618
1615
  }
1619
- // 使用 Promise.all 等待所有异步操作完成
1620
- const sourceImageNodes = Array.from(sourceSvg.querySelectorAll(`.${IMAGE_CONTAINER}`));
1621
- const cloneImageNodes = Array.from(cloneSvgElement.querySelectorAll(`.${IMAGE_CONTAINER}`));
1616
+ }
1617
+ /**
1618
+ * convert images in target nodes in batches
1619
+ * @param sourceNode
1620
+ * @param cloneNode
1621
+ */
1622
+ async function batchConvertImage(sourceNode, cloneNode) {
1623
+ const sourceImageNodes = Array.from(sourceNode.querySelectorAll(`.${IMAGE_CONTAINER}`));
1624
+ const cloneImageNodes = Array.from(cloneNode.querySelectorAll(`.${IMAGE_CONTAINER}`));
1622
1625
  await Promise.all(sourceImageNodes.map((_, index) => {
1623
1626
  return new Promise(resolve => {
1624
- const cloneNode = cloneImageNodes[index];
1627
+ const cloneImageNode = cloneImageNodes[index];
1625
1628
  // processing image
1626
- const image = cloneNode.querySelector('img');
1629
+ const image = cloneImageNode.querySelector('img');
1627
1630
  const url = image?.getAttribute('src');
1628
1631
  if (!url) {
1629
1632
  return resolve(true);
@@ -1634,6 +1637,33 @@ async function cloneSvg(board, options) {
1634
1637
  });
1635
1638
  });
1636
1639
  }));
1640
+ }
1641
+ /**
1642
+ * clone svg element
1643
+ * @param board board
1644
+ * @param options parameter configuration
1645
+ * @returns clone svg element
1646
+ */
1647
+ function cloneSvg(board, elements, rectangle, options) {
1648
+ const { width, height, x, y } = rectangle;
1649
+ const { padding = 4, inlineStyleClassNames } = options;
1650
+ const sourceSvg = PlaitBoard.getHost(board);
1651
+ const selectedGElements = elements.map(value => PlaitElement.getComponent(value).g);
1652
+ const cloneSvgElement = sourceSvg.cloneNode();
1653
+ const newHostElement = PlaitBoard.getElementHost(board).cloneNode();
1654
+ cloneSvgElement.style.width = `${width}px`;
1655
+ cloneSvgElement.style.height = `${height}px`;
1656
+ cloneSvgElement.style.backgroundColor = '';
1657
+ cloneSvgElement.setAttribute('width', `${width}`);
1658
+ cloneSvgElement.setAttribute('height', `${height}`);
1659
+ cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));
1660
+ selectedGElements.forEach((child, i) => {
1661
+ const cloneChild = child.cloneNode(true);
1662
+ batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames);
1663
+ batchConvertImage(child, cloneChild);
1664
+ newHostElement.appendChild(cloneChild);
1665
+ });
1666
+ cloneSvgElement.appendChild(newHostElement);
1637
1667
  return cloneSvgElement;
1638
1668
  }
1639
1669
  /**
@@ -1646,12 +1676,13 @@ async function toImage(board, options) {
1646
1676
  if (!board) {
1647
1677
  return undefined;
1648
1678
  }
1649
- const elementHostBox = getRectangleByElements(board, board.children, true);
1679
+ const elements = options?.elements || findElements(board, { match: () => true, recursion: () => true });
1680
+ const targetRectangle = getRectangleByElements(board, elements, false);
1650
1681
  const { ratio = 2, fillStyle = 'transparent' } = options;
1651
- const { width, height } = elementHostBox;
1682
+ const { width, height } = targetRectangle;
1652
1683
  const ratioWidth = width * ratio;
1653
1684
  const ratioHeight = height * ratio;
1654
- const cloneSvgElement = await cloneSvg(board, options);
1685
+ const cloneSvgElement = await cloneSvg(board, elements, targetRectangle, options);
1655
1686
  const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);
1656
1687
  const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);
1657
1688
  const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;
@@ -2564,7 +2595,7 @@ function withSelection(board) {
2564
2595
  fill: SELECTION_FILL_COLOR,
2565
2596
  fillStyle: 'solid'
2566
2597
  });
2567
- PlaitBoard.getHost(board).append(selectionMovingG);
2598
+ PlaitBoard.getElementActiveHost(board).append(selectionMovingG);
2568
2599
  }
2569
2600
  }
2570
2601
  globalPointerMove(event);
@@ -2682,7 +2713,7 @@ function createSelectionRectangleG(board) {
2682
2713
  fillStyle: 'solid'
2683
2714
  });
2684
2715
  selectionRectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);
2685
- PlaitBoard.getHost(board).append(selectionRectangleG);
2716
+ PlaitBoard.getElementActiveHost(board).append(selectionRectangleG);
2686
2717
  return selectionRectangleG;
2687
2718
  }
2688
2719
  return null;
@@ -3413,7 +3444,7 @@ function withMoving(board) {
3413
3444
  const host = BOARD_TO_HOST.get(board);
3414
3445
  const point = transformPoint(board, toPoint(event.x, event.y, host));
3415
3446
  let movableElements = board.children.filter(item => board.isMovable(item));
3416
- if (movableElements.length && !isPreventTouchMove(board)) {
3447
+ if (!PlaitBoard.isReadonly(board) && movableElements.length && !isPreventTouchMove(board)) {
3417
3448
  startPoint = point;
3418
3449
  const selectedMovableElements = getSelectedElements(board).filter(item => movableElements.includes(item));
3419
3450
  const hitElement = getHitElementByPoint(board, point);
@@ -3442,8 +3473,8 @@ function withMoving(board) {
3442
3473
  const endPoint = transformPoint(board, toPoint(event.x, event.y, host));
3443
3474
  offsetX = endPoint[0] - startPoint[0];
3444
3475
  offsetY = endPoint[1] - startPoint[1];
3445
- const tolerance = 5;
3446
- if (Math.abs(offsetX) > tolerance || Math.abs(offsetY) > tolerance || getMovingElements(board).length > 0) {
3476
+ const distance = distanceBetweenPointAndPoint(...endPoint, ...startPoint);
3477
+ if (distance > PRESS_AND_MOVE_BUFFER || getMovingElements(board).length > 0) {
3447
3478
  throttleRAF(() => {
3448
3479
  if (!activeElementsRectangle) {
3449
3480
  return;
@@ -4395,5 +4426,5 @@ function createModModifierKeys() {
4395
4426
  * Generated bundle index. Do not edit.
4396
4427
  */
4397
4428
 
4398
- export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, 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, 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, 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, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4429
+ export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, 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, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
4399
4430
  //# sourceMappingURL=plait-core.mjs.map