{"version":3,"file":"upbytes.in-angular-material-calendar.mjs","sources":["../../../projects/angular-material-calendar/src/lib/store/actions/calendar-view.action.ts","../../../projects/angular-material-calendar/src/lib/store/index.ts","../../../projects/angular-material-calendar/src/lib/service/calendar-view-port.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-modal/calendar-config/calendar-config.ts","../../../projects/angular-material-calendar/src/lib/service/calendar-config.service.ts","../../../projects/angular-material-calendar/src/lib/service/date.service.ts","../../../projects/angular-material-calendar/src/lib/adapter/calendar-event-adapter.ts","../../../projects/angular-material-calendar/src/lib/store/actions/date.action.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-navigator/calendar-navigator.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-navigator/calendar-navigator.component.html","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-label/calendar-label.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-label/calendar-label.component.html","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-toggel/calendar-toggel.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-toggel/calendar-toggel.component.html","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-header.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header/calendar-header.component.html","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/service/calendar-month-view.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view-grid-header/calendar-month-view-grid-header.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view-grid-header/calendar-month-view-grid-header.component.html","../../../projects/angular-material-calendar/src/lib/service/calendar-event-conflict.service.ts","../../../projects/angular-material-calendar/src/lib/service/calendar-event.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-dialog-view/calendar-event-dialog.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-dialog-view/calendar-event-dialog.component.html","../../../projects/angular-material-calendar/src/lib/service/calendar-event-dialog.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-view/calendar-event-view.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-view/calendar-event-view.component.html","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view-grid/calendar-month-view-grid.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view-grid/calendar-month-view-grid.component.html","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view/calendar-month-view.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view/calendar-month-view.component.html","../../../projects/angular-material-calendar/src/lib/service/calendar-hours.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view-header/calendar-week-view-header.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view-header/calendar-week-view-header.component.html","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-full-view/calendar-event-full-view.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-full-view/calendar-event-full-view.component.html","../../../projects/angular-material-calendar/src/lib/service/calendar-hour-indicator.service.ts","../../../projects/angular-material-calendar/src/lib/calendar-hour-indicator-module/calendar-hour-indicator/calendar-hour-indicator.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-hour-indicator-module/calendar-hour-indicator/calendar-hour-indicator.component.html","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view-grid/calendar-week-view-grid.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view-grid/calendar-week-view-grid.component.html","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view/calendar-week-view.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view/calendar-week-view.component.html","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-header/calendar-day-view-header.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-header/calendar-day-view-header.component.html","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-view-grid/calendar-day-view-grid.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-view-grid/calendar-day-view-grid.component.html","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-view/calendar-day-view.component.ts","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-view/calendar-day-view.component.html","../../../projects/angular-material-calendar/src/lib/angular-material-calendar.component.ts","../../../projects/angular-material-calendar/src/lib/angular-material-calendar.component.html","../../../projects/angular-material-calendar/src/lib/store/reducer/calendar-view-reducer.service.ts","../../../projects/angular-material-calendar/src/lib/store/reducer/date-reducer.service.ts","../../../projects/angular-material-calendar/src/lib/material-modules/material.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-events-module/calendar-event-view.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-month-view-module/calendar-month-view.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-header-module/calendar-header.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-hour-indicator-module/calendar-hour-indicator.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-week-view-module/calendar-week-view.module.ts","../../../projects/angular-material-calendar/src/lib/calendar-day-module/calendar-day-view.module.ts","../../../projects/angular-material-calendar/src/lib/angular-material-calendar.module.ts","../../../projects/angular-material-calendar/src/public-api.ts","../../../projects/angular-material-calendar/src/upbytes.in-angular-material-calendar.ts"],"sourcesContent":["import { createAction } from '@ngrx/store';\n\nexport const month = createAction('[view Component] month');\nexport const week = createAction('[view Component] week');\nexport const day = createAction('[view Component] day');\n","import { createFeatureSelector, createSelector } from \"@ngrx/store\";\nimport { CalendarState } from \"../state/calendar-state\";\n\n\nexport const upbytesCalendarFeatureKey = 'upbytes_calendar';\n\nexport const selectCalendarState = createFeatureSelector<CalendarState>(\n    upbytesCalendarFeatureKey\n);\n\nexport const selectCalendarViewState = createSelector(\n    selectCalendarState,\n    (state) => state._view\n);\n\nexport const selectCalendarDateState = createSelector(\n    selectCalendarState,\n    (state) => state._date\n);","import { Injectable, OnDestroy } from '@angular/core';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n/**\n * @author vaibhav\n * implementaion of angular material Breakpoint.\n *\n */\nconst displayNameMap = new Map([\n  [Breakpoints.XSmall, 'XSmall'],\n  [Breakpoints.Small, 'Small'],\n  [Breakpoints.Medium, 'Medium'],\n  [Breakpoints.Large, 'Large'],\n  [Breakpoints.XLarge, 'XLarge'],\n]);\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CalendarViewPortService implements OnDestroy {\n\n  destroyed = new Subject<void>();\n  viewport = new Subject<string>();\n  currentScreenSize?: string;\n\n  constructor(\n    private breakpointObserver: BreakpointObserver\n  ) {\n\n  }\n\n  viewportResize(): void {\n    this.breakpointObserver.observe([\n      Breakpoints.XSmall,\n      Breakpoints.Small,\n      Breakpoints.Medium,\n      Breakpoints.Large,\n      Breakpoints.XLarge,\n    ]).pipe(takeUntil(this.destroyed)).subscribe((result: any) => {\n      for (const query of Object.keys(result.breakpoints)) {\n        if (result.breakpoints[query]) {\n          this.currentScreenSize = displayNameMap.get(query) ?? 'Unknown';\n          this.viewport.next(this.currentScreenSize);\n        }\n      }\n    });\n  }\n\n\n  ngOnDestroy() {\n    this.viewport.next(this.currentScreenSize!);\n    this.destroyed.next();\n    this.viewport.complete();\n    this.destroyed.complete();\n  }\n}\n","export class CalendarConfig {\n    format?: string;\n    local?: string;\n    view?: string;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { CalendarConfig } from '../calendar-modal/calendar-config/calendar-config';\n\n\n/**\n * @author vaibhav\n * Calendar config service is used to config calendar data.\n *\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarServiceConfig {\n    private _format?: string;\n    private _local?: string;\n    private _view?: string;\n\n    constructor(@Optional() config?: CalendarConfig) {\n        if (config) {\n            this._format = config.format;\n            this._local = config.local;\n            this._view = config.view;\n        }\n    }\n\n    get format() {\n        return this._format;\n    }\n\n    get local() {\n        return this._local;\n    }\n\n    get view() {\n        return this._view;\n    }\n}\n","import { DateTime } from 'luxon';\nimport { CalendarDate } from '../calendar-modal/calendar-date/calendar-date';\nimport { DateAdapter } from '@angular/material/core';\nimport { Injectable, Optional } from '@angular/core';\nimport { CalendarServiceConfig } from './calendar-config.service';\n\n/**\n * helps to return range of given length.\n * @param length\n * @param lamdaFunction\n * @returns T[]\n */\n\nexport function dateRange<T>(length: number, lamdaFunction: (index: number) => T): T[] {\n   const dateArr = Array(length);\n   for (let i = 0; i < length; i++) {\n      dateArr[i] = lamdaFunction(i);\n   }\n   return dateArr;\n}\n\n/**\n * @author vaibhav\n * Date service is perform various operation on dateTime. it is based on DateAdapter implementation\n * of angular material and DateTime object of Luxon library.\n * Manipulate date in number.\n *\n */\n@Injectable({\n   providedIn: 'root'\n})\nexport class DateService {\n   constructor(\n      private _dateAdapter: DateAdapter<DateTime>,\n      @Optional() private calendarServiceConfig: CalendarServiceConfig\n   ) { }\n\n   today(): CalendarDate {\n      return { current: this._dateAdapter.today() };\n   }\n\n   addCalendarYears(date: CalendarDate, years: number): CalendarDate {\n      return { current: this._dateAdapter.addCalendarYears(date.current, years) };\n   }\n\n   addCalendarMonths(date: CalendarDate, months: number): CalendarDate {\n      return { current: this._dateAdapter.addCalendarMonths(date.current, months) };\n   }\n\n   addCalendarDays(date: CalendarDate, days: number): CalendarDate {\n      return { current: this._dateAdapter.addCalendarDays(date.current, days) };\n   }\n\n   addCalendarWeeks(date: CalendarDate, weeks: number): CalendarDate {\n      return { current: date.current.plus({ weeks: weeks }) };\n   }\n\n   subtractCalendarYears(date: CalendarDate, years: number): CalendarDate {\n      return { current: date.current.minus({ years: years }) };\n   }\n\n   subtractCalendarMonths(date: CalendarDate, months: number): CalendarDate {\n      return { current: date.current.minus({ months: months }) };\n   }\n\n   subtractCalendarDays(date: CalendarDate, days: number): CalendarDate {\n      return { current: date.current.minus({ days: days }) };\n   }\n\n   subtractCalendarWeeks(date: CalendarDate, weeks: number): CalendarDate {\n      return { current: date.current.minus({ weeks: weeks }) };\n   }\n\n   getMonthNames(date: CalendarDate, style: 'long' | 'short' | 'narrow'): string {\n      return style === 'long' ? date.current.monthLong : date.current.monthShort;\n   }\n\n   getYearName(date: CalendarDate): string {\n      return this._dateAdapter.getYearName(date.current);\n   }\n\n   getDayName(date: CalendarDate, style: 'long' | 'short' | 'narrow'): string {\n      return style === 'long' ? date.current.weekdayLong : date.current.weekdayShort;\n   }\n\n   getYear(date: CalendarDate): number {\n      return this._dateAdapter.getYear(date.current);\n   }\n\n   getMonth(date: CalendarDate): number {\n      return this._dateAdapter.getMonth(date.current);\n   }\n\n   getDate(date: CalendarDate): number {\n      return this._dateAdapter.getDate(date.current);\n   }\n\n   getFirstDayOfMonth(date: CalendarDate): CalendarDate {\n      return {\n         current: this._dateAdapter\n            .createDate(this.getYear(date), this.getMonth(date), 1)\n      };\n   }\n\n   getLastDayOfMonth(date: CalendarDate): CalendarDate {\n      return {\n         current:\n            this._dateAdapter\n               .createDate(this.getYear(date), this.getMonth(date), date.current.daysInMonth)\n      };\n   }\n\n   getFirstDayOfWeek(date: CalendarDate): CalendarDate {\n      return { current: date.current.startOf('week') };\n   }\n\n   getLastDayOfWeek(date: CalendarDate): CalendarDate {\n      return { current: date.current.endOf('week') };\n   }\n\n   getDaysInMonthRange(date: CalendarDate): number {\n      return this.getLastDayOfWeek(this.getLastDayOfMonth(date))\n         .current.diff(this.getFirstDayOfWeek(date).current, 'days').days;\n   }\n\n   getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[] {\n      return this._dateAdapter.getDayOfWeekNames(style);\n   }\n\n   getDayOfWeekNamesFromMonday(style: 'long' | 'short' | 'narrow'): string[] {\n      const days = this.getDayOfWeekNames(style);\n      return [...days.slice(1), days[0]];\n   }\n\n   getMonthDatesRange(date: CalendarDate): CalendarDate[] {\n      const dates: CalendarDate[] = Array(35);\n      let first = this.getFirstDayOfWeek(this.getFirstDayOfMonth(date));\n      dates[0] = first;\n      for (let i = 1; i < 35; i++) {\n         first = this.addCalendarDays(first, 1);\n         dates[i] = first;\n      }\n      return dates;\n   }\n\n   getWeekDatesRange(date: CalendarDate): CalendarDate[] {\n      const dates: CalendarDate[] = Array(7);\n      let first = this.getFirstDayOfWeek(date);\n      dates[0] = first;\n      for (let i = 1; i < 7; i++) {\n         first = this.addCalendarDays(first, 1);\n         dates[i] = first;\n      }\n      return dates;\n   }\n\n   getHoursFormat(): string[] {\n      return dateRange(24, (i) => this.today().current\n         .set({ hour: i, minute: 0 }).toFormat('hh:mm a'));\n   }\n\n   isToday(date: CalendarDate): boolean {\n      return this.today().current.startOf('day').equals(date.current.startOf('day'));\n   }\n\n   isHoursNow(hours: string): boolean {\n      return this.today().current.set({ minute: 0 })\n         .toFormat('hh:mm a') === hours;\n   }\n\n   getTimeZoneFormat(date: CalendarDate): string {\n      return `GMT ${this._dateAdapter.format(date.current, 'Z')}`;\n   }\n\n   getDateTime<T extends number | string>(d: T): DateTime {\n      return typeof d === 'number' ? DateTime.fromMillis(d) : this.getDateTimeFromFormat(d);\n   }\n\n   getDateTimeFromFormat(d: string): DateTime {\n      return this.calendarServiceConfig.format! ?\n         DateTime.fromFormat(d, this.calendarServiceConfig.format!) : DateTime.fromISO(d);\n   }\n\n   getDateTimeFromString(d: string): DateTime {\n      return DateTime.fromISO(d);\n   }\n\n   isSameHour(hours: string, eventDate: number): boolean {\n      return this.getDateTime(eventDate)\n         .set({ minute: 0 }).toFormat('hh:mm a') === hours;\n   }\n\n   isSameDate<T extends CalendarDate | number>(date: T, eventDate: number): boolean {\n      return typeof date === 'object' ?\n         this._dateAdapter.sameDate(date.current, this.getDateTime(eventDate)) :\n         this._dateAdapter.sameDate(this.getDateTime(date), this.getDateTime(eventDate));\n   }\n\n   timeDiff(start: number, end: number) {\n      return this.getDateTime(end)\n         .diff(this.getDateTime(start), ['months', 'days', 'hours', 'minutes'])\n         .toObject();\n   }\n\n   timeDiffinHours(start: number, end: number): number | undefined {\n      return this.timeDiff(start, end).hours;\n   }\n\n   timeDiffinMinutes(start: number, end: number): number | undefined {\n      const diff = this.timeDiff(start, end);\n      return diff.hours! * 60 + diff.minutes!;\n   }\n\n   minute(start: number): number {\n      return this.getDateTime(start).minute;\n   }\n\n   getTimeFormat(d: number): string {\n      return this.getDateTime(d).toFormat('hh:mm a');\n   }\n\n   restoreFromStore(d: CalendarDate): CalendarDate {\n      return { current: this.getDateTime(d.current.toMillis()) };\n   }\n\n   isBetween(date: CalendarDate,\n      start: number, end: number): boolean {\n      return start < date.current.toMillis()\n         && date.current.toMillis() < end;\n   }\n\n   setDate(date: number, month: number, year: number, _currentDate: CalendarDate) {\n      return { current: _currentDate.current.set({ day: date, month: month, year: year }) };\n   }\n}\n","import { Injectable } from '@angular/core';\nimport { Adapter } from './calendar-adapter';\nimport { CalendarEventInput } from '../calendar-modal/calendar-event/calendar-event-input';\nimport { isDate, isMoment } from 'moment';\nimport { DateService } from '../service/date.service';\nimport { DateTime } from 'luxon';\nimport { CalendarEvent, D } from '../calendar-event-source/calendar-event';\n\n/**\n * @author vaibhav\n * calendar event adpater service is used to convert input data into CalendarEventInput\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class CalendarEventInputAdapter<T extends CalendarEvent> implements\n    Adapter<CalendarEventInput> {\n\n    constructor(\n        private _dateService: DateService\n    ) { }\n\n    /**\n     * this function is adapt any input into CalenarEventInput\n     * @param item accept any type of input\n     * @returns CalenarEventInput\n     */\n    adapt(item: T): CalendarEventInput {\n        return this.createCalendarEventInput(item);\n    }\n\n    /**\n     * convert data into CalendarEventInput\n     * @param data\n     * @returns CalendarEventInput\n     */\n    createCalendarEventInput(data: T): CalendarEventInput {\n        return {\n            start: this.convertToMillis(data.start!),\n            end: this.convertToMillis(data.end!),\n            title: data.title,\n            color: data.color,\n            description: data.description\n        };\n    }\n\n    /**\n     * convert date into milliseconds\n     * @param d input date\n     * @returns date into milliseconds\n     */\n    convertToMillis(d: D): number {\n        if (isDate(d)) {\n            return d.getMilliseconds();\n        } else if (isMoment(d)) {\n            return d.milliseconds();\n        } else if (typeof d == 'string') {\n            return this._dateService.getDateTime(d).toMillis();\n        } else if (typeof d == 'number') {\n            return this._dateService.getDateTime(d).toMillis();\n        } else if (DateTime.isDateTime(d)) {\n            return d.toMillis();\n        }\n\n        return DateTime.now().toMillis();\n    }\n\n    /**\n     * sort CalendarEventInput array\n     * @param e array ofCalndarEventInput\n     * @returns sorted array\n     */\n    sort(e: CalendarEventInput[]): CalendarEventInput[] {\n        return e.sort((a, b) => a.start! - b.start!);\n    }\n}\n","import { createAction, props } from '@ngrx/store';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarView } from '../../calendar-modal/calendar-view/calendar-view';\n\nexport const increment = createAction('[Date Component] Increment', props<CalendarView>());\nexport const decrement = createAction('[Date Component] Decrement',  props<CalendarView>());\nexport const reset = createAction('[Date Component] Reset',  props<CalendarView>());\nexport const goto = createAction('[Date Component] Goto',  props<CalendarDate>());\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { increment, decrement, reset } from '../../../store/actions/date.action';\nimport { CalendarDate } from '../../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarView } from '../../../calendar-modal/calendar-view/calendar-view';\nimport { CalendarViewPortService } from '../../../service/calendar-view-port.service';\nimport { selectCalendarDateState, selectCalendarViewState } from '../../../store';\n\n/**\n * @author vaibhav\n *\n * calendar navigator component display left side of calednar header.\n * Prev: this button will move current view of calendar to previous view according to view selected\n * Next: this button will move current view of calendar to next view according to view selected\n * Today: this button will move current view of calendar to\n * current date view according to view selected\n */\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-navigator',\n  templateUrl: './calendar-navigator.component.html',\n  styleUrls: [\n    'calendar-navigator.component.scss'\n  ]\n})\nexport class CalendarNavigatorComponent {\n  date$?: Observable<CalendarDate>;\n  _currentDate?: CalendarDate;\n  _view$?: Observable<CalendarView>;\n  _view?: CalendarView;\n  viewport?: string;\n\n  constructor(\n    private dstore: Store<{ _date: CalendarDate }>,\n    private vstore: Store<{ _view: CalendarView }>,\n    private calendarViewPortService: CalendarViewPortService\n  ) {\n    this.date$ = dstore.select(selectCalendarDateState);\n    this.date$.subscribe((d: CalendarDate) => this._currentDate = d);\n    this._view$ = vstore.select(selectCalendarViewState);\n    this._view$.subscribe((v) => this._view = v);\n    this.calendarViewPortService.viewport.subscribe(s => this.viewport = s);\n  }\n\n  /**\n   * This function will dispatch a increment action to store.\n   */\n  increment() {\n    this.dstore.dispatch(increment(this._view!));\n  }\n\n  /**\n   * This function will dispatch a decrement action to store.\n   */\n  decrement() {\n    this.dstore.dispatch(decrement(this._view!));\n  }\n\n  /**\n   * This function will dispatch a reset action to store.\n   */\n  reset() {\n    this.dstore.dispatch(reset(this._view!));\n  }\n\n  get size(): boolean {\n    return this.viewport !== 'Small' && this.viewport !== 'XSmall';\n  }\n}\n","<ng-template [ngIf]=\"size\">\n    <button mat-raised-button id=\"calendar-navigator-previous\" color=\"primary\" aria-label=\"Previous\" (click)=\"decrement()\">\n        <mat-icon class=\"calendar-navigator-button  material-icons-round\">chevron_left</mat-icon>\n        Prev\n    </button>\n    <button mat-raised-button id=\"calendar-navigator-next\" color=\"primary\" aria-label=\"Next\" (click)=\"increment()\">\n        Next\n        <mat-icon class=\"calendar-navigator-button material-icons-round\">\n            chevron_right\n        </mat-icon>\n    </button>\n    <button mat-raised-button id=\"calendar-navigator-today\" class=\"calendar-navigator-today\" color=\"primary\" aria-label=\"current date\" (click)=\"reset()\">\n        <mat-icon class=\"calendar-navigator-button  material-icons-round \">today</mat-icon>\n        Today\n    </button>\n</ng-template>\n\n<ng-template [ngIf]=\"!size\">\n    <button mat-icon-button color=\"primary\" aria-label=\"Previous\" (click)=\"decrement()\">\n        <mat-icon class=\"calendar-navigator-button  material-icons-round\">chevron_left</mat-icon>\n    </button>\n    <button mat-icon-button color=\"primary\" aria-label=\"Next\" (click)=\"increment()\">\n        <mat-icon class=\"calendar-navigator-button  material-icons-round\">chevron_right</mat-icon>\n    </button>\n    <button mat-icon-button color=\"primary\" aria-label=\"current date\" (click)=\"reset()\">\n        <mat-icon class=\"calendar-navigator-button material-icons-round\">today</mat-icon>\n    </button>\n</ng-template>","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { CalendarDate } from '../../../calendar-modal/calendar-date/calendar-date';\nimport { DateService } from '../../../service/date.service';\nimport { CalendarViewPortService } from '../../../service/calendar-view-port.service';\n\n/**\n * @author vaibhav\n * The calendar header label component display month name and year.\n */\n\n@Component({\n    selector: 'upbytes-angular-material-calendar-label',\n    templateUrl: './calendar-label.component.html',\n})\nexport class CalendarHeaderLabelComponent {\n    date$?: Observable<CalendarDate>;\n    _currentDate?: CalendarDate;\n    viewport?: string;\n\n    constructor(\n        private store: Store,\n        private calendarViewPortService: CalendarViewPortService,\n        private _dateService: DateService) {\n        this.date$ = store.select((selector: any) => selector.upbytes_calendar._date);\n        this.date$.subscribe((d: CalendarDate) => this._currentDate = d);\n        this.calendarViewPortService.viewport.subscribe(s => this.viewport = s);\n    }\n\n    /**\n     * @returns month long name\n     */\n    get month(): string {\n        return this.size ?\n            this._dateService.getMonthNames(this._currentDate!, 'long')\n            : this._dateService.getMonthNames(this._currentDate!, 'short');\n    }\n\n    /**\n     * @returns year long name\n     */\n    get year(): string {\n        return this._dateService.getYearName(this._currentDate!);\n    }\n\n    /**\n     * @returns month and year label\n     */\n    get label(): string {\n        return `${this.month} ${this.year}`;\n    }\n\n    /**\n     * invoke when size of view port change\n     * @returns boolean false in case of screen small\n     */\n    get size(): boolean {\n        return this.viewport !== 'Small' && this.viewport !== 'XSmall';\n    }\n\n}\n","<mat-lable [ngClass]=\"size ? 'header-label-font-x-large' : 'header-label-font-small'\">\n    {{label}}\n</mat-lable>\n","import { Component } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { day, month, week } from '../../../store/actions/calendar-view.action';\nimport { CalendarView } from '../../../calendar-modal/calendar-view/calendar-view';\nimport { CalendarViewPortService } from '../../../service/calendar-view-port.service';\nimport { selectCalendarViewState } from '../../../store';\n\n/**\n * @author vaibhav\n * Calendar toggel component will be display right top corner of the calendar header. Toggle\n * button will switch view in between day/week/month.\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-toggel',\n  templateUrl: './calendar-toggel.component.html',\n  styleUrls: [\n    './calendar-toggel.component.scss'\n  ]\n})\nexport class CalendarHeaderToggelComponent {\n  _view$?: Observable<CalendarView>;\n  _view?: CalendarView;\n  viewport?: string;\n\n  constructor(\n    private store: Store<{ _view: CalendarView }>,\n    private calendarViewPortService: CalendarViewPortService\n  ) {\n    this._view$ = store.select(selectCalendarViewState);\n    this._view$.subscribe((v) => this._view = v);\n    this.calendarViewPortService.viewport.subscribe(s => this.viewport = s);\n  }\n\n  /**\n   * use to dispatch month view in store\n   */\n  month() {\n    this.store.dispatch(month());\n  }\n\n  /**\n   * use to dispatch week view in store\n   */\n  week() {\n    this.store.dispatch(week());\n  }\n\n  /**\n   * use to dispatch day view in store\n   */\n  day() {\n    this.store.dispatch(day());\n  }\n\n  get size(): boolean {\n    return this.viewport !== 'Small' && this.viewport !== 'XSmall';\n  }\n}\n","<ng-template [ngIf]=\"size\">\n        <button mat-raised-button id=\"calendar-toggel-day\" [ngClass]=\"_view!.view === 'day' ? 'calendar-header-toggle-selected' : 'mat-primary'\"\n                aria-label=\"Select Day View\" (click)=\"day()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_day</mat-icon>\n                Day\n        </button>\n        <button mat-raised-button id=\"calendar-toggel-week\" aria-label=\"Select Week View\"\n                [ngClass]=\"_view!.view === 'week' ? 'calendar-header-toggle-selected' : 'mat-primary'\" (click)=\"week()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_week</mat-icon>\n                Week\n        </button>\n        <button mat-raised-button id=\"calendar-toggel-month\" aria-label=\"Select Month View\"\n                [ngClass]=\"_view!.view === 'month' ? 'calendar-header-toggle-selected' : 'mat-primary'\"\n                (click)=\"month()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_month</mat-icon>\n                Month\n        </button>\n</ng-template>\n<ng-template [ngIf]=\"!size\">\n        <button mat-icon-button [ngClass]=\"_view!.view === 'day' ? 'calendar-header-toggle-selected' : 'mat-primary'\"\n                aria-label=\"Select Day View\" (click)=\"day()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_day</mat-icon>\n                \n        </button>\n        <button mat-icon-button aria-label=\"Select Week View\"\n                [ngClass]=\"_view!.view === 'week' ? 'calendar-header-toggle-selected' : 'mat-primary'\" (click)=\"week()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_week</mat-icon>\n                \n        </button>\n        <button mat-icon-button aria-label=\"Select Month View\"\n                [ngClass]=\"_view!.view === 'month' ? 'calendar-header-toggle-selected' : 'mat-primary'\"\n                (click)=\"month()\">\n                <mat-icon class=\"calendar-toggel-button material-icons-round\">calendar_view_month</mat-icon>\n                \n        </button>\n</ng-template>","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-header',\n  templateUrl: './calendar-header.component.html',\n  styleUrls: [\n    './calendar-header.component.scss'\n  ]\n})\nexport class CalendarHeaderComponent {}\n","<upbytes-angular-material-calendar-navigator class=\"header-navigator\">    \n</upbytes-angular-material-calendar-navigator>\n<upbytes-angular-material-calendar-label class=\"header-label header-label-font header-label-font-color\">\n</upbytes-angular-material-calendar-label>\n<upbytes-angular-material-calendar-toggel class=\"header-toggel\">\n</upbytes-angular-material-calendar-toggel>\n","import { Injectable } from '@angular/core';\nimport { DateService } from '../../service/date.service';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarMonthView } from '../calendar-month-view';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class MonthViewService {\n\n    constructor(\n        private _dateService: DateService\n    ) { }\n\n    getMonthViewDates(date: CalendarDate): CalendarMonthView[] {\n        const monthDates: CalendarDate[] = this._dateService.getMonthDatesRange(date);\n        return monthDates.map((d) => this.createMonthViewDate(d));\n    }\n\n    getCalendarDateEventMap(\n        date: CalendarDate, events: CalendarEventInput[]\n    ): Map<CalendarMonthView, CalendarEventInput[]> {\n        const dates: CalendarDate[] = this._dateService.getMonthDatesRange(date);\n        const data = new Map<CalendarMonthView, CalendarEventInput[]>();\n        dates.map((d) => {\n            const gridDate = this.createMonthViewDate(d);\n            data.set(gridDate, []);\n            events!.map((event) => {\n                if (this._dateService.isSameDate(d, event.start!)\n                    || this._dateService.isBetween(d, event.start!, event.end!)) {\n                    data.get(gridDate)?.push(event);\n                }\n\n            });\n        });\n        return data;\n    }\n\n    // need to be fixed to get first day as a monday always\n    getDayOfWeeksNames(style: 'long' | 'short' | 'narrow'): string[] {\n        return this._dateService.getDayOfWeekNamesFromMonday(style);\n    }\n\n    createMonthViewDate(date: CalendarDate): CalendarMonthView {\n        return {\n            date: this._dateService.getDate(date),\n            day: this._dateService.getDayName(date, 'short'),\n            month: this._dateService.getMonth(date) + 1,\n            year: this._dateService.getYear(date),\n            isEnable: this._dateService.getMonth(date) === this._dateService.getMonth(date),\n            isToday: this._dateService.isToday(date)\n        };\n    }\n\n    setDate(selected: CalendarMonthView, _currentDate: CalendarDate): CalendarDate {\n        return this._dateService.setDate(selected.date,\n            selected.month,\n            selected.year,\n            _currentDate);\n    }\n}\n","import { Component } from '@angular/core';\nimport { MonthViewService } from '../service/calendar-month-view.service';\n\n/**\n * @author vaibhav\n * calendar month view grid header component will display short weekday name\n */\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-month-view-grid-header',\n  templateUrl: './calendar-month-view-grid-header.component.html',\n  styleUrls: [\n    './calendar-month-view-grid-header.component.scss'\n  ]\n})\nexport class CalendarMonthViewGridHeaderComponent {\n    dayOfWeekNames?: string[];\n\n    constructor(\n        private _monthViewService: MonthViewService,\n    ) {\n        this.dayOfWeekNames = this._monthViewService.getDayOfWeeksNames('short');\n    }\n\n}\n","<mat-grid-list cols=\"7\" \n               rowHeight=\"1.5em\" \n               gutterSize=\"0\"\n>\n    <mat-grid-tile tabindex=\"0\" class=\"calendar-month-view-grid-header\" aria-label=\"name\"\n        *ngFor=\"let name of dayOfWeekNames\">\n             {{name}}\n    </mat-grid-tile>\n</mat-grid-list>","import { Injectable } from '@angular/core';\nimport { CalendarEventFull } from '../calendar-modal/calendar-event/calendar-event-full';\n\n/**\n * @author vaibhav\n * This service is used to identify conflicting events and change left and width fraction\n * according to events conflicts.\n */\n\nclass EventNode {\n\tmax: number = 0;\n\tleft?: EventNode;\n\tright?: EventNode;\n\ti?: CalendarEventFull;\n}\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CalendarEventConflictService {\n\tconstructor() { }\n\n\t/**\n\t * takes CalendarEventFull as a  input and return EventNode object\n\t * @param i CalendarEventFull\n\t * @returns EventNode\n\t */\n\tprivate eventNode(i: CalendarEventFull) {\n\t\tconst temp = new EventNode();\n\t\ttemp.i = i;\n\t\ttemp.max = i.end!;\n\t\treturn temp;\n\t}\n\n\t/**\n\t * insert event node into tree\n\t * @param root EventNode\n\t * @param i CalendarEventFull\n\t * @returns EventNode\n\t */\n\tprivate insertEventNode(root: EventNode, i: CalendarEventFull) {\n\n\t\tif (root == null) {\n\t\t\treturn this.eventNode(i);\n\t\t}\n\n\t\tconst l = root.i?.start!;\n\n\t\tif (i.start! < l) {\n\t\t\troot.left = this.insertEventNode(root.left!, i);\n\t\t} else {\n\t\t\troot.right = this.insertEventNode(root.right!, i);\n\t\t}\n\n\t\tif (root.max < i.end!) {\n\t\t\troot.max = i.end!;\n\t\t}\n\t\treturn root;\n\t}\n\n\t/**\n\t * check if two events are conflicting\n\t * @param i1 CalendarEventFull\n\t * @param i2 CalendarEventFull\n\t * @returns boolean\n\t */\n\tprivate isConflict(i1: CalendarEventFull, i2: CalendarEventFull) {\n\t\tif (i1.start! < i2.end! && i2.start! < i1.end!) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * search conflicting events in tree. add new events into tree.\n\t * @param root EventNode\n\t * @param i CalendarEventFull\n\t * @param conflictingEvents\n\t * @returns CalendarEventFull\n\t */\n\tprivate conflictSearch(root: EventNode,\n\t\ti: CalendarEventFull,\n\t\tconflictingEvents: CalendarEventFull[]): CalendarEventFull {\n\n\t\tif (root == null) {\n\t\t\treturn {};\n\t\t}\n\n\t\tif (this.isConflict(root.i!, i)) {\n\t\t\tconflictingEvents.push(root.i!);\n\t\t}\n\t\tif (root.left != null &&\n\t\t\troot.left.max >= i.start!) {\n\t\t\treturn this.conflictSearch(root.left, i, conflictingEvents);\n\t\t}\n\n\t\treturn this.conflictSearch(root.right!, i, conflictingEvents);\n\t}\n\n\t/**\n\t * call from other service with input data.\n\t * @param events CalendarEventFull[]\n\t * @param days number\n\t */\n\tconflicting(events: CalendarEventFull[], days: number) {\n\n\t\tlet root: EventNode;\n\t\troot = this.insertEventNode(root!, events[0]);\n\n\t\tfor (let i = 1; i < events.length; i++) {\n\t\t\tconst conflictingEvents: CalendarEventFull[] = [];\n\n\t\t\tthis.conflictSearch(root, events[i], conflictingEvents);\n\n\t\t\tevents[i].conflics = conflictingEvents.length;\n\t\t\tconflictingEvents.push(events[i]);\n\t\t\tthis.conflictedEventFr(conflictingEvents, days);\n\n\t\t\troot = this.insertEventNode(root, events[i]);\n\t\t}\n\t}\n\n\t/**\n\t * update conflicting events left and width franction\n\t * @param conflicts CalendarEventFull[]\n\t * @param days number\n\t * @returns CalendarEventFull[]\n\t */\n\tconflictedEventFr(conflicts: CalendarEventFull[], days: number) {\n\t\tconflicts.forEach((c, index) => {\n\t\t\tc.widthFr = 1 / conflicts.length;\n\t\t\tc.leftFr = c.left! + (days * index) / conflicts.length;\n\t\t});\n\t\treturn conflicts;\n\t}\n\n}\n\n","import { ElementRef, Injectable } from '@angular/core';\nimport { CalendarEventFull } from '../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarEventInput } from '../calendar-modal/calendar-event/calendar-event-input';\nimport { CalendarEventConflictService } from './calendar-event-conflict.service';\nimport { DateService } from './date.service';\n\n/**\n * @author vaibhav\n * calendar event servies is use to input style on event snippets.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarEventService {\n    constructor(\n        private _dateService: DateService,\n        private _calendarEventConflictService: CalendarEventConflictService\n    ) { }\n\n    setEventStyle(\n        event: CalendarEventFull, _element: ElementRef<HTMLElement>,\n        left: string, top: string, width: number, height: string): void {\n        this.styleWidth(event, _element, width);\n        this.styleLeft(event, _element, left);\n        this.styleTop(event, _element, top);\n        this.styleHeight(event, _element, height);\n        this.styleBackground(event, _element);\n    }\n\n    calc(exp: string): string {\n        return `calc(${exp})`;\n    }\n\n    styleLeft(event: CalendarEventFull, _element: ElementRef<HTMLElement>,\n        left: string): void {\n        if (event.conflics! > 0 && event.leftFr! > 1) {\n            (_element.nativeElement.style as any)['left'] =\n                this.calc(`(${left} - 0px + 0px) * ${event.leftFr!}`);\n        } else {\n            (_element.nativeElement.style as any)['left']\n            = this.calc(`(${left} - 0px + 0px) * ${event.left}`);\n        }\n    }\n\n    styleTop(event: CalendarEventFull, _element: ElementRef<HTMLElement>,\n        top: string): void {\n        (_element.nativeElement.style as any)['top']\n            = !event.isAllDay ?\n                this.calc(`(${top} + 0px) * ${event.top}\n                + ${this.calculateEventStartOffset(event)}`) : '5px';\n    }\n\n    styleWidth(event: CalendarEventFull, _element: ElementRef<HTMLElement>,\n        width: number): void {\n        (_element.nativeElement.style as any)['width']\n            = this.calc(`(${width}% - 0px) * ${event.widthFr!} + 0px`);\n    }\n\n    styleHeight(event: CalendarEventFull, _element: ElementRef<HTMLElement>,\n        height: string): void {\n        (_element.nativeElement.style as any)['height'] =\n            !event.isAllDay ? this.calc(`${this.calculateEventHeight(event)}`) : height;\n    }\n\n    styleBackground(event: CalendarEventFull, _element: ElementRef<HTMLElement>): void {\n        (_element.nativeElement.style as any)['background-color'] =\n            `${event.color}`;\n    }\n\n    calculateEventStartOffset(event: CalendarEventFull): string {\n        return `${this._dateService.minute(event.start!) / 12}em`;\n    }\n\n    calculateEventHeight(event: CalendarEventFull): string {\n        return `${this._dateService.timeDiffinMinutes(event.start!, event.end!)! / 12}em`;\n    }\n\n    eventsubtitle(event: CalendarEventFull): string {\n        return `${this._dateService.getTimeFormat(event.start!)}\n        - ${this._dateService.getTimeFormat(event.end!)}`;\n    }\n\n    createCalendarEventFull(final: CalendarEventInput,\n        top: number, left: number): CalendarEventFull {\n        return {\n            start: final.start,\n            end: final.end,\n            title: final.title,\n            color: final.color,\n            format: final.format,\n            description: final.description,\n            left: left,\n            top: top,\n            height: this.calculateEventHeightFraction(final),\n            widthFr: 1,\n            conflics: 0,\n            leftFr: 1\n        };\n    }\n\n    calculateEventHeightFraction(e: CalendarEventInput): number {\n        return this._dateService.timeDiffinMinutes(e.start!, e.end!)! / 12;\n    }\n\n    filterEventsBySameLeft(events: CalendarEventInput[]): Map<number, CalendarEventFull[]> {\n        const eventMap: Map<number, CalendarEventFull[]> = new Map<number, CalendarEventFull[]>();\n        events.forEach((e: CalendarEventFull) => {\n            if (eventMap.has(e.left!)) {\n                eventMap.get(e.left!)?.push(e);\n            } else {\n                eventMap.set(e.left!, Array.of(e));\n            }\n        });\n        return eventMap;\n    }\n\n    filteredConflictedEvents(events: CalendarEventFull[], days: number): CalendarEventFull[] {\n        const eventMap: Map<number, CalendarEventFull[]> = this.filterEventsBySameLeft(events);\n        eventMap.forEach((v: CalendarEventFull[]) => {\n            this._calendarEventConflictService.conflicting(v, days);\n        });\n        return events;\n    }\n\n    isAllDayEvent(event: CalendarEventFull): CalendarEventFull {\n        event.isAllDay = !this._dateService.isSameDate(event.end!, event.start!);\n        return event;\n    }\n\n    allDayEventWidth(event: CalendarEventFull): CalendarEventFull {\n        if (event.isAllDay) {\n            const diff = this._dateService.getDateTime(event.end!).day\n                - this._dateService.getDateTime(event.start!).day + 1;\n            event.widthFr = diff;\n        }\n        return event;\n    }\n\n    eventFullTime(event: CalendarEventFull): string {\n        const start = this._dateService.getDateTime(event.start!);\n        return `${start.weekdayShort} ${start.day}\n        /${start.month}/${start.year} \n        ${this._dateService.getTimeFormat(event.start!)}\n         - ${this._dateService.getTimeFormat(event.end!)}`;\n    }\n\n\n}\n","import { Component, ElementRef, Inject, OnInit } from '@angular/core';\nimport { MatDialogConfig, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { CalendarEventFull } from '../../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarEventService } from '../../service/calendar-event.service';\n\n/**\n * @author vaibhav\n * calendar event dialog component is used to display event complete data.\n */\n@Component({\n    selector: 'upbytes-angular-material-calendar-event-dialog',\n    templateUrl: 'calendar-event-dialog.component.html',\n    styleUrls: ['calendar-event-dialog.component.scss']\n})\nexport class CalendarEventDialog implements OnInit {\n    positionRelativeToElement?: ElementRef;\n    time?: string;\n    constructor(\n        private _element: ElementRef<HTMLElement>,\n        public dialogRef: MatDialogRef<CalendarEventDialog>,\n        @Inject(MAT_DIALOG_DATA) public event: { edata: CalendarEventFull },\n        @Inject(MAT_DIALOG_DATA) public position: { positionRelativeToElement: ElementRef },\n        private calendarEventService: CalendarEventService) {\n        this.time = this.calendarEventService.eventFullTime(this.event.edata);\n        this.positionRelativeToElement = position.positionRelativeToElement;\n    }\n\n    ngOnInit(): void {\n        const matDialogConfig = this.setDialogPosition();\n        this.dialogRef.updatePosition(matDialogConfig.position);\n        this.setDialogBackground();\n    }\n\n    /**\n     * use to set dialoge position according to event clicked.\n     * @returns MatDialogConfig\n     */\n    setDialogPosition(): MatDialogConfig {\n        const matDialogConfig = new MatDialogConfig();\n        const rect: DOMRect = this.positionRelativeToElement!.nativeElement.getBoundingClientRect();\n        matDialogConfig.position = {\n            top: `${10}em`\n        };\n        if (this.event.edata.left! > 4) {\n            matDialogConfig.position!.right = `${rect.left}px`;\n        } else {\n            matDialogConfig.position!.left = `${rect.left + rect.width}px`;\n        }\n        matDialogConfig.position = {\n            top: `${10}em`\n        };\n        return matDialogConfig;\n    }\n\n    /**\n     * display dialoge backgrond accroding to event color\n     */\n    setDialogBackground() {\n        this._element.nativeElement.parentElement!.style.background = this.event.edata.color!;\n    }\n\n    close() {\n        this.dialogRef.close();\n    }\n}\n","<div mat-dialog-title class=\"calendar-event-dialog-title\">\n    <button mat-icon-button (click)=\"close()\">\n        <mat-icon class=\"calendar-toggel-button\">close</mat-icon>\n    </button>\n</div>\n<mat-dialog-content>\n    <mat-list class=\"calendar-event-dialog\">\n        <mat-list-item>\n            <mat-icon mat-list-icon class=\"material-icons-round\">title</mat-icon>\n            <div mat-line class=\"calendar-event-line\">{{event!.edata.title}}</div>\n        </mat-list-item>\n        <mat-divider></mat-divider>\n        <mat-list-item>\n            <mat-icon mat-list-icon class=\"material-icons-round\">schedule</mat-icon>\n            <div mat-line class=\"calendar-event-line\">{{time!}}</div>\n        </mat-list-item>\n        <mat-divider></mat-divider>\n        <mat-list-item *ngIf=\"event!.edata.description!\">\n            <mat-icon mat-list-icon class=\"material-icons-round\">description</mat-icon>\n            <div mat-line class=\"calendar-event-line\">{{event!.edata.description}}</div>\n        </mat-list-item>\n\n    </mat-list>\n</mat-dialog-content>","import { ElementRef, Injectable } from '@angular/core';\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\nimport {\n    CalendarEventDialog\n} from '../calendar-events-module/calendar-event-dialog-view/calendar-event-dialog.component';\nimport { CalendarEventFull } from '../calendar-modal/calendar-event/calendar-event-full';\n\n/**\n * @author vaibhav\n * use to open and close calendar event dialog.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarEventDialogeService {\n\n    constructor(public dialog: MatDialog) { }\n\n    public openDialog({ edata, positionRelativeToElement,\n        hasBackdrop = false, height = '25em', width = '30em', backdropClass,\n        panelClass }:\n        {\n            edata?: CalendarEventFull,\n            positionRelativeToElement?: ElementRef,\n            hasBackdrop?: boolean,\n            height?: string, width?: string, backdropClass?: string, panelClass?: string\n        }): MatDialogRef<CalendarEventDialog> {\n\n        const dialogRef: MatDialogRef<CalendarEventDialog> =\n            this.dialog.open(CalendarEventDialog, {\n                hasBackdrop: hasBackdrop,\n                height: height,\n                width: width,\n                panelClass: panelClass,\n                backdropClass: backdropClass,\n                data: {\n                    positionRelativeToElement: positionRelativeToElement,\n                    edata: edata\n                }\n            });\n        return dialogRef;\n    }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CalendarEventFull } from '../../calendar-modal/calendar-event/calendar-event-full';\n\nimport {\n  CalendarEventInput\n} from '../../calendar-modal/calendar-event/calendar-event-input';\nimport {\n  MonthViewService\n} from '../../calendar-month-view-module/service/calendar-month-view.service';\nimport { CalendarEventDialogeService } from '../../service/calendar-event-dialog.service';\nimport { CalendarEventService } from '../../service/calendar-event.service';\n\n/**\n * @author vaibhav\n * Calendar event view component is used to display events on month view grid\n */\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-event-view',\n  templateUrl: './calendar-event-view.component.html',\n  styleUrls: [\n    './calendar-event-view.component.scss'\n  ]\n})\nexport class CalendarEventViewComponent {\n  @ViewChild('eventView', { read: ElementRef }) public eventViewRef?: ElementRef;\n  @Input() events?: CalendarEventInput[];\n  time?: string;\n\n  constructor(\n    private monthViewService: MonthViewService,\n    private calendarEventService: CalendarEventService,\n    private calendarEventDialogService: CalendarEventDialogeService) { }\n\n\n  /**\n   * use to display title on mat-card subtitle\n   * @param e CalendarEventFull\n   * @returns combine start datetime and end datetime\n   */\n  getTitle(e: CalendarEventFull): string {\n    return this.time = this.calendarEventService.eventsubtitle(e);\n  }\n\n  /**\n   * open mat-dialog to display event content\n   * @param e CalendarEventFull\n   */\n  openEventDialog(e: CalendarEventFull) {\n    this.calendarEventDialogService.openDialog({\n      edata: e,\n      positionRelativeToElement: this.eventViewRef!,\n      hasBackdrop: true,\n      backdropClass: 'calendar-event-dialog-white-backdrop',\n      panelClass: 'calendar-event-dialog'\n    });\n  }\n}\n","<ng-template ngFor let-e [ngForOf]=\"events\" let-i=\"index\">\n  <mat-card #eventView *ngIf=\"i<2\" class=\"calendar-event-view-content\"\n         [ngStyle]=\"{'background-color' : e.color}\" (click)=\"openEventDialog(e)\">\n         <mat-card-subtitle class=\"calendar-full-view-subtitle\" >\n             {{getTitle(e)!}}\n         </mat-card-subtitle>\n    </mat-card>\n</ng-template>","import { Component, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { combineLatestWith, map, Observable } from 'rxjs';\nimport { MonthViewService } from '../service/calendar-month-view.service';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarMonthView } from '../calendar-month-view';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\nimport { goto } from '../../store/actions/date.action';\nimport { day } from '../../store/actions/calendar-view.action';\nimport { selectCalendarDateState } from '../../store';\n\n/**\n * @author vaibhav\n *\n * CalendarMonthViewGridComponent: this component will display grid view of month dates\n * Events: events will be merge with calendar dates and display by\n * using calendar view dates template.\n */\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-month-view-grid',\n  templateUrl: './calendar-month-view-grid.component.html',\n  styleUrls: [\n    './calendar-month-view-grid.component.scss'\n  ]\n})\nexport class CalendarMonthViewGridComponent implements OnInit {\n  date$?: Observable<CalendarDate>;\n  _currentDate?: CalendarDate;\n  monthViewDates?: Map<CalendarMonthView, CalendarEventInput[]>;\n  @Input()\n  events$?: Observable<CalendarEventInput[]>;\n\n  constructor(\n    private store: Store<{ _date: CalendarDate }>,\n    private _monthViewService: MonthViewService,\n  ) {\n    this.date$ = store.select(selectCalendarDateState);\n  }\n\n  /**\n   * This function will combine date stream with event stream to intialize grid view.\n   */\n  ngOnInit(): void {\n\n    this.date$?.pipe(\n      combineLatestWith(this.events$!),\n      map(([date, events]) => {\n        this._currentDate = date;\n        return this._monthViewService.getCalendarDateEventMap(date, events);\n      }),\n    ).subscribe(data => this.monthViewDates = data);\n  }\n\n  /**\n   * This function will return true if array have more than 2 events.\n   * used to display event count\n   * @param events calendar event input array as a parameter\n   * @returns return boolean value is array has more than 2 events.\n   */\n  isCountVisible(events: CalendarEventInput[]): boolean {\n    return events.length > 2;\n  }\n\n  /**\n   * This function is used with user click on date value.\n   * it will switch month view to day view.\n   * @param e will take current calendar state as a input.\n   */\n  switchView(e: CalendarMonthView) {\n    this.goto(this._monthViewService.setDate(e, this._currentDate!));\n    this.store.dispatch(day());\n  }\n\n  /**\n   * This fucntion is use to dispatch date to store.\n   * @param _currentDate take current date as a input paramater\n   */\n  goto(_currentDate: CalendarDate) {\n    this.store.dispatch(goto(_currentDate));\n  }\n\n}\n","<mat-grid-list cols=\"7\" rowHeight=\"6em\" gutterSize=\"1.5\">\n    <ng-template ngFor let-tile [ngForOf]=\"monthViewDates | keyvalue\" let-i=\"index\">\n        <mat-grid-tile class=\"calendar-month-view-grid\"\n            [ngClass]=\"tile.key.isToday ? 'calendar-month-view-grid-date-today-border' : ''\">\n            <div *ngIf=\"tile.key.isToday\" class=\"calendar-month-view-grid-date-today\"></div>\n            <div tabindex=\"0\" [ngClass]=\"tile.key.isToday ? 'calendar-month-view-grid-date-today-text' : ''\"\n                class=\"calendar-month-view-grid-date\" \n                (click)=\"switchView(tile.key)\" (keydown)=\"switchView(tile.key)\">{{tile.key.date}}</div>\n            <upbytes-angular-material-calendar-event-view *ngIf=\"tile.value.length > 0\" tabindex=\"0\" [events]=\"tile.value\">\n            </upbytes-angular-material-calendar-event-view>\n            <div tabindex=\"0\" *ngIf=\"isCountVisible(tile.value)\" class=\"calendar-month-view-grid-footer\">\n                +{{tile.value.length}}\n            </div>\n        </mat-grid-tile>\n    </ng-template>\n</mat-grid-list>","import { Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-month-view',\n  templateUrl: './calendar-month-view.component.html',\n  styleUrls: [\n    './calendar-month-view.component.scss'\n  ]\n})\nexport class CalendarMonthViewComponent {\n  @Input()\n  events$?: Observable<CalendarEventInput[]>;\n}\n","<upbytes-angular-material-calendar-month-view-grid-header>\n</upbytes-angular-material-calendar-month-view-grid-header>\n<upbytes-angular-material-calendar-month-view-grid [events$]=\"events$\">\n</upbytes-angular-material-calendar-month-view-grid>","import { Injectable } from '@angular/core';\nimport { CalendarDate } from '../calendar-modal/calendar-date/calendar-date';\nimport { CalendarEventFull } from '../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarEventInput } from '../calendar-modal/calendar-event/calendar-event-input';\nimport { CalendarHours } from '../calendar-modal/calendar-hours/calendar-hours';\nimport { CalendarEventService } from './calendar-event.service';\nimport { DateService } from './date.service';\n\nexport function bifilter<C>(f: (c: C) => boolean, xs: any): [C[], C[]] {\n    /* eslint-disable @typescript-eslint/naming-convention */\n    return xs.reduce(([T, F]: [C[], C[]], e: C) =>\n        !f(e) ? [T, [...F, e]] : [[...T, e], F], [[], []]);\n}\n\n/**\n * @author vaibhav\n * used by day/week view to create grid data.\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarHoursService {\n\n    constructor(\n        private _dateService: DateService,\n        private _calendarEventService: CalendarEventService\n    ) { }\n\n    getCalendarHours(): CalendarHours[] {\n        const hours = this._dateService.getHoursFormat().map((d) => ({\n                hours: d,\n                isHourNow: this._dateService.isHoursNow(d),\n                date: 0,\n                day: '',\n                isAllDay: false\n            }));\n        hours.unshift(this.addAllDayEventRow());\n        return hours;\n    }\n\n    getCalendarWeekRange(date: CalendarDate): CalendarHours[] {\n        const dates: CalendarDate[] = this._dateService.getWeekDatesRange(date);\n        return this.pushFirstRowForGrid(dates);\n    }\n\n    getCalndarWeekHoursGridData(date: CalendarDate): CalendarHours[][] {\n        const dates: CalendarHours[] = this.getCalendarWeekRange(date);\n        return this.getCalendarHours().map((c) =>\n            dates.map((h) => {\n                const ch = this.createCalendarHours(h, c);\n                return ch;\n            }));\n    }\n\n    getCalndarDayHoursGridData(date: CalendarDate): CalendarHours[][] {\n        const dates: CalendarHours[] = this.pushFirstRowForGrid(Array.of(date));\n        return this.getCalendarHours().map((c) =>\n            dates.map((h) => {\n                const ch = this.createCalendarHours(h, c);\n                return ch;\n            }));\n    }\n\n\n    pushFirstRowForGrid(dates: CalendarDate[]): CalendarHours[] {\n        const hours: CalendarHours[] = dates.map((d) => ({\n                day: this._dateService.getDayName(d, 'short'),\n                date: this._dateService.getDate(d),\n                isToday: this._dateService.isToday(d),\n                month: this._dateService.getMonth(d),\n                year: this._dateService.getYear(d),\n                cDate: d\n            }));\n        hours.unshift(this.createFirstRowDate(dates[0]));\n        return hours;\n    }\n\n    createFirstRowDate(date: CalendarDate): CalendarHours {\n        return {\n            timeZone: this._dateService.getTimeZoneFormat(date),\n            isFirst: true\n        };\n    }\n\n    createCalendarHours(h: CalendarHours, c: CalendarHours): CalendarHours {\n        return {\n            hours: c.hours,\n            day: h.day,\n            date: h.date,\n            isHourNow: c.isHourNow,\n            isToday: h.isToday,\n            timeZone: h.timeZone,\n            isFirst: h.isFirst,\n            cDate: h.cDate\n        };\n    }\n\n    filterEventsByDateAndStartTime(\n        events: CalendarEventInput[], calendarHours: CalendarHours[][]\n    ): CalendarEventFull[] {\n        const filteredEvents: CalendarEventFull[] = [];\n        calendarHours.forEach((hours: CalendarHours[], i) => {\n            hours.forEach((h: CalendarHours, j) => {\n                events.forEach((e: CalendarEventInput) => {\n                    if (h.cDate! && this._dateService.isSameDate(h.cDate!, e.start!) &&\n                        this._dateService.isSameHour(h.hours!, e.start!)) {\n                        filteredEvents.push(\n                            this._calendarEventService.createCalendarEventFull(e, i, j));\n                    }\n                });\n            });\n        });\n        return filteredEvents;\n    }\n\n    filterMultipleDayEvents(events: CalendarEventFull[]):\n    [CalendarEventFull[], CalendarEventFull[]] {\n        return bifilter(((e: CalendarEventFull) =>\n            !this._dateService.isSameDate(e.end!, e.start!)), events);\n    }\n\n    findLeftForMultiDaysEventWeek(\n        events: CalendarEventFull[],\n        calendarDate: CalendarDate): CalendarEventFull[] {\n        const filteredEvents: CalendarEventFull[] = [];\n        this.getCalendarWeekRange(calendarDate).forEach((hours: CalendarHours, i) => {\n            events.forEach((e: CalendarEventInput) => {\n                if (hours.cDate! && this._dateService.isSameDate(hours.cDate!, e.start!)) {\n                    filteredEvents.push(\n                        this._calendarEventService.createCalendarEventFull(e, 0, i));\n                }\n            });\n        });\n        return filteredEvents;\n    }\n\n    findLeftForMultiDaysEventDay(\n        events: CalendarEventFull[],\n        calendarDate: CalendarDate): CalendarEventFull[] {\n        const filteredEvents: CalendarEventFull[] = [];\n        this.pushFirstRowForGrid(Array.of(calendarDate)).forEach((hours: CalendarHours, i) => {\n            events.forEach((e: CalendarEventInput) => {\n                if (hours.cDate! && this._dateService.isSameDate(hours.cDate!, e.start!)\n                || hours.cDate! && this._dateService.isBetween(hours.cDate!, e.start!, e.end!)) {\n                    filteredEvents.push(\n                        this._calendarEventService.createCalendarEventFull(e, 0, i));\n                }\n            });\n        });\n        return filteredEvents;\n    }\n\n    addAllDayEventRow() {\n        return {\n            hours: '0',\n            isHourNow: false,\n            date: 0,\n            day: '',\n            isAllDay: true\n        };\n    }\n\n\n\n}\n","import { Component } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarHours } from '../../calendar-modal/calendar-hours/calendar-hours';\nimport { CalendarHoursService } from '../../service/calendar-hours.service';\nimport { selectCalendarDateState } from '../../store';\n\n/**\n * @author vaibhav\n * calendar week view header comoponent should be displayed short weekdays name and GTM +timezone\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-week-view-header',\n  templateUrl: './calendar-week-view-header.component.html',\n  styleUrls: [\n    './calendar-week-view-header.component.scss'\n  ]\n})\nexport class CalendarWeekViewHeaderComponent {\n\n  date$?: Observable<CalendarDate>;\n  _currentDate?: CalendarDate;\n  calendarHours?: CalendarHours[];\n\n  constructor(\n    private store: Store<{ _date: CalendarDate }>,\n    private _calendarWeekService: CalendarHoursService\n  ) {\n    this.date$ = store.select(selectCalendarDateState);\n    this.date$.subscribe((d: CalendarDate) => {\n      this._currentDate = d;\n      this.calendarHours = this._calendarWeekService.getCalendarWeekRange(this._currentDate!);\n    });\n  }\n}\n","<div class=\"calendar-week-view-header-border\">\n    <mat-grid-list cols=\"8\" rowHeight=\"5em\" gutterSize=\"0\">\n\n        <mat-grid-tile class=\"calendar-week-view-header\"\n            [ngClass]=\"tile.isToday ? 'calendar-week-view-header-today' : ''\"\n            *ngFor=\"let tile of calendarHours; let i=index; \">\n            <div *ngIf=\"tile.isFirst\" class=\"calendar-week-view-header-first\">\n                {{tile.timeZone}}\n            </div>\n            <div class=\"calendar-week-view-header-content\">\n            <div class=\"calendar-week-view-header-font\">\n                {{tile.date}}\n            </div>\n            <div class=\"calendar-week-view-header-day\">\n                {{tile.day}}\n            </div>\n            </div>\n        </mat-grid-tile>\n    </mat-grid-list>\n\n</div>","import { Component, Input, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { CalendarEventFull } from '../../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarView } from '../../calendar-modal/calendar-view/calendar-view';\nimport { CalendarEventDialogeService } from '../../service/calendar-event-dialog.service';\nimport { CalendarEventService } from '../../service/calendar-event.service';\nimport { selectCalendarViewState } from '../../store';\n\nconst LEFT = '12.5%';\nconst TOP = '5em';\nconst HEIGHT = '5em';\n\n/**\n * @author vaibhav\n * calendar event full view component is use to display events on day/week view\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-event-full-view',\n  templateUrl: './calendar-event-full-view.component.html',\n  styleUrls: [\n    './calendar-event-full-view.component.scss'\n  ]\n})\nexport class CalendarEventFullViewComponent implements OnInit {\n  @ViewChild('eventfullview', { read: ElementRef }) public eventfullviewRef?: ElementRef;\n  @Input() event?: CalendarEventFull;\n  width?: number;\n  _view$?: Observable<CalendarView>;\n  _view?: CalendarView;\n  time?: string;\n\n  constructor(\n    private store: Store<{ _view: CalendarView }>,\n    private _element: ElementRef<HTMLElement>,\n    private calendarEventService: CalendarEventService,\n    private calendarEventDialogService: CalendarEventDialogeService,\n    public dialog: MatDialog) {\n    this._view$ = store.select(selectCalendarViewState);\n    this._view$.subscribe((v) => this._view = v);\n  }\n\n  ngOnInit(): void {\n    const width = this._view?.view === 'week' ? 12.5 : 87.5;\n    this.event = this.calendarEventService.isAllDayEvent(this.event!);\n    this.event = this._view?.view === 'week' ?\n      this.calendarEventService.allDayEventWidth(this.event!) : this.event;\n    this.calendarEventService.setEventStyle(this.event!,\n      this._element, LEFT, TOP, width!, HEIGHT);\n    this.time = this.calendarEventService.eventsubtitle(this.event!);\n  }\n\n  /**\n   * open mat-dialoge to display event content\n   */\n  openEventDialog() {\n    this.calendarEventDialogService.openDialog({\n      edata: this.event,\n      positionRelativeToElement: this.eventfullviewRef!,\n      hasBackdrop: true,\n      backdropClass: 'calendar-event-dialog-white-backdrop',\n      panelClass: 'calendar-event-dialog'\n    });\n  }\n\n}\n","<mat-card #eventfullview class=\"calendar-full-view-content\"\n         [ngStyle]=\"{'background-color' : event!.color}\"\n         (click)=\"openEventDialog()\">\n    <mat-card-subtitle class=\"calendar-full-view-subtitle\" >{{time!}}</mat-card-subtitle>\n    <mat-card-content class=\"calendar-card-content\" >{{event!.title}}</mat-card-content>\n</mat-card>","import { ElementRef, Injectable } from '@angular/core';\nimport { DateTime } from 'luxon';\nimport { DateService } from './date.service';\n\n/**\n * @author vaibhav\n * will move hour indicator in every minute.\n *\n */\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarHourIndicatorService {\n\n    currentTime?: DateTime;\n    hour?: number;\n    minute?: number;\n    constructor(\n        private _dateService: DateService\n    ) {\n        this.updateTop();\n\n    }\n\n    updateTop() {\n        this.currentTime = this._dateService.today().current;\n        this.hour = this.currentTime.hour;\n        this.minute = this.currentTime.minute;\n    }\n\n    /* esling-disable */\n    styleTop( _element: ElementRef<HTMLElement>,\n        top: string): void {\n        (_element!.nativeElement.style as any)['top']\n            = this.calc(`(${top} + 0px) * ${this.hour! + 1}\n            + ${this.calculateEventStartOffset()}`);\n    }\n\n    calculateEventStartOffset(): string {\n        return `${this.minute! /12}em`;\n    }\n\n    calc(exp: string): string {\n        return `calc(${exp})`;\n    }\n\n}\n","import { AfterViewInit, Component, ElementRef, OnDestroy, ViewChild } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { interval, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { CalendarView } from '../../calendar-modal/calendar-view/calendar-view';\nimport { CalendarHourIndicatorService } from '../../service/calendar-hour-indicator.service';\nimport { selectCalendarViewState } from '../../store';\n\n\nconst ID = '-hour-indicator';\nconst TOP ='5em';\n\n@Component({\n    selector: 'upbytes-angular-material-calendar-hour-indicator',\n    templateUrl: './calendar-hour-indicator.component.html',\n    styleUrls: [\n        './calendar-hour-indicator.component.scss'\n    ]\n})\nexport class CalendarHourIndicatorComponent implements AfterViewInit, OnDestroy {\n    @ViewChild('hourindicator', {read: ElementRef }) public hourindicatorRef?: ElementRef;\n\n    _view$?: Observable<CalendarView>;\n    _destroyed$ = new Subject<void>();\n    _interval$ = new Observable<number>();\n    _view?: CalendarView;\n    id?: string;\n\n    constructor(\n        private store: Store<{ _view: CalendarView}>,\n        private hourIndicatorService: CalendarHourIndicatorService\n    ) {\n        this._interval$ = interval(1000);\n        this._view$ = store.select(selectCalendarViewState);\n        this._view$.subscribe((v) => {\n            this._view = v;\n            this.id = `${this._view.view}${ID}`;\n        });\n        this._interval$.pipe(takeUntil(this._destroyed$)).subscribe(() => {\n            this.hourIndicatorService.updateTop();\n            this.setTop();\n        });\n    }\n\n    ngAfterViewInit(): void {\n        this.setTop();\n    }\n\n    setTop() {\n        this.hourIndicatorService.styleTop(this.hourindicatorRef!, TOP);\n    }\n\n    ngOnDestroy(): void {\n        this._destroyed$.next();\n        this._destroyed$.complete();\n    }\n\n}\n","<mat-divider #hourindicator class=\"calendar-hour-indicator\" id=\"{{id}}\"></mat-divider>","import { Component, AfterViewInit, Input, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatestWith } from 'rxjs';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarHours } from '../../calendar-modal/calendar-hours/calendar-hours';\nimport { CalendarHoursService } from '../../service/calendar-hours.service';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\nimport { CalendarEventFull } from '../../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarEventService } from '../../service/calendar-event.service';\nimport { selectCalendarDateState } from '../../store';\n\n\n/**\n * @author vaibhav\n * calendar week view gird component will display grid view of week date and time.\n *\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-week-view-grid',\n  templateUrl: './calendar-week-view-grid.component.html',\n  styleUrls: [\n    './calendar-week-view-grid.component.scss'\n  ]\n})\nexport class CalendarWeekViewGridComponent implements OnInit, AfterViewInit {\n  @Input() events$?: Observable<CalendarEventInput[]>;\n  date$?: Observable<CalendarDate>;\n  _currentDate?: CalendarDate;\n  calendarHours?: CalendarHours[][];\n  calendarEventsFull?: CalendarEventFull[];\n  multipleDayEvents?: CalendarEventFull[];\n\n  constructor(\n    private store: Store<{ _date: CalendarDate }>,\n    private _calendarWeekService: CalendarHoursService,\n    private _calendarEventService: CalendarEventService\n  ) {\n    this.date$ = store.select(selectCalendarDateState);\n\n  }\n\n  /**\n   * Component lifecycle ngOnInit will initialize view\n   */\n  ngOnInit(): void {\n    this.date$?.pipe(\n      combineLatestWith(this.events$!)\n    ).subscribe(([d, events]: [CalendarDate, CalendarEventInput[]]) => {\n      this._currentDate = d;\n      this.calendarHours = this._calendarWeekService\n        .getCalndarWeekHoursGridData(this._currentDate!);\n      const filteredEventsArr = this._calendarWeekService.filterMultipleDayEvents(events!);\n      this.multipleDayEvents = this._calendarWeekService\n        .findLeftForMultiDaysEventWeek(filteredEventsArr[0], this._currentDate!);\n      this.calendarEventsFull = this._calendarWeekService\n        .filterEventsByDateAndStartTime(filteredEventsArr[1], this.calendarHours!);\n      this.calendarEventsFull = this._calendarEventService\n        .filteredConflictedEvents(this.calendarEventsFull, 1);\n    });\n  }\n\n  /**\n   * component lifecycle hook will scroll view to current hour.\n   */\n  ngAfterViewInit() {\n    document.getElementById(`week-hour-indicator`)?.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center',\n      inline: 'center'\n    });\n  }\n\n  trackByHour(index: number, el: CalendarHours): string {\n    return el.hours!;\n  }\n}\n","<mat-grid-list cols=\"8\" \n               rowHeight=\"5em\" \n               gutterSize=\"0\">\n\n    <ng-template ngFor let-days \n                [ngForOf]=\"calendarHours\" \n                let-i=\"index\">\n\n                <mat-grid-tile class=\"calendar-week-view-grid\" \n                               id=\"week-{{trackByHour(i, tile)}}\"\n                               \n                               [ngClass]=\"[\n                               tile.isToday ? 'calendar-week-view-grid-today' : '',\n                               tile.isHourNow ? 'calendar-week-view-grid-hours' : '']\"\n                               *ngFor=\"let tile of days; let i=index; trackBy: trackByHour\">\n                               <div *ngIf=\"tile.isFirst && tile.hours! !== '0'\"\n                                     [ngClass]=\"tile.isFirst ? 'calendar-day-view-grid-first' : ''\" >\n                                   {{tile.hours}}\n                                   {{tile.day}}\n                               </div>\n                               <div *ngIf=\"tile.isFirst && tile.hours! === '0'\" \n                                    [ngClass]=\"tile.isFirst ? 'calendar-day-view-grid-first' : ''\" >\n                                     all-day\n                               </div>\n                               <div *ngIf=!tile.isFirst \n                               [ngClass]=\"!tile.isFirst ? 'calendar-week-view-grid-hour' : ''\" >\n                                   \n                               </div>\n\n                </mat-grid-tile>\n      </ng-template>\n      <ng-template ngFor let-event\n                   [ngForOf]=\"calendarEventsFull\" \n                   let-i=\"index\">\n                   <upbytes-angular-material-calendar-event-full-view class=\"calendar-full-view\"\n                                                              [event]=\"event\">\n                    </upbytes-angular-material-calendar-event-full-view>\n      </ng-template>\n      <ng-template ngFor let-event\n      [ngForOf]=\"multipleDayEvents\" \n      let-i=\"index\">\n      <upbytes-angular-material-calendar-event-full-view class=\"calendar-full-view\"\n                                                 [event]=\"event\">\n       </upbytes-angular-material-calendar-event-full-view>\n</ng-template>\n<upbytes-angular-material-calendar-hour-indicator></upbytes-angular-material-calendar-hour-indicator>\n</mat-grid-list>\n\n","import { Component, Input } from '@angular/core';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\nimport { Observable } from 'rxjs';\n@Component({\n  selector: 'upbytes-angular-material-calendar-week-view',\n  templateUrl: './calendar-week-view.component.html',\n  styleUrls: [\n    './calendar-week-view.component.scss'\n  ]\n})\nexport class CalendarWeekViewComponent {\n    @Input()\n    events$?: Observable<CalendarEventInput[]>;\n    constructor() {}\n}\n","<upbytes-angular-material-calendar-week-view-header></upbytes-angular-material-calendar-week-view-header>\n\n\n    <div class=\"calendar-week-view\">\n        <upbytes-angular-material-calendar-week-view-grid [events$]=\"events$\">\n\n        </upbytes-angular-material-calendar-week-view-grid>\n    </div>\n","import { Component } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport { DateService } from '../../service/date.service';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { selectCalendarDateState } from '../../store';\n\n/**\n * @author vaibhav\n * calendar day view header comoponent should be displayed date/weekdaylong and GTM +timezone\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-day-view-header',\n  templateUrl: './calendar-day-view-header.component.html',\n  styleUrls: [\n    './calendar-day-view-header.component.scss'\n  ]\n})\nexport class CalendarDayViewHeaderComponent {\n\n  currentdate$?: Observable<CalendarDate>;\n  day?: string;\n  date?: number;\n  timeZone?: string;\n    constructor(\n      private store: Store<{ _date: CalendarDate}>,\n      private _dateService: DateService\n    ) {\n      this.currentdate$ = store.select(selectCalendarDateState);\n      this.currentdate$.subscribe((d: CalendarDate) => {\n          const redate = this._dateService.restoreFromStore(d);\n          this.day = redate.current.weekdayLong;\n          this.date = redate.current.day;\n          this.timeZone = this._dateService.getTimeZoneFormat(d);\n      });\n    }\n}\n","<div class=\"calendar-day-view-header-border\">\n<mat-grid-list cols=\"8\" \n               rowHeight=\"5em\" \n               gutterSize=\"0\">\n                <mat-grid-tile class=\"calendar-day-view-header\">\n                    <div class ='calendar-day-view-header-first'>\n                        {{timeZone}}\n                    </div>\n                </mat-grid-tile>\n                <mat-grid-tile class=\"calendar-day-view-header\"\n                              [colspan]=\"7\">\n                    <div class=\"calendar-day-view-grid-date\">\n                        <div class=\"calendar-day-view-header-date\">{{date}}</div>\n                        <div class=\"calendar-day-view-header-day\">{{day}}</div>\n                        \n                    </div>\n                </mat-grid-tile>\n</mat-grid-list>\n</div>","import { Component, OnInit, AfterViewInit, Input } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, combineLatestWith } from 'rxjs';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { CalendarHours } from '../../calendar-modal/calendar-hours/calendar-hours';\nimport { CalendarHoursService } from '../../service/calendar-hours.service';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\nimport { CalendarEventFull } from '../../calendar-modal/calendar-event/calendar-event-full';\nimport { CalendarEventService } from '../../service/calendar-event.service';\nimport { DateService } from '../../service/date.service';\nimport { selectCalendarDateState } from '../../store';\n\n/**\n * @author vaibhav\n * calendar day view gird component will display grid view of selected date and time.\n *\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar-day-view-grid',\n  templateUrl: './calendar-day-view-grid.component.html',\n  styleUrls: [\n    './calendar-day-view-grid.component.scss'\n  ]\n})\nexport class CalendarDayViewGridComponent implements OnInit, AfterViewInit {\n  @Input() events$?: Observable<CalendarEventInput[]>;\n  date$?: Observable<CalendarDate>;\n  _currentDate?: CalendarDate;\n  calendarHours?: CalendarHours[][];\n  calendarEventsFull?: CalendarEventFull[];\n  multipleDayEvents?: CalendarEventFull[];\n\n  constructor(\n    private store: Store<{ _date: CalendarDate }>,\n    private _calendarWeekService: CalendarHoursService,\n    private _calendarEventService: CalendarEventService,\n    private _dateService: DateService\n  ) {\n    this.date$ = store.select(selectCalendarDateState);\n  }\n\n  ngOnInit(): void {\n    this.date$!.pipe(\n      combineLatestWith(this.events$!)\n    ).subscribe(([d, events]: [CalendarDate, CalendarEventInput[]]) => {\n      this._currentDate = d;\n      this.calendarHours = this._calendarWeekService\n        .getCalndarDayHoursGridData(this._dateService.restoreFromStore(d));\n      const filteredEventsArr = this._calendarWeekService.filterMultipleDayEvents(events);\n      this.multipleDayEvents = this._calendarWeekService\n        .findLeftForMultiDaysEventDay(filteredEventsArr[0], this._dateService.restoreFromStore(d));\n      this.calendarEventsFull = this._calendarWeekService\n        .filterEventsByDateAndStartTime(filteredEventsArr[1], this.calendarHours!);\n      this.calendarEventsFull = this._calendarEventService\n        .filteredConflictedEvents(this.calendarEventsFull, 7);\n    });\n  }\n\n  /**\n   * component lifecycle hook will scroll view to current hour.\n   */\n  ngAfterViewInit() {\n    document.getElementById(`day-hour-indicator`)?.scrollIntoView({\n      behavior: 'smooth',\n      block: 'center',\n      inline: 'center'\n    });\n  }\n\n  getColspan(d: CalendarHours): number {\n    return d.isFirst ? 1 : 7;\n  }\n\n  trackByHour(index: number, el: CalendarHours): string {\n    return el.hours!;\n  }\n}\n","<mat-grid-list cols=\"8\" \n               rowHeight=\"5em\" \n               gutterSize=\"0\">\n\n    <ng-template ngFor let-days \n                [ngForOf]=\"calendarHours\" \n                let-i=\"index\">\n\n                <mat-grid-tile class=\"calendar-day-view-grid\" \n                               id=\"day-{{trackByHour(i, tile)}}\"\n                               [colspan]=\"getColspan(tile)\"\n                               [ngClass]=\"tile.isHourNow ? 'calendar-day-view-grid-hours' : 'calendar-day-view-grid'\"                               \n                               *ngFor=\"let tile of days; let i=index; trackBy: trackByHour\">\n                               <div *ngIf=\"tile.isFirst && tile.hours! !== '0'\"\n                                     [ngClass]=\"tile.isFirst ? 'calendar-day-view-grid-first' : ''\" >\n                                   {{tile.hours}}\n                                   {{tile.day}}\n                               </div>\n                               <div *ngIf=\"tile.isFirst && tile.hours! === '0'\" \n                                    [ngClass]=\"tile.isFirst ? 'calendar-day-view-grid-first' : ''\" >\n                                     all-day\n                               </div>\n                               <div *ngIf=!tile.isFirst \n                                    [ngClass]=\"!tile.isFirst ? 'calendar-day-view-grid-hour' : ''\" >\n                                   \n                               </div>\n                </mat-grid-tile>\n      </ng-template>\n      <ng-template ngFor let-event\n                   [ngForOf]=\"calendarEventsFull\" \n                   let-i=\"index\">\n                   <upbytes-angular-material-calendar-event-full-view class=\"calendar-full-view\"\n                                                              [event]=\"event\">\n                   </upbytes-angular-material-calendar-event-full-view>\n      </ng-template>\n      <ng-template ngFor let-event\n                  [ngForOf]=\"multipleDayEvents\" \n                  let-i=\"index\">\n                  <upbytes-angular-material-calendar-event-full-view class=\"calendar-full-view\"\n                                                 [event]=\"event\">\n                  </upbytes-angular-material-calendar-event-full-view>\n</ng-template>\n<upbytes-angular-material-calendar-hour-indicator></upbytes-angular-material-calendar-hour-indicator>\n</mat-grid-list>","import { Component, Input } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CalendarEventInput } from '../../calendar-modal/calendar-event/calendar-event-input';\n\n@Component({\n  selector: 'upbytes-angular-material-calendar-day-view',\n  templateUrl: './calendar-day-view.component.html',\n  styleUrls: [\n    './calendar-day-view.component.scss'\n  ]\n})\nexport class CalendarDayViewComponent {\n    @Input() events$?: Observable<CalendarEventInput[]>;\n    constructor() {}\n}\n","<upbytes-angular-material-calendar-day-view-header>\n\n</upbytes-angular-material-calendar-day-view-header>\n\n\n    <div class=\"calendar-day-view\">\n        <upbytes-angular-material-calendar-day-view-grid [events$]=\"events$\"> \n\n        </upbytes-angular-material-calendar-day-view-grid>\n    </div>\n","import { AfterContentChecked, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport {\n  CollectionViewer,\n  DataSource,\n  isDataSource\n} from '@angular/cdk/collections';\nimport { BehaviorSubject, isObservable, Observable, of, Subject, Subscription } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { CalendarView } from './calendar-modal/calendar-view/calendar-view';\nimport { CalendarEventInput } from './calendar-modal/calendar-event/calendar-event-input';\nimport { CalendarViewPortService } from './service/calendar-view-port.service';\nimport { CalendarServiceConfig } from './service/calendar-config.service';\nimport { day, month, week } from './store/actions/calendar-view.action';\n\nimport { CalendarEventInputAdapter } from './adapter/calendar-event-adapter';\nimport { CalendarEvent } from './calendar-event-source/calendar-event';\nimport { selectCalendarViewState } from './store';\n/**\n * define generic type for input data.\n */\nexport type CalendarEventDataSourceInput<T extends CalendarEvent> =\n  readonly T[] | DataSource<T> | Observable<readonly T[]> | [] | undefined;\n\n/**\n * @author vaibhav\n * Angular material component is entry coponent for this library.\n * It takes input as array, datasource and observable.\n */\n@Component({\n  selector: 'upbytes-angular-material-calendar',\n  templateUrl: './angular-material-calendar.component.html',\n  styleUrls: [\n    './angular-material-calendar.component.scss'\n  ]\n})\nexport class AngularMaterialCalendarComponent<T extends CalendarEvent>\n  implements OnInit, AfterContentChecked, OnDestroy, CollectionViewer {\n  private readonly _destroyed$ = new Subject<void>();\n  private _dataSource?: CalendarEventDataSourceInput<T>;\n  protected _data?: readonly T[];\n  private _renderEventSubscription$?: Subscription;\n  _view$?: Observable<CalendarView>;\n  _view?: CalendarView;\n  _events$?: BehaviorSubject<CalendarEventInput[]> = new BehaviorSubject<CalendarEventInput[]>([]);\n\n  constructor(\n    private store: Store<{_view: CalendarView}>,\n    private calendarViewPortService: CalendarViewPortService,\n    private calendarConfigService: CalendarServiceConfig,\n    private calendarEventInputAdapter: CalendarEventInputAdapter<T>\n  ) {\n    this.initialView(this.calendarConfigService.view!);\n    this._view$ = store.select(selectCalendarViewState);\n    this._view$!.subscribe((v) => this._view = v);\n  }\n\n  ngAfterContentChecked(): void {\n    if (this.dataSource && !this._renderEventSubscription$) {\n      this._observeRenderChanges();\n    }\n  }\n\n  readonly viewChange = new BehaviorSubject<{ start: number; end: number }>({\n    start: 0,\n    end: Number.MAX_VALUE,\n  });\n\n  ngOnInit(): void {\n    this.calendarViewPortService.viewportResize();\n  }\n\n\n  @Input()\n  get dataSource(): CalendarEventDataSourceInput<T> {\n    return this._dataSource!;\n  }\n  set dataSource(dataSource: CalendarEventDataSourceInput<T>) {\n    this._switchDataSource(dataSource);\n  }\n\n  private _switchDataSource(dataSource: CalendarEventDataSourceInput<T>) {\n    this._data = [];\n\n    if (isDataSource(this.dataSource)) {\n      this.dataSource.disconnect(this);\n    }\n\n    if (this._renderEventSubscription$) {\n      this._renderEventSubscription$.unsubscribe();\n      this._renderEventSubscription$ = undefined;\n    }\n\n    this._dataSource = dataSource;\n  }\n\n  private _observeRenderChanges() {\n    if (!this.dataSource) {\n      return;\n    }\n\n    let dataStream$: Observable<readonly T[]> | undefined;\n\n    if (isDataSource(this.dataSource)) {\n      dataStream$ = this.dataSource.connect(this);\n    } else if (isObservable(this.dataSource)) {\n      dataStream$ = this.dataSource;\n    } else if (Array.isArray(this.dataSource)) {\n      dataStream$ = of(this.dataSource);\n    }\n\n    this._renderEventSubscription$ = dataStream$!\n      .pipe(takeUntil(this._destroyed$))\n      .subscribe(data => {\n        const transform = data.map((d) => this.calendarEventInputAdapter.adapt(d)) || [];\n\n        this._events$?.next(this.calendarEventInputAdapter.sort(transform));\n      });\n  }\n\n  ngOnDestroy() {\n    this._destroyed$.next();\n    this._destroyed$.complete();\n    this._events$?.next([]);\n    this._events$?.complete();\n\n    if (isDataSource(this.dataSource)) {\n      this.dataSource.disconnect(this);\n    }\n  }\n\n  initialView(view: string) {\n    switch (view) {\n      case 'month':\n        this.store.dispatch(month());\n        break;\n      case 'week':\n        this.store.dispatch(week());\n        break;\n      case 'day':\n        this.store.dispatch(day());\n        break;\n      default:\n        this.store.dispatch(month());\n        break;\n    }\n  }\n\n}\n","<upbytes-angular-material-calendar-header class=\"calendar-header\">\n\n</upbytes-angular-material-calendar-header>\n<upbytes-angular-material-calendar-month-view *ngIf=\"_view!.view === 'month'\"\n                                      [events$]=\"_events$\">\n    \n</upbytes-angular-material-calendar-month-view>\n\n<upbytes-angular-material-calendar-week-view  *ngIf=\"_view!.view === 'week'\"\n                                      [events$]=\"_events$\">\n    \n</upbytes-angular-material-calendar-week-view>\n\n<upbytes-angular-material-calendar-day-view  *ngIf=\"_view!.view === 'day'\"\n                                     [events$]=\"_events$\">\n    \n</upbytes-angular-material-calendar-day-view> ","import { Injectable } from '@angular/core';\nimport { createReducer, on, ActionReducer } from '@ngrx/store';\nimport { month, week, day } from '../actions/calendar-view.action';\nimport { CalendarView } from '../../calendar-modal/calendar-view/calendar-view';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class CalendarViewReducerService {\n\n    constructor(\n    ) { }\n\n    public getReducer(): ActionReducer<CalendarView> {\n        return createReducer(\n            { view: 'month' },\n            on(month, () => ({\n                view: 'month'\n            })),\n            on(week, () => ({\n                view: 'week'\n            })),\n            on(day, () => ({\n                view: 'day'\n            }))\n        );\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { createReducer, on, ActionReducer } from '@ngrx/store';\nimport { increment, decrement, reset, goto } from '../actions/date.action';\nimport { CalendarDate } from '../../calendar-modal/calendar-date/calendar-date';\nimport { DateService } from '../../service/date.service';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class DateReducerService {\n\n    constructor(\n        private _dateService: DateService\n    ) { }\n\n    public getReducer(): ActionReducer<CalendarDate> {\n        return createReducer(\n            this._dateService.today(),\n            on(increment, (state, _view) => {\n                if (_view.view === 'month') {\n                    return this._dateService.addCalendarMonths(state, 1);\n                } else if (_view.view === 'week') {\n                    return this._dateService.addCalendarWeeks(state, 1);\n                } else if (_view.view === 'day') {\n                    return this._dateService.addCalendarDays(state, 1);\n                } else {\n                    return this._dateService.addCalendarDays(state, 1);\n                }\n\n            }),\n            on(decrement, (state, _view) => {\n                if (_view.view === 'month') {\n                    return this._dateService.subtractCalendarMonths(state, 1);\n                } else if (_view.view === 'week') {\n                    return this._dateService.subtractCalendarWeeks(state, 1);\n                } else if (_view.view === 'day') {\n                    return this._dateService.subtractCalendarDays(state, 1);\n                } else {\n                    return this._dateService.subtractCalendarDays(state, 1);\n                }\n            }),\n            on(reset, () => this._dateService.today()),\n            on(goto, (state, _gotoDate) => this._dateService.setDate(\n                _gotoDate.current.day, _gotoDate.current.month,\n                _gotoDate.current.year, state))\n        );\n    }\n\n}\n","import { NgModule } from '@angular/core';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { BrowserAnimationsModule } from  '@angular/platform-browser/animations';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatListModule } from  '@angular/material/list';\nimport { LayoutModule } from '@angular/cdk/layout';\n\n@NgModule({\n  exports: [\n    A11yModule,\n    BrowserAnimationsModule,\n    DragDropModule,\n    MatButtonModule,\n    MatCardModule,\n    MatDialogModule,\n    MatGridListModule,\n    MatIconModule,\n    MatListModule,\n    LayoutModule\n  ]\n})\nexport class MaterialModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport { CalendarHoursService } from '../service/calendar-hours.service';\nimport {\n  CalendarEventViewComponent\n} from './calendar-event-view/calendar-event-view.component';\nimport {\n  CalendarEventFullViewComponent\n} from './calendar-event-full-view/calendar-event-full-view.component';\nimport {\n  CalendarEventDialog\n} from './calendar-event-dialog-view/calendar-event-dialog.component';\n@NgModule({\n  declarations: [\n    CalendarEventViewComponent,\n    CalendarEventFullViewComponent,\n    CalendarEventDialog\n  ],\n  imports: [\n    CommonModule,\n    MaterialModule\n  ],\n  exports: [\n    CalendarEventViewComponent,\n    CalendarEventFullViewComponent\n  ],\n  providers: [\n    CalendarHoursService\n  ]\n})\nexport class CalendarEventViewModule { }\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport {\n  CalendarEventViewModule\n} from '../calendar-events-module/calendar-event-view.module';\nimport {\n  CalendarMonthViewGridComponent\n} from './calendar-month-view-grid/calendar-month-view-grid.component';\nimport {\n  CalendarMonthViewComponent\n } from './calendar-month-view/calendar-month-view.component';\nimport {\n  CalendarMonthViewGridHeaderComponent\n} from './calendar-month-view-grid-header/calendar-month-view-grid-header.component';\n\nimport { MonthViewService } from './service/calendar-month-view.service';\n\n@NgModule({\n    declarations: [\n        CalendarMonthViewComponent,\n        CalendarMonthViewGridHeaderComponent,\n        CalendarMonthViewGridComponent\n    ],\n    imports: [\n      CommonModule,\n      MaterialModule,\n      CalendarEventViewModule\n    ],\n    exports: [\n      CalendarMonthViewComponent\n    ],\n    providers: [ MonthViewService\n    ]\n  })\nexport class CalendarMonthViewModule{}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport { CalendarHeaderComponent } from './calendar-header/calendar-header.component';\nimport {\n    CalendarHeaderLabelComponent\n} from './calendar-header/calendar-label/calendar-label.component';\nimport {\n    CalendarNavigatorComponent\n } from './calendar-header/calendar-navigator/calendar-navigator.component';\n import {\n     CalendarHeaderToggelComponent\n } from './calendar-header/calendar-toggel/calendar-toggel.component';\n import { DateService } from '../service/date.service';\n\n@NgModule({\n    declarations: [\n        CalendarHeaderComponent,\n        CalendarNavigatorComponent,\n        CalendarHeaderLabelComponent,\n        CalendarHeaderToggelComponent\n    ],\n    imports: [\n      CommonModule,\n      MaterialModule\n    ],\n    exports: [\n        CalendarHeaderComponent\n    ],\n    providers: [\n        DateService\n    ]\n  })\nexport class CalendarHeaderModule{}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport {\n    CalendarHourIndicatorComponent\n} from './calendar-hour-indicator/calendar-hour-indicator.component';\nimport { CalendarHourIndicatorService } from '../service/calendar-hour-indicator.service';\n\n@NgModule({\n    declarations: [\n        CalendarHourIndicatorComponent\n    ],\n    imports: [\n      CommonModule,\n      MaterialModule\n    ],\n    exports: [\n        CalendarHourIndicatorComponent\n    ],\n    providers: [\n        CalendarHourIndicatorService\n    ]\n  })\nexport class CalendarHourIndicatorModule{}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport { CalendarHoursService } from '../service/calendar-hours.service';\nimport { CalendarWeekViewComponent } from './calendar-week-view/calendar-week-view.component';\nimport {\n  CalendarWeekViewGridComponent\n} from './calendar-week-view-grid/calendar-week-view-grid.component';\nimport {\n  CalendarWeekViewHeaderComponent\n} from './calendar-week-view-header/calendar-week-view-header.component';\nimport {\n  CalendarEventViewModule\n} from '../calendar-events-module/calendar-event-view.module';\nimport {\n  CalendarHourIndicatorModule\n} from '../calendar-hour-indicator-module/calendar-hour-indicator.module';\n\n@NgModule({\n    declarations: [\n      CalendarWeekViewComponent,\n      CalendarWeekViewGridComponent,\n      CalendarWeekViewHeaderComponent\n    ],\n    imports: [\n      CommonModule,\n      MaterialModule,\n      CalendarEventViewModule,\n      CalendarHourIndicatorModule\n    ],\n    exports: [\n      CalendarWeekViewComponent\n    ],\n    providers: [\n      CalendarHoursService\n    ]\n  })\nexport class CalendarWeekViewModule{}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material-modules/material.module';\nimport {\n  CalendarEventViewModule\n} from '../calendar-events-module/calendar-event-view.module';\nimport { CalendarHoursService } from '../service/calendar-hours.service';\nimport {\n  CalendarDayViewComponent\n} from './calendar-day-view/calendar-day-view.component';\nimport {\n  CalendarDayViewHeaderComponent\n} from './calendar-day-header/calendar-day-view-header.component';\nimport {\n  CalendarDayViewGridComponent\n} from './calendar-day-view-grid/calendar-day-view-grid.component';\nimport {\n  CalendarHourIndicatorModule\n} from '../calendar-hour-indicator-module/calendar-hour-indicator.module';\n\n@NgModule({\n  declarations: [\n    CalendarDayViewComponent,\n    CalendarDayViewHeaderComponent,\n    CalendarDayViewGridComponent\n  ],\n  imports: [\n    CommonModule,\n    MaterialModule,\n    CalendarEventViewModule,\n    CalendarHourIndicatorModule\n  ],\n  exports: [\n    CalendarDayViewComponent\n  ],\n  providers: [\n    CalendarHoursService\n  ]\n})\nexport class CalendarDayViewModule { }\n","import {\n  NgModule,\n  InjectionToken,\n  inject,\n  ModuleWithProviders,\n  Optional,\n  SkipSelf\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';\nimport {\n  LuxonDateModule,\n  LuxonDateAdapter,\n  MAT_LUXON_DATE_ADAPTER_OPTIONS\n} from '@angular/material-luxon-adapter';\nimport { StoreModule, ActionReducerMap, createFeature } from '@ngrx/store';\nimport { CalendarViewReducerService } from './store/reducer/calendar-view-reducer.service';\nimport { CalendarViewPortService } from './service/calendar-view-port.service';\nimport { DateService } from './service/date.service';\nimport { DateReducerService } from './store/reducer/date-reducer.service';\nimport { CalendarMonthViewModule } from './calendar-month-view-module/calendar-month-view.module';\nimport { CalendarHeaderModule } from './calendar-header-module/calendar-header.module';\nimport { CalendarWeekViewModule } from './calendar-week-view-module/calendar-week-view.module';\nimport { CalendarEventViewModule } from './calendar-events-module/calendar-event-view.module';\nimport { MaterialModule } from './material-modules/material.module';\nimport { CalendarDayViewModule } from './calendar-day-module/calendar-day-view.module';\nimport { AngularMaterialCalendarComponent } from './angular-material-calendar.component';\nimport { CalendarState } from './state/calendar-state';\nimport {\n  CalendarHourIndicatorModule\n} from './calendar-hour-indicator-module/calendar-hour-indicator.module';\nimport { CalendarConfig } from './calendar-modal/calendar-config/calendar-config';\n\nexport const CALENDAR_REDUCER_TOKEN = new InjectionToken<ActionReducerMap<CalendarState>>\n  ('Registered Upbyets Calendar Reducers', {\n    factory: () => {\n      const viewReducer = inject(CalendarViewReducerService).getReducer();\n      const dateReducer = inject(DateReducerService).getReducer();\n      const reducers: ActionReducerMap<CalendarState> = {\n        _date: dateReducer,\n        _view: viewReducer\n      };\n      return reducers;\n    }\n  });\n\n  @NgModule({\n  declarations: [\n    AngularMaterialCalendarComponent\n  ],\n  imports: [\n    LuxonDateModule,\n    //StoreModule.forRoot(CALENDAR_REDUCER_TOKEN),\n    StoreModule.forFeature(\"upbytes_calendar\", CALENDAR_REDUCER_TOKEN),\n    CommonModule,\n    MaterialModule,\n    CalendarMonthViewModule,\n    CalendarWeekViewModule,\n    CalendarHeaderModule,\n    CalendarDayViewModule,\n    CalendarEventViewModule,\n    CalendarHourIndicatorModule\n  ],\n  exports: [\n    AngularMaterialCalendarComponent\n  ],\n  providers: [\n    DateService,\n    DateReducerService,\n    CalendarViewReducerService,\n    CalendarViewPortService,\n    {\n      provide: DateAdapter,\n      useClass: LuxonDateAdapter,\n      deps: [MAT_DATE_LOCALE, MAT_LUXON_DATE_ADAPTER_OPTIONS]\n    }\n  ]\n})\nexport class AngularMaterialCalendarModule {\n  constructor(@Optional() @SkipSelf() parentModule?: AngularMaterialCalendarModule) {\n    if (parentModule) {\n      throw new Error(\n        'AngularMaterialCalendarModule is already loaded. Import it in the other module only');\n    }\n  }\n\n  static forRoot(config: CalendarConfig): ModuleWithProviders<AngularMaterialCalendarModule> {\n    return {\n      ngModule: AngularMaterialCalendarModule,\n      providers: [\n        { provide: CalendarConfig, useValue: config }\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of angular-material-calendar\n */\n\nexport * from './lib/angular-material-calendar.component';\nexport * from './lib/angular-material-calendar.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["TOP"],"mappings":"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"}