JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.3.0/fabric.min.js"></script>
<canvas id="c" width="700" height="600"></canvas>

CSS

canvas{
    border-width: 1px;
    border-style: solid;
    border-color: #333;
}

JavaScript

var canvas = new fabric.Canvas('c');

/* circle & rectangle */

var circle = new fabric.Circle({
	left: 420,
	top: 160,
    radius:144
});

var rect = new fabric.Rect({
	left: 420,
	top: 404,
    width:233,
    height:166
});

/* debug */

var circleNfo = new fabric.Text("hello",{
	left: 140,
	top: 180,
    angle: -10
});

var rectNfo =  new fabric.Text("world",{
	left: 140,
	top: 380,
    angle: -10
});

function showDebug(obj,angle,gradient,txtObj){
    if( obj.debugPoints === undefined ){
        obj.debugPoints = [
            new fabric.Circle({ left: 0, top: 0, radius:4 }),
            new fabric.Circle({ left: 0, top: 0, radius:4,fill:"pink" })
        ];
        
        canvas.add( obj.debugPoints[0] );
        canvas.add( obj.debugPoints[1] );
    }

    var owratio = obj.currentWidth  / obj.width;
    var ohratio = obj.currentHeight / obj.height;

    var dx = obj.currentWidth  >> 1;
    var dy = obj.currentHeight >> 1;
    
    var left = obj.left - dx;
    var top  = obj.top  - dy;
    
    obj.debugPoints[0].set({
        left : left + gradient.start.x * owratio,
        top  : top  + gradient.start.y * ohratio
    });
    
    obj.debugPoints[1].set({
        left : left + gradient.end.x * owratio,
        top  : top  + gradient.end.y * ohratio
    });
    
    /* debug text */
    
    var dbg = "start "+gradient.start.x+" ; "+gradient.start.y;
    dbg += "\nend "+gradient.end.x+" ; "+gradient.end.y+"\nα "+(angle%360)+"°";
    
    //dbg += "\nα "+xy2angle(gradient.start.x,gradient.start.y,obj.width,obj.height)+"°";
    
    txtObj.setText(dbg);
    
    /* update text gradient */
    
    var textdx = txtObj.width  >> 1;
    var textdy = txtObj.height >> 1;
    
    txtObj.setGradient('fill',{ 
        x1: -textdx,
        y1: -textdy,
        x2: +textdx,
        y2: +textdy,
        colorStops: { 0: "#ff6600", 0.5: "rgba(0,255,0,0.43)", 1: "#0000ff" }
    });
}

/* append all in canvas...