<template>
  <div class="zoom-wrapper">
    <button class="zoom-button" @click="scale('down')">
      <Icon type="md-remove" :size="14" color="#fff"/>
    </button>
    <span class="zoom-number">{{ value }}%</span>
    <button class="zoom-button" @click="scale('up')">
      <Icon type="md-add" :size="14" color="#fff"/>
    </button>
  </div>
</template>

<script>
export default {
    name: 'ZoomController',
    props: {
        value: {
            type: Number,
            default: 100
        },
        step: {
            type: Number,
            default: 20
        },
        min: {
            type: Number,
            default: 10
        },
        max: {
            type: Number,
            default: 200
        }
    },
    methods: {
        scale (type) {
            const zoom = this.value + (type === 'down' ? -this.step : this.step)
            if (
                (zoom < this.min && type === 'down') ||
        (zoom > this.max && type === 'up')
            ) {
                return
            }
            this.$emit('input', zoom)
        }
    }
}
</script>

<style lang="less">
.trans(@duration) {
  transition: ~"all @{duration} ease-in";
}
.zoom-wrapper {
  .zoom-button {
    width: 20px;
    height: 20px;
    line-height: 10px;
    border-radius: 50%;
    background: rgba(157, 162, 172, 1);
    box-shadow: 0px 2px 8px 0px rgba(218, 220, 223, 0.7);
    border: none;
    cursor: pointer;
    outline: none;
    &:active {
      box-shadow: 0px 0px 2px 2px rgba(218, 220, 223, 0.2) inset;
    }
    .trans(0.1s);
    &:hover {
      background: #1890ff;
      .trans(0.1s);
    }
  }
  .zoom-number {
    color: #657180;
    padding: 0 8px;
    display: inline-block;
    width: 46px;
    text-align: center;
  }
}
</style>
