@plait/core 0.50.1 → 0.51.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.
- package/README.md +30 -28
- package/board/board.component.interface.d.ts +0 -5
- package/esm2022/board/board.component.interface.mjs +1 -1
- package/esm2022/board/board.component.mjs +9 -6
- package/esm2022/interfaces/board.mjs +3 -3
- package/esm2022/interfaces/direction.mjs +1 -1
- package/esm2022/interfaces/point.mjs +20 -5
- package/esm2022/interfaces/rectangle-client.mjs +57 -2
- package/esm2022/plugins/create-board.mjs +5 -5
- package/esm2022/plugins/with-hand.mjs +6 -6
- package/esm2022/plugins/with-history.mjs +4 -4
- package/esm2022/plugins/with-hotkey.mjs +10 -56
- package/esm2022/plugins/with-moving.mjs +97 -37
- package/esm2022/plugins/with-selection.mjs +36 -19
- package/esm2022/utils/common.mjs +18 -6
- package/esm2022/utils/dom/common.mjs +17 -1
- package/esm2022/utils/drawing/arrow.mjs +23 -0
- package/esm2022/utils/drawing/circle.mjs +4 -0
- package/esm2022/utils/drawing/line.mjs +47 -0
- package/esm2022/utils/drawing/rectangle.mjs +34 -0
- package/esm2022/utils/element.mjs +11 -22
- package/esm2022/utils/helper.mjs +2 -2
- package/esm2022/utils/id-creator.mjs +2 -2
- package/esm2022/utils/index.mjs +5 -5
- package/esm2022/utils/math.mjs +37 -4
- package/esm2022/utils/moving-element.mjs +2 -7
- package/esm2022/utils/selected-element.mjs +15 -2
- package/esm2022/utils/weak-maps.mjs +1 -1
- package/fesm2022/plait-core.mjs +426 -267
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +4 -4
- package/interfaces/direction.d.ts +2 -0
- package/interfaces/point.d.ts +7 -2
- package/interfaces/rectangle-client.d.ts +7 -6
- package/package.json +1 -1
- package/plugins/with-moving.d.ts +4 -0
- package/styles/styles.scss +4 -0
- package/utils/common.d.ts +2 -1
- package/utils/dom/common.d.ts +1 -0
- package/utils/helper.d.ts +1 -1
- package/utils/index.d.ts +4 -4
- package/utils/math.d.ts +14 -1
- package/utils/moving-element.d.ts +0 -1
- package/utils/selected-element.d.ts +2 -1
- package/utils/weak-maps.d.ts +8 -2
- package/esm2022/utils/draw/arrow.mjs +0 -23
- package/esm2022/utils/draw/circle.mjs +0 -4
- package/esm2022/utils/draw/line.mjs +0 -47
- package/esm2022/utils/draw/rectangle.mjs +0 -34
- /package/utils/{draw → drawing}/arrow.d.ts +0 -0
- /package/utils/{draw → drawing}/circle.d.ts +0 -0
- /package/utils/{draw → drawing}/line.d.ts +0 -0
- /package/utils/{draw → drawing}/rectangle.d.ts +0 -0
package/interfaces/board.d.ts
CHANGED
|
@@ -35,15 +35,15 @@ export interface PlaitBoard {
|
|
|
35
35
|
mouseup: (event: MouseEvent) => void;
|
|
36
36
|
globalMousemove: (event: MouseEvent) => void;
|
|
37
37
|
globalMouseup: (event: MouseEvent) => void;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
keyDown: (event: KeyboardEvent) => void;
|
|
39
|
+
globalKeyDown: (event: KeyboardEvent) => void;
|
|
40
|
+
keyUp: (event: KeyboardEvent) => void;
|
|
41
41
|
setFragment: (data: DataTransfer | null, clipboardContext: WritableClipboardContext | null, rectangle: RectangleClient | null, type: 'copy' | 'cut') => void;
|
|
42
42
|
insertFragment: (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => void;
|
|
43
43
|
deleteFragment: (data: DataTransfer | null) => void;
|
|
44
44
|
getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];
|
|
45
45
|
getRelatedFragment: (data: PlaitElement[]) => PlaitElement[];
|
|
46
|
-
|
|
46
|
+
dblClick: (event: MouseEvent) => void;
|
|
47
47
|
drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;
|
|
48
48
|
redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;
|
|
49
49
|
destroyElement: (context: PlaitPluginElementContext) => void;
|
package/interfaces/point.d.ts
CHANGED
|
@@ -5,6 +5,11 @@ export interface XYPosition {
|
|
|
5
5
|
}
|
|
6
6
|
export declare const Point: {
|
|
7
7
|
isEquals(point?: Point, otherPoint?: Point): boolean | undefined;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
isHorizontal(point?: Point, otherPoint?: Point, tolerance?: number): boolean | undefined;
|
|
9
|
+
isOverHorizontal(points: Point[], tolerance?: number): boolean;
|
|
10
|
+
isVertical(point?: Point, otherPoint?: Point, tolerance?: number): boolean | undefined;
|
|
11
|
+
isOverVertical(points: Point[], tolerance?: number): boolean;
|
|
12
|
+
isAlign(points: Point[], tolerance?: number): boolean;
|
|
13
|
+
getOffsetX(point1: Point, point2: Point): number;
|
|
14
|
+
getOffsetY(point1: Point, point2: Point): number;
|
|
10
15
|
};
|
|
@@ -14,12 +14,11 @@ export declare const RectangleClient: {
|
|
|
14
14
|
isHit: (origin: RectangleClient, target: RectangleClient) => boolean;
|
|
15
15
|
isHitX: (origin: RectangleClient, target: RectangleClient) => boolean;
|
|
16
16
|
isHitY: (origin: RectangleClient, target: RectangleClient) => boolean;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
17
|
+
getPoints(rectangle: RectangleClient): [Point, Point];
|
|
18
|
+
getRectangleByCenterPoint(point: Point, width: number, height: number): RectangleClient;
|
|
19
|
+
getRectangleByPoint(point: Point, width: number, height: number): RectangleClient;
|
|
20
|
+
getRectangleByPoints(points: Point[]): RectangleClient;
|
|
21
|
+
getCornerPointsByPoints(points: Point[]): [Point, Point, Point, Point];
|
|
23
22
|
getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {
|
|
24
23
|
x: number;
|
|
25
24
|
y: number;
|
|
@@ -34,6 +33,7 @@ export declare const RectangleClient: {
|
|
|
34
33
|
};
|
|
35
34
|
isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => boolean;
|
|
36
35
|
getCornerPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
|
|
36
|
+
getCenterPoint: (rectangle: RectangleClient) => Point;
|
|
37
37
|
getEdgeCenterPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
|
|
38
38
|
getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => Point;
|
|
39
39
|
expand(rectangle: RectangleClient, left: number, top?: number, right?: number, bottom?: number): {
|
|
@@ -44,4 +44,5 @@ export declare const RectangleClient: {
|
|
|
44
44
|
};
|
|
45
45
|
getGapCenter(rectangle1: RectangleClient, rectangle2: RectangleClient, isHorizontal: boolean): number;
|
|
46
46
|
isPointInRectangle(rectangle: RectangleClient, point: Point): boolean;
|
|
47
|
+
getBoundingRectangle(rectangles: RectangleClient[]): RectangleClient;
|
|
47
48
|
};
|
package/package.json
CHANGED
package/plugins/with-moving.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
import { PlaitBoard } from '../interfaces/board';
|
|
2
|
+
import { PlaitElement } from '../interfaces/element';
|
|
2
3
|
export declare function withMoving(board: PlaitBoard): PlaitBoard;
|
|
4
|
+
export declare function withArrowMoving(board: PlaitBoard): PlaitBoard;
|
|
5
|
+
export declare function getTargetElements(board: PlaitBoard): PlaitElement[];
|
|
6
|
+
export declare function updatePoints(board: PlaitBoard, targetElements: PlaitElement[], offsetX: number, offsetY: number): PlaitElement[];
|
package/styles/styles.scss
CHANGED
package/utils/common.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { PlaitBoard } from '../interfaces/board';
|
|
2
|
+
export declare const throttleRAF: (board: PlaitBoard, key: string, fn: () => void) => void;
|
|
2
3
|
export declare const debounce: (func: () => void, wait: number, options?: {
|
|
3
4
|
leading: boolean;
|
|
4
5
|
}) => () => void;
|
package/utils/dom/common.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export declare function createG(): SVGGElement;
|
|
|
5
5
|
export declare function createPath(): SVGPathElement;
|
|
6
6
|
export declare function createRect(rectangle: RectangleClient, options?: Options): SVGRectElement;
|
|
7
7
|
export declare const setStrokeLinecap: (g: SVGGElement, value: 'round' | 'square') => void;
|
|
8
|
+
export declare const setTransformRotate: (g: SVGGElement, rectangle: RectangleClient, angle: number) => void;
|
|
8
9
|
export declare const setPathStrokeLinecap: (g: SVGGElement, value: 'round' | 'square') => void;
|
|
9
10
|
export declare function createMask(): SVGMaskElement;
|
|
10
11
|
export declare function createSVG(): SVGSVGElement;
|
package/utils/helper.d.ts
CHANGED
package/utils/index.d.ts
CHANGED
|
@@ -8,10 +8,10 @@ export * from './id-creator';
|
|
|
8
8
|
export * from './math';
|
|
9
9
|
export * from './weak-maps';
|
|
10
10
|
export * from './selected-element';
|
|
11
|
-
export * from './
|
|
12
|
-
export * from './
|
|
13
|
-
export * from './
|
|
14
|
-
export * from './
|
|
11
|
+
export * from './drawing/rectangle';
|
|
12
|
+
export * from './drawing/arrow';
|
|
13
|
+
export * from './drawing/circle';
|
|
14
|
+
export * from './drawing/line';
|
|
15
15
|
export * from './tree';
|
|
16
16
|
export * from './element';
|
|
17
17
|
export * from './viewport';
|
package/utils/math.d.ts
CHANGED
|
@@ -12,5 +12,18 @@ export declare const isPolylineHitRectangle: (points: Point[], rectangle: Rectan
|
|
|
12
12
|
export declare const isPointInPolygon: (point: Point, points: Point[]) => boolean;
|
|
13
13
|
export declare const isPointInEllipse: (point: Point, center: Point, rx: number, ry: number, rotation?: number) => boolean;
|
|
14
14
|
export declare const isPointInRoundRectangle: (point: Point, rectangle: RectangleClient, radius: number) => boolean;
|
|
15
|
-
export declare const downScale: (number: number) => number;
|
|
16
15
|
export declare const catmullRomFitting: (points: Point[]) => Point[];
|
|
16
|
+
/**
|
|
17
|
+
* the result of slope is based on Cartesian coordinate system
|
|
18
|
+
* x, y are based on the position in the Cartesian coordinate system
|
|
19
|
+
*/
|
|
20
|
+
export declare function getEllipseTangentSlope(x: number, y: number, a: number, b: number): number;
|
|
21
|
+
/**
|
|
22
|
+
* x, y are based on the position in the Cartesian coordinate system
|
|
23
|
+
*/
|
|
24
|
+
export declare function getVectorFromPointAndSlope(x: number, y: number, slope: number): Point;
|
|
25
|
+
/**
|
|
26
|
+
* The DOM likes values to be fixed to 3 decimal places
|
|
27
|
+
*/
|
|
28
|
+
export declare function toDomPrecision(v: number): number;
|
|
29
|
+
export declare function toFixed(v: number): number;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PlaitBoard, PlaitElement } from '../interfaces';
|
|
2
2
|
export declare const getMovingElements: (board: PlaitBoard) => PlaitElement[];
|
|
3
3
|
export declare const isMovingElements: (board: PlaitBoard) => boolean;
|
|
4
|
-
export declare const addMovingElements: (board: PlaitBoard, elements: PlaitElement[]) => void;
|
|
5
4
|
export declare const removeMovingElements: (board: PlaitBoard) => void;
|
|
6
5
|
export declare const cacheMovingElements: (board: PlaitBoard, elements: PlaitElement[]) => void;
|
|
@@ -2,9 +2,10 @@ import { PlaitBoard } from '../interfaces/board';
|
|
|
2
2
|
import { Selection } from '../interfaces/selection';
|
|
3
3
|
import { PlaitElement } from '../interfaces/element';
|
|
4
4
|
import { Point } from '../interfaces/point';
|
|
5
|
-
import { PlaitOptionsBoard } from '../
|
|
5
|
+
import { PlaitOptionsBoard } from '../plugins/with-options';
|
|
6
6
|
export declare const getHitElementsBySelection: (board: PlaitBoard, selection?: Selection, match?: (element: PlaitElement) => boolean) => PlaitElement[];
|
|
7
7
|
export declare const getHitElementByPoint: (board: PlaitBoard, point: Point, match?: (element: PlaitElement) => boolean) => undefined | PlaitElement;
|
|
8
|
+
export declare const getHitSelectedElements: (board: PlaitBoard, point: Point) => PlaitElement[];
|
|
8
9
|
export declare const cacheSelectedElements: (board: PlaitBoard, selectedElements: PlaitElement[]) => void;
|
|
9
10
|
export declare const getSelectedElements: (board: PlaitBoard) => PlaitElement[];
|
|
10
11
|
export declare const addSelectedElement: (board: PlaitBoard, element: PlaitElement | PlaitElement[]) => void;
|
package/utils/weak-maps.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RoughSVG } from 'roughjs/bin/svg';
|
|
2
|
-
import { BoardComponentInterface
|
|
2
|
+
import { BoardComponentInterface } from '../board/board.component.interface';
|
|
3
3
|
import { PlaitElement } from '../interfaces/element';
|
|
4
4
|
import { PlaitBoard } from '../interfaces/board';
|
|
5
5
|
import { Point } from '../interfaces/point';
|
|
@@ -15,7 +15,13 @@ export declare const BOARD_TO_AFTER_CHANGE: WeakMap<PlaitBoard, () => void>;
|
|
|
15
15
|
export declare const BOARD_TO_COMPONENT: WeakMap<PlaitBoard, BoardComponentInterface>;
|
|
16
16
|
export declare const BOARD_TO_ROUGH_SVG: WeakMap<PlaitBoard, RoughSVG>;
|
|
17
17
|
export declare const BOARD_TO_HOST: WeakMap<PlaitBoard, SVGSVGElement>;
|
|
18
|
-
export declare const BOARD_TO_ELEMENT_HOST: WeakMap<PlaitBoard,
|
|
18
|
+
export declare const BOARD_TO_ELEMENT_HOST: WeakMap<PlaitBoard, {
|
|
19
|
+
host: SVGGElement;
|
|
20
|
+
upperHost: SVGGElement;
|
|
21
|
+
activeHost: SVGGElement;
|
|
22
|
+
container: HTMLElement;
|
|
23
|
+
viewportContainer: HTMLElement;
|
|
24
|
+
}>;
|
|
19
25
|
export declare const BOARD_TO_SELECTED_ELEMENT: WeakMap<PlaitBoard, PlaitElement[]>;
|
|
20
26
|
export declare const BOARD_TO_MOVING_POINT_IN_BOARD: WeakMap<PlaitBoard, Point>;
|
|
21
27
|
export declare const BOARD_TO_MOVING_POINT: WeakMap<PlaitBoard, Point>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { rotate } from '../math';
|
|
2
|
-
export function arrowPoints(start, end, degree = 40) {
|
|
3
|
-
const width = Math.abs(start[0] - end[0]);
|
|
4
|
-
const height = Math.abs(start[1] - end[1]);
|
|
5
|
-
let hypotenuse = Math.hypot(width, height); // 斜边
|
|
6
|
-
const realRotateLine = hypotenuse / 2;
|
|
7
|
-
const rotateWidth = (realRotateLine / hypotenuse) * width;
|
|
8
|
-
const rotateHeight = (realRotateLine / hypotenuse) * height;
|
|
9
|
-
const rotatePoint = [
|
|
10
|
-
end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,
|
|
11
|
-
end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight
|
|
12
|
-
];
|
|
13
|
-
const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180);
|
|
14
|
-
const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180);
|
|
15
|
-
return { pointLeft, pointRight };
|
|
16
|
-
}
|
|
17
|
-
export function drawArrow(rs, start, end, options, maxHypotenuseLength = 10, degree = 40) {
|
|
18
|
-
const { pointLeft, pointRight } = arrowPoints(start, end, degree);
|
|
19
|
-
const arrowLineLeft = rs.linearPath([pointLeft, end], options);
|
|
20
|
-
const arrowLineRight = rs.linearPath([pointRight, end], options);
|
|
21
|
-
return [arrowLineLeft, arrowLineRight];
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9kcmF3L2Fycm93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFLakMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFZLEVBQUUsR0FBVSxFQUFFLE1BQU0sR0FBRyxFQUFFO0lBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSztJQUNqRCxNQUFNLGNBQWMsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUMxRCxNQUFNLFlBQVksR0FBRyxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDNUQsTUFBTSxXQUFXLEdBQUc7UUFDaEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVc7UUFDL0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVk7S0FDcEUsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBVSxDQUFDO0lBQzdHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFVLENBQUM7SUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxFQUFZLEVBQUUsS0FBWSxFQUFFLEdBQVUsRUFBRSxPQUFnQixFQUFFLG1CQUFtQixHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsRUFBRTtJQUNySCxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0QsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRSxPQUFPLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByb3RhdGUgfSBmcm9tICcuLi9tYXRoJztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBhcnJvd1BvaW50cyhzdGFydDogUG9pbnQsIGVuZDogUG9pbnQsIGRlZ3JlZSA9IDQwKSB7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLmFicyhzdGFydFswXSAtIGVuZFswXSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnMoc3RhcnRbMV0gLSBlbmRbMV0pO1xuICAgIGxldCBoeXBvdGVudXNlID0gTWF0aC5oeXBvdCh3aWR0aCwgaGVpZ2h0KTsgLy8g5pac6L65XG4gICAgY29uc3QgcmVhbFJvdGF0ZUxpbmUgPSBoeXBvdGVudXNlIC8gMjtcbiAgICBjb25zdCByb3RhdGVXaWR0aCA9IChyZWFsUm90YXRlTGluZSAvIGh5cG90ZW51c2UpICogd2lkdGg7XG4gICAgY29uc3Qgcm90YXRlSGVpZ2h0ID0gKHJlYWxSb3RhdGVMaW5lIC8gaHlwb3RlbnVzZSkgKiBoZWlnaHQ7XG4gICAgY29uc3Qgcm90YXRlUG9pbnQgPSBbXG4gICAgICAgIGVuZFswXSA+IHN0YXJ0WzBdID8gZW5kWzBdIC0gcm90YXRlV2lkdGggOiBlbmRbMF0gKyByb3RhdGVXaWR0aCxcbiAgICAgICAgZW5kWzFdID4gc3RhcnRbMV0gPyBlbmRbMV0gLSByb3RhdGVIZWlnaHQgOiBlbmRbMV0gKyByb3RhdGVIZWlnaHRcbiAgICBdO1xuICAgIGNvbnN0IHBvaW50UmlnaHQgPSByb3RhdGUocm90YXRlUG9pbnRbMF0sIHJvdGF0ZVBvaW50WzFdLCBlbmRbMF0sIGVuZFsxXSwgKGRlZ3JlZSAqIE1hdGguUEkpIC8gMTgwKSBhcyBQb2ludDtcbiAgICBjb25zdCBwb2ludExlZnQgPSByb3RhdGUocm90YXRlUG9pbnRbMF0sIHJvdGF0ZVBvaW50WzFdLCBlbmRbMF0sIGVuZFsxXSwgKC1kZWdyZWUgKiBNYXRoLlBJKSAvIDE4MCkgYXMgUG9pbnQ7XG4gICAgcmV0dXJuIHsgcG9pbnRMZWZ0LCBwb2ludFJpZ2h0IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3QXJyb3cocnM6IFJvdWdoU1ZHLCBzdGFydDogUG9pbnQsIGVuZDogUG9pbnQsIG9wdGlvbnM6IE9wdGlvbnMsIG1heEh5cG90ZW51c2VMZW5ndGggPSAxMCwgZGVncmVlID0gNDApOiBTVkdHRWxlbWVudFtdIHtcbiAgICBjb25zdCB7IHBvaW50TGVmdCwgcG9pbnRSaWdodCB9ID0gYXJyb3dQb2ludHMoc3RhcnQsIGVuZCwgZGVncmVlKTtcbiAgICBjb25zdCBhcnJvd0xpbmVMZWZ0ID0gcnMubGluZWFyUGF0aChbcG9pbnRMZWZ0LCBlbmRdLCBvcHRpb25zKTtcbiAgICBjb25zdCBhcnJvd0xpbmVSaWdodCA9IHJzLmxpbmVhclBhdGgoW3BvaW50UmlnaHQsIGVuZF0sIG9wdGlvbnMpO1xuICAgIHJldHVybiBbYXJyb3dMaW5lTGVmdCwgYXJyb3dMaW5lUmlnaHRdO1xufVxuIl19
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function drawCircle(roughSVG, point, diameter, options) {
|
|
2
|
-
return roughSVG.circle(point[0], point[1], diameter, options);
|
|
3
|
-
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZHJhdy9jaXJjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLFVBQVUsQ0FBQyxRQUFrQixFQUFFLEtBQVksRUFBRSxRQUFnQixFQUFFLE9BQWdCO0lBQzNGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BvaW50JztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRyYXdDaXJjbGUocm91Z2hTVkc6IFJvdWdoU1ZHLCBwb2ludDogUG9pbnQsIGRpYW1ldGVyOiBudW1iZXIsIG9wdGlvbnM6IE9wdGlvbnMpOiBTVkdHRWxlbWVudCB7XG4gICAgcmV0dXJuIHJvdWdoU1ZHLmNpcmNsZShwb2ludFswXSwgcG9pbnRbMV0sIGRpYW1ldGVyLCBvcHRpb25zKTtcbn1cbiJdfQ==
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { createG, createPath } from '../dom/common';
|
|
2
|
-
export function drawLine(rs, start, end, options) {
|
|
3
|
-
return rs.linearPath([start, end], options);
|
|
4
|
-
}
|
|
5
|
-
export function drawLinearPath(points, options, closePath) {
|
|
6
|
-
const g = createG();
|
|
7
|
-
const path = createPath();
|
|
8
|
-
let polylinePath = '';
|
|
9
|
-
points.forEach((point, index) => {
|
|
10
|
-
if (index === 0) {
|
|
11
|
-
polylinePath += `M ${point[0]} ${point[1]} `;
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
polylinePath += `L ${point[0]} ${point[1]} `;
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
if (closePath) {
|
|
18
|
-
polylinePath += 'Z';
|
|
19
|
-
}
|
|
20
|
-
path.setAttribute('d', polylinePath);
|
|
21
|
-
path.setAttribute('stroke', `${options?.stroke}`);
|
|
22
|
-
path.setAttribute('stroke-width', `${options?.strokeWidth}`);
|
|
23
|
-
path.setAttribute('fill', `${options?.fill || 'none'}`);
|
|
24
|
-
options?.strokeLineDash && path.setAttribute('stroke-dasharray', `${options.strokeLineDash}`);
|
|
25
|
-
g.appendChild(path);
|
|
26
|
-
return g;
|
|
27
|
-
}
|
|
28
|
-
export function drawBezierPath(points, options) {
|
|
29
|
-
const g = createG();
|
|
30
|
-
const path = createPath();
|
|
31
|
-
let polylinePath = '';
|
|
32
|
-
for (let i = 0; i < points.length - 3; i += 3) {
|
|
33
|
-
if (i === 0) {
|
|
34
|
-
polylinePath += `M ${points[0][0]} ${points[0][1]} `;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
polylinePath += `C ${points[i + 1][0]} ${points[i + 1][1]}, ${points[i + 2][0]} ${points[i + 2][1]}, ${points[i + 3][0]} ${points[i + 3][1]}`;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
path.setAttribute('d', polylinePath);
|
|
41
|
-
path.setAttribute('stroke', `${options?.stroke}`);
|
|
42
|
-
path.setAttribute('stroke-width', `${options?.strokeWidth}`);
|
|
43
|
-
path.setAttribute('fill', `none`);
|
|
44
|
-
g.appendChild(path);
|
|
45
|
-
return g;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2RyYXcvbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEVBQVksRUFBRSxLQUFZLEVBQUUsR0FBVSxFQUFFLE9BQWdCO0lBQzdFLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFlLEVBQUUsT0FBaUIsRUFBRSxTQUFtQjtJQUNsRixNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztJQUNwQixNQUFNLElBQUksR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUUxQixJQUFJLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDdEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM1QixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDYixZQUFZLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDaEQ7YUFBTTtZQUNILFlBQVksSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUNoRDtJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxTQUFTLEVBQUU7UUFDWCxZQUFZLElBQUksR0FBRyxDQUFDO0tBQ3ZCO0lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNsRCxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEIsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFlLEVBQUUsT0FBaUI7SUFDN0QsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7SUFDcEIsTUFBTSxJQUFJLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFFMUIsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNULFlBQVksSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztTQUN4RDthQUFNO1lBQ0gsWUFBWSxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUNuSCxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDbkIsRUFBRSxDQUFDO1NBQ047S0FDSjtJQUVELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBCLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVHLCBjcmVhdGVQYXRoIH0gZnJvbSAnLi4vZG9tL2NvbW1vbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3TGluZShyczogUm91Z2hTVkcsIHN0YXJ0OiBQb2ludCwgZW5kOiBQb2ludCwgb3B0aW9uczogT3B0aW9ucyk6IFNWR0dFbGVtZW50IHtcbiAgICByZXR1cm4gcnMubGluZWFyUGF0aChbc3RhcnQsIGVuZF0sIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZHJhd0xpbmVhclBhdGgocG9pbnRzOiBQb2ludFtdLCBvcHRpb25zPzogT3B0aW9ucywgY2xvc2VQYXRoPzogYm9vbGVhbikge1xuICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgcGF0aCA9IGNyZWF0ZVBhdGgoKTtcblxuICAgIGxldCBwb2x5bGluZVBhdGggPSAnJztcbiAgICBwb2ludHMuZm9yRWFjaCgocG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgcG9seWxpbmVQYXRoICs9IGBNICR7cG9pbnRbMF19ICR7cG9pbnRbMV19IGA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb2x5bGluZVBhdGggKz0gYEwgJHtwb2ludFswXX0gJHtwb2ludFsxXX0gYDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGNsb3NlUGF0aCkge1xuICAgICAgICBwb2x5bGluZVBhdGggKz0gJ1onO1xuICAgIH1cblxuICAgIHBhdGguc2V0QXR0cmlidXRlKCdkJywgcG9seWxpbmVQYXRoKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgYCR7b3B0aW9ucz8uc3Ryb2tlfWApO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBgJHtvcHRpb25zPy5zdHJva2VXaWR0aH1gKTtcbiAgICBwYXRoLnNldEF0dHJpYnV0ZSgnZmlsbCcsIGAke29wdGlvbnM/LmZpbGwgfHwgJ25vbmUnfWApO1xuICAgIG9wdGlvbnM/LnN0cm9rZUxpbmVEYXNoICYmIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaGFycmF5JywgYCR7b3B0aW9ucy5zdHJva2VMaW5lRGFzaH1gKTtcbiAgICBnLmFwcGVuZENoaWxkKHBhdGgpO1xuXG4gICAgcmV0dXJuIGc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3QmV6aWVyUGF0aChwb2ludHM6IFBvaW50W10sIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCBwYXRoID0gY3JlYXRlUGF0aCgpO1xuXG4gICAgbGV0IHBvbHlsaW5lUGF0aCA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDM7IGkgKz0gMykge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgcG9seWxpbmVQYXRoICs9IGBNICR7cG9pbnRzWzBdWzBdfSAke3BvaW50c1swXVsxXX0gYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvbHlsaW5lUGF0aCArPSBgQyAke3BvaW50c1tpICsgMV1bMF19ICR7cG9pbnRzW2kgKyAxXVsxXX0sICR7cG9pbnRzW2kgKyAyXVswXX0gJHtwb2ludHNbaSArIDJdWzFdfSwgJHtwb2ludHNbaSArIDNdWzBdfSAke1xuICAgICAgICAgICAgICAgIHBvaW50c1tpICsgM11bMV1cbiAgICAgICAgICAgIH1gO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ2QnLCBwb2x5bGluZVBhdGgpO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCBgJHtvcHRpb25zPy5zdHJva2V9YCk7XG4gICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGAke29wdGlvbnM/LnN0cm9rZVdpZHRofWApO1xuICAgIHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgYG5vbmVgKTtcbiAgICBnLmFwcGVuZENoaWxkKHBhdGgpO1xuXG4gICAgcmV0dXJuIGc7XG59XG4iXX0=
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { MAX_RADIUS } from '../../constants';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces/board';
|
|
3
|
-
import { setStrokeLinecap } from '../dom/common';
|
|
4
|
-
/**
|
|
5
|
-
* drawRoundRectangle
|
|
6
|
-
*/
|
|
7
|
-
export function drawRoundRectangle(rs, x1, y1, x2, y2, options, outline = false, borderRadius) {
|
|
8
|
-
const width = Math.abs(x1 - x2);
|
|
9
|
-
const height = Math.abs(y1 - y2);
|
|
10
|
-
let radius = borderRadius || 0;
|
|
11
|
-
if (radius === 0) {
|
|
12
|
-
const defaultRadius = Math.min(width, height) / 8;
|
|
13
|
-
let radius = defaultRadius;
|
|
14
|
-
if (defaultRadius > MAX_RADIUS) {
|
|
15
|
-
radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
const point1 = [x1 + radius, y1];
|
|
19
|
-
const point2 = [x2 - radius, y1];
|
|
20
|
-
const point3 = [x2, y1 + radius];
|
|
21
|
-
const point4 = [x2, y2 - radius];
|
|
22
|
-
const point5 = [x2 - radius, y2];
|
|
23
|
-
const point6 = [x1 + radius, y2];
|
|
24
|
-
const point7 = [x1, y2 - radius];
|
|
25
|
-
const point8 = [x1, y1 + radius];
|
|
26
|
-
return rs.path(`M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`, options);
|
|
27
|
-
}
|
|
28
|
-
export const drawRectangle = (board, rectangle, options) => {
|
|
29
|
-
const roughSVG = PlaitBoard.getRoughSVG(board);
|
|
30
|
-
const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);
|
|
31
|
-
setStrokeLinecap(rectangleG, 'round');
|
|
32
|
-
return rectangleG;
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZHJhdy9yZWN0YW5nbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLEVBQVksRUFDWixFQUFVLEVBQ1YsRUFBVSxFQUNWLEVBQVUsRUFDVixFQUFVLEVBQ1YsT0FBZ0IsRUFDaEIsT0FBTyxHQUFHLEtBQUssRUFDZixZQUFxQjtJQUVyQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUVqQyxJQUFJLE1BQU0sR0FBRyxZQUFZLElBQUksQ0FBQyxDQUFDO0lBQy9CLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNkLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxJQUFJLE1BQU0sR0FBRyxhQUFhLENBQUM7UUFDM0IsSUFBSSxhQUFhLEdBQUcsVUFBVSxFQUFFO1lBQzVCLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztTQUNsRDtLQUNKO0lBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUVqQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQ1YsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sSUFBSSxNQUFNLGNBQWMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sSUFBSSxNQUFNLGNBQWMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sSUFBSSxNQUFNLGNBQWMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLE1BQU0sSUFBSSxNQUFNLGNBQWMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUMxVixPQUFPLENBQ1YsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFNBQTBCLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO0lBQzdGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0QyxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBSb3VnaFNWRyB9IGZyb20gJ3JvdWdoanMvYmluL3N2Zyc7XG5pbXBvcnQgeyBNQVhfUkFESVVTIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvcmVjdGFuZ2xlLWNsaWVudCc7XG5pbXBvcnQgeyBzZXRTdHJva2VMaW5lY2FwIH0gZnJvbSAnLi4vZG9tL2NvbW1vbic7XG5cbi8qKlxuICogZHJhd1JvdW5kUmVjdGFuZ2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmF3Um91bmRSZWN0YW5nbGUoXG4gICAgcnM6IFJvdWdoU1ZHLFxuICAgIHgxOiBudW1iZXIsXG4gICAgeTE6IG51bWJlcixcbiAgICB4MjogbnVtYmVyLFxuICAgIHkyOiBudW1iZXIsXG4gICAgb3B0aW9uczogT3B0aW9ucyxcbiAgICBvdXRsaW5lID0gZmFsc2UsXG4gICAgYm9yZGVyUmFkaXVzPzogbnVtYmVyXG4pIHtcbiAgICBjb25zdCB3aWR0aCA9IE1hdGguYWJzKHgxIC0geDIpO1xuICAgIGNvbnN0IGhlaWdodCA9IE1hdGguYWJzKHkxIC0geTIpO1xuXG4gICAgbGV0IHJhZGl1cyA9IGJvcmRlclJhZGl1cyB8fCAwO1xuICAgIGlmIChyYWRpdXMgPT09IDApIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFJhZGl1cyA9IE1hdGgubWluKHdpZHRoLCBoZWlnaHQpIC8gODtcbiAgICAgICAgbGV0IHJhZGl1cyA9IGRlZmF1bHRSYWRpdXM7XG4gICAgICAgIGlmIChkZWZhdWx0UmFkaXVzID4gTUFYX1JBRElVUykge1xuICAgICAgICAgICAgcmFkaXVzID0gb3V0bGluZSA/IE1BWF9SQURJVVMgKyAyIDogTUFYX1JBRElVUztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvaW50MSA9IFt4MSArIHJhZGl1cywgeTFdO1xuICAgIGNvbnN0IHBvaW50MiA9IFt4MiAtIHJhZGl1cywgeTFdO1xuICAgIGNvbnN0IHBvaW50MyA9IFt4MiwgeTEgKyByYWRpdXNdO1xuICAgIGNvbnN0IHBvaW50NCA9IFt4MiwgeTIgLSByYWRpdXNdO1xuICAgIGNvbnN0IHBvaW50NSA9IFt4MiAtIHJhZGl1cywgeTJdO1xuICAgIGNvbnN0IHBvaW50NiA9IFt4MSArIHJhZGl1cywgeTJdO1xuICAgIGNvbnN0IHBvaW50NyA9IFt4MSwgeTIgLSByYWRpdXNdO1xuICAgIGNvbnN0IHBvaW50OCA9IFt4MSwgeTEgKyByYWRpdXNdO1xuXG4gICAgcmV0dXJuIHJzLnBhdGgoXG4gICAgICAgIGBNJHtwb2ludDJbMF19ICR7cG9pbnQyWzFdfSBBICR7cmFkaXVzfSAke3JhZGl1c30sIDAsIDAsIDEsICR7cG9pbnQzWzBdfSAke3BvaW50M1sxXX0gTCAke3BvaW50NFswXX0gJHtwb2ludDRbMV19IEEgJHtyYWRpdXN9ICR7cmFkaXVzfSwgMCwgMCwgMSwgJHtwb2ludDVbMF19ICR7cG9pbnQ1WzFdfSBMICR7cG9pbnQ2WzBdfSAke3BvaW50NlsxXX0gQSAke3JhZGl1c30gJHtyYWRpdXN9LCAwLCAwLCAxLCAke3BvaW50N1swXX0gJHtwb2ludDdbMV19IEwgJHtwb2ludDhbMF19ICR7cG9pbnQ4WzFdfSBBICR7cmFkaXVzfSAke3JhZGl1c30sIDAsIDAsIDEsICR7cG9pbnQxWzBdfSAke3BvaW50MVsxXX0gWmAsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xufVxuXG5leHBvcnQgY29uc3QgZHJhd1JlY3RhbmdsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICBjb25zdCByb3VnaFNWRyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgIGNvbnN0IHJlY3RhbmdsZUcgPSByb3VnaFNWRy5yZWN0YW5nbGUocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55LCByZWN0YW5nbGUud2lkdGgsIHJlY3RhbmdsZS5oZWlnaHQsIG9wdGlvbnMpO1xuICAgIHNldFN0cm9rZUxpbmVjYXAocmVjdGFuZ2xlRywgJ3JvdW5kJyk7XG4gICAgcmV0dXJuIHJlY3RhbmdsZUc7XG59O1xuIl19
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|