docs: function (Vue) {
    var ref = Vue.util;
    var looseEqual = ref.looseEqual;
  
    var SingleElement = function SingleElement (vm) {
      this._vm = vm;
      this.initValue = this.getValue();
      this.attachValidity();
    };
  
    SingleElement.prototype.attachValidity = function attachValidity () {
      this._vm.$el.$validity = this._vm;
    };
  
    SingleElement.prototype.getValue = function getValue () {
      var el = this._vm.$el;
      if (el.tagName === 'SELECT') {
        return getSelectValue(el)
      } else {
        if (el.type === 'checkbox') {
          return el.checked
        } else {
          return el.value
        }
      }
    };
  
    SingleElement.prototype.checkModified = function checkModified () {
      var el = this._vm.$el;
      if (el.tagName === 'SELECT') {
        return !looseEqual(this.initValue, getSelectValue(el))
      } else {
        if (el.type === 'checkbox') {
          return !looseEqual(this.initValue, el.checked)
        } else {
          return !looseEqual(this.initValue, el.value)
        }
      }
    };
  
    SingleElement.prototype.listenToucheableEvent = function listenToucheableEvent () {
      this._vm.$el.addEventListener('focusout', this._vm.willUpdateTouched);
    };
  
    SingleElement.prototype.unlistenToucheableEvent = function unlistenToucheableEvent () {
      this._vm.$el.removeEventListener('focusout', this._vm.willUpdateTouched);
    };
  
    SingleElement.prototype.listenInputableEvent = function listenInputableEvent () {
      var vm = this._vm;
      var el = vm.$el;
      if (el.tagName === 'SELECT') {
        el.addEventListener('change', vm.handleInputable);
      } else {
        if (el.type === 'checkbox') {
          el.addEventListener('change', vm.handleInputable);
        } else {
          el.addEventListener('input', vm.handleInputable);
        }
      }
    };
  
    SingleElement.prototype.unlistenInputableEvent = function unlistenInputableEvent () {
      var vm = this._vm;
      var el = vm.$el;
      if (el.tagName === 'SELECT') {
        el.removeEventListener('change', vm.handleInputable);
      } else {
        if (el.type === 'checkbox') {
          el.removeEventListener('change', vm.handleInputable);
        } else {
          el.removeEventListener('input', vm.handleInputable);
        }
      }
    };
  
    return SingleElement
  }