baseInteractionsFromEvents = (targetEl, options) => {
  const defaults = {
    passiveEventsHandlers: true,
    preventScroll: true,
    preventMenu: true
  }
  options = Object.assign({}, defaults, options)
  const { passiveEventsHandlers, preventScroll, preventMenu } = options

  const mouseDowns$ = fromEvent('mousedown', targetEl, { passive: passiveEventsHandlers, capture: false })
  const mouseUps$ = fromEvent('mouseup', targetEl, { passive: passiveEventsHandlers, capture: false })
  // const mouseLeaves$ = fromEvent('mouseleave', targetEl, {passive:true,capture:false}).merge(fromEvent('mouseout', targetEl, {passive:true,capture:false}))
  const mouseMoves$ = fromEvent('mousemove', targetEl, { passive: passiveEventsHandlers, capture: false }) // .takeUntil(mouseLeaves$) // altMouseMoves(fromEvent(targetEl, 'mousemove')).takeUntil(mouseLeaves$)
  const rightClicks$ = fromEvent('contextmenu', targetEl, { passive: !options.preventMenu, capture: false })

  const touchStarts$ = fromEvent('touchstart', targetEl, { passive: passiveEventsHandlers, capture: false })
  const touchMoves$ = fromEvent('touchmove', targetEl, { passive: passiveEventsHandlers, capture: false })
  const touchEnds$ = fromEvent('touchend', targetEl, { passive: passiveEventsHandlers, capture: false })

  const pointerDowns$ = merge(mouseDowns$, touchStarts$) // mouse & touch interactions starts
  const pointerUps$ = merge(mouseUps$, touchEnds$) // mouse & touch interactions ends
  const pointerMoves$ = merge(mouseMoves$, touchMoves$.filter((t) => t.touches.length === 1))

  const preventAllScrolls = (targetEl) => {
    fromEvent('mousewheel', targetEl, { passive: false, capture: false }).forEach(preventDefault)
    fromEvent('DOMMouseScroll', targetEl, { passive: false, capture: false }).forEach(preventDefault)
    fromEvent('wheel', targetEl, { passive: false, capture: false }).forEach(preventDefault)
    fromEvent('touchmove', targetEl, { passive: false, capture: false }).forEach(preventDefault)
  }

  if (preventScroll) {
    preventAllScrolls(targetEl, { passive: passiveEventsHandlers, capture: false })
  }
  if (preventMenu) {
    rightClicks$.forEach(preventDefault)
  }

  const wheel$ = merge(
    fromEvent('wheel', targetEl, { passive: passiveEventsHandlers, capture: false }),
    fromEvent('DOMMouseScroll', targetEl, { passive: passiveEventsHandlers, capture: false }),
    fromEvent('mousewheel', targetEl, { passive: passiveEventsHandlers, capture: false })
  ).map(normalizeWheel)

  return {
    mouseDowns$,
    mouseUps$,
    mouseMoves$,

    rightClicks$,
    wheel$,

    touchStarts$,
    touchMoves$,
    touchEnds$,

    pointerDowns$,
    pointerUps$,
    pointerMoves$
  }
}
returns an object of base interactions from dom events, on the target element.
@param {DomElement} targetEl - The dom element to attach events handlers to
@param {Object} options
@param {Boolean} options.passiveEventsHandlers=true  Whenever possible make event listeners passive
(see here https://developers.google.com/web/updates/2016/06/passive-event-listeners for more details)
@param {Boolean} options.preventScroll=true Prevent all forms of scrolling on the target element
@param {Boolean} options.preventMenu=true Prevent default right click menu on the target element
@returns {Object}