import { MILLISECONDS_A_DAY, MILLISECONDS_A_HOUR, MILLISECONDS_A_MINUTE, MILLISECONDS_A_SECOND, MILLISECONDS_A_WEEK, REGEX_FORMAT } from '../../constant';
							 | 
						|
								var MILLISECONDS_A_YEAR = MILLISECONDS_A_DAY * 365;
							 | 
						|
								var MILLISECONDS_A_MONTH = MILLISECONDS_A_YEAR / 12;
							 | 
						|
								var durationRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
							 | 
						|
								var unitToMS = {
							 | 
						|
								  years: MILLISECONDS_A_YEAR,
							 | 
						|
								  months: MILLISECONDS_A_MONTH,
							 | 
						|
								  days: MILLISECONDS_A_DAY,
							 | 
						|
								  hours: MILLISECONDS_A_HOUR,
							 | 
						|
								  minutes: MILLISECONDS_A_MINUTE,
							 | 
						|
								  seconds: MILLISECONDS_A_SECOND,
							 | 
						|
								  milliseconds: 1,
							 | 
						|
								  weeks: MILLISECONDS_A_WEEK
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var isDuration = function isDuration(d) {
							 | 
						|
								  return d instanceof Duration;
							 | 
						|
								}; // eslint-disable-line no-use-before-define
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								var $d;
							 | 
						|
								var $u;
							 | 
						|
								
							 | 
						|
								var wrapper = function wrapper(input, instance, unit) {
							 | 
						|
								  return new Duration(input, unit, instance.$l);
							 | 
						|
								}; // eslint-disable-line no-use-before-define
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								var prettyUnit = function prettyUnit(unit) {
							 | 
						|
								  return $u.p(unit) + "s";
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var isNegative = function isNegative(number) {
							 | 
						|
								  return number < 0;
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var roundNumber = function roundNumber(number) {
							 | 
						|
								  return isNegative(number) ? Math.ceil(number) : Math.floor(number);
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var absolute = function absolute(number) {
							 | 
						|
								  return Math.abs(number);
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var getNumberUnitFormat = function getNumberUnitFormat(number, unit) {
							 | 
						|
								  if (!number) {
							 | 
						|
								    return {
							 | 
						|
								      negative: false,
							 | 
						|
								      format: ''
							 | 
						|
								    };
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  if (isNegative(number)) {
							 | 
						|
								    return {
							 | 
						|
								      negative: true,
							 | 
						|
								      format: "" + absolute(number) + unit
							 | 
						|
								    };
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  return {
							 | 
						|
								    negative: false,
							 | 
						|
								    format: "" + number + unit
							 | 
						|
								  };
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								var Duration = /*#__PURE__*/function () {
							 | 
						|
								  function Duration(input, unit, locale) {
							 | 
						|
								    var _this = this;
							 | 
						|
								
							 | 
						|
								    this.$d = {};
							 | 
						|
								    this.$l = locale;
							 | 
						|
								
							 | 
						|
								    if (input === undefined) {
							 | 
						|
								      this.$ms = 0;
							 | 
						|
								      this.parseFromMilliseconds();
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    if (unit) {
							 | 
						|
								      return wrapper(input * unitToMS[prettyUnit(unit)], this);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    if (typeof input === 'number') {
							 | 
						|
								      this.$ms = input;
							 | 
						|
								      this.parseFromMilliseconds();
							 | 
						|
								      return this;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    if (typeof input === 'object') {
							 | 
						|
								      Object.keys(input).forEach(function (k) {
							 | 
						|
								        _this.$d[prettyUnit(k)] = input[k];
							 | 
						|
								      });
							 | 
						|
								      this.calMilliseconds();
							 | 
						|
								      return this;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    if (typeof input === 'string') {
							 | 
						|
								      var d = input.match(durationRegex);
							 | 
						|
								
							 | 
						|
								      if (d) {
							 | 
						|
								        var properties = d.slice(2);
							 | 
						|
								        var numberD = properties.map(function (value) {
							 | 
						|
								          return value != null ? Number(value) : 0;
							 | 
						|
								        });
							 | 
						|
								        this.$d.years = numberD[0];
							 | 
						|
								        this.$d.months = numberD[1];
							 | 
						|
								        this.$d.weeks = numberD[2];
							 | 
						|
								        this.$d.days = numberD[3];
							 | 
						|
								        this.$d.hours = numberD[4];
							 | 
						|
								        this.$d.minutes = numberD[5];
							 | 
						|
								        this.$d.seconds = numberD[6];
							 | 
						|
								        this.calMilliseconds();
							 | 
						|
								        return this;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return this;
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  var _proto = Duration.prototype;
							 | 
						|
								
							 | 
						|
								  _proto.calMilliseconds = function calMilliseconds() {
							 | 
						|
								    var _this2 = this;
							 | 
						|
								
							 | 
						|
								    this.$ms = Object.keys(this.$d).reduce(function (total, unit) {
							 | 
						|
								      return total + (_this2.$d[unit] || 0) * unitToMS[unit];
							 | 
						|
								    }, 0);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.parseFromMilliseconds = function parseFromMilliseconds() {
							 | 
						|
								    var $ms = this.$ms;
							 | 
						|
								    this.$d.years = roundNumber($ms / MILLISECONDS_A_YEAR);
							 | 
						|
								    $ms %= MILLISECONDS_A_YEAR;
							 | 
						|
								    this.$d.months = roundNumber($ms / MILLISECONDS_A_MONTH);
							 | 
						|
								    $ms %= MILLISECONDS_A_MONTH;
							 | 
						|
								    this.$d.days = roundNumber($ms / MILLISECONDS_A_DAY);
							 | 
						|
								    $ms %= MILLISECONDS_A_DAY;
							 | 
						|
								    this.$d.hours = roundNumber($ms / MILLISECONDS_A_HOUR);
							 | 
						|
								    $ms %= MILLISECONDS_A_HOUR;
							 | 
						|
								    this.$d.minutes = roundNumber($ms / MILLISECONDS_A_MINUTE);
							 | 
						|
								    $ms %= MILLISECONDS_A_MINUTE;
							 | 
						|
								    this.$d.seconds = roundNumber($ms / MILLISECONDS_A_SECOND);
							 | 
						|
								    $ms %= MILLISECONDS_A_SECOND;
							 | 
						|
								    this.$d.milliseconds = $ms;
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.toISOString = function toISOString() {
							 | 
						|
								    var Y = getNumberUnitFormat(this.$d.years, 'Y');
							 | 
						|
								    var M = getNumberUnitFormat(this.$d.months, 'M');
							 | 
						|
								    var days = +this.$d.days || 0;
							 | 
						|
								
							 | 
						|
								    if (this.$d.weeks) {
							 | 
						|
								      days += this.$d.weeks * 7;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    var D = getNumberUnitFormat(days, 'D');
							 | 
						|
								    var H = getNumberUnitFormat(this.$d.hours, 'H');
							 | 
						|
								    var m = getNumberUnitFormat(this.$d.minutes, 'M');
							 | 
						|
								    var seconds = this.$d.seconds || 0;
							 | 
						|
								
							 | 
						|
								    if (this.$d.milliseconds) {
							 | 
						|
								      seconds += this.$d.milliseconds / 1000;
							 | 
						|
								      seconds = Math.round(seconds * 1000) / 1000;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    var S = getNumberUnitFormat(seconds, 'S');
							 | 
						|
								    var negativeMode = Y.negative || M.negative || D.negative || H.negative || m.negative || S.negative;
							 | 
						|
								    var T = H.format || m.format || S.format ? 'T' : '';
							 | 
						|
								    var P = negativeMode ? '-' : '';
							 | 
						|
								    var result = P + "P" + Y.format + M.format + D.format + T + H.format + m.format + S.format;
							 | 
						|
								    return result === 'P' || result === '-P' ? 'P0D' : result;
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.toJSON = function toJSON() {
							 | 
						|
								    return this.toISOString();
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.format = function format(formatStr) {
							 | 
						|
								    var str = formatStr || 'YYYY-MM-DDTHH:mm:ss';
							 | 
						|
								    var matches = {
							 | 
						|
								      Y: this.$d.years,
							 | 
						|
								      YY: $u.s(this.$d.years, 2, '0'),
							 | 
						|
								      YYYY: $u.s(this.$d.years, 4, '0'),
							 | 
						|
								      M: this.$d.months,
							 | 
						|
								      MM: $u.s(this.$d.months, 2, '0'),
							 | 
						|
								      D: this.$d.days,
							 | 
						|
								      DD: $u.s(this.$d.days, 2, '0'),
							 | 
						|
								      H: this.$d.hours,
							 | 
						|
								      HH: $u.s(this.$d.hours, 2, '0'),
							 | 
						|
								      m: this.$d.minutes,
							 | 
						|
								      mm: $u.s(this.$d.minutes, 2, '0'),
							 | 
						|
								      s: this.$d.seconds,
							 | 
						|
								      ss: $u.s(this.$d.seconds, 2, '0'),
							 | 
						|
								      SSS: $u.s(this.$d.milliseconds, 3, '0')
							 | 
						|
								    };
							 | 
						|
								    return str.replace(REGEX_FORMAT, function (match, $1) {
							 | 
						|
								      return $1 || String(matches[match]);
							 | 
						|
								    });
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.as = function as(unit) {
							 | 
						|
								    return this.$ms / unitToMS[prettyUnit(unit)];
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.get = function get(unit) {
							 | 
						|
								    var base = this.$ms;
							 | 
						|
								    var pUnit = prettyUnit(unit);
							 | 
						|
								
							 | 
						|
								    if (pUnit === 'milliseconds') {
							 | 
						|
								      base %= 1000;
							 | 
						|
								    } else if (pUnit === 'weeks') {
							 | 
						|
								      base = roundNumber(base / unitToMS[pUnit]);
							 | 
						|
								    } else {
							 | 
						|
								      base = this.$d[pUnit];
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return base || 0; // a === 0 will be true on both 0 and -0
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.add = function add(input, unit, isSubtract) {
							 | 
						|
								    var another;
							 | 
						|
								
							 | 
						|
								    if (unit) {
							 | 
						|
								      another = input * unitToMS[prettyUnit(unit)];
							 | 
						|
								    } else if (isDuration(input)) {
							 | 
						|
								      another = input.$ms;
							 | 
						|
								    } else {
							 | 
						|
								      another = wrapper(input, this).$ms;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return wrapper(this.$ms + another * (isSubtract ? -1 : 1), this);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.subtract = function subtract(input, unit) {
							 | 
						|
								    return this.add(input, unit, true);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.locale = function locale(l) {
							 | 
						|
								    var that = this.clone();
							 | 
						|
								    that.$l = l;
							 | 
						|
								    return that;
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.clone = function clone() {
							 | 
						|
								    return wrapper(this.$ms, this);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.humanize = function humanize(withSuffix) {
							 | 
						|
								    return $d().add(this.$ms, 'ms').locale(this.$l).fromNow(!withSuffix);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.valueOf = function valueOf() {
							 | 
						|
								    return this.asMilliseconds();
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.milliseconds = function milliseconds() {
							 | 
						|
								    return this.get('milliseconds');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asMilliseconds = function asMilliseconds() {
							 | 
						|
								    return this.as('milliseconds');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.seconds = function seconds() {
							 | 
						|
								    return this.get('seconds');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asSeconds = function asSeconds() {
							 | 
						|
								    return this.as('seconds');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.minutes = function minutes() {
							 | 
						|
								    return this.get('minutes');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asMinutes = function asMinutes() {
							 | 
						|
								    return this.as('minutes');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.hours = function hours() {
							 | 
						|
								    return this.get('hours');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asHours = function asHours() {
							 | 
						|
								    return this.as('hours');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.days = function days() {
							 | 
						|
								    return this.get('days');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asDays = function asDays() {
							 | 
						|
								    return this.as('days');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.weeks = function weeks() {
							 | 
						|
								    return this.get('weeks');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asWeeks = function asWeeks() {
							 | 
						|
								    return this.as('weeks');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.months = function months() {
							 | 
						|
								    return this.get('months');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asMonths = function asMonths() {
							 | 
						|
								    return this.as('months');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.years = function years() {
							 | 
						|
								    return this.get('years');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  _proto.asYears = function asYears() {
							 | 
						|
								    return this.as('years');
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  return Duration;
							 | 
						|
								}();
							 | 
						|
								
							 | 
						|
								var manipulateDuration = function manipulateDuration(date, duration, k) {
							 | 
						|
								  return date.add(duration.years() * k, 'y').add(duration.months() * k, 'M').add(duration.days() * k, 'd').add(duration.hours() * k, 'h').add(duration.minutes() * k, 'm').add(duration.seconds() * k, 's').add(duration.milliseconds() * k, 'ms');
							 | 
						|
								};
							 | 
						|
								
							 | 
						|
								export default (function (option, Dayjs, dayjs) {
							 | 
						|
								  $d = dayjs;
							 | 
						|
								  $u = dayjs().$utils();
							 | 
						|
								
							 | 
						|
								  dayjs.duration = function (input, unit) {
							 | 
						|
								    var $l = dayjs.locale();
							 | 
						|
								    return wrapper(input, {
							 | 
						|
								      $l: $l
							 | 
						|
								    }, unit);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  dayjs.isDuration = isDuration;
							 | 
						|
								  var oldAdd = Dayjs.prototype.add;
							 | 
						|
								  var oldSubtract = Dayjs.prototype.subtract;
							 | 
						|
								
							 | 
						|
								  Dayjs.prototype.add = function (value, unit) {
							 | 
						|
								    if (isDuration(value)) {
							 | 
						|
								      return manipulateDuration(this, value, 1);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return oldAdd.bind(this)(value, unit);
							 | 
						|
								  };
							 | 
						|
								
							 | 
						|
								  Dayjs.prototype.subtract = function (value, unit) {
							 | 
						|
								    if (isDuration(value)) {
							 | 
						|
								      return manipulateDuration(this, value, -1);
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    return oldSubtract.bind(this)(value, unit);
							 | 
						|
								  };
							 | 
						|
								});
							 |