@plait/core 0.39.0 → 0.41.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.
@@ -14,6 +14,7 @@ const NODE_TO_INDEX = new WeakMap();
14
14
  const NODE_TO_PARENT = new WeakMap();
15
15
  const IS_TEXT_EDITABLE = new WeakMap();
16
16
  const BOARD_TO_ON_CHANGE = new WeakMap();
17
+ const BOARD_TO_AFTER_CHANGE = new WeakMap();
17
18
  const BOARD_TO_COMPONENT = new WeakMap();
18
19
  const BOARD_TO_ROUGH_SVG = new WeakMap();
19
20
  const BOARD_TO_HOST = new WeakMap();
@@ -325,10 +326,27 @@ const POINTER_BUTTON = {
325
326
  const PRESS_AND_MOVE_BUFFER = 3;
326
327
 
327
328
  const NS = 'http://www.w3.org/2000/svg';
328
- function toPoint(x, y, container) {
329
- const rect = container.getBoundingClientRect();
329
+ /**
330
+ * Get the screen coordinates starting from the upper left corner of the svg element (based on the svg screen coordinate system)
331
+ * @param x screen x
332
+ * @param y screen x
333
+ * @returns
334
+ */
335
+ function toPoint(x, y, svg) {
336
+ const rect = svg.getBoundingClientRect();
330
337
  return [x - rect.x, y - rect.y];
331
338
  }
339
+ /**
340
+ * `toPoint` reverse processing
341
+ * Get the screen coordinate starting from the upper left corner of the browser window (based on the screen coordinate system)
342
+ * @param point screen coordinates based on the upper left corner of the svg
343
+ * @returns
344
+ */
345
+ function toScreenPoint(board, point) {
346
+ const host = PlaitBoard.getHost(board);
347
+ const rect = host.getBoundingClientRect();
348
+ return [point[0] + rect.x, point[1] + rect.y];
349
+ }
332
350
  function createG() {
333
351
  const newG = document.createElementNS(NS, 'g');
334
352
  return newG;
@@ -568,8 +586,8 @@ const RectangleClient = {
568
586
  };
569
587
  },
570
588
  getGapCenter(rectangle1, rectangle2, isHorizontal) {
571
- const axis = isHorizontal ? 'y' : 'x';
572
- const side = isHorizontal ? 'height' : 'width';
589
+ const axis = isHorizontal ? 'x' : 'y';
590
+ const side = isHorizontal ? 'width' : 'height';
573
591
  const align = [rectangle1[axis], rectangle1[axis] + rectangle1[side], rectangle2[axis], rectangle2[axis] + rectangle2[side]];
574
592
  const sortArr = align.sort((a, b) => a - b);
575
593
  return (sortArr[1] + sortArr[2]) / 2;
@@ -651,12 +669,14 @@ function distanceBetweenPointAndSegments(points, point) {
651
669
  }
652
670
  return distance;
653
671
  }
654
- function getNearestPointBetweenPointAndSegments(point, points) {
672
+ function getNearestPointBetweenPointAndSegments(point, points, isClose = true) {
655
673
  const len = points.length;
656
674
  let distance = Infinity;
657
675
  let result = point;
658
676
  for (let i = 0; i < len; i++) {
659
677
  const p = points[i];
678
+ if (i === len - 1 && !isClose)
679
+ continue;
660
680
  const p2 = i === len - 1 ? points[0] : points[i + 1];
661
681
  const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);
662
682
  if (currentDistance < distance) {
@@ -1303,6 +1323,13 @@ const BoardTransforms = {
1303
1323
 
1304
1324
  const IS_FROM_SCROLLING = new WeakMap();
1305
1325
  const IS_FROM_VIEWPORT_CHANGE = new WeakMap();
1326
+ function toSVGScreenPoint(board, point) {
1327
+ const { zoom } = board.viewport;
1328
+ const viewBox = getViewBox(board, zoom);
1329
+ const x = (point[0] - viewBox[0]) * zoom;
1330
+ const y = (point[1] - viewBox[1]) * zoom;
1331
+ return [x, y];
1332
+ }
1306
1333
  function getViewportContainerRect(board) {
1307
1334
  const { hideScrollbar } = board.options;
1308
1335
  const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
@@ -1390,17 +1417,17 @@ function updateViewportOffset(board) {
1390
1417
  if (!origination) {
1391
1418
  return;
1392
1419
  }
1393
- const { zoom } = board.viewport;
1394
- const viewBox = getViewBox(board, zoom);
1395
- const scrollLeft = (origination[0] - viewBox[0]) * zoom;
1396
- const scrollTop = (origination[1] - viewBox[1]) * zoom;
1420
+ const [scrollLeft, scrollTop] = toSVGScreenPoint(board, origination);
1397
1421
  updateViewportContainerScroll(board, scrollLeft, scrollTop);
1398
1422
  }
1399
1423
  function updateViewportContainerScroll(board, left, top, isFromViewportChange = true) {
1400
1424
  const viewportContainer = PlaitBoard.getViewportContainer(board);
1401
1425
  const previousScrollLeft = viewportContainer.scrollLeft;
1402
1426
  const previousScrollTop = viewportContainer.scrollTop;
1403
- if (viewportContainer.scrollLeft !== left || viewportContainer.scrollTop !== top) {
1427
+ // scrollTop assign 11.8 will get 11.5 in chrome
1428
+ // scrollTop assign 11.8 will get 11 in firefox, safari
1429
+ // scrollTop assign 11.4 will get 11 in chrome, firefox, safari
1430
+ if (viewportContainer.scrollLeft !== Math.floor(left) || viewportContainer.scrollTop !== Math.floor(top)) {
1404
1431
  viewportContainer.scrollLeft = left;
1405
1432
  viewportContainer.scrollTop = top;
1406
1433
  const offsetWidth = viewportContainer.offsetWidth;
@@ -1424,7 +1451,7 @@ function updateViewportByScrolling(board, scrollLeft, scrollTop) {
1424
1451
  const zoom = board.viewport.zoom;
1425
1452
  const viewBox = getViewBox(board, zoom);
1426
1453
  const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]];
1427
- if (Point.isEquals(origination, board.viewport.origination)) {
1454
+ if (Point.isEquals(origination, getViewportOrigination(board))) {
1428
1455
  return;
1429
1456
  }
1430
1457
  BoardTransforms.updateViewport(board, origination);
@@ -1509,7 +1536,9 @@ const debounce = (func, wait, options) => {
1509
1536
  }
1510
1537
  else {
1511
1538
  if (options?.leading) {
1512
- func();
1539
+ timer(0).subscribe(() => {
1540
+ func();
1541
+ });
1513
1542
  }
1514
1543
  timerSubscription = timer(wait).subscribe();
1515
1544
  }
@@ -1551,7 +1580,7 @@ function isElementNode(node) {
1551
1580
  function loadImage(src) {
1552
1581
  return new Promise((resolve, reject) => {
1553
1582
  const img = new Image();
1554
- img.crossOrigin = 'anonymous';
1583
+ img.crossOrigin = 'Anonymous';
1555
1584
  img.onload = () => resolve(img);
1556
1585
  img.onerror = () => reject(new Error('Failed to load image'));
1557
1586
  img.src = src;
@@ -1666,7 +1695,7 @@ async function batchConvertImage(sourceNode, cloneNode) {
1666
1695
  * @param options parameter configuration
1667
1696
  * @returns clone svg element
1668
1697
  */
1669
- function cloneSvg(board, elements, rectangle, options) {
1698
+ async function cloneSvg(board, elements, rectangle, options) {
1670
1699
  const { width, height, x, y } = rectangle;
1671
1700
  const { padding = 4, inlineStyleClassNames } = options;
1672
1701
  const sourceSvg = PlaitBoard.getHost(board);
@@ -1679,12 +1708,12 @@ function cloneSvg(board, elements, rectangle, options) {
1679
1708
  cloneSvgElement.setAttribute('width', `${width}`);
1680
1709
  cloneSvgElement.setAttribute('height', `${height}`);
1681
1710
  cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));
1682
- selectedGElements.forEach((child, i) => {
1711
+ await Promise.all(selectedGElements.map(async (child, i) => {
1683
1712
  const cloneChild = child.cloneNode(true);
1684
1713
  batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames);
1685
- batchConvertImage(child, cloneChild);
1714
+ await batchConvertImage(child, cloneChild);
1686
1715
  newHostElement.appendChild(cloneChild);
1687
- });
1716
+ }));
1688
1717
  cloneSvgElement.appendChild(newHostElement);
1689
1718
  return cloneSvgElement;
1690
1719
  }
@@ -2557,7 +2586,7 @@ const NodeTransforms = {
2557
2586
  };
2558
2587
 
2559
2588
  function withSelection(board) {
2560
- const { pointerDown, globalPointerMove, globalPointerUp, onChange, keyup } = board;
2589
+ const { pointerDown, globalPointerMove, globalPointerUp, keyup, onChange, afterChange } = board;
2561
2590
  let start = null;
2562
2591
  let end = null;
2563
2592
  let selectionMovingG;
@@ -2656,10 +2685,6 @@ function withSelection(board) {
2656
2685
  globalPointerUp(event);
2657
2686
  };
2658
2687
  board.onChange = () => {
2659
- if (PlaitBoard.isReadonly(board)) {
2660
- onChange();
2661
- return;
2662
- }
2663
2688
  const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2664
2689
  if (options.isDisabledSelect) {
2665
2690
  clearSelectedElement(board);
@@ -2670,59 +2695,63 @@ function withSelection(board) {
2670
2695
  removeSelectedElement(board, op.node);
2671
2696
  }
2672
2697
  });
2673
- // calc selected elements entry
2674
- if (board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect) {
2675
- const isSetSelection = board.operations.find(value => value.type === 'set_selection');
2698
+ if (isHandleSelection(board) && isSetSelectionOperation(board)) {
2676
2699
  try {
2677
- if (isSetSelection) {
2678
- selectionRectangleG?.remove();
2679
- const temporaryElements = getTemporaryElements(board);
2680
- let elements = temporaryElements ? temporaryElements : getHitElementsBySelection(board);
2681
- if (!options.isMultiple && elements.length > 1) {
2682
- elements = [elements[0]];
2683
- }
2684
- if (isShift && board.selection && Selection.isCollapsed(board.selection)) {
2685
- const newSelectedElements = [...getSelectedElements(board)];
2686
- elements.forEach(element => {
2687
- if (newSelectedElements.includes(element)) {
2688
- newSelectedElements.splice(newSelectedElements.indexOf(element), 1);
2689
- }
2690
- else {
2691
- newSelectedElements.push(element);
2692
- }
2693
- });
2694
- cacheSelectedElements(board, newSelectedElements);
2695
- }
2696
- else {
2697
- cacheSelectedElements(board, elements);
2698
- }
2699
- const newElements = getSelectedElements(board);
2700
- previousSelectedElements = newElements;
2701
- deleteTemporaryElements(board);
2702
- if (!isSelectionMoving(board) && newElements.length > 1) {
2703
- selectionRectangleG = createSelectionRectangleG(board);
2704
- }
2700
+ selectionRectangleG?.remove();
2701
+ const temporaryElements = getTemporaryElements(board);
2702
+ let elements = temporaryElements ? temporaryElements : getHitElementsBySelection(board);
2703
+ if (!options.isMultiple && elements.length > 1) {
2704
+ elements = [elements[0]];
2705
2705
  }
2706
- else {
2707
- const currentSelectedElements = getSelectedElements(board);
2708
- if (currentSelectedElements.length && currentSelectedElements.length > 1) {
2709
- if (currentSelectedElements.length !== previousSelectedElements.length ||
2710
- currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
2711
- selectionRectangleG?.remove();
2712
- selectionRectangleG = createSelectionRectangleG(board);
2713
- previousSelectedElements = currentSelectedElements;
2706
+ if (isShift && board.selection && Selection.isCollapsed(board.selection)) {
2707
+ const newSelectedElements = [...getSelectedElements(board)];
2708
+ elements.forEach(element => {
2709
+ if (newSelectedElements.includes(element)) {
2710
+ newSelectedElements.splice(newSelectedElements.indexOf(element), 1);
2714
2711
  }
2715
- }
2716
- else {
2712
+ else {
2713
+ newSelectedElements.push(element);
2714
+ }
2715
+ });
2716
+ cacheSelectedElements(board, newSelectedElements);
2717
+ }
2718
+ else {
2719
+ cacheSelectedElements(board, elements);
2720
+ }
2721
+ const newElements = getSelectedElements(board);
2722
+ previousSelectedElements = newElements;
2723
+ deleteTemporaryElements(board);
2724
+ if (!isSelectionMoving(board) && newElements.length > 1) {
2725
+ selectionRectangleG = createSelectionRectangleG(board);
2726
+ }
2727
+ }
2728
+ catch (error) {
2729
+ console.error(error);
2730
+ }
2731
+ }
2732
+ onChange();
2733
+ };
2734
+ board.afterChange = () => {
2735
+ if (isHandleSelection(board) && !isSetSelectionOperation(board)) {
2736
+ try {
2737
+ const currentSelectedElements = getSelectedElements(board);
2738
+ if (currentSelectedElements.length && currentSelectedElements.length > 1) {
2739
+ if (currentSelectedElements.length !== previousSelectedElements.length ||
2740
+ currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
2717
2741
  selectionRectangleG?.remove();
2742
+ selectionRectangleG = createSelectionRectangleG(board);
2743
+ previousSelectedElements = currentSelectedElements;
2718
2744
  }
2719
2745
  }
2746
+ else {
2747
+ selectionRectangleG?.remove();
2748
+ }
2720
2749
  }
2721
2750
  catch (error) {
2722
2751
  console.error(error);
2723
2752
  }
2724
2753
  }
2725
- onChange();
2754
+ afterChange();
2726
2755
  };
2727
2756
  board.setPluginOptions(PlaitPluginKey.withSelection, {
2728
2757
  isMultiple: true,
@@ -2730,6 +2759,13 @@ function withSelection(board) {
2730
2759
  });
2731
2760
  return board;
2732
2761
  }
2762
+ function isHandleSelection(board) {
2763
+ const options = board.getPluginOptions(PlaitPluginKey.withSelection);
2764
+ return board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect && !PlaitBoard.isReadonly(board);
2765
+ }
2766
+ function isSetSelectionOperation(board) {
2767
+ return !!board.operations.find(value => value.type === 'set_selection');
2768
+ }
2733
2769
  function getTemporaryElements(board) {
2734
2770
  const ref = BOARD_TO_TEMPORARY_ELEMENTS.get(board);
2735
2771
  if (ref) {
@@ -2868,6 +2904,7 @@ function createBoard(children, options) {
2868
2904
  Promise.resolve().then(() => {
2869
2905
  FLUSHING.set(board, false);
2870
2906
  board.onChange();
2907
+ board.afterChange();
2871
2908
  board.operations = [];
2872
2909
  });
2873
2910
  }
@@ -2898,6 +2935,7 @@ function createBoard(children, options) {
2898
2935
  return refs;
2899
2936
  },
2900
2937
  onChange: () => { },
2938
+ afterChange: () => { },
2901
2939
  mousedown: (event) => { },
2902
2940
  mousemove: (event) => { },
2903
2941
  mouseleave: (event) => { },
@@ -2934,13 +2972,13 @@ function createBoard(children, options) {
2934
2972
  pointerLeave: pointer => { },
2935
2973
  globalPointerMove: pointer => { },
2936
2974
  globalPointerUp: pointer => { },
2937
- isImageBindingAllowed: (element) => false,
2975
+ isImageBindingAllowed: (element) => false
2938
2976
  };
2939
2977
  return board;
2940
2978
  }
2941
2979
 
2942
2980
  function withBoard(board) {
2943
- const { onChange } = board;
2981
+ const { onChange, afterChange } = board;
2944
2982
  board.onChange = () => {
2945
2983
  const onContextChange = BOARD_TO_ON_CHANGE.get(board);
2946
2984
  if (onContextChange) {
@@ -2948,6 +2986,13 @@ function withBoard(board) {
2948
2986
  }
2949
2987
  onChange();
2950
2988
  };
2989
+ board.afterChange = () => {
2990
+ const afterContextChange = BOARD_TO_AFTER_CHANGE.get(board);
2991
+ if (afterContextChange) {
2992
+ afterContextChange();
2993
+ }
2994
+ afterChange();
2995
+ };
2951
2996
  return board;
2952
2997
  }
2953
2998
 
@@ -3996,8 +4041,10 @@ class PlaitBoardComponent {
3996
4041
  activeHost: elementActiveHost
3997
4042
  });
3998
4043
  BOARD_TO_ON_CHANGE.set(this.board, () => {
4044
+ this.update();
4045
+ });
4046
+ BOARD_TO_AFTER_CHANGE.set(this.board, () => {
3999
4047
  this.ngZone.run(() => {
4000
- this.detect();
4001
4048
  const changeEvent = {
4002
4049
  children: this.board.children,
4003
4050
  operations: this.board.operations,
@@ -4014,7 +4061,7 @@ class PlaitBoardComponent {
4014
4061
  ngAfterContentInit() {
4015
4062
  this.initializeIslands();
4016
4063
  }
4017
- detect() {
4064
+ update() {
4018
4065
  this.effect = {};
4019
4066
  this.cdr.detectChanges();
4020
4067
  }
@@ -4484,5 +4531,5 @@ function createModModifierKeys() {
4484
4531
  * Generated bundle index. Do not edit.
4485
4532
  */
4486
4533
 
4487
- export { A, ACTIVE_MOVING_CLASS_NAME, 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, isMovingElements, 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 };
4534
+ 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 };
4488
4535
  //# sourceMappingURL=plait-core.mjs.map