docs: function Interactable (element, options) {
          this._element = element;
          this._iEvents = this._iEvents || {};
  
          var _window;
  
          if (trySelector(element)) {
              this.selector = element;
  
              var context = options && options.context;
  
              _window = context? getWindow(context) : window;
  
              if (context && (_window.Node
                      ? context instanceof _window.Node
                      : (isElement(context) || context === _window.document))) {
  
                  this._context = context;
              }
          }
          else {
              _window = getWindow(element);
  
              if (isElement(element, _window)) {
  
                  if (PointerEvent) {
                      events.add(this._element, pEventTypes.down, listeners.pointerDown );
                      events.add(this._element, pEventTypes.move, listeners.pointerHover);
                  }
                  else {
                      events.add(this._element, 'mousedown' , listeners.pointerDown );
                      events.add(this._element, 'mousemove' , listeners.pointerHover);
                      events.add(this._element, 'touchstart', listeners.pointerDown );
                      events.add(this._element, 'touchmove' , listeners.pointerHover);
                  }
              }
          }
  
          this._doc = _window.document;
  
          if (!contains(documents, this._doc)) {
              listenToDocument(this._doc);
          }
  
          interactables.push(this);
  
          this.set(options);
      }