raycast(raycaster) {
    const {offsetWidth, offsetHeight, clipTop, clipRight, clipBottom, clipLeft} = this
    let hits = null
    if (offsetWidth && offsetHeight) {
      raycastMesh.matrixWorld.multiplyMatrices(
        this.threeObject.matrixWorld,
        tempMat4.makeScale(offsetWidth, offsetHeight, 1)
      )
      hits = this._raycastObject(raycastMesh, raycaster)
      if (hits) {
        // Filter out hits that occurred on clipped areas
        hits = hits.filter(hit => {
          const x = hit.uv.x * offsetWidth
          const y = (1 - hit.uv.y) * offsetHeight
          return x > clipLeft && x < clipRight && y > clipTop && y < clipBottom
        })

        // Add a distance bias (used as secondary sort for equidistant intersections) to prevent
        // container blocks from intercepting pointer events for their children. Also apply a
        // slight rounding prevent floating point precision irregularities from reporting different
        // distances for coplanar blocks.
        hits.forEach(hit => {
          hit.distance = parseFloat(hit.distance.toFixed(12))
          hit.distanceBias = -this.flexNodeDepth
        })
      }
    }
    return hits && hits.length ? hits : null
  }
@override Custom raycaster to test against the layout block