var t = require("../common/component"), a = require("../mixins/touch");

(0, t.VantComponent)({
    mixins: [ a.touch ],
    props: {
        disabled: Boolean,
        useButtonSlot: Boolean,
        activeColor: String,
        inactiveColor: String,
        max: {
            type: Number,
            value: 100
        },
        min: {
            type: Number,
            value: 0
        },
        step: {
            type: Number,
            value: 1
        },
        value: {
            type: Number,
            value: 0
        },
        barHeight: {
            type: String,
            value: "2px"
        }
    },
    watch: {
        value: function(t) {
            this.updateValue(t, !1);
        }
    },
    created: function() {
        this.updateValue(this.data.value);
    },
    methods: {
        onTouchStart: function(t) {
            this.data.disabled || (this.touchStart(t), this.startValue = this.format(this.data.value));
        },
        onTouchMove: function(t) {
            var a = this;
            this.data.disabled || (this.touchMove(t), this.getRect(".van-slider").then(function(t) {
                var e = a.deltaX / t.width * 100;
                a.newValue = a.startValue + e, a.updateValue(a.newValue, !1, !0);
            }));
        },
        onTouchEnd: function() {
            this.data.disabled || this.updateValue(this.newValue, !0);
        },
        onClick: function(t) {
            var a = this;
            this.data.disabled || this.getRect(".van-slider").then(function(e) {
                var i = (t.detail.x - e.left) / e.width * 100;
                a.updateValue(i, !0);
            });
        },
        updateValue: function(t, a, e) {
            t = this.format(t), this.set({
                value: t,
                barStyle: "width: " + t + "%; height: " + this.data.barHeight + ";"
            }), e && this.$emit("drag", {
                value: t
            }), a && this.$emit("change", t);
        },
        format: function(t) {
            var a = this.data, e = a.max, i = a.min, u = a.step;
            return Math.round(Math.max(i, Math.min(t, e)) / u) * u;
        }
    }
});