text: (function webpackUniversalModuleDefinition(root, factory) {
  	if(typeof exports === 'object' && typeof module === 'object')
  		module.exports = factory();
  	else if(typeof define === 'function' && define.amd)
  		define([], factory);
  	else if(typeof exports === 'object')
  		exports["cascade-picker"] = factory();
  	else
  		root["cube"] = root["cube"] || {}, root["cube"]["cascade-picker"] = factory();
  })(typeof self !== 'undefined' ? self : this, function() {
  return /******/ (function(modules) { // webpackBootstrap
  /******/ 	// The module cache
  /******/ 	var installedModules = {};
  /******/
  /******/ 	// The require function
  /******/ 	function __webpack_require__(moduleId) {
  /******/
  /******/ 		// Check if module is in cache
  /******/ 		if(installedModules[moduleId]) {
  /******/ 			return installedModules[moduleId].exports;
  /******/ 		}
  /******/ 		// Create a new module (and put it into the cache)
  /******/ 		var module = installedModules[moduleId] = {
  /******/ 			i: moduleId,
  /******/ 			l: false,
  /******/ 			exports: {}
  /******/ 		};
  /******/
  /******/ 		// Execute the module function
  /******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  /******/
  /******/ 		// Flag the module as loaded
  /******/ 		module.l = true;
  /******/
  /******/ 		// Return the exports of the module
  /******/ 		return module.exports;
  /******/ 	}
  /******/
  /******/
  /******/ 	// expose the modules object (__webpack_modules__)
  /******/ 	__webpack_require__.m = modules;
  /******/
  /******/ 	// expose the module cache
  /******/ 	__webpack_require__.c = installedModules;
  /******/
  /******/ 	// define getter function for harmony exports
  /******/ 	__webpack_require__.d = function(exports, name, getter) {
  /******/ 		if(!__webpack_require__.o(exports, name)) {
  /******/ 			Object.defineProperty(exports, name, {
  /******/ 				configurable: false,
  /******/ 				enumerable: true,
  /******/ 				get: getter
  /******/ 			});
  /******/ 		}
  /******/ 	};
  /******/
  /******/ 	// getDefaultExport function for compatibility with non-harmony modules
  /******/ 	__webpack_require__.n = function(module) {
  /******/ 		var getter = module && module.__esModule ?
  /******/ 			function getDefault() { return module['default']; } :
  /******/ 			function getModuleExports() { return module; };
  /******/ 		__webpack_require__.d(getter, 'a', getter);
  /******/ 		return getter;
  /******/ 	};
  /******/
  /******/ 	// Object.prototype.hasOwnProperty.call
  /******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  /******/
  /******/ 	// __webpack_public_path__
  /******/ 	__webpack_require__.p = "./";
  /******/
  /******/ 	// Load entry module and return exports
  /******/ 	return __webpack_require__(__webpack_require__.s = 261);
  /******/ })
  /************************************************************************/
  /******/ ([
  /* 0 */
  /***/ (function(module, exports) {
  
  var core = module.exports = { version: '2.5.7' };
  if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
  
  
  /***/ }),
  /* 1 */
  /***/ (function(module, exports) {
  
  // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
  var global = module.exports = typeof window != 'undefined' && window.Math == Math
    ? window : typeof self != 'undefined' && self.Math == Math ? self
    // eslint-disable-next-line no-new-func
    : Function('return this')();
  if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
  
  
  /***/ }),
  /* 2 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var store = __webpack_require__(21)('wks');
  var uid = __webpack_require__(17);
  var Symbol = __webpack_require__(1).Symbol;
  var USE_SYMBOL = typeof Symbol == 'function';
  
  var $exports = module.exports = function (name) {
    return store[name] || (store[name] =
      USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
  };
  
  $exports.store = store;
  
  
  /***/ }),
  /* 3 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // Thank's IE8 for his funny defineProperty
  module.exports = !__webpack_require__(9)(function () {
    return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
  });
  
  
  /***/ }),
  /* 4 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var anObject = __webpack_require__(11);
  var IE8_DOM_DEFINE = __webpack_require__(29);
  var toPrimitive = __webpack_require__(24);
  var dP = Object.defineProperty;
  
  exports.f = __webpack_require__(3) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
    anObject(O);
    P = toPrimitive(P, true);
    anObject(Attributes);
    if (IE8_DOM_DEFINE) try {
      return dP(O, P, Attributes);
    } catch (e) { /* empty */ }
    if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
    if ('value' in Attributes) O[P] = Attributes.value;
    return O;
  };
  
  
  /***/ }),
  /* 5 */
  /***/ (function(module, exports) {
  
  var hasOwnProperty = {}.hasOwnProperty;
  module.exports = function (it, key) {
    return hasOwnProperty.call(it, key);
  };
  
  
  /***/ }),
  /* 6 */
  /***/ (function(module, exports) {
  
  /* globals __VUE_SSR_CONTEXT__ */
  
  // this module is a runtime utility for cleaner component module output and will
  // be included in the final webpack user bundle
  
  module.exports = function normalizeComponent (
    rawScriptExports,
    compiledTemplate,
    injectStyles,
    scopeId,
    moduleIdentifier /* server only */
  ) {
    var esModule
    var scriptExports = rawScriptExports = rawScriptExports || {}
  
    // ES6 modules interop
    var type = typeof rawScriptExports.default
    if (type === 'object' || type === 'function') {
      esModule = rawScriptExports
      scriptExports = rawScriptExports.default
    }
  
    // Vue.extend constructor export interop
    var options = typeof scriptExports === 'function'
      ? scriptExports.options
      : scriptExports
  
    // render functions
    if (compiledTemplate) {
      options.render = compiledTemplate.render
      options.staticRenderFns = compiledTemplate.staticRenderFns
    }
  
    // scopedId
    if (scopeId) {
      options._scopeId = scopeId
    }
  
    var hook
    if (moduleIdentifier) { // server build
      hook = function (context) {
        // 2.3 injection
        context =
          context || // cached call
          (this.$vnode && this.$vnode.ssrContext) || // stateful
          (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
        // 2.2 with runInNewContext: true
        if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
          context = __VUE_SSR_CONTEXT__
        }
        // inject component styles
        if (injectStyles) {
          injectStyles.call(this, context)
        }
        // register component module identifier for async chunk inferrence
        if (context && context._registeredComponents) {
          context._registeredComponents.add(moduleIdentifier)
        }
      }
      // used by ssr in case component is cached and beforeCreate
      // never gets called
      options._ssrRegister = hook
    } else if (injectStyles) {
      hook = injectStyles
    }
  
    if (hook) {
      var functional = options.functional
      var existing = functional
        ? options.render
        : options.beforeCreate
      if (!functional) {
        // inject component registration as beforeCreate hook
        options.beforeCreate = existing
          ? [].concat(existing, hook)
          : [hook]
      } else {
        // register for functioal component in vue file
        options.render = function renderWithStyleInjection (h, context) {
          hook.call(context)
          return existing(h, context)
        }
      }
    }
  
    return {
      esModule: esModule,
      exports: scriptExports,
      options: options
    }
  }
  
  
  /***/ }),
  /* 7 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var dP = __webpack_require__(4);
  var createDesc = __webpack_require__(14);
  module.exports = __webpack_require__(3) ? function (object, key, value) {
    return dP.f(object, key, createDesc(1, value));
  } : function (object, key, value) {
    object[key] = value;
    return object;
  };
  
  
  /***/ }),
  /* 8 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // to indexed object, toObject with fallback for non-array-like ES3 strings
  var IObject = __webpack_require__(33);
  var defined = __webpack_require__(18);
  module.exports = function (it) {
    return IObject(defined(it));
  };
  
  
  /***/ }),
  /* 9 */
  /***/ (function(module, exports) {
  
  module.exports = function (exec) {
    try {
      return !!exec();
    } catch (e) {
      return true;
    }
  };
  
  
  /***/ }),
  /* 10 */
  /***/ (function(module, exports) {
  
  module.exports = function (it) {
    return typeof it === 'object' ? it !== null : typeof it === 'function';
  };
  
  
  /***/ }),
  /* 11 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var isObject = __webpack_require__(10);
  module.exports = function (it) {
    if (!isObject(it)) throw TypeError(it + ' is not an object!');
    return it;
  };
  
  
  /***/ }),
  /* 12 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var global = __webpack_require__(1);
  var core = __webpack_require__(0);
  var ctx = __webpack_require__(35);
  var hide = __webpack_require__(7);
  var has = __webpack_require__(5);
  var PROTOTYPE = 'prototype';
  
  var $export = function (type, name, source) {
    var IS_FORCED = type & $export.F;
    var IS_GLOBAL = type & $export.G;
    var IS_STATIC = type & $export.S;
    var IS_PROTO = type & $export.P;
    var IS_BIND = type & $export.B;
    var IS_WRAP = type & $export.W;
    var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
    var expProto = exports[PROTOTYPE];
    var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];
    var key, own, out;
    if (IS_GLOBAL) source = name;
    for (key in source) {
      // contains in native
      own = !IS_FORCED && target && target[key] !== undefined;
      if (own && has(exports, key)) continue;
      // export native or passed
      out = own ? target[key] : source[key];
      // prevent global pollution for namespaces
      exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
      // bind timers to global for call from export context
      : IS_BIND && own ? ctx(out, global)
      // wrap global constructors for prevent change them in library
      : IS_WRAP && target[key] == out ? (function (C) {
        var F = function (a, b, c) {
          if (this instanceof C) {
            switch (arguments.length) {
              case 0: return new C();
              case 1: return new C(a);
              case 2: return new C(a, b);
            } return new C(a, b, c);
          } return C.apply(this, arguments);
        };
        F[PROTOTYPE] = C[PROTOTYPE];
        return F;
      // make static versions for prototype methods
      })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
      // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
      if (IS_PROTO) {
        (exports.virtual || (exports.virtual = {}))[key] = out;
        // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
        if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);
      }
    }
  };
  // type bitmap
  $export.F = 1;   // forced
  $export.G = 2;   // global
  $export.S = 4;   // static
  $export.P = 8;   // proto
  $export.B = 16;  // bind
  $export.W = 32;  // wrap
  $export.U = 64;  // safe
  $export.R = 128; // real proto method for `library`
  module.exports = $export;
  
  
  /***/ }),
  /* 13 */
  /***/ (function(module, exports) {
  
  module.exports = {};
  
  
  /***/ }),
  /* 14 */
  /***/ (function(module, exports) {
  
  module.exports = function (bitmap, value) {
    return {
      enumerable: !(bitmap & 1),
      configurable: !(bitmap & 2),
      writable: !(bitmap & 4),
      value: value
    };
  };
  
  
  /***/ }),
  /* 15 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 19.1.2.14 / 15.2.3.14 Object.keys(O)
  var $keys = __webpack_require__(30);
  var enumBugKeys = __webpack_require__(22);
  
  module.exports = Object.keys || function keys(O) {
    return $keys(O, enumBugKeys);
  };
  
  
  /***/ }),
  /* 16 */
  /***/ (function(module, exports) {
  
  module.exports = true;
  
  
  /***/ }),
  /* 17 */
  /***/ (function(module, exports) {
  
  var id = 0;
  var px = Math.random();
  module.exports = function (key) {
    return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
  };
  
  
  /***/ }),
  /* 18 */
  /***/ (function(module, exports) {
  
  // 7.2.1 RequireObjectCoercible(argument)
  module.exports = function (it) {
    if (it == undefined) throw TypeError("Can't call method on  " + it);
    return it;
  };
  
  
  /***/ }),
  /* 19 */
  /***/ (function(module, exports) {
  
  // 7.1.4 ToInteger
  var ceil = Math.ceil;
  var floor = Math.floor;
  module.exports = function (it) {
    return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
  };
  
  
  /***/ }),
  /* 20 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var shared = __webpack_require__(21)('keys');
  var uid = __webpack_require__(17);
  module.exports = function (key) {
    return shared[key] || (shared[key] = uid(key));
  };
  
  
  /***/ }),
  /* 21 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var core = __webpack_require__(0);
  var global = __webpack_require__(1);
  var SHARED = '__core-js_shared__';
  var store = global[SHARED] || (global[SHARED] = {});
  
  (module.exports = function (key, value) {
    return store[key] || (store[key] = value !== undefined ? value : {});
  })('versions', []).push({
    version: core.version,
    mode: __webpack_require__(16) ? 'pure' : 'global',
    copyright: '© 2018 Denis Pushkarev (zloirock.ru)'
  });
  
  
  /***/ }),
  /* 22 */
  /***/ (function(module, exports) {
  
  // IE 8- don't enum bug keys
  module.exports = (
    'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
  ).split(',');
  
  
  /***/ }),
  /* 23 */
  /***/ (function(module, exports) {
  
  exports.f = {}.propertyIsEnumerable;
  
  
  /***/ }),
  /* 24 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 7.1.1 ToPrimitive(input [, PreferredType])
  var isObject = __webpack_require__(10);
  // instead of the ES6 spec version, we didn't implement @@toPrimitive case
  // and the second argument - flag - preferred type is a string
  module.exports = function (it, S) {
    if (!isObject(it)) return it;
    var fn, val;
    if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
    if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
    if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
    throw TypeError("Can't convert object to primitive value");
  };
  
  
  /***/ }),
  /* 25 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 7.1.13 ToObject(argument)
  var defined = __webpack_require__(18);
  module.exports = function (it) {
    return Object(defined(it));
  };
  
  
  /***/ }),
  /* 26 */
  /***/ (function(module, exports) {
  
  var toString = {}.toString;
  
  module.exports = function (it) {
    return toString.call(it).slice(8, -1);
  };
  
  
  /***/ }),
  /* 27 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var def = __webpack_require__(4).f;
  var has = __webpack_require__(5);
  var TAG = __webpack_require__(2)('toStringTag');
  
  module.exports = function (it, tag, stat) {
    if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
  };
  
  
  /***/ }),
  /* 28 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var isObject = __webpack_require__(10);
  var document = __webpack_require__(1).document;
  // typeof document.createElement is 'object' in old IE
  var is = isObject(document) && isObject(document.createElement);
  module.exports = function (it) {
    return is ? document.createElement(it) : {};
  };
  
  
  /***/ }),
  /* 29 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = !__webpack_require__(3) && !__webpack_require__(9)(function () {
    return Object.defineProperty(__webpack_require__(28)('div'), 'a', { get: function () { return 7; } }).a != 7;
  });
  
  
  /***/ }),
  /* 30 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var has = __webpack_require__(5);
  var toIObject = __webpack_require__(8);
  var arrayIndexOf = __webpack_require__(45)(false);
  var IE_PROTO = __webpack_require__(20)('IE_PROTO');
  
  module.exports = function (object, names) {
    var O = toIObject(object);
    var i = 0;
    var result = [];
    var key;
    for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
    // Don't enum bug & hidden keys
    while (names.length > i) if (has(O, key = names[i++])) {
      ~arrayIndexOf(result, key) || result.push(key);
    }
    return result;
  };
  
  
  /***/ }),
  /* 31 */
  /***/ (function(module, exports) {
  
  exports.f = Object.getOwnPropertySymbols;
  
  
  /***/ }),
  /* 32 */
  /***/ (function(module, exports, __webpack_require__) {
  
  /* WEBPACK VAR INJECTION */(function(process) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod.exports);
      global.debug = mod.exports;
    }
  })(this, function (exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var warn = exports.warn = function warn(msg, componentName) {
      if (process.env.NODE_ENV !== 'production') {
        var component = componentName ? '<' + componentName + '> ' : '';
        console.error('[Cube warn]: ' + component + msg);
      }
    };
  
    var tip = exports.tip = function tip(msg, componentName) {
      if (process.env.NODE_ENV !== 'production') {
        var component = componentName ? '<' + componentName + '> ' : '';
        console.warn('[Cube tip]: ' + component + msg);
      }
    };
  });
  /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(61)))
  
  /***/ }),
  /* 33 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // fallback for non-array-like ES3 and non-enumerable old V8 strings
  var cof = __webpack_require__(26);
  // eslint-disable-next-line no-prototype-builtins
  module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
    return cof(it) == 'String' ? it.split('') : Object(it);
  };
  
  
  /***/ }),
  /* 34 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var LIBRARY = __webpack_require__(16);
  var $export = __webpack_require__(12);
  var redefine = __webpack_require__(39);
  var hide = __webpack_require__(7);
  var Iterators = __webpack_require__(13);
  var $iterCreate = __webpack_require__(51);
  var setToStringTag = __webpack_require__(27);
  var getPrototypeOf = __webpack_require__(54);
  var ITERATOR = __webpack_require__(2)('iterator');
  var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
  var FF_ITERATOR = '@@iterator';
  var KEYS = 'keys';
  var VALUES = 'values';
  
  var returnThis = function () { return this; };
  
  module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
    $iterCreate(Constructor, NAME, next);
    var getMethod = function (kind) {
      if (!BUGGY && kind in proto) return proto[kind];
      switch (kind) {
        case KEYS: return function keys() { return new Constructor(this, kind); };
        case VALUES: return function values() { return new Constructor(this, kind); };
      } return function entries() { return new Constructor(this, kind); };
    };
    var TAG = NAME + ' Iterator';
    var DEF_VALUES = DEFAULT == VALUES;
    var VALUES_BUG = false;
    var proto = Base.prototype;
    var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
    var $default = $native || getMethod(DEFAULT);
    var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
    var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
    var methods, key, IteratorPrototype;
    // Fix native
    if ($anyNative) {
      IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
      if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
        // Set @@toStringTag to native iterators
        setToStringTag(IteratorPrototype, TAG, true);
        // fix for some old engines
        if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
      }
    }
    // fix Array#{values, @@iterator}.name in V8 / FF
    if (DEF_VALUES && $native && $native.name !== VALUES) {
      VALUES_BUG = true;
      $default = function values() { return $native.call(this); };
    }
    // Define iterator
    if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
      hide(proto, ITERATOR, $default);
    }
    // Plug for library
    Iterators[NAME] = $default;
    Iterators[TAG] = returnThis;
    if (DEFAULT) {
      methods = {
        values: DEF_VALUES ? $default : getMethod(VALUES),
        keys: IS_SET ? $default : getMethod(KEYS),
        entries: $entries
      };
      if (FORCED) for (key in methods) {
        if (!(key in proto)) redefine(proto, key, methods[key]);
      } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
    }
    return methods;
  };
  
  
  /***/ }),
  /* 35 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // optional / simple context binding
  var aFunction = __webpack_require__(43);
  module.exports = function (fn, that, length) {
    aFunction(fn);
    if (that === undefined) return fn;
    switch (length) {
      case 1: return function (a) {
        return fn.call(that, a);
      };
      case 2: return function (a, b) {
        return fn.call(that, a, b);
      };
      case 3: return function (a, b, c) {
        return fn.call(that, a, b, c);
      };
    }
    return function (/* ...args */) {
      return fn.apply(that, arguments);
    };
  };
  
  
  /***/ }),
  /* 36 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  exports.__esModule = true;
  
  var _defineProperty = __webpack_require__(62);
  
  var _defineProperty2 = _interopRequireDefault(_defineProperty);
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  exports.default = function (obj, key, value) {
    if (key in obj) {
      (0, _defineProperty2.default)(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }
  
    return obj;
  };
  
  /***/ }),
  /* 37 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 7.1.15 ToLength
  var toInteger = __webpack_require__(19);
  var min = Math.min;
  module.exports = function (it) {
    return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
  };
  
  
  /***/ }),
  /* 38 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var $at = __webpack_require__(50)(true);
  
  // 21.1.3.27 String.prototype[@@iterator]()
  __webpack_require__(34)(String, 'String', function (iterated) {
    this._t = String(iterated); // target
    this._i = 0;                // next index
  // 21.1.5.2.1 %StringIteratorPrototype%.next()
  }, function () {
    var O = this._t;
    var index = this._i;
    var point;
    if (index >= O.length) return { value: undefined, done: true };
    point = $at(O, index);
    this._i += point.length;
    return { value: point, done: false };
  });
  
  
  /***/ }),
  /* 39 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = __webpack_require__(7);
  
  
  /***/ }),
  /* 40 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
  var anObject = __webpack_require__(11);
  var dPs = __webpack_require__(52);
  var enumBugKeys = __webpack_require__(22);
  var IE_PROTO = __webpack_require__(20)('IE_PROTO');
  var Empty = function () { /* empty */ };
  var PROTOTYPE = 'prototype';
  
  // Create object with fake `null` prototype: use iframe Object with cleared prototype
  var createDict = function () {
    // Thrash, waste and sodomy: IE GC bug
    var iframe = __webpack_require__(28)('iframe');
    var i = enumBugKeys.length;
    var lt = '<';
    var gt = '>';
    var iframeDocument;
    iframe.style.display = 'none';
    __webpack_require__(53).appendChild(iframe);
    iframe.src = 'javascript:'; // eslint-disable-line no-script-url
    // createDict = iframe.contentWindow.Object;
    // html.removeChild(iframe);
    iframeDocument = iframe.contentWindow.document;
    iframeDocument.open();
    iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
    iframeDocument.close();
    createDict = iframeDocument.F;
    while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
    return createDict();
  };
  
  module.exports = Object.create || function create(O, Properties) {
    var result;
    if (O !== null) {
      Empty[PROTOTYPE] = anObject(O);
      result = new Empty();
      Empty[PROTOTYPE] = null;
      // add "__proto__" for Object.getPrototypeOf polyfill
      result[IE_PROTO] = O;
    } else result = createDict();
    return Properties === undefined ? result : dPs(result, Properties);
  };
  
  
  /***/ }),
  /* 41 */
  /***/ (function(module, exports, __webpack_require__) {
  
  exports.f = __webpack_require__(2);
  
  
  /***/ }),
  /* 42 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var global = __webpack_require__(1);
  var core = __webpack_require__(0);
  var LIBRARY = __webpack_require__(16);
  var wksExt = __webpack_require__(41);
  var defineProperty = __webpack_require__(4).f;
  module.exports = function (name) {
    var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
    if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
  };
  
  
  /***/ }),
  /* 43 */
  /***/ (function(module, exports) {
  
  module.exports = function (it) {
    if (typeof it != 'function') throw TypeError(it + ' is not a function!');
    return it;
  };
  
  
  /***/ }),
  /* 44 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports, __webpack_require__(60), __webpack_require__(36), __webpack_require__(65), __webpack_require__(48)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(exports, require('babel-runtime/core-js/object/keys'), require('babel-runtime/helpers/defineProperty'), require('babel-runtime/helpers/typeof'), require('../lang/string'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod.exports, global.keys, global.defineProperty, global._typeof, global.string);
      global.util = mod.exports;
    }
  })(this, function (exports, _keys, _defineProperty2, _typeof2, _string) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.isNumber = exports.isObject = exports.isString = exports.isArray = exports.isFunc = exports.isUndef = exports.parsePath = exports.processComponentName = exports.debounce = exports.cb2PromiseWithResolve = exports.parallel = exports.resetTypeValue = exports.createAddAPI = exports.deepAssign = exports.findIndex = undefined;
  
    var _keys2 = _interopRequireDefault(_keys);
  
    var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  
    var _typeof3 = _interopRequireDefault(_typeof2);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    function findIndex(ary, fn) {
      if (ary.findIndex) {
        return ary.findIndex(fn);
      }
  
      var index = -1;
  
      ary.some(function (item, i, ary) {
        var ret = fn.call(this, item, i, ary);
        if (ret) {
          index = i;
          return ret;
        }
      });
  
      return index;
    }
  
    function deepAssign(to, from) {
      for (var key in from) {
        if (!to[key] || (0, _typeof3.default)(to[key]) !== 'object') {
          to[key] = from[key];
        } else {
          deepAssign(to[key], from[key]);
        }
      }
    }
  
    function createAddAPI(baseObj) {
      return function add() {
        for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
          args[_key] = arguments[_key];
        }
  
        if (typeof args[0] === 'string') {
          args[0] = (0, _defineProperty3.default)({}, args[0], args[1]);
        }
        deepAssign(baseObj, args[0]);
      };
    }
  
    function judgeTypeFnCreator(type) {
      var toString = Object.prototype.toString;
      return function isType(o) {
        return toString.call(o) === '[object ' + type + ']';
      };
    }
  
    var typesReset = {
      _set: function _set(obj, key, value) {
        obj[key] = value;
      },
      string: function string(obj, key) {
        typesReset._set(obj, key, '');
      },
      number: function number(obj, key) {
        typesReset._set(obj, key, 0);
      },
      boolean: function boolean(obj, key) {
        typesReset._set(obj, key, false);
      },
      object: function object(obj, key, value) {
        if (Array.isArray(value)) {
          typesReset._set(obj, key, []);
        } else {
          typesReset._set(obj, key, {});
        }
      }
    };
    function resetTypeValue(obj, key, defVal) {
      if (defVal !== undefined) {
        return typesReset._set(obj, key, defVal);
      }
      if (key) {
        var value = obj[key];
        var resetHandler = typesReset[typeof value === 'undefined' ? 'undefined' : (0, _typeof3.default)(value)];
        resetHandler && resetHandler(obj, key, value);
      } else {
        (0, _keys2.default)(obj).forEach(function (key) {
          resetTypeValue(obj, key);
        });
      }
    }
  
    function parallel(tasks, cb) {
      var doneCount = 0;
      var results = [];
      var tasksLen = tasks.length;
      if (!tasksLen) {
        return cb(results);
      }
      tasks.forEach(function (task, i) {
        task(function (ret) {
          doneCount += 1;
          results[i] = ret;
          if (doneCount === tasksLen) {
            cb(results);
          }
        });
      });
    }
  
    function cb2PromiseWithResolve(cb) {
      var promise = void 0;
      if (typeof window.Promise !== 'undefined') {
        var _cb = cb;
        promise = new window.Promise(function (resolve) {
          cb = function cb(data) {
            _cb && _cb(data);
            resolve(data);
          };
        });
        promise.resolve = cb;
      }
      return promise;
    }
  
    function debounce(func, wait, immediate, initValue) {
      var timeout = void 0;
      var result = initValue;
  
      var later = function later(context, args) {
        timeout = null;
        if (args) {
          result = func.apply(context, args);
        }
      };
  
      var debounced = function debounced() {
        var _this = this;
  
        for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
          args[_key2] = arguments[_key2];
        }
  
        if (timeout) {
          clearTimeout(timeout);
        }
        if (immediate) {
          var callNow = !timeout;
          timeout = setTimeout(later, wait);
          if (callNow) {
            result = func.apply(this, args);
          }
        } else {
          timeout = setTimeout(function () {
            later(_this, args);
          }, wait);
        }
  
        return result;
      };
  
      debounced.cancel = function () {
        clearTimeout(timeout);
        timeout = null;
      };
  
      return debounced;
    }
  
    function processComponentName(Component) {
      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
          _ref$prefix = _ref.prefix,
          prefix = _ref$prefix === undefined ? '' : _ref$prefix,
          _ref$firstUpperCase = _ref.firstUpperCase,
          firstUpperCase = _ref$firstUpperCase === undefined ? false : _ref$firstUpperCase;
  
      var name = Component.name;
      var pureName = name.replace(/^cube-/i, '');
      var camelizeName = '' + (0, _string.camelize)('' + prefix + pureName);
  
      if (firstUpperCase) {
        camelizeName = camelizeName.charAt(0).toUpperCase() + camelizeName.slice(1);
      }
      return camelizeName;
    }
  
    function parsePath(obj) {
      var path = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
  
      var segments = path.split('.');
      var result = obj;
      for (var i = 0; i < segments.length; i++) {
        var key = segments[i];
  
        if (isUndef(result[key])) {
          result = '';
          break;
        } else {
          result = result[key];
        }
      }
      return result;
    }
  
    var isFunc = judgeTypeFnCreator('Function');
    var isUndef = judgeTypeFnCreator('Undefined');
    var isArray = judgeTypeFnCreator('Array');
    var isString = judgeTypeFnCreator('String');
    var isObject = judgeTypeFnCreator('Object');
    var isNumber = judgeTypeFnCreator('Number');
  
    exports.findIndex = findIndex;
    exports.deepAssign = deepAssign;
    exports.createAddAPI = createAddAPI;
    exports.resetTypeValue = resetTypeValue;
    exports.parallel = parallel;
    exports.cb2PromiseWithResolve = cb2PromiseWithResolve;
    exports.debounce = debounce;
    exports.processComponentName = processComponentName;
    exports.parsePath = parsePath;
    exports.isUndef = isUndef;
    exports.isFunc = isFunc;
    exports.isArray = isArray;
    exports.isString = isString;
    exports.isObject = isObject;
    exports.isNumber = isNumber;
  });
  
  /***/ }),
  /* 45 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // false -> Array#indexOf
  // true  -> Array#includes
  var toIObject = __webpack_require__(8);
  var toLength = __webpack_require__(37);
  var toAbsoluteIndex = __webpack_require__(46);
  module.exports = function (IS_INCLUDES) {
    return function ($this, el, fromIndex) {
      var O = toIObject($this);
      var length = toLength(O.length);
      var index = toAbsoluteIndex(fromIndex, length);
      var value;
      // Array#includes uses SameValueZero equality algorithm
      // eslint-disable-next-line no-self-compare
      if (IS_INCLUDES && el != el) while (length > index) {
        value = O[index++];
        // eslint-disable-next-line no-self-compare
        if (value != value) return true;
      // Array#indexOf ignores holes, Array#includes - not
      } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
        if (O[index] === el) return IS_INCLUDES || index || 0;
      } return !IS_INCLUDES && -1;
    };
  };
  
  
  /***/ }),
  /* 46 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var toInteger = __webpack_require__(19);
  var max = Math.max;
  var min = Math.min;
  module.exports = function (index, length) {
    index = toInteger(index);
    return index < 0 ? max(index + length, 0) : min(index, length);
  };
  
  
  /***/ }),
  /* 47 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(55);
  var global = __webpack_require__(1);
  var hide = __webpack_require__(7);
  var Iterators = __webpack_require__(13);
  var TO_STRING_TAG = __webpack_require__(2)('toStringTag');
  
  var DOMIterables = ('CSSRuleList,CSSStyleDeclaration,CSSValueList,ClientRectList,DOMRectList,DOMStringList,' +
    'DOMTokenList,DataTransferItemList,FileList,HTMLAllCollection,HTMLCollection,HTMLFormElement,HTMLSelectElement,' +
    'MediaList,MimeTypeArray,NamedNodeMap,NodeList,PaintRequestList,Plugin,PluginArray,SVGLengthList,SVGNumberList,' +
    'SVGPathSegList,SVGPointList,SVGStringList,SVGTransformList,SourceBufferList,StyleSheetList,TextTrackCueList,' +
    'TextTrackList,TouchList').split(',');
  
  for (var i = 0; i < DOMIterables.length; i++) {
    var NAME = DOMIterables[i];
    var Collection = global[NAME];
    var proto = Collection && Collection.prototype;
    if (proto && !proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
    Iterators[NAME] = Iterators.Array;
  }
  
  
  /***/ }),
  /* 48 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod.exports);
      global.string = mod.exports;
    }
  })(this, function (exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.camelize = camelize;
    exports.kebab = kebab;
    var camelizeRE = /-(\w)/g;
    function camelize(str) {
      str = String(str);
      return str.replace(camelizeRE, function (m, c) {
        return c ? c.toUpperCase() : '';
      });
    }
  
    function kebab(str) {
      str = String(str);
      return str.replace(/([A-Z])/g, '-$1').toLowerCase();
    }
  });
  
  /***/ }),
  /* 49 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports);
      global.visibility = mod.exports;
    }
  })(this, function (module, exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var EVENT_TOGGLE = 'toggle';
  
    exports.default = {
      model: {
        prop: 'visible',
        event: EVENT_TOGGLE
      },
      props: {
        visible: {
          type: Boolean,
          default: false
        }
      },
      data: function data() {
        return {
          isVisible: false
        };
      },
  
      watch: {
        isVisible: function isVisible(newVal) {
          this.$emit(EVENT_TOGGLE, newVal);
        }
      },
      mounted: function mounted() {
        var _this = this;
  
        this.$watch('visible', function (newVal, oldVal) {
          if (newVal) {
            _this.show();
          } else if (oldVal && !_this._createAPI_reuse) {
            _this.hide();
          }
        }, {
          immediate: true
        });
      },
  
      methods: {
        show: function show() {
          this.isVisible = true;
        },
        hide: function hide() {
          this.isVisible = false;
        }
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 50 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var toInteger = __webpack_require__(19);
  var defined = __webpack_require__(18);
  // true  -> String#at
  // false -> String#codePointAt
  module.exports = function (TO_STRING) {
    return function (that, pos) {
      var s = String(defined(that));
      var i = toInteger(pos);
      var l = s.length;
      var a, b;
      if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
      a = s.charCodeAt(i);
      return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
        ? TO_STRING ? s.charAt(i) : a
        : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
    };
  };
  
  
  /***/ }),
  /* 51 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var create = __webpack_require__(40);
  var descriptor = __webpack_require__(14);
  var setToStringTag = __webpack_require__(27);
  var IteratorPrototype = {};
  
  // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
  __webpack_require__(7)(IteratorPrototype, __webpack_require__(2)('iterator'), function () { return this; });
  
  module.exports = function (Constructor, NAME, next) {
    Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
    setToStringTag(Constructor, NAME + ' Iterator');
  };
  
  
  /***/ }),
  /* 52 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var dP = __webpack_require__(4);
  var anObject = __webpack_require__(11);
  var getKeys = __webpack_require__(15);
  
  module.exports = __webpack_require__(3) ? Object.defineProperties : function defineProperties(O, Properties) {
    anObject(O);
    var keys = getKeys(Properties);
    var length = keys.length;
    var i = 0;
    var P;
    while (length > i) dP.f(O, P = keys[i++], Properties[P]);
    return O;
  };
  
  
  /***/ }),
  /* 53 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var document = __webpack_require__(1).document;
  module.exports = document && document.documentElement;
  
  
  /***/ }),
  /* 54 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
  var has = __webpack_require__(5);
  var toObject = __webpack_require__(25);
  var IE_PROTO = __webpack_require__(20)('IE_PROTO');
  var ObjectProto = Object.prototype;
  
  module.exports = Object.getPrototypeOf || function (O) {
    O = toObject(O);
    if (has(O, IE_PROTO)) return O[IE_PROTO];
    if (typeof O.constructor == 'function' && O instanceof O.constructor) {
      return O.constructor.prototype;
    } return O instanceof Object ? ObjectProto : null;
  };
  
  
  /***/ }),
  /* 55 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var addToUnscopables = __webpack_require__(56);
  var step = __webpack_require__(57);
  var Iterators = __webpack_require__(13);
  var toIObject = __webpack_require__(8);
  
  // 22.1.3.4 Array.prototype.entries()
  // 22.1.3.13 Array.prototype.keys()
  // 22.1.3.29 Array.prototype.values()
  // 22.1.3.30 Array.prototype[@@iterator]()
  module.exports = __webpack_require__(34)(Array, 'Array', function (iterated, kind) {
    this._t = toIObject(iterated); // target
    this._i = 0;                   // next index
    this._k = kind;                // kind
  // 22.1.5.2.1 %ArrayIteratorPrototype%.next()
  }, function () {
    var O = this._t;
    var kind = this._k;
    var index = this._i++;
    if (!O || index >= O.length) {
      this._t = undefined;
      return step(1);
    }
    if (kind == 'keys') return step(0, index);
    if (kind == 'values') return step(0, O[index]);
    return step(0, [index, O[index]]);
  }, 'values');
  
  // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
  Iterators.Arguments = Iterators.Array;
  
  addToUnscopables('keys');
  addToUnscopables('values');
  addToUnscopables('entries');
  
  
  /***/ }),
  /* 56 */
  /***/ (function(module, exports) {
  
  module.exports = function () { /* empty */ };
  
  
  /***/ }),
  /* 57 */
  /***/ (function(module, exports) {
  
  module.exports = function (done, value) {
    return { value: value, done: !!done };
  };
  
  
  /***/ }),
  /* 58 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
  var $keys = __webpack_require__(30);
  var hiddenKeys = __webpack_require__(22).concat('length', 'prototype');
  
  exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
    return $keys(O, hiddenKeys);
  };
  
  
  /***/ }),
  /* 59 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports);
      global.popup = mod.exports;
    }
  })(this, function (module, exports) {
    "use strict";
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = {
      props: {
        zIndex: {
          type: Number,
          default: 100
        },
        maskClosable: {
          type: Boolean,
          default: false
        }
      }
    };
    module.exports = exports["default"];
  });
  
  /***/ }),
  /* 60 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = { "default": __webpack_require__(69), __esModule: true };
  
  /***/ }),
  /* 61 */
  /***/ (function(module, exports) {
  
  // shim for using process in browser
  var process = module.exports = {};
  
  // cached from whatever global is present so that test runners that stub it
  // don't break things.  But we need to wrap it in a try catch in case it is
  // wrapped in strict mode code which doesn't define any globals.  It's inside a
  // function because try/catches deoptimize in certain engines.
  
  var cachedSetTimeout;
  var cachedClearTimeout;
  
  function defaultSetTimout() {
      throw new Error('setTimeout has not been defined');
  }
  function defaultClearTimeout () {
      throw new Error('clearTimeout has not been defined');
  }
  (function () {
      try {
          if (typeof setTimeout === 'function') {
              cachedSetTimeout = setTimeout;
          } else {
              cachedSetTimeout = defaultSetTimout;
          }
      } catch (e) {
          cachedSetTimeout = defaultSetTimout;
      }
      try {
          if (typeof clearTimeout === 'function') {
              cachedClearTimeout = clearTimeout;
          } else {
              cachedClearTimeout = defaultClearTimeout;
          }
      } catch (e) {
          cachedClearTimeout = defaultClearTimeout;
      }
  } ())
  function runTimeout(fun) {
      if (cachedSetTimeout === setTimeout) {
          //normal enviroments in sane situations
          return setTimeout(fun, 0);
      }
      // if setTimeout wasn't available but was latter defined
      if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
          cachedSetTimeout = setTimeout;
          return setTimeout(fun, 0);
      }
      try {
          // when when somebody has screwed with setTimeout but no I.E. maddness
          return cachedSetTimeout(fun, 0);
      } catch(e){
          try {
              // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
              return cachedSetTimeout.call(null, fun, 0);
          } catch(e){
              // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
              return cachedSetTimeout.call(this, fun, 0);
          }
      }
  
  
  }
  function runClearTimeout(marker) {
      if (cachedClearTimeout === clearTimeout) {
          //normal enviroments in sane situations
          return clearTimeout(marker);
      }
      // if clearTimeout wasn't available but was latter defined
      if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
          cachedClearTimeout = clearTimeout;
          return clearTimeout(marker);
      }
      try {
          // when when somebody has screwed with setTimeout but no I.E. maddness
          return cachedClearTimeout(marker);
      } catch (e){
          try {
              // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
              return cachedClearTimeout.call(null, marker);
          } catch (e){
              // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
              // Some versions of I.E. have different rules for clearTimeout vs setTimeout
              return cachedClearTimeout.call(this, marker);
          }
      }
  
  
  
  }
  var queue = [];
  var draining = false;
  var currentQueue;
  var queueIndex = -1;
  
  function cleanUpNextTick() {
      if (!draining || !currentQueue) {
          return;
      }
      draining = false;
      if (currentQueue.length) {
          queue = currentQueue.concat(queue);
      } else {
          queueIndex = -1;
      }
      if (queue.length) {
          drainQueue();
      }
  }
  
  function drainQueue() {
      if (draining) {
          return;
      }
      var timeout = runTimeout(cleanUpNextTick);
      draining = true;
  
      var len = queue.length;
      while(len) {
          currentQueue = queue;
          queue = [];
          while (++queueIndex < len) {
              if (currentQueue) {
                  currentQueue[queueIndex].run();
              }
          }
          queueIndex = -1;
          len = queue.length;
      }
      currentQueue = null;
      draining = false;
      runClearTimeout(timeout);
  }
  
  process.nextTick = function (fun) {
      var args = new Array(arguments.length - 1);
      if (arguments.length > 1) {
          for (var i = 1; i < arguments.length; i++) {
              args[i - 1] = arguments[i];
          }
      }
      queue.push(new Item(fun, args));
      if (queue.length === 1 && !draining) {
          runTimeout(drainQueue);
      }
  };
  
  // v8 likes predictible objects
  function Item(fun, array) {
      this.fun = fun;
      this.array = array;
  }
  Item.prototype.run = function () {
      this.fun.apply(null, this.array);
  };
  process.title = 'browser';
  process.browser = true;
  process.env = {};
  process.argv = [];
  process.version = ''; // empty string to avoid regexp issues
  process.versions = {};
  
  function noop() {}
  
  process.on = noop;
  process.addListener = noop;
  process.once = noop;
  process.off = noop;
  process.removeListener = noop;
  process.removeAllListeners = noop;
  process.emit = noop;
  process.prependListener = noop;
  process.prependOnceListener = noop;
  
  process.listeners = function (name) { return [] }
  
  process.binding = function (name) {
      throw new Error('process.binding is not supported');
  };
  
  process.cwd = function () { return '/' };
  process.chdir = function (dir) {
      throw new Error('process.chdir is not supported');
  };
  process.umask = function() { return 0; };
  
  
  /***/ }),
  /* 62 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = { "default": __webpack_require__(63), __esModule: true };
  
  /***/ }),
  /* 63 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(64);
  var $Object = __webpack_require__(0).Object;
  module.exports = function defineProperty(it, key, desc) {
    return $Object.defineProperty(it, key, desc);
  };
  
  
  /***/ }),
  /* 64 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var $export = __webpack_require__(12);
  // 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
  $export($export.S + $export.F * !__webpack_require__(3), 'Object', { defineProperty: __webpack_require__(4).f });
  
  
  /***/ }),
  /* 65 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  exports.__esModule = true;
  
  var _iterator = __webpack_require__(75);
  
  var _iterator2 = _interopRequireDefault(_iterator);
  
  var _symbol = __webpack_require__(77);
  
  var _symbol2 = _interopRequireDefault(_symbol);
  
  var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
    return typeof obj === "undefined" ? "undefined" : _typeof(obj);
  } : function (obj) {
    return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
  };
  
  /***/ }),
  /* 66 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(36), __webpack_require__(100), __webpack_require__(32), __webpack_require__(44), __webpack_require__(90)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('babel-runtime/helpers/defineProperty'), require('../../locale/lang/zh-CN'), require('../helpers/debug'), require('../helpers/util'), require('../lang/date'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.defineProperty, global.zhCN, global.debug, global.util, global.date);
      global.index = mod.exports;
    }
  })(this, function (module, exports, _defineProperty2, _zhCN, _debug, _util, _date) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  
    var _zhCN2 = _interopRequireDefault(_zhCN);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    var proto = void 0;
  
    var DEFAULT_LANG = 'zh-CN';
  
    var locale = {
      name: 'locale',
      install: function install(Vue) {
        if (locale.installed) return;
        proto = Vue.prototype;
        Vue.util.defineReactive(proto, '$cubeLang', DEFAULT_LANG);
        proto['$cubeMessages'] = (0, _defineProperty3.default)({}, DEFAULT_LANG, _zhCN2.default);
        locale.installed = true;
      },
      use: function use(lang, messages) {
        proto['$cubeLang'] = lang;
        var cubeMessages = proto['$cubeMessages'];
  
        if (!(lang in cubeMessages)) {
          cubeMessages[[lang]] = messages;
        }
      },
  
      helpers: {
        toLocaleDateString: function toLocaleDateString(config, formatRules) {
          var compatibleConfig = (0, _util.isNumber)(config) ? config : config.replace(/-/g, '/');
          var date = new Date(compatibleConfig);
  
          if ((0, _util.isUndef)(formatRules)) return date.toDateString();
          return (0, _date.formatDate)(date, formatRules);
        }
      },
      addHelper: function addHelper(fnName, fn) {
        if (fnName in locale.helpers) {
          (0, _debug.warn)(fnName + ' has already been registered on helpers function, please change another name');
          return;
        }
        locale.helpers[fnName] = fn;
      }
    };
  
    exports.default = locale;
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 67 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // getting tag from 19.1.3.6 Object.prototype.toString()
  var cof = __webpack_require__(26);
  var TAG = __webpack_require__(2)('toStringTag');
  // ES3 wrong here
  var ARG = cof(function () { return arguments; }()) == 'Arguments';
  
  // fallback for IE11 Script Access Denied error
  var tryGet = function (it, key) {
    try {
      return it[key];
    } catch (e) { /* empty */ }
  };
  
  module.exports = function (it) {
    var O, T, B;
    return it === undefined ? 'Undefined' : it === null ? 'Null'
      // @@toStringTag case
      : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
      // builtinTag case
      : ARG ? cof(O)
      // ES3 arguments fallback
      : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
  };
  
  
  /***/ }),
  /* 68 */,
  /* 69 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(70);
  module.exports = __webpack_require__(0).Object.keys;
  
  
  /***/ }),
  /* 70 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 19.1.2.14 Object.keys(O)
  var toObject = __webpack_require__(25);
  var $keys = __webpack_require__(15);
  
  __webpack_require__(71)('keys', function () {
    return function keys(it) {
      return $keys(toObject(it));
    };
  });
  
  
  /***/ }),
  /* 71 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // most Object methods by ES6 should accept primitives
  var $export = __webpack_require__(12);
  var core = __webpack_require__(0);
  var fails = __webpack_require__(9);
  module.exports = function (KEY, exec) {
    var fn = (core.Object || {})[KEY] || Object[KEY];
    var exp = {};
    exp[KEY] = exec(fn);
    $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
  };
  
  
  /***/ }),
  /* 72 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(95)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('vue-create-api'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.vueCreateApi);
      global.createApi = mod.exports;
    }
  })(this, function (module, exports, _vueCreateApi) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = createAPI;
  
    var _vueCreateApi2 = _interopRequireDefault(_vueCreateApi);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    function createAPI(Vue, Component, events, single) {
      Vue.use(_vueCreateApi2.default, { componentPrefix: 'cube-' });
      var api = Vue.createAPI(Component, events, single);
      return api;
    }
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 73 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(66), __webpack_require__(44), __webpack_require__(32)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('../locale'), require('../helpers/util'), require('../helpers/debug'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.locale, global.util, global.debug);
      global.locale = mod.exports;
    }
  })(this, function (module, exports, _locale, _util, _debug) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _locale2 = _interopRequireDefault(_locale);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    var TRANSLATION_ABSENT = 'Translation is not registered correctly, ' + 'you can call Locale.use() to install it.';
  
    exports.default = {
      computed: {
        $t: function $t() {
          var lang = this.$cubeLang;
          var messages = this.$cubeMessages[lang];
          if ((0, _util.isUndef)(messages)) {
            (0, _debug.warn)(TRANSLATION_ABSENT);
            return '';
          }
          return function (path) {
            return (0, _util.parsePath)(messages, path);
          };
        }
      },
      beforeCreate: function beforeCreate() {
        _locale2.default.install(this.$root.constructor);
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 74 */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /*!
   * better-normal-scroll v1.12.6
   * (c) 2016-2018 ustbhuangyi
   * Released under the MIT License.
   */
  var slicedToArray = function () {
    function sliceIterator(arr, i) {
      var _arr = [];
      var _n = true;
      var _d = false;
      var _e = undefined;
  
      try {
        for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
          _arr.push(_s.value);
  
          if (i && _arr.length === i) break;
        }
      } catch (err) {
        _d = true;
        _e = err;
      } finally {
        try {
          if (!_n && _i["return"]) _i["return"]();
        } finally {
          if (_d) throw _e;
        }
      }
  
      return _arr;
    }
  
    return function (arr, i) {
      if (Array.isArray(arr)) {
        return arr;
      } else if (Symbol.iterator in Object(arr)) {
        return sliceIterator(arr, i);
      } else {
        throw new TypeError("Invalid attempt to destructure non-iterable instance");
      }
    };
  }();
  
  
  
  
  
  
  
  
  
  
  
  
  
  var toConsumableArray = function (arr) {
    if (Array.isArray(arr)) {
      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
  
      return arr2;
    } else {
      return Array.from(arr);
    }
  };
  
  function eventMixin(BScroll) {
    BScroll.prototype.on = function (type, fn) {
      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;
  
      if (!this._events[type]) {
        this._events[type] = [];
      }
  
      this._events[type].push([fn, context]);
    };
  
    BScroll.prototype.once = function (type, fn) {
      var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this;
  
      function magic() {
        this.off(type, magic);
  
        fn.apply(context, arguments);
      }
      // To expose the corresponding function method in order to execute the off method
      magic.fn = fn;
  
      this.on(type, magic);
    };
  
    BScroll.prototype.off = function (type, fn) {
      var _events = this._events[type];
      if (!_events) {
        return;
      }
  
      var count = _events.length;
      while (count--) {
        if (_events[count][0] === fn || _events[count][0] && _events[count][0].fn === fn) {
          _events[count][0] = undefined;
        }
      }
    };
  
    BScroll.prototype.trigger = function (type) {
      var events = this._events[type];
      if (!events) {
        return;
      }
  
      var len = events.length;
      var eventsCopy = [].concat(toConsumableArray(events));
      for (var i = 0; i < len; i++) {
        var event = eventsCopy[i];
  
        var _event = slicedToArray(event, 2),
            fn = _event[0],
            context = _event[1];
  
        if (fn) {
          fn.apply(context, [].slice.call(arguments, 1));
        }
      }
    };
  }
  
  // ssr support
  var inBrowser = typeof window !== 'undefined';
  var ua = inBrowser && navigator.userAgent.toLowerCase();
  var isWeChatDevTools = ua && /wechatdevtools/.test(ua);
  var isAndroid = ua && ua.indexOf('android') > 0;
  
  function getNow() {
    return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();
  }
  
  function extend(target) {
    for (var _len = arguments.length, rest = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      rest[_key - 1] = arguments[_key];
    }
  
    for (var i = 0; i < rest.length; i++) {
      var source = rest[i];
      for (var key in source) {
        target[key] = source[key];
      }
    }
    return target;
  }
  
  function isUndef(v) {
    return v === undefined || v === null;
  }
  
  function getDistance(x, y) {
    return Math.sqrt(x * x + y * y);
  }
  
  var elementStyle = inBrowser && document.createElement('div').style;
  
  var vendor = function () {
    if (!inBrowser) {
      return false;
    }
    var transformNames = {
      webkit: 'webkitTransform',
      Moz: 'MozTransform',
      O: 'OTransform',
      ms: 'msTransform',
      standard: 'transform'
    };
  
    for (var key in transformNames) {
      if (elementStyle[transformNames[key]] !== undefined) {
        return key;
      }
    }
  
    return false;
  }();
  
  function prefixStyle(style) {
    if (vendor === false) {
      return false;
    }
  
    if (vendor === 'standard') {
      if (style === 'transitionEnd') {
        return 'transitionend';
      }
      return style;
    }
  
    return vendor + style.charAt(0).toUpperCase() + style.substr(1);
  }
  
  function addEvent(el, type, fn, capture) {
    el.addEventListener(type, fn, { passive: false, capture: !!capture });
  }
  
  function removeEvent(el, type, fn, capture) {
    el.removeEventListener(type, fn, { passive: false, capture: !!capture });
  }
  
  function offset(el) {
    var left = 0;
    var top = 0;
  
    while (el) {
      left -= el.offsetLeft;
      top -= el.offsetTop;
      el = el.offsetParent;
    }
  
    return {
      left: left,
      top: top
    };
  }
  
  function offsetToBody(el) {
    var rect = el.getBoundingClientRect();
  
    return {
      left: -(rect.left + window.pageXOffset),
      top: -(rect.top + window.pageYOffset)
    };
  }
  
  var transform = prefixStyle('transform');
  
  var hasPerspective = inBrowser && prefixStyle('perspective') in elementStyle;
  // fix issue #361
  var hasTouch = inBrowser && ('ontouchstart' in window || isWeChatDevTools);
  var hasTransform = transform !== false;
  var hasTransition = inBrowser && prefixStyle('transition') in elementStyle;
  
  var style = {
    transform: transform,
    transitionTimingFunction: prefixStyle('transitionTimingFunction'),
    transitionDuration: prefixStyle('transitionDuration'),
    transitionDelay: prefixStyle('transitionDelay'),
    transformOrigin: prefixStyle('transformOrigin'),
    transitionEnd: prefixStyle('transitionEnd')
  };
  
  var TOUCH_EVENT = 1;
  var MOUSE_EVENT = 2;
  
  var eventType = {
    touchstart: TOUCH_EVENT,
    touchmove: TOUCH_EVENT,
    touchend: TOUCH_EVENT,
  
    mousedown: MOUSE_EVENT,
    mousemove: MOUSE_EVENT,
    mouseup: MOUSE_EVENT
  };
  
  function getRect(el) {
    if (el instanceof window.SVGElement) {
      var rect = el.getBoundingClientRect();
      return {
        top: rect.top,
        left: rect.left,
        width: rect.width,
        height: rect.height
      };
    } else {
      return {
        top: el.offsetTop,
        left: el.offsetLeft,
        width: el.offsetWidth,
        height: el.offsetHeight
      };
    }
  }
  
  function preventDefaultException(el, exceptions) {
    for (var i in exceptions) {
      if (exceptions[i].test(el[i])) {
        return true;
      }
    }
    return false;
  }
  
  function tap(e, eventName) {
    var ev = document.createEvent('Event');
    ev.initEvent(eventName, true, true);
    ev.pageX = e.pageX;
    ev.pageY = e.pageY;
    e.target.dispatchEvent(ev);
  }
  
  function click(e) {
    var event = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'click';
  
    var eventSource = void 0;
    if (e.type === 'mouseup' || e.type === 'mousecancel') {
      eventSource = e;
    } else if (e.type === 'touchend' || e.type === 'touchcancel') {
      eventSource = e.changedTouches[0];
    }
    var posSrc = {};
    if (eventSource) {
      posSrc.screenX = eventSource.screenX || 0;
      posSrc.screenY = eventSource.screenY || 0;
      posSrc.clientX = eventSource.clientX || 0;
      posSrc.clientY = eventSource.clientY || 0;
    }
    var ev = void 0;
    var bubbles = true;
    var cancelable = true;
    if (typeof MouseEvent !== 'undefined') {
      try {
        ev = new MouseEvent(event, extend({
          bubbles: bubbles,
          cancelable: cancelable
        }, posSrc));
      } catch (e) {
        createEvent();
      }
    } else {
      createEvent();
    }
  
    function createEvent() {
      ev = document.createEvent('Event');
      ev.initEvent(event, bubbles, cancelable);
      extend(ev, posSrc);
    }
  
    // forwardedTouchEvent set to true in case of the conflict with fastclick
    ev.forwardedTouchEvent = true;
    ev._constructed = true;
    e.target.dispatchEvent(ev);
  }
  
  function dblclick(e) {
    click(e, 'dblclick');
  }
  
  function prepend(el, target) {
    if (target.firstChild) {
      before(el, target.firstChild);
    } else {
      target.appendChild(el);
    }
  }
  
  function before(el, target) {
    target.parentNode.insertBefore(el, target);
  }
  
  function removeChild(el, child) {
    el.removeChild(child);
  }
  
  var DEFAULT_OPTIONS = {
    startX: 0,
    startY: 0,
    scrollX: false,
    scrollY: true,
    freeScroll: false,
    directionLockThreshold: 5,
    eventPassthrough: '',
    click: false,
    tap: false,
    /**
     * support any side
     * bounce: {
     *   top: true,
     *   bottom: true,
     *   left: true,
     *   right: true
     * }
     */
    bounce: true,
    bounceTime: 800,
    momentum: true,
    momentumLimitTime: 300,
    momentumLimitDistance: 15,
    swipeTime: 2500,
    swipeBounceTime: 500,
    deceleration: 0.0015,
    flickLimitTime: 200,
    flickLimitDistance: 100,
    resizePolling: 60,
    probeType: 0,
    preventDefault: true,
    preventDefaultException: {
      tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/
    },
    HWCompositing: true,
    useTransition: true,
    useTransform: true,
    bindToWrapper: false,
    disableMouse: hasTouch,
    disableTouch: !hasTouch,
    observeDOM: true,
    autoBlur: true,
    /**
     * for picker
     * wheel: {
     *   selectedIndex: 0,
     *   rotate: 25,
     *   adjustTime: 400
     *   wheelWrapperClass: 'wheel-scroll',
     *   wheelItemClass: 'wheel-item'
     * }
     */
    wheel: false,
    /**
     * for slide
     * snap: {
     *   loop: false,
     *   el: domEl,
     *   threshold: 0.1,
     *   stepX: 100,
     *   stepY: 100,
     *   speed: 400,
     *   easing: {
     *     style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
     *     fn: function (t) {
     *       return t * (2 - t)
     *     }
     *   }
     *   listenFlick: true
     * }
     */
    snap: false,
    /**
     * for scrollbar
     * scrollbar: {
     *   fade: true,
     *   interactive: false
     * }
     */
    scrollbar: false,
    /**
     * for pull down and refresh
     * pullDownRefresh: {
     *   threshold: 50,
     *   stop: 20
     * }
     */
    pullDownRefresh: false,
    /**
     * for pull up and load
     * pullUpLoad: {
     *   threshold: 50
     * }
     */
    pullUpLoad: false,
    /**
     * for mouse wheel
     * mouseWheel: {
     *   speed: 20,
     *   invert: false,
     *   easeTime: 300
     * }
     */
    mouseWheel: false,
    stopPropagation: false,
    /**
     * for zoom
     * zoom: {
     *   start: 1,
     *   min: 1,
     *   max: 4
     * }
     */
    zoom: false,
    /**
     * for infinity
     * infinity: {
     *   render(item, div) {
     *   },
     *   createTombstone() {
     *   },
     *   fetch(count) {
     *   }
     * }
     */
    infinity: false,
    /**
     * for double click
     * dblclick: {
     *   delay: 300
     * }
     */
    dblclick: false
  };
  
  function initMixin(BScroll) {
    BScroll.prototype._init = function (el, options) {
      this._handleOptions(options);
  
      // init private custom events
      this._events = {};
  
      this.x = 0;
      this.y = 0;
      this.directionX = 0;
      this.directionY = 0;
  
      this.setScale(1);
  
      this._addDOMEvents();
  
      this._initExtFeatures();
  
      this._watchTransition();
  
      if (this.options.observeDOM) {
        this._initDOMObserver();
      }
  
      if (this.options.autoBlur) {
        this._handleAutoBlur();
      }
  
      this.refresh();
  
      if (!this.options.snap) {
        this.scrollTo(this.options.startX, this.options.startY);
      }
  
      this.enable();
    };
  
    BScroll.prototype.setScale = function (scale) {
      this.lastScale = isUndef(this.scale) ? scale : this.scale;
      this.scale = scale;
    };
  
    BScroll.prototype._handleOptions = function (options) {
      this.options = extend({}, DEFAULT_OPTIONS, options);
  
      this.translateZ = this.options.HWCompositing && hasPerspective ? ' translateZ(0)' : '';
  
      this.options.useTransition = this.options.useTransition && hasTransition;
      this.options.useTransform = this.options.useTransform && hasTransform;
  
      this.options.preventDefault = !this.options.eventPassthrough && this.options.preventDefault;
  
      // If you want eventPassthrough I have to lock one of the axes
      this.options.scrollX = this.options.eventPassthrough === 'horizontal' ? false : this.options.scrollX;
      this.options.scrollY = this.options.eventPassthrough === 'vertical' ? false : this.options.scrollY;
  
      // With eventPassthrough we also need lockDirection mechanism
      this.options.freeScroll = this.options.freeScroll && !this.options.eventPassthrough;
      this.options.directionLockThreshold = this.options.eventPassthrough ? 0 : this.options.directionLockThreshold;
  
      if (this.options.tap === true) {
        this.options.tap = 'tap';
      }
    };
  
    BScroll.prototype._addDOMEvents = function () {
      var eventOperation = addEvent;
      this._handleDOMEvents(eventOperation);
    };
  
    BScroll.prototype._removeDOMEvents = function () {
      var eventOperation = removeEvent;
      this._handleDOMEvents(eventOperation);
    };
  
    BScroll.prototype._handleDOMEvents = function (eventOperation) {
      var target = this.options.bindToWrapper ? this.wrapper : window;
      eventOperation(window, 'orientationchange', this);
      eventOperation(window, 'resize', this);
  
      if (this.options.click) {
        eventOperation(this.wrapper, 'click', this, true);
      }
  
      if (!this.options.disableMouse) {
        eventOperation(this.wrapper, 'mousedown', this);
        eventOperation(target, 'mousemove', this);
        eventOperation(target, 'mousecancel', this);
        eventOperation(target, 'mouseup', this);
      }
  
      if (hasTouch && !this.options.disableTouch) {
        eventOperation(this.wrapper, 'touchstart', this);
        eventOperation(target, 'touchmove', this);
        eventOperation(target, 'touchcancel', this);
        eventOperation(target, 'touchend', this);
      }
  
      eventOperation(this.scroller, style.transitionEnd, this);
    };
  
    BScroll.prototype._initExtFeatures = function () {
      if (this.options.snap) {
        this._initSnap();
      }
      if (this.options.scrollbar) {
        this._initScrollbar();
      }
      if (this.options.pullUpLoad) {
        this._initPullUp();
      }
      if (this.options.pullDownRefresh) {
        this._initPullDown();
      }
      if (this.options.wheel) {
        this._initWheel();
      }
      if (this.options.mouseWheel) {
        this._initMouseWheel();
      }
      if (this.options.zoom) {
        this._initZoom();
      }
      if (this.options.infinity) {
        this._initInfinite();
      }
    };
  
    BScroll.prototype._watchTransition = function () {
      if (typeof Object.defineProperty !== 'function') {
        return;
      }
      var me = this;
      var isInTransition = false;
      var key = this.useTransition ? 'isInTransition' : 'isAnimating';
      Object.defineProperty(this, key, {
        get: function get() {
          return isInTransition;
        },
        set: function set(newVal) {
          isInTransition = newVal;
          // fix issue #359
          var el = me.scroller.children.length ? me.scroller.children : [me.scroller];
          var pointerEvents = isInTransition && !me.pulling ? 'none' : 'auto';
          for (var i = 0; i < el.length; i++) {
            el[i].style.pointerEvents = pointerEvents;
          }
        }
      });
    };
  
    BScroll.prototype._handleAutoBlur = function () {
      this.on('beforeScrollStart', function () {
        var activeElement = document.activeElement;
        if (activeElement && (activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA')) {
          activeElement.blur();
        }
      });
    };
  
    BScroll.prototype._initDOMObserver = function () {
      var _this = this;
  
      if (typeof MutationObserver !== 'undefined') {
        var timer = void 0;
        var observer = new MutationObserver(function (mutations) {
          // don't do any refresh during the transition, or outside of the boundaries
          if (_this._shouldNotRefresh()) {
            return;
          }
          var immediateRefresh = false;
          var deferredRefresh = false;
          for (var i = 0; i < mutations.length; i++) {
            var mutation = mutations[i];
            if (mutation.type !== 'attributes') {
              immediateRefresh = true;
              break;
            } else {
              if (mutation.target !== _this.scroller) {
                deferredRefresh = true;
                break;
              }
            }
          }
          if (immediateRefresh) {
            _this.refresh();
          } else if (deferredRefresh) {
            // attributes changes too often
            clearTimeout(timer);
            timer = setTimeout(function () {
              if (!_this._shouldNotRefresh()) {
                _this.refresh();
              }
            }, 60);
          }
        });
        var config = {
          attributes: true,
          childList: true,
          subtree: true
        };
        observer.observe(this.scroller, config);
  
        this.on('destroy', function () {
          observer.disconnect();
        });
      } else {
        this._checkDOMUpdate();
      }
    };
  
    BScroll.prototype._shouldNotRefresh = function () {
      var outsideBoundaries = this.x > this.minScrollX || this.x < this.maxScrollX || this.y > this.minScrollY || this.y < this.maxScrollY;
  
      return this.isInTransition || this.stopFromTransition || outsideBoundaries;
    };
  
    BScroll.prototype._checkDOMUpdate = function () {
      var scrollerRect = getRect(this.scroller);
      var oldWidth = scrollerRect.width;
      var oldHeight = scrollerRect.height;
  
      function check() {
        if (this.destroyed) {
          return;
        }
        scrollerRect = getRect(this.scroller);
        var newWidth = scrollerRect.width;
        var newHeight = scrollerRect.height;
  
        if (oldWidth !== newWidth || oldHeight !== newHeight) {
          this.refresh();
        }
        oldWidth = newWidth;
        oldHeight = newHeight;
  
        next.call(this);
      }
  
      function next() {
        var _this2 = this;
  
        setTimeout(function () {
          check.call(_this2);
        }, 1000);
      }
  
      next.call(this);
    };
  
    BScroll.prototype.handleEvent = function (e) {
      switch (e.type) {
        case 'touchstart':
        case 'mousedown':
          this._start(e);
          if (this.options.zoom && e.touches && e.touches.length > 1) {
            this._zoomStart(e);
          }
          break;
        case 'touchmove':
        case 'mousemove':
          if (this.options.zoom && e.touches && e.touches.length > 1) {
            this._zoom(e);
          } else {
            this._move(e);
          }
          break;
        case 'touchend':
        case 'mouseup':
        case 'touchcancel':
        case 'mousecancel':
          if (this.scaled) {
            this._zoomEnd(e);
          } else {
            this._end(e);
          }
          break;
        case 'orientationchange':
        case 'resize':
          this._resize();
          break;
        case 'transitionend':
        case 'webkitTransitionEnd':
        case 'oTransitionEnd':
        case 'MSTransitionEnd':
          this._transitionEnd(e);
          break;
        case 'click':
          if (this.enabled && !e._constructed) {
            if (!preventDefaultException(e.target, this.options.preventDefaultException)) {
              e.preventDefault();
              e.stopPropagation();
            }
          }
          break;
        case 'wheel':
        case 'DOMMouseScroll':
        case 'mousewheel':
          this._onMouseWheel(e);
          break;
      }
    };
  
    BScroll.prototype.refresh = function () {
      var isWrapperStatic = window.getComputedStyle(this.wrapper, null).position === 'static';
      var wrapperRect = getRect(this.wrapper);
      this.wrapperWidth = wrapperRect.width;
      this.wrapperHeight = wrapperRect.height;
  
      var scrollerRect = getRect(this.scroller);
      this.scrollerWidth = Math.round(scrollerRect.width * this.scale);
      this.scrollerHeight = Math.round(scrollerRect.height * this.scale);
  
      this.relativeX = scrollerRect.left;
      this.relativeY = scrollerRect.top;
  
      if (isWrapperStatic) {
        this.relativeX -= wrapperRect.left;
        this.relativeY -= wrapperRect.top;
      }
  
      this.minScrollX = 0;
      this.minScrollY = 0;
  
      var wheel = this.options.wheel;
      if (wheel) {
        this.items = this.scroller.children;
        this.options.itemHeight = this.itemHeight = this.items.length ? this.scrollerHeight / this.items.length : 0;
        if (this.selectedIndex === undefined) {
          this.selectedIndex = wheel.selectedIndex || 0;
        }
        this.options.startY = -this.selectedIndex * this.itemHeight;
        this.maxScrollX = 0;
        this.maxScrollY = -this.itemHeight * (this.items.length - 1);
      } else {
        this.maxScrollX = this.wrapperWidth - this.scrollerWidth;
        if (!this.options.infinity) {
          this.maxScrollY = this.wrapperHeight - this.scrollerHeight;
        }
        if (this.maxScrollX < 0) {
          this.maxScrollX -= this.relativeX;
          this.minScrollX = -this.relativeX;
        } else if (this.scale > 1) {
          this.maxScrollX = this.maxScrollX / 2 - this.relativeX;
          this.minScrollX = this.maxScrollX;
        }
        if (this.maxScrollY < 0) {
          this.maxScrollY -= this.relativeY;
          this.minScrollY = -this.relativeY;
        } else if (this.scale > 1) {
          this.maxScrollY = this.maxScrollY / 2 - this.relativeY;
          this.minScrollY = this.maxScrollY;
        }
      }
  
      this.hasHorizontalScroll = this.options.scrollX && this.maxScrollX < this.minScrollX;
      this.hasVerticalScroll = this.options.scrollY && this.maxScrollY < this.minScrollY;
  
      if (!this.hasHorizontalScroll) {
        this.maxScrollX = this.minScrollX;
        this.scrollerWidth = this.wrapperWidth;
      }
  
      if (!this.hasVerticalScroll) {
        this.maxScrollY = this.minScrollY;
        this.scrollerHeight = this.wrapperHeight;
      }
  
      this.endTime = 0;
      this.directionX = 0;
      this.directionY = 0;
      this.wrapperOffset = offset(this.wrapper);
  
      this.trigger('refresh');
  
      !this.scaled && this.resetPosition();
    };
  
    BScroll.prototype.enable = function () {
      this.enabled = true;
    };
  
    BScroll.prototype.disable = function () {
      this.enabled = false;
    };
  }
  
  var ease = {
    // easeOutQuint
    swipe: {
      style: 'cubic-bezier(0.23, 1, 0.32, 1)',
      fn: function fn(t) {
        return 1 + --t * t * t * t * t;
      }
    },
    // easeOutQuard
    swipeBounce: {
      style: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',
      fn: function fn(t) {
        return t * (2 - t);
      }
    },
    // easeOutQuart
    bounce: {
      style: 'cubic-bezier(0.165, 0.84, 0.44, 1)',
      fn: function fn(t) {
        return 1 - --t * t * t * t;
      }
    }
  };
  
  function momentum(current, start, time, lowerMargin, upperMargin, wrapperSize, options) {
    var distance = current - start;
    var speed = Math.abs(distance) / time;
  
    var deceleration = options.deceleration,
        itemHeight = options.itemHeight,
        swipeBounceTime = options.swipeBounceTime,
        wheel = options.wheel,
        swipeTime = options.swipeTime;
  
    var duration = swipeTime;
    var rate = wheel ? 4 : 15;
  
    var destination = current + speed / deceleration * (distance < 0 ? -1 : 1);
  
    if (wheel && itemHeight) {
      destination = Math.round(destination / itemHeight) * itemHeight;
    }
  
    if (destination < lowerMargin) {
      destination = wrapperSize ? Math.max(lowerMargin - wrapperSize / 4, lowerMargin - wrapperSize / rate * speed) : lowerMargin;
      duration = swipeBounceTime;
    } else if (destination > upperMargin) {
      destination = wrapperSize ? Math.min(upperMargin + wrapperSize / 4, upperMargin + wrapperSize / rate * speed) : upperMargin;
      duration = swipeBounceTime;
    }
  
    return {
      destination: Math.round(destination),
      duration: duration
    };
  }
  
  var DEFAULT_INTERVAL = 100 / 60;
  
  function noop() {}
  
  var requestAnimationFrame = function () {
    if (!inBrowser) {
      /* istanbul ignore if */
      return noop;
    }
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame ||
    // if all else fails, use setTimeout
    function (callback) {
      return window.setTimeout(callback, (callback.interval || DEFAULT_INTERVAL) / 2); // make interval as precise as possible.
    };
  }();
  
  var cancelAnimationFrame = function () {
    if (!inBrowser) {
      /* istanbul ignore if */
      return noop;
    }
    return window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || window.oCancelAnimationFrame || function (id) {
      window.clearTimeout(id);
    };
  }();
  
  var DIRECTION_UP = 1;
  var DIRECTION_DOWN = -1;
  var DIRECTION_LEFT = 1;
  var DIRECTION_RIGHT = -1;
  
  var PROBE_DEBOUNCE = 1;
  
  var PROBE_REALTIME = 3;
  
  function warn(msg) {
    console.error('[BScroll warn]: ' + msg);
  }
  
  function assert(condition, msg) {
    if (!condition) {
      throw new Error('[BScroll] ' + msg);
    }
  }
  
  function coreMixin(BScroll) {
    BScroll.prototype._start = function (e) {
      var _eventType = eventType[e.type];
      if (_eventType !== TOUCH_EVENT) {
        if (e.button !== 0) {
          return;
        }
      }
      if (!this.enabled || this.destroyed || this.initiated && this.initiated !== _eventType) {
        return;
      }
      this.initiated = _eventType;
  
      if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {
        e.preventDefault();
      }
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      this.moved = false;
      this.distX = 0;
      this.distY = 0;
      this.directionX = 0;
      this.directionY = 0;
      this.movingDirectionX = 0;
      this.movingDirectionY = 0;
      this.directionLocked = 0;
  
      this._transitionTime();
      this.startTime = getNow();
  
      if (this.options.wheel) {
        this.target = e.target;
      }
  
      this.stop();
  
      var point = e.touches ? e.touches[0] : e;
  
      this.startX = this.x;
      this.startY = this.y;
      this.absStartX = this.x;
      this.absStartY = this.y;
      this.pointX = point.pageX;
      this.pointY = point.pageY;
  
      this.trigger('beforeScrollStart');
    };
  
    BScroll.prototype._move = function (e) {
      if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {
        return;
      }
  
      if (this.options.preventDefault) {
        e.preventDefault();
      }
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      var point = e.touches ? e.touches[0] : e;
      var deltaX = point.pageX - this.pointX;
      var deltaY = point.pageY - this.pointY;
  
      this.pointX = point.pageX;
      this.pointY = point.pageY;
  
      this.distX += deltaX;
      this.distY += deltaY;
  
      var absDistX = Math.abs(this.distX);
      var absDistY = Math.abs(this.distY);
  
      var timestamp = getNow();
  
      // We need to move at least momentumLimitDistance pixels for the scrolling to initiate
      if (timestamp - this.endTime > this.options.momentumLimitTime && absDistY < this.options.momentumLimitDistance && absDistX < this.options.momentumLimitDistance) {
        return;
      }
  
      // If you are scrolling in one direction lock the other
      if (!this.directionLocked && !this.options.freeScroll) {
        if (absDistX > absDistY + this.options.directionLockThreshold) {
          this.directionLocked = 'h'; // lock horizontally
        } else if (absDistY >= absDistX + this.options.directionLockThreshold) {
          this.directionLocked = 'v'; // lock vertically
        } else {
          this.directionLocked = 'n'; // no lock
        }
      }
  
      if (this.directionLocked === 'h') {
        if (this.options.eventPassthrough === 'vertical') {
          e.preventDefault();
        } else if (this.options.eventPassthrough === 'horizontal') {
          this.initiated = false;
          return;
        }
        deltaY = 0;
      } else if (this.directionLocked === 'v') {
        if (this.options.eventPassthrough === 'horizontal') {
          e.preventDefault();
        } else if (this.options.eventPassthrough === 'vertical') {
          this.initiated = false;
          return;
        }
        deltaX = 0;
      }
  
      deltaX = this.hasHorizontalScroll ? deltaX : 0;
      deltaY = this.hasVerticalScroll ? deltaY : 0;
      this.movingDirectionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;
      this.movingDirectionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;
  
      var newX = this.x + deltaX;
      var newY = this.y + deltaY;
  
      var top = false;
      var bottom = false;
      var left = false;
      var right = false;
      // Slow down or stop if outside of the boundaries
      var bounce = this.options.bounce;
      if (bounce !== false) {
        top = bounce.top === undefined ? true : bounce.top;
        bottom = bounce.bottom === undefined ? true : bounce.bottom;
        left = bounce.left === undefined ? true : bounce.left;
        right = bounce.right === undefined ? true : bounce.right;
      }
      if (newX > this.minScrollX || newX < this.maxScrollX) {
        if (newX > this.minScrollX && left || newX < this.maxScrollX && right) {
          newX = this.x + deltaX / 3;
        } else {
          newX = newX > this.minScrollX ? this.minScrollX : this.maxScrollX;
        }
      }
      if (newY > this.minScrollY || newY < this.maxScrollY) {
        if (newY > this.minScrollY && top || newY < this.maxScrollY && bottom) {
          newY = this.y + deltaY / 3;
        } else {
          newY = newY > this.minScrollY ? this.minScrollY : this.maxScrollY;
        }
      }
  
      if (!this.moved) {
        this.moved = true;
        this.trigger('scrollStart');
      }
  
      this._translate(newX, newY);
  
      if (timestamp - this.startTime > this.options.momentumLimitTime) {
        this.startTime = timestamp;
        this.startX = this.x;
        this.startY = this.y;
  
        if (this.options.probeType === PROBE_DEBOUNCE) {
          this.trigger('scroll', {
            x: this.x,
            y: this.y
          });
        }
      }
  
      if (this.options.probeType > PROBE_DEBOUNCE) {
        this.trigger('scroll', {
          x: this.x,
          y: this.y
        });
      }
  
      var scrollLeft = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;
      var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
  
      var pX = this.pointX - scrollLeft;
      var pY = this.pointY - scrollTop;
  
      if (pX > document.documentElement.clientWidth - this.options.momentumLimitDistance || pX < this.options.momentumLimitDistance || pY < this.options.momentumLimitDistance || pY > document.documentElement.clientHeight - this.options.momentumLimitDistance) {
        this._end(e);
      }
    };
  
    BScroll.prototype._end = function (e) {
      if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {
        return;
      }
      this.initiated = false;
  
      if (this.options.preventDefault && !preventDefaultException(e.target, this.options.preventDefaultException)) {
        e.preventDefault();
      }
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      this.trigger('touchEnd', {
        x: this.x,
        y: this.y
      });
  
      this.isInTransition = false;
  
      // ensures that the last position is rounded
      var newX = Math.round(this.x);
      var newY = Math.round(this.y);
  
      var deltaX = newX - this.absStartX;
      var deltaY = newY - this.absStartY;
      this.directionX = deltaX > 0 ? DIRECTION_RIGHT : deltaX < 0 ? DIRECTION_LEFT : 0;
      this.directionY = deltaY > 0 ? DIRECTION_DOWN : deltaY < 0 ? DIRECTION_UP : 0;
  
      // if configure pull down refresh, check it first
      if (this.options.pullDownRefresh && this._checkPullDown()) {
        return;
      }
  
      // check if it is a click operation
      if (this._checkClick(e)) {
        this.trigger('scrollCancel');
        return;
      }
  
      // reset if we are outside of the boundaries
      if (this.resetPosition(this.options.bounceTime, ease.bounce)) {
        return;
      }
  
      this._translate(newX, newY);
  
      this.endTime = getNow();
      var duration = this.endTime - this.startTime;
      var absDistX = Math.abs(newX - this.startX);
      var absDistY = Math.abs(newY - this.startY);
  
      // flick
      if (this._events.flick && duration < this.options.flickLimitTime && absDistX < this.options.flickLimitDistance && absDistY < this.options.flickLimitDistance) {
        this.trigger('flick');
        return;
      }
  
      var time = 0;
      // start momentum animation if needed
      if (this.options.momentum && duration < this.options.momentumLimitTime && (absDistY > this.options.momentumLimitDistance || absDistX > this.options.momentumLimitDistance)) {
        var top = false;
        var bottom = false;
        var left = false;
        var right = false;
        var bounce = this.options.bounce;
        if (bounce !== false) {
          top = bounce.top === undefined ? true : bounce.top;
          bottom = bounce.bottom === undefined ? true : bounce.bottom;
          left = bounce.left === undefined ? true : bounce.left;
          right = bounce.right === undefined ? true : bounce.right;
        }
        var wrapperWidth = this.directionX === DIRECTION_RIGHT && left || this.directionX === DIRECTION_LEFT && right ? this.wrapperWidth : 0;
        var wrapperHeight = this.directionY === DIRECTION_DOWN && top || this.directionY === DIRECTION_UP && bottom ? this.wrapperHeight : 0;
        var momentumX = this.hasHorizontalScroll ? momentum(this.x, this.startX, duration, this.maxScrollX, this.minScrollX, wrapperWidth, this.options) : { destination: newX, duration: 0 };
        var momentumY = this.hasVerticalScroll ? momentum(this.y, this.startY, duration, this.maxScrollY, this.minScrollY, wrapperHeight, this.options) : { destination: newY, duration: 0 };
        newX = momentumX.destination;
        newY = momentumY.destination;
        time = Math.max(momentumX.duration, momentumY.duration);
        this.isInTransition = true;
      } else {
        if (this.options.wheel) {
          newY = Math.round(newY / this.itemHeight) * this.itemHeight;
          time = this.options.wheel.adjustTime || 400;
        }
      }
  
      var easing = ease.swipe;
      if (this.options.snap) {
        var snap = this._nearestSnap(newX, newY);
        this.currentPage = snap;
        time = this.options.snapSpeed || Math.max(Math.max(Math.min(Math.abs(newX - snap.x), 1000), Math.min(Math.abs(newY - snap.y), 1000)), 300);
        newX = snap.x;
        newY = snap.y;
  
        this.directionX = 0;
        this.directionY = 0;
        easing = this.options.snap.easing || ease.bounce;
      }
  
      if (newX !== this.x || newY !== this.y) {
        // change easing function when scroller goes out of the boundaries
        if (newX > this.minScrollX || newX < this.maxScrollX || newY > this.minScrollY || newY < this.maxScrollY) {
          easing = ease.swipeBounce;
        }
        this.scrollTo(newX, newY, time, easing);
        return;
      }
  
      if (this.options.wheel) {
        this.selectedIndex = Math.round(Math.abs(this.y / this.itemHeight));
      }
      this.trigger('scrollEnd', {
        x: this.x,
        y: this.y
      });
    };
  
    BScroll.prototype._checkClick = function (e) {
      // when in the process of pulling down, it should not prevent click
      var preventClick = this.stopFromTransition && !this.pulling;
      this.stopFromTransition = false;
  
      // we scrolled less than 15 pixels
      if (!this.moved) {
        if (this.options.wheel) {
          if (this.target && this.target.classList.contains(this.options.wheel.wheelWrapperClass)) {
            var index = Math.abs(Math.round(this.y / this.itemHeight));
            var _offset = Math.round((this.pointY + offsetToBody(this.wrapper).top - this.wrapperHeight / 2) / this.itemHeight);
            this.target = this.items[index + _offset];
          }
          this.scrollToElement(this.target, this.options.wheel.adjustTime || 400, true, true, ease.swipe);
          return true;
        } else {
          if (!preventClick) {
            var _dblclick = this.options.dblclick;
            var dblclickTrigged = false;
            if (_dblclick && this.lastClickTime) {
              var _dblclick$delay = _dblclick.delay,
                  delay = _dblclick$delay === undefined ? 300 : _dblclick$delay;
  
              if (getNow() - this.lastClickTime < delay) {
                dblclickTrigged = true;
                dblclick(e);
              }
            }
            if (this.options.tap) {
              tap(e, this.options.tap);
            }
  
            if (this.options.click && !preventDefaultException(e.target, this.options.preventDefaultException)) {
              click(e);
            }
            this.lastClickTime = dblclickTrigged ? null : getNow();
            return true;
          }
          return false;
        }
      }
      return false;
    };
  
    BScroll.prototype._resize = function () {
      var _this = this;
  
      if (!this.enabled) {
        return;
      }
      // fix a scroll problem under Android condition
      if (isAndroid) {
        this.wrapper.scrollTop = 0;
      }
      clearTimeout(this.resizeTimeout);
      this.resizeTimeout = setTimeout(function () {
        _this.refresh();
      }, this.options.resizePolling);
    };
  
    BScroll.prototype._startProbe = function () {
      cancelAnimationFrame(this.probeTimer);
      this.probeTimer = requestAnimationFrame(probe);
  
      var me = this;
  
      function probe() {
        var pos = me.getComputedPosition();
        me.trigger('scroll', pos);
        if (!me.isInTransition) {
          me.trigger('scrollEnd', pos);
          return;
        }
        me.probeTimer = requestAnimationFrame(probe);
      }
    };
  
    BScroll.prototype._transitionTime = function () {
      var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  
      this.scrollerStyle[style.transitionDuration] = time + 'ms';
  
      if (this.options.wheel) {
        for (var i = 0; i < this.items.length; i++) {
          this.items[i].style[style.transitionDuration] = time + 'ms';
        }
      }
  
      if (this.indicators) {
        for (var _i = 0; _i < this.indicators.length; _i++) {
          this.indicators[_i].transitionTime(time);
        }
      }
    };
  
    BScroll.prototype._transitionTimingFunction = function (easing) {
      this.scrollerStyle[style.transitionTimingFunction] = easing;
  
      if (this.options.wheel) {
        for (var i = 0; i < this.items.length; i++) {
          this.items[i].style[style.transitionTimingFunction] = easing;
        }
      }
  
      if (this.indicators) {
        for (var _i2 = 0; _i2 < this.indicators.length; _i2++) {
          this.indicators[_i2].transitionTimingFunction(easing);
        }
      }
    };
  
    BScroll.prototype._transitionEnd = function (e) {
      if (e.target !== this.scroller || !this.isInTransition) {
        return;
      }
  
      this._transitionTime();
      var needReset = !this.pulling || this.movingDirectionY === DIRECTION_UP;
      if (needReset && !this.resetPosition(this.options.bounceTime, ease.bounce)) {
        this.isInTransition = false;
        if (this.options.probeType !== PROBE_REALTIME) {
          this.trigger('scrollEnd', {
            x: this.x,
            y: this.y
          });
        }
      }
    };
  
    BScroll.prototype._translate = function (x, y, scale) {
      assert(!isUndef(x) && !isUndef(y), 'Translate x or y is null or undefined.');
      if (isUndef(scale)) {
        scale = this.scale;
      }
      if (this.options.useTransform) {
        this.scrollerStyle[style.transform] = 'translate(' + x + 'px,' + y + 'px) scale(' + scale + ')' + this.translateZ;
      } else {
        x = Math.round(x);
        y = Math.round(y);
        this.scrollerStyle.left = x + 'px';
        this.scrollerStyle.top = y + 'px';
      }
  
      if (this.options.wheel) {
        var _options$wheel$rotate = this.options.wheel.rotate,
            rotate = _options$wheel$rotate === undefined ? 25 : _options$wheel$rotate;
  
        for (var i = 0; i < this.items.length; i++) {
          var deg = rotate * (y / this.itemHeight + i);
          this.items[i].style[style.transform] = 'rotateX(' + deg + 'deg)';
        }
      }
  
      this.x = x;
      this.y = y;
      this.setScale(scale);
  
      if (this.indicators) {
        for (var _i3 = 0; _i3 < this.indicators.length; _i3++) {
          this.indicators[_i3].updatePosition();
        }
      }
    };
  
    BScroll.prototype._animate = function (destX, destY, duration, easingFn) {
      var me = this;
      var startX = this.x;
      var startY = this.y;
      var startScale = this.lastScale;
      var destScale = this.scale;
      var startTime = getNow();
      var destTime = startTime + duration;
  
      function step() {
        var now = getNow();
  
        if (now >= destTime) {
          me.isAnimating = false;
          me._translate(destX, destY, destScale);
  
          me.trigger('scroll', {
            x: me.x,
            y: me.y
          });
  
          if (!me.pulling && !me.resetPosition(me.options.bounceTime)) {
            me.trigger('scrollEnd', {
              x: me.x,
              y: me.y
            });
          }
          return;
        }
        now = (now - startTime) / duration;
        var easing = easingFn(now);
        var newX = (destX - startX) * easing + startX;
        var newY = (destY - startY) * easing + startY;
        var newScale = (destScale - startScale) * easing + startScale;
  
        me._translate(newX, newY, newScale);
  
        if (me.isAnimating) {
          me.animateTimer = requestAnimationFrame(step);
        }
  
        if (me.options.probeType === PROBE_REALTIME) {
          me.trigger('scroll', {
            x: me.x,
            y: me.y
          });
        }
      }
  
      this.isAnimating = true;
      cancelAnimationFrame(this.animateTimer);
      step();
    };
  
    BScroll.prototype.scrollBy = function (x, y) {
      var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
      var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;
  
      x = this.x + x;
      y = this.y + y;
  
      this.scrollTo(x, y, time, easing);
    };
  
    BScroll.prototype.scrollTo = function (x, y) {
      var time = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
      var easing = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ease.bounce;
  
      this.isInTransition = this.options.useTransition && time > 0 && (x !== this.x || y !== this.y);
  
      if (!time || this.options.useTransition) {
        this._transitionTimingFunction(easing.style);
        this._transitionTime(time);
        this._translate(x, y);
  
        if (time && this.options.probeType === PROBE_REALTIME) {
          this._startProbe();
        }
  
        if (!time && (x !== this.x || y !== this.y)) {
          this.trigger('scroll', {
            x: x,
            y: y
          });
          // force reflow to put everything in position
          this._reflow = document.body.offsetHeight;
          if (!this.resetPosition(this.options.bounceTime, ease.bounce)) {
            this.trigger('scrollEnd', {
              x: x,
              y: y
            });
          }
        }
  
        if (this.options.wheel) {
          if (y > this.minScrollY) {
            this.selectedIndex = 0;
          } else if (y < this.maxScrollY) {
            this.selectedIndex = this.items.length - 1;
          } else {
            this.selectedIndex = Math.round(Math.abs(y / this.itemHeight));
          }
        }
      } else {
        this._animate(x, y, time, easing.fn);
      }
    };
  
    BScroll.prototype.scrollToElement = function (el, time, offsetX, offsetY, easing) {
      if (!el) {
        return;
      }
      el = el.nodeType ? el : this.scroller.querySelector(el);
  
      if (this.options.wheel && !el.classList.contains(this.options.wheel.wheelItemClass)) {
        return;
      }
  
      var pos = offset(el);
      pos.left -= this.wrapperOffset.left;
      pos.top -= this.wrapperOffset.top;
  
      // if offsetX/Y are true we center the element to the screen
      if (offsetX === true) {
        offsetX = Math.round(el.offsetWidth / 2 - this.wrapper.offsetWidth / 2);
      }
      if (offsetY === true) {
        offsetY = Math.round(el.offsetHeight / 2 - this.wrapper.offsetHeight / 2);
      }
  
      pos.left -= offsetX || 0;
      pos.top -= offsetY || 0;
      pos.left = pos.left > this.minScrollX ? this.minScrollX : pos.left < this.maxScrollX ? this.maxScrollX : pos.left;
      pos.top = pos.top > this.minScrollY ? this.minScrollY : pos.top < this.maxScrollY ? this.maxScrollY : pos.top;
  
      if (this.options.wheel) {
        pos.top = Math.round(pos.top / this.itemHeight) * this.itemHeight;
      }
  
      this.scrollTo(pos.left, pos.top, time, easing);
    };
  
    BScroll.prototype.resetPosition = function () {
      var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
      var easeing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ease.bounce;
  
      var x = this.x;
      var roundX = Math.round(x);
      if (!this.hasHorizontalScroll || roundX > this.minScrollX) {
        x = this.minScrollX;
      } else if (roundX < this.maxScrollX) {
        x = this.maxScrollX;
      }
  
      var y = this.y;
      var roundY = Math.round(y);
      if (!this.hasVerticalScroll || roundY > this.minScrollY) {
        y = this.minScrollY;
      } else if (roundY < this.maxScrollY) {
        y = this.maxScrollY;
      }
  
      if (x === this.x && y === this.y) {
        return false;
      }
  
      this.scrollTo(x, y, time, easeing);
  
      return true;
    };
  
    BScroll.prototype.getComputedPosition = function () {
      var matrix = window.getComputedStyle(this.scroller, null);
      var x = void 0;
      var y = void 0;
  
      if (this.options.useTransform) {
        matrix = matrix[style.transform].split(')')[0].split(', ');
        x = +(matrix[12] || matrix[4]);
        y = +(matrix[13] || matrix[5]);
      } else {
        x = +matrix.left.replace(/[^-\d.]/g, '');
        y = +matrix.top.replace(/[^-\d.]/g, '');
      }
  
      return {
        x: x,
        y: y
      };
    };
  
    BScroll.prototype.stop = function () {
      if (this.options.useTransition && this.isInTransition) {
        this.isInTransition = false;
        cancelAnimationFrame(this.probeTimer);
        var pos = this.getComputedPosition();
        this._translate(pos.x, pos.y);
        if (this.options.wheel) {
          this.target = this.items[Math.round(-pos.y / this.itemHeight)];
        } else {
          this.trigger('scrollEnd', {
            x: this.x,
            y: this.y
          });
        }
        this.stopFromTransition = true;
      } else if (!this.options.useTransition && this.isAnimating) {
        this.isAnimating = false;
        cancelAnimationFrame(this.animateTimer);
        this.trigger('scrollEnd', {
          x: this.x,
          y: this.y
        });
        this.stopFromTransition = true;
      }
    };
  
    BScroll.prototype.destroy = function () {
      this.destroyed = true;
      this.trigger('destroy');
      if (this.options.useTransition) {
        cancelAnimationFrame(this.probeTimer);
      } else {
        cancelAnimationFrame(this.animateTimer);
      }
      this._removeDOMEvents();
      // remove custom events
      this._events = {};
    };
  }
  
  function snapMixin(BScroll) {
    BScroll.prototype._initSnap = function () {
      var _this = this;
  
      this.currentPage = {};
      var snap = this.options.snap;
  
      if (snap.loop) {
        var children = this.scroller.children;
        if (children.length > 1) {
          prepend(children[children.length - 1].cloneNode(true), this.scroller);
          this.scroller.appendChild(children[1].cloneNode(true));
        } else {
          // Loop does not make any sense if there is only one child.
          snap.loop = false;
        }
      }
  
      var el = snap.el;
      if (typeof el === 'string') {
        el = this.scroller.querySelectorAll(el);
      }
  
      this.on('refresh', function () {
        _this.pages = [];
  
        if (!_this.wrapperWidth || !_this.wrapperHeight || !_this.scrollerWidth || !_this.scrollerHeight) {
          return;
        }
  
        var stepX = snap.stepX || _this.wrapperWidth;
        var stepY = snap.stepY || _this.wrapperHeight;
  
        var x = 0;
        var y = void 0;
        var cx = void 0;
        var cy = void 0;
        var i = 0;
        var l = void 0;
        var m = 0;
        var n = void 0;
        var rect = void 0;
        if (!el) {
          cx = Math.round(stepX / 2);
          cy = Math.round(stepY / 2);
  
          while (x > -_this.scrollerWidth) {
            _this.pages[i] = [];
            l = 0;
            y = 0;
  
            while (y > -_this.scrollerHeight) {
              _this.pages[i][l] = {
                x: Math.max(x, _this.maxScrollX),
                y: Math.max(y, _this.maxScrollY),
                width: stepX,
                height: stepY,
                cx: x - cx,
                cy: y - cy
              };
  
              y -= stepY;
              l++;
            }
  
            x -= stepX;
            i++;
          }
        } else {
          l = el.length;
          n = -1;
  
          for (; i < l; i++) {
            rect = getRect(el[i]);
            if (i === 0 || rect.left <= getRect(el[i - 1]).left) {
              m = 0;
              n++;
            }
  
            if (!_this.pages[m]) {
              _this.pages[m] = [];
            }
  
            x = Math.max(-rect.left, _this.maxScrollX);
            y = Math.max(-rect.top, _this.maxScrollY);
            cx = x - Math.round(rect.width / 2);
            cy = y - Math.round(rect.height / 2);
  
            _this.pages[m][n] = {
              x: x,
              y: y,
              width: rect.width,
              height: rect.height,
              cx: cx,
              cy: cy
            };
  
            if (x > _this.maxScrollX) {
              m++;
            }
          }
        }
  
        _this._checkSnapLoop();
  
        var initPageX = snap._loopX ? 1 : 0;
        var initPageY = snap._loopY ? 1 : 0;
        _this._goToPage(_this.currentPage.pageX || initPageX, _this.currentPage.pageY || initPageY, 0);
  
        // Update snap threshold if needed.
        var snapThreshold = snap.threshold;
        if (snapThreshold % 1 === 0) {
          _this.snapThresholdX = snapThreshold;
          _this.snapThresholdY = snapThreshold;
        } else {
          _this.snapThresholdX = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].width * snapThreshold);
          _this.snapThresholdY = Math.round(_this.pages[_this.currentPage.pageX][_this.currentPage.pageY].height * snapThreshold);
        }
      });
  
      this.on('scrollEnd', function () {
        if (snap.loop) {
          if (snap._loopX) {
            if (_this.currentPage.pageX === 0) {
              _this._goToPage(_this.pages.length - 2, _this.currentPage.pageY, 0);
            }
            if (_this.currentPage.pageX === _this.pages.length - 1) {
              _this._goToPage(1, _this.currentPage.pageY, 0);
            }
          } else {
            if (_this.currentPage.pageY === 0) {
              _this._goToPage(_this.currentPage.pageX, _this.pages[0].length - 2, 0);
            }
            if (_this.currentPage.pageY === _this.pages[0].length - 1) {
              _this._goToPage(_this.currentPage.pageX, 1, 0);
            }
          }
        }
      });
  
      if (snap.listenFlick !== false) {
        this.on('flick', function () {
          var time = snap.speed || Math.max(Math.max(Math.min(Math.abs(_this.x - _this.startX), 1000), Math.min(Math.abs(_this.y - _this.startY), 1000)), 300);
  
          _this._goToPage(_this.currentPage.pageX + _this.directionX, _this.currentPage.pageY + _this.directionY, time);
        });
      }
  
      this.on('destroy', function () {
        if (snap.loop) {
          var _children = _this.scroller.children;
          if (_children.length > 2) {
            removeChild(_this.scroller, _children[_children.length - 1]);
            removeChild(_this.scroller, _children[0]);
          }
        }
      });
    };
  
    BScroll.prototype._checkSnapLoop = function () {
      var snap = this.options.snap;
  
      if (!snap.loop || !this.pages || !this.pages.length) {
        return;
      }
  
      if (this.pages.length > 1) {
        snap._loopX = true;
      }
      if (this.pages[0] && this.pages[0].length > 1) {
        snap._loopY = true;
      }
      if (snap._loopX && snap._loopY) {
        warn('Loop does not support two direction at the same time.');
      }
    };
  
    BScroll.prototype._nearestSnap = function (x, y) {
      if (!this.pages.length) {
        return { x: 0, y: 0, pageX: 0, pageY: 0 };
      }
  
      var i = 0;
      // Check if we exceeded the snap threshold
      if (Math.abs(x - this.absStartX) <= this.snapThresholdX && Math.abs(y - this.absStartY) <= this.snapThresholdY) {
        return this.currentPage;
      }
  
      if (x > this.minScrollX) {
        x = this.minScrollX;
      } else if (x < this.maxScrollX) {
        x = this.maxScrollX;
      }
  
      if (y > this.minScrollY) {
        y = this.minScrollY;
      } else if (y < this.maxScrollY) {
        y = this.maxScrollY;
      }
  
      var l = this.pages.length;
      for (; i < l; i++) {
        if (x >= this.pages[i][0].cx) {
          x = this.pages[i][0].x;
          break;
        }
      }
  
      l = this.pages[i].length;
  
      var m = 0;
      for (; m < l; m++) {
        if (y >= this.pages[0][m].cy) {
          y = this.pages[0][m].y;
          break;
        }
      }
  
      if (i === this.currentPage.pageX) {
        i += this.directionX;
  
        if (i < 0) {
          i = 0;
        } else if (i >= this.pages.length) {
          i = this.pages.length - 1;
        }
  
        x = this.pages[i][0].x;
      }
  
      if (m === this.currentPage.pageY) {
        m += this.directionY;
  
        if (m < 0) {
          m = 0;
        } else if (m >= this.pages[0].length) {
          m = this.pages[0].length - 1;
        }
  
        y = this.pages[0][m].y;
      }
  
      return {
        x: x,
        y: y,
        pageX: i,
        pageY: m
      };
    };
  
    BScroll.prototype._goToPage = function (x) {
      var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
      var time = arguments[2];
      var easing = arguments[3];
  
      var snap = this.options.snap;
  
      if (!snap || !this.pages || !this.pages.length) {
        return;
      }
  
      easing = easing || snap.easing || ease.bounce;
  
      if (x >= this.pages.length) {
        x = this.pages.length - 1;
      } else if (x < 0) {
        x = 0;
      }
  
      if (!this.pages[x]) {
        return;
      }
  
      if (y >= this.pages[x].length) {
        y = this.pages[x].length - 1;
      } else if (y < 0) {
        y = 0;
      }
  
      var posX = this.pages[x][y].x;
      var posY = this.pages[x][y].y;
  
      time = time === undefined ? snap.speed || Math.max(Math.max(Math.min(Math.abs(posX - this.x), 1000), Math.min(Math.abs(posY - this.y), 1000)), 300) : time;
  
      this.currentPage = {
        x: posX,
        y: posY,
        pageX: x,
        pageY: y
      };
      this.scrollTo(posX, posY, time, easing);
    };
  
    BScroll.prototype.goToPage = function (x, y, time, easing) {
      var snap = this.options.snap;
      if (!snap || !this.pages || !this.pages.length) {
        return;
      }
  
      if (snap.loop) {
        var len = void 0;
        if (snap._loopX) {
          len = this.pages.length - 2;
          if (x >= len) {
            x = len - 1;
          } else if (x < 0) {
            x = 0;
          }
          x += 1;
        } else {
          len = this.pages[0].length - 2;
          if (y >= len) {
            y = len - 1;
          } else if (y < 0) {
            y = 0;
          }
          y += 1;
        }
      }
      this._goToPage(x, y, time, easing);
    };
  
    BScroll.prototype.next = function (time, easing) {
      var snap = this.options.snap;
      if (!snap) {
        return;
      }
  
      var x = this.currentPage.pageX;
      var y = this.currentPage.pageY;
  
      x++;
      if (x >= this.pages.length && this.hasVerticalScroll) {
        x = 0;
        y++;
      }
  
      this._goToPage(x, y, time, easing);
    };
  
    BScroll.prototype.prev = function (time, easing) {
      var snap = this.options.snap;
      if (!snap) {
        return;
      }
  
      var x = this.currentPage.pageX;
      var y = this.currentPage.pageY;
  
      x--;
      if (x < 0 && this.hasVerticalScroll) {
        x = 0;
        y--;
      }
  
      this._goToPage(x, y, time, easing);
    };
  
    BScroll.prototype.getCurrentPage = function () {
      var snap = this.options.snap;
      if (!snap) {
        return null;
      }
  
      if (snap.loop) {
        var currentPage = void 0;
        if (snap._loopX) {
          currentPage = extend({}, this.currentPage, {
            pageX: this.currentPage.pageX - 1
          });
        } else {
          currentPage = extend({}, this.currentPage, {
            pageY: this.currentPage.pageY - 1
          });
        }
        return currentPage;
      }
      return this.currentPage;
    };
  }
  
  function wheelMixin(BScroll) {
    BScroll.prototype.wheelTo = function () {
      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  
      if (this.options.wheel) {
        this.y = -index * this.itemHeight;
        this.scrollTo(0, this.y);
      }
    };
  
    BScroll.prototype.getSelectedIndex = function () {
      return this.options.wheel && this.selectedIndex;
    };
  
    BScroll.prototype._initWheel = function () {
      var wheel = this.options.wheel;
      if (!wheel.wheelWrapperClass) {
        wheel.wheelWrapperClass = 'wheel-scroll';
      }
      if (!wheel.wheelItemClass) {
        wheel.wheelItemClass = 'wheel-item';
      }
      if (wheel.selectedIndex === undefined) {
        wheel.selectedIndex = 0;
        warn('wheel option selectedIndex is required!');
      }
    };
  }
  
  var INDICATOR_MIN_LEN = 8;
  
  function scrollbarMixin(BScroll) {
    BScroll.prototype._initScrollbar = function () {
      var _this = this;
  
      var _options$scrollbar = this.options.scrollbar,
          _options$scrollbar$fa = _options$scrollbar.fade,
          fade = _options$scrollbar$fa === undefined ? true : _options$scrollbar$fa,
          _options$scrollbar$in = _options$scrollbar.interactive,
          interactive = _options$scrollbar$in === undefined ? false : _options$scrollbar$in;
  
      this.indicators = [];
      var indicator = void 0;
  
      if (this.options.scrollX) {
        indicator = {
          el: createScrollbar('horizontal'),
          direction: 'horizontal',
          fade: fade,
          interactive: interactive
        };
        this._insertScrollBar(indicator.el);
  
        this.indicators.push(new Indicator(this, indicator));
      }
  
      if (this.options.scrollY) {
        indicator = {
          el: createScrollbar('vertical'),
          direction: 'vertical',
          fade: fade,
          interactive: interactive
        };
        this._insertScrollBar(indicator.el);
        this.indicators.push(new Indicator(this, indicator));
      }
  
      this.on('refresh', function () {
        for (var i = 0; i < _this.indicators.length; i++) {
          _this.indicators[i].refresh();
        }
      });
  
      if (fade) {
        this.on('scrollEnd', function () {
          for (var i = 0; i < _this.indicators.length; i++) {
            _this.indicators[i].fade();
          }
        });
  
        this.on('scrollCancel', function () {
          for (var i = 0; i < _this.indicators.length; i++) {
            _this.indicators[i].fade();
          }
        });
  
        this.on('scrollStart', function () {
          for (var i = 0; i < _this.indicators.length; i++) {
            _this.indicators[i].fade(true);
          }
        });
  
        this.on('beforeScrollStart', function () {
          for (var i = 0; i < _this.indicators.length; i++) {
            _this.indicators[i].fade(true, true);
          }
        });
      }
  
      this.on('destroy', function () {
        _this._removeScrollBars();
      });
    };
  
    BScroll.prototype._insertScrollBar = function (scrollbar) {
      this.wrapper.appendChild(scrollbar);
    };
  
    BScroll.prototype._removeScrollBars = function () {
      for (var i = 0; i < this.indicators.length; i++) {
        this.indicators[i].destroy();
      }
    };
  }
  
  function createScrollbar(direction) {
    var scrollbar = document.createElement('div');
    var indicator = document.createElement('div');
  
    scrollbar.style.cssText = 'position:absolute;z-index:9999;pointerEvents:none';
    indicator.style.cssText = 'box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;';
  
    indicator.className = 'bscroll-indicator';
  
    if (direction === 'horizontal') {
      scrollbar.style.cssText += ';height:7px;left:2px;right:2px;bottom:0';
      indicator.style.height = '100%';
      scrollbar.className = 'bscroll-horizontal-scrollbar';
    } else {
      scrollbar.style.cssText += ';width:7px;bottom:2px;top:2px;right:1px';
      indicator.style.width = '100%';
      scrollbar.className = 'bscroll-vertical-scrollbar';
    }
  
    scrollbar.style.cssText += ';overflow:hidden';
    scrollbar.appendChild(indicator);
  
    return scrollbar;
  }
  
  function Indicator(scroller, options) {
    this.wrapper = options.el;
    this.wrapperStyle = this.wrapper.style;
    this.indicator = this.wrapper.children[0];
    this.indicatorStyle = this.indicator.style;
    this.scroller = scroller;
    this.direction = options.direction;
    if (options.fade) {
      this.visible = 0;
      this.wrapperStyle.opacity = '0';
    } else {
      this.visible = 1;
    }
  
    this.sizeRatioX = 1;
    this.sizeRatioY = 1;
    this.maxPosX = 0;
    this.maxPosY = 0;
    this.x = 0;
    this.y = 0;
  
    if (options.interactive) {
      this._addDOMEvents();
    }
  }
  
  Indicator.prototype.handleEvent = function (e) {
    switch (e.type) {
      case 'touchstart':
      case 'mousedown':
        this._start(e);
        break;
      case 'touchmove':
      case 'mousemove':
        this._move(e);
        break;
      case 'touchend':
      case 'mouseup':
      case 'touchcancel':
      case 'mousecancel':
        this._end(e);
        break;
    }
  };
  
  Indicator.prototype.refresh = function () {
    if (this._shouldShow()) {
      this.transitionTime();
      this._calculate();
      this.updatePosition();
    }
  };
  
  Indicator.prototype.fade = function (visible, hold) {
    var _this2 = this;
  
    if (hold && !this.visible) {
      return;
    }
  
    var time = visible ? 250 : 500;
  
    visible = visible ? '1' : '0';
  
    this.wrapperStyle[style.transitionDuration] = time + 'ms';
  
    clearTimeout(this.fadeTimeout);
    this.fadeTimeout = setTimeout(function () {
      _this2.wrapperStyle.opacity = visible;
      _this2.visible = +visible;
    }, 0);
  };
  
  Indicator.prototype.updatePosition = function () {
    if (this.direction === 'vertical') {
      var y = Math.round(this.sizeRatioY * this.scroller.y);
  
      if (y < 0) {
        this.transitionTime(500);
        var height = Math.max(this.indicatorHeight + y * 3, INDICATOR_MIN_LEN);
        this.indicatorStyle.height = height + 'px';
        y = 0;
      } else if (y > this.maxPosY) {
        this.transitionTime(500);
        var _height = Math.max(this.indicatorHeight - (y - this.maxPosY) * 3, INDICATOR_MIN_LEN);
        this.indicatorStyle.height = _height + 'px';
        y = this.maxPosY + this.indicatorHeight - _height;
      } else {
        this.indicatorStyle.height = this.indicatorHeight + 'px';
      }
      this.y = y;
  
      if (this.scroller.options.useTransform) {
        this.indicatorStyle[style.transform] = 'translateY(' + y + 'px)' + this.scroller.translateZ;
      } else {
        this.indicatorStyle.top = y + 'px';
      }
    } else {
      var x = Math.round(this.sizeRatioX * this.scroller.x);
  
      if (x < 0) {
        this.transitionTime(500);
        var width = Math.max(this.indicatorWidth + x * 3, INDICATOR_MIN_LEN);
        this.indicatorStyle.width = width + 'px';
        x = 0;
      } else if (x > this.maxPosX) {
        this.transitionTime(500);
        var _width = Math.max(this.indicatorWidth - (x - this.maxPosX) * 3, INDICATOR_MIN_LEN);
        this.indicatorStyle.width = _width + 'px';
        x = this.maxPosX + this.indicatorWidth - _width;
      } else {
        this.indicatorStyle.width = this.indicatorWidth + 'px';
      }
  
      this.x = x;
  
      if (this.scroller.options.useTransform) {
        this.indicatorStyle[style.transform] = 'translateX(' + x + 'px)' + this.scroller.translateZ;
      } else {
        this.indicatorStyle.left = x + 'px';
      }
    }
  };
  
  Indicator.prototype.transitionTime = function () {
    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  
    this.indicatorStyle[style.transitionDuration] = time + 'ms';
  };
  
  Indicator.prototype.transitionTimingFunction = function (easing) {
    this.indicatorStyle[style.transitionTimingFunction] = easing;
  };
  
  Indicator.prototype.destroy = function () {
    this._removeDOMEvents();
    this.wrapper.parentNode.removeChild(this.wrapper);
  };
  
  Indicator.prototype._start = function (e) {
    var point = e.touches ? e.touches[0] : e;
  
    e.preventDefault();
    e.stopPropagation();
  
    this.transitionTime();
  
    this.initiated = true;
    this.moved = false;
    this.lastPointX = point.pageX;
    this.lastPointY = point.pageY;
  
    this.startTime = getNow();
  
    this._handleMoveEvents(addEvent);
    this.scroller.trigger('beforeScrollStart');
  };
  
  Indicator.prototype._move = function (e) {
    var point = e.touches ? e.touches[0] : e;
  
    e.preventDefault();
    e.stopPropagation();
  
    if (!this.moved) {
      this.scroller.trigger('scrollStart');
    }
  
    this.moved = true;
  
    var deltaX = point.pageX - this.lastPointX;
    this.lastPointX = point.pageX;
  
    var deltaY = point.pageY - this.lastPointY;
    this.lastPointY = point.pageY;
  
    var newX = this.x + deltaX;
    var newY = this.y + deltaY;
  
    this._pos(newX, newY);
  };
  
  Indicator.prototype._end = function (e) {
    if (!this.initiated) {
      return;
    }
    this.initiated = false;
  
    e.preventDefault();
    e.stopPropagation();
  
    this._handleMoveEvents(removeEvent);
  
    var snapOption = this.scroller.options.snap;
    if (snapOption) {
      var speed = snapOption.speed,
          _snapOption$easing = snapOption.easing,
          easing = _snapOption$easing === undefined ? ease.bounce : _snapOption$easing;
  
      var snap = this.scroller._nearestSnap(this.scroller.x, this.scroller.y);
  
      var time = speed || Math.max(Math.max(Math.min(Math.abs(this.scroller.x - snap.x), 1000), Math.min(Math.abs(this.scroller.y - snap.y), 1000)), 300);
  
      if (this.scroller.x !== snap.x || this.scroller.y !== snap.y) {
        this.scroller.directionX = 0;
        this.scroller.directionY = 0;
        this.scroller.currentPage = snap;
        this.scroller.scrollTo(snap.x, snap.y, time, easing);
      }
    }
  
    if (this.moved) {
      this.scroller.trigger('scrollEnd', {
        x: this.scroller.x,
        y: this.scroller.y
      });
    }
  };
  
  Indicator.prototype._pos = function (x, y) {
    if (x < 0) {
      x = 0;
    } else if (x > this.maxPosX) {
      x = this.maxPosX;
    }
  
    if (y < 0) {
      y = 0;
    } else if (y > this.maxPosY) {
      y = this.maxPosY;
    }
  
    x = Math.round(x / this.sizeRatioX);
    y = Math.round(y / this.sizeRatioY);
  
    this.scroller.scrollTo(x, y);
    this.scroller.trigger('scroll', {
      x: this.scroller.x,
      y: this.scroller.y
    });
  };
  
  Indicator.prototype._shouldShow = function () {
    if (this.direction === 'vertical' && this.scroller.hasVerticalScroll || this.direction === 'horizontal' && this.scroller.hasHorizontalScroll) {
      this.wrapper.style.display = '';
      return true;
    }
    this.wrapper.style.display = 'none';
    return false;
  };
  
  Indicator.prototype._calculate = function () {
    if (this.direction === 'vertical') {
      var wrapperHeight = this.wrapper.clientHeight;
      this.indicatorHeight = Math.max(Math.round(wrapperHeight * wrapperHeight / (this.scroller.scrollerHeight || wrapperHeight || 1)), INDICATOR_MIN_LEN);
      this.indicatorStyle.height = this.indicatorHeight + 'px';
  
      this.maxPosY = wrapperHeight - this.indicatorHeight;
  
      this.sizeRatioY = this.maxPosY / this.scroller.maxScrollY;
    } else {
      var wrapperWidth = this.wrapper.clientWidth;
      this.indicatorWidth = Math.max(Math.round(wrapperWidth * wrapperWidth / (this.scroller.scrollerWidth || wrapperWidth || 1)), INDICATOR_MIN_LEN);
      this.indicatorStyle.width = this.indicatorWidth + 'px';
  
      this.maxPosX = wrapperWidth - this.indicatorWidth;
  
      this.sizeRatioX = this.maxPosX / this.scroller.maxScrollX;
    }
  };
  
  Indicator.prototype._addDOMEvents = function () {
    var eventOperation = addEvent;
    this._handleDOMEvents(eventOperation);
  };
  
  Indicator.prototype._removeDOMEvents = function () {
    var eventOperation = removeEvent;
    this._handleDOMEvents(eventOperation);
    this._handleMoveEvents(eventOperation);
  };
  
  Indicator.prototype._handleMoveEvents = function (eventOperation) {
    if (!this.scroller.options.disableTouch) {
      eventOperation(window, 'touchmove', this);
    }
    if (!this.scroller.options.disableMouse) {
      eventOperation(window, 'mousemove', this);
    }
  };
  
  Indicator.prototype._handleDOMEvents = function (eventOperation) {
    if (!this.scroller.options.disableTouch) {
      eventOperation(this.indicator, 'touchstart', this);
      eventOperation(window, 'touchend', this);
    }
    if (!this.scroller.options.disableMouse) {
      eventOperation(this.indicator, 'mousedown', this);
      eventOperation(window, 'mouseup', this);
    }
  };
  
  function pullDownMixin(BScroll) {
    BScroll.prototype._initPullDown = function () {
      // must watch scroll in real time
      this.options.probeType = PROBE_REALTIME;
    };
  
    BScroll.prototype._checkPullDown = function () {
      var _options$pullDownRefr = this.options.pullDownRefresh,
          _options$pullDownRefr2 = _options$pullDownRefr.threshold,
          threshold = _options$pullDownRefr2 === undefined ? 90 : _options$pullDownRefr2,
          _options$pullDownRefr3 = _options$pullDownRefr.stop,
          stop = _options$pullDownRefr3 === undefined ? 40 : _options$pullDownRefr3;
  
      // check if a real pull down action
  
      if (this.directionY !== DIRECTION_DOWN || this.y < threshold) {
        return false;
      }
  
      if (!this.pulling) {
        this.pulling = true;
        this.trigger('pullingDown');
      }
      this.scrollTo(this.x, stop, this.options.bounceTime, ease.bounce);
  
      return this.pulling;
    };
  
    BScroll.prototype.finishPullDown = function () {
      this.pulling = false;
      this.resetPosition(this.options.bounceTime, ease.bounce);
    };
  
    BScroll.prototype.openPullDown = function () {
      var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  
      this.options.pullDownRefresh = config;
      this._initPullDown();
    };
  
    BScroll.prototype.closePullDown = function () {
      this.options.pullDownRefresh = false;
    };
  }
  
  function pullUpMixin(BScroll) {
    BScroll.prototype._initPullUp = function () {
      // must watch scroll in real time
      this.options.probeType = PROBE_REALTIME;
  
      this.pullupWatching = false;
      this._watchPullUp();
    };
  
    BScroll.prototype._watchPullUp = function () {
      if (this.pullupWatching) {
        return;
      }
      this.pullupWatching = true;
      this.on('scroll', this._checkToEnd);
    };
  
    BScroll.prototype._checkToEnd = function (pos) {
      var _this = this;
  
      var _options$pullUpLoad$t = this.options.pullUpLoad.threshold,
          threshold = _options$pullUpLoad$t === undefined ? 0 : _options$pullUpLoad$t;
  
      if (this.movingDirectionY === DIRECTION_UP && pos.y <= this.maxScrollY + threshold) {
        // reset pullupWatching status after scroll end.
        this.once('scrollEnd', function () {
          _this.pullupWatching = false;
        });
        this.trigger('pullingUp');
        this.off('scroll', this._checkToEnd);
      }
    };
  
    BScroll.prototype.finishPullUp = function () {
      var _this2 = this;
  
      if (this.pullupWatching) {
        this.once('scrollEnd', function () {
          _this2._watchPullUp();
        });
      } else {
        this._watchPullUp();
      }
    };
  
    BScroll.prototype.openPullUp = function () {
      var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
  
      this.options.pullUpLoad = config;
      this._initPullUp();
    };
  
    BScroll.prototype.closePullUp = function () {
      this.options.pullUpLoad = false;
      if (!this.pullupWatching) {
        return;
      }
      this.pullupWatching = false;
      this.off('scroll', this._checkToEnd);
    };
  }
  
  function mouseWheelMixin(BScroll) {
    BScroll.prototype._initMouseWheel = function () {
      var _this = this;
  
      this._handleMouseWheelEvent(addEvent);
  
      this.on('destroy', function () {
        clearTimeout(_this.mouseWheelTimer);
        clearTimeout(_this.mouseWheelEndTimer);
        _this._handleMouseWheelEvent(removeEvent);
      });
  
      this.firstWheelOpreation = true;
    };
  
    BScroll.prototype._handleMouseWheelEvent = function (eventOperation) {
      eventOperation(this.wrapper, 'wheel', this);
      eventOperation(this.wrapper, 'mousewheel', this);
      eventOperation(this.wrapper, 'DOMMouseScroll', this);
    };
  
    BScroll.prototype._onMouseWheel = function (e) {
      var _this2 = this;
  
      if (!this.enabled) {
        return;
      }
      e.preventDefault();
  
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      if (this.firstWheelOpreation) {
        this.trigger('scrollStart');
      }
      this.firstWheelOpreation = false;
  
      var _options$mouseWheel = this.options.mouseWheel,
          _options$mouseWheel$s = _options$mouseWheel.speed,
          speed = _options$mouseWheel$s === undefined ? 20 : _options$mouseWheel$s,
          _options$mouseWheel$i = _options$mouseWheel.invert,
          invert = _options$mouseWheel$i === undefined ? false : _options$mouseWheel$i,
          _options$mouseWheel$e = _options$mouseWheel.easeTime,
          easeTime = _options$mouseWheel$e === undefined ? 300 : _options$mouseWheel$e;
  
  
      clearTimeout(this.mouseWheelTimer);
      this.mouseWheelTimer = setTimeout(function () {
        if (!_this2.options.snap && !easeTime) {
          _this2.trigger('scrollEnd', {
            x: _this2.x,
            y: _this2.y
          });
        }
        _this2.firstWheelOpreation = true;
      }, 400);
  
      var wheelDeltaX = void 0;
      var wheelDeltaY = void 0;
  
      switch (true) {
        case 'deltaX' in e:
          if (e.deltaMode === 1) {
            wheelDeltaX = -e.deltaX * speed;
            wheelDeltaY = -e.deltaY * speed;
          } else {
            wheelDeltaX = -e.deltaX;
            wheelDeltaY = -e.deltaY;
          }
          break;
        case 'wheelDeltaX' in e:
          wheelDeltaX = e.wheelDeltaX / 120 * speed;
          wheelDeltaY = e.wheelDeltaY / 120 * speed;
          break;
        case 'wheelDelta' in e:
          wheelDeltaX = wheelDeltaY = e.wheelDelta / 120 * speed;
          break;
        case 'detail' in e:
          wheelDeltaX = wheelDeltaY = -e.detail / 3 * speed;
          break;
        default:
          return;
      }
  
      var direction = invert ? -1 : 1;
      wheelDeltaX *= direction;
      wheelDeltaY *= direction;
  
      if (!this.hasVerticalScroll) {
        wheelDeltaX = wheelDeltaY;
        wheelDeltaY = 0;
      }
  
      var newX = void 0;
      var newY = void 0;
      if (this.options.snap) {
        newX = this.currentPage.pageX;
        newY = this.currentPage.pageY;
  
        if (wheelDeltaX > 0) {
          newX--;
        } else if (wheelDeltaX < 0) {
          newX++;
        }
  
        if (wheelDeltaY > 0) {
          newY--;
        } else if (wheelDeltaY < 0) {
          newY++;
        }
  
        this._goToPage(newX, newY);
        return;
      }
  
      newX = this.x + Math.round(this.hasHorizontalScroll ? wheelDeltaX : 0);
      newY = this.y + Math.round(this.hasVerticalScroll ? wheelDeltaY : 0);
  
      this.movingDirectionX = this.directionX = wheelDeltaX > 0 ? -1 : wheelDeltaX < 0 ? 1 : 0;
      this.movingDirectionY = this.directionY = wheelDeltaY > 0 ? -1 : wheelDeltaY < 0 ? 1 : 0;
  
      if (newX > this.minScrollX) {
        newX = this.minScrollX;
      } else if (newX < this.maxScrollX) {
        newX = this.maxScrollX;
      }
  
      if (newY > this.minScrollY) {
        newY = this.minScrollY;
      } else if (newY < this.maxScrollY) {
        newY = this.maxScrollY;
      }
  
      var needTriggerEnd = this.y === newY;
      this.scrollTo(newX, newY, easeTime, ease.swipe);
      this.trigger('scroll', {
        x: this.x,
        y: this.y
      });
      clearTimeout(this.mouseWheelEndTimer);
      if (needTriggerEnd) {
        this.mouseWheelEndTimer = setTimeout(function () {
          _this2.trigger('scrollEnd', {
            x: _this2.x,
            y: _this2.y
          });
        }, easeTime);
      }
    };
  }
  
  function zoomMixin(BScroll) {
    BScroll.prototype._initZoom = function () {
      var _options$zoom = this.options.zoom,
          _options$zoom$start = _options$zoom.start,
          start = _options$zoom$start === undefined ? 1 : _options$zoom$start,
          _options$zoom$min = _options$zoom.min,
          min = _options$zoom$min === undefined ? 1 : _options$zoom$min,
          _options$zoom$max = _options$zoom.max,
          max = _options$zoom$max === undefined ? 4 : _options$zoom$max;
  
      this.scale = Math.min(Math.max(start, min), max);
      this.setScale(this.scale);
      this.scrollerStyle[style.transformOrigin] = '0 0';
    };
  
    BScroll.prototype._zoomTo = function (scale, originX, originY, startScale) {
      this.scaled = true;
  
      var lastScale = scale / (startScale || this.scale);
      this.setScale(scale);
  
      this.refresh();
  
      var newX = Math.round(this.startX - (originX - this.relativeX) * (lastScale - 1));
      var newY = Math.round(this.startY - (originY - this.relativeY) * (lastScale - 1));
  
      if (newX > this.minScrollX) {
        newX = this.minScrollX;
      } else if (newX < this.maxScrollX) {
        newX = this.maxScrollX;
      }
  
      if (newY > this.minScrollY) {
        newY = this.minScrollY;
      } else if (newY < this.maxScrollY) {
        newY = this.maxScrollY;
      }
  
      if (this.x !== newX || this.y !== newY) {
        this.scrollTo(newX, newY, this.options.bounceTime);
      }
  
      this.scaled = false;
    };
  
    BScroll.prototype.zoomTo = function (scale, x, y) {
      var _offsetToBody = offsetToBody(this.wrapper),
          left = _offsetToBody.left,
          top = _offsetToBody.top;
  
      var originX = x + left - this.x;
      var originY = y + top - this.y;
      this._zoomTo(scale, originX, originY);
    };
  
    BScroll.prototype._zoomStart = function (e) {
      var firstFinger = e.touches[0];
      var secondFinger = e.touches[1];
      var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);
      var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);
  
      this.startDistance = getDistance(deltaX, deltaY);
      this.startScale = this.scale;
  
      var _offsetToBody2 = offsetToBody(this.wrapper),
          left = _offsetToBody2.left,
          top = _offsetToBody2.top;
  
      this.originX = Math.abs(firstFinger.pageX + secondFinger.pageX) / 2 + left - this.x;
      this.originY = Math.abs(firstFinger.pageY + secondFinger.pageY) / 2 + top - this.y;
  
      this.trigger('zoomStart');
    };
  
    BScroll.prototype._zoom = function (e) {
      if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {
        return;
      }
  
      if (this.options.preventDefault) {
        e.preventDefault();
      }
  
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      var firstFinger = e.touches[0];
      var secondFinger = e.touches[1];
      var deltaX = Math.abs(firstFinger.pageX - secondFinger.pageX);
      var deltaY = Math.abs(firstFinger.pageY - secondFinger.pageY);
      var distance = getDistance(deltaX, deltaY);
      var scale = distance / this.startDistance * this.startScale;
  
      this.scaled = true;
  
      var _options$zoom2 = this.options.zoom,
          _options$zoom2$min = _options$zoom2.min,
          min = _options$zoom2$min === undefined ? 1 : _options$zoom2$min,
          _options$zoom2$max = _options$zoom2.max,
          max = _options$zoom2$max === undefined ? 4 : _options$zoom2$max;
  
  
      if (scale < min) {
        scale = 0.5 * min * Math.pow(2.0, scale / min);
      } else if (scale > max) {
        scale = 2.0 * max * Math.pow(0.5, max / scale);
      }
  
      var lastScale = scale / this.startScale;
  
      var x = this.startX - (this.originX - this.relativeX) * (lastScale - 1);
      var y = this.startY - (this.originY - this.relativeY) * (lastScale - 1);
  
      this.setScale(scale);
  
      this.scrollTo(x, y, 0);
    };
  
    BScroll.prototype._zoomEnd = function (e) {
      if (!this.enabled || this.destroyed || eventType[e.type] !== this.initiated) {
        return;
      }
  
      if (this.options.preventDefault) {
        e.preventDefault();
      }
  
      if (this.options.stopPropagation) {
        e.stopPropagation();
      }
  
      this.isInTransition = false;
      this.isAnimating = false;
      this.initiated = 0;
  
      var _options$zoom3 = this.options.zoom,
          _options$zoom3$min = _options$zoom3.min,
          min = _options$zoom3$min === undefined ? 1 : _options$zoom3$min,
          _options$zoom3$max = _options$zoom3.max,
          max = _options$zoom3$max === undefined ? 4 : _options$zoom3$max;
  
  
      var scale = this.scale > max ? max : this.scale < min ? min : this.scale;
  
      this._zoomTo(scale, this.originX, this.originY, this.startScale);
  
      this.trigger('zoomEnd');
    };
  }
  
  // import { ease } from '../util/ease'
  
  // Number of items to instantiate beyond current view in the scroll direction.
  var RUNWAY_ITEMS = 30;
  
  // Number of items to instantiate beyond current view in the opposite direction.
  var RUNWAY_ITEMS_OPPOSITE = 10;
  
  // The animation interval (in ms) for fading in content from tombstones.
  var ANIMATION_DURATION_MS = 200;
  
  // The number of pixels of default additional length to allow scrolling to.
  var DEFAULT_SCROLL_RUNWAY = 2000;
  
  function infiniteMixin(BScroll) {
    BScroll.prototype._initInfinite = function () {
      this.options.probeType = 3;
      this.maxScrollY = -DEFAULT_SCROLL_RUNWAY;
      this.infiniteScroller = new InfiniteScroller(this, this.options.infinity);
    };
  }
  
  function isTombstoneNode(node) {
    if (node && node.classList) {
      return node.classList.contains('tombstone');
    }
  }
  
  function InfiniteScroller(scroller, options) {
    var _this = this;
  
    this.options = options;
    assert(typeof this.options.createTombstone === 'function', 'Infinite scroll need createTombstone Function to create tombstone');
  
    assert(typeof this.options.fetch === 'function', 'Infinite scroll need fetch Function to fetch new data.');
  
    assert(typeof this.options.render === 'function', 'Infinite scroll need render Function to render each item.');
  
    this.firstAttachedItem = 0;
    this.lastAttachedItem = 0;
  
    this.anchorScrollTop = 0;
    this.anchorItem = {
      index: 0,
      offset: 0
    };
    this.tombstoneHeight = 0;
    this.tombstoneWidth = 0;
    this.tombstones = [];
  
    this.items = [];
    this.loadedItems = 0;
    this.requestInProgress = false;
    this.hasMore = true;
  
    this.scroller = scroller;
    this.wrapperEl = this.scroller.wrapper;
    this.scrollerEl = this.scroller.scroller;
    this.scroller.on('scroll', function () {
      _this.onScroll();
    });
    this.scroller.on('resize', function () {
      _this.onResize();
    });
  
    this.onResize();
  }
  
  InfiniteScroller.prototype.onScroll = function () {
    var scrollTop = -this.scroller.y;
    var delta = scrollTop - this.anchorScrollTop;
    if (scrollTop === 0) {
      this.anchorItem = {
        index: 0,
        offset: 0
      };
    } else {
      this.anchorItem = this._calculateAnchoredItem(this.anchorItem, delta);
    }
  
    this.anchorScrollTop = scrollTop;
    var lastScreenItem = this._calculateAnchoredItem(this.anchorItem, this.wrapperEl.offsetHeight);
  
    var start = this.anchorItem.index;
    var end = lastScreenItem.index;
    if (delta < 0) {
      start -= RUNWAY_ITEMS;
      end += RUNWAY_ITEMS_OPPOSITE;
    } else {
      start -= RUNWAY_ITEMS_OPPOSITE;
      end += RUNWAY_ITEMS;
    }
    this.fill(start, end);
    this.maybeRequestContent();
  };
  
  InfiniteScroller.prototype.onResize = function () {
    var tombstone = this.options.createTombstone();
    tombstone.style.position = 'absolute';
    this.scrollerEl.appendChild(tombstone);
    tombstone.style.display = '';
    this.tombstoneHeight = tombstone.offsetHeight;
    this.tombstoneWidth = tombstone.offsetWidth;
    this.scrollerEl.removeChild(tombstone);
  
    for (var i = 0; i < this.items.length; i++) {
      this.items[i].height = this.items[i].width = 0;
    }
  
    this.onScroll();
  };
  
  InfiniteScroller.prototype.fill = function (start, end) {
    this.firstAttachedItem = Math.max(0, start);
    if (!this.hasMore) {
      end = Math.min(end, this.items.length);
    }
    this.lastAttachedItem = end;
    this.attachContent();
  };
  
  InfiniteScroller.prototype.maybeRequestContent = function () {
    var _this2 = this;
  
    if (this.requestInProgress || !this.hasMore) {
      return;
    }
    var itemsNeeded = this.lastAttachedItem - this.loadedItems;
    if (itemsNeeded <= 0) {
      return;
    }
    this.requestInProgress = true;
    this.options.fetch(itemsNeeded).then(function (items) {
      _this2.requestInProgress = false;
      if (items) {
        _this2.addContent(items);
      } else {
        _this2.hasMore = false;
        var tombstoneLen = _this2._removeTombstones();
        var curPos = 0;
        if (_this2.anchorItem.index <= _this2.items.length) {
          curPos = _this2._fixScrollPosition();
          _this2._setupAnimations({}, curPos);
          _this2.scroller.resetPosition(_this2.scroller.options.bounceTime);
        } else {
          _this2.anchorItem.index -= tombstoneLen;
          curPos = _this2._fixScrollPosition();
          _this2._setupAnimations({}, curPos);
          _this2.scroller.stop();
          _this2.scroller.resetPosition();
          _this2.onScroll();
        }
      }
    });
  };
  
  InfiniteScroller.prototype.addContent = function (items) {
    for (var i = 0; i < items.length; i++) {
      if (this.items.length <= this.loadedItems) {
        this._addItem();
      }
      this.items[this.loadedItems++].data = items[i];
    }
    this.attachContent();
    this.maybeRequestContent();
  };
  
  InfiniteScroller.prototype.attachContent = function () {
    var unusedNodes = this._collectUnusedNodes();
    var tombstoneAnimations = this._createDOMNodes(unusedNodes);
    this._cleanupUnusedNodes(unusedNodes);
    this._cacheNodeSize();
    var curPos = this._fixScrollPosition();
    this._setupAnimations(tombstoneAnimations, curPos);
  };
  
  InfiniteScroller.prototype.resetMore = function () {
    this.hasMore = true;
  };
  
  InfiniteScroller.prototype._removeTombstones = function () {
    var markIndex = void 0;
    var tombstoneLen = 0;
    var itemLen = this.items.length;
    for (var i = 0; i < itemLen; i++) {
      var currentNode = this.items[i].node;
      var currentData = this.items[i].data;
      if ((!currentNode || isTombstoneNode(currentNode)) && !currentData) {
        if (!markIndex) {
          markIndex = i;
        }
        if (currentNode) {
          this.scrollerEl.removeChild(currentNode);
        }
      }
    }
    tombstoneLen = itemLen - markIndex;
    this.items.splice(markIndex);
    this.lastAttachedItem = Math.min(this.lastAttachedItem, this.items.length);
    return tombstoneLen;
  };
  
  InfiniteScroller.prototype._collectUnusedNodes = function () {
    var unusedNodes = [];
    for (var i = 0; i < this.items.length; i++) {
      // Skip the items which should be visible.
      if (i === this.firstAttachedItem) {
        i = this.lastAttachedItem - 1;
        continue;
      }
      var currentNode = this.items[i].node;
      if (currentNode) {
        if (isTombstoneNode(currentNode)) {
          // Cache tombstones for reuse
          this.tombstones.push(currentNode);
          this.tombstones[this.tombstones.length - 1].style.display = 'none';
        } else {
          unusedNodes.push(currentNode);
        }
      }
      this.items[i].node = null;
    }
    return unusedNodes;
  };
  
  InfiniteScroller.prototype._createDOMNodes = function (unusedNodes) {
    var tombstoneAnimations = {};
    for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {
      while (this.items.length <= i) {
        this._addItem();
      }
      var currentNode = this.items[i].node;
      var currentData = this.items[i].data;
      if (currentNode) {
        if (isTombstoneNode(currentNode) && currentData) {
          currentNode.style.zIndex = 1;
          tombstoneAnimations[i] = [currentNode, this.items[i].top - this.anchorScrollTop];
          this.items[i].node = null;
        } else {
          continue;
        }
      }
      var node = currentData ? this.options.render(currentData, unusedNodes.pop()) : this._getTombStone();
      node.style.position = 'absolute';
      this.items[i].top = -1;
      this.scrollerEl.appendChild(node);
      this.items[i].node = node;
    }
    return tombstoneAnimations;
  };
  
  InfiniteScroller.prototype._cleanupUnusedNodes = function (unusedNodes) {
    while (unusedNodes.length) {
      this.scrollerEl.removeChild(unusedNodes.pop());
    }
  };
  
  InfiniteScroller.prototype._cacheNodeSize = function () {
    for (var i = this.firstAttachedItem; i < this.lastAttachedItem; i++) {
      // Only cache the height if we have the real contents, not a placeholder.
      if (this.items[i].data && !this.items[i].height) {
        this.items[i].height = this.items[i].node.offsetHeight;
        this.items[i].width = this.items[i].node.offsetWidth;
      }
    }
  };
  
  InfiniteScroller.prototype._fixScrollPosition = function () {
    this.anchorScrollTop = 0;
    for (var _i = 0; _i < this.anchorItem.index; _i++) {
      this.anchorScrollTop += this.items[_i].height || this.tombstoneHeight;
    }
    this.anchorScrollTop += this.anchorItem.offset;
  
    // Position all nodes.
    var curPos = this.anchorScrollTop - this.anchorItem.offset;
    var i = this.anchorItem.index;
    while (i > this.firstAttachedItem) {
      curPos -= this.items[i - 1].height || this.tombstoneHeight;
      i--;
    }
  
    return curPos;
  };
  
  InfiniteScroller.prototype._setupAnimations = function (tombstoneAnimations, curPos) {
    var _this3 = this;
  
    for (var i in tombstoneAnimations) {
      var animation = tombstoneAnimations[i];
      this.items[i].node.style.transform = 'translateY(' + (this.anchorScrollTop + animation[1]) + 'px) scale(' + this.tombstoneWidth / this.items[i].width + ', ' + this.tombstoneHeight / this.items[i].height + ')';
      // Call offsetTop on the nodes to be animated to force them to apply current transforms.
      /* eslint-disable no-unused-expressions */
      this.items[i].node.offsetTop;
      animation[0].offsetTop;
      this.items[i].node.style.transition = 'transform ' + ANIMATION_DURATION_MS + 'ms';
    }
  
    for (var _i2 = this.firstAttachedItem; _i2 < this.lastAttachedItem; _i2++) {
      var _animation = tombstoneAnimations[_i2];
      if (_animation) {
        var tombstoneNode = _animation[0];
        tombstoneNode.style.transition = 'transform ' + ANIMATION_DURATION_MS + 'ms, opacity ' + ANIMATION_DURATION_MS + 'ms';
        tombstoneNode.style.transform = 'translateY(' + curPos + 'px) scale(' + this.items[_i2].width / this.tombstoneWidth + ', ' + this.items[_i2].height / this.tombstoneHeight + ')';
        tombstoneNode.style.opacity = 0;
      }
      if (curPos !== this.items[_i2].top) {
        if (!_animation) {
          this.items[_i2].node.style.transition = '';
        }
        this.items[_i2].node.style.transform = 'translateY(' + curPos + 'px)';
      }
      this.items[_i2].top = curPos;
      curPos += this.items[_i2].height || this.tombstoneHeight;
    }
  
    this.scroller.maxScrollY = -(curPos - this.wrapperEl.offsetHeight + (this.hasMore ? DEFAULT_SCROLL_RUNWAY : 0));
  
    setTimeout(function () {
      for (var _i3 in tombstoneAnimations) {
        var _animation2 = tombstoneAnimations[_i3];
        _animation2[0].style.display = 'none';
        // Tombstone can be recycled now.
        _this3.tombstones.push(_animation2[0]);
      }
    }, ANIMATION_DURATION_MS);
  };
  
  InfiniteScroller.prototype._getTombStone = function () {
    var tombstone = this.tombstones.pop();
    if (tombstone) {
      tombstone.style.display = '';
      tombstone.style.opacity = 1;
      tombstone.style.transform = '';
      tombstone.style.transition = '';
      return tombstone;
    }
    return this.options.createTombstone();
  };
  
  InfiniteScroller.prototype._addItem = function () {
    this.items.push({
      data: null,
      node: null,
      height: 0,
      width: 0,
      top: 0
    });
  };
  
  InfiniteScroller.prototype._calculateAnchoredItem = function (initialAnchor, delta) {
    if (delta === 0) {
      return initialAnchor;
    }
    var i = initialAnchor.index;
    var tombstones = 0;
  
    delta += initialAnchor.offset;
    if (delta < 0) {
      while (delta < 0 && i > 0 && this.items[i - 1].height) {
        delta += this.items[i - 1].height;
        i--;
      }
      tombstones = Math.max(-i, Math.ceil(Math.min(delta, 0) / this.tombstoneHeight));
    } else {
      while (delta > 0 && i < this.items.length && this.items[i].height && this.items[i].height < delta) {
        delta -= this.items[i].height;
        i++;
      }
      if (i >= this.items.length || !this.items[i].height) {
        tombstones = Math.floor(Math.max(delta, 0) / this.tombstoneHeight);
      }
    }
    i += tombstones;
    delta -= tombstones * this.tombstoneHeight;
  
    return {
      index: i,
      offset: delta
    };
  };
  
  function BScroll(el, options) {
    this.wrapper = typeof el === 'string' ? document.querySelector(el) : el;
    if (!this.wrapper) {
      warn('Can not resolve the wrapper DOM.');
    }
    this.scroller = this.wrapper.children[0];
    if (!this.scroller) {
      warn('The wrapper need at least one child element to be scroller.');
    }
    // cache style for better performance
    this.scrollerStyle = this.scroller.style;
  
    this._init(el, options);
  }
  
  initMixin(BScroll);
  coreMixin(BScroll);
  eventMixin(BScroll);
  snapMixin(BScroll);
  wheelMixin(BScroll);
  scrollbarMixin(BScroll);
  pullDownMixin(BScroll);
  pullUpMixin(BScroll);
  mouseWheelMixin(BScroll);
  zoomMixin(BScroll);
  infiniteMixin(BScroll);
  
  BScroll.Version = '1.12.6';
  
  /* harmony default export */ __webpack_exports__["default"] = (BScroll);
  
  
  /***/ }),
  /* 75 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = { "default": __webpack_require__(76), __esModule: true };
  
  /***/ }),
  /* 76 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(38);
  __webpack_require__(47);
  module.exports = __webpack_require__(41).f('iterator');
  
  
  /***/ }),
  /* 77 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = { "default": __webpack_require__(78), __esModule: true };
  
  /***/ }),
  /* 78 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(79);
  __webpack_require__(85);
  __webpack_require__(86);
  __webpack_require__(87);
  module.exports = __webpack_require__(0).Symbol;
  
  
  /***/ }),
  /* 79 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  // ECMAScript 6 symbols shim
  var global = __webpack_require__(1);
  var has = __webpack_require__(5);
  var DESCRIPTORS = __webpack_require__(3);
  var $export = __webpack_require__(12);
  var redefine = __webpack_require__(39);
  var META = __webpack_require__(80).KEY;
  var $fails = __webpack_require__(9);
  var shared = __webpack_require__(21);
  var setToStringTag = __webpack_require__(27);
  var uid = __webpack_require__(17);
  var wks = __webpack_require__(2);
  var wksExt = __webpack_require__(41);
  var wksDefine = __webpack_require__(42);
  var enumKeys = __webpack_require__(81);
  var isArray = __webpack_require__(82);
  var anObject = __webpack_require__(11);
  var isObject = __webpack_require__(10);
  var toIObject = __webpack_require__(8);
  var toPrimitive = __webpack_require__(24);
  var createDesc = __webpack_require__(14);
  var _create = __webpack_require__(40);
  var gOPNExt = __webpack_require__(83);
  var $GOPD = __webpack_require__(84);
  var $DP = __webpack_require__(4);
  var $keys = __webpack_require__(15);
  var gOPD = $GOPD.f;
  var dP = $DP.f;
  var gOPN = gOPNExt.f;
  var $Symbol = global.Symbol;
  var $JSON = global.JSON;
  var _stringify = $JSON && $JSON.stringify;
  var PROTOTYPE = 'prototype';
  var HIDDEN = wks('_hidden');
  var TO_PRIMITIVE = wks('toPrimitive');
  var isEnum = {}.propertyIsEnumerable;
  var SymbolRegistry = shared('symbol-registry');
  var AllSymbols = shared('symbols');
  var OPSymbols = shared('op-symbols');
  var ObjectProto = Object[PROTOTYPE];
  var USE_NATIVE = typeof $Symbol == 'function';
  var QObject = global.QObject;
  // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
  var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
  
  // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
  var setSymbolDesc = DESCRIPTORS && $fails(function () {
    return _create(dP({}, 'a', {
      get: function () { return dP(this, 'a', { value: 7 }).a; }
    })).a != 7;
  }) ? function (it, key, D) {
    var protoDesc = gOPD(ObjectProto, key);
    if (protoDesc) delete ObjectProto[key];
    dP(it, key, D);
    if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
  } : dP;
  
  var wrap = function (tag) {
    var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
    sym._k = tag;
    return sym;
  };
  
  var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {
    return typeof it == 'symbol';
  } : function (it) {
    return it instanceof $Symbol;
  };
  
  var $defineProperty = function defineProperty(it, key, D) {
    if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
    anObject(it);
    key = toPrimitive(key, true);
    anObject(D);
    if (has(AllSymbols, key)) {
      if (!D.enumerable) {
        if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
        it[HIDDEN][key] = true;
      } else {
        if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
        D = _create(D, { enumerable: createDesc(0, false) });
      } return setSymbolDesc(it, key, D);
    } return dP(it, key, D);
  };
  var $defineProperties = function defineProperties(it, P) {
    anObject(it);
    var keys = enumKeys(P = toIObject(P));
    var i = 0;
    var l = keys.length;
    var key;
    while (l > i) $defineProperty(it, key = keys[i++], P[key]);
    return it;
  };
  var $create = function create(it, P) {
    return P === undefined ? _create(it) : $defineProperties(_create(it), P);
  };
  var $propertyIsEnumerable = function propertyIsEnumerable(key) {
    var E = isEnum.call(this, key = toPrimitive(key, true));
    if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
    return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
  };
  var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
    it = toIObject(it);
    key = toPrimitive(key, true);
    if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
    var D = gOPD(it, key);
    if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
    return D;
  };
  var $getOwnPropertyNames = function getOwnPropertyNames(it) {
    var names = gOPN(toIObject(it));
    var result = [];
    var i = 0;
    var key;
    while (names.length > i) {
      if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
    } return result;
  };
  var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
    var IS_OP = it === ObjectProto;
    var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
    var result = [];
    var i = 0;
    var key;
    while (names.length > i) {
      if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
    } return result;
  };
  
  // 19.4.1.1 Symbol([description])
  if (!USE_NATIVE) {
    $Symbol = function Symbol() {
      if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
      var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
      var $set = function (value) {
        if (this === ObjectProto) $set.call(OPSymbols, value);
        if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
        setSymbolDesc(this, tag, createDesc(1, value));
      };
      if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
      return wrap(tag);
    };
    redefine($Symbol[PROTOTYPE], 'toString', function toString() {
      return this._k;
    });
  
    $GOPD.f = $getOwnPropertyDescriptor;
    $DP.f = $defineProperty;
    __webpack_require__(58).f = gOPNExt.f = $getOwnPropertyNames;
    __webpack_require__(23).f = $propertyIsEnumerable;
    __webpack_require__(31).f = $getOwnPropertySymbols;
  
    if (DESCRIPTORS && !__webpack_require__(16)) {
      redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
    }
  
    wksExt.f = function (name) {
      return wrap(wks(name));
    };
  }
  
  $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
  
  for (var es6Symbols = (
    // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
    'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
  ).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
  
  for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
  
  $export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
    // 19.4.2.1 Symbol.for(key)
    'for': function (key) {
      return has(SymbolRegistry, key += '')
        ? SymbolRegistry[key]
        : SymbolRegistry[key] = $Symbol(key);
    },
    // 19.4.2.5 Symbol.keyFor(sym)
    keyFor: function keyFor(sym) {
      if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
      for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;
    },
    useSetter: function () { setter = true; },
    useSimple: function () { setter = false; }
  });
  
  $export($export.S + $export.F * !USE_NATIVE, 'Object', {
    // 19.1.2.2 Object.create(O [, Properties])
    create: $create,
    // 19.1.2.4 Object.defineProperty(O, P, Attributes)
    defineProperty: $defineProperty,
    // 19.1.2.3 Object.defineProperties(O, Properties)
    defineProperties: $defineProperties,
    // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
    getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
    // 19.1.2.7 Object.getOwnPropertyNames(O)
    getOwnPropertyNames: $getOwnPropertyNames,
    // 19.1.2.8 Object.getOwnPropertySymbols(O)
    getOwnPropertySymbols: $getOwnPropertySymbols
  });
  
  // 24.3.2 JSON.stringify(value [, replacer [, space]])
  $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
    var S = $Symbol();
    // MS Edge converts symbol values to JSON as {}
    // WebKit converts symbol values to JSON as null
    // V8 throws on boxed symbols
    return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
  })), 'JSON', {
    stringify: function stringify(it) {
      var args = [it];
      var i = 1;
      var replacer, $replacer;
      while (arguments.length > i) args.push(arguments[i++]);
      $replacer = replacer = args[1];
      if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
      if (!isArray(replacer)) replacer = function (key, value) {
        if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
        if (!isSymbol(value)) return value;
      };
      args[1] = replacer;
      return _stringify.apply($JSON, args);
    }
  });
  
  // 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
  $Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(7)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
  // 19.4.3.5 Symbol.prototype[@@toStringTag]
  setToStringTag($Symbol, 'Symbol');
  // 20.2.1.9 Math[@@toStringTag]
  setToStringTag(Math, 'Math', true);
  // 24.3.3 JSON[@@toStringTag]
  setToStringTag(global.JSON, 'JSON', true);
  
  
  /***/ }),
  /* 80 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var META = __webpack_require__(17)('meta');
  var isObject = __webpack_require__(10);
  var has = __webpack_require__(5);
  var setDesc = __webpack_require__(4).f;
  var id = 0;
  var isExtensible = Object.isExtensible || function () {
    return true;
  };
  var FREEZE = !__webpack_require__(9)(function () {
    return isExtensible(Object.preventExtensions({}));
  });
  var setMeta = function (it) {
    setDesc(it, META, { value: {
      i: 'O' + ++id, // object ID
      w: {}          // weak collections IDs
    } });
  };
  var fastKey = function (it, create) {
    // return primitive with prefix
    if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
    if (!has(it, META)) {
      // can't set metadata to uncaught frozen object
      if (!isExtensible(it)) return 'F';
      // not necessary to add metadata
      if (!create) return 'E';
      // add missing metadata
      setMeta(it);
    // return object ID
    } return it[META].i;
  };
  var getWeak = function (it, create) {
    if (!has(it, META)) {
      // can't set metadata to uncaught frozen object
      if (!isExtensible(it)) return true;
      // not necessary to add metadata
      if (!create) return false;
      // add missing metadata
      setMeta(it);
    // return hash weak collections IDs
    } return it[META].w;
  };
  // add metadata on freeze-family methods calling
  var onFreeze = function (it) {
    if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
    return it;
  };
  var meta = module.exports = {
    KEY: META,
    NEED: false,
    fastKey: fastKey,
    getWeak: getWeak,
    onFreeze: onFreeze
  };
  
  
  /***/ }),
  /* 81 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // all enumerable object keys, includes symbols
  var getKeys = __webpack_require__(15);
  var gOPS = __webpack_require__(31);
  var pIE = __webpack_require__(23);
  module.exports = function (it) {
    var result = getKeys(it);
    var getSymbols = gOPS.f;
    if (getSymbols) {
      var symbols = getSymbols(it);
      var isEnum = pIE.f;
      var i = 0;
      var key;
      while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
    } return result;
  };
  
  
  /***/ }),
  /* 82 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // 7.2.2 IsArray(argument)
  var cof = __webpack_require__(26);
  module.exports = Array.isArray || function isArray(arg) {
    return cof(arg) == 'Array';
  };
  
  
  /***/ }),
  /* 83 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
  var toIObject = __webpack_require__(8);
  var gOPN = __webpack_require__(58).f;
  var toString = {}.toString;
  
  var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
    ? Object.getOwnPropertyNames(window) : [];
  
  var getWindowNames = function (it) {
    try {
      return gOPN(it);
    } catch (e) {
      return windowNames.slice();
    }
  };
  
  module.exports.f = function getOwnPropertyNames(it) {
    return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
  };
  
  
  /***/ }),
  /* 84 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var pIE = __webpack_require__(23);
  var createDesc = __webpack_require__(14);
  var toIObject = __webpack_require__(8);
  var toPrimitive = __webpack_require__(24);
  var has = __webpack_require__(5);
  var IE8_DOM_DEFINE = __webpack_require__(29);
  var gOPD = Object.getOwnPropertyDescriptor;
  
  exports.f = __webpack_require__(3) ? gOPD : function getOwnPropertyDescriptor(O, P) {
    O = toIObject(O);
    P = toPrimitive(P, true);
    if (IE8_DOM_DEFINE) try {
      return gOPD(O, P);
    } catch (e) { /* empty */ }
    if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
  };
  
  
  /***/ }),
  /* 85 */
  /***/ (function(module, exports) {
  
  
  
  /***/ }),
  /* 86 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(42)('asyncIterator');
  
  
  /***/ }),
  /* 87 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(42)('observable');
  
  
  /***/ }),
  /* 88 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var classof = __webpack_require__(67);
  var ITERATOR = __webpack_require__(2)('iterator');
  var Iterators = __webpack_require__(13);
  module.exports = __webpack_require__(0).getIteratorMethod = function (it) {
    if (it != undefined) return it[ITERATOR]
      || it['@@iterator']
      || Iterators[classof(it)];
  };
  
  
  /***/ }),
  /* 89 */,
  /* 90 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod.exports);
      global.date = mod.exports;
    }
  })(this, function (exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var DAY_TIMESTAMP = 60 * 60 * 24 * 1000;
    var HOUR_TIMESTAMP = 60 * 60 * 1000;
    var MINUTE_TIMESTAMP = 60 * 1000;
  
    function formatType(type, format, value, regExpAttributes) {
      var regExpMap = {
        year: '(Y+)',
        month: '(M+)',
        date: '(D+)',
        hour: '(h+)',
        minute: '(m+)',
        second: '(s+)',
        quarter: '(q+)',
        millisecond: '(S)'
      };
  
      if (new RegExp(regExpMap[type], regExpAttributes).test(format)) {
        var replaceStr = type === 'year' ? value.toString().substr(4 - RegExp.$1.length) : RegExp.$1.length === 1 ? value : pad(value);
        format = format.replace(RegExp.$1, replaceStr);
      }
  
      return format;
    }
  
    function pad(value) {
      return ('00' + value).substr(('' + value).length);
    }
  
    function formatDate(date, format) {
      var map = {
        year: {
          value: date.getFullYear(),
          regExpAttributes: 'i'
        },
        month: {
          value: date.getMonth() + 1
        },
        date: {
          value: date.getDate(),
          regExpAttributes: 'i'
        },
        hour: {
          value: date.getHours(),
          regExpAttributes: 'i'
        },
        minute: {
          value: date.getMinutes()
        },
        second: {
          value: date.getSeconds()
        },
        quarter: {
          value: Math.floor((date.getMonth() + 3) / 3),
          regExpAttributes: 'i'
        },
        millisecond: {
          value: date.getMilliseconds()
        }
      };
  
      for (var key in map) {
        format = formatType(key, format, map[key].value, map[key].regExpAttributes);
      }
  
      return format;
    }
  
    function getZeroStamp(date) {
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      var day = date.getDate();
      return +new Date(year + '/' + month + '/' + day + ' 00:00:00');
    }
  
    function getDayDiff(date1, date2) {
      return Math.floor((getZeroStamp(date1) - getZeroStamp(date2)) / DAY_TIMESTAMP);
    }
  
    function getNow() {
      return window.performance && window.performance.now ? window.performance.now() + window.performance.timing.navigationStart : +new Date();
    }
  
    function computeNatureMaxDay(month, year) {
      var natureMaxDay = 30;
      if ([1, 3, 5, 7, 8, 10, 12].indexOf(month) > -1) {
        natureMaxDay = 31;
      } else {
        if (month === 2) {
          natureMaxDay = !year || !(year % 400) || !(year % 4) && year % 100 ? 29 : 28;
        }
      }
  
      return natureMaxDay;
    }
  
    exports.DAY_TIMESTAMP = DAY_TIMESTAMP;
    exports.HOUR_TIMESTAMP = HOUR_TIMESTAMP;
    exports.MINUTE_TIMESTAMP = MINUTE_TIMESTAMP;
    exports.pad = pad;
    exports.formatType = formatType;
    exports.formatDate = formatDate;
    exports.getZeroStamp = getZeroStamp;
    exports.getDayDiff = getDayDiff;
    exports.getNow = getNow;
    exports.computeNatureMaxDay = computeNatureMaxDay;
  });
  
  /***/ }),
  /* 91 */,
  /* 92 */,
  /* 93 */,
  /* 94 */,
  /* 95 */
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
  
  "use strict";
  Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
  /**
   * vue-create-api v0.2.0
   * (c) 2018 ustbhuangyi
   * @license MIT
   */
  var _extends = Object.assign || function (target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i];
  
      for (var key in source) {
        if (Object.prototype.hasOwnProperty.call(source, key)) {
          target[key] = source[key];
        }
      }
    }
  
    return target;
  };
  
  var camelizeRE = /-(\w)/g;
  
  function camelize(str) {
    return (str + '').replace(camelizeRE, function (m, c) {
      return c ? c.toUpperCase() : '';
    });
  }
  
  function escapeReg(str, delimiter) {
    return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&');
  }
  
  function isBoolean(value) {
    return typeof value === 'boolean';
  }
  
  function isUndef(value) {
    return value === undefined;
  }
  
  function isStr(value) {
    return typeof value === 'string';
  }
  
  function isFunction(fn) {
    return typeof fn === 'function';
  }
  
  function warn(msg) {
    console.error("[vue-create-api warn]: " + msg);
  }
  
  function assert(condition, msg) {
    if (!condition) {
      throw new Error("[vue-create-api error]: " + msg);
    }
  }
  
  function instantiateComponent(Vue, Component, data, renderFn, options) {
    var renderData = void 0;
    var childrenRenderFn = void 0;
  
    var instance = new Vue(_extends({}, options, {
      render: function render(createElement) {
        var children = childrenRenderFn && childrenRenderFn(createElement);
        if (children && !Array.isArray(children)) {
          children = [children];
        }
  
        return createElement(Component, _extends({}, renderData), children || []);
      },
  
      methods: {
        init: function init() {
          document.body.appendChild(this.$el);
        },
        destroy: function destroy() {
          this.$destroy();
          document.body.removeChild(this.$el);
        }
      }
    }));
    instance.updateRenderData = function (data, render) {
      renderData = data;
      childrenRenderFn = render;
    };
    instance.updateRenderData(data, renderFn);
    instance.$mount();
    instance.init();
    var component = instance.$children[0];
    component.$updateProps = function (props) {
      _extends(renderData.props, props);
      instance.$forceUpdate();
    };
    return component;
  }
  
  function parseRenderData() {
    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  
    events = parseEvents(events);
    var props = _extends({}, data);
    var on = {};
    for (var name in events) {
      if (events.hasOwnProperty(name)) {
        var handlerName = events[name];
        if (props[handlerName]) {
          on[name] = props[handlerName];
          delete props[handlerName];
        }
      }
    }
    return {
      props: props,
      on: on
    };
  }
  
  function parseEvents(events) {
    var parsedEvents = {};
    events.forEach(function (name) {
      parsedEvents[name] = camelize('on-' + name);
    });
    return parsedEvents;
  }
  
  var eventBeforeDestroy = 'hook:beforeDestroy';
  
  function apiCreator(Component) {
    var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
    var single = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  
    var Vue = this;
    var singleMap = {};
    var beforeHooks = [];
  
    function createComponent(renderData, renderFn, options, single) {
      beforeHooks.forEach(function (before) {
        before(renderData, renderFn, single);
      });
      var ownerInsUid = options.parent ? options.parent._uid : -1;
  
      var _ref = singleMap[ownerInsUid] ? singleMap[ownerInsUid] : {},
          comp = _ref.comp,
          ins = _ref.ins;
  
      if (single && comp && ins) {
        ins.updateRenderData(renderData, renderFn);
        ins.$forceUpdate();
        return comp;
      }
      var component = instantiateComponent(Vue, Component, renderData, renderFn, options);
      var instance = component.$parent;
      var originRemove = component.remove;
  
      component.remove = function () {
        if (single) {
          if (!singleMap[ownerInsUid]) {
            return;
          }
          singleMap[ownerInsUid] = null;
        }
        originRemove && originRemove.call(this);
        instance.destroy();
      };
  
      var originShow = component.show;
      component.show = function () {
        originShow && originShow.call(this);
        return this;
      };
  
      var originHide = component.hide;
      component.hide = function () {
        originHide && originHide.call(this);
        return this;
      };
  
      if (single) {
        singleMap[ownerInsUid] = {
          comp: component,
          ins: instance
        };
      }
      return component;
    }
  
    function processProps(ownerInstance, renderData, isInVueInstance, onChange) {
      var $props = renderData.props.$props;
      if ($props) {
        delete renderData.props.$props;
  
        var watchKeys = [];
        var watchPropKeys = [];
        Object.keys($props).forEach(function (key) {
          var propKey = $props[key];
          if (isStr(propKey) && propKey in ownerInstance) {
            // get instance value
            renderData.props[key] = ownerInstance[propKey];
            watchKeys.push(key);
            watchPropKeys.push(propKey);
          } else {
            renderData.props[key] = propKey;
          }
        });
        if (isInVueInstance) {
          var unwatchFn = ownerInstance.$watch(function () {
            var props = {};
            watchKeys.forEach(function (key, i) {
              props[key] = ownerInstance[watchPropKeys[i]];
            });
            return props;
          }, onChange);
          ownerInstance.__unwatchFns__.push(unwatchFn);
        }
      }
    }
  
    function processEvents(renderData, ownerInstance) {
      var $events = renderData.props.$events;
      if ($events) {
        delete renderData.props.$events;
  
        Object.keys($events).forEach(function (event) {
          var eventHandler = $events[event];
          if (typeof eventHandler === 'string') {
            eventHandler = ownerInstance[eventHandler];
          }
          renderData.on[event] = eventHandler;
        });
      }
    }
  
    function process$(renderData) {
      var props = renderData.props;
      Object.keys(props).forEach(function (prop) {
        if (prop.charAt(0) === '$') {
          renderData[prop.slice(1)] = props[prop];
          delete props[prop];
        }
      });
    }
  
    function cancelWatchProps(ownerInstance) {
      if (ownerInstance.__unwatchFns__) {
        ownerInstance.__unwatchFns__.forEach(function (unwatchFn) {
          unwatchFn();
        });
        ownerInstance.__unwatchFns__ = null;
      }
    }
  
    var api = {
      before: function before(hook) {
        beforeHooks.push(hook);
      },
      create: function create(config, renderFn, _single) {
        if (!isFunction(renderFn) && isUndef(_single)) {
          _single = renderFn;
          renderFn = null;
        }
  
        if (isUndef(_single)) {
          _single = single;
        }
  
        var ownerInstance = this;
        var isInVueInstance = !!ownerInstance.$on;
        var options = {};
  
        if (isInVueInstance) {
          // Set parent to store router i18n ...
          options.parent = ownerInstance;
          if (!ownerInstance.__unwatchFns__) {
            ownerInstance.__unwatchFns__ = [];
          }
        }
  
        var renderData = parseRenderData(config, events);
  
        var component = null;
  
        processProps(ownerInstance, renderData, isInVueInstance, function (newProps) {
          component && component.$updateProps(newProps);
        });
        processEvents(renderData, ownerInstance);
        process$(renderData);
  
        component = createComponent(renderData, renderFn, options, _single);
  
        if (isInVueInstance) {
          ownerInstance.$on(eventBeforeDestroy, beforeDestroy);
        }
  
        function beforeDestroy() {
          cancelWatchProps(ownerInstance);
          component.remove();
          component = null;
        }
  
        return component;
      }
    };
  
    return api;
  }
  
  var installed = false;
  
  function install(Vue) {
    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  
    if (installed) {
      warn('[vue-create-api] already installed. Vue.use(CreateAPI) should be called only once.');
      return;
    }
    installed = true;
    var _options$componentPre = options.componentPrefix,
        componentPrefix = _options$componentPre === undefined ? '' : _options$componentPre,
        _options$apiPrefix = options.apiPrefix,
        apiPrefix = _options$apiPrefix === undefined ? '$create-' : _options$apiPrefix;
  
  
    Vue.createAPI = function (Component, events, single) {
      if (isBoolean(events)) {
        single = events;
        events = [];
      }
      var api = apiCreator.call(this, Component, events, single);
      var createName = processComponentName(Component, {
        componentPrefix: componentPrefix,
        apiPrefix: apiPrefix
      });
      Vue.prototype[createName] = Component.$create = api.create;
      return api;
    };
  }
  
  function processComponentName(Component, options) {
    var componentPrefix = options.componentPrefix,
        apiPrefix = options.apiPrefix;
  
    var name = Component.name;
    assert(name, 'Component must have name while using create-api!');
    var prefixReg = new RegExp('^' + escapeReg(componentPrefix), 'i');
    var pureName = name.replace(prefixReg, '');
    var camelizeName = '' + camelize('' + apiPrefix + pureName);
    return camelizeName;
  }
  
  var index = {
    install: install,
    instantiateComponent: instantiateComponent,
    version: '0.2.0'
  };
  
  /* harmony default export */ __webpack_exports__["default"] = (index);
  
  
  /***/ }),
  /* 96 */
  /***/ (function(module, exports, __webpack_require__) {
  
  function injectStyle (ssrContext) {
    __webpack_require__(97)
  }
  var Component = __webpack_require__(6)(
    /* script */
    __webpack_require__(98),
    /* template */
    __webpack_require__(99),
    /* styles */
    injectStyle,
    /* scopeId */
    null,
    /* moduleIdentifier (server only) */
    null
  )
  
  module.exports = Component.exports
  
  
  /***/ }),
  /* 97 */
  /***/ (function(module, exports) {
  
  // removed by extract-text-webpack-plugin
  
  /***/ }),
  /* 98 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(36), __webpack_require__(49), __webpack_require__(59)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('babel-runtime/helpers/defineProperty'), require('../../common/mixins/visibility'), require('../../common/mixins/popup'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.defineProperty, global.visibility, global.popup);
      global.popup = mod.exports;
    }
  })(this, function (module, exports, _defineProperty2, _visibility, _popup) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  
    var _visibility2 = _interopRequireDefault(_visibility);
  
    var _popup2 = _interopRequireDefault(_popup);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    var COMPONENT_NAME = 'cube-popup';
    var EVENT_MASK_CLICK = 'mask-click';
  
    exports.default = {
      name: COMPONENT_NAME,
      mixins: [_visibility2.default, _popup2.default],
      props: {
        type: {
          type: String,
          default: ''
        },
        mask: {
          type: Boolean,
          default: true
        },
        content: {
          type: String,
          default: ''
        },
        center: {
          type: Boolean,
          default: true
        },
        position: {
          type: String,
          default: ''
        }
      },
      computed: {
        rootClass: function rootClass() {
          var cls = {
            'cube-popup_mask': this.mask
          };
          if (this.type) {
            cls['cube-' + this.type] = true;
          }
          return cls;
        },
        containerClass: function containerClass() {
          var center = this.center;
          var position = this.position;
          if (position) {
            return (0, _defineProperty3.default)({}, 'cube-popup-' + position, true);
          }
          if (center) {
            return {
              'cube-popup-center': true
            };
          }
        }
      },
      methods: {
        maskClick: function maskClick(e) {
          this.$emit(EVENT_MASK_CLICK, e);
          if (this.maskClosable) {
            this.hide();
          }
        }
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 99 */
  /***/ (function(module, exports) {
  
  module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('div', {
      directives: [{
        name: "show",
        rawName: "v-show",
        value: (_vm.isVisible),
        expression: "isVisible"
      }],
      staticClass: "cube-popup",
      class: _vm.rootClass,
      style: ({
        'z-index': _vm.zIndex
      })
    }, [_c('div', {
      staticClass: "cube-popup-mask",
      on: {
        "touchmove": function($event) {
          $event.preventDefault();
        },
        "click": _vm.maskClick
      }
    }, [_vm._t("mask")], 2), _vm._v(" "), _c('div', {
      staticClass: "cube-popup-container",
      class: _vm.containerClass,
      on: {
        "touchmove": function($event) {
          $event.preventDefault();
        }
      }
    }, [(_vm.$slots.default) ? _c('div', {
      staticClass: "cube-popup-content"
    }, [_vm._t("default")], 2) : _c('div', {
      staticClass: "cube-popup-content",
      domProps: {
        "innerHTML": _vm._s(_vm.content)
      }
    })])])
  },staticRenderFns: []}
  
  /***/ }),
  /* 100 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports);
      global.zhCN = mod.exports;
    }
  })(this, function (module, exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = {
      cancel: '取消',
      confirm: '确认',
      ok: '确定',
      prev: '上一步',
      next: '下一步',
      selectText: '请选择',
      now: '现在',
      selectTime: '选择时间',
      today: '今日',
      formatDate: 'M月D日',
      hours: '点',
      minutes: '分',
      validator: {
        required: '此为必填项',
        type: {
          string: '请输入字符',
          number: '请输入数字',
          array: '数据类型应为数组',
          date: '请选择有效日期',
          email: '请输入有效邮箱',
          tel: '请输入有效的手机号码',
          url: '请输入有效网址'
        },
        min: {
          string: '至少输入 {{config}} 位字符',
          number: '不得小于 {{config}}',
          array: '请选择至少 {{config}} 项',
          date: '请选择 {{config | toLocaleDateString("yyyy年MM月dd日")}} 之后的时间',
          email: '至少输入 {{config}} 位字符',
          tel: '至少输入 {{config}} 位字符',
          url: '至少输入 {{config}} 位字符'
        },
        max: {
          string: '请勿超过 {{config}} 位字符',
          number: '请勿大于 {{config}}',
          array: '最多选择 {{config}} 项',
          date: '请选择 {{config | toLocaleDateString("yyyy年MM月dd日")}} 之前的时间',
          email: '请勿超过 {{config}} 位字符',
          tel: '请勿超过 {{config}} 位字符',
          url: '请勿超过 {{config}} 位字符'
        },
        len: {
          string: '请输入 {{config}} 位字符',
          number: '长度应等于 {{config}}',
          array: '请选择 {{config}} 项',
          date: '请选择 {{config | toLocaleDateString("yyyy年MM月dd日")}} 之前的时间',
          email: '请输入 {{config}} 位字符',
          tel: '请输入 {{config}} 位字符',
          url: '请输入 {{config}} 位字符'
        },
        pattern: '格式错误',
        custom: '未通过校验',
        notWhitespace: '空白内容无效'
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 101 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports);
      global.picker = mod.exports;
    }
  })(this, function (module, exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = {
      props: {
        title: {
          type: String
        },
        subtitle: {
          type: String
        },
        cancelTxt: {
          type: String,
          default: ''
        },
        confirmTxt: {
          type: String,
          default: ''
        },
        swipeTime: {
          type: Number,
          default: 2500
        },
        maskClosable: {
          type: Boolean,
          default: true
        }
      },
      computed: {
        _cancelTxt: function _cancelTxt() {
          return this.cancelTxt || this.$t('cancel');
        },
        _confirmTxt: function _confirmTxt() {
          return this.confirmTxt || this.$t('ok');
        }
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 102 */,
  /* 103 */,
  /* 104 */,
  /* 105 */,
  /* 106 */,
  /* 107 */
  /***/ (function(module, exports, __webpack_require__) {
  
  function injectStyle (ssrContext) {
    __webpack_require__(130)
  }
  var Component = __webpack_require__(6)(
    /* script */
    __webpack_require__(131),
    /* template */
    __webpack_require__(132),
    /* styles */
    injectStyle,
    /* scopeId */
    null,
    /* moduleIdentifier (server only) */
    null
  )
  
  module.exports = Component.exports
  
  
  /***/ }),
  /* 108 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports);
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports);
      global.basicPicker = mod.exports;
    }
  })(this, function (module, exports) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    var DEFAULT_KEYS = {
      value: 'value',
      text: 'text',
      order: 'order'
    };
  
    exports.default = {
      props: {
        data: {
          type: Array,
          default: function _default() {
            return [];
          }
        },
        selectedIndex: {
          type: Array,
          default: function _default() {
            return [];
          }
        },
        alias: {
          type: Object,
          default: function _default() {
            return {};
          }
        }
      },
      computed: {
        valueKey: function valueKey() {
          return this.alias.value || DEFAULT_KEYS.value;
        },
        textKey: function textKey() {
          return this.alias.text || DEFAULT_KEYS.text;
        },
        orderKey: function orderKey() {
          return DEFAULT_KEYS.order;
        },
        merge: function merge() {
          return [this.data, this.selectedIndex];
        }
      },
      watch: {
        merge: function merge(newVal) {
          this.setData(newVal[0], newVal[1]);
        }
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 109 */,
  /* 110 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  
  exports.__esModule = true;
  
  var _from = __webpack_require__(111);
  
  var _from2 = _interopRequireDefault(_from);
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  exports.default = function (arr) {
    if (Array.isArray(arr)) {
      for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
        arr2[i] = arr[i];
      }
  
      return arr2;
    } else {
      return (0, _from2.default)(arr);
    }
  };
  
  /***/ }),
  /* 111 */
  /***/ (function(module, exports, __webpack_require__) {
  
  module.exports = { "default": __webpack_require__(112), __esModule: true };
  
  /***/ }),
  /* 112 */
  /***/ (function(module, exports, __webpack_require__) {
  
  __webpack_require__(38);
  __webpack_require__(113);
  module.exports = __webpack_require__(0).Array.from;
  
  
  /***/ }),
  /* 113 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var ctx = __webpack_require__(35);
  var $export = __webpack_require__(12);
  var toObject = __webpack_require__(25);
  var call = __webpack_require__(114);
  var isArrayIter = __webpack_require__(115);
  var toLength = __webpack_require__(37);
  var createProperty = __webpack_require__(116);
  var getIterFn = __webpack_require__(88);
  
  $export($export.S + $export.F * !__webpack_require__(117)(function (iter) { Array.from(iter); }), 'Array', {
    // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
    from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
      var O = toObject(arrayLike);
      var C = typeof this == 'function' ? this : Array;
      var aLen = arguments.length;
      var mapfn = aLen > 1 ? arguments[1] : undefined;
      var mapping = mapfn !== undefined;
      var index = 0;
      var iterFn = getIterFn(O);
      var length, result, step, iterator;
      if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
      // if object isn't iterable or it's array with default iterator - use simple case
      if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
        for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
          createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
        }
      } else {
        length = toLength(O.length);
        for (result = new C(length); length > index; index++) {
          createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
        }
      }
      result.length = index;
      return result;
    }
  });
  
  
  /***/ }),
  /* 114 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // call something on iterator step with safe closing on error
  var anObject = __webpack_require__(11);
  module.exports = function (iterator, fn, value, entries) {
    try {
      return entries ? fn(anObject(value)[0], value[1]) : fn(value);
    // 7.4.6 IteratorClose(iterator, completion)
    } catch (e) {
      var ret = iterator['return'];
      if (ret !== undefined) anObject(ret.call(iterator));
      throw e;
    }
  };
  
  
  /***/ }),
  /* 115 */
  /***/ (function(module, exports, __webpack_require__) {
  
  // check on default Array iterator
  var Iterators = __webpack_require__(13);
  var ITERATOR = __webpack_require__(2)('iterator');
  var ArrayProto = Array.prototype;
  
  module.exports = function (it) {
    return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
  };
  
  
  /***/ }),
  /* 116 */
  /***/ (function(module, exports, __webpack_require__) {
  
  "use strict";
  
  var $defineProperty = __webpack_require__(4);
  var createDesc = __webpack_require__(14);
  
  module.exports = function (object, index, value) {
    if (index in object) $defineProperty.f(object, index, createDesc(0, value));
    else object[index] = value;
  };
  
  
  /***/ }),
  /* 117 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var ITERATOR = __webpack_require__(2)('iterator');
  var SAFE_CLOSING = false;
  
  try {
    var riter = [7][ITERATOR]();
    riter['return'] = function () { SAFE_CLOSING = true; };
    // eslint-disable-next-line no-throw-literal
    Array.from(riter, function () { throw 2; });
  } catch (e) { /* empty */ }
  
  module.exports = function (exec, skipClosing) {
    if (!skipClosing && !SAFE_CLOSING) return false;
    var safe = false;
    try {
      var arr = [7];
      var iter = arr[ITERATOR]();
      iter.next = function () { return { done: safe = true }; };
      arr[ITERATOR] = function () { return iter; };
      exec(arr);
    } catch (e) { /* empty */ }
    return safe;
  };
  
  
  /***/ }),
  /* 118 */,
  /* 119 */,
  /* 120 */,
  /* 121 */,
  /* 122 */,
  /* 123 */,
  /* 124 */,
  /* 125 */,
  /* 126 */,
  /* 127 */,
  /* 128 */,
  /* 129 */,
  /* 130 */
  /***/ (function(module, exports) {
  
  // removed by extract-text-webpack-plugin
  
  /***/ }),
  /* 131 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(110), __webpack_require__(74), __webpack_require__(96), __webpack_require__(49), __webpack_require__(59), __webpack_require__(108), __webpack_require__(101), __webpack_require__(73)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('babel-runtime/helpers/toConsumableArray'), require('better-scroll'), require('../popup/popup.vue'), require('../../common/mixins/visibility'), require('../../common/mixins/popup'), require('../../common/mixins/basic-picker'), require('../../common/mixins/picker'), require('../../common/mixins/locale'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.toConsumableArray, global.betterScroll, global.popup, global.visibility, global.popup, global.basicPicker, global.picker, global.locale);
      global.picker = mod.exports;
    }
  })(this, function (module, exports, _toConsumableArray2, _betterScroll, _popup, _visibility, _popup3, _basicPicker, _picker, _locale) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
  
    var _betterScroll2 = _interopRequireDefault(_betterScroll);
  
    var _popup2 = _interopRequireDefault(_popup);
  
    var _visibility2 = _interopRequireDefault(_visibility);
  
    var _popup4 = _interopRequireDefault(_popup3);
  
    var _basicPicker2 = _interopRequireDefault(_basicPicker);
  
    var _picker2 = _interopRequireDefault(_picker);
  
    var _locale2 = _interopRequireDefault(_locale);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    var COMPONENT_NAME = 'cube-picker';
  
    var EVENT_SELECT = 'select';
    var EVENT_VALUE_CHANGE = 'value-change';
    var EVENT_CANCEL = 'cancel';
    var EVENT_CHANGE = 'change';
  
    exports.default = {
      name: COMPONENT_NAME,
      mixins: [_visibility2.default, _popup4.default, _basicPicker2.default, _picker2.default, _locale2.default],
      props: {
        pending: {
          type: Boolean,
          default: false
        }
      },
      data: function data() {
        return {
          finalData: this.data.slice()
        };
      },
      created: function created() {
        this._values = [];
        this._indexes = this.selectedIndex;
      },
  
      methods: {
        confirm: function confirm() {
          if (!this._canConfirm()) {
            return;
          }
          this.hide();
  
          var changed = false;
          var pickerSelectedText = [];
  
          var length = this.finalData.length;
          var oldLength = this._values.length;
  
          if (oldLength !== length) {
            changed = true;
            oldLength > length && (this._values.length = this._indexes.length = length);
          }
  
          for (var i = 0; i < length; i++) {
            var index = this.wheels[i].getSelectedIndex();
            this._indexes[i] = index;
  
            var value = null;
            var text = '';
            if (this.finalData[i].length) {
              value = this.finalData[i][index][this.valueKey];
              text = this.finalData[i][index][this.textKey];
            }
            if (this._values[i] !== value) {
              changed = true;
            }
            this._values[i] = value;
            pickerSelectedText[i] = text;
          }
  
          this.$emit(EVENT_SELECT, this._values, this._indexes, pickerSelectedText);
  
          if (changed) {
            this.$emit(EVENT_VALUE_CHANGE, this._values, this._indexes, pickerSelectedText);
          }
        },
        maskClick: function maskClick() {
          this.maskClosable && this.cancel();
        },
        cancel: function cancel() {
          this.hide();
          this.$emit(EVENT_CANCEL);
        },
        show: function show() {
          var _this = this;
  
          if (this.isVisible) {
            return;
          }
  
          this.isVisible = true;
          if (!this.wheels || this.dirty) {
            this.$nextTick(function () {
              _this.wheels = _this.wheels || [];
              var wheelWrapper = _this.$refs.wheelWrapper;
              for (var i = 0; i < _this.finalData.length; i++) {
                _this._createWheel(wheelWrapper, i).enable();
                _this.wheels[i].wheelTo(_this._indexes[i]);
              }
              _this.dirty && _this._destroyExtraWheels();
              _this.dirty = false;
            });
          } else {
            for (var i = 0; i < this.finalData.length; i++) {
              this.wheels[i].enable();
              this.wheels[i].wheelTo(this._indexes[i]);
            }
          }
        },
        hide: function hide() {
          if (!this.isVisible) {
            return;
          }
          this.isVisible = false;
  
          for (var i = 0; i < this.finalData.length; i++) {
            this.wheels[i].disable();
          }
        },
        setData: function setData(data, selectedIndex) {
          var _this2 = this;
  
          this._indexes = selectedIndex ? [].concat((0, _toConsumableArray3.default)(selectedIndex)) : [];
          this.finalData = data.slice();
          if (this.isVisible) {
            this.$nextTick(function () {
              var wheelWrapper = _this2.$refs.wheelWrapper;
              _this2.finalData.forEach(function (item, i) {
                _this2._createWheel(wheelWrapper, i);
                _this2.wheels[i].wheelTo(_this2._indexes[i]);
              });
              _this2._destroyExtraWheels();
            });
          } else {
            this.dirty = true;
          }
        },
        refill: function refill(datas) {
          var _this3 = this;
  
          var ret = [];
          if (!datas.length) {
            return ret;
          }
          datas.forEach(function (data, index) {
            ret[index] = _this3.refillColumn(index, data);
          });
          return ret;
        },
        refillColumn: function refillColumn(index, data) {
          var _this4 = this;
  
          var wheelWrapper = this.$refs.wheelWrapper;
          var scroll = wheelWrapper.children[index].querySelector('.cube-picker-wheel-scroll');
          var wheel = this.wheels ? this.wheels[index] : false;
          var dist = 0;
          if (scroll && wheel) {
            var oldData = this.finalData[index];
            this.$set(this.finalData, index, data);
            var selectedIndex = wheel.getSelectedIndex();
            if (oldData.length) {
              var oldValue = oldData[selectedIndex][this.valueKey];
              for (var i = 0; i < data.length; i++) {
                if (data[i][this.valueKey] === oldValue) {
                  dist = i;
                  break;
                }
              }
            }
            this._indexes[index] = dist;
            this.$nextTick(function () {
              wheel = _this4._createWheel(wheelWrapper, index);
              wheel.wheelTo(dist);
            });
          }
          return dist;
        },
        scrollTo: function scrollTo(index, dist) {
          var wheel = this.wheels[index];
          this._indexes[index] = dist;
          wheel.wheelTo(dist);
        },
        refresh: function refresh() {
          var _this5 = this;
  
          this.$nextTick(function () {
            _this5.wheels.forEach(function (wheel) {
              wheel.refresh();
            });
          });
        },
        _createWheel: function _createWheel(wheelWrapper, i) {
          var _this6 = this;
  
          if (!this.wheels[i]) {
            var wheel = this.wheels[i] = new _betterScroll2.default(wheelWrapper.children[i], {
              wheel: {
                selectedIndex: this._indexes[i] || 0,
                wheelWrapperClass: 'cube-picker-wheel-scroll',
                wheelItemClass: 'cube-picker-wheel-item'
              },
              swipeTime: this.swipeTime,
              observeDOM: false
            });
            wheel.on('scrollEnd', function () {
              _this6.$emit(EVENT_CHANGE, i, wheel.getSelectedIndex());
            });
          } else {
            this.wheels[i].refresh();
          }
          return this.wheels[i];
        },
        _destroyExtraWheels: function _destroyExtraWheels() {
          var dataLength = this.finalData.length;
          if (this.wheels.length > dataLength) {
            var extraWheels = this.wheels.splice(dataLength);
            extraWheels.forEach(function (wheel) {
              wheel.destroy();
            });
          }
        },
        _canConfirm: function _canConfirm() {
          return !this.pending && this.wheels.every(function (wheel) {
            return !wheel.isInTransition;
          });
        },
        _getFlexOrder: function _getFlexOrder(data) {
          if (data[0]) {
            return data[0][this.orderKey];
          }
          return 0;
        }
      },
      beforeDestroy: function beforeDestroy() {
        this.wheels && this.wheels.forEach(function (wheel) {
          wheel.destroy();
        });
        this.wheels = null;
      },
  
      components: {
        CubePopup: _popup2.default
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 132 */
  /***/ (function(module, exports) {
  
  module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('transition', {
      attrs: {
        "name": "cube-picker-fade"
      }
    }, [_c('cube-popup', {
      directives: [{
        name: "show",
        rawName: "v-show",
        value: (_vm.isVisible),
        expression: "isVisible"
      }],
      attrs: {
        "type": "picker",
        "mask": true,
        "center": false,
        "z-index": _vm.zIndex
      },
      on: {
        "touchmove": function($event) {
          $event.preventDefault();
        },
        "mask-click": _vm.maskClick
      }
    }, [_c('transition', {
      attrs: {
        "name": "cube-picker-move"
      }
    }, [_c('div', {
      directives: [{
        name: "show",
        rawName: "v-show",
        value: (_vm.isVisible),
        expression: "isVisible"
      }],
      staticClass: "cube-picker-panel cube-safe-area-pb",
      on: {
        "click": function($event) {
          $event.stopPropagation();
        }
      }
    }, [_c('div', {
      staticClass: "cube-picker-choose border-bottom-1px"
    }, [_c('span', {
      staticClass: "cube-picker-cancel",
      on: {
        "click": _vm.cancel
      }
    }, [_vm._v(_vm._s(_vm._cancelTxt))]), _vm._v(" "), _c('span', {
      staticClass: "cube-picker-confirm",
      on: {
        "click": _vm.confirm
      }
    }, [_vm._v(_vm._s(_vm._confirmTxt))]), _vm._v(" "), _c('div', {
      staticClass: "cube-picker-title-group"
    }, [_c('h1', {
      staticClass: "cube-picker-title",
      domProps: {
        "innerHTML": _vm._s(_vm.title)
      }
    }), _vm._v(" "), (_vm.subtitle) ? _c('h2', {
      staticClass: "cube-picker-subtitle",
      domProps: {
        "innerHTML": _vm._s(_vm.subtitle)
      }
    }) : _vm._e()])]), _vm._v(" "), _c('div', {
      staticClass: "cube-picker-content"
    }, [_c('i', {
      staticClass: "border-bottom-1px"
    }), _vm._v(" "), _c('i', {
      staticClass: "border-top-1px"
    }), _vm._v(" "), _c('div', {
      ref: "wheelWrapper",
      staticClass: "cube-picker-wheel-wrapper"
    }, _vm._l((_vm.finalData), function(data, index) {
      return _c('div', {
        key: index,
        style: ({
          order: _vm._getFlexOrder(data)
        })
      }, [_c('ul', {
        staticClass: "cube-picker-wheel-scroll"
      }, _vm._l((data), function(item, index) {
        return _c('li', {
          key: index,
          staticClass: "cube-picker-wheel-item",
          domProps: {
            "innerHTML": _vm._s(item[_vm.textKey])
          }
        })
      }))])
    }))]), _vm._v(" "), _c('div', {
      staticClass: "cube-picker-footer"
    })])])], 1)], 1)
  },staticRenderFns: []}
  
  /***/ }),
  /* 133 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(72), __webpack_require__(32)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('../../common/helpers/create-api'), require('../../common/helpers/debug'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.createApi, global.debug);
      global.api = mod.exports;
    }
  })(this, function (module, exports, _createApi, _debug) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = addPicker;
  
    var _createApi2 = _interopRequireDefault(_createApi);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    function addPicker(Vue, Picker) {
      var pickerAPI = (0, _createApi2.default)(Vue, Picker, ['select', 'value-change', 'cancel', 'change']);
      pickerAPI.before(function (data, renderFn, single) {
        if (single) {
          (0, _debug.tip)('Picker component can not be a singleton.');
        }
      });
    }
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 134 */,
  /* 135 */,
  /* 136 */,
  /* 137 */,
  /* 138 */,
  /* 139 */,
  /* 140 */,
  /* 141 */,
  /* 142 */,
  /* 143 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var Component = __webpack_require__(6)(
    /* script */
    __webpack_require__(144),
    /* template */
    __webpack_require__(145),
    /* styles */
    null,
    /* scopeId */
    null,
    /* moduleIdentifier (server only) */
    null
  )
  
  module.exports = Component.exports
  
  
  /***/ }),
  /* 144 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(107), __webpack_require__(49), __webpack_require__(59), __webpack_require__(108), __webpack_require__(101), __webpack_require__(73)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('../picker/picker.vue'), require('../../common/mixins/visibility'), require('../../common/mixins/popup'), require('../../common/mixins/basic-picker'), require('../../common/mixins/picker'), require('../../common/mixins/locale'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.picker, global.visibility, global.popup, global.basicPicker, global.picker, global.locale);
      global.cascadePicker = mod.exports;
    }
  })(this, function (module, exports, _picker, _visibility, _popup, _basicPicker, _picker3, _locale) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _picker2 = _interopRequireDefault(_picker);
  
    var _visibility2 = _interopRequireDefault(_visibility);
  
    var _popup2 = _interopRequireDefault(_popup);
  
    var _basicPicker2 = _interopRequireDefault(_basicPicker);
  
    var _picker4 = _interopRequireDefault(_picker3);
  
    var _locale2 = _interopRequireDefault(_locale);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    var COMPONENT_NAME = 'cube-cascade-picker';
    var EVENT_SELECT = 'select';
    var EVENT_CANCEL = 'cancel';
    var EVENT_CHANGE = 'change';
  
    exports.default = {
      name: COMPONENT_NAME,
      mixins: [_visibility2.default, _popup2.default, _basicPicker2.default, _picker4.default, _locale2.default],
      props: {
        async: {
          type: Boolean,
          default: false
        }
      },
      data: function data() {
        return {
          cascadeData: this.data.slice(),
          pickerSelectedIndex: this.selectedIndex.slice(),
          pickerData: [],
          pending: false
        };
      },
      created: function created() {
        this._updatePickerData();
      },
  
      methods: {
        setData: function setData(data) {
          var selectedIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
  
          this.pending = false;
          this.cascadeData = data.slice();
          this.pickerSelectedIndex = selectedIndex.slice();
          this._updatePickerData();
        },
        _pickerSelect: function _pickerSelect(selectedVal, selectedIndex, selectedText) {
          this.$emit(EVENT_SELECT, selectedVal, selectedIndex, selectedText);
        },
        _pickerCancel: function _pickerCancel() {
          this.$emit(EVENT_CANCEL);
        },
        _pickerChange: function _pickerChange(i, newIndex) {
          if (newIndex !== this.pickerSelectedIndex[i]) {
            this.pickerSelectedIndex.splice(i, 1, newIndex);
            this.async ? this.pending = i !== this.pickerData.length - 1 : this._updatePickerData(i + 1);
          }
          this.$emit(EVENT_CHANGE, i, newIndex);
        },
        _updatePickerData: function _updatePickerData() {
          var _this = this;
  
          var fromColumn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
  
          var data = this.cascadeData;
          var i = 0;
          while (data) {
            if (i >= fromColumn) {
              (function () {
                var columnData = [];
                data.forEach(function (item) {
                  columnData.push({
                    value: item[_this.valueKey],
                    text: item[_this.textKey],
                    order: item[_this.orderKey]
                  });
                });
                _this.pickerData[i] = columnData;
  
                _this.pickerSelectedIndex[i] = fromColumn === 0 ? _this.pickerSelectedIndex[i] < data.length ? _this.pickerSelectedIndex[i] || 0 : 0 : _this.$refs.picker.refillColumn(i, columnData);
              })();
            }
            data = data.length ? data[this.pickerSelectedIndex[i]].children : null;
  
            i++;
          }
  
          if (i < this.pickerData.length) {
            this.pickerData.splice(i, this.pickerData.length - i);
          }
  
          this.pickerData = this.pickerData.slice();
        }
      },
      components: {
        CubePicker: _picker2.default
      }
    };
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 145 */
  /***/ (function(module, exports) {
  
  module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
    return _c('cube-picker', {
      ref: "picker",
      attrs: {
        "data": _vm.pickerData,
        "selected-index": _vm.pickerSelectedIndex,
        "pending": _vm.pending,
        "title": _vm.title,
        "subtitle": _vm.subtitle,
        "z-index": _vm.zIndex,
        "cancel-txt": _vm._cancelTxt,
        "confirm-txt": _vm._confirmTxt,
        "swipe-time": _vm.swipeTime,
        "mask-closable": _vm.maskClosable
      },
      on: {
        "select": _vm._pickerSelect,
        "cancel": _vm._pickerCancel,
        "change": _vm._pickerChange
      },
      model: {
        value: (_vm.isVisible),
        callback: function($$v) {
          _vm.isVisible = $$v
        },
        expression: "isVisible"
      }
    })
  },staticRenderFns: []}
  
  /***/ }),
  /* 146 */,
  /* 147 */,
  /* 148 */,
  /* 149 */,
  /* 150 */,
  /* 151 */,
  /* 152 */,
  /* 153 */,
  /* 154 */,
  /* 155 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(72), __webpack_require__(32)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('../../common/helpers/create-api'), require('../../common/helpers/debug'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.createApi, global.debug);
      global.api = mod.exports;
    }
  })(this, function (module, exports, _createApi, _debug) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
    exports.default = addCascadePicker;
  
    var _createApi2 = _interopRequireDefault(_createApi);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    function addCascadePicker(Vue, CascadePicker) {
      var cascadePickerAPI = (0, _createApi2.default)(Vue, CascadePicker, ['select', 'cancel', 'change']);
      cascadePickerAPI.before(function (data, renderFn, single) {
        if (single) {
          (0, _debug.tip)('CascadePicker component can not be a singleton.');
        }
      });
    }
    module.exports = exports['default'];
  });
  
  /***/ }),
  /* 156 */,
  /* 157 */,
  /* 158 */,
  /* 159 */,
  /* 160 */,
  /* 161 */,
  /* 162 */,
  /* 163 */,
  /* 164 */,
  /* 165 */,
  /* 166 */,
  /* 167 */,
  /* 168 */,
  /* 169 */,
  /* 170 */,
  /* 171 */,
  /* 172 */,
  /* 173 */,
  /* 174 */,
  /* 175 */,
  /* 176 */,
  /* 177 */,
  /* 178 */,
  /* 179 */,
  /* 180 */,
  /* 181 */,
  /* 182 */,
  /* 183 */,
  /* 184 */,
  /* 185 */,
  /* 186 */,
  /* 187 */,
  /* 188 */,
  /* 189 */,
  /* 190 */,
  /* 191 */,
  /* 192 */,
  /* 193 */,
  /* 194 */,
  /* 195 */,
  /* 196 */,
  /* 197 */,
  /* 198 */,
  /* 199 */,
  /* 200 */,
  /* 201 */,
  /* 202 */,
  /* 203 */,
  /* 204 */,
  /* 205 */,
  /* 206 */,
  /* 207 */,
  /* 208 */,
  /* 209 */,
  /* 210 */,
  /* 211 */,
  /* 212 */,
  /* 213 */,
  /* 214 */,
  /* 215 */,
  /* 216 */,
  /* 217 */,
  /* 218 */,
  /* 219 */,
  /* 220 */,
  /* 221 */,
  /* 222 */,
  /* 223 */,
  /* 224 */,
  /* 225 */,
  /* 226 */,
  /* 227 */,
  /* 228 */,
  /* 229 */,
  /* 230 */,
  /* 231 */,
  /* 232 */,
  /* 233 */,
  /* 234 */,
  /* 235 */,
  /* 236 */,
  /* 237 */,
  /* 238 */,
  /* 239 */,
  /* 240 */,
  /* 241 */,
  /* 242 */,
  /* 243 */,
  /* 244 */,
  /* 245 */,
  /* 246 */,
  /* 247 */,
  /* 248 */,
  /* 249 */,
  /* 250 */,
  /* 251 */,
  /* 252 */,
  /* 253 */,
  /* 254 */,
  /* 255 */,
  /* 256 */,
  /* 257 */,
  /* 258 */,
  /* 259 */,
  /* 260 */,
  /* 261 */
  /***/ (function(module, exports, __webpack_require__) {
  
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function (global, factory) {
    if (true) {
      !(__WEBPACK_AMD_DEFINE_ARRAY__ = [module, exports, __webpack_require__(107), __webpack_require__(143), __webpack_require__(155), __webpack_require__(133), __webpack_require__(66)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
  				__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  				(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  				__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
    } else if (typeof exports !== "undefined") {
      factory(module, exports, require('../../components/picker/picker.vue'), require('../../components/cascade-picker/cascade-picker.vue'), require('./api'), require('../picker/api'), require('../../common/locale'));
    } else {
      var mod = {
        exports: {}
      };
      factory(mod, mod.exports, global.picker, global.cascadePicker, global.api, global.api, global.locale);
      global.index = mod.exports;
    }
  })(this, function (module, exports, _picker, _cascadePicker, _api, _api3, _locale) {
    'use strict';
  
    Object.defineProperty(exports, "__esModule", {
      value: true
    });
  
    var _picker2 = _interopRequireDefault(_picker);
  
    var _cascadePicker2 = _interopRequireDefault(_cascadePicker);
  
    var _api2 = _interopRequireDefault(_api);
  
    var _api4 = _interopRequireDefault(_api3);
  
    var _locale2 = _interopRequireDefault(_locale);
  
    function _interopRequireDefault(obj) {
      return obj && obj.__esModule ? obj : {
        default: obj
      };
    }
  
    _cascadePicker2.default.install = function (Vue) {
      Vue.component(_picker2.default.name, _picker2.default);
      Vue.component(_cascadePicker2.default.name, _cascadePicker2.default);
      _locale2.default.install(Vue);
      (0, _api4.default)(Vue, _picker2.default);
      (0, _api2.default)(Vue, _cascadePicker2.default);
    };
  
    _cascadePicker2.default.Picker = _picker2.default;
  
    exports.default = _cascadePicker2.default;
    module.exports = exports['default'];
  });
  
  /***/ })
  /******/ ]);
  });