JSFiddle - React, Tailwind, and code Playground

by allcaps

HTML

<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.11.4/themes/ui-darkness/jquery-ui.css">
<ul id="droppable" aria-label="Drop here:"></ul>
<ul id="draggables" aria-label="Click and drag:">
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

<ul id="sortable">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>

CSS

ul {
    list-style-type: none;
    margin: 0;
}
ul:before {
    content:attr(aria-label);
    color: white;
}
ul#draggables {
    background-color: #333;
    display: table;
    padding: 12px;
}
ul#draggables li, ul#sortable li {
    width: 100px;
    height: 1em;
    padding: 9px;
    background: #ccc;
    margin-bottom: .5em;
    cursor: move;
}
ul#draggables li.highlight, ul#draggables li.ui-draggable-dragging {
    background-color: lightblue;
}
ul#droppable {
    position: absolute;
    left: 250px;
    top: 0;
    width: 92px;
    height: 92px;
    background: #999;
    color: #fff;
    padding: 9px;
    border: 3px solid #999;
}
#droppable.active {
    border: 3px dashed black;
}

JavaScript

$("#draggables li").draggable({
    // When a draggable is dragged than this helper
    // creates and returns a new list containing multiple objects.
    helper: function (event, ui) {
        $(this).addClass('highlight');
        var list = $.parseHTML('<ul></ul>');
        $(list).append(
        $('#draggables li.highlight').clone());
        return list;
    }
});

$("#sortable").sortable();



$("#draggables li").click(function () {
    $(this).toggleClass("highlight");
});

$("#droppable").droppable({
    // I think this could be a bit simpler for adding classes.
    // But we need functions anyway to call other logic.
    activate: function (event, ui) {
        $(this).addClass('active');
    },
    deactivate: function (event, ui) {
        $(this).removeClass('active');
    },
    drop: function () {
        alert("dropped");
    }
});