@plait/core 0.24.0-next.1 β†’ 0.24.0-next.2

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.
@@ -145,6 +145,54 @@ const ThemeColors = [
145
145
  StarryThemeColor
146
146
  ];
147
147
 
148
+ const RectangleClient = {
149
+ isHit: (origin, target) => {
150
+ const minX = origin.x < target.x ? origin.x : target.x;
151
+ const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;
152
+ const minY = origin.y < target.y ? origin.y : target.y;
153
+ const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;
154
+ // float calculate error( eg: 1.4210854715202004e-14 > 0)
155
+ if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {
156
+ return true;
157
+ }
158
+ else {
159
+ return false;
160
+ }
161
+ },
162
+ toRectangleClient: (points) => {
163
+ const xArray = points.map(ele => ele[0]);
164
+ const yArray = points.map(ele => ele[1]);
165
+ const xMin = Math.min(...xArray);
166
+ const xMax = Math.max(...xArray);
167
+ const yMin = Math.min(...yArray);
168
+ const yMax = Math.max(...yArray);
169
+ const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };
170
+ return rect;
171
+ },
172
+ getOutlineRectangle: (rectangle, offset) => {
173
+ return {
174
+ x: rectangle.x + offset,
175
+ y: rectangle.y + offset,
176
+ width: rectangle.width + Math.abs(offset) * 2,
177
+ height: rectangle.height + Math.abs(offset) * 2
178
+ };
179
+ },
180
+ isEqual: (rectangle, otherRectangle) => {
181
+ return (rectangle.x === otherRectangle.x &&
182
+ rectangle.y === otherRectangle.y &&
183
+ rectangle.width === otherRectangle.width &&
184
+ rectangle.height === otherRectangle.height);
185
+ },
186
+ getCornerPoints: (rectangle) => {
187
+ return [
188
+ [rectangle.x, rectangle.y],
189
+ [rectangle.x + rectangle.width, rectangle.y],
190
+ [rectangle.x + rectangle.width, rectangle.y + rectangle.height],
191
+ [rectangle.x, rectangle.y + rectangle.height]
192
+ ];
193
+ }
194
+ };
195
+
148
196
  // https://stackoverflow.com/a/6853926/232122
149
197
  function distanceBetweenPointAndSegment(x, y, x1, y1, x2, y2) {
150
198
  const A = x - x1;
@@ -175,6 +223,19 @@ function distanceBetweenPointAndSegment(x, y, x1, y1, x2, y2) {
175
223
  const dy = y - yy;
176
224
  return Math.hypot(dx, dy);
177
225
  }
226
+ function distanceBetweenPointAndSegments(points, point) {
227
+ const len = points.length;
228
+ let distance = Infinity;
229
+ for (let i = 0; i < len - 1; i++) {
230
+ const p = points[i];
231
+ const p2 = points[i + 1];
232
+ const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);
233
+ if (currentDistance < distance) {
234
+ distance = currentDistance;
235
+ }
236
+ }
237
+ return distance;
238
+ }
178
239
  function rotate(x1, y1, x2, y2, angle) {
179
240
  // π‘Žβ€²π‘₯=(π‘Žπ‘₯βˆ’π‘π‘₯)cosπœƒβˆ’(π‘Žπ‘¦βˆ’π‘π‘¦)sinπœƒ+𝑐π‘₯
180
241
  // π‘Žβ€²π‘¦=(π‘Žπ‘₯βˆ’π‘π‘₯)sinπœƒ+(π‘Žπ‘¦βˆ’π‘π‘¦)cosπœƒ+𝑐𝑦.
@@ -192,6 +253,29 @@ function distanceBetweenPointAndRectangle(x, y, rect) {
192
253
  var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));
193
254
  return Math.sqrt(dx * dx + dy * dy);
194
255
  }
256
+ const isLineHitLine = (a, b, c, d) => {
257
+ const crossProduct = (v1, v2) => v1[0] * v2[1] - v1[1] * v2[0];
258
+ const ab = [b[0] - a[0], b[1] - a[1]];
259
+ const ac = [c[0] - a[0], c[1] - a[1]];
260
+ const ad = [d[0] - a[0], d[1] - a[1]];
261
+ const ca = [a[0] - c[0], a[1] - c[1]];
262
+ const cb = [b[0] - c[0], b[1] - c[1]];
263
+ const cd = [d[0] - c[0], d[1] - c[1]];
264
+ return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;
265
+ };
266
+ const isPolylineHitRectangle = (points, rectangle) => {
267
+ const rectanglePoints = RectangleClient.getCornerPoints(rectangle);
268
+ for (let i = 1; i < points.length; i++) {
269
+ const isIntersect = isLineHitLine(points[i], points[i - 1], rectanglePoints[0], rectanglePoints[1]) ||
270
+ isLineHitLine(points[i], points[i - 1], rectanglePoints[1], rectanglePoints[2]) ||
271
+ isLineHitLine(points[i], points[i - 1], rectanglePoints[2], rectanglePoints[3]) ||
272
+ isLineHitLine(points[i], points[i - 1], rectanglePoints[3], rectanglePoints[0]);
273
+ if (isIntersect) {
274
+ return true;
275
+ }
276
+ }
277
+ return false;
278
+ };
195
279
 
196
280
  const PlaitBoard = {
197
281
  isBoard(value) {
@@ -1638,46 +1722,6 @@ const PlaitElement = {
1638
1722
  }
1639
1723
  };
1640
1724
 
1641
- const RectangleClient = {
1642
- isHit: (origin, target) => {
1643
- const minX = origin.x < target.x ? origin.x : target.x;
1644
- const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;
1645
- const minY = origin.y < target.y ? origin.y : target.y;
1646
- const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;
1647
- // float calculate error( eg: 1.4210854715202004e-14 > 0)
1648
- if (Math.floor(maxX - minX - origin.width - target.width) <= 0 && Math.floor(maxY - minY - origin.height - target.height) <= 0) {
1649
- return true;
1650
- }
1651
- else {
1652
- return false;
1653
- }
1654
- },
1655
- toRectangleClient: (points) => {
1656
- const xArray = points.map(ele => ele[0]);
1657
- const yArray = points.map(ele => ele[1]);
1658
- const xMin = Math.min(...xArray);
1659
- const xMax = Math.max(...xArray);
1660
- const yMin = Math.min(...yArray);
1661
- const yMax = Math.max(...yArray);
1662
- const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };
1663
- return rect;
1664
- },
1665
- getOutlineRectangle: (rectangle, offset) => {
1666
- return {
1667
- x: rectangle.x + offset,
1668
- y: rectangle.y + offset,
1669
- width: rectangle.width + Math.abs(offset) * 2,
1670
- height: rectangle.height + Math.abs(offset) * 2
1671
- };
1672
- },
1673
- isEqual: (rectangle, otherRectangle) => {
1674
- return (rectangle.x === otherRectangle.x &&
1675
- rectangle.y === otherRectangle.y &&
1676
- rectangle.width === otherRectangle.width &&
1677
- rectangle.height === otherRectangle.height);
1678
- }
1679
- };
1680
-
1681
1725
  const isSetViewportOperation = (value) => {
1682
1726
  return value.type === 'set_viewport';
1683
1727
  };
@@ -2520,13 +2564,13 @@ function withViewport(board) {
2520
2564
  }
2521
2565
 
2522
2566
  function withMoving(board) {
2523
- const { mousedown, mousemove, globalMouseup, globalMousemove } = board;
2567
+ const { pointerDown, pointerMove, globalPointerUp, globalPointerMove } = board;
2524
2568
  let offsetX = 0;
2525
2569
  let offsetY = 0;
2526
2570
  let isPreventDefault = false;
2527
2571
  let startPoint;
2528
2572
  let activeElements = [];
2529
- board.mousedown = event => {
2573
+ board.pointerDown = (event) => {
2530
2574
  const host = BOARD_TO_HOST.get(board);
2531
2575
  const point = transformPoint(board, toPoint(event.x, event.y, host));
2532
2576
  const range = { anchor: point, focus: point };
@@ -2542,9 +2586,9 @@ function withMoving(board) {
2542
2586
  activeElements = [hitElement];
2543
2587
  }
2544
2588
  }
2545
- mousedown(event);
2589
+ pointerDown(event);
2546
2590
  };
2547
- board.mousemove = event => {
2591
+ board.pointerMove = (event) => {
2548
2592
  if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
2549
2593
  if (!isPreventDefault) {
2550
2594
  isPreventDefault = true;
@@ -2576,23 +2620,23 @@ function withMoving(board) {
2576
2620
  // 阻歒 move θΏ‡η¨‹δΈ­θ§¦ε‘η”»εΈƒζ»šεŠ¨θ‘ŒδΈΊ
2577
2621
  event.preventDefault();
2578
2622
  }
2579
- mousemove(event);
2623
+ pointerMove(event);
2580
2624
  };
2581
- board.globalMousemove = event => {
2625
+ board.globalPointerMove = (event) => {
2582
2626
  if (startPoint) {
2583
2627
  const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);
2584
2628
  if (!inPlaitBoardElement) {
2585
2629
  cancelMove(board);
2586
2630
  }
2587
2631
  }
2588
- globalMousemove(event);
2632
+ globalPointerMove(event);
2589
2633
  };
2590
- board.globalMouseup = event => {
2634
+ board.globalPointerUp = event => {
2591
2635
  isPreventDefault = false;
2592
2636
  if (startPoint) {
2593
2637
  cancelMove(board);
2594
2638
  }
2595
- globalMouseup(event);
2639
+ globalPointerUp(event);
2596
2640
  };
2597
2641
  function cancelMove(board) {
2598
2642
  startPoint = null;
@@ -3473,5 +3517,5 @@ function createModModifierKeys() {
3473
3517
  * Generated bundle index. Do not edit.
3474
3518
  */
3475
3519
 
3476
- export { A, 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_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, 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_PREVENT_TOUCH_MOVE, 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, PlaitChildrenElement, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitModule, 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, 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, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createSVG, createSelectionOuterG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRoundRectangle, fakeNodeWeakMap, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementHostBBox, getHitElementOfRoot, getHitElements, getIsRecursionFunc, getMovingElements, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isHitElements, isInPlaitBoard, isMainPointer, isNullOrUndefined, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setSVGViewBox, setSelectionMoving, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
3520
+ export { A, 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_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, 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_PREVENT_TOUCH_MOVE, 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, PlaitChildrenElement, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitModule, 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, 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, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createSVG, createSelectionOuterG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRoundRectangle, fakeNodeWeakMap, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementHostBBox, getHitElementOfRoot, getHitElements, getIsRecursionFunc, getMovingElements, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isHitElements, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setSVGViewBox, setSelectionMoving, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
3477
3521
  //# sourceMappingURL=plait-core.mjs.map