|  | @@ -1,9 +1,23 @@
 | 
	
		
			
				|  |  | -import { getElementAbsoluteCoords } from "./bounds";
 | 
	
		
			
				|  |  | -import { ExcalidrawElement } from "./types";
 | 
	
		
			
				|  |  | +import { getElementAbsoluteCoords, getElementBounds } from "./bounds";
 | 
	
		
			
				|  |  | +import { ExcalidrawElement, ExcalidrawLinearElement } from "./types";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const _ce = ({ x, y, w, h }: { x: number; y: number; w: number; h: number }) =>
 | 
	
		
			
				|  |  | +const _ce = ({
 | 
	
		
			
				|  |  | +  x,
 | 
	
		
			
				|  |  | +  y,
 | 
	
		
			
				|  |  | +  w,
 | 
	
		
			
				|  |  | +  h,
 | 
	
		
			
				|  |  | +  a,
 | 
	
		
			
				|  |  | +  t,
 | 
	
		
			
				|  |  | +}: {
 | 
	
		
			
				|  |  | +  x: number;
 | 
	
		
			
				|  |  | +  y: number;
 | 
	
		
			
				|  |  | +  w: number;
 | 
	
		
			
				|  |  | +  h: number;
 | 
	
		
			
				|  |  | +  a?: number;
 | 
	
		
			
				|  |  | +  t?: string;
 | 
	
		
			
				|  |  | +}) =>
 | 
	
		
			
				|  |  |    ({
 | 
	
		
			
				|  |  | -    type: "rectangle",
 | 
	
		
			
				|  |  | +    type: t || "rectangle",
 | 
	
		
			
				|  |  |      strokeColor: "#000",
 | 
	
		
			
				|  |  |      backgroundColor: "#000",
 | 
	
		
			
				|  |  |      fillStyle: "solid",
 | 
	
	
		
			
				|  | @@ -14,6 +28,7 @@ const _ce = ({ x, y, w, h }: { x: number; y: number; w: number; h: number }) =>
 | 
	
		
			
				|  |  |      y,
 | 
	
		
			
				|  |  |      width: w,
 | 
	
		
			
				|  |  |      height: h,
 | 
	
		
			
				|  |  | +    angle: a,
 | 
	
		
			
				|  |  |    } as ExcalidrawElement);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  describe("getElementAbsoluteCoords", () => {
 | 
	
	
		
			
				|  | @@ -41,3 +56,57 @@ describe("getElementAbsoluteCoords", () => {
 | 
	
		
			
				|  |  |      expect(y2).toEqual(20);
 | 
	
		
			
				|  |  |    });
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +describe("getElementBounds", () => {
 | 
	
		
			
				|  |  | +  it("rectangle", () => {
 | 
	
		
			
				|  |  | +    const [x1, y1, x2, y2] = getElementBounds(
 | 
	
		
			
				|  |  | +      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "rectangle" }),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +    expect(x1).toEqual(39.39339828220179);
 | 
	
		
			
				|  |  | +    expect(y1).toEqual(24.393398282201787);
 | 
	
		
			
				|  |  | +    expect(x2).toEqual(60.60660171779821);
 | 
	
		
			
				|  |  | +    expect(y2).toEqual(45.60660171779821);
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  it("diamond", () => {
 | 
	
		
			
				|  |  | +    const [x1, y1, x2, y2] = getElementBounds(
 | 
	
		
			
				|  |  | +      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "diamond" }),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +    expect(x1).toEqual(42.928932188134524);
 | 
	
		
			
				|  |  | +    expect(y1).toEqual(27.928932188134524);
 | 
	
		
			
				|  |  | +    expect(x2).toEqual(57.071067811865476);
 | 
	
		
			
				|  |  | +    expect(y2).toEqual(42.071067811865476);
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  it("ellipse", () => {
 | 
	
		
			
				|  |  | +    const [x1, y1, x2, y2] = getElementBounds(
 | 
	
		
			
				|  |  | +      _ce({ x: 40, y: 30, w: 20, h: 10, a: Math.PI / 4, t: "ellipse" }),
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +    expect(x1).toEqual(42.09430584957905);
 | 
	
		
			
				|  |  | +    expect(y1).toEqual(27.09430584957905);
 | 
	
		
			
				|  |  | +    expect(x2).toEqual(57.90569415042095);
 | 
	
		
			
				|  |  | +    expect(y2).toEqual(42.90569415042095);
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  it("curved line", () => {
 | 
	
		
			
				|  |  | +    const [x1, y1, x2, y2] = getElementBounds({
 | 
	
		
			
				|  |  | +      ..._ce({
 | 
	
		
			
				|  |  | +        t: "line",
 | 
	
		
			
				|  |  | +        x: 449.58203125,
 | 
	
		
			
				|  |  | +        y: 186.0625,
 | 
	
		
			
				|  |  | +        w: 170.12890625,
 | 
	
		
			
				|  |  | +        h: 92.48828125,
 | 
	
		
			
				|  |  | +        a: 0.6447741904932416,
 | 
	
		
			
				|  |  | +      }),
 | 
	
		
			
				|  |  | +      points: [
 | 
	
		
			
				|  |  | +        [0, 0] as [number, number],
 | 
	
		
			
				|  |  | +        [67.33984375, 92.48828125] as [number, number],
 | 
	
		
			
				|  |  | +        [-102.7890625, 52.15625] as [number, number],
 | 
	
		
			
				|  |  | +      ],
 | 
	
		
			
				|  |  | +    } as ExcalidrawLinearElement);
 | 
	
		
			
				|  |  | +    expect(x1).toEqual(360.3176068760539);
 | 
	
		
			
				|  |  | +    expect(y1).toEqual(185.90654264413516);
 | 
	
		
			
				|  |  | +    expect(x2).toEqual(473.8171188951176);
 | 
	
		
			
				|  |  | +    expect(y2).toEqual(320.391865303557);
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +});
 |