code: function PlainDraggable(element, options) {
      _classCallCheck(this, PlainDraggable);
  
      var props = {
        ins: this,
        options: { // Initial options (not default)
          zIndex: ZINDEX // Initial state.
        },
        disabled: false
      };
  
      Object.defineProperty(this, '_id', { value: ++insId });
      props._id = this._id;
      insProps[this._id] = props;
  
      if (!isElement(element) || element === body) {
        throw new Error('This element is not accepted.');
      }
      if (!options) {
        options = {};
      } else if (!isObject(options)) {
        throw new Error('Invalid options.');
      }
  
      var gpuTrigger = true;
      var cssPropWillChange = CSSPrefix.getName('willChange');
      if (cssPropWillChange) {
        gpuTrigger = false;
      }
  
      if (!options.leftTop && cssPropTransform) {
        // translate
        if (cssPropWillChange) {
          element.style[cssPropWillChange] = 'transform';
        }
        props.initElm = initTranslate;
        props.moveElm = moveTranslate;
      } else {
        // left and top
        throw new Error('`transform` is not supported.');
      }
  
      props.element = initAnim(element, gpuTrigger);
      props.elementStyle = element.style;
      props.orgZIndex = props.elementStyle.zIndex;
      if (draggableClass) {
        mClassList(element).add(draggableClass);
      }
      props.pointerEventHandlerId = pointerEvent.regStartHandler(function (pointerXY) {
        return dragStart(props, pointerXY);
      });
  
      // Default options
      if (!options.containment) {
        var parent = void 0;
        options.containment = (parent = element.parentNode) && isElement(parent) ? parent : body;
      }
      if (!options.handle) {
        options.handle = element;
      }
  
      _setOptions(props, options);
    }
docs: Create a `PlainDraggable` instance.
  @param {Element} element - Target element.
  @param {Object} [options] - Options.