JSFiddle - React, Tailwind, and code Playground

HTML

<body ng-app="app">
    <button box-creator>Button</button>
</body>

CSS

.box {
  border: 1px solid black;
  background-color: white;
  width: 50px;
  height: 50px;
  text-align: center; }

button {
    cursor: pointer;
}

JavaScript

var app = angular.module("app", []);
	
    // This directive is attached to the button and makes it create a box every time the is a 'mousedown' event
	app.directive("boxCreator", function($document, $compile) {
		return {
			restrict: 'A',
			link: function($scope, $element, $attrs) {
				$element.bind("mousedown", function($event) {
					var newNode = $compile('<div class="box" drag></div>')($scope);
					
					newNode.css({
						top: $event.pageY - 25 + "px",
						left: $event.pageX - 25 + "px"
				        });
					
					angular.element($document[0].body).append(newNode);
                    // I'd like to do something like : '$(newNode).trigger("mousedown");'
				});
			}
		}
	});
	
    // Makes the binded element draggable
	app.directive("drag", function($document) {
	    return function(scope, element, attr) {
	        var startX = 0, startY = 0, x = event.pageX - 25, y = event.pageY - 25;

	        element.css({
	         position: 'absolute',
	         cursor: 'pointer'
	        });

	        element.on('mousedown', function(event) {
	          event.preventDefault();
	          startX = event.pageX - x;
	          startY = event.pageY - y;
	          $document.on('mousemove', mousemove);
	          $document.on('mouseup', mouseup);
	        });

	        function mousemove(event) {
	          y = event.pageY - startY;
	          x = event.pageX - startX;
	          element.css({
	            top: y + 'px',
	            left:  x + 'px'
	          });
	        }

	        function mouseup() {
	          $document.off('mousemove', mousemove);
	          $document.off('mouseup', mouseup);
	        }
	      };
	    });