pointerGestures = (input, options) => {
  const baseInteractions = 'addEventListener' in input ? baseInteractionsFromEvents(input, options) : input

  const defaults = {
    multiTapDelay: 250, // delay between clicks/taps
    longPressDelay: 250, // delay after which we have a 'hold'
    maxStaticDeltaSqr: 100, // maximum delta (in pixels squared) above which we are not static
    zoomMultiplier: 200, // zoomFactor for normalized interactions across browsers
    pinchThreshold: 4000, // The minimum amount in pixels the inputs must move until it is fired.
    pixelRatio: (typeof window !== 'undefined' && window.devicePixelRatio) ? window.devicePixelRatio : 1
  }
  const settings = Object.assign({}, defaults, options)

  const press$ = presses(baseInteractions, settings)
  const holds$ = press$ // longTaps/holds: either HELD leftmouse/pointer or HELD right click
    .filter((e) => e.timeDelta > settings.longPressDelay)
    .filter((e) => e.moveDelta.sqrd < settings.maxStaticDeltaSqr) // when the square distance is bigger than this, it is a movement, not a tap
    // .map(e => e.value)
  const taps$ = taps(press$, settings)
  const drags$ = drags(baseInteractions, settings)
  const zooms$ = zooms(baseInteractions, settings)

  // FIXME: use 'press' as higher level above tap & click

  return {
    press: press$,
    holds: holds$,
    taps: taps$,
    drags: drags$,
    zooms: zooms$
  }
}
returns an object of pointer gestures.
@param {DomElement} input - either the dom element to attach events handlers to or the result from baseInteractionsFromEvents
@param {Object} options
@param {Integer} options.multiTapDelay=250  delay between clicks/taps
@param {Integer} options.longPressDelay=250 delay after which we have a 'hold' gesture
@param {Float} options.maxStaticDeltaSqr=100 maximum delta (in pixels squared) above which we are not static ie cursor changed places
@param {Float} options.zoomMultiplier=200 zoomFactor for normalized interactions across browsers
@param {Float} options.pinchThreshold=4000 The minimum amount in pixels the inputs must move until it is fired.
@param {Integer} options.pixelRatio=window.devicePixelRatio or 1 : the pixel ratio to use
@returns {Object}