{"version":3,"file":"hicoder-angular-calendar.mjs","sources":["../../../projects/calendar/src/lib/calendar.service.ts","../../../projects/calendar/src/lib/calendar.config.ts","../../../projects/calendar/src/lib/calendar.util.ts","../../../projects/calendar/src/lib/calendar.interface.ts","../../../projects/calendar/src/lib/checkbox-input.component.ts","../../../projects/calendar/src/lib/checkbox-input.component.html","../../../projects/calendar/src/lib/display.component.ts","../../../projects/calendar/src/lib/display.component.html","../../../projects/calendar/src/lib/calendar.component.ts","../../../projects/calendar/src/lib/calendar.component.html","../../../projects/calendar/src/lib/calendar.module.ts","../../../projects/calendar/src/public-api.ts","../../../projects/calendar/src/hicoder-angular-calendar.ts"],"sourcesContent":["import { Injectable, Inject, OnDestroy } from \"@angular/core\";\n\nimport { Subject } from 'rxjs';\n\nimport { CalendarMessage } from './calendar.interface'; \n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class CalendarService\n  implements OnDestroy\n{\n  private calendarEventPublisher = new Subject<any>();\n\n  constructor() {}\n  ngOnDestroy() {}\n\n  public getCalendarEventPublisher(): Subject<CalendarMessage> {\n    return this.calendarEventPublisher;\n  }\n\n  public publishCalendarEvent(event:CalendarMessage) {\n    this.calendarEventPublisher.next(event);\n  }\n}\n","import {\n  IMonthDayNameInfo,\n  IGridDateModel,\n  IWeekDayNameInfo,\n} from 'tui-calendar';\n\nconst getCalendarTemplates = (isReadOnly: boolean): any => {\n  return {\n    monthDayname: (dayname: IMonthDayNameInfo) => {\n      return `\n        <span class=\"calendar-week-dayname-name\">${dayname.label}</span>`;\n    },\n    monthGridHeader: (dayModel: IGridDateModel) => {\n      let date = parseInt(dayModel.date.split('-')[2], 10);\n      let classNames = ['tui-full-calendar-weekday-grid-date '];\n      if (dayModel.isToday) {\n        classNames.push('tui-full-calendar-weekday-grid-date-decorator');\n      }\n      let cursor = 'default';\n      if (!isReadOnly) {\n        cursor = 'pointer'\n      }\n      return `\n        <span style=\"cursor: ${cursor};\" class=\"${classNames.join(' ')}\">\n        ${date}\n        </span>`;\n    },\n    weekDayname: (model: IWeekDayNameInfo) => {\n      return `\n        <span style=\"cursor: pointer;\">\n            <span class=\"tui-full-calendar-dayname-date\">${model.date}</span>\n            &nbsp;&nbsp;\n            <span class=\"tui-full-calendar-dayname-name\">${model.dayName}</span>\n        </span>`;\n    },\n  };\n};\n\nconst CalendarDefaultGroupColors: string[] = [\n  'LightSeaGreen',\n  'blueviolet',\n  'midnightblue',\n  'brown',\n  'red',\n  'RoyalBlue',\n  'darkgreen',\n  'darkorange',\n  'DodgerBlue',\n  'SeaGreen',\n  'DeepPink',\n  'GoldenRod',\n  'Indigo',\n  'chocolate',\n  'HotPink',\n  'DarkOrchid',\n  'LightCoral',\n  'LightSalmon',\n  'green',\n  'Maroon',\n  'Magenta',\n  'OrangeRed',\n  'crimson',\n  'Peru',\n  'Gold',\n  'RebeccaPurple',\n  'SaddleBrown',\n  'MediumSpringGreen',\n  'SteelBlue',\n  'Tan',\n  'Teal',\n  'darkblue',\n  'Violet',\n  'pink',\n  'OliveDrab',\n  'Navy',\n  'OliveDrab',\n  'MediumSpringGreen',\n  'MediumSlateBlue',\n  'MediumOrchid',\n  'blue',\n  'IndianRed',\n];\n\nconst createGroupColors = (groups: string[]): any[] => {\n  let groupColors: any[] = [];\n  let colorLen = CalendarDefaultGroupColors.length;\n  for (let [idx, group] of groups.entries()) {\n    groupColors.push({\n      id: group,\n      name: group,\n      color: 'white',\n      bgColor: CalendarDefaultGroupColors[idx % colorLen],\n      dragBgColor: CalendarDefaultGroupColors[idx % colorLen],\n      borderColor: CalendarDefaultGroupColors[idx % colorLen],\n    });\n  }\n  return groupColors;\n};\n\nconst dayNames: string[] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\nexport {\n  getCalendarTemplates,\n  CalendarDefaultGroupColors,\n  createGroupColors,\n  dayNames,\n};\n","const weekDayToNum: any = {\n  Sunday: 0,\n  Monday: 1,\n  Tuesday: 2,\n  Wednesday: 3,\n  Thursday: 4,\n  Friday: 5,\n  Saturday: 6,\n};\n\n// covertTZOffsetFromMinutes converts tzOffset minutes to HH:MM string.\nconst covertTZOffsetFromMinutes = (tzOffset: number): string => {\n  let hrs = Math.abs(tzOffset) / 60;\n  let rhrs = Math.floor(hrs);\n  let mins = (hrs - rhrs) * 60;\n  let rmins = Math.round(mins);\n\n  let hrStr = rhrs < 10 ? `0${rhrs}` : `${rhrs}`;\n  let minStr = rmins < 10 ? `0${rmins}` : `${rmins}`;\n\n  return tzOffset > 0 ? `-${hrStr}:${minStr}` : `+${hrStr}:${minStr}`;\n};\n// covertTZOffsetToMinutes converts tzOffset HH:MM string to minutes.\nconst covertTZOffsetToMinutes = (tzStr: string): number => {\n  if (!tzStr.startsWith('UTC') && !tzStr.startsWith('GMT')) {\n    console.error(`Timezone offset string ${tzStr} is not recognized!`);\n    return 0;\n  }\n  let tzOffset = tzStr.substring(3);\n  if (tzOffset.length == 0) {\n    return 0;\n  }\n  let sign = tzOffset.substring(0, 1);\n  let timeArr = tzOffset.substring(1).split(':');\n  let rhrs = parseInt(timeArr[0]);\n  let rmins = 0;\n  if (timeArr[1]) {\n    rmins = parseInt(timeArr[1]);\n  }\n\n  let mins = rhrs * 60 + rmins;\n  return sign == '+' ? -mins : mins;\n};\n\nconst localTimeZone = (): string => {\n  let localRegion = new Intl.DateTimeFormat();\n  return localRegion.resolvedOptions().timeZone;\n};\n\nconst getWeekDayNames = (\n  locale = 'en-US',\n  format: 'long' | 'short' | 'narrow' | undefined = 'long'\n): string[] => {\n  const formatter = new Intl.DateTimeFormat(locale, {\n    weekday: format,\n    timeZone: 'UTC',\n  });\n  const days = [1, 2, 3, 4, 5, 6, 7].map((day) => {\n    const dd = day < 10 ? `0${day}` : day;\n    return new Date(`2017-01-${dd}T00:00:00+00:00`);\n  });\n  return days.map((date) => formatter.format(date));\n};\n\nconst compareDate = (\n  dailyStartTime: Date,\n  duration: number,\n  dStep: number,\n  mStep: number,\n  startDate: Date,\n  endDate: Date,\n  excludeDates: Date[],\n  checkDate?: number, // For month date check.\n  timeZone?: string\n): string[][] => {\n  let slots: string[][] = [];\n\n  let date = new Date(startDate);\n  let exludeIndex = 0;\n  while (date < endDate) {\n    let skip = false;\n    for (; exludeIndex < excludeDates.length; exludeIndex++) {\n      let e0 = excludeDates[exludeIndex]; // Midnight or actual time.\n      let e = new Date(e0);\n      e.setHours(dailyStartTime.getHours());\n      e.setMinutes(dailyStartTime.getMinutes());\n      e.setSeconds(dailyStartTime.getSeconds());\n      if (e < e0) e.setDate(e.getDate() + 1);\n\n      if (e.getTime() >= date.getTime() + 86400000) {\n        // one day later\n        break;\n      }\n      if (e.getTime() == date.getTime()) {\n        skip = true;\n        exludeIndex++;\n        break;\n      }\n    }\n    if (!skip) {\n      slots.push([\n        date.toISOString(),\n        new Date(date.getTime() + duration).toISOString(),\n      ]);\n    }\n    let newDate = new Date(date);\n    if (mStep) {\n      newDate.setMonth(date.getMonth() + mStep);\n    }\n    if (dStep) {\n      newDate.setDate(date.getDate() + dStep);\n    }\n    if (checkDate != undefined) {\n      let i = 0;\n      while (checkDate != getTimeZoneDate(newDate, timeZone as string)) {\n        // No such date in the month. Try the following month.\n        i++;\n        newDate.setMonth(date.getMonth() + i + mStep);\n        newDate.setDate(date.getDate() + dStep);\n      }\n    }\n    date = newDate;\n  }\n  return slots;\n};\n\nconst getTimeZoneDate = (d: Date, timeZone: string): number => {\n  let formatter = new Intl.DateTimeFormat('en-US', {\n    timeZone: timeZone,\n    dateStyle: 'short',\n  });\n  let startDay = formatter.format(d).split('/')[1]; // \"12/19/20\" format\n  return parseInt(startDay, 10);\n};\n\nconst getRepeatTimeSlots = (\n  timeZone: string,\n  start: string,\n  end: string,\n  repeat: string\n): string[][] => {\n  let startTime = new Date(start);\n  let endTime = new Date(end);\n  let duration = endTime.getTime() - startTime.getTime();\n  let slots: string[][] = [];\n\n  let repitition = JSON.parse(repeat);\n  let exclude: string[] = (repitition.exclude || []).sort();\n  let excludeDates: Date[] = exclude.map((x) => new Date(x));\n\n  let endDate = new Date(repitition.end);\n  let startDate0 = new Date(repitition.start); // Always at midnight or actual time.\n  let startDate = new Date(repitition.start);\n  startDate.setHours(startTime.getHours());\n  startDate.setMinutes(startTime.getMinutes());\n  startDate.setSeconds(startTime.getSeconds());\n  if (startDate < startDate0) {\n    // It goes to the previouse day. Need one day adjust.\n    startDate.setDate(startDate.getDate() + 1);\n  }\n\n  if (repitition.f == 0) {\n    slots = compareDate(\n      startTime,\n      duration,\n      1,\n      0,\n      startDate,\n      endDate,\n      excludeDates\n    );\n  } else if (repitition.f == 1) {\n    // Weekly\n    let startDay = new Intl.DateTimeFormat('en-US', {\n      timeZone: timeZone,\n      dateStyle: 'full',\n    })\n      .format(startDate)\n      .split(',')[0]; // \"Saturday, December 19, 2020\" format\n    let startDayNum = weekDayToNum[startDay];\n\n    for (let wd of repitition.w) {\n      let date = new Date(startDate);\n      let dayDiff = wd - startDayNum;\n      dayDiff = dayDiff >= 0 ? dayDiff : dayDiff + 7;\n      date.setDate(date.getDate() + dayDiff);\n      slots = slots.concat(\n        compareDate(startTime, duration, 7, 0, date, endDate, excludeDates)\n      );\n    }\n  } else if (repitition.f == 2) {\n    let startDayNum = getTimeZoneDate(startDate, timeZone);\n    // Monthly\n    for (let dt of repitition.m) {\n      let date = new Date(startDate);\n      let dayDiff = dt - startDayNum;\n      let monthDiff = dayDiff >= 0 ? 0 : 1;\n      let newDate = new Date(date);\n      newDate.setMonth(date.getMonth() + monthDiff);\n      newDate.setDate(date.getDate() + dayDiff);\n      let i = 0;\n      while (getTimeZoneDate(newDate, timeZone) != dt) {\n        // No such date in this month. Try next month.\n        i++;\n        newDate.setMonth(date.getMonth() + i + monthDiff);\n        newDate.setDate(date.getDate() + dayDiff);\n      }\n      slots = slots.concat(\n        compareDate(\n          startTime,\n          duration,\n          0,\n          1,\n          newDate,\n          endDate,\n          excludeDates,\n          dt,\n          timeZone\n        )\n      );\n    }\n  }\n  return slots;\n};\n\nconst sortAndUniqueExcludes = (\n  excludes: string[],\n  timeZone: string\n): string[] => {\n  let a: string[] = [];\n  if (excludes.length == 0) {\n    return a;\n  }\n  let previouse: Date | undefined = undefined;\n  for (let d of excludes.sort()) {\n    if (!previouse) {\n      previouse = new Date(d);\n      a.push(d);\n      continue;\n    }\n    let formatter = new Intl.DateTimeFormat('en-US', {\n      timeZone: timeZone,\n      dateStyle: 'short',\n    });\n    let currentDate = new Date(d);\n    if (formatter.format(previouse) !== formatter.format(currentDate)) {\n      a.push(d);\n    }\n    previouse = currentDate;\n  }\n  return a;\n};\n\nexport {\n  covertTZOffsetFromMinutes,\n  covertTZOffsetToMinutes,\n  localTimeZone,\n  getWeekDayNames,\n  getRepeatTimeSlots,\n  sortAndUniqueExcludes,\n};\n","enum CalendarControlType {\n  newSchedules,\n  newGroups,\n  delSchedules,\n  updSchedules,\n}\n\nenum CalendarEventType {\n  newDate,\n  viewSchedule,\n  updateSchedule,\n  deleteSchedule,\n  deleteOneSchedule, // One occurence of repeating schedule.\n  addSchedule,\n  changedSchedule, // Non-repeating schedule, or all occurences of repeating schedule.\n  changedOneSchedule, // One occurence of repeated schedule.\n}\n\ninterface CalendarMessage {\n  type: CalendarControlType | CalendarEventType;\n  id: string,\n  event: any;\n}\n\nexport {\n  CalendarControlType,\n  CalendarEventType,\n  CalendarMessage,\n};\n","import { Component, Input, Output, EventEmitter } from '@angular/core';\n\n@Component({\n  selector: 'lib-mdds-checkbox-input',\n  templateUrl: './checkbox-input.component.html',\n  styleUrls: ['./checkbox-input.component.css'],\n})\nexport class MddsCheckboxInputComponent {\n  @Input() public color: string = 'midnightblue';\n  @Input() public large: boolean = false;\n  @Input() public checked: boolean = false;\n  @Output() checkedChanged = new EventEmitter<boolean>();\n\n  onCheckboxChange(e: Event) {\n    let c = (<HTMLInputElement>e.target).checked;\n    if (c !== this.checked) {\n      this.checkedChanged.emit(c);\n    }\n  }\n}\n","<label class=\"check-container ms-2 me-1\" [ngClass]=\"{'large': large}\">\n    <input type=\"checkbox\" (change)=\"onCheckboxChange($event)\" [checked]=\"checked\">\n    <span class=\"checkmark\" [ngStyle]=\"{'background-color': color}\"></span>\n</label>","import {\n  Component,\n  OnInit,\n  OnChanges,\n  AfterViewInit,\n  Input,\n  Output,\n  Injector,\n  SimpleChanges,\n  EventEmitter,\n  ViewChild,\n} from '@angular/core';\nimport { NgForm } from '@angular/forms';\nimport { ActivatedRoute } from '@angular/router';\nimport { formatDate } from '@angular/common';\nimport { MddsBaseComponent, MddsBaseService } from '@hicoder/angular-core';\n\nimport { getWeekDayNames, sortAndUniqueExcludes } from './calendar.util';\n\n@Component({\n  selector: 'lib-mdds-calendar-display',\n  templateUrl: './display.component.html',\n  styleUrls: ['./display.component.css'],\n})\n// Extends the MddsBaseComponent to get date field formatter capability.\nexport class MddsCalendarDisplayComponent\n  extends MddsBaseComponent\n  implements OnInit, OnChanges, AfterViewInit\n{\n  @Input() public enableEdit: boolean = false;\n\n  @Input() public startTime: any; // Date Fields formatted by MDDSBaseComponent.\n  @Input() public endTime: any;\n  @Input() public repeat: string | undefined;\n\n  @Output() public scheduleChanged: EventEmitter<any> = new EventEmitter<any>();\n  @Output() public valid: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  @ViewChild('editForm') ngForm?: NgForm;\n\n  public override dateFields: string[] = [\n    'startTime',\n    'endTime',\n    'repeatStart',\n    'repeatEnd',\n    'excludeDate',\n  ];\n  public override stringFields: string[] = ['repeat'];\n\n  private startWeekDay!: string;\n  private startMonthDay!: string;\n  private modelHasChanged: boolean = false;\n\n  public repeatEnabled = false;\n  public frequencies: string[] = ['Every day', 'Every week', 'Every month'];\n  public frequency: number = 0; // 0 - daily; 1 - weekly; 2 - monthly\n  public repeatExcludes: string[] = [];\n  public AddingExclude: boolean = false;\n\n  public wkDays: string[];\n  public wkDaysSel: boolean[] = [...Array(7)].map((x) => false);\n\n  public monDays: string[] = [...Array(31)].map((x, i) => (i + 1).toString());\n  public monDaysSel: boolean[] = [...Array(31)].map((x) => false);\n\n  public minDate = { year: new Date().getFullYear() - 1, month: 1, day: 1 };\n\n  public hideEndDate: boolean = false;\n\n  constructor(\n    public override injector: Injector,\n    public override route: ActivatedRoute\n  ) {\n    super({} as MddsBaseService, injector, route);\n    this.wkDays = getWeekDayNames(this.locale);\n  }\n  ngOnInit(): void {}\n  ngOnChanges(changes: SimpleChanges): void {\n    this.initData();\n  }\n  ngAfterViewInit(): void {}\n\n  updateErrors() {\n    if (this.ngForm) {\n      this.valid.emit(this.ngForm.form.valid);\n    } else {\n      this.valid.emit(false);\n    }\n  }\n\n  initData() {\n    let detail: any = {\n      startTime: this.startTime,\n      endTime: this.endTime,\n      repeat: this.repeat,\n    };\n\n    if (\n      typeof detail['startTime'] == 'string' ||\n      typeof detail['endTime'] == 'string'\n    ) {\n      // input is ISO string\n      detail = this.formatDetail(detail);\n    }\n\n    if (this.detail) {\n      if (\n        this.detail['startTime'] &&\n        detail['startTime'] &&\n        this.detail['startTime']['value'] == detail['startTime']['value'] &&\n        this.detail['endTime'] &&\n        detail['endTime'] &&\n        this.detail['endTime']['value'] == detail['endTime']['value'] &&\n        this.detail['repeat'] == detail['repeat']\n      ) {\n        // No change. Just return.\n        return;\n      }\n      if (!detail['repeat']) {\n        // Keep the repeatStart & repeatEnd if user has already set it.\n        if (this.detail['repeatStart']) {\n          detail['repeatStart'] = this.detail['repeatStart'];\n        }\n        if (this.detail['repeatEnd']) {\n          detail['repeatEnd'] = this.detail['repeatEnd'];\n        }\n      }\n    }\n    if (\n      (detail['startTime'] && detail['startTime']['value']) ||\n      (detail['endTime'] && detail['endTime']['value']) ||\n      detail['repeat']\n    ) {\n      if (!this.modelHasChanged) {\n        setTimeout(() => {\n          this.modelChanged();\n        }, 50);\n      }\n    }\n    this.detail = this.unLoadRepeat(detail);\n    let startDatestr: string = new Date().toISOString();\n    if (this.startTime) {\n      startDatestr = this.detail['startTime']['value'] || startDatestr;\n    }\n    // Get the \"Thursday,15\" like format\n    let startDatesTZ = formatDate(\n      startDatestr,\n      'EEEE,d',\n      this.locale,\n      this.timeZone\n    ).split(',');\n    this.startWeekDay = startDatesTZ[0];\n    this.startMonthDay = startDatesTZ[1];\n\n    if (\n      this.detail['startTime'] &&\n      this.detail['startTime']['value'] &&\n      this.detail['endTime'] &&\n      this.detail['endTime']['value']\n    ) {\n      let dateStart = formatDate(\n        this.detail['startTime']['value'],\n        'YYYY-MM-dd',\n        this.locale,\n        this.timeZone\n      );\n      let dateEnd = formatDate(\n        this.detail['endTime']['value'],\n        'YYYY-MM-dd',\n        this.locale,\n        this.timeZone\n      );\n      if (dateStart == dateEnd) {\n        this.hideEndDate = true;\n      }\n    }\n  }\n\n  modelChanged() {\n    this.modelHasChanged = true;\n    // If anything has changed, we reconstruct the data.\n    let schedule: any = {};\n    schedule['startTime'] = this.detail['startTime'];\n    schedule['endTime'] = this.detail['endTime'];\n\n    if (this.repeatEnabled) {\n      // Set default values if not set yet.\n      if (this.detail['repeatStart'] && !this.detail['repeatStart']['date']) {\n        this.detail['repeatStart']['date'] = this.detail['startTime']['date'];\n      }\n      if (this.frequency == 1 && !this.wkDaysSel.includes(true)) {\n        for (let [i, d] of this.wkDays.entries()) {\n          if (d === this.startWeekDay) {\n            this.wkDaysSel[i] = true;\n            break;\n          }\n        }\n      }\n      if (this.frequency == 2 && !this.monDaysSel.includes(true)) {\n        for (let [i, d] of this.monDays.entries()) {\n          if (d === this.startMonthDay) {\n            this.monDaysSel[i] = true;\n            break;\n          }\n        }\n      }\n      schedule['repeatStart'] = this.detail['repeatStart'];\n      schedule['repeatEnd'] = this.detail['repeatEnd'];\n    } else {\n      schedule['repeatStart'] = this.detail['startTime'];\n      schedule['repeatEnd'] = this.detail['startTime'];\n    }\n    schedule = this.loadRepeat(schedule);\n\n    // Reconstruct the date value.\n    this.detail = this.formatDetail(this.deFormatDetail(this.detail));\n    this.detail['repeat'] = schedule['repeat'];\n    this.scheduleChanged.emit(schedule);\n    this.updateErrors();\n  }\n\n  getDisplayWeekDays(): string {\n    let arr: string[] = [];\n    for (let [i, b] of this.wkDaysSel.entries()) {\n      if (b) {\n        arr.push(this.wkDays[i]);\n      }\n    }\n    return arr.join(', ');\n  }\n  getDisplayMonthDays(): string {\n    let arr: string[] = [];\n    for (let [i, b] of this.monDaysSel.entries()) {\n      if (b) {\n        arr.push(this.monDays[i]);\n      }\n    }\n    return arr.join(', ');\n  }\n\n  override clearValueFromDetail(field: string) {\n    super.clearValueFromDetail(field);\n    this.updateErrors();\n  }\n\n  loadRepeat(repeatObj: any): any {\n    let s = this.deFormatDetail(repeatObj); // deformat repeatStart / repeatEnd.\n    if (s['repeatEnd']) {\n      let date = new Date(s['repeatEnd']);\n      // Plus one day to 00:00 of next day.\n      date.setDate(date.getDate() + 1);\n      s['repeatEnd'] = date.toISOString();\n    }\n\n    if (!this.repeatEnabled) {\n      return this.formatDetail(s);\n    }\n\n    let monthDays: number[] = [];\n    let weekDays: number[] = [];\n    if (this.frequency == 1) {\n      // week.\n      for (let [i, d] of this.wkDaysSel.entries()) {\n        if (d) {\n          weekDays.push(i);\n        }\n      }\n    }\n    if (this.frequency == 2) {\n      // month.\n      for (let [i, d] of this.monDaysSel.entries()) {\n        if (d) {\n          monthDays.push(i + 1);\n        }\n      }\n    }\n    s.repeat = JSON.stringify({\n      f: this.frequency,\n      m: monthDays,\n      w: weekDays,\n      start: s['repeatStart'],\n      end: s['repeatEnd'],\n      exclude: sortAndUniqueExcludes(this.repeatExcludes, this.timeZone),\n    });\n\n    return this.formatDetail(s);\n  }\n\n  unLoadRepeat(obj: any): any {\n    let repeatObj = this.deFormatDetail(obj);\n    if (!repeatObj.repeat) {\n      this.formatDetail(repeatObj);\n    }\n\n    try {\n      let rep = JSON.parse(repeatObj.repeat);\n      this.frequency = rep.f;\n      if (rep.f == 1) {\n        // week\n        for (let i of rep.w) {\n          this.wkDaysSel[i] = true;\n        }\n      }\n      if (rep.f == 2) {\n        // month\n        for (let i of rep.m) {\n          this.monDaysSel[i - 1] = true;\n        }\n      }\n      repeatObj.repeatStart = rep.start;\n      if (rep.end) {\n        let date = new Date(rep.end);\n        // Minus one day so on the UI it can see the exact end date.\n        date.setDate(date.getDate() - 1);\n        repeatObj.repeatEnd = date.toISOString();\n      }\n      if (rep.exclude) {\n        this.repeatExcludes = sortAndUniqueExcludes(rep.exclude, this.timeZone);\n      }\n      this.repeatEnabled = true;\n    } catch (err: any) {}\n    return this.formatDetail(repeatObj);\n  }\n\n  clearExclude(i: number) {\n    this.repeatExcludes.splice(i, 1);\n    this.repeatExcludes = sortAndUniqueExcludes(\n      this.repeatExcludes,\n      this.timeZone\n    );\n    this.modelChanged();\n  }\n  addExclude() {\n    if (this.detail['excludeDate'] && this.detail['excludeDate']['date']) {\n      let detail = this.deFormatDetail(this.detail);\n      this.repeatExcludes.push(detail['excludeDate']);\n      this.repeatExcludes = sortAndUniqueExcludes(\n        this.repeatExcludes,\n        this.timeZone\n      );\n      this.detail['excludeDate']['date'] = undefined;\n      this.AddingExclude = false;\n\n      this.modelChanged();\n    }\n  }\n  toggleAddExclude() {\n    this.AddingExclude = !this.AddingExclude;\n  }\n}\n","<div>\n    <div *ngIf=\"!enableEdit\">\n        <div class=\"mb-2\">\n            From\n            <span>{{detail['startTime']? (detail['startTime']['value'] | date:'medium':timeZone:locale): ''}}</span>\n            to\n            <span *ngIf=\"!hideEndDate\">{{detail['endTime']? (detail['endTime']['value'] | date:'medium':timeZone:locale)\n                : ''}}</span>\n            <span *ngIf=\"hideEndDate\">{{detail['endTime']? (detail['endTime']['value'] |\n                date:'mediumTime':timeZone:locale) : ''}}</span>\n        </div>\n\n        <div *ngIf=\"repeatEnabled\" class=\"d-flex flex-wrap mb-2\">\n            <div><label class=\"me-2\">Repeat:</label></div>\n            <div>\n                <div>\n                    <span>{{frequencies[frequency]}}</span>\n                    <span *ngIf=\"frequency == 1\"> on {{getDisplayWeekDays()}}</span>\n                    <span *ngIf=\"frequency == 2\"> on date {{getDisplayMonthDays()}}</span>.\n                    <span *ngIf=\"repeatExcludes.length > 0\"> *</span>\n                </div>\n                <div>\n                    From\n                    <span>{{detail['repeatStart']&&detail['repeatStart']['value']? (detail['repeatStart']['value'] |\n                        date:'mediumDate':timeZone:locale) :\n                        'N/A'}}</span> to\n                    <span>{{detail['repeatEnd']&&detail['repeatEnd']['value']? (detail['repeatEnd']['value'] |\n                        date:'mediumDate':timeZone:locale) :\n                        'N/A'}}</span>.\n                </div>\n                <div *ngIf=\"repeatExcludes.length > 0\" style=\"font-size: 0.8rem; line-height: 1rem;\">\n                    <span>* Exclude:\n                        <span *ngFor=\"let d of repeatExcludes; let i = index;\"\n                            class=\"badge rounded-pill bg-light text-secondary\">\n                            {{d | date:'shortDate':timeZone:locale}}\n                        </span>\n                    </span>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <form #editForm=\"ngForm\" class=\"edit-form\" *ngIf=\"enableEdit\">\n        <!--ensure the date and time input have enough space-->\n        <ng-template [ngIf]=\"detail['startTime']\">\n            <fieldset class=\"mb-3\">\n                <label for=\"EditStartTime\" class=\"form-label\">Start Time</label>\n\n                <div class=\"row align-items-start\">\n                    <div class=\"col-12 col-md-6\">\n                        <div class=\"input-group mb-1\">\n                            <input class=\"form-control\" id=\"EditStartTime\" placeholder=\"{{dateFormat}}\" required\n                                [(ngModel)]=\"detail['startTime']['date']\" name=\"EditStartTime\" ngbDatepicker\n                                [minDate]=\"minDate\" #EditStartTimeDate=\"ngbDatepicker\" #EditStartTime=\"ngModel\"\n                                (ngModelChange)=\"modelChanged()\" />\n                            <div class=\"input-group-append\">\n                                <button class=\"btn btn-outline-secondary\" (click)=\"EditStartTimeDate.toggle()\"\n                                    type=\"button\">\n                                    <i class=\"fas fa-calendar-alt\"></i>\n                                </button>\n                            </div>\n                        </div>\n                        <!-- input group -->\n                        <div *ngIf=\"!(EditStartTime.valid || !EditStartTime.errors)\">\n                            <div *ngIf=\"!EditStartTime.pristine && EditStartTime.errors['required'] && !(detail['startTime']?.date)\"\n                                class=\"alert alert-danger\">\n                                Date is required.\n                            </div>\n                            <div *ngIf=\"!(EditStartTime.untouched || !EditStartTime.errors['ngbDate'] || !EditStartTime.errors['ngbDate']['minDate'])\"\n                                class=\"alert alert-danger\">\n                                Date must not be earlier than {{minDate | json}}.\n                            </div>\n                            <div *ngIf=\"!(EditStartTime.untouched || !EditStartTime.errors['ngbDate'] || !EditStartTime.errors['ngbDate']['invalid'])\"\n                                class=\"alert alert-danger\">\n                                Start Time must be in {{dateFormat}} format.\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"col-11 col-md-5\">\n                        <div class=\"input-group mb-1\">\n                            <input class=\"form-control\" id=\"EditStartTimeTime\" placeholder=\"\" type=\"time\" required\n                                [(ngModel)]=\"detail['startTime']['t_value']\" name=\"EditStartTimeTime\"\n                                #EditStartTimeTime=\"ngModel\" (ngModelChange)=\"modelChanged()\" />\n                        </div>\n                        <!-- input group -->\n                        <div *ngIf=\"!(EditStartTimeTime.valid || !EditStartTimeTime.errors)\">\n                            <div *ngIf=\"!EditStartTimeTime.pristine && EditStartTimeTime.errors['required']\"\n                                class=\"alert alert-danger\">\n                                Time is required.\n                            </div>\n                        </div>\n                    </div>\n                    <div *ngIf=\"detail['startTime']['date'] || detail['startTime']['time']\" class=\"col-1 mt-1\">\n                        <span class=\"icon-clear\" (click)=\"clearValueFromDetail('startTime')\">\n                            <i class=\"fas fa-times-circle\" title=\"Clear\"></i>\n                        </span>\n                    </div>\n                </div>\n            </fieldset>\n        </ng-template>\n        <ng-template [ngIf]=\"detail['endTime']\">\n            <fieldset class=\"mb-3\">\n                <label for=\"EditEndTime\" class=\"form-label\">End Time</label>\n\n                <div class=\"row\">\n                    <div class=\"col-12 col-md-6\">\n                        <div class=\"input-group mb-1\">\n                            <input class=\"form-control\" id=\"EditEndTime\" placeholder=\"{{dateFormat}}\" required\n                                [(ngModel)]=\"detail['endTime']['date']\" name=\"EditEndTime\" ngbDatepicker\n                                [minDate]=\"minDate\" #EditEndTimeDate=\"ngbDatepicker\" #EditEndTime=\"ngModel\"\n                                (ngModelChange)=\"modelChanged()\" />\n                            <div class=\"input-group-append\">\n                                <button class=\"btn btn-outline-secondary\" (click)=\"EditEndTimeDate.toggle()\"\n                                    type=\"button\">\n                                    <i class=\"fas fa-calendar-alt\"></i>\n                                </button>\n                            </div>\n                        </div>\n                        <!-- input group -->\n                        <div *ngIf=\"!(EditEndTime.valid || !EditEndTime.errors)\">\n                            <div *ngIf=\"!EditEndTime.pristine && EditEndTime.errors['required'] && !(detail['endTime']?.date)\"\n                                class=\"alert alert-danger\">\n                                Date is required.\n                            </div>\n                            <div *ngIf=\"!(EditEndTime.untouched || !EditEndTime.errors['ngbDate'] || !EditEndTime.errors['ngbDate']['minDate'])\"\n                                class=\"alert alert-danger\">\n                                Date must not be earlier than {{minDate | json}}.\n                            </div>\n                            <div *ngIf=\"!(EditEndTime.untouched || !EditEndTime.errors['ngbDate'] || !EditEndTime.errors['ngbDate']['invalid'])\"\n                                class=\"alert alert-danger\">\n                                End Time must be in {{dateFormat}} format.\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"col-11 col-md-5\">\n                        <div class=\"input-group mb-1\">\n                            <input class=\"form-control\" id=\"EditEndTimeTime\" placeholder=\"\" type=\"time\" required\n                                [(ngModel)]=\"detail['endTime']['t_value']\" name=\"EditEndTimeTime\"\n                                #EditEndTimeTime=\"ngModel\" (ngModelChange)=\"modelChanged()\" />\n                        </div>\n                        <!-- input group -->\n                        <div *ngIf=\"!(EditEndTimeTime.valid || !EditEndTimeTime.errors)\">\n                            <div *ngIf=\"!EditEndTimeTime.pristine && EditEndTimeTime.errors['required']\"\n                                class=\"alert alert-danger\">\n                                Time is required.\n                            </div>\n                        </div>\n                    </div>\n                    <div *ngIf=\"detail['endTime']['date'] || detail['endTime']['time']\" class=\"col-1 mt-1\">\n                        <span class=\"icon-clear\" (click)=\"clearValueFromDetail('endTime')\">\n                            <i class=\"fas fa-times-circle\" title=\"Clear\"></i>\n                        </span>\n                    </div>\n                </div>\n            </fieldset>\n        </ng-template>\n\n        <div class=\"form-check mb-2\">\n            <input class=\"form-check-input\" type=\"checkbox\" [(ngModel)]=\"repeatEnabled\" #editRepeatEnabled=\"ngModel\"\n                name=\"editRepeatEnabled\" (ngModelChange)=\"modelChanged()\">\n            <label class=\"form-check-label\">Repeat</label>\n        </div>\n\n        <div *ngIf=\"repeatEnabled\" style=\"max-width: 800px;\" class=\"card\">\n            <div class=\"card-body\">\n                <select class=\"form-select form-select-sm mb-2\" style=\"width: 150px;\" [(ngModel)]=\"frequency\"\n                    #EditRepeat=\"ngModel\" name=\"EditRepeat\" (ngModelChange)=\"modelChanged()\">\n                    <option *ngFor=\"let f of frequencies; let i = index\" [value]=\"i\">{{f}}</option>\n                </select>\n\n                <div *ngIf=\"frequency == 1\" class=\"mb-5\">\n                    <div>On day:</div>\n                    <div class=\"form-check form-check-inline\" *ngFor=\"let d of wkDays; let i = index;\">\n                        <input class=\"form-check-input\" type=\"checkbox\" value=\"{{d}}\" [(ngModel)]=\"wkDaysSel[i]\"\n                            #EditWeekDays{{d}}=\"ngModel\" name=\"EditWeekDays{{d}}\" (ngModelChange)=\"modelChanged()\">\n                        <label class=\"form-check-label\">{{d}}</label>\n                    </div>\n                </div>\n                <div *ngIf=\"frequency == 2\" class=\"mb-5\">\n                    <div>On date:</div>\n                    <div class=\"row ms-1\">\n                        <div class=\"form-check col-2 col-lg-1\" *ngFor=\"let d of monDays; let i = index\">\n                            <input class=\"form-check-input\" type=\"checkbox\" value=\"{{d}}\" [(ngModel)]=\"monDaysSel[i]\"\n                                #EditMonthDays{{d}}=\"ngModel\" name=\"EditMonthDays{{d}}\"\n                                (ngModelChange)=\"modelChanged()\">\n                            <label class=\"form-check-label\">{{d}}</label>\n                        </div>\n                    </div>\n                </div>\n                <hr />\n                <div class=\"row mb-3\">\n                    <fieldset class=\"col-12 col-md-6\">\n                        <label for=\"EditRepeatStart\" class=\"form-label\">Repeat Start Date</label>\n\n                        <div class=\"row\">\n                            <div class=\"col-10\">\n                                <div class=\"input-group mb-1\">\n                                    <input class=\"form-control\" id=\"EditRepeatStart\" placeholder=\"{{dateFormat}}\"\n                                        required [(ngModel)]=\"detail['repeatStart']['date']\" name=\"EditRepeatStart\"\n                                        ngbDatepicker [minDate]=\"minDate\" #EditRepeatStartDate=\"ngbDatepicker\"\n                                        (ngModelChange)=\"modelChanged()\" #EditRepeatStart=\"ngModel\" />\n                                    <div class=\"input-group-append\">\n                                        <button class=\"btn btn-outline-secondary\" (click)=\"EditRepeatStartDate.toggle()\"\n                                            type=\"button\">\n                                            <i class=\"fas fa-calendar-alt\"></i>\n                                        </button>\n                                    </div>\n                                </div>\n                                <!-- input group -->\n                                <div *ngIf=\"!(EditRepeatStart.valid || !EditRepeatStart.errors)\">\n                                    <div *ngIf=\"!EditRepeatStart.pristine && EditRepeatStart.errors['required'] && !(detail['repeatStart']?.date)\"\n                                        class=\"alert alert-danger\">\n                                        Date is required.\n                                    </div>\n                                    <div *ngIf=\"!(EditRepeatStart.untouched || !EditRepeatStart.errors['ngbDate'] || !EditRepeatStart.errors['ngbDate']['minDate'])\"\n                                        class=\"alert alert-danger\">\n                                        Date must not be earlier than {{minDate | json}}.\n                                    </div>\n                                    <div *ngIf=\"!(EditRepeatStart.untouched || !EditRepeatStart.errors['ngbDate'] || !EditRepeatStart.errors['ngbDate']['invalid'])\"\n                                        class=\"alert alert-danger\">\n                                        Repeat Start must be in {{dateFormat}} format.\n                                    </div>\n                                </div>\n                            </div>\n                            <div *ngIf=\"detail['repeatStart']['date'] || detail['repeatStart']['time']\"\n                                class=\"col-1 mt-1\">\n                                <span class=\"icon-clear\" (click)=\"clearValueFromDetail('repeatStart')\">\n                                    <i class=\"fas fa-times-circle\" title=\"Clear\"></i>\n                                </span>\n                            </div>\n                        </div>\n                    </fieldset>\n                    <fieldset class=\"col-12 col-md-6\">\n                        <label for=\"EditRepeatEnd\" class=\"form-label\">Repeat End Date</label>\n\n                        <div class=\"row\">\n                            <div class=\"col-10\">\n                                <div class=\"input-group mb-1\">\n                                    <input class=\"form-control\" id=\"EditRepeatEnd\" placeholder=\"{{dateFormat}}\" required\n                                        [(ngModel)]=\"detail['repeatEnd']['date']\" name=\"EditRepeatEnd\" ngbDatepicker\n                                        [minDate]=\"minDate\" #EditRepeatEndDate=\"ngbDatepicker\"\n                                        (ngModelChange)=\"modelChanged()\" #EditRepeatEnd=\"ngModel\" />\n                                    <div class=\"input-group-append\">\n                                        <button class=\"btn btn-outline-secondary\" (click)=\"EditRepeatEndDate.toggle()\"\n                                            type=\"button\">\n                                            <i class=\"fas fa-calendar-alt\"></i>\n                                        </button>\n                                    </div>\n                                </div>\n                                <!-- input group -->\n                                <div *ngIf=\"!(EditRepeatEnd.valid || !EditRepeatEnd.errors)\">\n                                    <div *ngIf=\"!EditRepeatEnd.pristine && EditRepeatEnd.errors['required'] && !(detail['repeatEnd']?.date)\"\n                                        class=\"alert alert-danger\">\n                                        Date is required.\n                                    </div>\n                                    <div *ngIf=\"!(EditRepeatEnd.untouched || !EditRepeatEnd.errors['ngbDate'] || !EditRepeatEnd.errors['ngbDate']['minDate'])\"\n                                        class=\"alert alert-danger\">\n                                        Date must not be earlier than {{minDate | json}}.\n                                    </div>\n                                    <div *ngIf=\"!(EditRepeatEnd.untouched || !EditRepeatEnd.errors['ngbDate'] || !EditRepeatEnd.errors['ngbDate']['invalid'])\"\n                                        class=\"alert alert-danger\">\n                                        Repeat End must be in {{dateFormat}} format.\n                                    </div>\n                                </div>\n                            </div>\n                            <div *ngIf=\"detail['repeatEnd']['date'] || detail['repeatEnd']['time']\" class=\"col-1 mt-1\">\n                                <span class=\"icon-clear\" (click)=\"clearValueFromDetail('repeatEnd')\">\n                                    <i class=\"fas fa-times-circle\" title=\"Clear\"></i>\n                                </span>\n                            </div>\n                        </div>\n                    </fieldset>\n                </div>\n                <div>\n                    <div>\n                        <span>Exclude Dates: </span>\n                        <span class=\"badge rounded-pill bg-info\" *ngFor=\"let d of repeatExcludes; let i = index\">\n                            <span>\n                                {{d | date:'shortDate':timeZone:locale}}\n                            </span>\n                            <i class=\"fas fa-times-circle icon-clear-badge\"\n                                (click)=\"clearExclude(i)\" title=\"Clear\"></i>\n                        </span>\n                        <span (click)=\"toggleAddExclude()\" class=\"ms-3\" style=\"cursor: pointer;\">\n                            <i *ngIf=\"!AddingExclude\" class=\"fa-solid fa-plus\" title=\"Add new date\"></i>\n                            <i *ngIf=\"AddingExclude\" class=\"fa-solid fa-minus\"></i>\n                        </span>\n                    </div>\n                    <div *ngIf=\"AddingExclude\" class=\"input-group mt-2\" style=\"max-width: 300px;\">\n                        <input class=\"form-control\" id=\"EditExcludeDate\" placeholder=\"{{dateFormat}}\"\n                            [(ngModel)]=\"detail['excludeDate']['date']\" name=\"EditExcludeDate\" ngbDatepicker\n                            [minDate]=\"minDate\" #EditExcludeDate=\"ngbDatepicker\" #EditRepeatEnd=\"ngModel\" />\n                        <div class=\"input-group-append\">\n                            <button class=\"btn btn-outline-secondary\" (click)=\"EditExcludeDate.toggle()\" type=\"button\">\n                                <i class=\"fas fa-calendar-alt\"></i>\n                            </button>\n                        </div>\n                        <div class=\"input-group-append ms-2\">\n                            <button class=\"btn btn-outline-secondary\" (click)=\"addExclude()\" type=\"button\">\n                                Add\n                            </button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n    </form>\n</div>","import {\n  Component,\n  OnInit,\n  AfterViewInit,\n  Input,\n  Output,\n  LOCALE_ID,\n  Inject,\n  EventEmitter,\n  ViewChild,\n  TemplateRef,\n} from '@angular/core';\nimport { formatDate } from '@angular/common';\n\nimport { MddsCommonService } from '@hicoder/angular-core';\nimport { default as Calendar, IEvents } from 'tui-calendar';\nimport { NgbModal, ModalDismissReasons } from '@ng-bootstrap/ng-bootstrap';\n\nimport {\n  getCalendarTemplates,\n  CalendarDefaultGroupColors,\n  createGroupColors,\n  dayNames,\n} from './calendar.config';\nimport { covertTZOffsetToMinutes, localTimeZone } from './calendar.util';\n\nimport { CalendarService } from './calendar.service';\nimport {\n  CalendarControlType,\n  CalendarEventType,\n  CalendarMessage,\n} from './calendar.interface';\n\n@Component({\n  selector: 'lib-mdds-calendar',\n  templateUrl: './calendar.component.html',\n  styleUrls: ['./calendar.component.css'],\n})\nexport class MddsCalendarComponent implements OnInit, AfterViewInit {\n  @Input() public defaultView: string = 'month';\n  @Input() public weekHourRange: number[] = [9, 21];\n  @Input() public isReadOnly: boolean = false;\n  @Input() public groupName: string = 'Categories';\n  @Output() public calendarEvent = new EventEmitter<CalendarMessage>();\n\n  private locale: string;\n  private timeZone: string;\n  private timeZoneOffset: string;\n\n  private calendarID: string = `${Date.now()}${Math.floor(Math.random() * 1000)}`;\n\n  public colors = CalendarDefaultGroupColors;\n  public views: string[][] = [\n    ['month', 'fa fa-table'],\n    ['week', 'fa fa-columns'],\n    ['day', 'fa fa-align-justify'],\n  ];\n  public dateStr: string = '';\n  public groups: string[] = [];\n  public groupsChecked: boolean[] = [];\n  public groupsAllChecked: boolean = true;\n\n  private calendar!: Calendar;\n  private calendarDateInStr: string = '';\n\n  // Show popup window at specific location controlled by ngStyle.\n  public popStyle: any = {};\n  public modalType: string = '';\n  @ViewChild('modalContent') modalContent!: TemplateRef<any>;\n  public dateStrForMonthClick: string = '';\n  public schedule: any;\n  public groupColor: any; // CSS style to show grop.\n\n  constructor(\n    private modalService: NgbModal,\n    private commonService: MddsCommonService,\n    public service: CalendarService\n  ) {\n    this.service.getCalendarEventPublisher().subscribe({\n      next: (event: CalendarMessage): void => {\n        this.onControlMessage(event);\n      },\n    });\n\n    this.locale = this.commonService.getLocale();\n    this.timeZone = this.commonService.getTimeZone();\n    this.timeZoneOffset = this.commonService.getTimeZoneOffset();\n  }\n\n  ngOnInit(): void {\n    this.calendar = new Calendar('#calendar', {\n      usageStatistics: false,\n      defaultView: this.defaultView,\n      taskView: [], // ['milestone', 'task']\n      scheduleView: ['allday', 'time'], // ['allday', 'time']\n      useCreationPopup: false,\n      useDetailPopup: false,\n      template: getCalendarTemplates(this.isReadOnly),\n      calendars: createGroupColors(this.groups),\n      isReadOnly: this.isReadOnly,\n      week: {\n        daynames: dayNames,\n        hourStart: this.weekHourRange[0],\n        hourEnd: this.weekHourRange[1],\n        showTimezoneCollapseButton: false,\n        timezonesCollapsed: false,\n      },\n      month: {\n        daynames: dayNames,\n      },\n      timezone: {\n        zones: this.getTimeZones(),\n        offsetCalculator: (tzName, timestamp): number => {\n          let region = new Intl.DateTimeFormat(\n            'en-GB', // Using en-GB to show the GMT timezone offset.\n            {\n              timeZone: tzName,\n              timeStyle: 'long',\n            }\n          );\n          // Format output is at \"00:00:00 GMT-04:00\" format.\n          return covertTZOffsetToMinutes(\n            region.format(timestamp).split(' ')[1]\n          );\n        },\n      },\n    });\n    this.groupsChecked = new Array(this.groups.length).fill(true);\n    this.bindCalendarEvents();\n    this.updateDate();\n  }\n\n  ngAfterViewInit(): void {}\n\n  public onControlMessage(message: CalendarMessage): void {\n    // console.log('controlMessage: ', message);\n    if (message.id !== this.calendarID) {\n      return;\n    }\n    switch (message.type) {\n      case CalendarControlType.newSchedules:\n        this.calendar.createSchedules(message.event);\n        break;\n      case CalendarControlType.updSchedules:\n        for (let s of message.event) {\n          this.calendar.updateSchedule(s.id, s.oldCalendarId, s, true);\n        }\n        this.calendar.render();\n        break;\n      case CalendarControlType.delSchedules:\n        for (let s of message.event) {\n          this.calendar.deleteSchedule(s.id, s.calendarId, true);\n        }\n        this.calendar.render();\n        break;\n      case CalendarControlType.newGroups:\n        this.addGroups(message.event as string[]);\n        break;\n    }\n  }\n  private getTimeZones(): any[] {\n    let zones: any[] = [\n      {\n        timezoneName: this.timeZone,\n        displayLabel: 'Local Time',\n        tooltip: 'Our local time',\n      },\n    ];\n\n    let localTZ = localTimeZone();\n    if (localTZ !== this.timeZone) {\n      zones.push({\n        timezoneName: localTZ,\n        displayLabel: 'Your Time',\n        tooltip: 'Your local time',\n      });\n    }\n    return zones;\n  }\n\n  public groupChecked(idx: number, checked: boolean) {\n    let grps = this.groups;\n    if (idx !== -1) {\n      grps = [this.groups[idx]];\n      this.groupsChecked[idx] = checked;\n    } else {\n      this.groupsChecked = new Array(this.groups.length).fill(checked);\n    }\n    this.groupsAllChecked = !this.groupsChecked.includes(false);\n    for (let i = 0; i < grps.length - 1; i++) {\n      this.calendar.toggleSchedules(grps[i], !checked, false);\n    }\n    // Only begin rendering when the last grp is set.\n    this.calendar.toggleSchedules(grps[grps.length - 1], !checked, true);\n  }\n\n  addGroups(grps: string[]) {\n    this.groups = this.groups.concat(grps);\n    this.groupsChecked = this.groupsChecked.concat(\n      new Array(grps.length).fill(true)\n    );\n    let groupColors = createGroupColors(this.groups);\n    this.calendar.setCalendars(groupColors.slice(-grps.length));\n  }\n\n  private updateDate() {\n    let date = this.calendar.getDate().toDate();\n    let longDateStr = formatDate(date, 'MMMM d, y', this.locale, this.timeZone);\n    this.dateStr = longDateStr;\n    if (this.defaultView !== 'day') {\n      this.dateStr = formatDate(date, 'MMMM, y', this.locale, this.timeZone);\n    }\n\n    if (longDateStr === this.calendarDateInStr) {\n      // No date update.\n      return;\n    }\n    this.calendarDateInStr = longDateStr;\n\n    this.calendarEvent.emit({\n      type: CalendarEventType.newDate,\n      id: this.calendarID,\n      event: date,\n    });\n  }\n\n  private goToView(view: string, date?: Date) {\n    if (date) {\n      this.calendar.setDate(date);\n    }\n    this.calendar.changeView(view, true);\n    if (this.calendar.getViewName() !== 'month') {\n      this.calendar.scrollToNow();\n    }\n    this.defaultView = view;\n    this.updateDate();\n  }\n\n  public viewClicked(idx: number) {\n    let view = this.views[idx][0];\n    this.goToView(view, undefined);\n  }\n\n  public today() {\n    this.calendar.today();\n    this.updateDate();\n  }\n\n  public forward() {\n    this.calendar.next();\n    this.updateDate();\n  }\n\n  public backward() {\n    this.calendar.prev();\n    this.updateDate();\n  }\n\n  private bindCalendarEvents() {\n    this.calendar.on('clickDayname', (event: any) => {\n      if (this.defaultView !== 'day') {\n        // Date is in \"2022-06-14\" format\n        this.goToView(\n          'day',\n          // Use 06 to make sure it's in the same day.\n          new Date(`${event.date}T06:00:00${this.timeZoneOffset}`)\n        );\n      }\n    });\n    this.calendar.on('beforeCreateSchedule', (event: any) => {\n      if (this.defaultView === 'month') {\n        // Ask to add new schedule or go to the day view.\n        this.openMonthClickModal(event);\n        return;\n      }\n      this.calendarEvent.emit({\n        type: CalendarEventType.addSchedule,\n        id: this.calendarID,\n        event,\n      });\n      this.goToView(this.defaultView); // update calendar view.\n    });\n    this.calendar.on('clickSchedule', (event: any) => {\n      this.openScheduleClickModal(event);\n    });\n    this.calendar.on('beforeUpdateSchedule', (event: any) => {\n      this.openScheduleUpdateModal(event);\n    });\n    let allEvents = new Map<keyof IEvents, CalendarEventType>([\n      // These events are not handled:\n      // 'clickMore', 'clickTimezonesCollapseBtn', 'beforeDeleteSchedule',\n    ]);\n    for (let e of allEvents.entries()) {\n      this.calendar.on(e[0], (event: any) => {\n        this.calendarEvent.emit({\n          type: e[1],\n          id: this.calendarID,\n          event,\n        });\n      });\n    }\n  }\n\n  private openMonthClickModal(event: any) {\n    if (this.isReadOnly) {\n      // Currently this logic does not work because monthClick event will be\n      // triggered only when isReadOnly is false.\n      this.goToView('day', event.start.toDate());\n      return;\n    }\n    this.modalType = 'monthClick';\n    this.dateStrForMonthClick = formatDate(\n      event.start.toDate(),\n      'MMMM d, y',\n      this.locale,\n      this.timeZone\n    );\n    this.modalService\n      .open(this.modalContent, {\n        size: 'sm',\n        centered: true,\n      })\n      .result.then(\n        // modal.close() with result.\n        (result: any) => {\n          switch (result) {\n            case 'new':\n              this.calendarEvent.emit({\n                type: CalendarEventType.addSchedule,\n                id: this.calendarID,\n                event,\n              });\n              this.goToView(this.defaultView); // update calendar view.\n              break;\n            case 'day':\n              this.goToView('day', event.start.toDate());\n              break;\n          }\n        },\n        // modal.dismiss() with reason.\n        (_reason: any) => {\n          this.goToView(this.defaultView); // update calendar view.\n        }\n      );\n  }\n  private openScheduleClickModal(event: any) {\n    if (this.isReadOnly) {\n      this.goToView(this.defaultView); // update calendar view.\n      this.calendarEvent.emit({\n        type: CalendarEventType.viewSchedule,\n        id: this.calendarID,\n        event: event.schedule,\n      });\n      return;\n    }\n    this.modalType = 'scheduleClick';\n    this.groupColor = {\n      'background-color': event.schedule.bgColor,\n      color: event.schedule.color,\n    };\n    this.schedule = {\n      title: event.schedule.title,\n      startTime: event.schedule.start.toDate().toISOString(),\n      endTime: event.schedule.end.toDate().toISOString(),\n      repeat: event.schedule.recurrenceRule,\n      group: event.schedule.calendarId,\n    };\n    // Ask to update, view or delete of the schedule.\n    this.modalService\n      .open(this.modalContent, {\n        centered: true,\n      })\n      .result.then(\n        // modal.close() with result.\n        (result: any) => {\n          let type: CalendarEventType = CalendarEventType.viewSchedule;\n          switch (result) {\n            case 'update':\n              type = CalendarEventType.updateSchedule;\n              break;\n            case 'delete':\n              type = CalendarEventType.deleteSchedule;\n              break;\n            case 'deleteOne':\n              type = CalendarEventType.deleteOneSchedule;\n              break;\n            case 'view':\n              type = CalendarEventType.viewSchedule;\n              break;\n          }\n          this.calendarEvent.emit({\n            type,\n            id: this.calendarID,\n            event: event.schedule,\n          });\n        },\n        // modal.dismiss() with reason.\n        (_reason: any) => {}\n      );\n  }\n  private openScheduleUpdateModal(event: any) {\n    if (!event.schedule.recurrenceRule) {\n      this.calendarEvent.emit({\n        type: CalendarEventType.changedSchedule,\n        id: this.calendarID,\n        event,\n      });\n      return;\n    }\n    this.schedule = {\n      title: event.schedule.title,\n      startTime: event.schedule.start.toDate().toISOString(),\n      endTime: event.schedule.end.toDate().toISOString(),\n      repeat: event.schedule.recurrenceRule,\n      group: event.schedule.calendarId,\n    };\n    this.modalType = 'scheduleUpdate';\n    this.modalService\n      .open(this.modalContent, {\n        centered: true,\n      })\n      .result.then(\n        // modal.close() with result.\n        (result: any) => {\n          switch (result) {\n            case 'update':\n              this.calendarEvent.emit({\n                type: CalendarEventType.updateSchedule,\n                id: this.calendarID,\n                event: event.schedule.id,\n              });\n              break;\n          }\n        },\n        // modal.dismiss() with reason.\n        (_reason: any) => {\n          this.goToView(this.defaultView); // Update the view.\n        }\n      );\n  }\n}\n","<div class=\"container\">\n\n    <div class=\"row my-3\">\n        <div class=\"col-12 col-lg-3 col-xxl-2\">\n            <h5 class=\"mt-3\">{{groupName}}</h5>\n            <div class=\"d-flex\">\n                <lib-mdds-checkbox-input [color]=\"'black'\" [large]=\"false\" [checked]=\"groupsAllChecked\"\n                    (checkedChanged)=\"groupChecked(-1, $event)\">\n                </lib-mdds-checkbox-input>\n                <span>View all</span>\n            </div>\n            <hr />\n            <div class=\"row flex-lg-column flex-\">\n                <div class=\"col-6 col-md-4 col-lg-12 d-flex align-items-center mb-2\"\n                    *ngFor=\"let group of groups; index as i;\">\n                    <lib-mdds-checkbox-input [color]=\"colors[i]\" [large]=\"false\" [checked]=\"groupsChecked[i]\"\n                        (checkedChanged)=\"groupChecked(i, $event)\"></lib-mdds-checkbox-input>\n                    <span>{{group}}</span>\n                </div>\n            </div>\n        </div>\n        <div class=\"col-12 col-lg-9 col-xxl-10\">\n            <div class=\"d-flex align-items-center calendar-control\">\n                <div class=\"d-flex flex-column flex-md-row\">\n                    <div class=\"d-flex calendar-views my-2 me-2\">\n                        <div *ngFor=\"let view of views; index as i;\" class=\"calendar-view\"\n                            [ngClass]=\"{checked: defaultView===view[0]}\" (click)=\"viewClicked(i)\">\n                            <i class=\"{{view[1]}}\" aria-hidden=\"true\"></i>\n                            <span>{{view[0]}}</span>\n                        </div>\n                    </div>\n                    <div class=\"d-flex align-items-center\">\n                        <div class=\"calendar-button mx-2\" (click)=\"today()\">Today</div>\n                        <div class=\"mx-2\">\n                            <span class=\"calendar-move\" (click)=\"backward()\"> <i\n                                    class=\"fa-solid fa-angle-left\"></i></span>\n                            <span class=\"calendar-move\" (click)=\"forward()\"><i\n                                    class=\"fa-solid fa-angle-right\"></i></span>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"fs-4 mx-2\">{{dateStr}}</div>\n            </div>\n            <div class=\"calendar-container-outer\">\n                <div [ngClass]=\"{'calendar-min-width': defaultView !== 'day'}\">\n                    <div id=\"calendar\"></div>\n                </div>\n                <div class=\"calendar-pop\" [ngStyle]=\"popStyle\">\n                    <ng-template #modalContent let-modal>\n                        <div class=\"modal-header\">\n                            <h6 class=\"modal-title\" id=\"modal-basic-title\">\n                                <span *ngIf=\"modalType === 'monthClick'\" >\n                                    Schedule of {{dateStrForMonthClick}}\n                                </span>\n                                <span *ngIf=\"modalType === 'scheduleClick' || modalType === 'scheduleUpdate'\" >\n                                    {{schedule.title}}\n                                </span>\n                            </h6>\n                            <button type=\"button\" class=\"btn-close\" aria-label=\"Close\"\n                                (click)=\"modal.dismiss('Cross click')\"></button>\n                        </div>\n                        <div class=\"modal-body\" *ngIf=\"modalType === 'scheduleClick' || modalType === 'scheduleUpdate'\">\n                            <lib-mdds-calendar-display\n                            [enableEdit]=\"false\"\n                            [startTime]=\"schedule['startTime']\"\n                            [endTime]=\"schedule['endTime']\"\n                            [repeat]=\"schedule['repeat']\"\n                            >\n                            </lib-mdds-calendar-display>\n                            <div class=\"d-flex align-items-center my-2\">\n                                <span [ngStyle]=\"groupColor\" class=\"dot me-2\"></span>{{schedule.group}}\n                            </div>\n\n                            <div *ngIf=\"(modalType === 'scheduleClick' || modalType === 'scheduleUpdate') && schedule.repeat\">\n                                <hr/>\n                                <div class=\"d-flex justify-content-center\">This is a recurring schedule with multiple events.</div>\n                            </div>\n\n                        </div>\n                        <div *ngIf=\"modalType === 'monthClick'\" class=\"modal-footer justify-content-center\">\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('new')\">Create new</button>\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('day')\">Day Details</button>\n                        </div>\n                        <div *ngIf=\"modalType === 'scheduleClick' && schedule.repeat\" class=\"modal-footer justify-content-center\">\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('view')\">Details</button>\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('update')\">Edit all</button>\n                            <button type=\"button\" class=\"btn btn-outline-danger rounded-0 small\"\n                                (click)=\"modal.close('delete')\">Delete all</button>\n                            <button type=\"button\" class=\"btn btn-outline-danger rounded-0 small\"\n                                (click)=\"modal.close('deleteOne')\">Delete this one</button>\n                        </div>\n                        <div *ngIf=\"modalType === 'scheduleClick' && !schedule.repeat\" class=\"modal-footer justify-content-center\">\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('view')\">Details</button>\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('update')\">Update</button>\n                            <button type=\"button\" class=\"btn btn-outline-danger rounded-0 small\"\n                                (click)=\"modal.close('delete')\">Delete</button>\n                        </div>\n                        <div *ngIf=\"modalType === 'scheduleUpdate'\" class=\"modal-footer justify-content-center\">\n                            <button type=\"button\" class=\"btn btn-outline-dark rounded-0 small\"\n                                (click)=\"modal.close('update')\">Edit all</button>\n                        </div>\n                    </ng-template>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\n\nimport { NgbModule } from '@ng-bootstrap/ng-bootstrap';\n\nimport { MddsCalendarComponent } from './calendar.component';\nimport { MddsCalendarDisplayComponent } from './display.component';\nimport { MddsCheckboxInputComponent } from './checkbox-input.component';\n\n@NgModule({\n  declarations: [\n    MddsCalendarComponent,\n    MddsCheckboxInputComponent,\n    MddsCalendarDisplayComponent,\n  ],\n  imports: [CommonModule, FormsModule, NgbModule],\n  exports: [MddsCalendarComponent, MddsCalendarDisplayComponent],\n})\nexport class MddsCalendarModule {}\n","/*\n * Public API Surface of calendar\n */\n\nexport * from './lib/calendar.service';\nexport * from './lib/calendar.component';\nexport * from './lib/display.component';\nexport * from './lib/calendar.util';\nexport * from './lib/calendar.interface';\nexport * from './lib/calendar.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i4","i2","i3.CalendarService","i4.MddsCheckboxInputComponent","i5.MddsCalendarDisplayComponent","i6"],"mappings":"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"}