JSFiddle - React, Tailwind, and code Playground

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.12.0/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.6.2/pixi.min.js"></script>
<div id="main" class="full-dim">
  <div id="root" class="full-dim">
    <div id="events" class="full-dim"></div>
    <canvas id="draw" class="full-dim"></canvas>
  </div>
  <div id="root2" class="full-dim">
    <div id="events2" class="full-dim"></div>
    <canvas id="draw2" class="full-dim"></canvas>
  </div>
  <div id="root3" class="full-dim">
    <div id="events3" class="full-dim"></div>
    <canvas id="draw3" class="full-dim"></canvas>
  </div>
</div>

CSS

.full-dim {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

#root, #root2, #root3, #root4{
  height: 33.33%;
}

#root2 {
  top: 33.33%;
}

#root3 {
  top: 66.66%;
}

#events {
  z-index: -1;
  background: rgba(255,0,0,0.5);
}

#events2 {
  z-index: 1;
  background: rgba(0,255,0,0.5);
}

#events3 {
  z-index: 1;
  background: rgba(0,0,255,0.5);
}

#canvas, #canvas2, #canvas3, #canvas4 {
  z-index: 2;
}

JavaScript

// Works as expected
const canvas1 = document.getElementById('draw');
const events1 = document.getElementById('events');
// All but click events are registerted
const canvas2 = document.getElementById('draw2');
const events2 = document.getElementById('events2');
// Click events are registerted when re-firing pointerdown and pointer up events
const canvas3 = document.getElementById('draw3');
const events3 = document.getElementById('events3');

const clone = e => new e.constructor(e.type, e);
const log = e => console.log(e.type);
const logClickUp = e => console.log('CLICK', e.type);

const setUp = (canvas, events, duplicate) => {
	const forward = (e) => { canvas.dispatchEvent(clone(e)); };
  const forwardClick = (e) => {
    const down =  new event.constructor('pointerdown', e);
    const up =  new event.constructor('pointerup', e);
    canvas.dispatchEvent(down);
    canvas.dispatchEvent(up);
  };
  const dim = canvas.getBoundingClientRect();
  const app = new PIXI.Application(dim.width, dim.height, {
    transparent: true,
    view: canvas
  });

  // create a new Sprite from an image path
  const bunny = new PIXI.Sprite.fromImage('http://pixijs.io/examples/required/assets/basics/bunny.png')

  // center the sprite's anchor point
  bunny.anchor.set(0.5);

  // move the sprite to the center of the screen
  bunny.x = app.renderer.width / 2;
  bunny.y = app.renderer.height / 2;

  bunny.interactive = true;
  bunny
    .on('click', logClickUp)
    .on('mousedown', log)
    .on('mouseover', log)
    .on('mouseout', log)
    .on('mouseup',  log)
    .on('contextmenu', log);

  app.stage.addChild(bunny);

	if (duplicate) {
	  events.addEventListener('click', forwardClick, false);
  } else {
	  events.addEventListener('click', forward, false);
  }
  events.addEventListener('pointerup', forward, false);
  events.addEventListener('pointerdown', forward, false);
  events.addEventListener('pointermove', forward, false);
  events.addEventListener('pointerover', forward,...