JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdn.jsdelivr.net/npm/three@0.130.1/build/three.js"></script>
<script src="https://cdn.jsdelivr.net/npm/three@0.130.1/examples/js/controls/DragControls.js"></script>

CSS

body {
	  margin: 0;
}

JavaScript

let camera, scene, renderer;

const aabb = new THREE.Box3();
const target = new THREE.Vector3(); // (0,0,0)
let intersection = false;

init();
animate();

function init() {

    camera = new THREE.PerspectiveCamera(70, window.innerWidth / window.innerHeight, 0.01, 20);
    camera.position.set(0, 4, 8);
    camera.lookAt(0, 0, 0);

    scene = new THREE.Scene();

    // target

    const targetArea = new THREE.Box3().setFromCenterAndSize(target, new THREE.Vector3(1, 1, 1));
    const helper = new THREE.Box3Helper(targetArea);
    scene.add(helper);

    // box

    const geometry = new THREE.BoxGeometry(2, 2);
    geometry.computeBoundingBox();
    const material = new THREE.MeshBasicMaterial({
        transparent: true,
        opacity: 0, color: 0x0000ff
    });
    const mesh = new THREE.Mesh(geometry, material);
    mesh.position.set(4, 0, 0);
    mesh.userData.origin = mesh.position.clone(); // save position for reset
    scene.add(mesh);


    const geometry1 = new THREE.BoxGeometry(2, 2);
    const material1 = new THREE.MeshBasicMaterial({ color: 0xff0000 });
    const mesh1 = new THREE.Mesh(geometry1, material1);
    geometry1.computeBoundingBox();

    mesh1.position.set(4, 0, 0);
    mesh1.userData.origin = mesh.position.clone(); // save position for reset
    scene.add(mesh1);


    renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.setSize(window.innerWidth, window.innerHeight);
    document.body.appendChild(renderer.domElement);

    const controls = new THREE.DragControls([mesh], camera, renderer.domElement);
    controls.addEventListener('dragend', function () {

        if (intersection === true) {
            mesh.position.copy(target);
            mesh1.position.copy(target);
        } else {
            mesh.position.copy(mesh.userData.origin);
            mesh1.position.copy(mesh.userData.origin);
        }
    });
    controls.addEventListener('drag', function () {
       ...