JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.4.min.js"></script>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<input id="rotate" type="button" value="Rotate" />
<div id="canvas"></div>

JavaScript

$(function() {
    var stage = new Kinetic.Stage({
        container: 'canvas',
        width: 640,
        height: 480
    });
    var layer = new Kinetic.Layer();
    
    // I would like to rotate this group around an arbitrary point
    // this group contains a rectangle and four circles
    var group = new Kinetic.Group({
        x: 100,
        y: 50
    });
    
    // draws a rectangle
    var rect = new Kinetic.Rect({
        width: 320,
        height: 240,
        stroke: 'blue',
        strokeWidth: 3
    });
    group.add(rect);
    
    // draws the center of the rectangle
    var center = new Kinetic.Circle({
        x: rect.getX() + rect.getWidth() / 2,
        y: rect.getY() + rect.getHeight() / 2,
        radius: 5,
        fill: 'black'
    });
    group.add(center);
    
    // draws the corners
    var rectX = rect.getX();
    var rectY = rect.getY();
    var rectWidth = rect.getWidth();
    var rectHeight = rect.getHeight();
    var corners = [
        {x: rectX, y: rectY},                          // top left
        {x: rectX + rectWidth, y: rectY},              // top right
        {x: rectX + rectWidth, y: rectY + rectHeight}, // bottom right
        {x: rectX, y: rectY + rectHeight},             // bottom left
    ];
    var circles = [];
    $.each(corners, function(i) {
        var corner = corners[i];
        var circle = new Kinetic.Circle({
            x: corner.x,
            y: corner.y,
            radius: 5,
            fill: 'blue',
            draggable: true
        });
        circle.on('mouseenter', function() {
            $('body').css('cursor', 'pointer');
        });
        circle.on('mouseleave', function() {
            $('body').css('cursor', 'default');
        });
        circle.on('dragmove', function() {
            var index = circles.indexOf(this);
            var index1 = index > 0? (index - 1) % 4 : (3 + index) % 4;
            var index0 = (index + 1) % 4;
            var corner0 = index % 2 > 0?...