{"version":3,"file":"heliomarpm-ion-calendar.mjs","sources":["../../../projects/ion-calendar/src/lib/types/index.ts","../../../projects/ion-calendar/src/lib/helpers/DateTimeHelper.ts","../../../projects/ion-calendar/src/lib/calendar-options.provider.ts","../../../projects/ion-calendar/src/lib/ion-calendar.service.ts","../../../projects/ion-calendar/src/lib/components/calendar-month/calendar-month.component.ts","../../../projects/ion-calendar/src/lib/components/calendar-month/calendar-month.component.html","../../../projects/ion-calendar/src/lib/components/calendar-week/calendar-week.component.ts","../../../projects/ion-calendar/src/lib/components/calendar-week/calendar-week.component.html","../../../projects/ion-calendar/src/lib/components/month-picker/month-picker.component.ts","../../../projects/ion-calendar/src/lib/components/month-picker/month-picker.component.html","../../../projects/ion-calendar/src/lib/components/year-picker/year-picker.component.ts","../../../projects/ion-calendar/src/lib/components/year-picker/year-picker.component.html","../../../projects/ion-calendar/src/lib/components/calendar/calendar.component.ts","../../../projects/ion-calendar/src/lib/components/calendar/calendar.component.html","../../../projects/ion-calendar/src/lib/components/calendar-modal/calendar-modal.component.ts","../../../projects/ion-calendar/src/lib/components/calendar-modal/calendar-modal.component.html","../../../projects/ion-calendar/src/lib/components/index.ts","../../../projects/ion-calendar/src/lib/calendar-modal.controller.ts","../../../projects/ion-calendar/src/lib/ion-calendar.module.ts","../../../projects/ion-calendar/src/lib/models/ICalendarResult.ts","../../../projects/ion-calendar/src/public-api.ts","../../../projects/ion-calendar/src/heliomarpm-ion-calendar.ts"],"sourcesContent":["import { DateObjectUnits, DateTime } from 'luxon';\nimport { ICalendarLocale } from '../models';\n\nexport type DateType = Date | string | number | null;\nexport type CalendarComponentType = 'string' | 'js-date' | 'luxon' | 'time' | 'object';\nexport type CalendarComponentPayloadType = string | number | Date | DateTime | DateObjectUnits ;\nexport type CalendarComponentPayloadRangeType = { from: CalendarComponentPayloadType, to: CalendarComponentPayloadType };\nexport type CalendarComponentOnChangeType = CalendarComponentPayloadType | CalendarComponentPayloadType[] | CalendarComponentPayloadRangeType\n\nexport type ColorType = 'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger' | 'dark' | 'medium' | 'light' | 'custom' | 'transparent' | '';\n\nexport const pickModes = {\n  single: 'single',\n  range: 'range',\n  multi: 'multi'\n};\nexport type PickModeType = keyof typeof pickModes[][number];\n// export type PickModeType = 'single' | 'range' | 'multi';\n\nexport const displayModes = {\n  month: 'month',\n  week: 'week',\n}\nexport type DisplayModeType = keyof typeof displayModes[][number];\n// export type DisplayModeType = typeof displayModes[keyof typeof displayModes]\n\n\nconst defaultValues = {\n  COLOR: 'primary',\n  PICK_MODE: pickModes.single,\n  DISPLAY_MODE: displayModes.month,\n  DATE_FORMAT: 'yyyy-MM-dd',\n  LOCALE: { locale: 'en', weekdays: 'initial' } as ICalendarLocale,\n  YEAR_FORMAT: 'yyyy',\n};\n\nexport default defaultValues;\n","import { DateTime, Info } from \"luxon\";\r\nimport { CalendarComponentPayloadType } from \"../types\";\r\nimport { ICalendarLocale } from \"../models\";\r\n\r\nclass DateTimeHelper {\r\n  static parse(date: CalendarComponentPayloadType | undefined): DateTime {\r\n    if (!date) return DateTime.now();\r\n\r\n    if (typeof date === 'number') {\r\n      return DateTime.fromMillis(date);\r\n    }\r\n    else if (typeof date === 'string') {\r\n      return DateTime.fromISO(date);\r\n    }\r\n    else if (date instanceof Date) {\r\n      return DateTime.fromJSDate(date);\r\n    }\r\n\r\n    return DateTime.fromObject(date);\r\n  }\r\n\r\n  static now() {\r\n    return DateTime.now();\r\n  }\r\n\r\n  static isDate(value: any): boolean {\r\n    if (value instanceof Date) {\r\n      // Verifique se o objeto Date não é 'Invalid Date'\r\n      return value.toString() !== 'Invalid Date';\r\n    }\r\n\r\n    if (typeof value === 'number') {\r\n      return this.parse(value).isValid\r\n    }\r\n\r\n    if (typeof value === 'string') {\r\n      return this.parse(value).isValid;\r\n    }\r\n\r\n    // Se não for uma data válida em nenhum formato conhecido, retorne false\r\n    return false;\r\n  }\r\n\r\n  /**\r\n  * Calculates the first and last day of the week for a given date.\r\n  *\r\n  * @param {Date} date - The date for which to calculate the first and last day of the week.\r\n  * @return {{firstDay: Date, lastDay: Date}} - An object containing the first and last day of the week.\r\n  *\r\n  * @example\r\n  * const today = new Date();\r\n  * const weekRange = getFirstAndLastDayOfWeek(today);\r\n  * console.log(weekRange.firstDay.toDateString()); // Output: Sun Oct 08 2023\r\n  * console.log(weekRange.lastDay.toDateString()); // Output: Sat Oct 14 2023\r\n  */\r\n  static getFirstAndLastDayOfWeek(date: Date): { firstDay: Date, lastDay: Date } {\r\n    const currentDay = date.getDay(); // Dia da semana (0 - Domingo, 1 - Segunda, ..., 6 - Sábado)\r\n    const diff = currentDay - 0; // 0 representa o Domingo\r\n\r\n    // Primeiro dia da semana (Domingo)\r\n    const firstDay = new Date(date);\r\n    firstDay.setDate(date.getDate() - diff);\r\n\r\n    // Último dia da semana (Sábado)\r\n    const lastDay = new Date(date);\r\n    lastDay.setDate(date.getDate() + (6 - diff));\r\n\r\n    return { firstDay, lastDay };\r\n  }\r\n\r\n  static monthsShortTitle(locale: string = 'en') {\r\n    return Info.months('short', { locale }).map(m => m.substring(0, 3).toUpperCase());\r\n  }\r\n\r\n  static weekDays(locale: ICalendarLocale = { locale: 'en', weekdays: 'initial' }) {\r\n    const { locale: l, weekdays: w } = locale;\r\n    let weeksDay = Info.weekdays('short', { locale: l }).map(d => w === 'initial' ? d.substring(0, 1).toUpperCase() : d.toUpperCase());\r\n\r\n    const today = DateTime.now();\r\n    const firstDay = this.getFirstAndLastDayOfWeek(today.toJSDate()).firstDay.getDay();\r\n\r\n    if (firstDay < Number(today.startOf('week').toFormat('dd'))) {\r\n      weeksDay.unshift(weeksDay.pop()!);\r\n    }\r\n    return weeksDay;\r\n  }\r\n\r\n  static weekday(date: DateTime) {\r\n    const wd = date.weekday;\r\n    return wd < 7 ? wd : 0;\r\n  }\r\n}\r\n\r\nexport default DateTimeHelper;\r\n","import { InjectionToken } from '@angular/core';\nimport { ICalendarModalOptions } from './models/ICalendarOptions';\n\nexport const DEFAULT_CALENDAR_OPTIONS = new InjectionToken<ICalendarModalOptions>('DEFAULT_CALENDAR_MODAL_OPTIONS');\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { ICalendarDay, ICalendarLocale, ICalendarModalOptions, ICalendarMonth, ICalendarOriginal, ICalendarResult, IDayConfig } from './models';\nimport defaultValues, { PickModeType, displayModes, pickModes } from './types';\nimport { DateTimeHelper } from './helpers';\nimport { DEFAULT_CALENDAR_OPTIONS } from './calendar-options.provider';\n\nimport { DateTime } from 'luxon';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class IonCalendarService {\n\n  private readonly defaultOpts: ICalendarModalOptions;\n\n  constructor(@Optional() @Inject(DEFAULT_CALENDAR_OPTIONS) defaultOpts: ICalendarModalOptions) {\n    this.defaultOpts = defaultOpts;\n  }\n\n  get DEFAULT_STEP() {\n    return 12;\n  }\n\n  safeOpt(calendarOptions: any = {}): ICalendarModalOptions {\n    const _disableWeeks: number[] = [];\n    const _daysConfig: IDayConfig[] = [];\n\n    const _locale: ICalendarLocale = calendarOptions.locale || defaultValues.LOCALE;\n\n    const {\n      locale = _locale,\n      from = new Date(),\n      to = undefined,\n      weekStart = 0,\n      step = this.DEFAULT_STEP,\n      id = '',\n      cssClass = '',\n      closeLabel = 'CANCEL',\n      doneLabel = 'DONE',\n      monthFormat = 'MMM yyyy',\n      title = 'CALENDAR',\n      defaultTitle = '',\n      defaultSubtitle = '',\n      autoDone = false,\n      canBackwardsSelected = false,\n      closeIcon = false,\n      doneIcon = false,\n      pickMode = defaultValues.PICK_MODE,\n      color = defaultValues.COLOR,\n      colorSubtitle = undefined,\n      weekdays = DateTimeHelper.weekDays(_locale),\n      daysConfig = _daysConfig,\n      disableWeeks = _disableWeeks,\n      clearLabel = null,\n      displayMode = defaultValues.DISPLAY_MODE,\n      showAdjacentMonthDay = true,\n      showMonthAdjacentDays = false,\n      weeks = 1\n    } = { ...this.defaultOpts, ...calendarOptions };\n\n    const fromDate = DateTimeHelper.isDate(from) ? from : new Date();\n    const toDate = DateTimeHelper.isDate(to) ? to : undefined;\n\n    return {\n      id,\n      locale,\n      from: fromDate,\n      to: toDate,\n      pickMode,\n      autoDone,\n      color,\n      colorSubtitle,\n      cssClass,\n      weekStart,\n      closeLabel,\n      closeIcon,\n      doneLabel,\n      doneIcon,\n      canBackwardsSelected,\n      disableWeeks,\n      monthFormat,\n      // yearFormat,\n      title,\n      weekdays,\n      daysConfig,\n      step,\n      defaultTitle,\n      defaultSubtitle,\n      defaultScrollTo: calendarOptions.defaultScrollTo || fromDate,\n      defaultDate: calendarOptions.defaultDate || null,\n      defaultDates: calendarOptions.defaultDates || null,\n      defaultDateRange: calendarOptions.defaultDateRange || null,\n      clearLabel,\n      showAdjacentMonthDay,\n      showMonthAdjacentDays,\n      displayMode,\n      weeks\n    };\n  }\n\n  createOriginalCalendar(time: number, timeWithDay = false): ICalendarOriginal {\n    const luxon = DateTimeHelper.parse(time);\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    // const howManyDays = moment(time).daysInMonth();\n\n    const daysInMonth: number = luxon.daysInMonth!;\n    const lastDayOfMonth = luxon.endOf(\"month\").valueOf();\n\n    return {\n      date,\n      year,\n      month,\n      firstWeekDay: firstWeek,\n      daysInMonth,\n      time: new Date(year, month, (timeWithDay) ? date.getDate() : 1).getTime(),\n      lastDayOfMonth\n    };\n  }\n\n  private findDayConfig(day: DateTime, options: ICalendarModalOptions): IDayConfig | null {\n    const { daysConfig } = options;\n\n    const dayConfig = daysConfig?.find((config) => {\n      const dateTime = DateTimeHelper.parse(config.date)\n      return day.hasSame(dateTime, 'day');\n    }) || null;\n\n    return dayConfig;\n  }\n\n  /**\n   * Create a calendar day object based on the given time, options, and month.\n   *\n   * @param {number} time - The time in milliseconds.\n   * @param {ICalendarModalOptions} options - The calendar modal options.\n   * @param {number} month - The month number.\n   * @return {ICalendarDay} The created calendar day object.\n   */\n  createCalendarDay(time: number, options: ICalendarModalOptions, month?: number): ICalendarDay {\n    const date = DateTimeHelper.parse(time).startOf(\"day\");\n    const isToday = DateTimeHelper.now().hasSame(date, 'day')\n    const dayConfig = this.findDayConfig(date, options);\n\n    const { title, subTitle, disable } = this.getCalendarDayAttributes(date, dayConfig, options);\n\n    return {\n      time,\n      isToday,\n      selected: false,\n      marked: dayConfig?.marked ?? false,\n      isLastMonth: month ? date.month < month : false,\n      isNextMonth: month ? date.month > month : false,\n      isFirst: date.day === 1,\n      isLast: date.day === date.daysInMonth,\n      cssClass: dayConfig?.cssClass ?? '',\n      title,\n      subTitle,\n      disable,\n    };\n  }\n\n  /**\n   * Gets the attributes of a calendar day based on the given date, day configuration, and options.\n   *\n   * @param {DateTime} date - The date of the calendar day.\n   * @param {IDayConfig | null} dayConfig - The configuration for the day (optional).\n   * @param {ICalendarModalOptions} options - The options for the calendar modal.\n   * @return {{ disable: boolean; title: string; subTitle: string; }} The attributes of the calendar day.\n   */\n  private getCalendarDayAttributes(date: DateTime, dayConfig: IDayConfig | null, options: ICalendarModalOptions)\n    : { disable: boolean; title: string; subTitle: string; } {\n\n    let disable = false;\n\n    // Check if there is a specific disable configuration for the day\n    if (dayConfig?.disable !== undefined) {\n      disable = dayConfig.disable!;\n    }\n    else {\n      // If no specific disable configuration, check if the day is in the list of disabled weekdays\n      const dayOfWeek = DateTimeHelper.weekday(date);\n      disable = options.disableWeeks?.includes(dayOfWeek) || false;\n\n      if (!disable && !options.canBackwardsSelected) {\n        const dateFrom = options.from === undefined ? undefined : DateTimeHelper.parse(options.from).startOf(\"day\");\n        const dateTo = options.to === undefined ? undefined : DateTimeHelper.parse(options.to).startOf(\"day\");\n\n        // Check if the date is between the specified range\n        if (dateFrom !== undefined && dateTo !== undefined) {\n          disable = !(date >= dateFrom && date <= dateTo);\n        } else if (dateFrom !== undefined) {\n          disable = date < dateFrom;\n        } else if (dateTo !== undefined) {\n          disable = date > dateTo;\n        }\n      }\n      \n    }\n\n    // Determine the title and subtitle for the calendar day\n    const title = dayConfig?.title || options.defaultTitle || date.day.toString();\n    const subTitle = dayConfig?.subTitle || options.defaultSubtitle || '';\n    return { title, subTitle, disable };\n  }\n\n  /**\n   * Creates a calendar month of a given week.\n   *\n   * @param {ICalendarOriginal} original - The original calendar data.\n   * @param {ICalendarModalOptions} options - The calendar modal options.\n   * @returns {ICalendarMonth} The calendar month of the given week.\n   */\n  private createCalendarMonthOfWeek(original: ICalendarOriginal, options: ICalendarModalOptions): ICalendarMonth {\n    const { weeks = 1, weekStart, showAdjacentMonthDay, showMonthAdjacentDays, displayMode } = options;\n    const { date, year, month } = original;\n    const days: ICalendarDay[] = new Array(6).fill(null);\n\n    const calculateStartDay = (originalDate: Date): number => {\n      const dayOfWeek = originalDate.getDay();\n      return originalDate.getDate() - (weekStart === 0 ? dayOfWeek : dayOfWeek - 1);\n    };\n\n\n    const createDay = (currentTime: number): ICalendarDay => {\n      const month = DateTimeHelper.parse(original.time).month;\n      const dateTime = DateTimeHelper.parse(currentTime);\n      const isDifferentMonth = dateTime.month !== month;\n\n      // Show months in weekdays adjecent of selected month\n      if (displayMode === displayModes.week && showMonthAdjacentDays && isDifferentMonth) {\n        const optClone: ICalendarModalOptions = JSON.parse(JSON.stringify(options));\n        const dayConfig: IDayConfig | null = this.findDayConfig(dateTime, optClone);\n\n        if (!dayConfig) {\n          if (!optClone.daysConfig) optClone.daysConfig = [];\n          optClone.daysConfig.push({ date: dateTime.toJSDate(), subTitle: dateTime.monthShort! });\n        }\n\n        return this.createCalendarDay(currentTime, optClone, month);\n      }\n\n      return this.createCalendarDay(currentTime, options, month);\n    };\n\n\n    const startDay = calculateStartDay(date);\n    const startIndex = 0;\n\n    for (let i = startIndex; i < 7 * weeks; i++) {\n      const itemTime = new Date(year, month, startDay + (i - startIndex)).getTime();\n      days[i] = createDay(itemTime);\n    }\n\n    if (displayMode === displayModes.month && showAdjacentMonthDay) {\n      const dayExists = days.map(day => !!day);\n\n      let startOffsetIndex = dayExists.indexOf(true) - 1;\n      let endOffsetIndex = dayExists.lastIndexOf(true) + 1;\n\n      for (startOffsetIndex; startOffsetIndex >= 0; startOffsetIndex--) {\n        const dayBefore = DateTimeHelper.parse(days[startOffsetIndex + 1].time).minus({ days: 1 });\n        days[startOffsetIndex] = createDay(dayBefore.valueOf());\n      }\n\n      if (!(dayExists.length % 7 === 0 && dayExists[dayExists.length - 1])) {\n        for (endOffsetIndex; endOffsetIndex < days.length + (endOffsetIndex % 7); endOffsetIndex++) {\n          const dayAfter = DateTimeHelper.parse(days[endOffsetIndex - 1].time).plus({ days: 1 });\n          days[endOffsetIndex] = createDay(dayAfter.valueOf());\n        }\n      }\n    }\n\n    return { days, original };\n  }\n\n  createCalendarMonth(original: ICalendarOriginal, opt: ICalendarModalOptions): ICalendarMonth {\n    const days: Array<ICalendarDay> = new Array(6).fill(null);\n    const daysInMonth = original.daysInMonth;\n\n    for (let i = original.firstWeekDay; i < daysInMonth + original.firstWeekDay; i++) {\n      const itemTime = new Date(original.year, original.month, i - original.firstWeekDay + 1).getTime();\n      days[i] = this.createCalendarDay(itemTime, opt);\n    }\n\n    if (opt.weekStart == 1) {\n      if (!days[0]) {\n        days.shift();\n      } else {\n        days.unshift(...new Array(6).fill(null));\n      }\n    }\n\n    if (opt.showAdjacentMonthDay && !Number.isNaN(original.time)) {\n      // const thisMonth = moment(original.time).month();\n      const thisMonth = DateTimeHelper.parse(original.time).month;\n      const _booleanMap = days.map(e => !!e);\n\n      let startOffsetIndex = _booleanMap.indexOf(true) - 1;\n      // for (startOffsetIndex; startOffsetIndex >= 0; startOffsetIndex--) {\n      while (startOffsetIndex >= 0) {\n        // const dayBefore = moment(days[startOffsetIndex + 1].time).clone().subtract(1, 'd');\n        const dayBefore = DateTimeHelper.parse(days[startOffsetIndex + 1].time).minus({ days: 1 });\n        days[startOffsetIndex] = this.createCalendarDay(dayBefore.valueOf(), opt, thisMonth);\n        //_booleanMap[startOffsetIndex] = true;\n        startOffsetIndex--;\n      }\n\n      if (!(_booleanMap.length % 7 === 0 && _booleanMap[_booleanMap.length - 1])) {\n        let endOffsetIndex = _booleanMap.lastIndexOf(true) + 1;\n        // for (endOffsetIndex; endOffsetIndex < days.length + (endOffsetIndex % 7); endOffsetIndex++) {\n        while (endOffsetIndex < days.length + (endOffsetIndex % 7)) {\n          // const dayAfter = moment(days[endOffsetIndex - 1].time).clone().add(1, 'd');\n          // const timeAfter = endOffsetIndex = 0 ? original.time : days[endOffsetIndex - 1].time;\n          const timeAfter = days[endOffsetIndex - 1].time;\n          const dayAfter = DateTimeHelper.parse(timeAfter).plus({ days: 1 });\n          days[endOffsetIndex] = this.createCalendarDay(dayAfter.valueOf(), opt, thisMonth);\n\n          endOffsetIndex++;\n        }\n      }\n    }\n\n    return { days, original };\n  }\n\n  /**\n   * Creates an array of CalendarMonth objects by period.\n   *\n   * @param {number} startTime - The start time of the period.\n   * @param {ICalendarModalOptions} opt - The calendar modal options.\n   * @return {Array<ICalendarMonth>} The array of CalendarMonth objects.\n   */\n  createWeeksByPeriod(startTime: number, opt: ICalendarModalOptions): Array<ICalendarMonth> {\n    const result: Array<ICalendarMonth> = [];\n\n    const time = DateTimeHelper.parse(startTime).valueOf();\n    const originalCalendar = this.createOriginalCalendar(time, true);\n\n    result.push(this.createCalendarMonthOfWeek(originalCalendar, opt));\n\n    return result;\n  }\n\n\n  /**\n   * Creates an array of CalendarMonth objects based on the given start time and the number of months.\n   *\n   * @param {number} startTime - The starting time in milliseconds.\n   * @param {number} monthsNum - The number of months to create.\n   * @param {ICalendarModalOptions} opt - The options for creating the CalendarMonth objects.\n   * @return {Array<ICalendarMonth>} - An array of CalendarMonth objects.\n   */\n  createMonthsByPeriod(startTime: number, monthsNum: number, opt: ICalendarModalOptions): Array<ICalendarMonth> {\n    const result = Array.from({ length: monthsNum }, (_, i) => {\n      const time = DateTimeHelper.parse(startTime).startOf('month').plus({ months: i }).valueOf();\n      const originalCalendar = this.createOriginalCalendar(time);\n      const calendar = this.createCalendarMonth(originalCalendar, opt);\n\n      return calendar;\n    });\n\n    return result;\n  }\n\n  /**\n   * Creates an array of CalendarMonth objects based on the specified start year, number of years, and options.\n   *\n   * @param {number} startYear - The starting year.\n   * @param {number} yearsNum - The number of years.\n   * @param {ICalendarModalOptions} opt - The options for the calendar modal.\n   * @return {Array<ICalendarMonth>} An array of CalendarMonth objects.\n   */\n  createYearsByPeriod(startYear: number, yearsNum: number, opt: ICalendarModalOptions): Array<ICalendarMonth> {\n    return Array.from({ length: yearsNum }, (_, i) => {\n      const time = DateTimeHelper.parse({ year: startYear + i, month: 1, day: 1 }).toMillis();\n      const originalCalendar = this.createOriginalCalendar(time);\n      const calendar = this.createCalendarMonth(originalCalendar, opt);\n\n      return calendar;\n    });\n  }\n\n  wrapResult(original: ICalendarDay[], pickMode: PickModeType) {\n    let result: ICalendarResult | ICalendarResult[] | { from: ICalendarResult, to: ICalendarResult } | ICalendarDay[];\n\n    switch (pickMode) {\n      case pickModes.single:\n        result = this.multiFormat(original[0].time);\n        break;\n      case pickModes.range:\n        result = {\n          from: this.multiFormat(original[0].time),\n          to: this.multiFormat((original[1] || original[0]).time),\n        };\n        break;\n      case pickModes.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): ICalendarResult {\n    // const _moment = moment(time);\n    // return {\n    //   time: _moment.valueOf(),\n    //   unix: _moment.unix(),\n    //   dateObj: _moment.toDate(),\n    //   string: _moment.format(defaults.DATE_FORMAT),\n    //   years: _moment.year(),\n    //   months: _moment.month() + 1,\n    //   date: _moment.date(),\n    // };\n\n    const luxonDate = DateTimeHelper.parse(time);\n    return {\n      time: luxonDate.toMillis(),\n      seconds: luxonDate.toSeconds(),\n      dateObj: luxonDate.toJSDate(),\n      string: luxonDate.toFormat(defaultValues.DATE_FORMAT.replace(/Y/g, 'y')),\n      year: luxonDate.year,\n      month: luxonDate.month, // Note que o mês começa em 0 no Moment\n      day: luxonDate.day,\n    };\n  }\n\n}\n\n","import { Component, ChangeDetectorRef, Input, Output, EventEmitter, forwardRef, AfterViewInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ICalendarDay, ICalendarMonth, ICalendarOriginal } from '../../models';\nimport defaultValues, { ColorType, PickModeType, pickModes } from '../../types';\n\nexport const MONTH_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => CalendarMonthComponent),\n  multi: true,\n};\n\n\n@Component({\n  selector: 'ion-calendar-month',\n  templateUrl: './calendar-month.component.html',\n  styleUrls: ['./calendar-month.component.scss'],\n  providers: [MONTH_VALUE_ACCESSOR],\n  host: {\n    '[class.component-mode]': 'componentMode'\n  }\n})\nexport class CalendarMonthComponent implements ControlValueAccessor, AfterViewInit {\n  @Input() month!: ICalendarMonth;\n  @Input() pickMode: PickModeType = defaultValues.PICK_MODE as PickModeType;\n  @Input() id: any;\n  @Input() readonly = false;\n  @Input() color: ColorType | undefined = defaultValues.COLOR as ColorType;\n  @Input() colorSubtitle: ColorType | undefined = undefined;\n  @Output() private onChange: EventEmitter<ICalendarDay[]> = new EventEmitter();\n  @Output() private onSelect: EventEmitter<ICalendarDay> = new EventEmitter();\n  @Output() private onSelectStart: EventEmitter<ICalendarDay> = new EventEmitter();\n  @Output() private onSelectEnd: EventEmitter<ICalendarDay> = new EventEmitter();\n\n  private _date: Array<ICalendarDay | null> = [null, null];\n  private _isInit = false;\n  private _onChanged?: Function;\n  private _onTouched?: Function;\n\n  readonly DAY_DATE_FORMAT = 'MMMM dd, yyyy';\n\n  get isRange(): boolean {\n    return this.pickMode === pickModes.range;\n  }\n\n  constructor(public ref: ChangeDetectorRef) {\n    // console.log(\"CalendarMonthComponent.constructor\");\n  }\n\n  ngAfterViewInit(): void {\n    this._isInit = true;\n  }\n\n  get value() {\n    return this._date;\n  }\n\n  writeValue(obj: any): void {\n    if (Array.isArray(obj)) {\n      this._date = obj;\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this._onChanged = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this._onTouched = fn;\n  }\n\n  trackByTime(index: number, item: ICalendarOriginal): number {\n    return item ? item.time : index;\n  }\n\n  isEndSelection(day: ICalendarDay): boolean {\n    if (!day) { return false; }\n\n    if (this.pickMode !== pickModes.range || !this._isInit || !this._date[1]) {\n      return false;\n    }\n\n    return this._date[1].time === day.time;\n  }\n\n  getDayLabel(day: ICalendarDay) {\n    return new Date(day.time);\n  }\n\n  isBetween(day: ICalendarDay): boolean {\n    if (!day) { return false; }\n\n    if (this.pickMode !== pickModes.range || !this._isInit) {\n      return false;\n    }\n\n    if (!this._date[0] || !this._date[1]) {\n      return false;\n    }\n\n    const start = this._date[0].time;\n    const end = this._date[1].time;\n\n    return day.time < end && day.time > start;\n  }\n\n  isStartSelection(day: ICalendarDay): boolean {\n    if (!day) { return false; }\n    if (this.pickMode !== pickModes.range || !this._isInit || !this._date[0]) {\n      return false;\n    }\n\n    return this._date[0].time === day.time && !!this._date[1];\n  }\n\n  isSelected(time: number): boolean {\n    if (Array.isArray(this._date)) {\n      if (this.pickMode !== pickModes.multi) {\n        if (this._date[0] !== null) {\n          return time === this._date[0].time;\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\n  onSelected(item: ICalendarDay): void {\n    if (this.readonly) { return; }\n\n    item.selected = true;\n    this.onSelect.emit(item);\n\n    switch (this.pickMode) {\n      case pickModes.range:\n        this.handleSelectedRangeMode(item);\n        break;\n      case pickModes.multi:\n        this.handleSelectedMultiMode(item);\n        break;\n      case pickModes.single:\n      default:\n        this.handleSelectedSingleMode(item);\n        break;\n    }\n\n  }\n\n  private handleSelectedSingleMode(item: ICalendarDay): void {\n    this._date[0] = item;\n    this.onChange.emit(this._date as ICalendarDay[]);\n  }\n\n  private handleSelectedRangeMode(item: ICalendarDay): void {\n    if (!this._date[0]) {\n      this._date[0] = item;\n      this.onSelectStart.emit(item);\n    } else if (!this._date[1]) {\n      if (this._date[0].time < item.time) {\n        this._date[1] = item;\n        this.onSelectEnd.emit(item);\n      } else {\n        this._date[1] = this._date[0];\n        this.onSelectEnd.emit(this._date[0]);\n        this._date[0] = item;\n        this.onSelectStart.emit(item);\n      }\n    } else if (this._date[0].time > item.time) {\n      this._date[0] = item;\n      this.onSelectStart.emit(item);\n    } else if (this._date[1].time < item.time) {\n      this._date[1] = item;\n      this.onSelectEnd.emit(item);\n    } else {\n      this._date[0] = item;\n      this.onSelectStart.emit(item);\n      this._date[1] = null;\n    }\n\n    this.onChange.emit(this._date as ICalendarDay[]);\n  }\n\n  private handleSelectedMultiMode(item: ICalendarDay): void {\n    const index = this._date.findIndex(e => !!e && e.time === item.time);\n\n    if (index === -1) {\n      this._date.push(item);\n    } else {\n      this._date.splice(index, 1);\n    }\n\n    this.onChange.emit(this._date.filter(e => !!e) as ICalendarDay[]);\n  }\n}\n","<div [class]=\"color\">\n  <ng-template [ngIf]=\"!isRange\" [ngIfElse]=\"rangeBox\">\n    <div class=\"days-box\">\n      <ng-template ngFor let-day [ngForOf]=\"month.days\"><!--  [ngForTrackBy]=\"trackByTime\">   -->\n        <div class=\"days\">\n          <ng-container *ngIf=\"day\">\n            <button type='button'\n            \t\t[class]=\"'days-btn ' + day.cssClass\"\n            \t\t[class.today]=\"day.isToday\"\n            \t\t(click)=\"onSelected(day)\"\n            \t\t[class.marked]=\"day.marked\"\n            \t\t[class.last-month-day]=\"day.isLastMonth\"\n            \t\t[class.next-month-day]=\"day.isNextMonth\"\n            \t\t[class.on-selected]=\"isSelected(day.time)\"\n            \t\t[disabled]=\"day.disable\"\n            \t\t[attr.aria-label]=\"getDayLabel(day) | date:DAY_DATE_FORMAT\">\n              <p>{{ day.title }}</p>\n              <ion-note *ngIf=\"day.subTitle\" [color]=\"colorSubtitle\">{{ day?.subTitle }}</ion-note>\n            </button>\n          </ng-container>\n        </div>\n      </ng-template>\n    </div>\n  </ng-template>\n\n  <ng-template #rangeBox>\n    <div class=\"days-box\">\n      <ng-template ngFor let-day [ngForOf]=\"month.days\"><!--  [ngForTrackBy]=\"trackByTime\">   -->\n        <div class=\"days\"\n        \t [class.startSelection]=\"isStartSelection(day)\"\n        \t [class.endSelection]=\"isEndSelection(day)\"\n        \t [class.is-first-wrap]=\"day?.isFirst\"\n        \t [class.is-last-wrap]=\"day?.isLast\"\n        \t [class.between]=\"isBetween(day)\">\n          <ng-container *ngIf=\"day\">\n            <button type='button'\n            \t\t[class]=\"'days-btn ' + day.cssClass\"\n            \t\t[class.today]=\"day.isToday\"\n            \t\t(click)=\"onSelected(day)\"\n            \t\t[class.marked]=\"day.marked\"\n            \t\t[class.last-month-day]=\"day.isLastMonth\"\n            \t\t[class.next-month-day]=\"day.isNextMonth\"\n            \t\t[class.is-first]=\"day.isFirst\"\n            \t\t[class.is-last]=\"day.isLast\"\n            \t\t[class.on-selected]=\"isSelected(day.time)\"\n            \t\t[disabled]=\"day.disable\">\n              <p>{{ day.title }}</p>\n              <ion-note *ngIf=\"day.subTitle\" [color]=\"colorSubtitle\">{{ day?.subTitle }}</ion-note>\n            </button>\n          </ng-container>\n\n        </div>\n      </ng-template>\n    </div>\n  </ng-template>\n</div>\n","import { Component, Input } from '@angular/core';\nimport defaultValues, { ColorType } from '../../types';\nimport { DateTimeHelper } from '../../helpers';\n\n\n@Component({\n  selector: 'ion-calendar-week',\n  templateUrl: './calendar-week.component.html',\n  styleUrls: ['./calendar-week.component.scss']\n})\nexport class CalendarWeekComponent {\n  private WEEKDAYS = DateTimeHelper.weekDays();\n  private _weekDaysOld: string[] = this.WEEKDAYS;\n  private _weekDays: string[] = this.WEEKDAYS;\n  private _weekStart = 0;\n\n  public displayWeekDays: string[] = this._weekDays;\n\n  @Input() color: ColorType | undefined = defaultValues.COLOR as ColorType;\n\n  constructor() {\n    // console.log(\"CalendarWeekComponent.constructor\");\n  }\n\n  @Input()\n  set weekDays(value: string[] | undefined) {\n    if (value && value.length === 7) {\n      this._weekDays = [...value];\n      this.adjustSort(this._weekStart);\n    }\n  }\n\n  @Input()\n  set weekStart(value: number) {\n    this.adjustSort(value);\n  }\n\n  private adjustSort(weekStart: number): void {\n    if (weekStart == this._weekStart && this.isEquals(this._weekDays, this._weekDaysOld)) return;\n\n    if (weekStart == 1) {\n      const cacheWeekArray = [...this._weekDays];\n      cacheWeekArray.push(cacheWeekArray.shift()!);\n      this.displayWeekDays = [...cacheWeekArray];\n\n    } else {\n      this.displayWeekDays = [...this._weekDays];\n    }\n\n    this._weekDaysOld = Array.from(this._weekDays);\n    this._weekStart = weekStart;\n  }\n\n  private isEquals(a: Array<any>, b: Array<any>): boolean {\n    try {\n      return JSON.stringify(a) === JSON.stringify(b);\n    } catch (error) {\n      return false;\n    }\n  }\n}\n","<ion-toolbar class=\"week-toolbar\" [color]=\"color\" no-border-top>\n  <ul [class]=\"'week-title ' + color\">\n      <li *ngFor=\"let w of displayWeekDays\">{{ w }}</li>\n  </ul>\n</ion-toolbar>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ICalendarMonth } from '../../models';\nimport defaultValues from '../../types';\nimport { DateTimeHelper } from '../../helpers';\n\n@Component({\n  selector: 'ion-month-picker',\n  templateUrl: './month-picker.component.html',\n  styleUrls: ['./month-picker.component.scss']\n})\nexport class MonthPickerComponent {\n  _thisMonth = new Date();\n  _monthsTitle = DateTimeHelper.monthsShortTitle();\n  MONTH_FORMAT = 'MMMM';\n\n  @Input() month!: ICalendarMonth;\n  @Input() color = defaultValues.COLOR;\n  @Output() onSelect: EventEmitter<number> = new EventEmitter();\n\n  @Input() set monthsTitle(value: string[]) {\n    if (Array.isArray(value) && value.length === 12) {\n      this._monthsTitle = value;\n    }\n  }\n  get monthsTitle(): string[] {\n    return this._monthsTitle;\n  }\n\n  constructor() {\n    // console.log(\"MonthPickerComponent.constructor\");\n  }\n\n  _onSelect(month: number): void {\n    this.onSelect.emit(month);\n  }\n\n  getDate(month: number) {\n    return new Date(this._thisMonth.getFullYear(), month, 1);\n  }\n\n  get monthSelected(): number {\n    return this.month.original.month;\n  }\n}\n","<!-- && month.original.year === _thisMonth.getFullYear()\" -->\n<div [class]=\"'month-picker ' + color\">\n  <div class=\"month-packer-item\"\n    *ngFor=\"let m of _monthsTitle; let idx = index\"\n    [class.this-month]=\" idx === _thisMonth.getMonth()\"\n    [class.active]=\" idx === monthSelected\">\n\n    <button type=\"button\" (click)=\"_onSelect(idx+1)\" [attr.aria-label]=\"getDate(idx) | date:MONTH_FORMAT\">\n      {{ m }}\n    </button>\n\n  </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport defaultValues from '../../types';\n\n@Component({\n  selector: 'ion-year-picker',\n  templateUrl: './year-picker.component.html',\n  styleUrls: ['./year-picker.component.scss']\n})\nexport class YearPickerComponent {\n  _thisYear = new Date();\n  _yearRanges: number[] = [];\n\n  private _year: number = new Date().getFullYear();\n  get year(): number {\n    return this._year;\n  }\n  @Input() set year(value: number) {\n    this._year = value;\n  }\n\n  private _yearStep: number = 0;\n  get yearStep(): number {\n    return this._yearStep;\n  }\n  @Input() set yearStep(value: number) {\n    if (this._year) {\n      this._yearStep = value;\n      this.setYearRanges(this.year, value);\n    }\n  }\n\n  @Input() color = defaultValues.COLOR;\n  @Output() onSelect: EventEmitter<number> = new EventEmitter();\n\n  constructor() {\n    // console.log(\"YearPickerComponent.Constructor\");\n    this.setYearRanges(this._thisYear.getFullYear(), 0);\n  }\n\n  private setYearRanges(year: number, step: number) {\n    const yearBase = year + (step * 15);\n    const start = yearBase - 7;\n    const end = yearBase + 7;\n\n    this._yearRanges = [];\n    for (var i = start; i <= end; i++) {\n      this._yearRanges.push(i);\n    }\n  }\n\n  _onSelect(year: number): void {\n    this.onSelect.emit(year);\n  }\n\n  ngOnChanges(changes: any) {\n    if (changes.year) {\n      this._year = changes.year.currentValue;\n      this.setYearRanges(this._year, 0);\n    }\n  }\n}\n","<div [class]=\"'year-picker ' + color\">\n  <div class=\"year-packer-item\"\n    *ngFor=\"let y of _yearRanges\"\n    [class.this-year]=\"y === _thisYear.getFullYear()\"\n    [class.active]=\"y === year\">\n\n    <button type=\"button\" (click)=\"_onSelect(y)\" >\n      {{ y }}\n    </button>\n\n  </div>\n</div>\n","import { Component, Input, OnInit, Output, EventEmitter, forwardRef, Provider } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { Settings as luxonSettings, DateTime } from 'luxon';\nimport { DateTimeHelper } from '../../helpers';\n\nimport { IonCalendarService } from '../../ion-calendar.service';\nimport { ICalendarComponentMonthChange, ICalendarComponentOptions, ICalendarComponentWeekChange, ICalendarDay, ICalendarModalOptions, ICalendarMonth } from '../../models';\nimport defaultValues, { CalendarComponentOnChangeType, CalendarComponentPayloadRangeType, CalendarComponentPayloadType, CalendarComponentType, ColorType, pickModes } from '../../types';\n\nexport const ION_CAL_VALUE_ACCESSOR: Provider = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => CalendarComponent),\n  multi: true,\n};\n@Component({\n  selector: 'ion-calendar',\n  templateUrl: './calendar.component.html',\n  styleUrls: ['./calendar.component.scss'],\n  providers: [ION_CAL_VALUE_ACCESSOR],\n})\nexport class CalendarComponent implements ControlValueAccessor, OnInit {\n\n  def!: ICalendarModalOptions;\n  monthOpt!: ICalendarMonth;\n  calendarMonthValue: Array<ICalendarDay | null> = [null, null];\n  view: 'year' | 'month' | 'days' = 'days';\n  yearStep: number = 0;\n\n  public _monthsTitle = DateTimeHelper.monthsShortTitle();\n\n  private _showToggleButtons = true;\n  get showToggleButtons(): boolean {\n    return this._showToggleButtons;\n  }\n  set showToggleButtons(value: boolean) {\n    this._showToggleButtons = value;\n  }\n\n  private _showMonthPicker = true;\n  get showMonthPicker(): boolean {\n    return this._showMonthPicker;\n  }\n  set showMonthPicker(value: boolean) {\n    this._showMonthPicker = value;\n  }\n\n  // private _showYearPicker = true;\n  // private get showYearPicker(): boolean {\n  //   return this._showYearPicker;\n  // }\n  // private set showYearPicker(value: boolean) {\n  //   this._showYearPicker = value;\n  // }\n\n  private _options: ICalendarComponentOptions = {};\n  get options(): ICalendarComponentOptions {\n    return this._options;\n  }\n\n  @Input()\n  set options(value: ICalendarComponentOptions) {\n    this._options = value;\n    this.initOpt();\n    if (this.monthOpt && this.monthOpt.original) {\n      //this.monthOpt = this.createMonth(this.monthOpt.original.time);\n      this.createWeekOrMonth(this.monthOpt.original.time);\n    }\n  }\n\n  // @Input()\n  // set locale(locale: string) {\n  //   luxonSettings.defaultLocale = locale;\n  // }\n  @Input() color: ColorType | undefined = undefined;\n  @Input() format: string = defaultValues.DATE_FORMAT;\n  @Input() type: CalendarComponentType = 'string';\n  @Input() readonly = false;\n\n  @Output() onChange: EventEmitter<CalendarComponentOnChangeType> = new EventEmitter();\n  @Output() onMonthChange: EventEmitter<ICalendarComponentMonthChange> = new EventEmitter();\n  @Output() onWeekChange: EventEmitter<ICalendarComponentWeekChange> = new EventEmitter();\n  @Output() onSelect: EventEmitter<ICalendarDay> = new EventEmitter();\n  @Output() onSelectStart: EventEmitter<ICalendarDay> = new EventEmitter();\n  @Output() onSelectEnd: EventEmitter<ICalendarDay> = new EventEmitter();\n\n  // private readonly MONTH_DATE_FORMAT = 'MMMM yyyy';\n  constructor(public calSvc: IonCalendarService) {\n    // console.log(\"CalendarComponent.constructor\");\n    luxonSettings.defaultLocale = \"en\";\n  }\n\n  ngOnInit(): void {\n    this.initOpt();\n    this.createWeekOrMonth(new Date().getTime());\n    // console.log(\">>> monthOpt\", this.monthOpt);\n  }\n\n  private _selectedDates!: Date | Date[];\n\n  get selectedDates() {\n    if (this._selectedDates) {\n      return this._selectedDates;\n    }\n\n    const dates: Array<Date> = [];\n    for (let index = 0; index < this.calendarMonthValue.length; index++) {\n      const element = this.calendarMonthValue[index];\n      if (element?.time) {\n        dates.push(new Date(element.time));\n      }\n    }\n    return dates;\n  }\n  private set selectedDates(value: Date | Date[]) {\n    this._selectedDates = value;\n  }\n\n  // get originalDate() {\n  //   return this._handleType(this.monthOpt?.original?.time ?? 0);\n  // }\n\n  // getDate(date: number) {\n  //   return new Date(date);\n  // }\n\n  // setViewDate(value: CalendarComponentPayloadType) {\n  //   this.createWeekOrMonth(this._payloadToTimeNumber(value));\n  // }\n\n  protected switchView(): void {\n    this.view = this.view === 'days'\n      ? ((this.options.showYearPicker ?? true) ? 'year' : 'month')\n      : (this.view === 'year' ? 'month' : 'days');\n  }\n\n  switchIcon(): string {\n    return this.view === 'days'\n      ? 'caret-down'\n      : (this.options.showYearPicker ?? true) && this.view === 'year' ? 'caret-down' : 'caret-up';\n  }\n\n  protected prev(): void {\n    if (this.view === 'days') {\n      if (this.def.displayMode === 'week') {\n        this.backWeek();\n      } else {\n        this.backMonth();\n      }\n    } else if (this.view === 'month') {\n      this.prevYear();\n    } else {\n      this.yearStep -= 1;\n    }\n  }\n\n  protected next(): void {\n    if (this.view === 'days') {\n      if (this.def.displayMode === 'week') {\n        this.nextWeek();\n      } else {\n        this.nextMonth();\n      }\n    } else if (this.view === 'month') {\n      this.nextYear();\n    } else {\n      this.yearStep += 1;\n    }\n  }\n\n  private prevYear(): void {\n    // if (moment(this.monthOpt.original.time).year() === 1970) { return; }\n    //const backTime = moment(this.monthOpt.original.time).subtract(1, 'year').valueOf();\n    const backTime = DateTime.fromMillis(this.monthOpt.original.time).minus({ year: 1 }).valueOf();\n    this.createWeekOrMonth(backTime);\n  }\n\n  private nextYear(): void {\n    // const nextTime = moment(this.monthOpt.original.time).add(1, 'year').valueOf();\n    const nextTime = DateTime.fromMillis(this.monthOpt.original.time).plus({ year: 1 }).valueOf();\n    this.createWeekOrMonth(nextTime);\n  }\n\n  private nextMonth() {\n    //const nextTime = moment(this.monthOpt.original.time).add(1, 'months').valueOf();\n    const nextTime = DateTime.fromMillis(this.monthOpt.original.time).plus({ months: 1 }).valueOf();\n    this.onMonthChange.emit({\n      oldMonth: this.calSvc.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calSvc.multiFormat(nextTime),\n    });\n    this.monthOpt = this.createMonth(nextTime);\n  }\n\n  private nextWeek() {\n    let nextTime = DateTime.fromMillis(this.monthOpt.original.time).plus({ weeks: this.def.weeks }).valueOf();\n    let newWeek = this.calSvc.multiFormat(nextTime);\n    const oldWeek = this.calSvc.multiFormat(this.monthOpt.original.time);\n\n    this.monthOpt = this.createWeek(nextTime);\n    this.onWeekChange.emit({ oldWeek: oldWeek, newWeek: this.calSvc.multiFormat(this.monthOpt.original.time), });\n\n    if (oldWeek.month != newWeek.month) {\n      this.onMonthChange.emit({ oldMonth: oldWeek, newMonth: this.calSvc.multiFormat(this.monthOpt.original.time), });\n    }\n  }\n\n\n  canNext(): boolean {\n    if (!this.def.to || this.view !== 'days') return true;\n\n    const toDate = DateTimeHelper.parse(this.def.to);\n    return this.monthOpt.original.lastDayOfMonth < toDate.toMillis();\n  }\n\n  private backMonth(): void {\n    const backTime = DateTime.fromMillis(this.monthOpt.original.time).minus({ months: 1 }).valueOf();\n    this.onMonthChange.emit({\n      oldMonth: this.calSvc.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calSvc.multiFormat(backTime),\n    });\n    this.monthOpt = this.createMonth(backTime);\n  }\n\n  private backWeek(): void {\n    let backTime = DateTime.fromMillis(this.monthOpt.original.time).minus({ weeks: this.def.weeks }).valueOf();\n    let newWeek = this.calSvc.multiFormat(backTime);\n    const oldWeek = this.calSvc.multiFormat(this.monthOpt.original.time);\n\n    this.onWeekChange.emit({ oldWeek: oldWeek, newWeek: newWeek, });\n\n    if (oldWeek.month != newWeek.month) {\n      this.onMonthChange.emit({ oldMonth: oldWeek, newMonth: newWeek, });\n    }\n\n    this.monthOpt = this.createWeek(backTime);\n  }\n\n  canPrev(): boolean {\n    if (!this.def.from || this.view !== 'days') return true;\n\n    const fromDate = DateTimeHelper.parse(this.def.from);\n    return this.monthOpt.original.time > fromDate.valueOf();\n  }\n\n  onMonthSelect(month: number): void {\n    this.view = 'days';\n\n    const newMonth = DateTimeHelper.parse(this.monthOpt.original.time).set({ month }).valueOf();\n    this.onMonthChange.emit({\n      oldMonth: this.calSvc.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calSvc.multiFormat(newMonth),\n    });\n    this.createWeekOrMonth(newMonth);\n  }\n\n  public onYearSelect(year: number): void {\n    this.view = 'month';\n\n    const newYear = DateTimeHelper.parse(this.monthOpt.original.time).set({ year }).valueOf();\n    this.onMonthChange.emit({\n      oldMonth: this.calSvc.multiFormat(this.monthOpt.original.time),\n      newMonth: this.calSvc.multiFormat(newYear),\n    });\n    this.monthOpt = this.createMonth(newYear);\n  }\n\n  protected onChanged($event: ICalendarDay[]): void {\n    const eCD: ICalendarDay[] = $event;\n\n    this.yearStep = 0;\n\n    const emitOnChange = (date: CalendarComponentOnChangeType) => {\n      this._onChanged(date);\n      this.onChange.emit(date);\n    }\n\n    switch (this.def.pickMode) {\n      case pickModes.single:\n        const time = eCD[0].time;\n        const date = this._handleType(time);\n\n        this.selectedDates = DateTimeHelper.parse(time).toJSDate();\n        emitOnChange(date);\n        break;\n\n      case pickModes.range:\n        if (eCD[0] && eCD[1]) {\n          const timeFrom = eCD[0].time;\n          const timeTo = eCD[1].time;\n\n          const rangeDate: CalendarComponentPayloadRangeType = {\n            from: this._handleType(timeFrom),\n            to: this._handleType(timeTo),\n          };\n\n          this.selectedDates = Array<Date>(\n            DateTimeHelper.parse(timeFrom).toJSDate(),\n            DateTimeHelper.parse(timeTo).toJSDate()\n          );\n\n          emitOnChange(rangeDate);\n        }\n        break;\n\n      case pickModes.multi:\n        const emitChangeForMulti = (days: ICalendarDay[]): Array<Date> => {\n          const dates: Array<Date> = [];\n\n          const payloads: Array<CalendarComponentPayloadType> = [];\n          for (let i = 0; i < days.length; i++) {\n            if (days[i] && days[i].time) {\n              const time = days[i].time;\n              const payload = this._handleType(time);\n              payloads.push(payload);\n              dates.push(DateTimeHelper.parse(time).toJSDate());\n            }\n          }\n\n          emitOnChange(payloads);\n          return dates\n        }\n        this.selectedDates = emitChangeForMulti(eCD);\n        break;\n\n      default:\n    }\n  }\n\n  // onSwipe($event: any): void {\n  //   console.log('onSwipe', $event); // TODO remove debug\n  //   const isNext = $event.deltaX < 0;\n  //   if (isNext && this.canNext()) {\n  //     this.nextMonth();\n  //   } else if (!isNext && this.canPrev()) {\n  //     this.backMonth();\n  //   }\n  // }\n\n  private _onChanged: Function = () => { };\n  private _onTouched: Function = () => { };\n\n  private _payloadToTimeNumber(value: CalendarComponentPayloadType): number {\n    // let date;\n    // if (this.type === 'string') {\n    //   date = moment(value, this.format);\n    // } else {\n    //   date = moment(value);\n    // }\n\n    // const date = this.type === 'string'\n    const date = typeof value === 'string'\n      ? DateTime.fromFormat(value as string, this.format.replace(/Y/g, 'y'))\n      : DateTimeHelper.parse(value);\n\n    return date.valueOf();\n  }\n\n  monthFormat(date: number): string {\n    if (!this.def.monthFormat) return '';\n    // return moment(date).format(this.def.monthFormat.replace(/y/g, 'Y'));\n    return DateTimeHelper.parse(date).toFormat(this.def.monthFormat.replace(/Y/g, 'y'), { locale: this._options.locale?.locale });\n  }\n\n  private initOpt(): void {\n    this.showToggleButtons = this._options.showToggleButtons ?? true;\n    this.showMonthPicker = this._options.showMonthPicker ?? true;\n\n    if (this.view !== 'days' && !this.showMonthPicker) {\n      this.view = 'days';\n    }\n\n    if (this.color && this.color !== this.options.color) {\n      this.options.color = this.color;\n    }\n\n    this.def = this.calSvc.safeOpt(this._options);\n    this._options = {\n      ...this._options,\n      ...this.def,\n    }\n\n    const locale = this._options.locale?.locale || \"en\";\n    luxonSettings.defaultLocale = locale;\n\n    this._monthsTitle = this._options.monthsTitle ?? DateTimeHelper.monthsShortTitle(locale);\n  }\n\n  private createWeekOrMonth(time: number) {\n    if (this.def.displayMode === 'week') {\n      this.monthOpt = this.createWeek(time);\n    } else {\n      this.monthOpt = this.createMonth(time);\n    }\n  }\n\n  private createWeek(date: number): ICalendarMonth {\n    const period = this.calSvc.createWeeksByPeriod(date, this.def);\n    return period[0];\n  }\n  private createMonth(date: number): ICalendarMonth {\n    const period = this.calSvc.createMonthsByPeriod(date, 1, this.def);\n    return period[0];\n  }\n\n  private _createCalendarDay(value: CalendarComponentPayloadType): ICalendarDay {\n    return this.calSvc.createCalendarDay(this._payloadToTimeNumber(value), this.def);\n  }\n\n  private _handleType(value: number): CalendarComponentPayloadType {\n    // const date = moment(value);\n    const date = DateTimeHelper.parse(value);\n    switch (this.type) {\n      case 'time':\n        return date.valueOf();\n      case 'js-date':\n        return date.toJSDate();\n      case 'object':\n        return date.toObject();\n      case 'luxon':\n        return date;\n      case 'string':\n      default:\n        return date.toFormat(this.format.replace(/Y/g, 'y'));\n    }\n  }\n\n  writeValue(obj: CalendarComponentOnChangeType): void {\n    this._writeValue(obj);\n    if (obj) {\n      if (this.calendarMonthValue[0]) {\n        //this.monthOpt = this.createMonth(this._calendarMonthValue[0].time);\n        if (!Number.isNaN(this.calendarMonthValue[0].time))\n          this.createWeekOrMonth(this.calendarMonthValue[0].time);\n      } else {\n        // this.monthOpt = this.createMonth(new Date().getTime());\n        this.createWeekOrMonth(new Date().getTime());\n      }\n    }\n  }\n\n  registerOnChange(fn: Function): void {\n    this._onChanged = fn;\n  }\n\n  registerOnTouched(fn: Function): void {\n    this._onTouched = fn;\n  }\n\n  private _writeValue(value: CalendarComponentOnChangeType): void {\n    if (!value) {\n      this.calendarMonthValue = [null, null];\n      return;\n    }\n\n    this.onChange.emit(value);\n\n    switch (this.def.pickMode) {\n      case 'single':\n        this.calendarMonthValue[0] = this._createCalendarDay(value as CalendarComponentPayloadType);\n        break;\n\n      case 'range':\n        const { from, to } = value as CalendarComponentPayloadRangeType;\n        this.calendarMonthValue[0] = from ? this._createCalendarDay(from) : null;\n        this.calendarMonthValue[1] = to ? this._createCalendarDay(to) : null;\n        break;\n\n      case 'multi':\n        if (Array.isArray(value)) {\n          this.calendarMonthValue = value.map(e => {\n            return this._createCalendarDay(e);\n          });\n        } else {\n          this.calendarMonthValue = [null, null];\n        }\n        break;\n\n      default:\n    }\n  }\n}\n","<div class=\"title\">\n  <ng-template [ngIf]=\"showMonthPicker && !readonly\" [ngIfElse]=\"title\">\n      <ion-button type=\"button\" fill=\"clear\" class=\"switch-btn\" (click)=\"switchView()\" mode=\"md\">\n          {{ monthFormat(monthOpt.original.time) }}\n          <ion-icon class=\"arrow-dropdown\" [name]=\"switchIcon()\"></ion-icon>\n      </ion-button>\n  </ng-template>\n\n  <ng-template #title>\n      <div class=\"switch-btn\">\n        {{ monthFormat(monthOpt.original.time) }}\n      </div>\n  </ng-template>\n\n  <ng-template [ngIf]=\"showToggleButtons && !readonly\">\n      <ion-button type=\"button\" fill=\"clear\" class=\"back\" [disabled]=\"!canPrev()\" (click)=\"prev()\">\n          <ion-icon slot=\"icon-only\" size=\"small\" name=\"chevron-back\"></ion-icon>\n      </ion-button>\n      <ion-button type=\"button\" fill=\"clear\" class=\"forward\" [disabled]=\"!canNext()\" (click)=\"next()\">\n          <ion-icon slot=\"icon-only\" size=\"small\" name=\"chevron-forward\"></ion-icon>\n      </ion-button>\n  </ng-template>\n</div>\n\n<ng-template #viewDays [ngIf]=\"view === 'days'\">\n  <ion-calendar-week color=\"transparent\" [weekDays]=\"def.weekdays\" [weekStart]=\"def.weekStart??0\">\n  </ion-calendar-week>\n\n  <!-- (swipe)=\"onSwipe($event)\" -->\n  <ion-calendar-month class=\"component-mode\"\n      [(ngModel)]=\"calendarMonthValue\"\n      [month]=\"monthOpt\"\n      [readonly]=\"readonly\"\n      (onChange)=\"onChanged($event)\"\n      (onSelect)=\"onSelect.emit($event)\"\n      (onSelectStart)=\"onSelectStart.emit($event)\"\n      (onSelectEnd)=\"onSelectEnd.emit($event)\"\n      [pickMode]=\"def.pickMode||'single'\"\n      [color]=\"def.color\"\n      [colorSubtitle]=\"def.colorSubtitle\">\n  </ion-calendar-month>\n</ng-template>\n\n<ng-template #viewMonths [ngIf]=\"view === 'month'\">\n  <ion-month-picker\n      (onSelect)=\"onMonthSelect($event)\"\n      [color]=\"def.color!\"\n      [month]=\"monthOpt\"\n      [monthsTitle]=\"_monthsTitle\">\n  </ion-month-picker>\n</ng-template>\n\n<ng-template #viewYears [ngIf]=\"view === 'year'\">\n  <ion-year-picker\n      (onSelect)=\"onYearSelect($event)\"\n      [color]=\"def.color!\"\n      [year]=\"monthOpt.original.year\"\n      [yearStep]=\"yearStep\">\n  </ion-year-picker>\n</ng-template>\n","import {\n  Component, ViewChild, ElementRef, ChangeDetectorRef, Renderer2, OnInit, Input, AfterViewInit\n} from '@angular/core';\nimport { NavParams, ModalController, IonContent } from '@ionic/angular';\n\nimport { IonCalendarService } from '../../ion-calendar.service';\nimport { ICalendarModalOptions, ICalendarDay, ICalendarMonth } from '../../models';\nimport { DateTimeHelper } from '../../helpers';\nimport { pickModes } from '../../types';\n\nconst NUM_OF_MONTHS_TO_CREATE = 3;\n\n@Component({\n  selector: 'ion-calendar-modal',\n  templateUrl: './calendar-modal.component.html',\n  styleUrls: ['./calendar-modal.component.scss']\n})\nexport class CalendarModalComponent implements OnInit, AfterViewInit {\n  def!: ICalendarModalOptions;\n  datesTemp: Array<ICalendarDay | null> = [null];\n  calendarMonths!: Array<ICalendarMonth>;\n  // private step!: number;\n  private showYearPicker!: boolean;\n  private year!: number;\n  // private years!: Array<number>;\n  private _scrollLock = true;\n  private actualFirstTime!: number;\n\n  @ViewChild('ionContent')\n  private content: ElementRef | undefined;\n\n  @ViewChild('months')\n  private monthElement!: ElementRef;\n\n  // @HostBinding('class.ion-page')\n  // private ionPage = true;\n\n  @Input() options!: ICalendarModalOptions;\n\n  constructor(\n    private _renderer: Renderer2,\n    public _elementRef: ElementRef,\n    public params: NavParams,\n    public modalCtrl: ModalController,\n    public ref: ChangeDetectorRef,\n    public calSvc: IonCalendarService\n  ) {\n    // console.log(\"CalendarModalComponent.constructor\");\n  }\n\n  ngOnInit(): void {\n    this.init();\n    this.initDefaultDate();\n  }\n\n  ngAfterViewInit(): void {\n    this.findCssClass();\n    if (this.def.canBackwardsSelected) this.backwardsMonth();\n    this.scrollToDefaultDate();\n  }\n\n  private init(): void {\n    this.def = this.calSvc.safeOpt(this.options);\n    this.def.showAdjacentMonthDay = false;\n\n    const { from, to, defaultScrollTo } = this.def;\n\n    let step = this.def.step || 0;\n\n    if (DateTimeHelper.isDate(to)) {\n      const dateTo = DateTimeHelper.parse(to).toJSDate();\n      step = Math.max(step, this.findIndexMonthElement(dateTo));\n    }\n\n    const startTime = DateTimeHelper.parse(from).valueOf();\n    const scrollTo = defaultScrollTo!;\n\n    if (scrollTo.getTime() !== startTime) {\n      step = Math.max(step, this.findIndexMonthElement(scrollTo));\n    }\n\n    step = Math.max(step, this.calSvc.DEFAULT_STEP);\n    this.calendarMonths = this.calSvc.createMonthsByPeriod(startTime, step, this.def);\n  }\n\n  private initDefaultDate(): void {\n    const { pickMode, defaultDate, defaultDateRange, defaultDates } = this.def;\n    switch (pickMode) {\n      case pickModes.single:\n        if (defaultDate) {\n          this.datesTemp[0] = this.calSvc.createCalendarDay(this._getDayTime(defaultDate), this.def);\n        }\n        break;\n      case pickModes.range:\n        if (defaultDateRange) {\n          if (defaultDateRange.from) {\n            this.datesTemp[0] = this.calSvc.createCalendarDay(this._getDayTime(defaultDateRange.from), this.def);\n          }\n          if (defaultDateRange.to) {\n            this.datesTemp[1] = this.calSvc.createCalendarDay(this._getDayTime(defaultDateRange.to), this.def);\n          }\n        }\n        break;\n      case pickModes.multi:\n        if (defaultDates && defaultDates.length) {\n          this.datesTemp = defaultDates.map(e => this.calSvc.createCalendarDay(this._getDayTime(e), this.def));\n        }\n        break;\n      default:\n        this.datesTemp = [null, null];\n    }\n  }\n\n  private findCssClass(): void {\n    const { cssClass } = this.def;\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  protected onChange(data: ICalendarDay[]): void {\n    const { pickMode, autoDone } = this.def;\n\n    this.datesTemp = data;\n    this.ref.detectChanges();\n\n    if (pickMode !== pickModes.multi && autoDone && this.canDone()) {\n      this.done();\n    }\n\n    this.repaintDOM();\n  }\n\n  cancel(): void {\n    this.modalCtrl.dismiss(null, 'cancel');\n  }\n\n  done(): void {\n    const { pickMode } = this.def;\n\n    this.modalCtrl.dismiss(this.calSvc.wrapResult(this.datesTemp as ICalendarDay[], pickMode!), 'done');\n  }\n\n  canDone(): boolean {\n    if (!Array.isArray(this.datesTemp)) {\n      return false;\n    }\n    const { pickMode } = this.def;\n\n    switch (pickMode) {\n      case pickModes.single:\n        return !!this.datesTemp[0]?.time;\n      case pickModes.range:\n        return !!(this.datesTemp[0]?.time && this.datesTemp[1]?.time);\n      case pickModes.multi:\n        return this.datesTemp.length > 0 && this.datesTemp.every(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: any): void {\n    const len = this.calendarMonths.length;\n    const final = this.calendarMonths[len - 1];\n    // const nextTime = moment(final.original.time).add(1, 'M').valueOf();\n    const nextTime = DateTimeHelper.parse(final.original.time).plus({ months: 1 }).valueOf();\n    const rangeEnd = this.def.to ? DateTimeHelper.parse(this.def.to).minus({ months: 1 }) : 0;\n\n    // if (len <= 0 || (rangeEnd !== 0 && moment(final.original.time).isAfter(rangeEnd))) {\n    if (len <= 0 || (rangeEnd !== 0 && DateTimeHelper.parse(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.def));\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.def.canBackwardsSelected = false;\n      return;\n    }\n\n    const firstTime = (this.actualFirstTime = DateTimeHelper.parse(first.original.time)\n      .minus({ months: NUM_OF_MONTHS_TO_CREATE })\n      .valueOf());\n\n    this.calendarMonths.unshift(...this.calSvc.createMonthsByPeriod(firstTime, NUM_OF_MONTHS_TO_CREATE, this.def));\n    this.ref.detectChanges();\n    this.repaintDOM();\n  }\n\n  private scrollToDate(date: Date): void {\n    const elIndex = this.findIndexMonthElement(date);\n    const monthElement = this.monthElement.nativeElement.children[`month-${elIndex}`];\n\n    setTimeout(() => {\n      const scrollTo = monthElement ? monthElement.offsetTop : 0;\n\n      if (scrollTo > 0)\n        this.content?.nativeElement.scrollByPoint(0, scrollTo, 120);\n\n    }, 350);\n\n  }\n\n  private scrollToDefaultDate(): void {\n    this.scrollToDate(this.def.defaultScrollTo!);\n  }\n\n  onScroll($event: any): void {\n    if (!this.def.canBackwardsSelected) return;\n\n    const content: IonContent = $event.target;\n    const { detail } = $event;\n\n    if (detail.scrollTop <= 200 && detail.velocityY < 0 && this._scrollLock) {\n      content.getScrollElement().then(scrollElem => {\n        this._scrollLock = !1;\n\n        const heightBeforeMonthPrepend = scrollElem.scrollHeight;\n        this.backwardsMonth();\n        setTimeout(() => {\n          const heightAfterMonthPrepend = scrollElem.scrollHeight;\n\n          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    // if (!this.content) return;\n\n    // const scrollElement = await this.content.getScrollElement();\n\n    // // Update scrollElem to ensure that height of the container changes as Months are appended/prepended\n    // scrollElement.style.zIndex = '2';\n    // scrollElement.style.zIndex = 'initial';\n    // Update monthsEle to ensure selected state is reflected when tapping on a day\n    this.monthElement.nativeElement.style.zIndex = '2';\n    this.monthElement.nativeElement.style.zIndex = 'initial';\n  }\n\n  private findIndexMonthElement(date: Date): number {\n    let startDate = this.actualFirstTime ? DateTimeHelper.parse(this.actualFirstTime) : DateTimeHelper.parse(this.def.from);\n    const defaultScrollTo = DateTimeHelper.parse(date);\n    const isAfter: boolean = defaultScrollTo > startDate;\n\n    if (!isAfter) return -1;\n\n    if (this.showYearPicker) {\n      startDate = DateTimeHelper.parse(new Date(this.year, 0, 1));\n    }\n\n    return Math.round(defaultScrollTo.diff(startDate, 'month').months);\n  }\n\n  _getDayTime(date: any): number {\n    // return moment(moment(date).format('YYYY-MM-DD')).valueOf();\n    const dtFormat = DateTimeHelper.parse(date).toFormat('yyyy-MM-dd');\n    return DateTimeHelper.parse(dtFormat).valueOf();\n  }\n\n  _monthTitle(date: any): string {\n    // return moment(date).format(this.def.monthFormat?.replace(/y/g, 'Y'));\n    const dtFormat = this.def.monthFormat?.replace(/Y/g, 'y') || 'MMM yyyy';\n    return DateTimeHelper.parse(date).toFormat(dtFormat, { locale: this.def.locale?.locale });\n  }\n\n  trackByIndex(index: number, momentDate: ICalendarMonth): number {\n    return momentDate.original ? momentDate.original.time : index;\n  }\n}\n","<ion-header>\n  <ion-toolbar [color]=\"def.color\" class=\"ion-no-border\">\n    <ion-buttons slot=\"start\">\n      <ion-button type='button' slot=\"icon-only\" shape=\"round\" fill=\"clear\" (click)=\"cancel()\">\n        <span *ngIf=\"def.closeLabel !== '' && !def.closeIcon\">{{ def.closeLabel }}</span>\n        <ion-icon *ngIf=\"def.closeIcon\" name=\"close\"></ion-icon>\n      </ion-button>\n    </ion-buttons>\n\n    <ion-title>{{ def.title }}</ion-title>\n\n    <ion-buttons slot=\"end\">\n      <ion-button type='button' *ngIf=\"!!def.clearLabel\" shape=\"round\" fill=\"clear\" [disabled]=\"!canClear()\" (click)=\"clear()\">\n        <span *ngIf=\"def.clearLabel !== ''\">{{ def.clearLabel }}</span>\n      </ion-button>\n      <ion-button type='button' slot=\"icon-only\" *ngIf=\"!def.autoDone\" shape=\"round\" fill=\"clear\" [disabled]=\"!canDone()\" (click)=\"done()\">\n        <span *ngIf=\"def.doneLabel !== '' && !def.doneIcon\">{{ def.doneLabel }}</span>\n        <ion-icon *ngIf=\"def.doneIcon\" name=\"checkmark\"></ion-icon>\n      </ion-button>\n    </ion-buttons>\n  </ion-toolbar>\n\n  <ng-content select=\"[sub-header]\"></ng-content>\n\n  <ion-calendar-week [color]=\"def.color\" [weekDays]=\"def.weekdays\" [weekStart]=\"def.weekStart??0\">\n  </ion-calendar-week>\n\n</ion-header>\n\n<ion-content #ionContent class=\"calendar-page\"\n             [ngClass]=\"{'multi-selection': def.pickMode === 'multi'}\"\n             (ionScroll)=\"onScroll($event)\"\n             [scrollEvents]=\"true\">\n\n  <div #months>\n    <ng-template ngFor let-month [ngForOf]=\"calendarMonths\" [ngForTrackBy]=\"trackByIndex\" let-i=\"index\">\n      <div class=\"month-box\" [attr.id]=\"'month-' + i\">\n        <h4 class=\"text-center month-title\">{{ _monthTitle(month.original.date) }}</h4>\n        <ion-calendar-month [month]=\"month\"\n                            [pickMode]=\"def.pickMode||'single'\"\n                            [id]=\"def.id\"\n                            [color]=\"def.color\"\n                            [colorSubtitle]=\"def.colorSubtitle\" \n                            (onChange)=\"onChange($event)\"\n                            [(ngModel)]=\"datesTemp\">\n        </ion-calendar-month>\n      </div>\n    </ng-template>\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 { CalendarComponent } from \"./calendar/calendar.component\";\r\nimport { CalendarModalComponent } from \"./calendar-modal/calendar-modal.component\";\r\nimport { CalendarMonthComponent } from \"./calendar-month/calendar-month.component\";\r\nimport { CalendarWeekComponent } from \"./calendar-week/calendar-week.component\";\r\nimport { MonthPickerComponent } from \"./month-picker/month-picker.component\";\r\nimport { YearPickerComponent } from \"./year-picker/year-picker.component\";\r\n\r\nexport {\r\n  CalendarModalComponent,\r\n  CalendarMonthComponent,\r\n  CalendarWeekComponent,\r\n  CalendarComponent,\r\n  MonthPickerComponent,\r\n  YearPickerComponent\r\n}\r\n\r\nexport const ION_CALENDAR_COMPONENTS = [\r\n  CalendarModalComponent,\r\n  CalendarMonthComponent,\r\n  CalendarWeekComponent,\r\n  CalendarComponent\r\n];\r\n","import { Injectable } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { ICalendarModalOptions } from './models/ICalendarOptions';\nimport { IModalOptions } from './models/IModalOptions';\nimport { IonCalendarService } from './ion-calendar.service';\nimport { CalendarModalComponent } from './components';\n\n@Injectable()\nexport class CalendarModalController {\n    constructor(public modalCtrl: ModalController, public calSvc: IonCalendarService) { }\n\n    /**\n     * @deprecated\n     * @param {ICalendarModalOptions} calendarOptions\n     * @param {IModalOptions} modalOptions\n     * @returns {any}\n     */\n    async openCalendar(calendarOptions: ICalendarModalOptions, modalOptions: IModalOptions = {}): Promise<{}> {\n        const options = this.calSvc.safeOpt(calendarOptions);\n\n        const calendarModal = await this.modalCtrl\n            .create({\n                component: CalendarModalComponent,\n                componentProps: {\n                    options,\n                },\n                ...modalOptions,\n            });\n        calendarModal.present();\n        const event = await calendarModal.onDidDismiss();\n        return await (event.data ? Promise.resolve(event.data) : Promise.reject('cancelled'));\n    }\n}\n","import { CUSTOM_ELEMENTS_SCHEMA, ModuleWithProviders, NgModule } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\nimport { IonCalendarService } from './ion-calendar.service';\nimport { CalendarModalController } from './calendar-modal.controller';\nimport { DEFAULT_CALENDAR_OPTIONS } from './calendar-options.provider';\nimport { ION_CALENDAR_COMPONENTS, MonthPickerComponent, YearPickerComponent } from './components';\nimport { ICalendarModalOptions } from './models';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nexport function calendarController(modalCtrl: ModalController, calSvc: IonCalendarService) {\n  return new CalendarModalController(modalCtrl, calSvc);\n}\n\n@NgModule({\n  declarations: [\n    ION_CALENDAR_COMPONENTS, MonthPickerComponent, YearPickerComponent\n  ],\n  imports: [\n    CommonModule, FormsModule\n  ],\n  exports: [\n    ION_CALENDAR_COMPONENTS, MonthPickerComponent, YearPickerComponent\n  ],\n  providers: [\n    IonCalendarService,\n    {\n      provide: CalendarModalController,\n      useFactory: calendarController,\n      deps: [ModalController, IonCalendarService],\n    }\n  ],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IonCalendarModule {\n\n  static forRoot(defaultOptions: ICalendarModalOptions = {}): ModuleWithProviders<any> {\n    return {\n      ngModule: IonCalendarModule,\n      providers: [\n        { provide: DEFAULT_CALENDAR_OPTIONS, useValue: defaultOptions }\n      ]\n    };\n  }\n}\n","export class ICalendarResult {\r\n  time: number = 0;\r\n  seconds: number = 0;\r\n  dateObj: Date = new Date();\r\n  string: string = '';\r\n  year: number = 0;\r\n  month: number = 0;\r\n  day: number = 0;\r\n}\r\n\r\nexport class ICalendarComponentWeekChange {\r\n  oldWeek!: ICalendarResult;\r\n  newWeek!: ICalendarResult;\r\n}\r\n\r\nexport class ICalendarComponentMonthChange {\r\n  oldMonth!: ICalendarResult;\r\n  newMonth!: ICalendarResult;\r\n}\r\n\r\n","/*\n * Public API Surface of ion-calendar\n */\n\nexport * from './lib/ion-calendar.service';\nexport * from './lib/ion-calendar.module';\n\nexport * from './lib/components';\nexport * from './lib/models';\nexport * from './lib/calendar-modal.controller';\nexport { DEFAULT_CALENDAR_OPTIONS } from './lib/calendar-options.provider';\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["luxonSettings","i1.IonCalendarService","i2","i4.CalendarMonthComponent","i5.CalendarWeekComponent","i6.MonthPickerComponent","i7.YearPickerComponent","i1","i2.IonCalendarService","i3","i4","i5.CalendarMonthComponent","i6.CalendarWeekComponent","i1.CalendarModalComponent","i2.CalendarMonthComponent","i3.CalendarWeekComponent","i4.CalendarComponent"],"mappings":"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"}