JSFiddle - React, Tailwind, and code Playground

HTML

<div id="origin-point">Click!</div>
<rect>
  
</rect>

CSS

#origin-point {
    color: white; 
    font-weight: bold; 
    background-color: #06a; 
    margin: 5em auto; 
    text-align: center; 
    line-height: 70px; 
    height: 70px; 
    width: 70px; 
    -webkit-border-radius: 100%; 
    -moz-border-radius: 100%; 
    border-radius: 100%;
}

#new-link-line {
    position: absolute;
    width: 3px;
    background-color: #06a;
    z-index: 100;
    -webkit-transform-origin: top left;
    -moz-transform-origin: top left;
    -o-transform-origin: top left;
    -ms-transform-origin: top left;
    transform-origin: top left;
}

JavaScript

$('#origin-point').click(function() {
    var linkLine = $('<div id="new-link-line"></div>').appendTo('body');
    
    linkLine
        .css('top', $('#origin-point').offset().top)
        .css('left', $('#origin-point').offset().left);
    
    $(document).mousemove(linkMouseMoveEvent);

    // Cancel on right click
    $(document).bind('mousedown.link', function(event) {
        if(event.which == 3) {
            endLinkMode();
        }
    });

    $(document).bind('keydown.link', function(event) {
        // ESCAPE key pressed
        if(event.keyCode == 27) {
            endLinkMode();
        }
    });
});
    
function linkMouseMoveEvent(event) {
    if($('#new-link-line').length > 0) {
        var originX = $('#origin-point').offset().left + $('#origin-point').outerWidth() / 2;
        var originY = $('#origin-point').offset().top + $('#origin-point').outerHeight() / 2;
        
        var length = Math.sqrt((event.pageX - originX) * (event.pageX - originX) 
            + (event.pageY - originY) * (event.pageY - originY));
    
        var angle = 180 / 3.1415 * Math.acos((event.pageY - originY) / length);
        if(event.pageX > originX)
            angle *= -1;
    
        $('#new-link-line')
            .css('height', length)
            .css('-webkit-transform', 'rotate(' + angle + 'deg)')
            .css('-moz-transform', 'rotate(' + angle + 'deg)')
            .css('-o-transform', 'rotate(' + angle + 'deg)')
            .css('-ms-transform', 'rotate(' + angle + 'deg)')
            .css('transform', 'rotate(' + angle + 'deg)');
    }
}
    
function endLinkMode() {
    $('#new-link-line').remove();
    $(document).unbind('mousemove.link').unbind('click.link').unbind('keydown.link');
}