{"version":3,"sources":["../../../src/components/VCalendar/VCalendar.ts"],"names":[],"mappings":";;;AACA;AAKA;AACA,OAAO,YAAP,MAAyB,wBAAzB;AAEA;AACA,OAAO,KAAP,MAAkB,cAAlB;AACA,SACE,iBADF,EAEE,OAFF,EAGE,YAHF,EAME,cANF,EAOE,YAPF,EAQE,OARF,EASE,OATF,EAUE,aAVF,EAWE,eAXF,EAYE,aAZF,EAaE,cAbF,EAcE,eAdF,EAeE,aAfF,QAgBO,kBAhBP;AAkBA;AACA,OAAO,gBAAP,MAA6B,oBAA7B;AACA,OAAO,cAAP,MAA2B,kBAA3B;AACA,OAAO,eAAP,MAA4B,mBAA5B;AAUA;AACA,eAAe,aAAa,MAAb,CAAoB;AACjC,UAAM,YAD2B;AAGjC,wBACK,MAAM,QADX,EAEK,MAAM,KAFX,EAGK,MAAM,SAHX,CAHiC;AASjC,UAAM;AAAA,eAAO;AACX,uBAAW,IADA;AAEX,qBAAS;AAFE,SAAP;AAAA,KAT2B;AAcjC,cAAU;AACR,mBADQ,yBACG;AACT,mBAAO,eAAe,KAAK,KAApB,KACL,KAAK,WADA,IAEL,KAAK,KAAL,CAAW,KAFb;AAGD,SALO;AAMR,mBANQ,yBAMG;AACT,gBAAM,SAAS,KAAK,WAApB;AACA,gBAAI,YAAiB,KAArB;AACA,gBAAI,UAAU,KAAK,OAAnB;AACA,gBAAI,QAAQ,MAAZ;AACA,gBAAI,MAAM,MAAV;AACA,oBAAQ,KAAK,IAAb;AACE,qBAAK,OAAL;AACE,gCAAY,gBAAZ;AACA,4BAAQ,gBAAgB,MAAhB,CAAR;AACA,0BAAM,cAAc,MAAd,CAAN;AACA;AACF,qBAAK,MAAL;AACE,gCAAY,cAAZ;AACA,4BAAQ,KAAK,cAAL,CAAoB,MAApB,CAAR;AACA,0BAAM,KAAK,YAAL,CAAkB,MAAlB,CAAN;AACA,8BAAU,CAAV;AACA;AACF,qBAAK,KAAL;AACE,gCAAY,cAAZ;AACA,8BAAU,CAAV;AACA;AACF,qBAAK,MAAL;AACE,gCAAY,cAAZ;AACA,0BAAM,aAAa,cAAc,GAAd,CAAb,EAAiC,OAAjC,EAA0C,CAA1C,CAAN;AACA,oCAAgB,GAAhB;AACA,8BAAU,CAAV;AACA;AACF,qBAAK,eAAL;AACE,gCAAY,eAAZ;AACA,4BAAQ,KAAK,WAAL,IAAoB,MAA5B;AACA,0BAAM,KAAK,SAAX;AACA;AACF,qBAAK,cAAL;AACE,gCAAY,cAAZ;AACA,4BAAQ,KAAK,WAAL,IAAoB,MAA5B;AACA,0BAAM,KAAK,SAAX;AACA;AA/BJ;AAkCA,mBAAO,EAAE,oBAAF,EAAa,YAAb,EAAoB,QAApB,EAAyB,gBAAzB,EAAP;AACD;AA/CO,KAduB;AAgEjC,WAAO;AACL,qBAAa;AADR,KAhE0B;AAoEjC,aAAS;AACP,mBADO,yBACI;AAAA,+BACc,KAAK,WADnB;AAAA,gBACD,KADC,gBACD,KADC;AAAA,gBACM,GADN,gBACM,GADN;;AAET,gBAAI,UAAU,KAAK,SAAf,IAA4B,QAAQ,KAAK,OAA7C,EAAsD;AACpD,qBAAK,SAAL,GAAiB,KAAjB;AACA,qBAAK,OAAL,GAAe,GAAf;AACA,qBAAK,KAAL,CAAW,QAAX,EAAqB,EAAE,YAAF,EAAS,QAAT,EAArB;AACD;AACF,SARM;AASP,YATO,kBASS;AAAA,gBAAV,MAAU,uEAAD,CAAC;;AACd,gBAAM,QAAQ,cAAc,KAAK,WAAnB,CAAd;AACA,gBAAM,UAAU,SAAS,CAAzB;AACA,gBAAM,QAAQ,UAAU,OAAV,GAAoB,OAAlC;AACA,gBAAM,QAAQ,UAAU,iBAAV,GAA8B,OAA5C;AACA,gBAAI,QAAQ,UAAU,MAAV,GAAmB,CAAC,MAAhC;AAEA,mBAAO,EAAE,KAAF,IAAW,CAAlB,EAAqB;AACnB,wBAAQ,KAAK,IAAb;AACE,yBAAK,OAAL;AACE,8BAAM,GAAN,GAAY,KAAZ;AACA,8BAAM,KAAN;AACA;AACF,yBAAK,MAAL;AACE,qCAAa,KAAb,EAAoB,KAApB,EAA2B,YAA3B;AACA;AACF,yBAAK,KAAL;AACE,8BAAM,KAAN;AACA;AACF,yBAAK,MAAL;AACE,qCAAa,KAAb,EAAoB,KAApB,EAA2B,CAA3B;AACA;AAbJ;AAeD;AAED,0BAAc,KAAd;AACA,4BAAgB,KAAhB;AACA,2BAAe,KAAf,EAAsB,KAAK,KAAL,CAAW,GAAjC;AAEA,iBAAK,KAAL,CAAW,OAAX,EAAoB,MAAM,IAA1B;AACA,iBAAK,KAAL,CAAW,OAAX,EAAoB,KAApB;AACD,SAxCM;AAyCP,YAzCO,kBAyCS;AAAA,gBAAV,MAAU,uEAAD,CAAC;;AACd,iBAAK,IAAL,CAAU,MAAV;AACD,SA3CM;AA4CP,YA5CO,kBA4CS;AAAA,gBAAV,MAAU,uEAAD,CAAC;;AACd,iBAAK,IAAL,CAAU,CAAC,MAAX;AACD,SA9CM;AA+CP,eA/CO,mBA+CE,IA/CF,EA+C2B;AAAA,gBAAZ,KAAY,uEAAJ,IAAI;;AAChC,gBAAM,IAAI,KAAK,SAAL,CAAe,CAAf,CAAV;AACA,gBAAI,KAAK,EAAE,OAAX,EAAoB;AAClB,uBAAO,EAAE,OAAF,CAAU,IAAV,EAAgB,KAAhB,CAAP;AACD,aAFD,MAEO;AACL,uBAAO,KAAP;AACD;AACF,SAtDM;AAuDP,uBAvDO,2BAuDU,OAvDV,EAuDyB;AAC9B,gBAAM,IAAI,KAAK,SAAL,CAAe,CAAf,CAAV;AACA,gBAAI,KAAK,EAAE,eAAX,EAA4B;AAC1B,uBAAO,EAAE,eAAF,CAAkB,OAAlB,CAAP;AACD,aAFD,MAEO;AACL,uBAAO,CAAC,CAAR;AACD;AACF,SA9DM;AA+DP,oBA/DO,wBA+DO,IA/DP,EA+DkB;AACvB,gBAAM,IAAI,KAAK,SAAL,CAAe,CAAf,CAAV;AACA,gBAAI,KAAK,EAAE,YAAX,EAAyB;AACvB,uBAAO,EAAE,YAAF,CAAe,IAAf,CAAP;AACD,aAFD,MAEO;AACL,uBAAO,KAAP;AACD;AACF;AAtEM,KApEwB;AA6IjC,UA7IiC,kBA6IzB,CA7IyB,EA6IxB;AAAA;;AAAA,4BACoC,KAAK,WADzC;AAAA,YACC,KADD,iBACC,KADD;AAAA,YACQ,GADR,iBACQ,GADR;AAAA,YACa,OADb,iBACa,OADb;AAAA,YACsB,SADtB,iBACsB,SADtB;;AAGP,eAAO,EAAE,SAAF,EAAa;AAClB,yBAAa,YADK;AAElB,gCACK,KAAK,MADV;AAEE,uBAAO,MAAM,IAFf;AAGE,qBAAK,IAAI,IAHX;AAIE;AAJF,cAFkB;AAQlB,6BACK,KAAK,UADV;AAEE,8BAAc,mBAAC,GAAD,EAAoB;AAChC,wBAAI,MAAK,UAAL,CAAgB,OAAhB,CAAJ,EAA8B;AAC5B,8BAAK,KAAL,CAAW,OAAX,EAAoB,IAAI,IAAxB;AACD;AACD,wBAAI,MAAK,UAAL,CAAgB,YAAhB,CAAJ,EAAmC;AACjC,8BAAK,KAAL,CAAW,YAAX,EAAyB,GAAzB;AACD;AACF;AATH,cARkB;AAmBlB,yBAAa,KAAK;AAnBA,SAAb,CAAP;AAqBD;AArKgC,CAApB,CAAf","sourcesContent":["// Styles\n// import '../../stylus/components/_calendar-daily.styl'\n\n// Types\nimport { VNode, Component } from 'vue'\n\n// Mixins\nimport CalendarBase from './mixins/calendar-base'\n\n// Util\nimport props from './util/props'\nimport {\n  DAYS_IN_MONTH_MAX,\n  DAY_MIN,\n  DAYS_IN_WEEK,\n  VTimestamp,\n  VTime,\n  parseTimestamp,\n  relativeDays,\n  nextDay,\n  prevDay,\n  copyTimestamp,\n  updateFormatted,\n  updateWeekday,\n  updateRelative,\n  getStartOfMonth,\n  getEndOfMonth\n} from './util/timestamp'\n\n// Calendars\nimport VCalendarMonthly from './VCalendarMonthly'\nimport VCalendarDaily from './VCalendarDaily'\nimport VCalendarWeekly from './VCalendarWeekly'\n\n// Types\ninterface VCalendarRenderProps {\n  start: VTimestamp\n  end: VTimestamp\n  component: string | Component\n  maxDays: number\n}\n\n/* @vue/component */\nexport default CalendarBase.extend({\n  name: 'v-calendar',\n\n  props: {\n    ...props.calendar,\n    ...props.weeks,\n    ...props.intervals\n  },\n\n  data: () => ({\n    lastStart: null as VTimestamp | null,\n    lastEnd: null as VTimestamp | null\n  }),\n\n  computed: {\n    parsedValue (): VTimestamp {\n      return parseTimestamp(this.value) ||\n        this.parsedStart ||\n        this.times.today\n    },\n    renderProps (): VCalendarRenderProps {\n      const around = this.parsedValue\n      let component: any = 'div'\n      let maxDays = this.maxDays\n      let start = around\n      let end = around\n      switch (this.type) {\n        case 'month':\n          component = VCalendarMonthly\n          start = getStartOfMonth(around)\n          end = getEndOfMonth(around)\n          break\n        case 'week':\n          component = VCalendarDaily\n          start = this.getStartOfWeek(around)\n          end = this.getEndOfWeek(around)\n          maxDays = 7\n          break\n        case 'day':\n          component = VCalendarDaily\n          maxDays = 1\n          break\n        case '4day':\n          component = VCalendarDaily\n          end = relativeDays(copyTimestamp(end), nextDay, 4)\n          updateFormatted(end)\n          maxDays = 4\n          break\n        case 'custom-weekly':\n          component = VCalendarWeekly\n          start = this.parsedStart || around\n          end = this.parsedEnd\n          break\n        case 'custom-daily':\n          component = VCalendarDaily\n          start = this.parsedStart || around\n          end = this.parsedEnd\n          break\n      }\n\n      return { component, start, end, maxDays }\n    }\n  },\n\n  watch: {\n    renderProps: 'checkChange'\n  },\n\n  methods: {\n    checkChange (): void {\n      const { start, end } = this.renderProps\n      if (start !== this.lastStart || end !== this.lastEnd) {\n        this.lastStart = start\n        this.lastEnd = end\n        this.$emit('change', { start, end })\n      }\n    },\n    move (amount = 1): void {\n      const moved = copyTimestamp(this.parsedValue)\n      const forward = amount > 0\n      const mover = forward ? nextDay : prevDay\n      const limit = forward ? DAYS_IN_MONTH_MAX : DAY_MIN\n      let times = forward ? amount : -amount\n\n      while (--times >= 0) {\n        switch (this.type) {\n          case 'month':\n            moved.day = limit\n            mover(moved)\n            break\n          case 'week':\n            relativeDays(moved, mover, DAYS_IN_WEEK)\n            break\n          case 'day':\n            mover(moved)\n            break\n          case '4day':\n            relativeDays(moved, mover, 4)\n            break\n        }\n      }\n\n      updateWeekday(moved)\n      updateFormatted(moved)\n      updateRelative(moved, this.times.now)\n\n      this.$emit('input', moved.date)\n      this.$emit('moved', moved)\n    },\n    next (amount = 1): void {\n      this.move(amount)\n    },\n    prev (amount = 1): void {\n      this.move(-amount)\n    },\n    timeToY (time: VTime, clamp = true): number | false {\n      const c = this.$children[0] as any\n      if (c && c.timeToY) {\n        return c.timeToY(time, clamp)\n      } else {\n        return false\n      }\n    },\n    minutesToPixels (minutes: number): number {\n      const c = this.$children[0] as any\n      if (c && c.minutesToPixels) {\n        return c.minutesToPixels(minutes)\n      } else {\n        return -1\n      }\n    },\n    scrollToTime (time: VTime): boolean {\n      const c = this.$children[0] as any\n      if (c && c.scrollToTime) {\n        return c.scrollToTime(time)\n      } else {\n        return false\n      }\n    }\n  },\n\n  render (h): VNode {\n    const { start, end, maxDays, component } = this.renderProps\n\n    return h(component, {\n      staticClass: 'v-calendar',\n      props: {\n        ...this.$props,\n        start: start.date,\n        end: end.date,\n        maxDays\n      },\n      on: {\n        ...this.$listeners,\n        'click:date': (day: VTimestamp) => {\n          if (this.$listeners['input']) {\n            this.$emit('input', day.date)\n          }\n          if (this.$listeners['click:date']) {\n            this.$emit('click:date', day)\n          }\n        }\n      },\n      scopedSlots: this.$scopedSlots\n    })\n  }\n})\n"],"sourceRoot":""}