import { extend } from '../vue';

// @vue/component
export var formSelectionMixin = extend({
  computed: {
    selectionStart: {
      // Expose selectionStart for formatters, etc
      cache: false,
      /* istanbul ignore next */get: function get() {
        return this.$refs.input.selectionStart;
      },
      /* istanbul ignore next */set: function set(val) {
        this.$refs.input.selectionStart = val;
      }
    },
    selectionEnd: {
      // Expose selectionEnd for formatters, etc
      cache: false,
      /* istanbul ignore next */get: function get() {
        return this.$refs.input.selectionEnd;
      },
      /* istanbul ignore next */set: function set(val) {
        this.$refs.input.selectionEnd = val;
      }
    },
    selectionDirection: {
      // Expose selectionDirection for formatters, etc
      cache: false,
      /* istanbul ignore next */get: function get() {
        return this.$refs.input.selectionDirection;
      },
      /* istanbul ignore next */set: function set(val) {
        this.$refs.input.selectionDirection = val;
      }
    }
  },
  methods: {
    /* istanbul ignore next */select: function select() {
      var _this$$refs$input;
      // For external handler that may want a select() method
      (_this$$refs$input = this.$refs.input).select.apply(_this$$refs$input, arguments);
    },
    /* istanbul ignore next */setSelectionRange: function setSelectionRange() {
      var _this$$refs$input2;
      // For external handler that may want a setSelectionRange(a,b,c) method
      (_this$$refs$input2 = this.$refs.input).setSelectionRange.apply(_this$$refs$input2, arguments);
    },
    /* istanbul ignore next */setRangeText: function setRangeText() {
      var _this$$refs$input3;
      // For external handler that may want a setRangeText(a,b,c) method
      (_this$$refs$input3 = this.$refs.input).setRangeText.apply(_this$$refs$input3, arguments);
    }
  }
});