{"version":3,"file":"googlproxer-ion-range-calendar.mjs","sources":["../../../projects/ion-range-calendar/src/lib/config.ts","../../../projects/ion-range-calendar/src/lib/services/calendar-options.provider.ts","../../../projects/ion-range-calendar/src/lib/services/ion-range-calendar.service.ts","../../../projects/ion-range-calendar/src/lib/components/calendar-week/calendar-week.component.ts","../../../projects/ion-range-calendar/src/lib/components/calendar-week/calendar-week-component.html","../../../projects/ion-range-calendar/src/lib/components/month/month.component.ts","../../../projects/ion-range-calendar/src/lib/components/month/month.component.html","../../../projects/ion-range-calendar/src/lib/components/calendar/calendar.modal.ts","../../../projects/ion-range-calendar/src/lib/components/calendar/calendar.modal.html","../../../projects/ion-range-calendar/src/lib/components/month-picker/month-picker.component.ts","../../../projects/ion-range-calendar/src/lib/components/month-picker/month-picker.component.html","../../../projects/ion-range-calendar/src/lib/components/ion-range-calendar/ion-range-calendar.component.ts","../../../projects/ion-range-calendar/src/lib/components/ion-range-calendar/ion-range-calendar.component.html","../../../projects/ion-range-calendar/src/public-api.ts","../../../projects/ion-range-calendar/src/googlproxer-ion-range-calendar.ts"],"sourcesContent":["export const defaults = {\n  DATE_FORMAT: 'yyyy-MM-dd',\n  COLOR: 'primary',\n  WEEKS_FORMAT: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n  MONTH_FORMAT: ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { CalendarModalOptions } from '../calendar.types';\n\nexport const DEFAULT_CALENDAR_OPTIONS = new InjectionToken<CalendarModalOptions>('DEFAULT_CALENDAR_MODAL_OPTIONS');\n","import { inject, Injectable } from '@angular/core';\n\nimport { addDays, addMonths, format, getDaysInMonth, isAfter, isBefore, isSameDay, isToday, isWithinInterval, subDays } from 'date-fns';\n\nimport {\n  CalendarDay,\n  CalendarModalOptions,\n  CalendarMonth,\n  CalendarOriginal,\n  CalendarResult,\n  DayConfig,\n} from '../calendar.types';\n\nimport { defaults } from '../config';\n\nimport { DEFAULT_CALENDAR_OPTIONS } from './calendar-options.provider';\n\n@Injectable({ providedIn: 'root' })\nexport class IonRangeCalendarService {\n\n  public opts: CalendarModalOptions;\n\n  private readonly defaultOpts = inject(DEFAULT_CALENDAR_OPTIONS, { optional: true });\n\n  readonly DEFAULT_STEP = 12;\n\n  safeOpt(calendarOptions: Partial<CalendarModalOptions> = {}): CalendarModalOptions {\n    const _disableWeeks: number[] = [];\n    const _daysConfig: DayConfig[] = [];\n    const {\n      to = 0,\n      weekStart = 0,\n      step = this.DEFAULT_STEP,\n      cssClass = '',\n      closeLabel = 'CANCEL',\n      closeTitle = '',\n      doneLabel = 'DONE',\n      doneTitle = '',\n      clearLabel = 'CLEAR',\n      clearTitle = '',\n      monthFormat = 'MMM yyyy',\n      title = 'CALENDAR',\n      defaultTitle = '',\n      defaultSubtitle = '',\n      autoDone = false,\n      canBackwardsSelected = false,\n      closeIcon = false,\n      doneIcon = false,\n      clearIcon = false,\n      isSaveHistory = false,\n      pickMode = 'single',\n      color = defaults.COLOR,\n      weekdays = defaults.WEEKS_FORMAT,\n      daysConfig = _daysConfig,\n      disableWeeks = _disableWeeks,\n      showAdjacentMonthDay = true,\n      defaultEndDateToStartDate = true,\n      maxRange = 0,\n    } = { ...this.defaultOpts, ...calendarOptions };\n\n    let from = this.defaultOpts?.from || calendarOptions.from || new Date();\n\n    //  if from is not provided, but a default range is, set from to the default range from\n    if (typeof calendarOptions.from === 'undefined' && calendarOptions.defaultDateRange) {\n      from = subDays(new Date(calendarOptions.defaultDateRange.from), 1);\n    }\n\n    //  default scroll is either provided, inferred from the provided default date range from, the provided from, or today\n    let defaultScrollTo = calendarOptions.defaultScrollTo;\n    if (!defaultScrollTo) {\n      if (calendarOptions.defaultDateRange) {\n        defaultScrollTo = new Date(calendarOptions.defaultDateRange.from);\n      } else {\n        defaultScrollTo = from ? new Date(from) : new Date();\n      }\n    }\n\n    this.opts = {\n      from,\n      to,\n      pickMode,\n      autoDone,\n      color,\n      cssClass,\n      weekStart,\n      closeLabel,\n      closeIcon,\n      closeTitle,\n      doneLabel,\n      doneIcon,\n      doneTitle,\n      clearLabel,\n      clearIcon,\n      clearTitle,\n      canBackwardsSelected,\n      isSaveHistory,\n      disableWeeks,\n      monthFormat,\n      title,\n      weekdays,\n      daysConfig,\n      step,\n      defaultTitle,\n      defaultSubtitle,\n      defaultScrollTo,\n      defaultDate: calendarOptions.defaultDate || null,\n      defaultDates: calendarOptions.defaultDates || null,\n      defaultDateRange: calendarOptions.defaultDateRange || null,\n      showAdjacentMonthDay,\n      defaultEndDateToStartDate,\n      maxRange,\n    };\n    return this.opts;\n  }\n\n  createOriginalCalendar(time: number): CalendarOriginal {\n    const date = new Date(time);\n    const year = date.getFullYear();\n    const month = date.getMonth();\n    const firstWeek = new Date(year, month, 1).getDay();\n    //  get the number of days in the month of the provided time\n    const howManyDays = getDaysInMonth(date);\n    return {\n      year,\n      month,\n      firstWeek,\n      howManyDays,\n      time: new Date(year, month, 1).getTime(),\n      date: new Date(time),\n    };\n  }\n\n  findDayConfig(day: Date, opt: CalendarModalOptions): DayConfig | undefined {\n    if (opt.daysConfig && opt.daysConfig.length <= 0) return null;\n    return opt.daysConfig?.find(n => isSameDay(day, n.date));\n  }\n\n  createCalendarDay(time: number, opt: CalendarModalOptions, month?: number): CalendarDay {\n    const _time = new Date(time);\n    const date = new Date(time);\n    const today = isToday(date);\n    const dayConfig = this.findDayConfig(_time, opt);\n    const _rangeBeg = new Date(opt.from);\n    const _rangeEnd = new Date(opt.to);\n    const _hasBeg = !!_rangeBeg.valueOf();\n    const _hasEnd = !!_rangeEnd.valueOf();\n    let isInRange = true;\n    const disableWeeks = opt.disableWeeks && opt.disableWeeks.indexOf(_time.getDay()) !== -1;\n\n    if (_hasBeg && _hasEnd) {\n      //  both from and to are set, check if time is in between, unless backwards selection is allowed, then check if time is before to\n      if (opt.canBackwardsSelected) {\n        isInRange = isBefore(_time, _rangeEnd);\n      } else {\n        isInRange = isWithinInterval(_time, { start: _rangeBeg, end: _rangeEnd, });\n      }\n    } else if (_hasBeg && !_hasEnd && !opt.canBackwardsSelected) {\n      // if only from is set, check if time is after from, unless backwards selection is allowed\n      isInRange = isAfter(_time, _rangeBeg);\n    } else if (!_hasBeg && _hasEnd) {\n      // if only to is set, check if time is before to\n      isInRange = isBefore(_time, _rangeEnd);\n    }\n    //  if both from and to are not set, then all days are in range\n\n    let _disable = false;\n\n    if (dayConfig && typeof dayConfig.disable === 'boolean') {\n      _disable = dayConfig.disable;\n    } else {\n      _disable = disableWeeks || !isInRange;\n    }\n\n    let title = new Date(time).getDate().toString();\n    if (dayConfig && dayConfig.title) {\n      title = dayConfig.title;\n    } else if (opt.defaultTitle) {\n      title = opt.defaultTitle;\n    }\n    let subTitle = '';\n    if (dayConfig && dayConfig.subTitle) {\n      subTitle = dayConfig.subTitle;\n    } else if (opt.defaultSubtitle) {\n      subTitle = opt.defaultSubtitle;\n    }\n\n    return {\n      time,\n      isToday: today,\n      title,\n      subTitle,\n      isLastMonth: typeof month === 'number' ? date.getMonth() < month : false,\n      isNextMonth: typeof month === 'number' ? date.getMonth() > month : false,\n      marked: dayConfig ? dayConfig.marked || false : false,\n      cssClass: dayConfig ? dayConfig.cssClass || '' : '',\n      disable: _disable,\n      isFirst: date.getDate() === 1,\n      isLast: date.getDate() === getDaysInMonth(date),\n    };\n  }\n\n  createCalendarMonth(original: CalendarOriginal, opt: CalendarModalOptions): CalendarMonth {\n    const days: CalendarDay[] = new Array(6).fill(null);\n    const len = original.howManyDays;\n    for (let i = original.firstWeek; i < len + original.firstWeek; i++) {\n      const itemTime = new Date(original.year, original.month, i - original.firstWeek + 1).getTime();\n      days[i] = this.createCalendarDay(itemTime, opt);\n    }\n\n    const weekStart = opt.weekStart;\n\n    if (weekStart === 1) {\n      if (days[0] === null) {\n        days.shift();\n      } else {\n        days.unshift(...new Array(6).fill(null));\n      }\n    }\n\n    if (opt.showAdjacentMonthDay) {\n      const _booleanMap = days.map(e => !!e);\n      const thisMonth = new Date(original.time).getMonth();\n      let startOffsetIndex = _booleanMap.indexOf(true) - 1;\n      let endOffsetIndex = _booleanMap.lastIndexOf(true) + 1;\n      for (startOffsetIndex; startOffsetIndex >= 0; startOffsetIndex--) {\n        const dayBefore = subDays(days[startOffsetIndex + 1].time, 1);\n        days[startOffsetIndex] = this.createCalendarDay(dayBefore.valueOf(), opt, thisMonth);\n      }\n\n      if (!(_booleanMap.length % 7 === 0 && _booleanMap[_booleanMap.length - 1])) {\n        for (endOffsetIndex; endOffsetIndex < days.length + (endOffsetIndex % 7); endOffsetIndex++) {\n          const dayAfter = addDays(days[endOffsetIndex - 1].time, 1);\n          days[endOffsetIndex] = this.createCalendarDay(dayAfter.valueOf(), opt, thisMonth);\n        }\n      }\n    }\n\n    return {\n      days,\n      original: original,\n    };\n  }\n\n  createMonthsByPeriod(startTime: number, monthsNum: number, opt: CalendarModalOptions): CalendarMonth[] {\n    const _array: CalendarMonth[] = [];\n\n    const _start = new Date(startTime);\n    const _startMonth = new Date(_start.getFullYear(), _start.getMonth(), 1).getTime();\n\n    for (let i = 0; i < monthsNum; i++) {\n      const time = addMonths(_startMonth, i).valueOf();\n      const originalCalendar = this.createOriginalCalendar(time);\n      _array.push(this.createCalendarMonth(originalCalendar, opt));\n    }\n\n    return _array;\n  }\n\n  wrapResult(original: CalendarDay[], pickMode: string) {\n    let result: CalendarResult[] | CalendarResult | { from: CalendarResult; to: CalendarResult } | CalendarDay[];\n    switch (pickMode) {\n      case 'single':\n        result = this.multiFormat(original[0].time);\n        break;\n      case 'range':\n        result = {\n          from: this.multiFormat(original[0].time),\n          to: this.multiFormat((original[1] || original[0]).time),\n        };\n        break;\n      case 'multi':\n        result = original.map(e => this.multiFormat(e.time));\n        break;\n      default:\n        result = original;\n    }\n    return result;\n  }\n\n  multiFormat(time: number): CalendarResult {\n    const _date = new Date(time);\n    return {\n      time: _date.valueOf(),\n      unix: Math.floor(_date.valueOf() / 1000),\n      dateObj: _date,\n      string: format(_date, defaults.DATE_FORMAT),\n      years: _date.getFullYear(),\n      months: _date.getMonth() + 1,\n      date: _date.getDate(),\n    };\n  }\n}\n","import { Component, computed, input } from '@angular/core';\nimport { defaults } from '../../config';\n\nimport { IonToolbar } from '@ionic/angular/standalone';\n\n@Component({\n  selector: 'ion-range-calendar-week',\n  styleUrls: ['./calendar-week.component.scss'],\n  templateUrl: 'calendar-week-component.html',\n  imports: [\n    IonToolbar,\n  ]\n})\nexport class CalendarWeekComponent {\n\n  readonly color = input(defaults.COLOR);\n\n  readonly weekArray = input(defaults.WEEKS_FORMAT, { transform: this.setWeekArray });\n\n  readonly weekStart = input(0, { transform: this.setWeekStart });\n\n  readonly displayWeekArray = computed<string[]>(() => {\n    if (this.weekStart() === 1) {\n      const cacheWeekArray = [...this.weekArray()];\n      cacheWeekArray.push(cacheWeekArray.shift());\n      return [...cacheWeekArray];\n    }\n    return this.weekArray();\n  });\n\n  private setWeekArray(value: string[]): string[] {\n    if (value && value.length === 7) {\n      return [...value];\n    }\n    return defaults.WEEKS_FORMAT;\n  }\n\n  private setWeekStart(value: number): number {\n    // return 0 or 1, default 0\n    return value === 1 ? 1 : 0;\n  }\n\n}\n","<ion-toolbar [class]=\"'week-toolbar ' + color()\" no-border-top>\n  <ul [class]=\"'week-title ' + color()\">\n    @for (w of displayWeekArray(); track $index) {\n    <li>{{ w }}</li>\n    }\n  </ul>\n</ion-toolbar>\n","import { AfterViewInit, ChangeDetectorRef, Component, forwardRef, inject, input, output, Provider } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { IonRangeCalendarService } from '../../services/ion-range-calendar.service';\n\nimport { CalendarDay, CalendarMonth, ControlValueType, PickMode } from '../../calendar.types';\n\nimport { defaults } from '../../config';\n\nimport { addDays, isAfter, startOfDay, subDays } from 'date-fns';\n\nexport const MONTH_VALUE_ACCESSOR: Provider = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => MonthComponent),\n  multi: true,\n};\n\n@Component({\n  selector: 'ion-range-calendar-month',\n  providers: [MONTH_VALUE_ACCESSOR],\n  styleUrls: ['./month.component.scss'],\n  templateUrl: 'month.component.html',\n  host: { '[class.component-mode]': 'componentMode()' },\n  standalone: true,\n})\nexport class MonthComponent implements ControlValueAccessor, AfterViewInit {\n\n  readonly componentMode = input(false);\n  readonly month = input<CalendarMonth>();\n  readonly pickMode = input<PickMode>();\n  readonly isSaveHistory = input<boolean>(undefined);\n  readonly readonly = input(false);\n  readonly color = input<string>(defaults.COLOR);\n\n  ionChange = output<CalendarDay[]>();\n  select = output<CalendarDay>();\n  selectStart = output<CalendarDay>();\n  selectEnd = output<CalendarDay>();\n\n  _date: (CalendarDay | null)[] = [null, null];\n  _isInit = false;\n  _onChanged: (event: ControlValueType) => void;\n  _onTouched: (event: ControlValueType) => void;\n\n  readonly DAY_DATE_FORMAT = 'MMMM dd, yyyy';\n\n  get _isRange(): boolean {\n    return this.pickMode() === 'range';\n  }\n\n  public ref = inject(ChangeDetectorRef);\n  public service = inject(IonRangeCalendarService);\n\n  ngAfterViewInit(): void {\n    this._isInit = true;\n  }\n\n  get value() {\n    return this._date;\n  }\n\n  writeValue(obj: CalendarDay[]): void {\n    if (Array.isArray(obj)) {\n      this._date = obj;\n    }\n  }\n\n  registerOnChange(fn: (event: ControlValueType) => void): void {\n    this._onChanged = fn;\n  }\n\n  registerOnTouched(fn: (event: ControlValueType) => void): void {\n    this._onTouched = fn;\n  }\n\n  isEndSelection(day: CalendarDay): boolean {\n    if (!day) return false;\n    if (this.pickMode() !== 'range' || !this._isInit || this._date[1] === null) {\n      return false;\n    }\n\n    return this._date[1].time === day.time;\n  }\n\n  getDayLabel(day: CalendarDay) {\n    return new Date(day.time);\n  }\n\n  isBetween(day: CalendarDay): boolean {\n    if (!day) return false;\n\n    if (this.pickMode() !== 'range' || !this._isInit) {\n      return false;\n    }\n\n    if (this._date[0] === null || this._date[1] === null) {\n      return false;\n    }\n\n    return day.time < this._date[1].time && day.time > this._date[0].time;\n  }\n\n  isStartSelection(day: CalendarDay): boolean {\n    if (!day) return false;\n    if (this.pickMode() !== 'range' || !this._isInit || this._date[0] === null) {\n      return false;\n    }\n\n    return this._date[0].time === day.time && this._date[1] !== null;\n  }\n\n  isSelected(time: number): boolean {\n    if (Array.isArray(this._date)) {\n      if (this.pickMode() !== 'multi') {\n        if (this._date[0] !== null) {\n          return time === this._date[0].time;\n        }\n\n        if (this._date[1] !== null) {\n          return time === this._date[1].time;\n        }\n      } else {\n        return this._date.findIndex(e => e !== null && e.time === time) !== -1;\n      }\n    }\n    return false;\n  }\n\n  onSelected(item: CalendarDay): void {\n    if (this.readonly()) return;\n    this.select.emit(item);\n    if (this.pickMode() === 'single') {\n      this._date[0] = item;\n      this.ionChange.emit(this._date);\n      return;\n    }\n\n    if (this.pickMode() === 'range') {\n      // max range as days in milliseconds\n      const maxRange = (this.service.opts.maxRange - 1) * 86400000;\n      // if start not selected, set to this day\n      if (this._date[0] === null) {\n        this._date[0] = Object.assign({}, item);\n        this.selectStart.emit(this._date[0]);\n        // if end not selected, set to this day\n      } else if (this._date[1] === null) {\n        //  if start is before this day, set end to this day\n        if (this._date[0].time < item.time) {\n          this._date[1] = Object.assign({}, item);\n          this.selectEnd.emit(this._date[1]);\n          this.adjustStart(maxRange);\n          // if start is after this day, set end to start, and start to this day\n        } else {\n          this._date[1] = this._date[0];\n          this.selectEnd.emit(this._date[0]);\n          this._date[0] = Object.assign({}, item);\n          this.selectStart.emit(this._date[0]);\n          this.adjustEnd(maxRange);\n        }\n        //  if start is after this day, set start to this day\n      } else if (this._date[0].time > item.time) {\n        this._date[0] = Object.assign({}, item);\n        this.selectStart.emit(this._date[0]);\n        this.adjustEnd(maxRange);\n        // if end is before this day, set end to this day\n      } else if (this._date[1].time < item.time) {\n        this._date[1] = Object.assign({}, item);\n        this.selectEnd.emit(this._date[1]);\n        this.adjustStart(maxRange);\n        // if start is this day, set end to this day\n      } else if (this._date[0].time === item.time) {\n        this._date[1] = Object.assign({}, item);\n        this.selectEnd.emit(this._date[1]);\n        this.adjustEnd(maxRange);\n        // if end is this day, set start to this day\n      } else if (this._date[1].time === item.time) {\n        this._date[0] = Object.assign({}, item);\n        this.selectStart.emit(this._date[0]);\n        this.adjustStart(maxRange);\n        //  else set end to null and start to this day\n      } else {\n        //  bump selected range to new range starting from selected to selected plus existing range\n        const range = (this._date[1].time - this._date[0].time) / 86400000;\n        this._date[0] = Object.assign({}, item);\n        this.selectStart.emit(this._date[0]);\n        let end = addDays(this._date[0].time, range);\n        //  if end is after service.opts.to, set end to service.opts.to\n        if (isAfter(end, this.service.opts.to)) end = startOfDay(this.service.opts.to);\n        this._date[1].time = +end;\n        this.selectEnd.emit(this._date[1]);\n      }\n\n      this.ionChange.emit(this._date);\n      return;\n    }\n\n    if (this.pickMode() === 'multi') {\n      const index = this._date.findIndex(e => e !== null && e.time === item.time);\n\n      if (index === -1) {\n        this._date.push(item);\n      } else {\n        this._date.splice(index, 1);\n      }\n      this.ionChange.emit(this._date.filter(e => e !== null));\n    }\n  }\n\n\n  // if max range and end minus max range is greater than start, set start to end minus max range\n  private adjustStart(maxRange: number) {\n    if (maxRange > 0 && this._date[1].time - maxRange > this._date[0].time) {\n      this._date[0].time = +subDays(this._date[1].time, this.service.opts.maxRange - 1);\n      this.selectStart.emit(this._date[0]);\n    }\n  }\n\n  //  if max range and start plus max range is less than end, set end to start plus max range\n  private adjustEnd(maxRange: number) {\n    if (maxRange > 0 && this._date[0].time + maxRange < this._date[1].time) {\n      this._date[1].time = +addDays(this._date[0].time, this.service.opts.maxRange - 1);\n      this.selectEnd.emit(this._date[1]);\n    }\n  }\n}\n","<div [class]=\"color()\">\n  @if (!_isRange) {\n\n  <div class=\"days-box\">\n    @for (day of month().days; track $index) {\n\n    <div class=\"days\">\n      @if (day) {\n\n      <button type='button' [class]=\"'days-btn ' + day.cssClass\" [class.today]=\"day.isToday\" (click)=\"onSelected(day)\"\n        [class.marked]=\"day.marked\" [class.last-month-day]=\"day.isLastMonth\" [class.next-month-day]=\"day.isNextMonth\"\n        [class.on-selected]=\"isSelected((day ? day.time : $index))\" [disabled]=\"day.disable\">\n        <p>{{ day.title }}</p>\n        @if (day.subTitle) {\n        <small>{{ day?.subTitle }}</small>\n        }\n      </button>\n\n      }\n    </div>\n\n    }\n  </div>\n\n  } @else {\n\n  <div class=\"days-box\">\n    @for (day of month().days; track $index) {\n\n    <div class=\"days\" [class.startSelection]=\"isStartSelection(day)\" [class.endSelection]=\"isEndSelection(day)\"\n      [class.is-first-wrap]=\"day?.isFirst\" [class.is-last-wrap]=\"day?.isLast\" [class.between]=\"isBetween(day)\">\n      @if (day) {\n\n      <button type='button' [class]=\"'days-btn ' + day.cssClass\" [class.today]=\"day.isToday\" (click)=\"onSelected(day)\"\n        [class.marked]=\"day.marked\" [class.last-month-day]=\"day.isLastMonth\" [class.next-month-day]=\"day.isNextMonth\"\n        [class.is-first]=\"day.isFirst\" [class.is-last]=\"day.isLast\"\n        [class.on-selected]=\"isSelected((day ? day.time : $index))\" [disabled]=\"day.disable\">\n        <p>{{ day.title }}</p>\n        @if (day.subTitle) {\n        <small>{{ day?.subTitle }}</small>\n        }\n      </button>\n\n      }\n\n    </div>\n\n    }\n  </div>\n\n  }\n\n\n</div>\n","import { NgClass } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  OnInit,\n  Renderer2,\n  input,\n  viewChild\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport {\n  IonButton,\n  IonButtons,\n  IonContent,\n  IonHeader,\n  IonIcon,\n  IonInfiniteScroll,\n  IonInfiniteScrollContent,\n  IonLabel,\n  IonTitle,\n  IonToolbar,\n  ModalController,\n} from '@ionic/angular/standalone';\nimport { IonContentCustomEvent, IonInfiniteScrollCustomEvent, ScrollDetail } from '@ionic/core';\nimport { addIcons } from 'ionicons';\nimport { checkmark, close, refresh } from 'ionicons/icons';\n\nimport { CalendarDay, CalendarModalOptions, CalendarMonth, DefaultDate } from '../../calendar.types';\n\nimport { IonRangeCalendarService } from '../../services/ion-range-calendar.service';\n\nimport { addMonths, differenceInMonths, format, isAfter, startOfDay, subMonths } from 'date-fns';\n\nimport { CalendarWeekComponent } from '../calendar-week/calendar-week.component';\nimport { MonthComponent } from '../month/month.component';\n\nconst NUM_OF_MONTHS_TO_CREATE = 3;\n\n@Component({\n  selector: 'ion-range-calendar-modal',\n  styleUrls: ['./calendar.modal.scss'],\n  templateUrl: 'calendar.modal.html',\n  imports: [\n    CalendarWeekComponent,\n    NgClass,\n    MonthComponent,\n    FormsModule,\n    IonHeader,\n    IonToolbar,\n    IonButtons,\n    IonButton,\n    IonLabel,\n    IonIcon,\n    IonTitle,\n    IonContent,\n    IonInfiniteScroll,\n    IonInfiniteScrollContent,\n  ],\n  providers: [\n    IonRangeCalendarService,\n  ]\n})\nexport class CalendarModalComponent implements OnInit, AfterViewInit {\n\n  readonly options = input<CalendarModalOptions>({});\n\n  readonly content = viewChild(IonContent);\n  readonly monthsEle = viewChild<ElementRef>('months');\n\n  @HostBinding('class.ion-page') ionPage = true;\n\n  datesTemp: CalendarDay[] = [null, null];\n  calendarMonths: CalendarMonth[];\n  step: number;\n  showYearPicker: boolean;\n  year: number;\n  years: number[];\n  _scrollLock = true;\n  _d: CalendarModalOptions;\n  actualFirstTime: number;\n\n  constructor(\n    private _renderer: Renderer2,\n    public _elementRef: ElementRef,\n    public modalCtrl: ModalController,\n    public ref: ChangeDetectorRef,\n    public calSvc: IonRangeCalendarService\n  ) {\n    addIcons({\n      close,\n      refresh,\n      checkmark,\n    });\n  }\n\n  ngOnInit(): void {\n    this.init();\n    this.initDefaultDate();\n  }\n\n  ngAfterViewInit(): void {\n    this.findCssClass();\n    if (this._d.canBackwardsSelected) this.backwardsMonth();\n    this.scrollToDefaultDate();\n  }\n\n  init(): void {\n    this._d = this.calSvc.safeOpt(this.options());\n    this._d.showAdjacentMonthDay = false;\n    this.step = this._d.step;\n    if (this.step < this.calSvc.DEFAULT_STEP) {\n      this.step = this.calSvc.DEFAULT_STEP;\n    }\n\n    this.calendarMonths = this.calSvc.createMonthsByPeriod(\n      new Date(this._d.defaultScrollTo || this._d.from).valueOf(),\n      this.step,\n      this._d\n    );\n  }\n\n  initDefaultDate(): void {\n    const { pickMode, defaultDate, defaultDateRange, defaultDates } = this._d;\n    switch (pickMode) {\n      case 'single':\n        if (defaultDate) {\n          this.datesTemp[0] = this.calSvc.createCalendarDay(this._getDayTime(defaultDate), this._d);\n        }\n        break;\n      case 'range':\n        if (defaultDateRange) {\n          if (defaultDateRange.from) {\n            this.datesTemp[0] = this.calSvc.createCalendarDay(this._getDayTime(defaultDateRange.from), this._d);\n          }\n          if (defaultDateRange.to) {\n            this.datesTemp[1] = this.calSvc.createCalendarDay(this._getDayTime(defaultDateRange.to), this._d);\n          }\n        }\n        break;\n      case 'multi':\n        if (defaultDates && defaultDates.length) {\n          this.datesTemp = defaultDates.map(e => this.calSvc.createCalendarDay(this._getDayTime(e), this._d));\n        }\n        break;\n      default:\n        this.datesTemp = [null, null];\n    }\n  }\n\n  findCssClass(): void {\n    const { cssClass } = this._d;\n    if (cssClass) {\n      cssClass.split(' ').forEach((_class: string) => {\n        if (_class.trim() !== '') this._renderer.addClass(this._elementRef.nativeElement, _class);\n      });\n    }\n  }\n\n  onChange(data: CalendarDay[]): void {\n    const { pickMode, autoDone } = this._d;\n\n    this.datesTemp = data;\n    this.ref.detectChanges();\n\n    if (pickMode !== 'multi' && autoDone && this.canDone()) {\n      this.done();\n    }\n\n    this.repaintDOM();\n  }\n\n  onCancel(): void {\n    this.modalCtrl.dismiss(null, 'cancel');\n  }\n\n  done(): void {\n    const { pickMode } = this._d;\n\n    this.modalCtrl.dismiss(this.calSvc.wrapResult(this.datesTemp, pickMode), 'done');\n  }\n\n  canDone(): boolean {\n    if (!Array.isArray(this.datesTemp)) {\n      return false;\n    }\n    const { pickMode, defaultEndDateToStartDate } = this._d;\n\n    switch (pickMode) {\n      case 'single':\n        return !!(this.datesTemp[0] && this.datesTemp[0].time);\n      case 'range':\n        if (defaultEndDateToStartDate) {\n          return !!(this.datesTemp[0] && this.datesTemp[0].time);\n        }\n        return !!(this.datesTemp[0] && this.datesTemp[1]) && !!(this.datesTemp[0].time && this.datesTemp[1].time);\n      case 'multi':\n        return this.datesTemp.length > 0 && this.datesTemp.every(e => !!e && !!e.time);\n      default:\n        return false;\n    }\n  }\n\n  clear() {\n    this.datesTemp = [null, null];\n  }\n\n  canClear() {\n    return !!this.datesTemp[0];\n  }\n\n  nextMonth(event: IonInfiniteScrollCustomEvent<void>): void {\n    const len = this.calendarMonths.length;\n    const final = this.calendarMonths[len - 1];\n    const nextTime = addMonths(final.original.time, 1).valueOf();\n    const rangeEnd = this._d.to ? subMonths(this._d.to, 1) : 0;\n\n    if (len <= 0 || (rangeEnd !== 0 && isAfter(final.original.time, rangeEnd))) {\n      event.target.disabled = true;\n      return;\n    }\n\n    this.calendarMonths.push(...this.calSvc.createMonthsByPeriod(nextTime, NUM_OF_MONTHS_TO_CREATE, this._d));\n    event.target.complete();\n    this.repaintDOM();\n  }\n\n  backwardsMonth(): void {\n    const first = this.calendarMonths[0];\n\n    if (first.original.time <= 0) {\n      this._d.canBackwardsSelected = false;\n      return;\n    }\n\n    const firstTime = (this.actualFirstTime = subMonths(first.original.time, NUM_OF_MONTHS_TO_CREATE).valueOf());\n\n    this.calendarMonths.unshift(...this.calSvc.createMonthsByPeriod(firstTime, NUM_OF_MONTHS_TO_CREATE, this._d));\n    this.ref.detectChanges();\n    this.repaintDOM();\n  }\n\n  scrollToDate(date: Date): void {\n    const defaultDateIndex = this.findInitMonthNumber(date);\n    const monthElement = this.monthsEle().nativeElement.children[`month-${defaultDateIndex}`];\n    const domElemReadyWaitTime = 300;\n\n    setTimeout(() => {\n      const defaultDateMonth = monthElement ? monthElement.offsetTop : 0;\n\n      if (defaultDateIndex !== -1 && defaultDateMonth !== 0) {\n        this.content().scrollByPoint(0, defaultDateMonth, 128);\n      }\n    }, domElemReadyWaitTime);\n  }\n\n  scrollToDefaultDate(): void {\n    this.scrollToDate(this._d.defaultScrollTo);\n  }\n\n  onScroll($event: IonContentCustomEvent<ScrollDetail>): void {\n    if (!this._d.canBackwardsSelected) return;\n\n    const { detail } = $event;\n\n    if (detail.scrollTop <= 200 && detail.velocityY < 0 && this._scrollLock) {\n      this.content().getScrollElement().then(() => {\n        this._scrollLock = !1;\n\n        // const heightBeforeMonthPrepend = scrollElem.scrollHeight;\n        this.backwardsMonth();\n        setTimeout(() => {\n          //  const heightAfterMonthPrepend = scrollElem.scrollHeight;\n\n          // this.content.scrollByPoint(0, heightAfterMonthPrepend - heightBeforeMonthPrepend, 0).then(() => {\n          this._scrollLock = !0;\n          // });\n        }, 180);\n      });\n    }\n  }\n\n  /**\n   * In some older Safari versions (observed at Mac's Safari 10.0), there is an issue where style updates to\n   * shadowRoot descendants don't cause a browser repaint.\n   * See for more details: https://github.com/Polymer/polymer/issues/4701\n   */\n  async repaintDOM() {\n    const scrollElem = await this.content().getScrollElement();\n    // Update scrollElem to ensure that height of the container changes as Months are appended/prepended\n    scrollElem.style.zIndex = '2';\n    scrollElem.style.zIndex = 'initial';\n    // Update monthsEle to ensure selected state is reflected when tapping on a day\n    const monthsEle = this.monthsEle();\n    monthsEle.nativeElement.style.zIndex = '2';\n    monthsEle.nativeElement.style.zIndex = 'initial';\n  }\n\n  findInitMonthNumber(date: Date): number {\n    let startDate = this.actualFirstTime ? new Date(this.actualFirstTime) : new Date(this._d.from);\n    const defaultScrollTo = new Date(date);\n    const after: boolean = isAfter(defaultScrollTo, startDate);\n    if (!after) return -1;\n\n    if (this.showYearPicker) {\n      startDate = new Date(this.year, 0, 1);\n    }\n\n    return differenceInMonths(defaultScrollTo, startDate);\n  }\n\n  _getDayTime(date: DefaultDate): number {\n    return startOfDay(new Date(date)).valueOf();\n  }\n\n  _monthFormat(date: DefaultDate): string {\n    return format(new Date(date), this._d.monthFormat);\n  }\n\n}\n","<ion-header>\n  <ion-toolbar [color]=\"_d.color\">\n    <ion-buttons slot=\"start\">\n      <ion-button type='button' slot=\"icon-only\" fill=\"clear\" (click)=\"onCancel()\"\n        [title]=\"_d.closeTitle || _d.closeLabel\">\n        @if (_d.closeLabel) {\n        <ion-label>{{ _d.closeLabel }}</ion-label>\n        }\n        @if (_d.closeIcon) {\n        <ion-icon [slot]=\"_d.closeLabel ? 'start' : 'icon-only'\" name=\"close\"></ion-icon>\n        }\n      </ion-button>\n    </ion-buttons>\n\n    <ion-title>{{ _d.title }}</ion-title>\n\n    <ion-buttons slot=\"end\">\n      @if (!!_d.clearLabel || !!_d.clearIcon) {\n      <ion-button type='button' slot=\"icon-only\" fill=\"clear\" [disabled]=\"!canClear()\" (click)=\"clear()\"\n        [title]=\"_d.clearTitle || _d.clearLabel\">\n        @if (_d.clearLabel) {\n        <ion-label>{{ _d.clearLabel }}</ion-label>\n        }\n        @if (_d.clearIcon) {\n        <ion-icon [slot]=\"_d.clearLabel ? 'end' : 'icon-only'\" name=\"refresh\"></ion-icon>\n        }\n      </ion-button>\n      }\n      @if (!_d.autoDone) {\n      <ion-button type='button' slot=\"icon-only\" fill=\"clear\" [disabled]=\"!canDone()\" (click)=\"done()\"\n        [title]=\"_d.doneTitle || _d.doneLabel\">\n        @if (_d.doneLabel) {\n        <ion-label>{{ _d.doneLabel }}</ion-label>\n        }\n        @if (_d.doneIcon) {\n        <ion-icon [slot]=\"_d.doneLabel ? 'end' : 'icon-only'\" name=\"checkmark\"></ion-icon>\n        }\n      </ion-button>\n      }\n    </ion-buttons>\n  </ion-toolbar>\n\n  <ng-content select=\"[sub-header]\"></ng-content>\n\n  <ion-range-calendar-week [color]=\"_d.color\" [weekArray]=\"_d.weekdays\" [weekStart]=\"_d.weekStart\">\n  </ion-range-calendar-week>\n\n</ion-header>\n\n<ion-content (ionScroll)=\"onScroll($event)\" class=\"calendar-page\" [scrollEvents]=\"true\"\n  [ngClass]=\"{'multi-selection': _d.pickMode === 'multi'}\">\n\n  <div #months>\n    @for (month of calendarMonths; track month.original.time; let i = $index) {\n    <div class=\"month-box\" [attr.id]=\"'month-' + i\">\n      <h4 class=\"text-center month-title\">{{ _monthFormat(month.original.date) }}</h4>\n      <ion-range-calendar-month [month]=\"month\" [pickMode]=\"_d.pickMode\" [isSaveHistory]=\"_d.isSaveHistory\"\n        [color]=\"_d.color\" (ionChange)=\"onChange($event)\" [(ngModel)]=\"datesTemp\">\n      </ion-range-calendar-month>\n    </div>\n    }\n\n  </div>\n\n  <ion-infinite-scroll threshold=\"25%\" (ionInfinite)=\"nextMonth($event)\">\n    <ion-infinite-scroll-content></ion-infinite-scroll-content>\n  </ion-infinite-scroll>\n\n</ion-content>\n","import { Component, input, output } from '@angular/core';\n\nimport { CalendarMonth } from '../../calendar.types';\nimport { defaults } from '../../config';\n\n@Component({\n  selector: 'ion-range-calendar-month-picker',\n  styleUrls: ['./month-picker.component.scss'],\n  templateUrl: 'month-picker.component.html',\n})\nexport class MonthPickerComponent {\n  readonly month = input<CalendarMonth>(undefined);\n  readonly color = input(defaults.COLOR);\n  readonly monthFormat = input(defaults.MONTH_FORMAT, { transform: this.setMonthFormat });\n\n  select = output<number>();\n\n  _thisMonth = new Date();\n\n  MONTH_FORMAT = 'MMMM';\n\n  _onSelect(month: number): void {\n    this.select.emit(month);\n  }\n\n  getDate(month: number) {\n    return new Date(this._thisMonth.getFullYear(), month, 1);\n  }\n\n  private setMonthFormat(value: string[]): string[] {\n    if (value && value.length === 12) {\n      return [...value];\n    }\n    return defaults.MONTH_FORMAT;\n  }\n}\n","<div [class]=\"'month-picker ' + color()\">\n  @for (item of monthFormat(); track i; let i = $index) {\n  <div class=\"month-packer-item\"\n    [class.this-month]=\" i === _thisMonth.getMonth() && month().original.year === _thisMonth.getFullYear()\">\n    <button type=\"button\" (click)=\"_onSelect(i)\">{{ item }}</button>\n  </div>\n  }\n</div>\n","import { Component, forwardRef, inject, input, OnInit, output, Provider } from '@angular/core';\nimport { ControlValueAccessor, FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { addMonths, addYears, format, parse, subMonths, subYears } from 'date-fns';\n\nimport {\n  CalendarComponentMonthChange,\n  CalendarComponentOptions,\n  CalendarComponentPayloadTypes,\n  CalendarComponentTypeProperty,\n  CalendarDay,\n  CalendarModalOptions,\n  CalendarMonth,\n  ControlValueType,\n  RangeChange\n} from '../../calendar.types';\n\nimport { defaults } from '../../config';\n\nimport { IonRangeCalendarService } from '../../services/ion-range-calendar.service';\n\nimport { CalendarWeekComponent } from '../calendar-week/calendar-week.component';\nimport { MonthPickerComponent } from '../month-picker/month-picker.component';\nimport { MonthComponent } from '../month/month.component';\n\nimport { IonButton, IonIcon } from '@ionic/angular/standalone';\nimport { addIcons } from 'ionicons';\nimport {\n  caretDownOutline,\n  caretUpOutline,\n  chevronBackOutline,\n  chevronForwardOutline\n} from 'ionicons/icons';\n\nexport const ION_CAL_VALUE_ACCESSOR: Provider = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => IonRangeCalendarComponent),\n  multi: true,\n};\n\ninterface CompatibleIcons {\n  caretDown: string;\n  caretUp: string;\n  chevronBack: string;\n  chevronForward: string;\n}\n\nexport type ionChange =\n  | CalendarComponentPayloadTypes\n  | { from?: CalendarComponentPayloadTypes, to?: CalendarComponentPayloadTypes }\n  | CalendarComponentPayloadTypes[];\n\n@Component({\n  selector: 'ion-range-calendar',\n  providers: [\n    ION_CAL_VALUE_ACCESSOR,\n    IonRangeCalendarService,\n  ],\n  styleUrls: ['ion-range-calendar.component.scss'],\n  templateUrl: 'ion-range-calendar.component.html',\n  imports: [\n    CalendarWeekComponent,\n    MonthComponent,\n    FormsModule,\n    MonthPickerComponent,\n    IonButton,\n    IonIcon,\n  ]\n})\nexport class IonRangeCalendarComponent implements ControlValueAccessor, OnInit {\n\n  readonly format = input<string>(defaults.DATE_FORMAT);\n  readonly type = input<CalendarComponentTypeProperty>('string');\n  readonly readonly = input(false);\n\n  options = input<CalendarComponentOptions, CalendarComponentOptions>(undefined, { transform: this.setOptions.bind(this) });\n\n  _d: CalendarModalOptions;\n  _options: CalendarComponentOptions;\n  _view: 'month' | 'days' = 'days';\n  _calendarMonthValue: CalendarDay[] = [null, null];\n  _showToggleButtons = true;\n  _compatibleIcons: CompatibleIcons;\n\n  get showToggleButtons(): boolean {\n    return this._showToggleButtons;\n  }\n\n  set showToggleButtons(value: boolean) {\n    this._showToggleButtons = value;\n  }\n\n  _showMonthPicker = true;\n  get showMonthPicker(): boolean {\n    return this._showMonthPicker;\n  }\n\n  set showMonthPicker(value: boolean) {\n    this._showMonthPicker = value;\n  }\n\n  monthOpt: CalendarMonth;\n\n  ionChange = output<ionChange>();\n  monthChange = output<CalendarComponentMonthChange>();\n  select = output<CalendarDay>();\n  selectStart = output<CalendarDay>();\n  selectEnd = output<CalendarDay>();\n\n  readonly MONTH_DATE_FORMAT = 'MMMM yyyy';\n\n  readonly calendarService = inject(IonRangeCalendarService);\n\n  _onChanged!: (event: ControlValueType) => void;\n  _onTouched!: (event: ControlValueType) => void;\n\n  constructor() {\n    this._compatibleIcons = {\n      caretDown: 'caret-down-outline',\n      caretUp: 'caret-up-outline',\n      chevronBack: 'chevron-back-outline',\n      chevronForward: 'chevron-forward-outline',\n    };\n\n    addIcons({\n      caretDownOutline,\n      caretUpOutline,\n      chevronBackOutline,\n      chevronForwardOutline,\n    });\n  }\n\n  ngOnInit(): void {\n    this.initOpt();\n    this.monthOpt = this.createMonth(new Date().getTime());\n  }\n\n  getViewDate() {\n    return this._handleType(this.monthOpt.original.time);\n  }\n\n  getDate(date: number) {\n    return new Date(date);\n  }\n\n  setViewDate(value: CalendarComponentPayloadTypes) {\n    this.monthOpt = this.createMonth(this._payloadToTimeNumber(value));\n  }\n\n  switchView(): void {\n    this._view = this._view === 'days' ? 'month' : 'days';\n  }\n\n  prev(): void {\n    if (this._view === 'days') {\n      this.backMonth();\n    } else {\n      this.prevYear();\n    }\n  }\n\n  next(): void {\n    if (this._view === 'days') {\n      this.nextMonth();\n    } else {\n      this.nextYear();\n    }\n  }\n\n  prevYear(): void {\n    if (new Date(this.monthOpt.original.time).getFullYear() === 1970) { return; }\n    const backTime = subYears(this.monthOpt.original.time, 1).valueOf();\n    this.monthOpt = this.createMonth(backTime);\n  }\n\n  nextYear(): void {\n    const nextTime = addYears(this.monthOpt.original.time, 1).valueOf();\n    this.monthOpt = this.createMonth(nextTime);\n  }\n\n  nextMonth(): void {\n    const nextTime = addMonths(this.monthOpt.original.time, 1).valueOf();\n    this.monthChange.emit({\n      oldMonth: this.calendarService.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calendarService.multiFormat(nextTime),\n    });\n    this.monthOpt = this.createMonth(nextTime);\n  }\n\n  canNext(): boolean {\n    if (!this._d.to || this._view !== 'days') { return true; }\n    return this.monthOpt.original.time < new Date(this._d.to).valueOf();\n  }\n\n  backMonth(): void {\n    const backTime = subMonths(this.monthOpt.original.time, 1).valueOf();\n    this.monthChange.emit({\n      oldMonth: this.calendarService.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calendarService.multiFormat(backTime),\n    });\n    this.monthOpt = this.createMonth(backTime);\n  }\n\n  canBack(): boolean {\n    if (this._d.canBackwardsSelected) { return true; }\n    if (!this._d.from || this._view !== 'days') { return true; }\n    return this.monthOpt.original.time > new Date(this._d.from).valueOf();\n  }\n\n  monthOnSelect(month: number): void {\n    this._view = 'days';\n    const newMonth = new Date(this.monthOpt.original.time).setMonth(month).valueOf();\n    this.monthChange.emit({\n      oldMonth: this.calendarService.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calendarService.multiFormat(newMonth),\n    });\n    this.monthOpt = this.createMonth(newMonth);\n  }\n\n  onChanged($event: CalendarDay[]): void {\n    switch (this._d.pickMode) {\n      case 'single': return this.handleSingleChange($event[0]);\n      case 'range': return this.handleRangeChange($event);\n      case 'multi': return this.handleMultiChange($event);\n    }\n  }\n\n  private handleSingleChange($event: CalendarDay): void {\n    const date = this._handleType($event.time);\n    this._onChanged(date);\n    this.ionChange.emit(date);\n  }\n\n  private handleRangeChange($event: CalendarDay[]): void {\n    if ($event[0] && $event[1]) {\n      const rangeDate = {\n        from: this._handleType($event[0].time),\n        to: this._handleType($event[1].time),\n      };\n      this._onChanged(rangeDate);\n      this.ionChange.emit(rangeDate);\n    }\n  }\n\n  private handleMultiChange($event: CalendarDay[]): void {\n    const dates: CalendarComponentPayloadTypes[] = [];\n\n    for (const event of $event) {\n      if (event && event.time) {\n        dates.push(this._handleType(event.time));\n      }\n    }\n\n    this._onChanged(dates);\n    this.ionChange.emit(dates);\n  }\n\n  swipeEvent($event: Event): void {\n    const isNext = ($event as WheelEvent).deltaX < 0;\n    if (isNext && this.canNext()) {\n      this.nextMonth();\n    } else if (!isNext && this.canBack()) {\n      this.backMonth();\n    }\n  }\n\n  _payloadToTimeNumber(value: CalendarComponentPayloadTypes): number {\n    let date: Date;\n    if (typeof value === 'string') {\n      date = parse(value, this.format(), new Date());\n    } else if (typeof value === 'number' || value instanceof Date) {\n      date = new Date(value);\n    } else {\n      date = new Date(value.years, value.months - 1, value.date, value.hours, value.minutes, value.seconds, value.milliseconds);\n    }\n    return date.valueOf();\n  }\n\n  _monthFormat(date: number): string {\n    return format(date, this._d.monthFormat);\n  }\n\n  private initOpt(): void {\n    if (this._options && typeof this._options.showToggleButtons === 'boolean') {\n      this.showToggleButtons = this._options.showToggleButtons;\n    }\n    if (this._options && typeof this._options.showMonthPicker === 'boolean') {\n      this.showMonthPicker = this._options.showMonthPicker;\n      if (this._view !== 'days' && !this.showMonthPicker) {\n        this._view = 'days';\n      }\n    }\n    this._d = this.calendarService.safeOpt(this._options || {});\n  }\n\n  createMonth(date: number): CalendarMonth {\n    return this.calendarService.createMonthsByPeriod(date, 1, this._d)[0];\n  }\n\n  _createCalendarDay(value?: CalendarComponentPayloadTypes | null): CalendarDay | null {\n    if (!value) return null;\n    return this.calendarService.createCalendarDay(this._payloadToTimeNumber(value), this._d);\n  }\n\n  _handleType(value: number): CalendarComponentPayloadTypes {\n    const date = new Date(value);\n    switch (this.type()) {\n      case 'string':\n        return format(date, this.format());\n      case 'js-date':\n        return date;\n      case 'time':\n        return date.valueOf();\n      case 'object':\n        return {\n          years: date.getFullYear(),\n          months: date.getMonth() + 1,\n          date: date.getDate(),\n          hours: date.getHours(),\n          minutes: date.getMinutes(),\n          seconds: date.getSeconds(),\n          milliseconds: date.getMilliseconds(),\n        };\n      default:\n        return date;\n    }\n  }\n\n  writeValue(obj: ControlValueType): void {\n    this._writeValue(obj);\n    if (obj) {\n      if (this._calendarMonthValue[0]) {\n        this.monthOpt = this.createMonth(this._calendarMonthValue[0].time);\n      } else {\n        this.monthOpt = this.createMonth(new Date().getTime());\n      }\n    }\n  }\n\n  registerOnChange(fn: (event: ControlValueType) => void): void {\n    this._onChanged = fn;\n  }\n\n  registerOnTouched(fn: (event: ControlValueType) => void): void {\n    this._onTouched = fn;\n  }\n\n  _writeValue(value: ControlValueType): void {\n    if (!value) {\n      this._calendarMonthValue = [null, null];\n      return;\n    }\n\n    switch (this._d.pickMode) {\n      case 'single':\n        this._calendarMonthValue[0] = this._createCalendarDay(value as CalendarComponentPayloadTypes);\n        break;\n\n      case 'range':\n        this._calendarMonthValue[0] = this._createCalendarDay((value as RangeChange).from);\n        this._calendarMonthValue[1] = this._createCalendarDay((value as RangeChange).to);\n        break;\n\n      case 'multi':\n        if (Array.isArray(value)) {\n          this._calendarMonthValue = value.map(e => this._createCalendarDay(e));\n        } else {\n          this._calendarMonthValue = [null, null];\n        }\n        break;\n\n      default: break;\n    }\n  }\n\n  private setOptions(value: CalendarComponentOptions) {\n    this._options = value;\n    this.initOpt();\n    if (this.monthOpt && this.monthOpt.original) {\n      this.monthOpt = this.createMonth(this.monthOpt.original.time);\n    }\n    return value;\n  }\n\n}\n","<div class=\"title\">\n\n  @if (_showToggleButtons) {\n\n  <ion-button type=\"button\" fill=\"clear\" class=\"back\" [disabled]=\"!canBack()\" (click)=\"prev()\">\n    <ion-icon slot=\"icon-only\" size=\"small\" [name]=\"_compatibleIcons.chevronBack\"></ion-icon>\n  </ion-button>\n\n  }\n  @if (_showMonthPicker) {\n\n  <ion-button type=\"button\" fill=\"clear\" class=\"switch-btn\" (click)=\"switchView()\">\n    {{ _monthFormat(monthOpt.original.time) }}\n    <ion-icon class=\"arrow-dropdown\" [name]=\"_view === 'days' ? _compatibleIcons.caretDown : _compatibleIcons.caretUp\">\n    </ion-icon>\n  </ion-button>\n\n  } @else {\n\n  <div class=\"switch-btn\">\n    {{ _monthFormat(monthOpt.original.time) }}\n  </div>\n\n  }\n\n  <ng-template #title>\n    <div class=\"switch-btn\">\n      {{ _monthFormat(monthOpt.original.time) }}\n    </div>\n  </ng-template>\n\n  @if (_showToggleButtons) {\n\n  <ion-button type=\"button\" fill=\"clear\" class=\"forward\" [disabled]=\"!canNext()\" (click)=\"next()\">\n    <ion-icon slot=\"icon-only\" size=\"small\" [name]=\"_compatibleIcons.chevronForward\"></ion-icon>\n  </ion-button>\n\n  }\n</div>\n\n@if (_view === 'days') {\n\n<ion-range-calendar-week color=\"transparent\" [weekArray]=\"_d.weekdays\" [weekStart]=\"_d.weekStart\">\n</ion-range-calendar-week>\n\n<ion-range-calendar-month [componentMode]=\"true\" [(ngModel)]=\"_calendarMonthValue\" [month]=\"monthOpt\"\n  [readonly]=\"readonly()\" (ionChange)=\"onChanged($event)\" (swipe)=\"swipeEvent($event)\" (select)=\"select.emit($event)\"\n  (selectStart)=\"selectStart.emit($event)\" (selectEnd)=\"selectEnd.emit($event)\" [pickMode]=\"_d.pickMode\"\n  [color]=\"_d.color\">\n</ion-range-calendar-month>\n\n} @else {\n\n<ion-range-calendar-month-picker [color]=\"_d.color\" [monthFormat]=\"_options?.monthPickerFormat\"\n  (select)=\"monthOnSelect($event)\" [month]=\"monthOpt\">\n</ion-range-calendar-month-picker>\n\n}\n","/*\n * Public API Surface of ion-range-calendar\n */\n\nexport * from './lib/services/ion-range-calendar.service';\nexport * from './lib/components';\nexport * from './lib/calendar.types';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.IonRangeCalendarService","i1"],"mappings":"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"}