JSFiddle - React, Tailwind, and code Playground

CSS

body {
  margin: 0;
}

canvas {
  display: block;
}

JavaScript

import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.120.1/build/three.module.js';

import { TransformControls } from 'https://cdn.jsdelivr.net/npm/three@0.120.1/examples/jsm/controls/TransformControls.js';

var cameraPersp, cameraOrtho, currentCamera;
var scene, renderer, control, orbit;

init();
render();

function init() {

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

	const aspect = window.innerWidth / window.innerHeight;

	cameraPersp = new THREE.PerspectiveCamera( 50, aspect, 0.01, 30000 );
	cameraOrtho = new THREE.OrthographicCamera( - 600 * aspect, 600 * aspect, 600, - 600, 0.01, 30000 );
	currentCamera = cameraPersp;

	currentCamera.position.set( 1000, 500, 1000 );
	currentCamera.lookAt( 0, 200, 0 );

	scene = new THREE.Scene();
	scene.add( new THREE.GridHelper( 1000, 10, 0x888888, 0x444444 ) );

	var geometry = new THREE.BoxBufferGeometry( 200, 200, 200 );
	var material = new THREE.MeshBasicMaterial();

	control = new TransformControls( currentCamera, renderer.domElement );
	control.showY = false;
	control.showZ = false;
	control.addEventListener( 'change', render );

	var mesh = new THREE.Mesh( geometry, material );
	scene.add( mesh );

	control.attach( mesh );
	scene.add( control );

	window.addEventListener( 'resize', onWindowResize, false );

	window.addEventListener( 'keydown', function ( event ) {

		switch ( event.keyCode ) {

			case 81: // Q
				control.setSpace( control.space === "local" ? "world" : "local" );
				break;

			case 16: // Shift
				control.setTranslationSnap( 100 );
				control.setRotationSnap( THREE.MathUtils.degToRad( 15 ) );
				control.setScaleSnap( 0.25 );
				break;

			case 87: // W
				control.setMode( "translate" );
				break;

			case 69: // E
				control.setMode( "rotate" );
				break;

			case 82: // R
				control.setMode( "scale" );
				break;

			case...