@plait/draw 0.1.0-next.9 → 0.29.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.
Files changed (128) hide show
  1. package/constants/geometry.d.ts +71 -1
  2. package/constants/image.d.ts +1 -0
  3. package/constants/index.d.ts +1 -0
  4. package/constants/pointer.d.ts +6 -10
  5. package/engines/basic-shapes/comment.d.ts +4 -0
  6. package/engines/basic-shapes/cross.d.ts +4 -0
  7. package/engines/basic-shapes/ellipse.d.ts +13 -0
  8. package/engines/basic-shapes/hexagon.d.ts +4 -0
  9. package/engines/basic-shapes/left-arrow.d.ts +4 -0
  10. package/engines/basic-shapes/octagon.d.ts +4 -0
  11. package/engines/basic-shapes/pentagon-arrow.d.ts +4 -0
  12. package/engines/basic-shapes/pentagon.d.ts +4 -0
  13. package/engines/basic-shapes/polygon.d.ts +8 -0
  14. package/engines/basic-shapes/process-arrow.d.ts +4 -0
  15. package/engines/basic-shapes/right-arrow.d.ts +4 -0
  16. package/engines/basic-shapes/round-comment.d.ts +4 -0
  17. package/engines/basic-shapes/star.d.ts +4 -0
  18. package/engines/basic-shapes/trapezoid.d.ts +4 -0
  19. package/engines/basic-shapes/triangle.d.ts +4 -0
  20. package/engines/basic-shapes/two-way-arrow.d.ts +4 -0
  21. package/engines/flowchart/delay.d.ts +2 -0
  22. package/engines/flowchart/manual-input.d.ts +4 -0
  23. package/engines/flowchart/manual-loop.d.ts +4 -0
  24. package/engines/flowchart/merge.d.ts +4 -0
  25. package/engines/flowchart/preparation.d.ts +4 -0
  26. package/engines/flowchart/stored-data.d.ts +2 -0
  27. package/engines/flowchart/terminal.d.ts +5 -0
  28. package/engines/index.d.ts +3 -0
  29. package/esm2022/constants/geometry.mjs +42 -4
  30. package/esm2022/constants/image.mjs +2 -0
  31. package/esm2022/constants/index.mjs +2 -1
  32. package/esm2022/constants/pointer.mjs +14 -19
  33. package/esm2022/engines/basic-shapes/comment.mjs +57 -0
  34. package/esm2022/engines/basic-shapes/cross.mjs +33 -0
  35. package/esm2022/engines/basic-shapes/diamond.mjs +16 -0
  36. package/esm2022/engines/basic-shapes/ellipse.mjs +100 -0
  37. package/esm2022/engines/basic-shapes/hexagon.mjs +27 -0
  38. package/esm2022/engines/basic-shapes/left-arrow.mjs +30 -0
  39. package/esm2022/engines/basic-shapes/octagon.mjs +29 -0
  40. package/esm2022/engines/basic-shapes/parallelogram.mjs +25 -0
  41. package/esm2022/engines/basic-shapes/pentagon-arrow.mjs +24 -0
  42. package/esm2022/engines/basic-shapes/pentagon.mjs +30 -0
  43. package/esm2022/engines/basic-shapes/polygon.mjs +40 -0
  44. package/esm2022/engines/basic-shapes/process-arrow.mjs +26 -0
  45. package/esm2022/engines/basic-shapes/rectangle.mjs +26 -0
  46. package/esm2022/engines/basic-shapes/right-arrow.mjs +28 -0
  47. package/esm2022/engines/basic-shapes/round-comment.mjs +81 -0
  48. package/esm2022/engines/basic-shapes/round-rectangle.mjs +59 -0
  49. package/esm2022/engines/basic-shapes/star.mjs +39 -0
  50. package/esm2022/engines/basic-shapes/trapezoid.mjs +25 -0
  51. package/esm2022/engines/basic-shapes/triangle.mjs +33 -0
  52. package/esm2022/engines/basic-shapes/two-way-arrow.mjs +25 -0
  53. package/esm2022/engines/flowchart/delay.mjs +45 -0
  54. package/esm2022/engines/flowchart/manual-input.mjs +32 -0
  55. package/esm2022/engines/flowchart/manual-loop.mjs +25 -0
  56. package/esm2022/engines/flowchart/merge.mjs +34 -0
  57. package/esm2022/engines/flowchart/preparation.mjs +27 -0
  58. package/esm2022/engines/flowchart/stored-data.mjs +74 -0
  59. package/esm2022/engines/flowchart/terminal.mjs +59 -0
  60. package/esm2022/engines/index.mjs +64 -0
  61. package/esm2022/generators/geometry-shape.generator.mjs +9 -4
  62. package/esm2022/generators/line-active.generator.mjs +71 -22
  63. package/esm2022/generators/line.generator.mjs +2 -11
  64. package/esm2022/geometry.component.mjs +20 -10
  65. package/esm2022/image.component.mjs +70 -0
  66. package/esm2022/interfaces/geometry.mjs +38 -10
  67. package/esm2022/interfaces/image.mjs +2 -0
  68. package/esm2022/interfaces/index.mjs +16 -4
  69. package/esm2022/interfaces/line.mjs +27 -4
  70. package/esm2022/interfaces/text.mjs +1 -1
  71. package/esm2022/line.component.mjs +17 -8
  72. package/esm2022/plugins/with-draw-fragment.mjs +37 -7
  73. package/esm2022/plugins/with-draw.mjs +38 -10
  74. package/esm2022/plugins/with-geometry-create.mjs +38 -23
  75. package/esm2022/plugins/with-geometry-resize.mjs +28 -20
  76. package/esm2022/plugins/with-line-bound-reaction.mjs +10 -5
  77. package/esm2022/plugins/with-line-create.mjs +7 -5
  78. package/esm2022/plugins/with-line-resize.mjs +12 -4
  79. package/esm2022/transforms/geometry-text.mjs +1 -1
  80. package/esm2022/transforms/geometry.mjs +6 -6
  81. package/esm2022/transforms/image.mjs +23 -0
  82. package/esm2022/transforms/index.mjs +4 -2
  83. package/esm2022/utils/clipboard.mjs +4 -3
  84. package/esm2022/utils/geometry.mjs +32 -10
  85. package/esm2022/utils/index.mjs +1 -1
  86. package/esm2022/utils/line-arrow.mjs +43 -18
  87. package/esm2022/utils/line.mjs +202 -51
  88. package/esm2022/utils/position/geometry.mjs +5 -4
  89. package/esm2022/utils/position/line.mjs +32 -22
  90. package/esm2022/utils/selected.mjs +5 -1
  91. package/esm2022/utils/shape.mjs +8 -0
  92. package/fesm2022/plait-draw.mjs +1704 -331
  93. package/fesm2022/plait-draw.mjs.map +1 -1
  94. package/generators/line-active.generator.d.ts +3 -0
  95. package/generators/line.generator.d.ts +1 -1
  96. package/geometry.component.d.ts +1 -1
  97. package/image.component.d.ts +20 -0
  98. package/interfaces/geometry.d.ts +39 -7
  99. package/interfaces/image.d.ts +7 -0
  100. package/interfaces/index.d.ts +7 -1
  101. package/interfaces/line.d.ts +19 -5
  102. package/interfaces/text.d.ts +2 -2
  103. package/line.component.d.ts +2 -1
  104. package/package.json +3 -2
  105. package/plugins/with-draw-fragment.d.ts +2 -0
  106. package/plugins/with-geometry-create.d.ts +6 -1
  107. package/styles/styles.scss +2 -2
  108. package/transforms/geometry.d.ts +2 -2
  109. package/transforms/image.d.ts +3 -0
  110. package/transforms/index.d.ts +2 -1
  111. package/utils/geometry.d.ts +23 -3
  112. package/utils/line.d.ts +14 -6
  113. package/utils/position/geometry.d.ts +2 -1
  114. package/utils/position/line.d.ts +7 -3
  115. package/utils/selected.d.ts +2 -0
  116. package/utils/shape.d.ts +2 -0
  117. package/esm2022/utils/engine/diamond.mjs +0 -22
  118. package/esm2022/utils/engine/ellipse.mjs +0 -55
  119. package/esm2022/utils/engine/index.mjs +0 -18
  120. package/esm2022/utils/engine/parallelogram.mjs +0 -32
  121. package/esm2022/utils/engine/rectangle.mjs +0 -18
  122. package/esm2022/utils/engine/round-rectangle.mjs +0 -49
  123. package/utils/engine/ellipse.d.ts +0 -4
  124. package/utils/engine/index.d.ts +0 -3
  125. package/{utils/engine → engines/basic-shapes}/diamond.d.ts +0 -0
  126. package/{utils/engine → engines/basic-shapes}/parallelogram.d.ts +1 -1
  127. /package/{utils/engine → engines/basic-shapes}/rectangle.d.ts +0 -0
  128. /package/{utils/engine → engines/basic-shapes}/round-rectangle.d.ts +0 -0
@@ -1,9 +1,12 @@
1
+ import { PlaitBoard, Point } from '@plait/core';
1
2
  import { PlaitLine } from '../interfaces';
2
3
  import { Generator } from '@plait/common';
3
4
  export interface ActiveData {
4
5
  selected: boolean;
5
6
  }
6
7
  export declare class LineActiveGenerator extends Generator<PlaitLine, ActiveData> {
8
+ hasResizeHandle: boolean;
7
9
  canDraw(element: PlaitLine, data: ActiveData): boolean;
8
10
  baseDraw(element: PlaitLine, data: ActiveData): SVGGElement;
9
11
  }
12
+ export declare function getMiddlePoints(board: PlaitBoard, element: PlaitLine): Point[];
@@ -4,5 +4,5 @@ export interface ShapeData {
4
4
  }
5
5
  export declare class LineShapeGenerator extends Generator<PlaitLine, ShapeData> {
6
6
  canDraw(element: PlaitLine, data: ShapeData): boolean;
7
- baseDraw(element: PlaitLine, data: ShapeData): SVGGElement | undefined;
7
+ baseDraw(element: PlaitLine, data: ShapeData): SVGGElement;
8
8
  }
@@ -23,5 +23,5 @@ export declare class GeometryComponent extends CommonPluginElement<PlaitGeometry
23
23
  initializeTextManage(): void;
24
24
  ngOnDestroy(): void;
25
25
  static ɵfac: i0.ɵɵFactoryDeclaration<GeometryComponent, never>;
26
- static ɵcmp: i0.ɵɵComponentDeclaration<GeometryComponent, "plait-draw-geometry", never, {}, {}, never, never, false, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<GeometryComponent, "plait-draw-geometry", never, {}, {}, never, never, true, never>;
27
27
  }
@@ -0,0 +1,20 @@
1
+ import { ChangeDetectorRef, OnDestroy, OnInit, ViewContainerRef } from '@angular/core';
2
+ import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';
3
+ import { Subject } from 'rxjs';
4
+ import { CommonPluginElement, ImageGenerator } from '@plait/common';
5
+ import { PlaitImage } from './interfaces/image';
6
+ import * as i0 from "@angular/core";
7
+ export declare class ImageComponent extends CommonPluginElement<PlaitImage, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitImage, PlaitBoard> {
8
+ private viewContainerRef;
9
+ protected cdr: ChangeDetectorRef;
10
+ destroy$: Subject<void>;
11
+ get activeGenerator(): import("@plait/common").ActiveGenerator<import("@plait/core").PlaitElement>;
12
+ imageGenerator: ImageGenerator<PlaitImage>;
13
+ constructor(viewContainerRef: ViewContainerRef, cdr: ChangeDetectorRef);
14
+ initializeGenerator(): void;
15
+ ngOnInit(): void;
16
+ onContextChanged(value: PlaitPluginElementContext<PlaitImage, PlaitBoard>, previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>): void;
17
+ ngOnDestroy(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageComponent, "plait-draw-geometry", never, {}, {}, never, never, true, never>;
20
+ }
@@ -1,19 +1,47 @@
1
- import { PlaitBoard, PlaitElement, Point, RectangleClient } from '@plait/core';
1
+ import { PlaitBoard, PlaitElement, Point, PointOfRectangle, RectangleClient, Vector } from '@plait/core';
2
2
  import { Options } from 'roughjs/bin/core';
3
3
  import { ParagraphElement } from '@plait/text';
4
4
  import { StrokeStyle } from './element';
5
- export declare enum GeometryShape {
5
+ export declare enum BasicShapes {
6
6
  rectangle = "rectangle",
7
7
  ellipse = "ellipse",
8
8
  diamond = "diamond",
9
9
  roundRectangle = "roundRectangle",
10
10
  parallelogram = "parallelogram",
11
- text = "text"
11
+ text = "text",
12
+ triangle = "triangle",
13
+ leftArrow = "leftArrow",
14
+ trapezoid = "trapezoid",
15
+ rightArrow = "rightArrow",
16
+ cross = "cross",
17
+ star = "star",
18
+ pentagon = "pentagon",
19
+ hexagon = "hexagon",
20
+ octagon = "octagon",
21
+ pentagonArrow = "pentagonArrow",
22
+ processArrow = "processArrow",
23
+ twoWayArrow = "twoWayArrow",
24
+ comment = "comment",
25
+ roundComment = "roundComment"
12
26
  }
27
+ export declare enum FlowchartSymbols {
28
+ process = "process",
29
+ decision = "decision",
30
+ data = "data",
31
+ connector = "connector",
32
+ terminal = "terminal",
33
+ manualInput = "manualInput",
34
+ preparation = "preparation",
35
+ manualLoop = "manualLoop",
36
+ merge = "merge",
37
+ delay = "delay",
38
+ storedData = "storedData"
39
+ }
40
+ export type GeometryShapes = BasicShapes | FlowchartSymbols;
13
41
  export interface PlaitGeometry extends PlaitElement {
14
42
  points: [Point, Point];
15
43
  type: 'geometry';
16
- shape: GeometryShape;
44
+ shape: GeometryShapes;
17
45
  text: ParagraphElement;
18
46
  textHeight: number;
19
47
  fill?: string;
@@ -24,13 +52,13 @@ export interface PlaitGeometry extends PlaitElement {
24
52
  opacity: number;
25
53
  }
26
54
  export interface PlaitRectangle extends PlaitGeometry {
27
- shape: GeometryShape.rectangle;
55
+ shape: BasicShapes.rectangle;
28
56
  }
29
57
  export interface PlaitEllipse extends PlaitGeometry {
30
- shape: GeometryShape.ellipse;
58
+ shape: BasicShapes.ellipse;
31
59
  }
32
60
  export interface PlaitDiamond extends PlaitGeometry {
33
- shape: GeometryShape.diamond;
61
+ shape: BasicShapes.diamond;
34
62
  }
35
63
  export declare const PlaitGeometry: {
36
64
  getTextEditor(element: PlaitGeometry): import("slate").BaseEditor & import("slate-angular").AngularEditor & import("slate-history").HistoryEditor;
@@ -40,5 +68,9 @@ export interface ShapeEngine {
40
68
  isHit: (rectangle: RectangleClient, point: Point) => boolean;
41
69
  getNearestPoint: (rectangle: RectangleClient, point: Point) => Point;
42
70
  getConnectorPoints: (rectangle: RectangleClient) => Point[];
71
+ getCornerPoints: (rectangle: RectangleClient) => Point[];
72
+ getEdgeByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => [Point, Point] | null;
73
+ getTangentVectorByConnectionPoint?: (rectangle: RectangleClient, point: PointOfRectangle) => Vector | null;
43
74
  draw: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;
75
+ getTextRectangle?: (element: PlaitGeometry) => RectangleClient;
44
76
  }
@@ -0,0 +1,7 @@
1
+ import { PlaitElement, Point } from '@plait/core';
2
+ export interface PlaitImage extends PlaitElement {
3
+ points: [Point, Point];
4
+ type: 'image';
5
+ url: string;
6
+ angle: number;
7
+ }
@@ -1,14 +1,20 @@
1
1
  import { PlaitGeometry } from './geometry';
2
+ import { PlaitImage } from './image';
2
3
  import { PlaitLine } from './line';
3
4
  import { PlaitText } from './text';
4
5
  export * from './line';
5
6
  export * from './geometry';
6
7
  export * from './text';
7
8
  export * from './element';
8
- export type PlaitDrawElement = PlaitGeometry | PlaitLine;
9
+ export type PlaitDrawElement = PlaitGeometry | PlaitLine | PlaitImage;
10
+ export type PlaitShape = PlaitGeometry | PlaitImage;
9
11
  export declare const PlaitDrawElement: {
10
12
  isGeometry: (value: any) => value is PlaitGeometry;
11
13
  isLine: (value: any) => value is PlaitLine;
12
14
  isText: (value: any) => value is PlaitText;
15
+ isImage: (value: any) => value is PlaitImage;
13
16
  isDrawElement: (value: any) => value is PlaitDrawElement;
17
+ isShape: (value: any) => boolean;
18
+ isBaseShape: (value: any) => boolean;
19
+ isFlowchart: (value: any) => boolean;
14
20
  };
@@ -1,13 +1,18 @@
1
- import { PlaitElement, Point } from '@plait/core';
1
+ import { Direction, PlaitBoard, PlaitElement, Point, PointOfRectangle, Vector } from '@plait/core';
2
2
  import { Element } from 'slate';
3
3
  import { PlaitGeometry } from './geometry';
4
4
  import { StrokeStyle } from './element';
5
+ import { PlaitImage } from '../interfaces/image';
5
6
  export declare enum LineMarkerType {
6
7
  arrow = "arrow",
7
8
  none = "none",
8
9
  openTriangle = "open-triangle",
9
10
  solidTriangle = "solid-triangle",
10
- sharpArrow = "sharp-arrow"
11
+ sharpArrow = "sharp-arrow",
12
+ oneSideUp = "one-side-up",
13
+ oneSideDown = "one-side-down",
14
+ hollowTriangle = "hollow-triangle",
15
+ singleSlash = "single-slash"
11
16
  }
12
17
  export declare enum LineShape {
13
18
  straight = "straight",
@@ -26,9 +31,16 @@ export interface LineText {
26
31
  }
27
32
  export interface LineHandle {
28
33
  boundId?: string;
29
- connection?: Point;
34
+ connection?: PointOfRectangle;
30
35
  marker: LineMarkerType;
31
36
  }
37
+ export interface LineHandleRef {
38
+ key: LineHandleKey;
39
+ direction: Direction;
40
+ point: PointOfRectangle;
41
+ vector: Vector;
42
+ boundElement?: PlaitGeometry;
43
+ }
32
44
  export interface PlaitLine extends PlaitElement {
33
45
  type: 'line';
34
46
  shape: LineShape;
@@ -52,8 +64,10 @@ export interface PlaitElbowLine extends PlaitLine {
52
64
  }
53
65
  export declare const PlaitLine: {
54
66
  getTextEditors(element: PlaitLine): (import("slate").BaseEditor & import("slate-angular").AngularEditor & import("slate-history").HistoryEditor)[];
67
+ isSourceMarkOrTargetMark(line: PlaitLine, markType: LineMarkerType, handleKey: LineHandleKey): boolean;
55
68
  isSourceMark(line: PlaitLine, markType: LineMarkerType): boolean;
56
69
  isTargetMark(line: PlaitLine, markType: LineMarkerType): boolean;
57
- isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry): boolean;
58
- isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry): boolean;
70
+ isBoundElementOfSource(line: PlaitLine, element: PlaitGeometry | PlaitImage): boolean;
71
+ isBoundElementOfTarget(line: PlaitLine, element: PlaitGeometry | PlaitImage): boolean;
72
+ getPoints(board: PlaitBoard, line: PlaitLine): Point[];
59
73
  };
@@ -1,5 +1,5 @@
1
- import { PlaitGeometry, GeometryShape } from './geometry';
1
+ import { PlaitGeometry, BasicShapes } from './geometry';
2
2
  export interface PlaitText extends PlaitGeometry {
3
- shape: GeometryShape.text;
3
+ shape: BasicShapes.text;
4
4
  autoSize: boolean;
5
5
  }
@@ -23,6 +23,7 @@ export declare class LineComponent extends PlaitPluginElementComponent<PlaitLine
23
23
  ngOnInit(): void;
24
24
  getBoundedElements(): BoundedElements;
25
25
  onContextChanged(value: PlaitPluginElementContext<PlaitLine, PlaitBoard>, previous: PlaitPluginElementContext<PlaitLine, PlaitBoard>): void;
26
+ hasResizeHandle(): boolean;
26
27
  initializeTextManages(): void;
27
28
  destroyTextManages(): void;
28
29
  drawText(): void;
@@ -31,6 +32,6 @@ export declare class LineComponent extends PlaitPluginElementComponent<PlaitLine
31
32
  updateTextRectangle(): void;
32
33
  ngOnDestroy(): void;
33
34
  static ɵfac: i0.ɵɵFactoryDeclaration<LineComponent, never>;
34
- static ɵcmp: i0.ɵɵComponentDeclaration<LineComponent, "plait-draw-line", never, {}, {}, never, never, false, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<LineComponent, "plait-draw-line", never, {}, {}, never, never, true, never>;
35
36
  }
36
37
  export {};
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@plait/draw",
3
- "version": "0.1.0-next.9",
3
+ "version": "0.29.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^16.0.0",
6
- "@angular/core": "^16.0.0"
6
+ "@angular/core": "^16.0.0",
7
+ "is-hotkey": "^0.2.0"
7
8
  },
8
9
  "dependencies": {
9
10
  "tslib": "^2.3.0"
@@ -1,2 +1,4 @@
1
1
  import { PlaitBoard } from '@plait/core';
2
+ import { PlaitLine, PlaitShape } from '../interfaces';
2
3
  export declare const withDrawFragment: (baseBoard: PlaitBoard) => PlaitBoard;
4
+ export declare const getBoundedLineElements: (board: PlaitBoard, plaitShapes: PlaitShape[]) => PlaitLine[];
@@ -1,3 +1,8 @@
1
1
  import { PlaitBoard } from '@plait/core';
2
+ import { DrawPointerType } from '../constants';
2
3
  export declare const withGeometryCreateByDrag: (board: PlaitBoard) => PlaitBoard;
3
- export declare const withGeometryCreateByDraw: (board: PlaitBoard) => PlaitBoard;
4
+ export declare const withGeometryCreateByDrawing: (board: PlaitBoard) => PlaitBoard;
5
+ export declare const getGeometryDefaultProperty: (pointer: DrawPointerType) => {
6
+ width: number;
7
+ height: number;
8
+ };
@@ -4,8 +4,8 @@
4
4
  cursor: default;
5
5
  }
6
6
  }
7
- &.pointer-rectangle,
8
- &.pointer-line {
7
+ &:not(.pointer-text):not(.pointer-selection):not(.pointer-hand)
8
+ {
9
9
  .board-host-svg {
10
10
  cursor: crosshair;
11
11
  }
@@ -1,6 +1,6 @@
1
1
  import { PlaitBoard, Point, Path } from '@plait/core';
2
- import { GeometryShape } from '../interfaces';
2
+ import { GeometryShapes } from '../interfaces';
3
3
  import { Element } from 'slate';
4
- export declare const insertGeometry: (board: PlaitBoard, points: [Point, Point], shape: GeometryShape) => void;
4
+ export declare const insertGeometry: (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => void;
5
5
  export declare const insertText: (board: PlaitBoard, points: [Point, Point], text?: string | Element) => void;
6
6
  export declare const resizeGeometry: (board: PlaitBoard, points: [Point, Point], textHeight: number, path: Path) => void;
@@ -0,0 +1,3 @@
1
+ import { CommonImageItem } from '@plait/common';
2
+ import { PlaitBoard, Point } from '@plait/core';
3
+ export declare const insertImage: (board: PlaitBoard, imageItem: CommonImageItem, startPoint?: Point) => void;
@@ -1,6 +1,6 @@
1
1
  export declare const DrawTransforms: {
2
2
  setText: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitGeometry, text: import("slate").BaseElement, width: number, textHeight: number) => void;
3
- insertGeometry: (board: import("@plait/core").PlaitBoard, points: [import("@plait/core").Point, import("@plait/core").Point], shape: import("@plait/draw").GeometryShape) => void;
3
+ insertGeometry: (board: import("@plait/core").PlaitBoard, points: [import("@plait/core").Point, import("@plait/core").Point], shape: import("@plait/draw").GeometryShapes) => void;
4
4
  resizeGeometry: (board: import("@plait/core").PlaitBoard, points: [import("@plait/core").Point, import("@plait/core").Point], textHeight: number, path: import("@plait/core").Path) => void;
5
5
  insertText: (board: import("@plait/core").PlaitBoard, points: [import("@plait/core").Point, import("@plait/core").Point], text?: string | import("slate").BaseElement) => void;
6
6
  setTextSize: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitGeometry, textWidth: number, textHeight: number) => void;
@@ -8,4 +8,5 @@ export declare const DrawTransforms: {
8
8
  setLineTexts: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, texts: import("@plait/draw").LineText[]) => void;
9
9
  removeLineText: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, index: number) => void;
10
10
  setLineMark: (board: import("@plait/core").PlaitBoard, element: import("@plait/draw").PlaitLine, handleKey: import("@plait/draw").LineHandleKey, marker: import("@plait/draw").LineMarkerType) => void;
11
+ insertImage: (board: import("@plait/core").PlaitBoard, imageItem: import("@plait/common").CommonImageItem, startPoint?: import("@plait/core").Point | undefined) => void;
11
12
  };
@@ -1,8 +1,8 @@
1
1
  import { PlaitBoard, Point, RectangleClient } from '@plait/core';
2
- import { GeometryShape, PlaitGeometry } from '../interfaces/geometry';
2
+ import { GeometryShapes, PlaitGeometry, FlowchartSymbols } from '../interfaces/geometry';
3
3
  import { Element } from 'slate';
4
4
  import { Options } from 'roughjs/bin/core';
5
- export declare const createGeometryElement: (shape: GeometryShape, points: [Point, Point], text: string | Element, options?: Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>) => PlaitGeometry;
5
+ export declare const createGeometryElement: (shape: GeometryShapes, points: [Point, Point], text: string | Element, options?: Pick<PlaitGeometry, 'fill' | 'strokeColor' | 'strokeWidth'>) => PlaitGeometry;
6
6
  export declare const getPointsByCenterPoint: (point: Point, width: number, height: number) => [Point, Point];
7
7
  export declare const getTextRectangle: (element: PlaitGeometry) => {
8
8
  height: number;
@@ -11,6 +11,26 @@ export declare const getTextRectangle: (element: PlaitGeometry) => {
11
11
  y: number;
12
12
  };
13
13
  export declare const drawBoundMask: (board: PlaitBoard, element: PlaitGeometry) => SVGGElement;
14
- export declare const drawGeometry: (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShape, options: Options) => SVGGElement;
14
+ export declare const drawGeometry: (board: PlaitBoard, outerRectangle: RectangleClient, shape: GeometryShapes, options: Options) => SVGGElement;
15
15
  export declare const getNearestPoint: (element: PlaitGeometry, point: Point, inflateDelta?: number) => Point;
16
16
  export declare const getCenterPointsOnPolygon: (points: Point[]) => Point[];
17
+ export declare const getEdgeOnPolygonByPoint: (corners: Point[], point: Point) => [Point, Point] | null;
18
+ export declare const getDefaultFlowchartProperty: (symbol: FlowchartSymbols) => {
19
+ width: number;
20
+ height: number;
21
+ } | {
22
+ width: number;
23
+ height: number;
24
+ } | {
25
+ width: number;
26
+ height: number;
27
+ } | {
28
+ width: number;
29
+ height: number;
30
+ } | {
31
+ width: number;
32
+ height: number;
33
+ } | {
34
+ width: number;
35
+ height: number;
36
+ };
package/utils/line.d.ts CHANGED
@@ -1,17 +1,25 @@
1
- import { Point, PlaitBoard, RectangleClient } from '@plait/core';
2
- import { LineHandle, LineShape, PlaitGeometry, PlaitLine } from '../interfaces';
1
+ import { Point, PlaitBoard, RectangleClient, PointOfRectangle, Direction, Vector } from '@plait/core';
2
+ import { LineHandle, LineHandleRef, LineShape, PlaitGeometry, PlaitLine } from '../interfaces';
3
+ import { Op } from 'roughjs/bin/core';
3
4
  export declare const createLineElement: (shape: LineShape, points: [Point, Point], source: LineHandle, target: LineHandle, options?: Pick<PlaitLine, 'strokeColor' | 'strokeWidth'>) => PlaitLine;
4
5
  export declare const getLinePoints: (board: PlaitBoard, element: PlaitLine) => Point[];
5
- export declare const getStraightPoints: (board: PlaitBoard, element: PlaitLine) => Point[];
6
+ export declare const getLineHandleRefPair: (board: PlaitBoard, element: PlaitLine) => {
7
+ source: LineHandleRef;
8
+ target: LineHandleRef;
9
+ };
6
10
  export declare const getElbowPoints: (board: PlaitBoard, element: PlaitLine) => Point[];
11
+ export declare const getCurvePoints: (board: PlaitBoard, element: PlaitLine) => Point[];
12
+ export declare const transformOpsToPoints: (ops: Op[]) => number[][];
7
13
  export declare const isHitPolyLine: (pathPoints: Point[], point: Point, strokeWidth: number, expand?: number) => boolean;
8
14
  export declare const getHitLineTextIndex: (board: PlaitBoard, element: PlaitLine, point: Point) => number;
9
15
  export declare const isHitLineText: (board: PlaitBoard, element: PlaitLine, point: Point) => boolean;
10
16
  export declare const drawLine: (board: PlaitBoard, element: PlaitLine) => SVGGElement;
11
- export declare const getSourcePoint: (board: PlaitBoard, element: PlaitLine) => Point;
12
- export declare const getTargetPoint: (board: PlaitBoard, element: PlaitLine) => Point;
13
- export declare const getConnectionPoint: (geometry: PlaitGeometry, connection: Point, offset: number) => Point;
17
+ export declare const getConnectionPoint: (geometry: PlaitGeometry, connection: Point, direction?: Direction, delta?: number) => Point;
14
18
  export declare const transformPointToConnection: (board: PlaitBoard, point: Point, hitElement: PlaitGeometry) => Point;
15
19
  export declare const getHitConnectorPoint: (movingPoint: Point, hitElement: PlaitGeometry, rectangle: RectangleClient) => Point | undefined;
16
20
  export declare const getLineTextRectangle: (board: PlaitBoard, element: PlaitLine, index: number) => RectangleClient;
17
21
  export declare const getBoardLines: (board: PlaitBoard) => PlaitLine[];
22
+ export declare const removeDuplicatePoints: (points: Point[]) => Point[];
23
+ export declare const getExtendPoint: (source: Point, target: Point, extendDistance: number) => Point;
24
+ export declare const Q2C: (points: Point[]) => Point[];
25
+ export declare const getVectorByConnection: (boundElement: PlaitGeometry, connection: PointOfRectangle) => Vector;
@@ -1,6 +1,7 @@
1
1
  import { PlaitBoard, Point } from '@plait/core';
2
2
  import { PlaitGeometry } from '../../interfaces';
3
- export declare const getHitGeometryResizeHandleRef: (board: PlaitBoard, element: PlaitGeometry, point: Point) => {
3
+ import { PlaitImage } from '../../interfaces/image';
4
+ export declare const getHitGeometryResizeHandleRef: (board: PlaitBoard, element: PlaitGeometry | PlaitImage, point: Point) => {
4
5
  rectangle: {
5
6
  x: number;
6
7
  y: number;
@@ -1,10 +1,14 @@
1
- import { PlaitBoard, Point, RectangleClient } from '@plait/core';
1
+ import { PlaitBoard, Point } from '@plait/core';
2
2
  import { PlaitLine } from '../../interfaces';
3
3
  export declare enum LineResizeHandle {
4
4
  'source' = "source",
5
- 'target' = "target"
5
+ 'target' = "target",
6
+ 'addHandle' = "addHandle"
6
7
  }
7
8
  export declare const getHitLineResizeHandleRef: (board: PlaitBoard, element: PlaitLine, point: Point) => {
8
- rectangle: RectangleClient;
9
9
  handle: LineResizeHandle;
10
+ index: number;
11
+ } | {
12
+ index: number;
13
+ handle?: undefined;
10
14
  } | undefined;
@@ -1,5 +1,7 @@
1
1
  import { PlaitBoard } from '@plait/core';
2
2
  import { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';
3
+ import { PlaitImage } from '../interfaces/image';
3
4
  export declare const getSelectedDrawElements: (board: PlaitBoard) => PlaitDrawElement[];
4
5
  export declare const getSelectedGeometryElements: (board: PlaitBoard) => PlaitGeometry[];
5
6
  export declare const getSelectedLineElements: (board: PlaitBoard) => PlaitLine[];
7
+ export declare const getSelectedImageElements: (board: PlaitBoard) => PlaitImage[];
@@ -0,0 +1,2 @@
1
+ import { PlaitShape } from '../interfaces';
2
+ export declare const getShape: (value: PlaitShape) => import("../interfaces").GeometryShapes;
@@ -1,22 +0,0 @@
1
- import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, isPointInPolygon, setStrokeLinecap } from '@plait/core';
2
- export const DiamondEngine = {
3
- draw(board, rectangle, options) {
4
- const points = RectangleClient.getEdgeCenterPoints(rectangle);
5
- const rs = PlaitBoard.getRoughSVG(board);
6
- const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });
7
- setStrokeLinecap(polygon, 'round');
8
- return polygon;
9
- },
10
- isHit(rectangle, point) {
11
- const controlPoints = RectangleClient.getEdgeCenterPoints(rectangle);
12
- return isPointInPolygon(point, controlPoints);
13
- },
14
- getNearestPoint(rectangle, point) {
15
- const connectorPoints = RectangleClient.getEdgeCenterPoints(rectangle);
16
- return getNearestPointBetweenPointAndSegments(point, connectorPoints);
17
- },
18
- getConnectorPoints(rectangle) {
19
- return RectangleClient.getEdgeCenterPoints(rectangle);
20
- }
21
- };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbW9uZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9kaWFtb25kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsZUFBZSxFQUFFLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTdJLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZ0I7SUFDdEMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuQyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUMxQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckUsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDcEQsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sc0NBQXNDLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLCBpc1BvaW50SW5Qb2x5Z29uLCBzZXRTdHJva2VMaW5lY2FwIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcblxuZXhwb3J0IGNvbnN0IERpYW1vbmRFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBycy5wb2x5Z29uKHBvaW50cywgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAocG9seWdvbiwgJ3JvdW5kJyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjb250cm9sUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGlzUG9pbnRJblBvbHlnb24ocG9pbnQsIGNvbnRyb2xQb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBjb25uZWN0b3JQb2ludHMpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH1cbn07XG4iXX0=
@@ -1,55 +0,0 @@
1
- import { PlaitBoard, RectangleClient, isPointInEllipse } from '@plait/core';
2
- export const EllipseEngine = {
3
- draw(board, rectangle, options) {
4
- const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
5
- const rs = PlaitBoard.getRoughSVG(board);
6
- return rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });
7
- },
8
- isHit(rectangle, point) {
9
- const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
10
- return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
11
- },
12
- getNearestPoint(rectangle, point) {
13
- const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
14
- return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
15
- },
16
- getConnectorPoints(rectangle) {
17
- return RectangleClient.getEdgeCenterPoints(rectangle);
18
- }
19
- };
20
- export function getNearestPointBetweenPointAndEllipse(point, center, rx, ry, rotation = 0) {
21
- const rectangleClient = {
22
- x: center[0] - rx,
23
- y: center[1] - ry,
24
- height: ry * 2,
25
- width: rx * 2
26
- };
27
- // https://stackoverflow.com/a/46007540/232122
28
- const px = Math.abs(point[0] - rectangleClient.x - rectangleClient.width / 2);
29
- const py = Math.abs(point[1] - rectangleClient.y - rectangleClient.height / 2);
30
- let tx = 0.707;
31
- let ty = 0.707;
32
- const a = Math.abs(rectangleClient.width) / 2;
33
- const b = Math.abs(rectangleClient.height) / 2;
34
- [0, 1, 2, 3].forEach(x => {
35
- const xx = a * tx;
36
- const yy = b * ty;
37
- const ex = ((a * a - b * b) * tx ** 3) / a;
38
- const ey = ((b * b - a * a) * ty ** 3) / b;
39
- const rx = xx - ex;
40
- const ry = yy - ey;
41
- const qx = px - ex;
42
- const qy = py - ey;
43
- const r = Math.hypot(ry, rx);
44
- const q = Math.hypot(qy, qx);
45
- tx = Math.min(1, Math.max(0, ((qx * r) / q + ex) / a));
46
- ty = Math.min(1, Math.max(0, ((qy * r) / q + ey) / b));
47
- const t = Math.hypot(ty, tx);
48
- tx /= t;
49
- ty /= t;
50
- });
51
- const signX = point[0] > center[0] ? 1 : -1;
52
- const signY = point[1] > center[1] ? 1 : -1;
53
- return [center[0] + a * tx * signX, center[1] + b * ty * signY];
54
- }
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxsaXBzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9lbGxpcHNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSW5GLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBZ0I7SUFDdEMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLFdBQVcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDMUMsTUFBTSxXQUFXLEdBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuRyxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxNQUFNLFdBQVcsR0FBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25HLE9BQU8scUNBQXFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0NBQ0osQ0FBQztBQUVGLE1BQU0sVUFBVSxxQ0FBcUMsQ0FBQyxLQUFZLEVBQUUsTUFBYSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsV0FBbUIsQ0FBQztJQUMzSCxNQUFNLGVBQWUsR0FBRztRQUNwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDakIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ2pCLE1BQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQztRQUNkLEtBQUssRUFBRSxFQUFFLEdBQUcsQ0FBQztLQUNoQixDQUFDO0lBQ0YsOENBQThDO0lBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFL0UsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2YsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWYsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUvQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNyQixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFbEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFM0MsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBRW5CLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUVuQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU3QixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ1IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIGlzUG9pbnRJbkVsbGlwc2UgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgRWxsaXBzZUVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgcmV0dXJuIHJzLmVsbGlwc2UoY2VudGVyUG9pbnRbMF0sIGNlbnRlclBvaW50WzFdLCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQsIHsgLi4ub3B0aW9ucywgZmlsbFN0eWxlOiAnc29saWQnIH0pO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgcmV0dXJuIGlzUG9pbnRJbkVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQ6IFBvaW50LCBjZW50ZXI6IFBvaW50LCByeDogbnVtYmVyLCByeTogbnVtYmVyLCByb3RhdGlvbjogbnVtYmVyID0gMCk6IFBvaW50IHtcbiAgICBjb25zdCByZWN0YW5nbGVDbGllbnQgPSB7XG4gICAgICAgIHg6IGNlbnRlclswXSAtIHJ4LFxuICAgICAgICB5OiBjZW50ZXJbMV0gLSByeSxcbiAgICAgICAgaGVpZ2h0OiByeSAqIDIsXG4gICAgICAgIHdpZHRoOiByeCAqIDJcbiAgICB9O1xuICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjAwNzU0MC8yMzIxMjJcbiAgICBjb25zdCBweCA9IE1hdGguYWJzKHBvaW50WzBdIC0gcmVjdGFuZ2xlQ2xpZW50LnggLSByZWN0YW5nbGVDbGllbnQud2lkdGggLyAyKTtcbiAgICBjb25zdCBweSA9IE1hdGguYWJzKHBvaW50WzFdIC0gcmVjdGFuZ2xlQ2xpZW50LnkgLSByZWN0YW5nbGVDbGllbnQuaGVpZ2h0IC8gMik7XG5cbiAgICBsZXQgdHggPSAwLjcwNztcbiAgICBsZXQgdHkgPSAwLjcwNztcblxuICAgIGNvbnN0IGEgPSBNYXRoLmFicyhyZWN0YW5nbGVDbGllbnQud2lkdGgpIC8gMjtcbiAgICBjb25zdCBiID0gTWF0aC5hYnMocmVjdGFuZ2xlQ2xpZW50LmhlaWdodCkgLyAyO1xuXG4gICAgWzAsIDEsIDIsIDNdLmZvckVhY2goeCA9PiB7XG4gICAgICAgIGNvbnN0IHh4ID0gYSAqIHR4O1xuICAgICAgICBjb25zdCB5eSA9IGIgKiB0eTtcblxuICAgICAgICBjb25zdCBleCA9ICgoYSAqIGEgLSBiICogYikgKiB0eCAqKiAzKSAvIGE7XG4gICAgICAgIGNvbnN0IGV5ID0gKChiICogYiAtIGEgKiBhKSAqIHR5ICoqIDMpIC8gYjtcblxuICAgICAgICBjb25zdCByeCA9IHh4IC0gZXg7XG4gICAgICAgIGNvbnN0IHJ5ID0geXkgLSBleTtcblxuICAgICAgICBjb25zdCBxeCA9IHB4IC0gZXg7XG4gICAgICAgIGNvbnN0IHF5ID0gcHkgLSBleTtcblxuICAgICAgICBjb25zdCByID0gTWF0aC5oeXBvdChyeSwgcngpO1xuICAgICAgICBjb25zdCBxID0gTWF0aC5oeXBvdChxeSwgcXgpO1xuXG4gICAgICAgIHR4ID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgKChxeCAqIHIpIC8gcSArIGV4KSAvIGEpKTtcbiAgICAgICAgdHkgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCAoKHF5ICogcikgLyBxICsgZXkpIC8gYikpO1xuICAgICAgICBjb25zdCB0ID0gTWF0aC5oeXBvdCh0eSwgdHgpO1xuICAgICAgICB0eCAvPSB0O1xuICAgICAgICB0eSAvPSB0O1xuICAgIH0pO1xuICAgIGNvbnN0IHNpZ25YID0gcG9pbnRbMF0gPiBjZW50ZXJbMF0gPyAxIDogLTE7XG4gICAgY29uc3Qgc2lnblkgPSBwb2ludFsxXSA+IGNlbnRlclsxXSA/IDEgOiAtMTtcblxuICAgIHJldHVybiBbY2VudGVyWzBdICsgYSAqIHR4ICogc2lnblgsIGNlbnRlclsxXSArIGIgKiB0eSAqIHNpZ25ZXTtcbn1cbiJdfQ==
@@ -1,18 +0,0 @@
1
- import { GeometryShape } from '../../interfaces';
2
- import { DiamondEngine } from './diamond';
3
- import { EllipseEngine } from './ellipse';
4
- import { ParallelogramEngine } from './parallelogram';
5
- import { RectangleEngine } from './rectangle';
6
- import { RoundRectangleEngine } from './round-rectangle';
7
- export const ShapeEngineMap = {
8
- [GeometryShape.rectangle]: RectangleEngine,
9
- [GeometryShape.diamond]: DiamondEngine,
10
- [GeometryShape.ellipse]: EllipseEngine,
11
- [GeometryShape.parallelogram]: ParallelogramEngine,
12
- [GeometryShape.roundRectangle]: RoundRectangleEngine,
13
- [GeometryShape.text]: RectangleEngine
14
- };
15
- export const getEngine = (shape) => {
16
- return ShapeEngineMap[shape];
17
- };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9lbmdpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBdUM7SUFDOUQsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZTtJQUMxQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxhQUFhO0lBQ3RDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWE7SUFDdEMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLEVBQUUsbUJBQW1CO0lBQ2xELENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLG9CQUFvQjtJQUNwRCxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlO0NBQ3hDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7SUFDOUMsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR2VvbWV0cnlTaGFwZSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERpYW1vbmRFbmdpbmUgfSBmcm9tICcuL2RpYW1vbmQnO1xuaW1wb3J0IHsgRWxsaXBzZUVuZ2luZSB9IGZyb20gJy4vZWxsaXBzZSc7XG5pbXBvcnQgeyBQYXJhbGxlbG9ncmFtRW5naW5lIH0gZnJvbSAnLi9wYXJhbGxlbG9ncmFtJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4vcmVjdGFuZ2xlJztcbmltcG9ydCB7IFJvdW5kUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi9yb3VuZC1yZWN0YW5nbGUnO1xuXG5leHBvcnQgY29uc3QgU2hhcGVFbmdpbmVNYXA6IFJlY29yZDxHZW9tZXRyeVNoYXBlLCBTaGFwZUVuZ2luZT4gPSB7XG4gICAgW0dlb21ldHJ5U2hhcGUucmVjdGFuZ2xlXTogUmVjdGFuZ2xlRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLmRpYW1vbmRdOiBEaWFtb25kRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLmVsbGlwc2VdOiBFbGxpcHNlRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLnBhcmFsbGVsb2dyYW1dOiBQYXJhbGxlbG9ncmFtRW5naW5lLFxuICAgIFtHZW9tZXRyeVNoYXBlLnJvdW5kUmVjdGFuZ2xlXTogUm91bmRSZWN0YW5nbGVFbmdpbmUsXG4gICAgW0dlb21ldHJ5U2hhcGUudGV4dF06IFJlY3RhbmdsZUVuZ2luZVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEVuZ2luZSA9IChzaGFwZTogR2VvbWV0cnlTaGFwZSkgPT4ge1xuICAgIHJldHVybiBTaGFwZUVuZ2luZU1hcFtzaGFwZV07XG59O1xuIl19
@@ -1,32 +0,0 @@
1
- import { PlaitBoard, getNearestPointBetweenPointAndSegments, isPointInPolygon, setStrokeLinecap } from '@plait/core';
2
- import { getCenterPointsOnPolygon } from '../geometry';
3
- export const ParallelogramEngine = {
4
- draw(board, rectangle, options) {
5
- const points = getParallelogramPoints(rectangle);
6
- const rs = PlaitBoard.getRoughSVG(board);
7
- const polygon = rs.polygon(points, { ...options, fillStyle: 'solid' });
8
- setStrokeLinecap(polygon, 'round');
9
- return polygon;
10
- },
11
- isHit(rectangle, point) {
12
- const parallelogramPoints = getParallelogramPoints(rectangle);
13
- return isPointInPolygon(point, parallelogramPoints);
14
- },
15
- getNearestPoint(rectangle, point) {
16
- const cornerPoints = getParallelogramPoints(rectangle);
17
- return getNearestPointBetweenPointAndSegments(point, cornerPoints);
18
- },
19
- getConnectorPoints(rectangle) {
20
- const cornerPoints = getParallelogramPoints(rectangle);
21
- return getCenterPointsOnPolygon(cornerPoints);
22
- }
23
- };
24
- export const getParallelogramPoints = (rectangle) => {
25
- return [
26
- [rectangle.x + rectangle.width / 4, rectangle.y],
27
- [rectangle.x + rectangle.width, rectangle.y],
28
- [rectangle.x + (rectangle.width * 3) / 4, rectangle.y + rectangle.height],
29
- [rectangle.x, rectangle.y + rectangle.height]
30
- ];
31
- };
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWxvZ3JhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3V0aWxzL2VuZ2luZS9wYXJhbGxlbG9ncmFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQTBCLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdJLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd2RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDNUMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDdkUsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFDRCxLQUFLLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQzFDLE1BQU0sbUJBQW1CLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsT0FBTyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxNQUFNLFlBQVksR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsU0FBMEI7UUFDekMsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkQsT0FBTyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsU0FBMEIsRUFBVyxFQUFFO0lBQzFFLE9BQU87UUFDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN6RSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ2hELENBQUM7QUFDTixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cywgaXNQb2ludEluUG9seWdvbiwgc2V0U3Ryb2tlTGluZWNhcCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRDZW50ZXJQb2ludHNPblBvbHlnb24gfSBmcm9tICcuLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5cbmV4cG9ydCBjb25zdCBQYXJhbGxlbG9ncmFtRW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBwb2ludHMgPSBnZXRQYXJhbGxlbG9ncmFtUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHBvbHlnb24gPSBycy5wb2x5Z29uKHBvaW50cywgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAocG9seWdvbiwgJ3JvdW5kJyk7XG4gICAgICAgIHJldHVybiBwb2x5Z29uO1xuICAgIH0sXG4gICAgaXNIaXQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBwYXJhbGxlbG9ncmFtUG9pbnRzID0gZ2V0UGFyYWxsZWxvZ3JhbVBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gaXNQb2ludEluUG9seWdvbihwb2ludCwgcGFyYWxsZWxvZ3JhbVBvaW50cyk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSBnZXRQYXJhbGxlbG9ncmFtUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyhwb2ludCwgY29ybmVyUG9pbnRzKTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBjb3JuZXJQb2ludHMgPSBnZXRQYXJhbGxlbG9ncmFtUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRDZW50ZXJQb2ludHNPblBvbHlnb24oY29ybmVyUG9pbnRzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGFyYWxsZWxvZ3JhbVBvaW50cyA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IFBvaW50W10gPT4ge1xuICAgIHJldHVybiBbXG4gICAgICAgIFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDQsIHJlY3RhbmdsZS55XSxcbiAgICAgICAgW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUueV0sXG4gICAgICAgIFtyZWN0YW5nbGUueCArIChyZWN0YW5nbGUud2lkdGggKiAzKSAvIDQsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgIFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgIF07XG59O1xuIl19
@@ -1,18 +0,0 @@
1
- import { RectangleClient, drawRectangle, getNearestPointBetweenPointAndSegments } from '@plait/core';
2
- export const RectangleEngine = {
3
- draw(board, rectangle, options) {
4
- return drawRectangle(board, rectangle, { ...options, fillStyle: 'solid' });
5
- },
6
- isHit(rectangle, point) {
7
- const rangeRectangle = RectangleClient.toRectangleClient([point, point]);
8
- return RectangleClient.isHit(rectangle, rangeRectangle);
9
- },
10
- getNearestPoint(rectangle, point) {
11
- const cornerPoints = RectangleClient.getCornerPoints(rectangle);
12
- return getNearestPointBetweenPointAndSegments(point, cornerPoints);
13
- },
14
- getConnectorPoints(rectangle) {
15
- return RectangleClient.getEdgeCenterPoints(rectangle);
16
- }
17
- };
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvZW5naW5lL3JlY3RhbmdsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGVBQWUsRUFBRSxhQUFhLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFJeEgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFnQjtJQUN4QyxJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1FBQ2hFLE9BQU8sYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsS0FBSyxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUMxQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCxlQUFlLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQ3BELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEUsT0FBTyxzQ0FBc0MsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELGtCQUFrQixDQUFDLFNBQTBCO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzFELENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgZHJhd1JlY3RhbmdsZSwgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgUmVjdGFuZ2xlRW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlLCB7IC4uLm9wdGlvbnMsIGZpbGxTdHlsZTogJ3NvbGlkJyB9KTtcbiAgICB9LFxuICAgIGlzSGl0KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQudG9SZWN0YW5nbGVDbGllbnQoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgY29ybmVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIGNvcm5lclBvaW50cyk7XG4gICAgfSxcbiAgICBnZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfVxufTtcbiJdfQ==