JSFiddle - React, Tailwind, and code Playground

HTML

<!--https://stackoverflow.com/questions/63082574/how-to-draw-polygon-when-last-point-clicked-->
<canvas id="canvas" style="background: #fff; margin:20px;"></canvas>

JavaScript

var canvas = document.getElementById("canvas");
        var bw = innerWidth - 20, bh = innerHeight - 20;
        var cw = bw + (p * 2) + 1, ch = bh + (p * 2) + 1;
        var p = 10;

        var activePoint, cursor, dragging = false;
        const mouse = { x: 0, y: 0, button: 0, lx: 0, ly: 0, update: true };

        const TEXT_OFFSET = 5;
        const TEXT_COLOR = "#000";
        const TEXT_SIZE = 16;
        const FONT = "arial";
        const TEXT_ANGLE_OFFSET = 25;
        const DEG = "°";

        canvas.width = bw;
        canvas.height = bh;
        var ctx = canvas.getContext("2d");

        function drawLineText(p1, p2, text, textOffset = TEXT_OFFSET, textColor = TEXT_COLOR, textSize = TEXT_SIZE, font = FONT) {
            var x = p1.x, y = p1.y;
            var nx = p2.x - x, ny = p2.y - y, len = (nx * nx + ny * ny) ** 0.5;
            nx /= len;
            ny /= len;
            ctx.font = textSize + "px " + font;
            ctx.textAlign = "center";
            ctx.fillStyle = textColor;
            if (nx < 0) {
                ctx.textBaseline = "top";
                x = p2.x;
                y = p2.y;
                nx = -nx;
                ny = -ny;
                textOffset = -textOffset;
            } else { ctx.textBaseline = "bottom" }
            len /= 2;
            
            ctx.setTransform(nx, ny, -ny, nx, x, y);
            ctx.fillText(text, len, -textOffset);
        }


        // angle between p2-p1 and p2-p3
        function drawAngleText(p1, p2, p3, textAngleOffset = TEXT_ANGLE_OFFSET, textColor = TEXT_COLOR, textSize = TEXT_SIZE, font = FONT) {
            var ang;
            var x = p2.x, y = p2.y;
            var nx1 = p1.x - x, ny1 = p1.y - y, len1 = (nx1 * nx1 + ny1 * ny1) ** 0.5;
            var nx2 = p3.x - x, ny2 = p3.y - y, len2 = (nx2 * nx2 + ny2 * ny2) ** 0.5;
            nx1 /= len1;
            ny1 /= len1;
            nx2 /= len2;
            ny2 /= len2;
            const cross = nx1 * ny2 - ny1 * nx2;
...