text: "use strict";
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = void 0;
  
  require("../../../src/components/VVirtualScroll/VVirtualScroll.sass");
  
  var _measurable = _interopRequireDefault(require("../../mixins/measurable"));
  
  var _scroll = _interopRequireDefault(require("../../directives/scroll"));
  
  var _helpers = require("../../util/helpers");
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  // Styles
  // Mixins
  // Directives
  // Utilities
  var _default2 = _measurable.default.extend({
    name: 'v-virtual-scroll',
    directives: {
      Scroll: _scroll.default
    },
    props: {
      bench: {
        type: [Number, String],
        default: 0
      },
      itemHeight: {
        type: [Number, String],
        required: true
      },
      items: {
        type: Array,
        default: function _default() {
          return [];
        }
      }
    },
    data: function data() {
      return {
        first: 0,
        last: 0,
        scrollTop: 0
      };
    },
    computed: {
      __bench: function __bench() {
        return parseInt(this.bench, 10);
      },
      __itemHeight: function __itemHeight() {
        return parseInt(this.itemHeight, 10);
      },
      firstToRender: function firstToRender() {
        return Math.max(0, this.first - this.__bench);
      },
      lastToRender: function lastToRender() {
        return Math.min(this.items.length, this.last + this.__bench);
      }
    },
    watch: {
      height: 'onScroll',
      itemHeight: 'onScroll'
    },
    mounted: function mounted() {
      this.last = this.getLast(0);
    },
    methods: {
      getChildren: function getChildren() {
        return this.items.slice(this.firstToRender, this.lastToRender).map(this.genChild);
      },
      genChild: function genChild(item, index) {
        index += this.firstToRender;
        var top = (0, _helpers.convertToUnit)(index * this.__itemHeight);
        return this.$createElement('div', {
          staticClass: 'v-virtual-scroll__item',
          style: {
            top: top
          },
          key: index
        }, (0, _helpers.getSlot)(this, 'default', {
          index: index,
          item: item
        }));
      },
      getFirst: function getFirst() {
        return Math.floor(this.scrollTop / this.__itemHeight);
      },
      getLast: function getLast(first) {
        var height = parseInt(this.height || 0, 10) || this.$el.clientHeight;
        return first + Math.ceil(height / this.__itemHeight);
      },
      onScroll: function onScroll() {
        this.scrollTop = this.$el.scrollTop;
        this.first = this.getFirst();
        this.last = this.getLast(this.first);
      }
    },
    render: function render(h) {
      var content = h('div', {
        staticClass: 'v-virtual-scroll__container',
        style: {
          height: (0, _helpers.convertToUnit)(this.items.length * this.__itemHeight)
        }
      }, this.getChildren());
      return h('div', {
        staticClass: 'v-virtual-scroll',
        style: this.measurableStyles,
        directives: [{
          name: 'scroll',
          modifiers: {
            self: true
          },
          value: this.onScroll
        }]
      }, [content]);
    }
  });
  
  exports.default = _default2;
  //# sourceMappingURL=VVirtualScroll.js.map