JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://code.jquery.com/ui/1.11.0/jquery-ui.min.js"></script>
<div class="container">

  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>
  <div class="item"></div>

</div>

CSS

.container {
  transform: scale(0.5);
  transform-origin: center top;
}

.item {
  cursor: move;
  background: red;
  width: 8rem;
  height: 8rem;
  margin-bottom: 1rem;
}

JavaScript

var zoomScale = 0.5;



$(".container")
  .sortable({
    start: function(e, ui){
    var items = $(this).data()['ui-sortable'].items;
      items.forEach(function(item){
      	item.height *= zoomScale;
        item.width *= zoomScale;
        
      });
    
    },
    sort: function(e, ui) {
      var changeLeft = ui.position.left - ui.originalPosition.left;
      // For left position, the problem here is not only the scaling,
      // but the transform origin. Since the position is dynamic
      // the left coordinate you get from ui.position is not the one
      // used by transform origin. You need to adjust so that
      // it stays "0", this way the transform will replace it properly
      var newLeft = ui.originalPosition.left + changeLeft / zoomScale - ui.item.parent().offset().left;

      // For top, it's simpler. Since origin is top, 
      // no need to adjust the offset. Simply undo the correction
      // on the position that transform is doing so that
      // it stays with the mouse position
      var newTop = ui.position.top / zoomScale;

      ui.helper.css({
        left: newLeft,
        top: newTop,

      });
    }
  });