@pieninck/ionic2-calendar 3.0.1 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"pieninck-ionic2-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/monthview.ts","../../src/monthview.html","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/weekview.html","../../src/dayview.ts","../../src/dayview.html","../../src/calendar.interface.ts","../../src/calendar.ts","../../src/calendar.html","../../src/calendar.module.ts","../../src/pieninck-ionic2-calendar.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\r\nimport {Observable, Subject} from 'rxjs';\r\n\r\nimport {ICalendarComponent, IView, CalendarMode, QueryMode} from './calendar.interface';\r\n\r\n@Injectable()\r\nexport class CalendarService {\r\n queryMode!: QueryMode;\r\n currentDateChangedFromParent$: Observable<Date>;\r\n currentDateChangedFromChildren$: Observable<Date>;\r\n eventSourceChanged$: Observable<void>;\r\n slideChanged$: Observable<number>;\r\n slideUpdated$: Observable<void>;\r\n\r\n private _currentDate: Date = new Date();\r\n private currentDateChangedFromParent = new Subject<Date>();\r\n private currentDateChangedFromChildren = new Subject<Date>();\r\n private eventSourceChanged = new Subject<void>();\r\n private slideChanged = new Subject<number>();\r\n private slideUpdated = new Subject<void>();\r\n\r\n constructor() {\r\n this.currentDateChangedFromParent$ = this.currentDateChangedFromParent.asObservable();\r\n this.currentDateChangedFromChildren$ = this.currentDateChangedFromChildren.asObservable();\r\n this.eventSourceChanged$ = this.eventSourceChanged.asObservable();\r\n this.slideChanged$ = this.slideChanged.asObservable();\r\n this.slideUpdated$ = this.slideUpdated.asObservable();\r\n }\r\n\r\n setCurrentDate(val: Date, fromParent: boolean = false) {\r\n this._currentDate = new Date(val);\r\n if (fromParent) {\r\n this.currentDateChangedFromParent.next(val);\r\n } else {\r\n this.currentDateChangedFromChildren.next(val);\r\n }\r\n }\r\n\r\n get currentDate(): Date {\r\n return this._currentDate;\r\n }\r\n\r\n rangeChanged(component: ICalendarComponent) {\r\n if (this.queryMode === 'local') {\r\n if (component.eventSource && component.onDataLoaded) {\r\n component.onDataLoaded();\r\n }\r\n } else if (this.queryMode === 'remote') {\r\n let rangeStart = new Date(component.range.startTime.getTime()),\r\n rangeEnd = new Date(component.range.endTime.getTime());\r\n\r\n rangeStart.setHours(0);\r\n if (rangeStart.getHours() === 23) {\r\n rangeStart.setTime(rangeStart.getTime() + 3600000);\r\n }\r\n\r\n rangeEnd.setHours(0);\r\n if (rangeEnd.getHours() === 23) {\r\n rangeEnd.setTime(rangeEnd.getTime() + 3600000);\r\n }\r\n component.onRangeChanged.emit({\r\n startTime: rangeStart,\r\n endTime: rangeEnd\r\n });\r\n }\r\n }\r\n\r\n private getStep(mode: CalendarMode): { years: number; months: number; days: number; } {\r\n switch (mode) {\r\n case 'month':\r\n return {\r\n years: 0,\r\n months: 1,\r\n days: 0\r\n };\r\n case 'week':\r\n return {\r\n years: 0,\r\n months: 0,\r\n days: 7\r\n };\r\n case 'day':\r\n return {\r\n years: 0,\r\n months: 0,\r\n days: 1\r\n };\r\n }\r\n }\r\n\r\n getAdjacentCalendarDate(mode: CalendarMode, direction: number): Date {\r\n let calculateCalendarDate = this.currentDate;\r\n const step = this.getStep(mode),\r\n year = calculateCalendarDate.getFullYear() + direction * step.years,\r\n month = calculateCalendarDate.getMonth() + direction * step.months,\r\n date = calculateCalendarDate.getDate() + direction * step.days;\r\n\r\n calculateCalendarDate = new Date(year, month, date, 12, 0, 0);\r\n\r\n if (mode === 'month') {\r\n const firstDayInNextMonth = new Date(year, month + 1, 1, 12, 0, 0);\r\n if (firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()) {\r\n calculateCalendarDate = new Date(firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000);\r\n }\r\n }\r\n return calculateCalendarDate;\r\n }\r\n\r\n getAdjacentViewStartTime(component: ICalendarComponent, direction: number): Date {\r\n let adjacentCalendarDate = this.getAdjacentCalendarDate(component.mode, direction);\r\n return component.getRange(adjacentCalendarDate).startTime;\r\n }\r\n\r\n populateAdjacentViews(component: ICalendarComponent) {\r\n let currentViewStartDate: Date,\r\n currentViewData: IView[],\r\n toUpdateViewIndex: number,\r\n currentViewIndex = component.currentViewIndex;\r\n\r\n if (component.direction === 1) {\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n } else if (component.direction === -1) {\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n } else {\r\n if (!component.views) {\r\n currentViewData = [];\r\n currentViewStartDate = component.range.startTime;\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n currentViewData.push(component.getViewData(currentViewStartDate));\r\n component.views = currentViewData;\r\n } else {\r\n currentViewStartDate = component.range.startTime;\r\n component.views[currentViewIndex] = component.getViewData(currentViewStartDate);\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\r\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\r\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\r\n component.views[toUpdateViewIndex] = component.getViewData(currentViewStartDate);\r\n }\r\n }\r\n }\r\n\r\n loadEvents() {\r\n this.eventSourceChanged.next();\r\n }\r\n\r\n slide(direction: number) {\r\n this.slideChanged.next(direction);\r\n }\r\n\r\n update() {\r\n this.slideUpdated.next();\r\n }\r\n}\r\n","import {\r\n Component,\r\n OnInit,\r\n OnChanges,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n TemplateRef,\r\n OnDestroy,\r\n AfterViewInit,\r\n NgZone,\r\n ViewChild,\r\n ElementRef\r\n} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {DatePipe} from '@angular/common';\r\nimport {Swiper} from 'swiper';\r\nimport {SwiperOptions} from 'swiper/types';\r\n\r\nimport {ICalendarComponent, IEvent, IMonthView, IMonthViewRow, ITimeSelected, IRange, CalendarMode, IDateFormatter, IMonthViewDisplayEventTemplateContext, IMonthViewEventDetailTemplateContext} from './calendar.interface';\r\nimport {CalendarService} from './calendar.service';\r\n\r\n@Component({\r\n selector: 'monthview',\r\n templateUrl: './monthview.html',\r\n styleUrls: ['./monthview.css'],\r\n standalone: false,\r\n})\r\nexport class MonthViewComponent implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit {\r\n\r\n constructor(private calendarService: CalendarService, private zone:NgZone) {\r\n } \r\n\r\n private slider!: Swiper;\r\n @ViewChild('monthViewSwiper') swiperElement?: ElementRef;\r\n\r\n @Input() monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewEventDetailTemplate!: TemplateRef<IMonthViewEventDetailTemplateContext>;\r\n\r\n @Input() formatDay?: string;\r\n @Input() formatDayHeader?: string;\r\n @Input() formatMonthTitle?: string;\r\n @Input() eventSource!: IEvent[];\r\n @Input() startingDayMonth!: number;\r\n @Input() showEventDetail = true;\r\n @Input() noEventsLabel?: string;\r\n @Input() autoSelect = true;\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() lockSwipeToPrev?: boolean = false;\r\n @Input() lockSwipeToNext?: boolean = false;\r\n @Input() lockSwipes?: boolean = false;\r\n @Input() sliderOptions?: SwiperOptions;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>();\r\n\r\n public views: IMonthView[] = [];\r\n public currentViewIndex = 0;\r\n public selectedDate?: IMonthViewRow;\r\n public range!: IRange;\r\n public mode: CalendarMode = 'month';\r\n public direction = 0;\r\n\r\n private moveOnSelected = false;\r\n private inited = false;\r\n\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n private formatDayLabel!: (date: Date) => string;\r\n private formatDayHeaderLabel!: (date: Date) => string;\r\n private formatTitle!: (date: Date) => string;\r\n\r\n static getDates(startDate: Date, n: number): Date[] {\r\n const dates = new Array(n),\r\n current = new Date(startDate.getTime());\r\n let i = 0;\r\n while (i < n) {\r\n dates[i++] = new Date(current.getTime());\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewDay) {\r\n this.formatDayLabel = this.dateFormatter.formatMonthViewDay;\r\n } else {\r\n const dayLabelDatePipe = new DatePipe('en-US');\r\n this.formatDayLabel = function(date: Date) {\r\n return dayLabelDatePipe.transform(date, this.formatDay)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewDayHeader) {\r\n this.formatDayHeaderLabel = this.dateFormatter.formatMonthViewDayHeader;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatDayHeaderLabel = function(date: Date) {\r\n return datePipe.transform(date, this.formatDayHeader)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatMonthViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatMonthViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function(date: Date) {\r\n return datePipe.transform(date, this.formatMonthTitle)||'';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\r\n this.refreshView();\r\n });\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToNext) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function() {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function() {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if(this.dir == 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n setSwiperInstance(swiper: any) {\r\n this.slider = swiper;\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n\r\n this.direction = direction;\r\n if (!this.moveOnSelected) {\r\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacentDate);\r\n }\r\n this.refreshView();\r\n this.direction = 0;\r\n this.moveOnSelected = false;\r\n }\r\n\r\n createDateObject(date: Date): IMonthViewRow {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(date);\r\n }\r\n\r\n return {\r\n date,\r\n events: [],\r\n label: this.formatDayLabel(date),\r\n secondary: false,\r\n disabled\r\n };\r\n }\r\n\r\n getViewData(startTime: Date): IMonthView {\r\n const startDate = startTime,\r\n date = startDate.getDate(),\r\n month = (startDate.getMonth() + (date !== 1 ? 1 : 0)) % 12;\r\n\r\n const dates = MonthViewComponent.getDates(startDate, 42);\r\n const days: IMonthViewRow[] = [];\r\n for (let i = 0; i < 42; i++) {\r\n const dateObject = this.createDateObject(dates[i]);\r\n dateObject.secondary = dates[i].getMonth() !== month;\r\n days[i] = dateObject;\r\n }\r\n\r\n const dayHeaders: string[] = [];\r\n for (let i = 0; i < 7; i++) {\r\n dayHeaders.push(this.formatDayHeaderLabel(days[i].date));\r\n }\r\n return {\r\n dates: days,\r\n dayHeaders\r\n };\r\n }\r\n\r\n getHighlightClass(date: IMonthViewRow): string {\r\n let className = '';\r\n\r\n if (date.hasEvent) {\r\n if (date.secondary) {\r\n className = 'monthview-secondary-with-event';\r\n } else {\r\n className = 'monthview-primary-with-event';\r\n }\r\n }\r\n\r\n if (date.selected) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-selected';\r\n }\r\n\r\n if (date.current) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-current';\r\n }\r\n\r\n if (date.secondary) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'text-muted';\r\n }\r\n\r\n if (date.disabled) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'monthview-disabled';\r\n }\r\n return className;\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n firstDayOfMonth = new Date(year, month, 1, 12, 0, 0), // set hour to 12 to avoid DST problem\r\n\r\n difference = this.startingDayMonth - firstDayOfMonth.getDay(),\r\n numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : -difference,\r\n startDate = new Date(firstDayOfMonth.getTime());\r\n\r\n if (numDisplayedFromPreviousMonth > 0) {\r\n startDate.setDate(-numDisplayedFromPreviousMonth + 1);\r\n }\r\n\r\n const endDate = new Date(startDate.getTime());\r\n endDate.setDate(endDate.getDate() + 42);\r\n\r\n return {\r\n startTime: startDate,\r\n endTime: endDate\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const range = this.range,\r\n eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = range.startTime,\r\n endTime = range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n dates = this.views[currentViewIndex].dates,\r\n oneDay = 86400000,\r\n eps = 0.0006;\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].hasEvent) {\r\n dates[r].hasEvent = false;\r\n dates[r].events = [];\r\n }\r\n }\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i],\r\n eventStartTime = event.startTime,\r\n eventEndTime = event.endTime;\r\n\r\n let eventUTCStartTime: number,\r\n eventUTCEndTime: number;\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\r\n eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime) {\r\n continue;\r\n }\r\n\r\n let timeDifferenceStart: number,\r\n timeDifferenceEnd: number;\r\n\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneDay;\r\n }\r\n\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = (utcEndTime - utcStartTime) / oneDay;\r\n } else {\r\n timeDifferenceEnd = (eventUTCEndTime - utcStartTime) / oneDay;\r\n }\r\n\r\n let index = Math.floor(timeDifferenceStart);\r\n const endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n while (index < endIndex) {\r\n dates[index].hasEvent = true;\r\n let eventSet = dates[index].events;\r\n if (eventSet) {\r\n eventSet.push(event);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(event);\r\n dates[index].events = eventSet;\r\n }\r\n index += 1;\r\n }\r\n }\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].hasEvent) {\r\n dates[r].events.sort(this.compareEvent);\r\n }\r\n }\r\n\r\n if (this.autoSelect) {\r\n let findSelected = false;\r\n for (let r = 0; r < 42; r += 1) {\r\n if (dates[r].selected) {\r\n this.selectedDate = dates[r];\r\n findSelected = true;\r\n break;\r\n }\r\n }\r\n\r\n if (findSelected && this.selectedDate) {\r\n this.onTimeSelected.emit({\r\n selectedTime: this.selectedDate.date,\r\n events: this.selectedDate.events,\r\n disabled: this.selectedDate.disabled\r\n });\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n this.calendarService.populateAdjacentViews(this);\r\n this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const currentViewStartDate = this.range.startTime,\r\n date = currentViewStartDate.getDate(),\r\n month = (currentViewStartDate.getMonth() + (date !== 1 ? 1 : 0)) % 12,\r\n year = currentViewStartDate.getFullYear() + (date !== 1 && month === 0 ? 1 : 0),\r\n headerDate = new Date(year, month, 1, 12, 0, 0, 0);\r\n return this.formatTitle(headerDate);\r\n }\r\n\r\n private compareEvent(event1: IEvent, event2: IEvent): number {\r\n if (event1.allDay) {\r\n return 1;\r\n } else if (event2.allDay) {\r\n return -1;\r\n } else {\r\n return (event1.startTime.getTime() - event2.startTime.getTime());\r\n }\r\n }\r\n\r\n select(viewDate: IMonthViewRow) {\r\n if (!this.views) {\r\n return;\r\n }\r\n\r\n const selectedDate = viewDate.date,\r\n events = viewDate.events;\r\n\r\n if (!viewDate.disabled) {\r\n const dates = this.views[this.currentViewIndex].dates,\r\n currentCalendarDate = this.calendarService.currentDate,\r\n currentMonth = currentCalendarDate.getMonth(),\r\n currentYear = currentCalendarDate.getFullYear(),\r\n selectedMonth = selectedDate.getMonth(),\r\n selectedYear = selectedDate.getFullYear();\r\n let direction = 0;\r\n\r\n if (currentYear === selectedYear) {\r\n if (currentMonth !== selectedMonth) {\r\n direction = currentMonth < selectedMonth ? 1 : -1;\r\n }\r\n } else {\r\n direction = currentYear < selectedYear ? 1 : -1;\r\n }\r\n\r\n this.calendarService.setCurrentDate(selectedDate);\r\n if (direction === 0) {\r\n const currentViewStartDate = this.range.startTime,\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 42) {\r\n dates[selectedDayDifference].selected = true;\r\n this.selectedDate = dates[selectedDayDifference];\r\n }\r\n } else {\r\n this.moveOnSelected = true;\r\n this.slideView(direction);\r\n }\r\n }\r\n\r\n this.onTimeSelected.emit({selectedTime: selectedDate, events, disabled: viewDate.disabled});\r\n }\r\n\r\n slideView(direction: number) {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n }\r\n\r\n updateCurrentView(currentViewStartDate: Date, view: IMonthView) {\r\n const currentCalendarDate = this.calendarService.currentDate,\r\n today = new Date(),\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\r\n currentDayDifference = Math.round((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 42; r += 1) {\r\n view.dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 42 && !view.dates[selectedDayDifference].disabled && (this.autoSelect || this.moveOnSelected)) {\r\n view.dates[selectedDayDifference].selected = true;\r\n this.selectedDate = view.dates[selectedDayDifference];\r\n } else {\r\n this.selectedDate = undefined;\r\n }\r\n\r\n if (currentDayDifference >= 0 && currentDayDifference < 42) {\r\n view.dates[currentDayDifference].current = true;\r\n }\r\n }\r\n\r\n eventSelected(event: IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n}\r\n","<div class=\"swiper monthview-swiper\" #monthViewSwiper>\r\n <div class=\"swiper-wrapper\">\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"0===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[0].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"0!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[0].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"1===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[1].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"1!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[1].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"swiper-slide\">\r\n <table *ngIf=\"2===currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\" tappable (click)=\"select(views[2].dates[row*7+col])\"\r\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <table *ngIf=\"2!==currentViewIndex\" class=\"table table-bordered table-fixed monthview-datetable\">\r\n <thead>\r\n <tr class=\"text-center\">\r\n <th *ngFor=\"let dayHeader of views[2].dayHeaders\">\r\n <small>{{dayHeader}}</small>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of [0,1,2,3,4,5]\">\r\n <td *ngFor=\"let col of [0,1,2,3,4,5,6]\">\r\n <ng-template [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\r\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\">\r\n </ng-template>\r\n </td>\r\n <tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <ng-template [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\r\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\">\r\n </ng-template>\r\n</div>","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ElementRef,\r\n SimpleChanges,\r\n OnChanges,\r\n AfterViewInit,\r\n OnDestroy,\r\n ViewEncapsulation,\r\n NgZone\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'init-position-scroll',\r\n template: `\r\n <div class=\"scroll-content\" style=\"height:100%\">\r\n <ng-content></ng-content>\r\n </div>\r\n `,\r\n styles: [`\r\n .scroll-content {\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n } \r\n `],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class initPositionScrollComponent implements OnChanges, AfterViewInit, OnDestroy {\r\n @Input() initPosition!:number;\r\n @Input() emitEvent?:boolean;\r\n @Output() onScroll = new EventEmitter<number>();\r\n\r\n private element:ElementRef;\r\n private scrollContent!:HTMLElement;\r\n private handler!:()=>void;\r\n private listenerAttached:boolean = false;\r\n\r\n constructor(el:ElementRef, private ngZone: NgZone) {\r\n this.element = el;\r\n }\r\n\r\n ngOnChanges(changes:SimpleChanges) {\r\n let initPosition = changes['initPosition'];\r\n if (initPosition && initPosition.currentValue !== undefined && this.scrollContent && initPosition.currentValue != this.scrollContent.scrollTop) {\r\n const me =this;\r\n this.ngZone.run(() => {\r\n me.scrollContent.scrollTop = initPosition.currentValue;\r\n });\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n const scrollContent = this.scrollContent = this.element.nativeElement.querySelector('.scroll-content');\r\n if (this.initPosition !== undefined) {\r\n scrollContent.scrollTop = this.initPosition;\r\n }\r\n\r\n if (this.emitEvent && !this.listenerAttached) {\r\n let onScroll = this.onScroll;\r\n let me = this;\r\n this.handler = function () {\r\n if(me.initPosition != scrollContent.scrollTop) {\r\n onScroll.emit(scrollContent.scrollTop);\r\n }\r\n };\r\n this.listenerAttached = true;\r\n scrollContent.addEventListener('scroll', this.handler);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.listenerAttached) {\r\n this.scrollContent.removeEventListener('scroll', this.handler);\r\n this.listenerAttached = false;\r\n }\r\n }\r\n}\r\n","import {DatePipe} from '@angular/common';\r\nimport {\r\n Component,\r\n OnInit,\r\n OnChanges,\r\n HostBinding,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n SimpleChanges,\r\n ViewEncapsulation,\r\n TemplateRef,\r\n ElementRef,\r\n OnDestroy, \r\n AfterViewInit,\r\n NgZone,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {Subscription} from 'rxjs';\r\nimport {Swiper} from 'swiper';\r\nimport {SwiperOptions} from 'swiper/types';\r\n\r\nimport type {\r\n ICalendarComponent,\r\n IDisplayEvent,\r\n IEvent,\r\n ITimeSelected,\r\n IRange,\r\n IWeekView,\r\n IWeekViewRow,\r\n IWeekViewDateRow,\r\n CalendarMode,\r\n IDateFormatter,\r\n IDisplayWeekViewHeader,\r\n IDisplayAllDayEvent,\r\n IWeekViewAllDayEventSectionTemplateContext,\r\n IWeekViewNormalEventSectionTemplateContext\r\n} from './calendar.interface';\r\nimport {CalendarService} from './calendar.service';\r\n\r\n@Component({\r\n selector: 'weekview',\r\n templateUrl: './weekview.html',\r\n styleUrls: ['./weekview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class WeekViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n\r\n constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {\r\n }\r\n\r\n private slider!: Swiper;\r\n @ViewChild('weekViewSwiper') swiperElement?: ElementRef;\r\n\r\n @HostBinding('class.weekview') class = true;\r\n\r\n @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\r\n @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\r\n @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\r\n @Input() weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewInactiveNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n\r\n @Input() formatWeekTitle?: string;\r\n @Input() formatWeekViewDayHeader?: string;\r\n @Input() formatHourColumn?: string;\r\n @Input() startingDayWeek!: number;\r\n @Input() allDayLabel?: string;\r\n @Input() hourParts!: number;\r\n @Input() eventSource!: IEvent[];\r\n @Input() autoSelect = true;\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() scrollToHour = 0;\r\n @Input() preserveScrollPosition?: boolean;\r\n @Input() lockSwipeToPrev?: boolean;\r\n @Input() lockSwipeToNext?: boolean;\r\n @Input() lockSwipes?: boolean;\r\n @Input() startHour!: number;\r\n @Input() endHour!: number;\r\n @Input() sliderOptions?: SwiperOptions;\r\n @Input() hourSegments!: number;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>();\r\n\r\n public readonly sliderIndexList = [0, 1, 2];\r\n public views: IWeekView[] = [];\r\n public currentViewIndex = 0;\r\n public range!: IRange;\r\n public direction = 0;\r\n public mode: CalendarMode = 'week';\r\n\r\n private inited = false;\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n public hourColumnLabels!: string[];\r\n public initScrollPosition!: number;\r\n private formatDayHeader!: (date: Date) => string;\r\n private formatTitle!: (date: Date) => string;\r\n private formatHourColumnLabel!: (date: Date) => string;\r\n private hourRange!: number;\r\n\r\n static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IWeekViewRow[][] {\r\n const times: IWeekViewRow[][] = [],\r\n currentHour = 0,\r\n currentDate = startTime.getDate();\r\n let hourStep,\r\n minStep;\r\n\r\n if (timeInterval < 1) {\r\n hourStep = Math.floor(1 / timeInterval);\r\n minStep = 60;\r\n } else {\r\n hourStep = 1;\r\n minStep = Math.floor(60 / timeInterval);\r\n }\r\n\r\n for (let hour = startHour; hour < endHour; hour += hourStep) {\r\n for (let interval = 0; interval < 60; interval += minStep) {\r\n const row: IWeekViewRow[] = [];\r\n for (let day = 0; day < 7; day += 1) {\r\n const time = new Date(startTime.getTime());\r\n time.setHours(currentHour + hour, interval);\r\n time.setDate(currentDate + day);\r\n row.push({\r\n events: [],\r\n time\r\n });\r\n }\r\n times.push(row);\r\n }\r\n }\r\n return times;\r\n }\r\n\r\n static getDates(startTime: Date, n: number): IWeekViewDateRow[] {\r\n const dates = new Array(n),\r\n current = new Date(startTime.getTime());\r\n let i = 0;\r\n while (i < n) {\r\n dates[i++] = {\r\n date: new Date(current.getTime()),\r\n events: [],\r\n dayHeader: ''\r\n };\r\n current.setDate(current.getDate() + 1);\r\n }\r\n return dates;\r\n }\r\n\r\n private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent): number {\r\n return eventA.startOffset - eventB.startOffset;\r\n }\r\n\r\n private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\r\n const totalSize = size * hourParts,\r\n cells = new Array(totalSize);\r\n\r\n // sort by position in descending order, the right most columns should be calculated first\r\n orderedEvents.sort((eventA, eventB) => {\r\n return eventB.position - eventA.position;\r\n });\r\n for (let i = 0; i < totalSize; i += 1) {\r\n cells[i] = {\r\n calculated: false,\r\n events: []\r\n };\r\n }\r\n const len = orderedEvents.length;\r\n for (let i = 0; i < len; i += 1) {\r\n const event = orderedEvents[i];\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n cells[index].events.push(event);\r\n index += 1;\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < len) {\r\n let event:IDisplayEvent|undefined = orderedEvents[i];\r\n if (!event.overlapNumber) {\r\n const overlapNumber = event.position + 1;\r\n event.overlapNumber = overlapNumber;\r\n const eventQueue = [event];\r\n while (event = eventQueue.shift()) { \r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n if (!cells[index].calculated) {\r\n cells[index].calculated = true;\r\n if (cells[index].events) {\r\n const eventCountInCell = cells[index].events.length;\r\n for (let j = 0; j < eventCountInCell; j += 1) {\r\n const currentEventInCell = cells[index].events[j];\r\n if (!currentEventInCell.overlapNumber) {\r\n currentEventInCell.overlapNumber = overlapNumber;\r\n eventQueue.push(currentEventInCell);\r\n }\r\n }\r\n }\r\n }\r\n index += 1;\r\n }\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewDayHeader) {\r\n this.formatDayHeader = this.dateFormatter.formatWeekViewDayHeader;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatDayHeader = function (date: Date) {\r\n return datePipe.transform(date, this.formatWeekViewDayHeader)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatWeekViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function (date: Date) {\r\n return datePipe.transform(date, this.formatWeekTitle)||'';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatWeekViewHourColumn) {\r\n this.formatHourColumnLabel = this.dateFormatter.formatWeekViewHourColumn;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatHourColumnLabel = function (date: Date) {\r\n return datePipe.transform(date, this.formatHourColumn)||'';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(currentDate => {\r\n this.refreshView();\r\n });\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function() {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function() {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if(this.dir === 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n\r\n if (this.scrollToHour > 0) {\r\n const hourColumns = this.elm.nativeElement.querySelector('.weekview-normal-event-container').querySelectorAll('.calendar-hour-column');\r\n const me = this;\r\n setTimeout(() => {\r\n me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\r\n }, 50);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n\r\n if ((changes['startHour'] || changes['endHour']) && (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())) {\r\n this.views = [];\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n this.direction = 0;\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n this.direction = direction;\r\n const adjacent = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacent);\r\n this.refreshView();\r\n this.direction = 0;\r\n }\r\n\r\n private getHourColumnLabels(): string[] {\r\n const hourColumnLabels: string[] = [];\r\n for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\r\n // handle edge case for DST\r\n if (hour === 0 && this.views[0].rows[hour][0].time.getHours() !== this.startHour) {\r\n const time = new Date(this.views[0].rows[hour][0].time);\r\n time.setDate(time.getDate() + 1);\r\n time.setHours(this.startHour);\r\n hourColumnLabels.push(this.formatHourColumnLabel(time));\r\n } else {\r\n hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour][0].time));\r\n }\r\n }\r\n return hourColumnLabels;\r\n }\r\n\r\n getViewData(startTime: Date): IWeekView {\r\n const dates = WeekViewComponent.getDates(startTime, 7);\r\n for (let i = 0; i < 7; i++) {\r\n dates[i].dayHeader = this.formatDayHeader(dates[i].date);\r\n }\r\n\r\n return {\r\n rows: WeekViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\r\n dates\r\n };\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n date = currentDate.getDate(),\r\n day = currentDate.getDay();\r\n let difference = day - this.startingDayWeek;\r\n\r\n if (difference < 0) {\r\n difference += 7;\r\n }\r\n\r\n // set hour to 12 to avoid DST problem\r\n const firstDayOfWeek = new Date(year, month, date - difference, 12, 0, 0),\r\n endTime = new Date(year, month, date - difference + 7, 12, 0, 0);\r\n\r\n return {\r\n startTime: firstDayOfWeek,\r\n endTime\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = this.range.startTime,\r\n endTime = this.range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n rows = this.views[currentViewIndex].rows,\r\n dates = this.views[currentViewIndex].dates,\r\n oneHour = 3600000,\r\n oneDay = 86400000,\r\n // add allday eps\r\n eps = 0.016,\r\n rangeStartRowIndex = this.startHour * this.hourSegments,\r\n rangeEndRowIndex = this.endHour * this.hourSegments,\r\n allRows = 24 * this.hourSegments;\r\n let allDayEventInRange = false,\r\n normalEventInRange = false;\r\n\r\n for (let i = 0; i < 7; i += 1) {\r\n dates[i].events = [];\r\n dates[i].hasEvent = false;\r\n }\r\n\r\n for (let day = 0; day < 7; day += 1) {\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n rows[hour][day].events = [];\r\n }\r\n }\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i];\r\n const eventStartTime = event.startTime;\r\n const eventEndTime = event.endTime;\r\n\r\n let eventUTCStartTime: number,\r\n eventUTCEndTime: number;\r\n\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(eventStartTime.getFullYear(), eventStartTime.getMonth(), eventStartTime.getDate());\r\n eventUTCEndTime = Date.UTC(eventEndTime.getFullYear(), eventEndTime.getMonth(), eventEndTime.getDate() + 1);\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\r\n continue;\r\n }\r\n\r\n if (event.allDay) {\r\n allDayEventInRange = true;\r\n\r\n let allDayStartIndex: number;\r\n if (eventUTCStartTime <= utcStartTime) {\r\n allDayStartIndex = 0;\r\n } else {\r\n allDayStartIndex = Math.round((eventUTCStartTime - utcStartTime) / oneDay);\r\n }\r\n\r\n let allDayEndIndex: number;\r\n if (eventUTCEndTime >= utcEndTime) {\r\n allDayEndIndex = Math.round((utcEndTime - utcStartTime) / oneDay);\r\n } else {\r\n allDayEndIndex = Math.round((eventUTCEndTime - utcStartTime) / oneDay);\r\n }\r\n\r\n const displayAllDayEvent: IDisplayEvent = {\r\n event,\r\n startIndex: allDayStartIndex,\r\n endIndex: allDayEndIndex,\r\n startOffset: 0,\r\n endOffset: 0,\r\n position: 0\r\n };\r\n\r\n let eventSet = dates[allDayStartIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayAllDayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayAllDayEvent);\r\n dates[allDayStartIndex].events = eventSet;\r\n }\r\n dates[allDayStartIndex].hasEvent = true;\r\n } else {\r\n normalEventInRange = true;\r\n\r\n let timeDifferenceStart: number;\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart = (eventUTCStartTime - utcStartTime) / oneHour * this.hourSegments + (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let timeDifferenceEnd: number;\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = (utcEndTime - utcStartTime) / oneHour * this.hourSegments;\r\n } else {\r\n timeDifferenceEnd = (eventUTCEndTime - oneDay - utcStartTime) / oneHour * this.hourSegments + (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n const startIndex = Math.floor(timeDifferenceStart),\r\n endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n let startRowIndex = startIndex % allRows,\r\n dayIndex = Math.floor(startIndex / allRows),\r\n endOfDay = dayIndex * allRows,\r\n startOffset = 0,\r\n endOffset = 0;\r\n\r\n if (this.hourParts !== 1) {\r\n if (startRowIndex < rangeStartRowIndex) {\r\n startOffset = 0;\r\n } else {\r\n startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\r\n }\r\n }\r\n\r\n do {\r\n endOfDay += allRows;\r\n let endRowIndex: number;\r\n if (endOfDay < endIndex) {\r\n endRowIndex = allRows;\r\n } else {\r\n if (endOfDay === endIndex) {\r\n endRowIndex = allRows;\r\n } else {\r\n endRowIndex = endIndex % allRows;\r\n }\r\n if (this.hourParts !== 1) {\r\n if (endRowIndex > rangeEndRowIndex) {\r\n endOffset = 0;\r\n } else {\r\n endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\r\n }\r\n }\r\n }\r\n if (startRowIndex < rangeStartRowIndex) {\r\n startRowIndex = 0;\r\n } else {\r\n startRowIndex -= rangeStartRowIndex;\r\n }\r\n if (endRowIndex > rangeEndRowIndex) {\r\n endRowIndex = rangeEndRowIndex;\r\n }\r\n endRowIndex -= rangeStartRowIndex;\r\n\r\n if (startRowIndex < endRowIndex) {\r\n const displayEvent = {\r\n event,\r\n startIndex: startRowIndex,\r\n endIndex: endRowIndex,\r\n startOffset,\r\n endOffset,\r\n position: 0\r\n };\r\n let eventSet = rows[startRowIndex][dayIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayEvent);\r\n rows[startRowIndex][dayIndex].events = eventSet;\r\n }\r\n dates[dayIndex].hasEvent = true;\r\n }\r\n startRowIndex = 0;\r\n startOffset = 0;\r\n dayIndex += 1;\r\n } while (endOfDay < endIndex);\r\n }\r\n }\r\n\r\n if (normalEventInRange) {\r\n for (let day = 0; day < 7; day += 1) {\r\n let orderedEvents: IDisplayEvent[] = [];\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n if (rows[hour][day].events) {\r\n rows[hour][day].events.sort(WeekViewComponent.compareEventByStartOffset);\r\n orderedEvents = orderedEvents.concat(rows[hour][day].events);\r\n }\r\n }\r\n if (orderedEvents.length > 0) {\r\n this.placeEvents(orderedEvents);\r\n }\r\n }\r\n }\r\n\r\n if (allDayEventInRange) {\r\n let orderedAllDayEvents: IDisplayEvent[] = [];\r\n for (let day = 0; day < 7; day += 1) {\r\n if (dates[day].events) {\r\n orderedAllDayEvents = orderedAllDayEvents.concat(dates[day].events);\r\n }\r\n }\r\n if (orderedAllDayEvents.length > 0) {\r\n this.placeAllDayEvents(orderedAllDayEvents);\r\n }\r\n }\r\n\r\n if (this.autoSelect) {\r\n let selectedDate;\r\n for (let r = 0; r < 7; r += 1) {\r\n if (dates[r].selected) {\r\n selectedDate = dates[r];\r\n break;\r\n }\r\n }\r\n\r\n if (selectedDate) {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedDate.date);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime: selectedDate.date,\r\n events: selectedDate.events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n this.calendarService.populateAdjacentViews(this);\r\n this.updateCurrentView(this.range.startTime, this.views[this.currentViewIndex]);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const firstDayOfWeek = new Date(this.range.startTime.getTime());\r\n firstDayOfWeek.setHours(12, 0, 0, 0);\r\n return this.formatTitle(firstDayOfWeek);\r\n }\r\n\r\n getHighlightClass(date: IWeekViewDateRow): string {\r\n let className = '';\r\n\r\n if (date.hasEvent) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className = 'weekview-with-event';\r\n }\r\n\r\n if (date.selected) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'weekview-selected';\r\n }\r\n\r\n if (date.current) {\r\n if (className) {\r\n className += ' ';\r\n }\r\n className += 'weekview-current';\r\n }\r\n\r\n return className;\r\n }\r\n\r\n select(selectedTime: Date, events: IDisplayEvent[]) {\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedTime);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime,\r\n events: events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n\r\n placeEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n WeekViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\r\n }\r\n\r\n placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n }\r\n\r\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\r\n let earlyEvent = event1,\r\n lateEvent = event2;\r\n if (event1.startIndex > event2.startIndex || (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)) {\r\n earlyEvent = event2;\r\n lateEvent = event1;\r\n }\r\n\r\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\r\n return false;\r\n } else {\r\n return !(earlyEvent.endIndex - lateEvent.startIndex === 1 && earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts);\r\n }\r\n }\r\n\r\n calculatePosition(events: IDisplayEvent[]) {\r\n const len = events.length,\r\n isForbidden = new Array(len);\r\n let maxColumn = 0;\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n let col: number;\r\n for (col = 0; col < maxColumn; col += 1) {\r\n isForbidden[col] = false;\r\n }\r\n for (let j = 0; j < i; j += 1) {\r\n if (this.overlap(events[i], events[j])) {\r\n isForbidden[events[j].position] = true;\r\n }\r\n }\r\n for (col = 0; col < maxColumn; col += 1) {\r\n if (!isForbidden[col]) {\r\n break;\r\n }\r\n }\r\n if (col < maxColumn) {\r\n events[i].position = col;\r\n } else {\r\n events[i].position = maxColumn++;\r\n }\r\n }\r\n\r\n if (this.dir === 'rtl') {\r\n for (let i = 0; i < len; i += 1) {\r\n events[i].position = maxColumn - 1 - events[i].position;\r\n }\r\n }\r\n }\r\n\r\n updateCurrentView(currentViewStartDate: Date, view: IWeekView) {\r\n const currentCalendarDate = this.calendarService.currentDate,\r\n today = new Date(),\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(currentCalendarDate.getFullYear(), currentCalendarDate.getMonth(), currentCalendarDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay),\r\n currentDayDifference = Math.floor((Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n for (let r = 0; r < 7; r += 1) {\r\n view.dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 7 && this.autoSelect) {\r\n view.dates[selectedDayDifference].selected = true;\r\n }\r\n\r\n if (currentDayDifference >= 0 && currentDayDifference < 7) {\r\n view.dates[currentDayDifference].current = true;\r\n }\r\n }\r\n\r\n daySelected(viewDate: IWeekViewDateRow) {\r\n const selectedDate = viewDate.date,\r\n dates = this.views[this.currentViewIndex].dates,\r\n currentViewStartDate = this.range.startTime,\r\n oneDay = 86400000,\r\n selectedDayDifference = Math.round((Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), selectedDate.getDate()) - Date.UTC(currentViewStartDate.getFullYear(), currentViewStartDate.getMonth(), currentViewStartDate.getDate())) / oneDay);\r\n\r\n this.calendarService.setCurrentDate(selectedDate);\r\n\r\n for (let r = 0; r < 7; r += 1) {\r\n dates[r].selected = false;\r\n }\r\n\r\n if (selectedDayDifference >= 0 && selectedDayDifference < 7) {\r\n dates[selectedDayDifference].selected = true;\r\n }\r\n\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedDate);\r\n }\r\n\r\n this.onDayHeaderSelected.emit({selectedTime: selectedDate, events: viewDate.events.map(e => e.event), disabled});\r\n }\r\n\r\n setScrollPosition(scrollPosition: number) {\r\n this.initScrollPosition = scrollPosition;\r\n }\r\n}\r\n","<div class=\"swiper weekview-swiper\" #weekViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container weekview-slide-container\">\r\n <table class=\"table table-bordered table-fixed weekview-header\">\r\n <thead>\r\n <tr>\r\n <th class=\"calendar-hour-column\"></th>\r\n <th class=\"weekview-header text-center\" *ngFor=\"let date of views[sliderIndex].dates\"\r\n [ngClass]=\"getHighlightClass(date)\" (click)=\"daySelected(date)\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\r\n [ngTemplateOutletContext]=\"{viewDate:date}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n <div *ngIf=\"sliderIndex===currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\"\r\n [emitEvent]=\"preserveScrollPosition\" (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\" tappable\r\n (click)=\"select(tm.time, tm.events)\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n <div *ngIf=\"sliderIndex!==currentViewIndex\">\r\n <div class=\"weekview-allday-table\">\r\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"weekview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-fixed weekview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngFor=\"let day of views[sliderIndex].dates\" class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{day:day}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll class=\"weekview-normal-event-container\" [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed weekview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td *ngFor=\"let tm of row\" class=\"calendar-cell\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <ng-template [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { DatePipe } from '@angular/common';\r\nimport {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n NgZone,\r\n OnChanges,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n SimpleChanges,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { Swiper } from 'swiper';\r\nimport { SwiperOptions } from 'swiper/types';\r\n\r\nimport {\r\n CalendarMode,\r\n ICalendarComponent,\r\n IDateFormatter,\r\n IDayView,\r\n IDayViewAllDayEventSectionTemplateContext,\r\n IDayViewCategoryItemTemplateContext,\r\n IDayViewNormalEventSectionTemplateContext,\r\n IDayViewRow,\r\n IDisplayAllDayEvent,\r\n IDisplayEvent,\r\n IEvent,\r\n IRange,\r\n ITimeSelected\r\n} from './calendar.interface';\r\nimport { CalendarService } from './calendar.service';\r\n\r\n@Component({\r\n selector: 'dayview',\r\n templateUrl: './dayview.html',\r\n styleUrls: ['./dayview.css'],\r\n encapsulation: ViewEncapsulation.None,\r\n standalone: false\r\n})\r\nexport class DayViewComponent implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit {\r\n constructor(private calendarService: CalendarService, private elm: ElementRef, private zone: NgZone) {}\r\n\r\n private slider!: Swiper;\r\n @ViewChild('dayViewSwiper') swiperElement?: ElementRef;\r\n\r\n @HostBinding('class.dayview') class = true;\r\n\r\n @Input() dayviewCategoryItemTemplate!: TemplateRef<IDayViewCategoryItemTemplateContext>;\r\n @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\r\n @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\r\n @Input() dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewInactiveNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n\r\n @Input() formatHourColumn?: string;\r\n @Input() formatDayTitle?: string;\r\n @Input() allDayLabel?: string;\r\n @Input() hourParts!: number;\r\n @Input() eventSource!: IEvent[];\r\n @Input() markDisabled?: (date: Date) => boolean;\r\n @Input() locale!: string;\r\n @Input() dateFormatter?: IDateFormatter;\r\n @Input() dir = '';\r\n @Input() scrollToHour = 0;\r\n @Input() preserveScrollPosition?: boolean;\r\n @Input() lockSwipeToPrev?: boolean = false;\r\n @Input() lockSwipeToNext?: boolean = false;\r\n @Input() lockSwipes?: boolean = false;\r\n @Input() startHour!: number;\r\n @Input() endHour!: number;\r\n @Input() sliderOptions?: SwiperOptions;\r\n @Input() hourSegments!: number;\r\n @Input() dayviewCategorySource?: Set<string>;\r\n @Input() dayviewShowCategoryView?: boolean;\r\n\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>(true);\r\n\r\n public readonly sliderIndexList = [0, 1, 2];\r\n public views: IDayView[] = [];\r\n public currentViewIndex = 0;\r\n public direction = 0;\r\n public mode: CalendarMode = 'day';\r\n public range!: IRange;\r\n\r\n private inited = false;\r\n private callbackOnInit = true;\r\n private currentDateChangedFromParentSubscription?: Subscription;\r\n private eventSourceChangedSubscription?: Subscription;\r\n private slideChangedSubscription?: Subscription;\r\n private slideUpdatedSubscription?: Subscription;\r\n\r\n public hourColumnLabels!: string[];\r\n public initScrollPosition!: number;\r\n private formatTitle!: (date: Date) => string;\r\n private formatHourColumnLabel!: (date: Date) => string;\r\n private hourRange!: number;\r\n\r\n static createDateObjects(startTime: Date, startHour: number, endHour: number, timeInterval: number): IDayViewRow[] {\r\n const rows: IDayViewRow[] = [],\r\n currentHour = 0,\r\n currentDate = startTime.getDate();\r\n let time: Date, hourStep, minStep;\r\n\r\n if (timeInterval < 1) {\r\n hourStep = Math.floor(1 / timeInterval);\r\n minStep = 60;\r\n } else {\r\n hourStep = 1;\r\n minStep = Math.floor(60 / timeInterval);\r\n }\r\n\r\n for (let hour = startHour; hour < endHour; hour += hourStep) {\r\n for (let interval = 0; interval < 60; interval += minStep) {\r\n time = new Date(startTime.getTime());\r\n time.setHours(currentHour + hour, interval);\r\n time.setDate(currentDate);\r\n rows.push({\r\n time,\r\n events: [],\r\n eventsGroupByCategory: new Map()\r\n });\r\n }\r\n }\r\n return rows;\r\n }\r\n\r\n private static compareEventByStartOffset(eventA: IDisplayEvent, eventB: IDisplayEvent) {\r\n return eventA.startOffset - eventB.startOffset;\r\n }\r\n\r\n private static calculateWidth(orderedEvents: IDisplayEvent[], size: number, hourParts: number) {\r\n const totalSize = size * hourParts,\r\n cells: { calculated: boolean; events: IDisplayEvent[] }[] = new Array(totalSize);\r\n\r\n // sort by position in descending order, the right most columns should be calculated first\r\n orderedEvents.sort((eventA, eventB) => {\r\n return eventB.position - eventA.position;\r\n });\r\n for (let i = 0; i < totalSize; i += 1) {\r\n cells[i] = {\r\n calculated: false,\r\n events: []\r\n };\r\n }\r\n const len = orderedEvents.length;\r\n for (let i = 0; i < len; i += 1) {\r\n const event = orderedEvents[i];\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n cells[index].events.push(event);\r\n index += 1;\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < len) {\r\n let event: IDisplayEvent | undefined = orderedEvents[i];\r\n if (!event.overlapNumber) {\r\n const overlapNumber = event.position + 1;\r\n event.overlapNumber = overlapNumber;\r\n const eventQueue = [event];\r\n while ((event = eventQueue.shift())) {\r\n let index = event.startIndex * hourParts + event.startOffset;\r\n while (index < event.endIndex * hourParts - event.endOffset) {\r\n if (!cells[index].calculated) {\r\n cells[index].calculated = true;\r\n if (cells[index].events) {\r\n const eventCountInCell = cells[index].events.length;\r\n for (let j = 0; j < eventCountInCell; j += 1) {\r\n const currentEventInCell = cells[index].events[j];\r\n if (!currentEventInCell.overlapNumber) {\r\n currentEventInCell.overlapNumber = overlapNumber;\r\n eventQueue.push(currentEventInCell);\r\n }\r\n }\r\n }\r\n }\r\n index += 1;\r\n }\r\n }\r\n }\r\n i += 1;\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n if (!this.sliderOptions) {\r\n this.sliderOptions = {};\r\n }\r\n this.sliderOptions.loop = true;\r\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\r\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\r\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\r\n\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n if (this.dateFormatter && this.dateFormatter.formatDayViewTitle) {\r\n this.formatTitle = this.dateFormatter.formatDayViewTitle;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatTitle = function (date: Date) {\r\n return datePipe.transform(date, this.formatDayTitle) || '';\r\n };\r\n }\r\n\r\n if (this.dateFormatter && this.dateFormatter.formatDayViewHourColumn) {\r\n this.formatHourColumnLabel = this.dateFormatter.formatDayViewHourColumn;\r\n } else {\r\n const datePipe = new DatePipe(this.locale);\r\n this.formatHourColumnLabel = function (date: Date) {\r\n return datePipe.transform(date, this.formatHourColumn) || '';\r\n };\r\n }\r\n\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n\r\n this.inited = true;\r\n\r\n this.currentDateChangedFromParentSubscription = this.calendarService.currentDateChangedFromParent$.subscribe(\r\n currentDate => {\r\n this.refreshView();\r\n }\r\n );\r\n\r\n this.eventSourceChangedSubscription = this.calendarService.eventSourceChanged$.subscribe(() => {\r\n this.onDataLoaded();\r\n });\r\n\r\n this.slideChangedSubscription = this.calendarService.slideChanged$.subscribe(direction => {\r\n if (direction === 1) {\r\n this.slider.slideNext();\r\n } else if (direction === -1) {\r\n this.slider.slidePrev();\r\n }\r\n });\r\n\r\n this.slideUpdatedSubscription = this.calendarService.slideUpdated$.subscribe(() => {\r\n this.slider.update();\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.slider = new Swiper(this.swiperElement?.nativeElement, this.sliderOptions);\r\n let me = this;\r\n this.slider.on('slideNextTransitionEnd', function () {\r\n me.onSlideChanged(1);\r\n });\r\n\r\n this.slider.on('slidePrevTransitionEnd', function () {\r\n me.onSlideChanged(-1);\r\n });\r\n\r\n if (this.dir === 'rtl') {\r\n this.slider.changeLanguageDirection('rtl');\r\n }\r\n\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n\r\n if (this.scrollToHour > 0) {\r\n const hourColumns = this.elm.nativeElement\r\n .querySelector('.dayview-normal-event-container')\r\n .querySelectorAll('.calendar-hour-column');\r\n const me = this;\r\n setTimeout(() => {\r\n me.initScrollPosition = hourColumns[me.scrollToHour - me.startHour].offsetTop;\r\n }, 50);\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (!this.inited) {\r\n return;\r\n }\r\n if (\r\n (changes['startHour'] || changes['endHour']) &&\r\n (!changes['startHour'].isFirstChange() || !changes['endHour'].isFirstChange())\r\n ) {\r\n this.views = [];\r\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\r\n this.direction = 0;\r\n this.refreshView();\r\n this.hourColumnLabels = this.getHourColumnLabels();\r\n }\r\n\r\n const eventSourceChange = changes['eventSource'];\r\n if (eventSourceChange && eventSourceChange.currentValue) {\r\n this.onDataLoaded();\r\n }\r\n\r\n const lockSwipeToPrev = changes['lockSwipeToPrev'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\r\n }\r\n\r\n const lockSwipeToNext = changes['lockSwipeToNext'];\r\n if (lockSwipeToPrev) {\r\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\r\n }\r\n\r\n const lockSwipes = changes['lockSwipes'];\r\n if (lockSwipes) {\r\n this.slider.allowTouchMove = !lockSwipes.currentValue;\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromParentSubscription) {\r\n this.currentDateChangedFromParentSubscription.unsubscribe();\r\n this.currentDateChangedFromParentSubscription = undefined;\r\n }\r\n\r\n if (this.eventSourceChangedSubscription) {\r\n this.eventSourceChangedSubscription.unsubscribe();\r\n this.eventSourceChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideChangedSubscription) {\r\n this.slideChangedSubscription.unsubscribe();\r\n this.slideChangedSubscription = undefined;\r\n }\r\n\r\n if (this.slideUpdatedSubscription) {\r\n this.slideUpdatedSubscription.unsubscribe();\r\n this.slideUpdatedSubscription = undefined;\r\n }\r\n }\r\n\r\n onSlideChanged(direction: number) {\r\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\r\n this.move(direction);\r\n }\r\n\r\n move(direction: number) {\r\n if (direction === 0) {\r\n return;\r\n }\r\n\r\n this.direction = direction;\r\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(this.mode, direction);\r\n this.calendarService.setCurrentDate(adjacentDate);\r\n this.refreshView();\r\n this.direction = 0;\r\n }\r\n\r\n private getHourColumnLabels(): string[] {\r\n const hourColumnLabels: string[] = [];\r\n for (let hour = 0, length = this.views[0].rows.length; hour < length; hour += 1) {\r\n // handle edge case for DST\r\n if (hour === 0 && this.views[0].rows[hour].time.getHours() !== this.startHour) {\r\n const time = new Date(this.views[0].rows[hour].time);\r\n time.setDate(time.getDate() + 1);\r\n time.setHours(this.startHour);\r\n hourColumnLabels.push(this.formatHourColumnLabel(time));\r\n } else {\r\n hourColumnLabels.push(this.formatHourColumnLabel(this.views[0].rows[hour].time));\r\n }\r\n }\r\n return hourColumnLabels;\r\n }\r\n\r\n getViewData(startTime: Date): IDayView {\r\n return {\r\n rows: DayViewComponent.createDateObjects(startTime, this.startHour, this.endHour, this.hourSegments),\r\n allDayEvents: [],\r\n categorizedAllDayEventsMap: new Map<string, IDisplayAllDayEvent[]>()\r\n };\r\n }\r\n\r\n getRange(currentDate: Date): IRange {\r\n const year = currentDate.getFullYear(),\r\n month = currentDate.getMonth(),\r\n date = currentDate.getDate(),\r\n startTime = new Date(year, month, date, 12, 0, 0),\r\n endTime = new Date(year, month, date + 1, 12, 0, 0);\r\n\r\n return {\r\n startTime,\r\n endTime\r\n };\r\n }\r\n\r\n onDataLoaded() {\r\n const eventSource = this.eventSource,\r\n len = eventSource ? eventSource.length : 0,\r\n startTime = this.range.startTime,\r\n endTime = this.range.endTime,\r\n utcStartTime = Date.UTC(startTime.getFullYear(), startTime.getMonth(), startTime.getDate()),\r\n utcEndTime = Date.UTC(endTime.getFullYear(), endTime.getMonth(), endTime.getDate()),\r\n currentViewIndex = this.currentViewIndex,\r\n rows = this.views[currentViewIndex].rows,\r\n allDayEvents: IDisplayAllDayEvent[] = (this.views[currentViewIndex].allDayEvents = []),\r\n oneHour = 3600000,\r\n eps = 0.016,\r\n rangeStartRowIndex = this.startHour * this.hourSegments,\r\n rangeEndRowIndex = this.endHour * this.hourSegments;\r\n let normalEventInRange = false;\r\n\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n rows[hour].events = [];\r\n rows[hour].eventsGroupByCategory = undefined;\r\n }\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n const event = eventSource[i];\r\n const eventStartTime = event.startTime;\r\n const eventEndTime = event.endTime;\r\n let eventUTCStartTime: number, eventUTCEndTime: number;\r\n\r\n if (event.allDay) {\r\n eventUTCStartTime = eventStartTime.getTime();\r\n eventUTCEndTime = eventEndTime.getTime();\r\n } else {\r\n eventUTCStartTime = Date.UTC(\r\n eventStartTime.getFullYear(),\r\n eventStartTime.getMonth(),\r\n eventStartTime.getDate()\r\n );\r\n eventUTCEndTime = Date.UTC(\r\n eventEndTime.getFullYear(),\r\n eventEndTime.getMonth(),\r\n eventEndTime.getDate() + 1\r\n );\r\n }\r\n\r\n if (eventUTCEndTime <= utcStartTime || eventUTCStartTime >= utcEndTime || eventStartTime >= eventEndTime) {\r\n continue;\r\n }\r\n\r\n if (event.allDay) {\r\n allDayEvents.push({\r\n event\r\n });\r\n } else {\r\n normalEventInRange = true;\r\n\r\n let timeDifferenceStart: number;\r\n if (eventUTCStartTime < utcStartTime) {\r\n timeDifferenceStart = 0;\r\n } else {\r\n timeDifferenceStart =\r\n (eventStartTime.getHours() + eventStartTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let timeDifferenceEnd: number;\r\n if (eventUTCEndTime > utcEndTime) {\r\n timeDifferenceEnd = ((utcEndTime - utcStartTime) / oneHour) * this.hourSegments;\r\n } else {\r\n timeDifferenceEnd = (eventEndTime.getHours() + eventEndTime.getMinutes() / 60) * this.hourSegments;\r\n }\r\n\r\n let startIndex = Math.floor(timeDifferenceStart);\r\n let endIndex = Math.ceil(timeDifferenceEnd - eps);\r\n let startOffset = 0;\r\n let endOffset = 0;\r\n if (this.hourParts !== 1) {\r\n if (startIndex < rangeStartRowIndex) {\r\n startOffset = 0;\r\n } else {\r\n startOffset = Math.floor((timeDifferenceStart - startIndex) * this.hourParts);\r\n }\r\n if (endIndex > rangeEndRowIndex) {\r\n endOffset = 0;\r\n } else {\r\n endOffset = Math.floor((endIndex - timeDifferenceEnd) * this.hourParts);\r\n }\r\n }\r\n\r\n if (startIndex < rangeStartRowIndex) {\r\n startIndex = 0;\r\n } else {\r\n startIndex -= rangeStartRowIndex;\r\n }\r\n if (endIndex > rangeEndRowIndex) {\r\n endIndex = rangeEndRowIndex;\r\n }\r\n endIndex -= rangeStartRowIndex;\r\n\r\n if (startIndex < endIndex) {\r\n const displayEvent: IDisplayEvent = {\r\n event,\r\n startIndex,\r\n endIndex,\r\n startOffset,\r\n endOffset,\r\n position: 0\r\n };\r\n\r\n let eventSet = rows[startIndex].events;\r\n if (eventSet) {\r\n eventSet.push(displayEvent);\r\n } else {\r\n eventSet = [];\r\n eventSet.push(displayEvent);\r\n rows[startIndex].events = eventSet;\r\n }\r\n\r\n // setup eventsGroupedByCategory\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource && event.category) {\r\n let groupedEvents = rows[startIndex].eventsGroupByCategory;\r\n if (groupedEvents) {\r\n if (Array.isArray(groupedEvents.get(event.category))) {\r\n groupedEvents.get(event.category)?.push(displayEvent);\r\n } else {\r\n groupedEvents.set(event.category, [displayEvent]);\r\n }\r\n } else {\r\n groupedEvents = new Map();\r\n groupedEvents.set(event.category, [displayEvent]);\r\n rows[startIndex].eventsGroupByCategory = groupedEvents;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (normalEventInRange) {\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\r\n for (const category of this.dayviewCategorySource) {\r\n let displayEvents: IDisplayEvent[] = [];\r\n\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n let groupedEvents = rows[hour].eventsGroupByCategory?.get(category);\r\n if (groupedEvents) {\r\n groupedEvents.sort(DayViewComponent.compareEventByStartOffset);\r\n displayEvents = displayEvents.concat(groupedEvents);\r\n }\r\n }\r\n\r\n if (displayEvents.length > 0) {\r\n this.placeEvents(displayEvents);\r\n }\r\n }\r\n } else {\r\n let orderedEvents: IDisplayEvent[] = [];\r\n for (let hour = 0; hour < this.hourRange; hour += 1) {\r\n if (rows[hour].events) {\r\n rows[hour].events.sort(DayViewComponent.compareEventByStartOffset);\r\n orderedEvents = orderedEvents.concat(rows[hour].events);\r\n }\r\n }\r\n if (orderedEvents.length > 0) {\r\n this.placeEvents(orderedEvents);\r\n }\r\n }\r\n }\r\n\r\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\r\n this.categorizeAllDayEvents(allDayEvents);\r\n }\r\n }\r\n\r\n categorizeAllDayEvents(allDayEvents: IDisplayAllDayEvent[]) {\r\n const categoryIdAllDayEventsMap = (this.views[\r\n this.currentViewIndex\r\n ].categorizedAllDayEventsMap = new Map<string, IDisplayAllDayEvent[]>());\r\n\r\n for (const displayAllDayEvent of allDayEvents) {\r\n if (displayAllDayEvent.event.category) {\r\n if (categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)) {\r\n categoryIdAllDayEventsMap.get(displayAllDayEvent.event.category)?.push(displayAllDayEvent);\r\n } else {\r\n categoryIdAllDayEventsMap.set(displayAllDayEvent.event.category, [displayAllDayEvent]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n refreshView() {\r\n this.range = this.getRange(this.calendarService.currentDate);\r\n if (this.inited) {\r\n const title = this.getTitle();\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n this.calendarService.populateAdjacentViews(this);\r\n this.calendarService.rangeChanged(this);\r\n }\r\n\r\n getTitle(): string {\r\n const startingDate = new Date(this.range.startTime.getTime());\r\n startingDate.setHours(12, 0, 0, 0);\r\n return this.formatTitle(startingDate);\r\n }\r\n\r\n select(row: IDayViewRow, category?: string) {\r\n const selectedTime = row.time;\r\n let events = row.events;\r\n if (category) {\r\n events = row.eventsGroupByCategory?.get(category) || [];\r\n }\r\n\r\n let disabled = false;\r\n if (this.markDisabled) {\r\n disabled = this.markDisabled(selectedTime);\r\n }\r\n\r\n this.onTimeSelected.emit({\r\n selectedTime,\r\n category,\r\n events: events.map(e => e.event),\r\n disabled\r\n });\r\n }\r\n\r\n placeEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n DayViewComponent.calculateWidth(orderedEvents, this.hourRange, this.hourParts);\r\n }\r\n\r\n placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\r\n this.calculatePosition(orderedEvents);\r\n }\r\n\r\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\r\n let earlyEvent = event1,\r\n lateEvent = event2;\r\n if (\r\n event1.startIndex > event2.startIndex ||\r\n (event1.startIndex === event2.startIndex && event1.startOffset > event2.startOffset)\r\n ) {\r\n earlyEvent = event2;\r\n lateEvent = event1;\r\n }\r\n\r\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\r\n return false;\r\n } else {\r\n return !(\r\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\r\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\r\n );\r\n }\r\n }\r\n\r\n calculatePosition(events: IDisplayEvent[]) {\r\n const len = events.length,\r\n isForbidden: boolean[] = new Array(len);\r\n let maxColumn = 0,\r\n col: number;\r\n\r\n for (let i = 0; i < len; i += 1) {\r\n for (col = 0; col < maxColumn; col += 1) {\r\n isForbidden[col] = false;\r\n }\r\n for (let j = 0; j < i; j += 1) {\r\n if (this.overlap(events[i], events[j])) {\r\n isForbidden[events[j].position] = true;\r\n }\r\n }\r\n for (col = 0; col < maxColumn; col += 1) {\r\n if (!isForbidden[col]) {\r\n break;\r\n }\r\n }\r\n if (col < maxColumn) {\r\n events[i].position = col;\r\n } else {\r\n events[i].position = maxColumn++;\r\n }\r\n }\r\n\r\n if (this.dir === 'rtl') {\r\n for (let i = 0; i < len; i += 1) {\r\n events[i].position = maxColumn - 1 - events[i].position;\r\n }\r\n }\r\n }\r\n\r\n eventSelected(event: IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n\r\n setScrollPosition(scrollPosition: number) {\r\n this.initScrollPosition = scrollPosition;\r\n }\r\n}\r\n","<div class=\"swiper dayview-swiper\" #dayViewSwiper>\r\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\r\n <div *ngFor=\"let sliderIndex of sliderIndexList\" class=\"swiper-slide slide-container dayview-slide-container\">\r\n <ng-container *ngIf=\"!dayviewShowCategoryView\">\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\r\n <div class=\"dayview-allday-content-wrapper scroll-content\">\r\n <table class=\"table table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td *ngIf=\"sliderIndex===currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngIf=\"sliderIndex!==currentViewIndex\" class=\"calendar-cell\"\r\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\r\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex===currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\" tappable (click)=\"select(tm)\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n <init-position-scroll *ngIf=\"sliderIndex!==currentViewIndex\" class=\"dayview-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let tm of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{hourColumnLabels[i]}}\r\n </td>\r\n <td class=\"calendar-cell\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"dayviewShowCategoryView\">\r\n <div class=\"dayview-category-header\">\r\n <table class=\"table table-fixed table-bordered dayview-category-header-table\">\r\n <thead>\r\n <tr>\r\n <th class=\"dayview-category-header-item calendar-hour-column\"></th>\r\n <th *ngFor=\"let category of dayviewCategorySource\" class=\"dayview-category-header-item\">\r\n <ng-template [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\" [ngTemplateOutletContext]=\"{category}\">\r\n </ng-template>\r\n </th>\r\n </tr>\r\n </thead>\r\n </table>\r\n </div>\r\n\r\n <div class=\"dayview-allday-table\">\r\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\r\n <div class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\">\r\n <table class=\"table table-fixed table-bordered dayview-allday-content-table\">\r\n <tbody>\r\n <tr>\r\n <td class=\"calendar-cell\" *ngFor=\"let category of dayviewCategorySource\">\r\n <div class=\"calendar-event-wrap\">\r\n <ng-template *ngIf=\"sliderIndex === currentViewIndex\"\r\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n <ng-template *ngIf=\"sliderIndex !== currentViewIndex \"\r\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\">\r\n </ng-template>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <init-position-scroll *ngIf=\"sliderIndex === currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\" [emitEvent]=\"preserveScrollPosition\"\r\n (onScroll)=\"setScrollPosition($event)\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n\r\n <init-position-scroll *ngIf=\"sliderIndex !== currentViewIndex\"\r\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\r\n [initPosition]=\"initScrollPosition\">\r\n <table class=\"table table-bordered table-fixed dayview-normal-event-table\">\r\n <tbody>\r\n <tr *ngFor=\"let row of views[sliderIndex].rows; let i = index\">\r\n <td class=\"calendar-hour-column text-center\">\r\n {{ hourColumnLabels[i] }}\r\n </td>\r\n <td *ngIf=\"dayviewCategorySource?.size === 0\" class=\"calendar-cell\" (click)=\"select(row)\" tappable>\r\n <ng-template [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n <td *ngFor=\"let category of dayviewCategorySource\" class=\"calendar-cell\" (click)=\"select(row, category)\"\r\n tappable>\r\n <ng-template\r\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\r\n [ngTemplateOutletContext]=\"{tm: { events: row.eventsGroupByCategory?.get(category)!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\">\r\n </ng-template>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </init-position-scroll>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>","import { EventEmitter, TemplateRef } from '@angular/core';\r\n\r\nexport interface IEvent {\r\n allDay: boolean;\r\n endTime: Date;\r\n startTime: Date;\r\n title: string;\r\n category?: string;\r\n}\r\n\r\nexport interface IRange {\r\n startTime: Date;\r\n endTime: Date;\r\n}\r\n\r\nexport interface IView {}\r\n\r\nexport interface IDayView extends IView {\r\n allDayEvents: IDisplayAllDayEvent[];\r\n rows: IDayViewRow[];\r\n categorizedAllDayEventsMap: Map<string, IDisplayAllDayEvent[]>;\r\n}\r\n\r\n/**\r\n * should be renamed to IDayViewCell since row could be vertically sliced into pieces of categories\r\n */\r\nexport interface IDayViewRow {\r\n events: IDisplayEvent[];\r\n eventsGroupByCategory?: Map<string, IDisplayEvent[]>;\r\n time: Date;\r\n}\r\n\r\nexport interface IMonthView extends IView {\r\n dates: IMonthViewRow[];\r\n dayHeaders: string[];\r\n}\r\n\r\nexport interface IMonthViewRow {\r\n current?: boolean;\r\n date: Date;\r\n events: IEvent[];\r\n hasEvent?: boolean;\r\n label: string;\r\n secondary: boolean;\r\n selected?: boolean;\r\n disabled: boolean;\r\n}\r\n\r\nexport interface IWeekView extends IView {\r\n dates: IWeekViewDateRow[];\r\n rows: IWeekViewRow[][];\r\n}\r\n\r\nexport interface IWeekViewDateRow {\r\n current?: boolean;\r\n date: Date;\r\n events: IDisplayEvent[];\r\n hasEvent?: boolean;\r\n selected?: boolean;\r\n dayHeader: string;\r\n}\r\n\r\nexport interface IWeekViewRow {\r\n events: IDisplayEvent[];\r\n time: Date;\r\n}\r\n\r\nexport interface IDisplayEvent {\r\n endIndex: number;\r\n endOffset: number;\r\n event: IEvent;\r\n startIndex: number;\r\n startOffset: number;\r\n overlapNumber?: number;\r\n position: number;\r\n}\r\n\r\nexport interface IDisplayWeekViewHeader {\r\n viewDate: IWeekViewDateRow;\r\n}\r\n\r\nexport interface IDisplayAllDayEvent {\r\n event: IEvent;\r\n}\r\n\r\nexport interface ICalendarComponent {\r\n currentViewIndex: number;\r\n direction: number;\r\n eventSource: IEvent[];\r\n getRange: { (date: Date): IRange };\r\n getViewData: { (date: Date): IView };\r\n mode: CalendarMode;\r\n range: IRange;\r\n views: IView[];\r\n onDataLoaded: { (): void };\r\n onRangeChanged: EventEmitter<IRange>;\r\n}\r\n\r\nexport interface ITimeSelected {\r\n events: IEvent[];\r\n selectedTime: Date;\r\n disabled: boolean;\r\n category?: string;\r\n}\r\n\r\nexport interface IMonthViewDisplayEventTemplateContext {\r\n view?: IView;\r\n row?: number;\r\n col?: number;\r\n showEventDetail?: boolean;\r\n selectedDate?: IMonthViewRow;\r\n noEventsLabel?: string;\r\n}\r\n\r\nexport interface IMonthViewEventDetailTemplateContext {\r\n showEventDetail: boolean;\r\n selectedDate?: IMonthViewRow;\r\n noEventsLabel?: string;\r\n}\r\n\r\nexport interface IWeekViewAllDayEventSectionTemplateContext {\r\n day: IWeekViewDateRow;\r\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\r\n}\r\n\r\nexport interface IWeekViewNormalEventSectionTemplateContext {\r\n tm: IWeekViewRow;\r\n eventTemplate?: TemplateRef<IDisplayEvent>;\r\n hourParts?: number;\r\n}\r\n\r\nexport interface IDayViewAllDayEventSectionTemplateContext {\r\n allDayEvents: IDisplayAllDayEvent[];\r\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\r\n}\r\n\r\nexport interface IDayViewNormalEventSectionTemplateContext {\r\n tm: IDayViewRow;\r\n eventTemplate?: TemplateRef<IDisplayEvent>;\r\n hourParts?: number;\r\n category?: string;\r\n}\r\n\r\nexport interface IDayViewCategoryItemTemplateContext {\r\n category: string;\r\n}\r\n\r\nexport interface IDateFormatter {\r\n formatMonthViewDay?: { (date: Date): string };\r\n formatMonthViewDayHeader?: { (date: Date): string };\r\n formatMonthViewTitle?: { (date: Date): string };\r\n formatWeekViewDayHeader?: { (date: Date): string };\r\n formatWeekViewTitle?: { (date: Date): string };\r\n formatWeekViewHourColumn?: { (date: Date): string };\r\n formatDayViewTitle?: { (date: Date): string };\r\n formatDayViewHourColumn?: { (date: Date): string };\r\n}\r\n\r\nexport type CalendarMode = 'day' | 'month' | 'week';\r\n\r\nexport type QueryMode = 'local' | 'remote';\r\n\r\nexport enum Step {\r\n QuarterHour = 15,\r\n HalfHour = 30,\r\n Hour = 60,\r\n}\r\n","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, Inject, LOCALE_ID, NgZone } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { CalendarService } from './calendar.service';\r\nimport SwiperCore from 'swiper';\r\nimport { IonicSlides } from '@ionic/angular';\r\nimport { IEvent, CalendarMode, QueryMode, Step, IMonthViewDisplayEventTemplateContext, IMonthViewEventDetailTemplateContext, IDisplayWeekViewHeader, IDisplayAllDayEvent, IDisplayEvent, IWeekViewAllDayEventSectionTemplateContext, IDayViewAllDayEventSectionTemplateContext, IWeekViewNormalEventSectionTemplateContext, IDayViewNormalEventSectionTemplateContext, IDateFormatter, IRange, ITimeSelected, IDayViewCategoryItemTemplateContext } from './calendar.interface';\r\n\r\nSwiperCore.use([IonicSlides]);\r\n\r\n\r\n@Component({\r\n selector: 'calendar',\r\n templateUrl: './calendar.html',\r\n styleUrls: ['./calendar.css'],\r\n providers: [CalendarService],\r\n standalone: false\r\n})\r\nexport class CalendarComponent implements OnInit {\r\n @Input()\r\n get currentDate():Date {\r\n return this._currentDate;\r\n }\r\n\r\n set currentDate(val:Date) {\r\n if (!val) {\r\n val = new Date();\r\n }\r\n\r\n this._currentDate = val;\r\n this.calendarService.setCurrentDate(val, true);\r\n this.onCurrentDateChanged.emit(this._currentDate);\r\n }\r\n\r\n @Input() eventSource:IEvent[] = [];\r\n @Input() calendarMode:CalendarMode = 'month';\r\n @Input() formatDay:string = 'd';\r\n @Input() formatDayHeader:string = 'EEE';\r\n @Input() formatDayTitle:string = 'MMMM dd, yyyy';\r\n @Input() formatWeekTitle:string = 'MMMM yyyy, \\'Week\\' w';\r\n @Input() formatMonthTitle:string = 'MMMM yyyy';\r\n @Input() formatWeekViewDayHeader:string = 'EEE d';\r\n @Input() formatHourColumn:string = 'ha';\r\n @Input() showEventDetail:boolean = true;\r\n @Input() startingDayMonth:number = 0;\r\n @Input() startingDayWeek:number = 0;\r\n @Input() allDayLabel:string = 'all day';\r\n @Input() noEventsLabel:string = 'No Events';\r\n @Input() queryMode:QueryMode = 'local';\r\n @Input() step:Step = Step.Hour;\r\n @Input() timeInterval:number = 60;\r\n @Input() autoSelect:boolean = true;\r\n @Input() markDisabled?:(date:Date) => boolean;\r\n @Input() monthviewDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewInactiveDisplayEventTemplate?:TemplateRef<IMonthViewDisplayEventTemplateContext>;\r\n @Input() monthviewEventDetailTemplate?:TemplateRef<IMonthViewEventDetailTemplateContext>;\r\n @Input() weekviewHeaderTemplate?:TemplateRef<IDisplayWeekViewHeader>;\r\n @Input() weekviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\r\n @Input() weekviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\r\n @Input() dayviewCategoryItemTemplate?: TemplateRef<IDayViewCategoryItemTemplateContext>;\r\n @Input() dayviewAllDayEventTemplate?:TemplateRef<IDisplayAllDayEvent>;\r\n @Input() dayviewNormalEventTemplate?:TemplateRef<IDisplayEvent>;\r\n @Input() weekviewAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() weekviewInactiveAllDayEventSectionTemplate?:TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\r\n @Input() weekviewInactiveNormalEventSectionTemplate?:TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\r\n @Input() dayviewInactiveAllDayEventSectionTemplate?:TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\r\n @Input() dayviewInactiveNormalEventSectionTemplate?:TemplateRef<IDayViewNormalEventSectionTemplateContext>;\r\n @Input() dateFormatter?:IDateFormatter;\r\n @Input() dir:string = \"\";\r\n @Input() scrollToHour:number = 0;\r\n @Input() preserveScrollPosition:boolean = false;\r\n @Input() lockSwipeToPrev:boolean = false;\r\n @Input() lockSwipeToNext:boolean = false;\r\n @Input() lockSwipes:boolean = false;\r\n @Input() locale:string = \"\";\r\n @Input() startHour:number = 0;\r\n @Input() endHour:number = 24;\r\n @Input() sliderOptions:any;\r\n @Input() dayviewCategorySource?:Set<string>;\r\n @Input() dayviewShowCategoryView:boolean = false;\r\n\r\n @Output() onCurrentDateChanged = new EventEmitter<Date>();\r\n @Output() onRangeChanged = new EventEmitter<IRange>();\r\n @Output() onEventSelected = new EventEmitter<IEvent>();\r\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\r\n @Output() onTitleChanged = new EventEmitter<string>(true);\r\n\r\n private _currentDate:Date = new Date();\r\n public hourParts = 1;\r\n public hourSegments = 1;\r\n private currentDateChangedFromChildrenSubscription?:Subscription;\r\n\r\n constructor(private calendarService:CalendarService, @Inject(LOCALE_ID) private appLocale:string, private ngZone: NgZone) {\r\n this.locale = appLocale;\r\n }\r\n\r\n ngOnInit() {\r\n if (this.autoSelect) {\r\n if (this.autoSelect.toString() === 'false') {\r\n this.autoSelect = false;\r\n } else {\r\n this.autoSelect = true;\r\n }\r\n }\r\n this.hourSegments = 60 / this.timeInterval;\r\n this.hourParts = 60 / this.step;\r\n if(this.hourParts <= this.hourSegments) {\r\n this.hourParts = 1;\r\n } else {\r\n this.hourParts = this.hourParts / this.hourSegments;\r\n }\r\n this.startHour = parseInt(this.startHour.toString());\r\n this.endHour = parseInt(this.endHour.toString());\r\n this.calendarService.queryMode = this.queryMode;\r\n\r\n this.currentDateChangedFromChildrenSubscription = this.calendarService.currentDateChangedFromChildren$.subscribe(currentDate => {\r\n this._currentDate = currentDate;\r\n this.onCurrentDateChanged.emit(currentDate);\r\n });\r\n }\r\n\r\n ngOnDestroy() {\r\n if (this.currentDateChangedFromChildrenSubscription) {\r\n this.currentDateChangedFromChildrenSubscription.unsubscribe();\r\n this.currentDateChangedFromChildrenSubscription = undefined;\r\n }\r\n }\r\n\r\n rangeChanged(range:IRange) {\r\n this.onRangeChanged.emit(range);\r\n }\r\n\r\n eventSelected(event:IEvent) {\r\n this.onEventSelected.emit(event);\r\n }\r\n\r\n timeSelected(timeSelected:ITimeSelected) {\r\n this.onTimeSelected.emit(timeSelected);\r\n }\r\n\r\n daySelected(daySelected:ITimeSelected) {\r\n this.onDayHeaderSelected.emit(daySelected);\r\n }\r\n\r\n titleChanged(title:string) {\r\n this.onTitleChanged.emit(title);\r\n }\r\n\r\n loadEvents() {\r\n this.calendarService.loadEvents();\r\n }\r\n\r\n slideNext() {\r\n this.calendarService.slide(1);\r\n }\r\n\r\n slidePrev() {\r\n this.calendarService.slide(-1);\r\n }\r\n\r\n update() {\r\n this.calendarService.update();\r\n }\r\n}\r\n","<ng-template #monthviewDefaultDisplayEventTemplate let-view=\"view\" let-row=\"row\" let-col=\"col\">\r\n {{view.dates[row*7+col].label}}\r\n</ng-template>\r\n<ng-template #monthviewDefaultEventDetailTemplate let-showEventDetail=\"showEventDetail\" let-selectedDate=\"selectedDate\"\r\n let-noEventsLabel=\"noEventsLabel\">\r\n <ion-list class=\"event-detail-container\" has-bouncing=\"false\" *ngIf=\"showEventDetail\" overflow-scroll=\"false\">\r\n <ion-item *ngFor=\"let event of selectedDate?.events\" (click)=\"eventSelected(event)\">\r\n <span *ngIf=\"!event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{event.startTime|date: 'HH:mm'}}\r\n -\r\n {{event.endTime|date: 'HH:mm'}}\r\n </span>\r\n <span *ngIf=\"event.allDay\" class=\"monthview-eventdetail-timecolumn\">{{allDayLabel}}</span>\r\n <span class=\"event-detail\"> | {{event.title}} </span>\r\n <span class=\"event-detail event-category-detail\" *ngIf=\"event.categoryId\">[{{event.categoryName}}]</span>\r\n </ion-item>\r\n <ion-item *ngIf=\"selectedDate?.events.length==0\">\r\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\r\n </ion-item>\r\n </ion-list>\r\n</ng-template>\r\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\r\n {{ viewDate.dayHeader }}\r\n</ng-template>\r\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\r\n {{ category }}\r\n</ng-template>\r\n<ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\r\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\r\n</ng-template>\r\n<ng-template #defaultWeekViewAllDayEventSectionTemplate let-day=\"day\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': day.events}\" *ngIf=\"day.events\"\r\n [ngStyle]=\"{height: 25*day.events.length+'px'}\">\r\n <div *ngFor=\"let displayEvent of day.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultDayViewAllDayEventSectionTemplate let-allDayEvents=\"allDayEvents\"\r\n let-eventTemplate=\"eventTemplate\">\r\n <div *ngFor=\"let displayEvent of allDayEvents; let eventIndex=index\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\" [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultNormalEventSectionTemplate let-tm=\"tm\" let-hourParts=\"hourParts\" let-eventTemplate=\"eventTemplate\">\r\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\" *ngIf=\"tm.events\">\r\n <div *ngFor=\"let displayEvent of tm.events\" class=\"calendar-event\" tappable\r\n (click)=\"eventSelected(displayEvent.event)\"\r\n [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\">\r\n <ng-template [ngTemplateOutlet]=\"eventTemplate\" [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\">\r\n </ng-template>\r\n </div>\r\n </div>\r\n</ng-template>\r\n<ng-template #defaultInactiveAllDayEventSectionTemplate>\r\n</ng-template>\r\n<ng-template #defaultInactiveNormalEventSectionTemplate>\r\n</ng-template>\r\n\r\n<div [ngSwitch]=\"calendarMode\" class=\"{{calendarMode}}view-container\">\r\n <monthview *ngSwitchCase=\"'month'\" [formatDay]=\"formatDay\" [formatDayHeader]=\"formatDayHeader\"\r\n [formatMonthTitle]=\"formatMonthTitle\" [startingDayMonth]=\"startingDayMonth\" [showEventDetail]=\"showEventDetail\"\r\n [noEventsLabel]=\"noEventsLabel\" [autoSelect]=\"autoSelect\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\r\n [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [sliderOptions]=\"sliderOptions\"\r\n (onRangeChanged)=\"rangeChanged($event)\" (onEventSelected)=\"eventSelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </monthview>\r\n <weekview *ngSwitchCase=\"'week'\" [formatWeekTitle]=\"formatWeekTitle\"\r\n [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\" [formatHourColumn]=\"formatHourColumn\"\r\n [startingDayWeek]=\"startingDayWeek\" [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\"\r\n [autoSelect]=\"autoSelect\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\" [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\r\n [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\r\n [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n (onEventSelected)=\"eventSelected($event)\" (onDayHeaderSelected)=\"daySelected($event)\"\r\n (onTimeSelected)=\"timeSelected($event)\" (onTitleChanged)=\"titleChanged($event)\">\r\n </weekview>\r\n <dayview *ngSwitchCase=\"'day'\" [formatDayTitle]=\"formatDayTitle\" [formatHourColumn]=\"formatHourColumn\"\r\n [allDayLabel]=\"allDayLabel\" [hourParts]=\"hourParts\" [hourSegments]=\"hourSegments\" [eventSource]=\"eventSource\"\r\n [markDisabled]=\"markDisabled\"\r\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\r\n [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\r\n [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\r\n [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\r\n [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\r\n [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\r\n [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\r\n [locale]=\"locale\" [dateFormatter]=\"dateFormatter\" [dir]=\"dir\" [scrollToHour]=\"scrollToHour\"\r\n [preserveScrollPosition]=\"preserveScrollPosition\" [lockSwipeToPrev]=\"lockSwipeToPrev\"\r\n [lockSwipeToNext]=\"lockSwipeToNext\" [lockSwipes]=\"lockSwipes\" [startHour]=\"startHour\" [endHour]=\"endHour\"\r\n [sliderOptions]=\"sliderOptions\" (onRangeChanged)=\"rangeChanged($event)\"\r\n [dayviewCategorySource]=\"dayviewCategorySource\"\r\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\r\n (onEventSelected)=\"eventSelected($event)\" (onTimeSelected)=\"timeSelected($event)\"\r\n (onTitleChanged)=\"titleChanged($event)\">\r\n </dayview>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { MonthViewComponent } from './monthview';\r\nimport { WeekViewComponent } from './weekview';\r\nimport { DayViewComponent } from './dayview';\r\nimport { CalendarComponent } from './calendar';\r\nimport { initPositionScrollComponent } from './init-position-scroll';\r\n\r\n@NgModule({\r\n declarations: [\r\n MonthViewComponent, WeekViewComponent, DayViewComponent, CalendarComponent, initPositionScrollComponent\r\n ],\r\n imports: [IonicModule, CommonModule],\r\n exports: [CalendarComponent]\r\n})\r\nexport class NgCalendarModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService","i3.initPositionScrollComponent","i2","i3","i4.MonthViewComponent","i5.WeekViewComponent","i6.DayViewComponent"],"mappings":";;;;;;;;;MAMa,eAAe,CAAA;AAexB,IAAA,WAAA,GAAA;AAPQ,QAAA,IAAA,CAAA,YAAY,GAAS,IAAI,IAAI,EAAE;AAC/B,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,OAAO,EAAQ;AAClD,QAAA,IAAA,CAAA,8BAA8B,GAAG,IAAI,OAAO,EAAQ;AACpD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,OAAO,EAAQ;AACxC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAU;AACpC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;QAGtC,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;QACrF,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,8BAA8B,CAAC,YAAY,EAAE;QACzF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;QACjE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IACzD;AAEA,IAAA,cAAc,CAAC,GAAS,EAAE,UAAA,GAAsB,KAAK,EAAA;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;QACjC,IAAI,UAAU,EAAE;AACZ,YAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,GAAG,CAAC;QAC/C;aAAO;AACH,YAAA,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,GAAG,CAAC;QACjD;IACJ;AAEA,IAAA,IAAI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE;YAC5B,IAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,YAAY,EAAE;gBACjD,SAAS,CAAC,YAAY,EAAE;YAC5B;QACJ;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;AACpC,YAAA,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAC1D,QAAQ,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1D,YAAA,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC9B,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC;YACtD;AAEA,YAAA,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBAC5B,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC;YAClD;AACA,YAAA,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC;AAC1B,gBAAA,SAAS,EAAE,UAAU;AACrB,gBAAA,OAAO,EAAE;AACZ,aAAA,CAAC;QACN;IACJ;AAEQ,IAAA,OAAO,CAAC,IAAkB,EAAA;QAC9B,QAAQ,IAAI;AACR,YAAA,KAAK,OAAO;gBACR,OAAO;AACH,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE;iBACT;AACL,YAAA,KAAK,MAAM;gBACP,OAAO;AACH,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE;iBACT;AACL,YAAA,KAAK,KAAK;gBACN,OAAO;AACH,oBAAA,KAAK,EAAE,CAAC;AACR,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,IAAI,EAAE;iBACT;;IAEb;IAEA,uBAAuB,CAAC,IAAkB,EAAE,SAAiB,EAAA;AACzD,QAAA,IAAI,qBAAqB,GAAG,IAAI,CAAC,WAAW;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAC3B,IAAI,GAAG,qBAAqB,CAAC,WAAW,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,KAAK,EACnE,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,EAClE,IAAI,GAAG,qBAAqB,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI;AAElE,QAAA,qBAAqB,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAE7D,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AAClB,YAAA,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAClE,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,qBAAqB,CAAC,OAAO,EAAE,EAAE;AAClE,gBAAA,qBAAqB,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACzF;QACJ;AACA,QAAA,OAAO,qBAAqB;IAChC;IAEA,wBAAwB,CAAC,SAA6B,EAAE,SAAiB,EAAA;AACrE,QAAA,IAAI,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC;QAClF,OAAO,SAAS,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,SAAS;IAC7D;AAEA,IAAA,qBAAqB,CAAC,SAA6B,EAAA;QAC/C,IAAI,oBAA0B,EAC1B,eAAwB,EACxB,iBAAyB,EACzB,gBAAgB,GAAG,SAAS,CAAC,gBAAgB;AAEjD,QAAA,IAAI,SAAS,CAAC,SAAS,KAAK,CAAC,EAAE;YAC3B,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC;YAClE,iBAAiB,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC;AAC9C,YAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACpF;AAAO,aAAA,IAAI,SAAS,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;YACnC,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACnE,iBAAiB,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC;AAC9C,YAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC;QACpF;aAAO;AACH,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;gBAClB,eAAe,GAAG,EAAE;AACpB,gBAAA,oBAAoB,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS;gBAChD,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBACjE,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;gBACjE,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACnE,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;AACjE,gBAAA,SAAS,CAAC,KAAK,GAAG,eAAe;YACrC;iBAAO;AACH,gBAAA,oBAAoB,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS;AAChD,gBAAA,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC;gBAC/E,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;gBACnE,iBAAiB,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC;AAC9C,gBAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC;gBAChF,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClE,iBAAiB,GAAG,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC;AAC9C,gBAAA,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,oBAAoB,CAAC;YACpF;QACJ;IACJ;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE;IAClC;AAEA,IAAA,KAAK,CAAC,SAAiB,EAAA;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;IACrC;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC5B;8GA1JS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;;MCwBY,kBAAkB,CAAA;IAE3B,WAAA,CAAoB,eAAgC,EAAU,IAAW,EAAA;QAArD,IAAA,CAAA,eAAe,GAAf,eAAe;QAA2B,IAAA,CAAA,IAAI,GAAJ,IAAI;QAezD,IAAA,CAAA,eAAe,GAAG,IAAI;QAEtB,IAAA,CAAA,UAAU,GAAG,IAAI;QAIjB,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,eAAe,GAAa,KAAK;QACjC,IAAA,CAAA,eAAe,GAAa,KAAK;QACjC,IAAA,CAAA,UAAU,GAAa,KAAK;AAG3B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;QAE9C,IAAA,CAAA,KAAK,GAAiB,EAAE;QACxB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QAGpB,IAAA,CAAA,IAAI,GAAiB,OAAO;QAC5B,IAAA,CAAA,SAAS,GAAG,CAAC;QAEZ,IAAA,CAAA,cAAc,GAAG,KAAK;QACtB,IAAA,CAAA,MAAM,GAAG,KAAK;IAvCtB;AAkDA,IAAA,OAAO,QAAQ,CAAC,SAAe,EAAE,CAAS,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,EACtB,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACV,YAAA,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACxC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1C;AACA,QAAA,OAAO,KAAK;IAChB;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI;QAC9B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,UAAU;QAEpD,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;YAC7D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB;QAC/D;aAAO;AACH,YAAA,MAAM,gBAAgB,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC;AAC9C,YAAA,IAAI,CAAC,cAAc,GAAG,UAAS,IAAU,EAAA;AACrC,gBAAA,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAE,EAAE;AAC/D,YAAA,CAAC;QACL;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;YACnE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB;QAC3E;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,oBAAoB,GAAG,UAAS,IAAU,EAAA;AAC3C,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAE,EAAE;AAC7D,YAAA,CAAC;QACL;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE;YAC/D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,oBAAoB;QAC9D;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,UAAS,IAAU,EAAA;AAClC,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAE,EAAE;AAC9D,YAAA,CAAC;QACL;QAEA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAElB,QAAA,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,SAAS,CAAC,WAAW,IAAG;YACvH,IAAI,CAAC,WAAW,EAAE;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAK;YAC1F,IAAI,CAAC,YAAY,EAAE;AACvB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,IAAG;AACrF,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AAAO,iBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC9E,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,wCAAwC,EAAE;AAC/C,YAAA,IAAI,CAAC,wCAAwC,CAAC,WAAW,EAAE;AAC3D,YAAA,IAAI,CAAC,wCAAwC,GAAG,SAAS;QAC7D;AAEA,QAAA,IAAI,IAAI,CAAC,8BAA8B,EAAE;AACrC,YAAA,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,8BAA8B,GAAG,SAAS;QACnD;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;AAEA,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;AAChD,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,YAAY,EAAE;YACrD,IAAI,CAAC,YAAY,EAAE;QACvB;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;QACxC,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,YAAY;QACzD;IACJ;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;QAC/E,IAAI,EAAE,GAAG,IAAI;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AACxB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAG,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAC9C;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,iBAAiB,CAAC,MAAW,EAAA;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACxB;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACxB;AAEA,IAAA,IAAI,CAAC,SAAiB,EAAA;AAClB,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACtB,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AACvF,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC;QACrD;QACA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;IAC/B;AAEA,IAAA,gBAAgB,CAAC,IAAU,EAAA;QACvB,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACtC;QAEA,OAAO;YACH,IAAI;AACJ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAChC,YAAA,SAAS,EAAE,KAAK;YAChB;SACH;IACL;AAEA,IAAA,WAAW,CAAC,SAAe,EAAA;AACvB,QAAA,MAAM,SAAS,GAAG,SAAS,EACvB,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,EAC1B,KAAK,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QAE9D,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;QACxD,MAAM,IAAI,GAAoB,EAAE;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK;AACpD,YAAA,IAAI,CAAC,CAAC,CAAC,GAAG,UAAU;QACxB;QAEA,MAAM,UAAU,GAAa,EAAE;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC5D;QACA,OAAO;AACH,YAAA,KAAK,EAAE,IAAI;YACX;SACH;IACL;AAEA,IAAA,iBAAiB,CAAC,IAAmB,EAAA;QACjC,IAAI,SAAS,GAAG,EAAE;AAElB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,SAAS,GAAG,gCAAgC;YAChD;iBAAO;gBACH,SAAS,GAAG,8BAA8B;YAC9C;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,oBAAoB;QACrC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,mBAAmB;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,YAAY;QAC7B;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,oBAAoB;QACrC;AACA,QAAA,OAAO,SAAS;IACpB;AAEA,IAAA,QAAQ,CAAC,WAAiB,EAAA;AACtB,QAAA,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,EAClC,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,EAC9B,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpD,QAAA,UAAU,GAAG,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,MAAM,EAAE,EAC7D,6BAA6B,GAAG,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,EAC/E,SAAS,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;AAEnD,QAAA,IAAI,6BAA6B,GAAG,CAAC,EAAE;YACnC,SAAS,CAAC,OAAO,CAAC,CAAC,6BAA6B,GAAG,CAAC,CAAC;QACzD;QAEA,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC7C,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;QAEvC,OAAO;AACH,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,OAAO,EAAE;SACZ;IACL;IAEA,YAAY,GAAA;QACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EACpB,WAAW,GAAG,IAAI,CAAC,WAAW,EAC9B,GAAG,GAAG,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAC1C,SAAS,GAAG,KAAK,CAAC,SAAS,EAC3B,OAAO,GAAG,KAAK,CAAC,OAAO,EACvB,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAC3F,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EACnF,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAC1C,MAAM,GAAG,QAAQ,EACjB,GAAG,GAAG,MAAM;AAEhB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;AACzB,gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;YACxB;QACJ;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,EACxB,cAAc,GAAG,KAAK,CAAC,SAAS,EAChC,YAAY,GAAG,KAAK,CAAC,OAAO;YAEhC,IAAI,iBAAyB,EACzB,eAAuB;AAC3B,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,iBAAiB,GAAG,cAAc,CAAC,OAAO,EAAE;AAC5C,gBAAA,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE;YAC5C;iBAAO;gBACH,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC/G,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/G;YAEA,IAAI,eAAe,IAAI,YAAY,IAAI,iBAAiB,IAAI,UAAU,EAAE;gBACpE;YACJ;YAEA,IAAI,mBAA2B,EAC3B,iBAAyB;AAE7B,YAAA,IAAI,iBAAiB,GAAG,YAAY,EAAE;gBAClC,mBAAmB,GAAG,CAAC;YAC3B;iBAAO;gBACH,mBAAmB,GAAG,CAAC,iBAAiB,GAAG,YAAY,IAAI,MAAM;YACrE;AAEA,YAAA,IAAI,eAAe,GAAG,UAAU,EAAE;gBAC9B,iBAAiB,GAAG,CAAC,UAAU,GAAG,YAAY,IAAI,MAAM;YAC5D;iBAAO;gBACH,iBAAiB,GAAG,CAAC,eAAe,GAAG,YAAY,IAAI,MAAM;YACjE;YAEA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;AACnD,YAAA,OAAO,KAAK,GAAG,QAAQ,EAAE;AACrB,gBAAA,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI;gBAC5B,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM;gBAClC,IAAI,QAAQ,EAAE;AACV,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB;qBAAO;oBACH,QAAQ,GAAG,EAAE;AACb,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACpB,oBAAA,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,QAAQ;gBAClC;gBACA,KAAK,IAAI,CAAC;YACd;QACJ;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5B,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnB,gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YAC3C;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,YAAY,GAAG,KAAK;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5B,gBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnB,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;oBAC5B,YAAY,GAAG,IAAI;oBACnB;gBACJ;YACJ;AAEA,YAAA,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE;AACnC,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACrB,oBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;AACpC,oBAAA,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAChC,oBAAA,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/B,iBAAA,CAAC;YACN;QACJ;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3C;IAEA,QAAQ,GAAA;AACJ,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAC7C,IAAI,GAAG,oBAAoB,CAAC,OAAO,EAAE,EACrC,KAAK,GAAG,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EACrE,IAAI,GAAG,oBAAoB,CAAC,WAAW,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAC/E,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;IACvC;IAEQ,YAAY,CAAC,MAAc,EAAE,MAAc,EAAA;AAC/C,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;AACf,YAAA,OAAO,CAAC;QACZ;AAAO,aAAA,IAAI,MAAM,CAAC,MAAM,EAAE;YACtB,OAAO,CAAC,CAAC;QACb;aAAO;AACH,YAAA,QAAQ,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE;QACnE;IACJ;AAEA,IAAA,MAAM,CAAC,QAAuB,EAAA;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACb;QACJ;QAEA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAC9B,MAAM,GAAG,QAAQ,CAAC,MAAM;AAE5B,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EACjD,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EACtD,YAAY,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAC7C,WAAW,GAAG,mBAAmB,CAAC,WAAW,EAAE,EAC/C,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,EACvC,YAAY,GAAG,YAAY,CAAC,WAAW,EAAE;YAC7C,IAAI,SAAS,GAAG,CAAC;AAEjB,YAAA,IAAI,WAAW,KAAK,YAAY,EAAE;AAC9B,gBAAA,IAAI,YAAY,KAAK,aAAa,EAAE;AAChC,oBAAA,SAAS,GAAG,YAAY,GAAG,aAAa,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrD;YACJ;iBAAO;AACH,gBAAA,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC;YACnD;AAEA,YAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC;AACjD,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,gBAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAC7C,MAAM,GAAG,QAAQ,EACjB,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC;AAExP,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;AAC5B,oBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;gBAC7B;gBAEA,IAAI,qBAAqB,IAAI,CAAC,IAAI,qBAAqB,GAAG,EAAE,EAAE;AAC1D,oBAAA,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,GAAG,IAAI;AAC5C,oBAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,qBAAqB,CAAC;gBACpD;YACJ;iBAAO;AACH,gBAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1B,gBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAC7B;QACJ;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAC,CAAC;IAC/F;AAEA,IAAA,SAAS,CAAC,SAAiB,EAAA;AACvB,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QAC3B;AAAO,aAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;QAC3B;IACJ;IAEA,iBAAiB,CAAC,oBAA0B,EAAE,IAAgB,EAAA;QAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EACxD,KAAK,GAAG,IAAI,IAAI,EAAE,EAClB,MAAM,GAAG,QAAQ,EACjB,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,EACzQ,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC;AAElO,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;QAClC;AAEA,QAAA,IAAI,qBAAqB,IAAI,CAAC,IAAI,qBAAqB,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE;YACrJ,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,GAAG,IAAI;YACjD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;QACzD;aAAO;AACH,YAAA,IAAI,CAAC,YAAY,GAAG,SAAS;QACjC;QAEA,IAAI,oBAAoB,IAAI,CAAC,IAAI,oBAAoB,GAAG,EAAE,EAAE;YACxD,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,GAAG,IAAI;QACnD;IACJ;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;8GA5gBS,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,8hCC7B/B,s7MA2HM,EAAA,MAAA,EAAA,CAAA,+0CAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FD9FO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,cAGT,KAAK,EAAA,QAAA,EAAA,s7MAAA,EAAA,MAAA,EAAA,CAAA,+0CAAA,CAAA,EAAA;;sBAQhB,SAAS;uBAAC,iBAAiB;;sBAE3B;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;ME/BQ,2BAA2B,CAAA;IAUpC,WAAA,CAAY,EAAa,EAAU,MAAc,EAAA;QAAd,IAAA,CAAA,MAAM,GAAN,MAAM;AAP/B,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAU;QAKvC,IAAA,CAAA,gBAAgB,GAAW,KAAK;AAGpC,QAAA,IAAI,CAAC,OAAO,GAAG,EAAE;IACrB;AAEA,IAAA,WAAW,CAAC,OAAqB,EAAA;AAC7B,QAAA,IAAI,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;QAC1C,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,IAAI,YAAY,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;YAC5I,MAAM,EAAE,GAAE,IAAI;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;gBACjB,EAAE,CAAC,aAAa,CAAC,SAAS,GAAG,YAAY,CAAC,YAAY;AAC1D,YAAA,CAAC,CAAC;QACN;IACJ;IAEA,eAAe,GAAA;AACX,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACtG,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACjC,YAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;QAC/C;QAEA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;AAC1C,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC5B,IAAI,EAAE,GAAG,IAAI;YACb,IAAI,CAAC,OAAO,GAAG,YAAA;gBACX,IAAG,EAAE,CAAC,YAAY,IAAI,aAAa,CAAC,SAAS,EAAE;AAC3C,oBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;gBAC1C;AACJ,YAAA,CAAC;AACD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAC5B,aAAa,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;QAC1D;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC9D,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;QACjC;IACJ;8GAhDS,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAd1B,CAAA;;;;AAIT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAUQ,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAhBvC,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,QAAA,EACtB,CAAA;;;;AAIT,IAAA,CAAA,EAAA,aAAA,EAOc,iBAAiB,CAAC,IAAI,EAAA,UAAA,EACzB,KAAK,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA;;sBAGhB;;sBACA;;sBACA;;;MCcQ,iBAAiB,CAAA;AAE1B,IAAA,WAAA,CAAoB,eAAgC,EAAU,GAAe,EAAU,IAAY,EAAA;QAA/E,IAAA,CAAA,eAAe,GAAf,eAAe;QAA2B,IAAA,CAAA,GAAG,GAAH,GAAG;QAAsB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAM5D,IAAA,CAAA,KAAK,GAAG,IAAI;QAiBlC,IAAA,CAAA,UAAU,GAAG,IAAI;QAIjB,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,YAAY,GAAG,CAAC;AAUf,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAiB;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;QAErC,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,IAAA,CAAA,KAAK,GAAgB,EAAE;QACvB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QAEpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,IAAI,GAAiB,MAAM;QAE1B,IAAA,CAAA,MAAM,GAAG,KAAK;IAlDtB;IA+DA,OAAO,iBAAiB,CAAC,SAAe,EAAE,SAAiB,EAAE,OAAe,EAAE,YAAoB,EAAA;AAC9F,QAAA,MAAM,KAAK,GAAqB,EAAE,EAC9B,WAAW,GAAG,CAAC,EACf,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE;QACrC,IAAI,QAAQ,EACR,OAAO;AAEX,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YAClB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC;YACvC,OAAO,GAAG,EAAE;QAChB;aAAO;YACH,QAAQ,GAAG,CAAC;YACZ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,CAAC;QAC3C;AAEA,QAAA,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE;AACzD,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAQ,IAAI,OAAO,EAAE;gBACvD,MAAM,GAAG,GAAmB,EAAE;AAC9B,gBAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;oBACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBAC1C,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC;AAC3C,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC;oBAC/B,GAAG,CAAC,IAAI,CAAC;AACL,wBAAA,MAAM,EAAE,EAAE;wBACV;AACH,qBAAA,CAAC;gBACN;AACA,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACnB;QACJ;AACA,QAAA,OAAO,KAAK;IAChB;AAEA,IAAA,OAAO,QAAQ,CAAC,SAAe,EAAE,CAAS,EAAA;AACtC,QAAA,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,EACtB,OAAO,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,CAAC,EAAE;AACV,YAAA,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG;gBACT,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;AACjC,gBAAA,MAAM,EAAE,EAAE;AACV,gBAAA,SAAS,EAAE;aACd;YACD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1C;AACA,QAAA,OAAO,KAAK;IAChB;AAEQ,IAAA,OAAO,yBAAyB,CAAC,MAAqB,EAAE,MAAqB,EAAA;AACjF,QAAA,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;IAClD;AAEQ,IAAA,OAAO,cAAc,CAAC,aAA8B,EAAE,IAAY,EAAE,SAAiB,EAAA;AACzF,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,SAAS,EAC9B,KAAK,GAAG,IAAI,KAAK,CAAC,SAAS,CAAC;;QAGhC,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,KAAI;AAClC,YAAA,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC5C,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE;YACnC,KAAK,CAAC,CAAC,CAAC,GAAG;AACP,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,MAAM,EAAE;aACX;QACL;AACA,QAAA,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW;AAC5D,YAAA,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;gBACzD,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B,KAAK,IAAI,CAAC;YACd;QACJ;QAEA,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,GAAG,EAAE;AACZ,YAAA,IAAI,KAAK,GAA2B,aAAa,CAAC,CAAC,CAAC;AACpD,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACtB,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC;AACxC,gBAAA,KAAK,CAAC,aAAa,GAAG,aAAa;AACnC,gBAAA,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC;AAC1B,gBAAA,OAAO,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE;oBAC/B,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW;AAC5D,oBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;wBACzD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;AAC1B,4BAAA,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI;AAC9B,4BAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gCACrB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM;AACnD,gCAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE;oCAC1C,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,oCAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnC,wCAAA,kBAAkB,CAAC,aAAa,GAAG,aAAa;AAChD,wCAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;oCACvC;gCACJ;4BACJ;wBACJ;wBACA,KAAK,IAAI,CAAC;oBACd;gBACJ;YACJ;YACA,CAAC,IAAI,CAAC;QACV;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI;QAC9B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,UAAU;AAEpD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY;QACpE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE;YAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB;QACrE;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,eAAe,GAAG,UAAU,IAAU,EAAA;AACvC,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC,IAAE,EAAE;AACrE,YAAA,CAAC;QACL;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE;YAC9D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB;QAC7D;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,IAAU,EAAA;AACnC,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,IAAE,EAAE;AAC7D,YAAA,CAAC;QACL;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE;YACnE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB;QAC5E;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,IAAU,EAAA;AAC7C,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAE,EAAE;AAC9D,YAAA,CAAC;QACL;QAEA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAClD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAElB,QAAA,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,SAAS,CAAC,WAAW,IAAG;YACvH,IAAI,CAAC,WAAW,EAAE;AACtB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAK;YAC1F,IAAI,CAAC,YAAY,EAAE;AACvB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,IAAG;AACrF,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AAAO,iBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC9E,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;QAC/E,IAAI,EAAE,GAAG,IAAI;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AACxB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAG,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAC9C;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,kCAAkC,CAAC,CAAC,gBAAgB,CAAC,uBAAuB,CAAC;YACtI,MAAM,EAAE,GAAG,IAAI;YACf,UAAU,CAAC,MAAK;AACZ,gBAAA,EAAE,CAAC,kBAAkB,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS;YACjF,CAAC,EAAE,EAAE,CAAC;QACV;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC,EAAE;AAChI,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY;AACpE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACtD;AAEA,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;AAChD,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,YAAY,EAAE;YACrD,IAAI,CAAC,YAAY,EAAE;QACvB;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;QACxC,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,YAAY;QACzD;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,wCAAwC,EAAE;AAC/C,YAAA,IAAI,CAAC,wCAAwC,CAAC,WAAW,EAAE;AAC3D,YAAA,IAAI,CAAC,wCAAwC,GAAG,SAAS;QAC7D;AAEA,QAAA,IAAI,IAAI,CAAC,8BAA8B,EAAE;AACrC,YAAA,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,8BAA8B,GAAG,SAAS;QACnD;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;IACJ;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACxB;AAEA,IAAA,IAAI,CAAC,SAAiB,EAAA;AAClB,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB;QACJ;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AACnF,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC;QAC7C,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACtB;IAEQ,mBAAmB,GAAA;QACvB,MAAM,gBAAgB,GAAa,EAAE;QACrC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE;;AAE7E,YAAA,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE;gBAC9E,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC3D;iBAAO;gBACH,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvF;QACJ;AACA,QAAA,OAAO,gBAAgB;IAC3B;AAEA,IAAA,WAAW,CAAC,SAAe,EAAA;QACvB,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;AACtD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACxB,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D;QAEA,OAAO;AACH,YAAA,IAAI,EAAE,iBAAiB,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;YACrG;SACH;IACL;AAEA,IAAA,QAAQ,CAAC,WAAiB,EAAA;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,EAClC,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,EAC9B,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,EAC5B,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE;AAC9B,QAAA,IAAI,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe;AAE3C,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAChB,UAAU,IAAI,CAAC;QACnB;;AAGA,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,UAAU,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACrE,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAEpE,OAAO;AACH,YAAA,SAAS,EAAE,cAAc;YACzB;SACH;IACL;IAEA,YAAY,GAAA;QACR,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAChC,GAAG,GAAG,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAC1C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAC5B,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAC3F,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EACnF,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,EACxC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAC1C,OAAO,GAAG,OAAO,EACjB,MAAM,GAAG,QAAQ;;AAEjB,QAAA,GAAG,GAAG,KAAK,EACX,kBAAkB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EACvD,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EACnD,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY;AACpC,QAAA,IAAI,kBAAkB,GAAG,KAAK,EAC1B,kBAAkB,GAAG,KAAK;AAE9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3B,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE;AACpB,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;QAC7B;AAEA,QAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AACjC,YAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;gBACjD,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,EAAE;YAC/B;QACJ;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS;AACtC,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO;YAElC,IAAI,iBAAyB,EACzB,eAAuB;AAE3B,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,iBAAiB,GAAG,cAAc,CAAC,OAAO,EAAE;AAC5C,gBAAA,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE;YAC5C;iBAAO;gBACH,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC/G,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC/G;AAEA,YAAA,IAAI,eAAe,IAAI,YAAY,IAAI,iBAAiB,IAAI,UAAU,IAAI,cAAc,IAAI,YAAY,EAAE;gBACtG;YACJ;AAEA,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBACd,kBAAkB,GAAG,IAAI;AAEzB,gBAAA,IAAI,gBAAwB;AAC5B,gBAAA,IAAI,iBAAiB,IAAI,YAAY,EAAE;oBACnC,gBAAgB,GAAG,CAAC;gBACxB;qBAAO;AACH,oBAAA,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,YAAY,IAAI,MAAM,CAAC;gBAC9E;AAEA,gBAAA,IAAI,cAAsB;AAC1B,gBAAA,IAAI,eAAe,IAAI,UAAU,EAAE;AAC/B,oBAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,YAAY,IAAI,MAAM,CAAC;gBACrE;qBAAO;AACH,oBAAA,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,eAAe,GAAG,YAAY,IAAI,MAAM,CAAC;gBAC1E;AAEA,gBAAA,MAAM,kBAAkB,GAAkB;oBACtC,KAAK;AACL,oBAAA,UAAU,EAAE,gBAAgB;AAC5B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,SAAS,EAAE,CAAC;AACZ,oBAAA,QAAQ,EAAE;iBACb;gBAED,IAAI,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM;gBAC7C,IAAI,QAAQ,EAAE;AACV,oBAAA,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;gBACrC;qBAAO;oBACH,QAAQ,GAAG,EAAE;AACb,oBAAA,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjC,oBAAA,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,QAAQ;gBAC7C;AACA,gBAAA,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,GAAG,IAAI;YAC3C;iBAAO;gBACH,kBAAkB,GAAG,IAAI;AAEzB,gBAAA,IAAI,mBAA2B;AAC/B,gBAAA,IAAI,iBAAiB,GAAG,YAAY,EAAE;oBAClC,mBAAmB,GAAG,CAAC;gBAC3B;qBAAO;AACH,oBAAA,mBAAmB,GAAG,CAAC,iBAAiB,GAAG,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY;gBAC/K;AAEA,gBAAA,IAAI,iBAAyB;AAC7B,gBAAA,IAAI,eAAe,GAAG,UAAU,EAAE;AAC9B,oBAAA,iBAAiB,GAAG,CAAC,UAAU,GAAG,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY;gBACjF;qBAAO;AACH,oBAAA,iBAAiB,GAAG,CAAC,eAAe,GAAG,MAAM,GAAG,YAAY,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY;gBAChL;AAEA,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAC9C,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;AACjD,gBAAA,IAAI,aAAa,GAAG,UAAU,GAAG,OAAO,EACpC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,EAC3C,QAAQ,GAAG,QAAQ,GAAG,OAAO,EAC7B,WAAW,GAAG,CAAC,EACf,SAAS,GAAG,CAAC;AAEjB,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACtB,oBAAA,IAAI,aAAa,GAAG,kBAAkB,EAAE;wBACpC,WAAW,GAAG,CAAC;oBACnB;yBAAO;AACH,wBAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;oBACjF;gBACJ;AAEA,gBAAA,GAAG;oBACC,QAAQ,IAAI,OAAO;AACnB,oBAAA,IAAI,WAAmB;AACvB,oBAAA,IAAI,QAAQ,GAAG,QAAQ,EAAE;wBACrB,WAAW,GAAG,OAAO;oBACzB;yBAAO;AACH,wBAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;4BACvB,WAAW,GAAG,OAAO;wBACzB;6BAAO;AACH,4BAAA,WAAW,GAAG,QAAQ,GAAG,OAAO;wBACpC;AACA,wBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACtB,4BAAA,IAAI,WAAW,GAAG,gBAAgB,EAAE;gCAChC,SAAS,GAAG,CAAC;4BACjB;iCAAO;AACH,gCAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAAC;4BAC3E;wBACJ;oBACJ;AACA,oBAAA,IAAI,aAAa,GAAG,kBAAkB,EAAE;wBACpC,aAAa,GAAG,CAAC;oBACrB;yBAAO;wBACH,aAAa,IAAI,kBAAkB;oBACvC;AACA,oBAAA,IAAI,WAAW,GAAG,gBAAgB,EAAE;wBAChC,WAAW,GAAG,gBAAgB;oBAClC;oBACA,WAAW,IAAI,kBAAkB;AAEjC,oBAAA,IAAI,aAAa,GAAG,WAAW,EAAE;AAC7B,wBAAA,MAAM,YAAY,GAAG;4BACjB,KAAK;AACL,4BAAA,UAAU,EAAE,aAAa;AACzB,4BAAA,QAAQ,EAAE,WAAW;4BACrB,WAAW;4BACX,SAAS;AACT,4BAAA,QAAQ,EAAE;yBACb;wBACD,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM;wBACnD,IAAI,QAAQ,EAAE;AACV,4BAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;wBAC/B;6BAAO;4BACH,QAAQ,GAAG,EAAE;AACb,4BAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;4BAC3B,IAAI,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,QAAQ;wBACnD;AACA,wBAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,IAAI;oBACnC;oBACA,aAAa,GAAG,CAAC;oBACjB,WAAW,GAAG,CAAC;oBACf,QAAQ,IAAI,CAAC;AACjB,gBAAA,CAAC,QAAQ,QAAQ,GAAG,QAAQ;YAChC;QACJ;QAEA,IAAI,kBAAkB,EAAE;AACpB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;gBACjC,IAAI,aAAa,GAAoB,EAAE;AACvC,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;oBACjD,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACxB,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;AACxE,wBAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;oBAChE;gBACJ;AACA,gBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBACnC;YACJ;QACJ;QAEA,IAAI,kBAAkB,EAAE;YACpB,IAAI,mBAAmB,GAAoB,EAAE;AAC7C,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AACjC,gBAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE;AACnB,oBAAA,mBAAmB,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;gBACvE;YACJ;AACA,YAAA,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;AAChC,gBAAA,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC;YAC/C;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,YAAY;AAChB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnB,oBAAA,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;oBACvB;gBACJ;YACJ;YAEA,IAAI,YAAY,EAAE;gBACd,IAAI,QAAQ,GAAG,KAAK;AACpB,gBAAA,IAAI,IAAI,CAAC,YAAY,EAAE;oBACnB,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;gBACnD;AAEA,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;oBACrB,YAAY,EAAE,YAAY,CAAC,IAAI;AAC/B,oBAAA,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;oBAC7C;AACH,iBAAA,CAAC;YACN;QACJ;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAE5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC/E,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3C;IAEA,QAAQ,GAAA;AACJ,QAAA,MAAM,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC/D,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IAC3C;AAEA,IAAA,iBAAiB,CAAC,IAAsB,EAAA;QACpC,IAAI,SAAS,GAAG,EAAE;AAElB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,GAAG,qBAAqB;QACrC;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,mBAAmB;QACpC;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,SAAS,EAAE;gBACX,SAAS,IAAI,GAAG;YACpB;YACA,SAAS,IAAI,kBAAkB;QACnC;AAEA,QAAA,OAAO,SAAS;IACpB;IAEA,MAAM,CAAC,YAAkB,EAAE,MAAuB,EAAA;QAC9C,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACrB,YAAY;AACZ,YAAA,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAChC;AACH,SAAA,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,aAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACrC,QAAA,iBAAiB,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;IACnF;AAEA,IAAA,iBAAiB,CAAC,aAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;IACzC;IAEA,OAAO,CAAC,MAAqB,EAAE,MAAqB,EAAA;AAChD,QAAA,IAAI,UAAU,GAAG,MAAM,EACnB,SAAS,GAAG,MAAM;QACtB,IAAI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE;YAC/H,UAAU,GAAG,MAAM;YACnB,SAAS,GAAG,MAAM;QACtB;QAEA,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE;AAC7C,YAAA,OAAO,KAAK;QAChB;aAAO;YACH,OAAO,EAAE,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,KAAK,CAAC,IAAI,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;QAChI;IACJ;AAEA,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EACrB,WAAW,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC;QAChC,IAAI,SAAS,GAAG,CAAC;AAEjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,IAAI,GAAW;AACf,YAAA,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;AACrC,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;YAC5B;AACA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBACpC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI;gBAC1C;YACJ;AACA,YAAA,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;oBACnB;gBACJ;YACJ;AACA,YAAA,IAAI,GAAG,GAAG,SAAS,EAAE;AACjB,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG;YAC5B;iBAAO;gBACH,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,EAAE;YACpC;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACpB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ;YAC3D;QACJ;IACJ;IAEA,iBAAiB,CAAC,oBAA0B,EAAE,IAAe,EAAA;QACzD,MAAM,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,EACxD,KAAK,GAAG,IAAI,IAAI,EAAE,EAClB,MAAM,GAAG,QAAQ,EACjB,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC,EACzQ,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC;AAElO,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;YAC3B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;QAClC;AAEA,QAAA,IAAI,qBAAqB,IAAI,CAAC,IAAI,qBAAqB,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE;YAC5E,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,GAAG,IAAI;QACrD;QAEA,IAAI,oBAAoB,IAAI,CAAC,IAAI,oBAAoB,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,GAAG,IAAI;QACnD;IACJ;AAEA,IAAA,WAAW,CAAC,QAA0B,EAAA;AAClC,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,EAC9B,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAC/C,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAC3C,MAAM,GAAG,QAAQ,EACjB,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,WAAW,EAAE,EAAE,oBAAoB,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,OAAO,EAAE,CAAC,IAAI,MAAM,CAAC;AAExP,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC;AAEjD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3B,YAAA,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK;QAC7B;QAEA,IAAI,qBAAqB,IAAI,CAAC,IAAI,qBAAqB,GAAG,CAAC,EAAE;AACzD,YAAA,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,GAAG,IAAI;QAChD;QAEA,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAC,CAAC;IACpH;AAEA,IAAA,iBAAiB,CAAC,cAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,cAAc;IAC5C;8GAlwBS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,0kDC/C9B,03LA4FM,EAAA,MAAA,EAAA,CAAA,4vGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FD7CO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,aAAA,EAGL,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,03LAAA,EAAA,MAAA,EAAA,CAAA,4vGAAA,CAAA,EAAA;;sBAQhB,SAAS;uBAAC,gBAAgB;;sBAE1B,WAAW;uBAAC,gBAAgB;;sBAE5B;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;;ME7CQ,gBAAgB,CAAA;AACzB,IAAA,WAAA,CAAoB,eAAgC,EAAU,GAAe,EAAU,IAAY,EAAA;QAA/E,IAAA,CAAA,eAAe,GAAf,eAAe;QAA2B,IAAA,CAAA,GAAG,GAAH,GAAG;QAAsB,IAAA,CAAA,IAAI,GAAJ,IAAI;QAK7D,IAAA,CAAA,KAAK,GAAG,IAAI;QAkBjC,IAAA,CAAA,GAAG,GAAG,EAAE;QACR,IAAA,CAAA,YAAY,GAAG,CAAC;QAEhB,IAAA,CAAA,eAAe,GAAa,KAAK;QACjC,IAAA,CAAA,eAAe,GAAa,KAAK;QACjC,IAAA,CAAA,UAAU,GAAa,KAAK;AAQ3B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,CAAS,IAAI,CAAC;QAEzC,IAAA,CAAA,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACpC,IAAA,CAAA,KAAK,GAAe,EAAE;QACtB,IAAA,CAAA,gBAAgB,GAAG,CAAC;QACpB,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,IAAI,GAAiB,KAAK;QAGzB,IAAA,CAAA,MAAM,GAAG,KAAK;QACd,IAAA,CAAA,cAAc,GAAG,IAAI;IAjDyE;IA6DtG,OAAO,iBAAiB,CAAC,SAAe,EAAE,SAAiB,EAAE,OAAe,EAAE,YAAoB,EAAA;AAC9F,QAAA,MAAM,IAAI,GAAkB,EAAE,EAC1B,WAAW,GAAG,CAAC,EACf,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE;AACrC,QAAA,IAAI,IAAU,EAAE,QAAQ,EAAE,OAAO;AAEjC,QAAA,IAAI,YAAY,GAAG,CAAC,EAAE;YAClB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC;YACvC,OAAO,GAAG,EAAE;QAChB;aAAO;YACH,QAAQ,GAAG,CAAC;YACZ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,CAAC;QAC3C;AAEA,QAAA,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE;AACzD,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAQ,IAAI,OAAO,EAAE;gBACvD,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACpC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,EAAE,QAAQ,CAAC;AAC3C,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC;oBACN,IAAI;AACJ,oBAAA,MAAM,EAAE,EAAE;oBACV,qBAAqB,EAAE,IAAI,GAAG;AACjC,iBAAA,CAAC;YACN;QACJ;AACA,QAAA,OAAO,IAAI;IACf;AAEQ,IAAA,OAAO,yBAAyB,CAAC,MAAqB,EAAE,MAAqB,EAAA;AACjF,QAAA,OAAO,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW;IAClD;AAEQ,IAAA,OAAO,cAAc,CAAC,aAA8B,EAAE,IAAY,EAAE,SAAiB,EAAA;AACzF,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,SAAS,EAC9B,KAAK,GAAuD,IAAI,KAAK,CAAC,SAAS,CAAC;;QAGpF,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,KAAI;AAClC,YAAA,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAC5C,QAAA,CAAC,CAAC;AACF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE;YACnC,KAAK,CAAC,CAAC,CAAC,GAAG;AACP,gBAAA,UAAU,EAAE,KAAK;AACjB,gBAAA,MAAM,EAAE;aACX;QACL;AACA,QAAA,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM;AAChC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;YAC9B,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW;AAC5D,YAAA,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;gBACzD,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/B,KAAK,IAAI,CAAC;YACd;QACJ;QAEA,IAAI,CAAC,GAAG,CAAC;AACT,QAAA,OAAO,CAAC,GAAG,GAAG,EAAE;AACZ,YAAA,IAAI,KAAK,GAA8B,aAAa,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACtB,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC;AACxC,gBAAA,KAAK,CAAC,aAAa,GAAG,aAAa;AACnC,gBAAA,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC;gBAC1B,QAAQ,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG;oBACjC,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC,WAAW;AAC5D,oBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE;wBACzD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE;AAC1B,4BAAA,KAAK,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI;AAC9B,4BAAA,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE;gCACrB,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM;AACnD,gCAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,IAAI,CAAC,EAAE;oCAC1C,MAAM,kBAAkB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,oCAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE;AACnC,wCAAA,kBAAkB,CAAC,aAAa,GAAG,aAAa;AAChD,wCAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC;oCACvC;gCACJ;4BACJ;wBACJ;wBACA,KAAK,IAAI,CAAC;oBACd;gBACJ;YACJ;YACA,CAAC,IAAI,CAAC;QACV;IACJ;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QAC3B;AACA,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI;QAC9B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,eAAe;QACzD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,UAAU;AAEpD,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY;QACpE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;YAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB;QAC5D;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU,IAAU,EAAA;AACnC,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC9D,YAAA,CAAC;QACL;QAEA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,uBAAuB,EAAE;YAClE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB;QAC3E;aAAO;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,qBAAqB,GAAG,UAAU,IAAU,EAAA;AAC7C,gBAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE;AAChE,YAAA,CAAC;QACL;QAEA,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAElD,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAElB,QAAA,IAAI,CAAC,wCAAwC,GAAG,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,SAAS,CACxG,WAAW,IAAG;YACV,IAAI,CAAC,WAAW,EAAE;AACtB,QAAA,CAAC,CACJ;AAED,QAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAK;YAC1F,IAAI,CAAC,YAAY,EAAE;AACvB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,IAAG;AACrF,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AAAO,iBAAA,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AAC9E,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACxB,QAAA,CAAC,CAAC;IACN;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;QAC/E,IAAI,EAAE,GAAG,IAAI;AACb,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;AACxB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,YAAA;AACrC,YAAA,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAC9C;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;AAE/B,QAAA,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;AACvB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC;iBACxB,aAAa,CAAC,iCAAiC;iBAC/C,gBAAgB,CAAC,uBAAuB,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI;YACf,UAAU,CAAC,MAAK;AACZ,gBAAA,EAAE,CAAC,kBAAkB,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,SAAS;YACjF,CAAC,EAAE,EAAE,CAAC;QACV;IACJ;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd;QACJ;QACA,IACI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC;AAC3C,aAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC,EAChF;AACE,YAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY;AACpE,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;YAClB,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE;QACtD;AAEA,QAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;AAChD,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,YAAY,EAAE;YACrD,IAAI,CAAC,YAAY,EAAE;QACvB;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,eAAe,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAClD,IAAI,eAAe,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,eAAe,CAAC,YAAY;QAC9D;AAEA,QAAA,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;QACxC,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,CAAC,UAAU,CAAC,YAAY;QACzD;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,wCAAwC,EAAE;AAC/C,YAAA,IAAI,CAAC,wCAAwC,CAAC,WAAW,EAAE;AAC3D,YAAA,IAAI,CAAC,wCAAwC,GAAG,SAAS;QAC7D;AAEA,QAAA,IAAI,IAAI,CAAC,8BAA8B,EAAE;AACrC,YAAA,IAAI,CAAC,8BAA8B,CAAC,WAAW,EAAE;AACjD,YAAA,IAAI,CAAC,8BAA8B,GAAG,SAAS;QACnD;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;AAEA,QAAA,IAAI,IAAI,CAAC,wBAAwB,EAAE;AAC/B,YAAA,IAAI,CAAC,wBAAwB,CAAC,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,wBAAwB,GAAG,SAAS;QAC7C;IACJ;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,SAAS,GAAG,CAAC,IAAI,CAAC;AACnE,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IACxB;AAEA,IAAA,IAAI,CAAC,SAAiB,EAAA;AAClB,QAAA,IAAI,SAAS,KAAK,CAAC,EAAE;YACjB;QACJ;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AACvF,QAAA,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,CAAC;QACjD,IAAI,CAAC,WAAW,EAAE;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACtB;IAEQ,mBAAmB,GAAA;QACvB,MAAM,gBAAgB,GAAa,EAAE;QACrC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE;;YAE7E,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,SAAS,EAAE;AAC3E,gBAAA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC7B,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC3D;iBAAO;gBACH,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;YACpF;QACJ;AACA,QAAA,OAAO,gBAAgB;IAC3B;AAEA,IAAA,WAAW,CAAC,SAAe,EAAA;QACvB,OAAO;AACH,YAAA,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC;AACpG,YAAA,YAAY,EAAE,EAAE;YAChB,0BAA0B,EAAE,IAAI,GAAG;SACtC;IACL;AAEA,IAAA,QAAQ,CAAC,WAAiB,EAAA;QACtB,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,EAClC,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,EAC9B,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,EAC5B,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACjD,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;QAEvD,OAAO;YACH,SAAS;YACT;SACH;IACL;IAEA,YAAY,GAAA;AACR,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAChC,GAAG,GAAG,WAAW,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAC1C,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAC5B,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EAC3F,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,EACnF,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EACxC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,IAAI,EACxC,YAAY,IAA2B,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,YAAY,GAAG,EAAE,CAAC,EACtF,OAAO,GAAG,OAAO,EACjB,GAAG,GAAG,KAAK,EACX,kBAAkB,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EACvD,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;QACvD,IAAI,kBAAkB,GAAG,KAAK;AAE9B,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;AACjD,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,qBAAqB,GAAG,SAAS;QAChD;AAEA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC;AAC5B,YAAA,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS;AACtC,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO;YAClC,IAAI,iBAAyB,EAAE,eAAuB;AAEtD,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACd,gBAAA,iBAAiB,GAAG,cAAc,CAAC,OAAO,EAAE;AAC5C,gBAAA,eAAe,GAAG,YAAY,CAAC,OAAO,EAAE;YAC5C;iBAAO;gBACH,iBAAiB,GAAG,IAAI,CAAC,GAAG,CACxB,cAAc,CAAC,WAAW,EAAE,EAC5B,cAAc,CAAC,QAAQ,EAAE,EACzB,cAAc,CAAC,OAAO,EAAE,CAC3B;gBACD,eAAe,GAAG,IAAI,CAAC,GAAG,CACtB,YAAY,CAAC,WAAW,EAAE,EAC1B,YAAY,CAAC,QAAQ,EAAE,EACvB,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAC7B;YACL;AAEA,YAAA,IAAI,eAAe,IAAI,YAAY,IAAI,iBAAiB,IAAI,UAAU,IAAI,cAAc,IAAI,YAAY,EAAE;gBACtG;YACJ;AAEA,YAAA,IAAI,KAAK,CAAC,MAAM,EAAE;gBACd,YAAY,CAAC,IAAI,CAAC;oBACd;AACH,iBAAA,CAAC;YACN;iBAAO;gBACH,kBAAkB,GAAG,IAAI;AAEzB,gBAAA,IAAI,mBAA2B;AAC/B,gBAAA,IAAI,iBAAiB,GAAG,YAAY,EAAE;oBAClC,mBAAmB,GAAG,CAAC;gBAC3B;qBAAO;oBACH,mBAAmB;AACf,wBAAA,CAAC,cAAc,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY;gBAC1F;AAEA,gBAAA,IAAI,iBAAyB;AAC7B,gBAAA,IAAI,eAAe,GAAG,UAAU,EAAE;AAC9B,oBAAA,iBAAiB,GAAG,CAAC,CAAC,UAAU,GAAG,YAAY,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY;gBACnF;qBAAO;AACH,oBAAA,iBAAiB,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,YAAY;gBACtG;gBAEA,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAChD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;gBACjD,IAAI,WAAW,GAAG,CAAC;gBACnB,IAAI,SAAS,GAAG,CAAC;AACjB,gBAAA,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;AACtB,oBAAA,IAAI,UAAU,GAAG,kBAAkB,EAAE;wBACjC,WAAW,GAAG,CAAC;oBACnB;yBAAO;AACH,wBAAA,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC;oBACjF;AACA,oBAAA,IAAI,QAAQ,GAAG,gBAAgB,EAAE;wBAC7B,SAAS,GAAG,CAAC;oBACjB;yBAAO;AACH,wBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAAC;oBAC3E;gBACJ;AAEA,gBAAA,IAAI,UAAU,GAAG,kBAAkB,EAAE;oBACjC,UAAU,GAAG,CAAC;gBAClB;qBAAO;oBACH,UAAU,IAAI,kBAAkB;gBACpC;AACA,gBAAA,IAAI,QAAQ,GAAG,gBAAgB,EAAE;oBAC7B,QAAQ,GAAG,gBAAgB;gBAC/B;gBACA,QAAQ,IAAI,kBAAkB;AAE9B,gBAAA,IAAI,UAAU,GAAG,QAAQ,EAAE;AACvB,oBAAA,MAAM,YAAY,GAAkB;wBAChC,KAAK;wBACL,UAAU;wBACV,QAAQ;wBACR,WAAW;wBACX,SAAS;AACT,wBAAA,QAAQ,EAAE;qBACb;oBAED,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;oBACtC,IAAI,QAAQ,EAAE;AACV,wBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;oBAC/B;yBAAO;wBACH,QAAQ,GAAG,EAAE;AACb,wBAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3B,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,QAAQ;oBACtC;;AAGA,oBAAA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,qBAAqB,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAC9E,IAAI,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,qBAAqB;wBAC1D,IAAI,aAAa,EAAE;AACf,4BAAA,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE;AAClD,gCAAA,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;4BACzD;iCAAO;gCACH,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;4BACrD;wBACJ;6BAAO;AACH,4BAAA,aAAa,GAAG,IAAI,GAAG,EAAE;4BACzB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;AACjD,4BAAA,IAAI,CAAC,UAAU,CAAC,CAAC,qBAAqB,GAAG,aAAa;wBAC1D;oBACJ;gBACJ;YACJ;QACJ;QAEA,IAAI,kBAAkB,EAAE;YACpB,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5D,gBAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE;oBAC/C,IAAI,aAAa,GAAoB,EAAE;AAEvC,oBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;AACjD,wBAAA,IAAI,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC;wBACnE,IAAI,aAAa,EAAE;AACf,4BAAA,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9D,4BAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC;wBACvD;oBACJ;AAEA,oBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,wBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;oBACnC;gBACJ;YACJ;iBAAO;gBACH,IAAI,aAAa,GAAoB,EAAE;AACvC,gBAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE;AACjD,oBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;AACnB,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAClE,wBAAA,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;oBAC3D;gBACJ;AACA,gBAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,oBAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;gBACnC;YACJ;QACJ;QAEA,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5D,YAAA,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC;QAC7C;IACJ;AAEA,IAAA,sBAAsB,CAAC,YAAmC,EAAA;AACtD,QAAA,MAAM,yBAAyB,IAAI,IAAI,CAAC,KAAK,CACzC,IAAI,CAAC,gBAAgB,CACxB,CAAC,0BAA0B,GAAG,IAAI,GAAG,EAAiC,CAAC;AAExE,QAAA,KAAK,MAAM,kBAAkB,IAAI,YAAY,EAAE;AAC3C,YAAA,IAAI,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE;gBACnC,IAAI,yBAAyB,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;AAClE,oBAAA,yBAAyB,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;gBAC9F;qBAAO;AACH,oBAAA,yBAAyB,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC,CAAC;gBAC1F;YACJ;QACJ;IACJ;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC7B,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;QACnC;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAChD,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3C;IAEA,QAAQ,GAAA;AACJ,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAC7D,YAAY,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IACzC;IAEA,MAAM,CAAC,GAAgB,EAAE,QAAiB,EAAA;AACtC,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI;AAC7B,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM;QACvB,IAAI,QAAQ,EAAE;YACV,MAAM,GAAG,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3D;QAEA,IAAI,QAAQ,GAAG,KAAK;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QAC9C;AAEA,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YACrB,YAAY;YACZ,QAAQ;AACR,YAAA,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAChC;AACH,SAAA,CAAC;IACN;AAEA,IAAA,WAAW,CAAC,aAA8B,EAAA;AACtC,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AACrC,QAAA,gBAAgB,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;IAClF;AAEA,IAAA,iBAAiB,CAAC,aAA8B,EAAA;AAC5C,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;IACzC;IAEA,OAAO,CAAC,MAAqB,EAAE,MAAqB,EAAA;AAChD,QAAA,IAAI,UAAU,GAAG,MAAM,EACnB,SAAS,GAAG,MAAM;AACtB,QAAA,IACI,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU;AACrC,aAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,EACtF;YACE,UAAU,GAAG,MAAM;YACnB,SAAS,GAAG,MAAM;QACtB;QAEA,IAAI,UAAU,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,EAAE;AAC7C,YAAA,OAAO,KAAK;QAChB;aAAO;YACH,OAAO,EACH,UAAU,CAAC,QAAQ,GAAG,SAAS,CAAC,UAAU,KAAK,CAAC;gBAChD,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CACjE;QACL;IACJ;AAEA,IAAA,iBAAiB,CAAC,MAAuB,EAAA;AACrC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EACrB,WAAW,GAAc,IAAI,KAAK,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,SAAS,GAAG,CAAC,EACb,GAAW;AAEf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,YAAA,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;AACrC,gBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK;YAC5B;AACA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3B,gBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;oBACpC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI;gBAC1C;YACJ;AACA,YAAA,KAAK,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;AACrC,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;oBACnB;gBACJ;YACJ;AACA,YAAA,IAAI,GAAG,GAAG,SAAS,EAAE;AACjB,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG;YAC5B;iBAAO;gBACH,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,EAAE;YACpC;QACJ;AAEA,QAAA,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE;AACpB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC7B,gBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ;YAC3D;QACJ;IACJ;AAEA,IAAA,aAAa,CAAC,KAAa,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,iBAAiB,CAAC,cAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,kBAAkB,GAAG,cAAc;IAC5C;8GAhoBS,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,eAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,ygDC9C7B,k2SA+JM,EAAA,MAAA,EAAA,CAAA,gwGAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,2BAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FDjHO,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,aAAA,EAGJ,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,k2SAAA,EAAA,MAAA,EAAA,CAAA,gwGAAA,CAAA,EAAA;;sBAMhB,SAAS;uBAAC,eAAe;;sBAEzB,WAAW;uBAAC,eAAe;;sBAE3B;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;;IE4EO;AAAZ,CAAA,UAAY,IAAI,EAAA;AACZ,IAAA,IAAA,CAAA,IAAA,CAAA,aAAA,CAAA,GAAA,EAAA,CAAA,GAAA,aAAgB;AAChB,IAAA,IAAA,CAAA,IAAA,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAa;AACb,IAAA,IAAA,CAAA,IAAA,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAS;AACb,CAAC,EAJW,IAAI,KAAJ,IAAI,GAAA,EAAA,CAAA,CAAA;;AC3JhB,UAAU,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC;MAUhB,iBAAiB,CAAA;AAC1B,IAAA,IACI,WAAW,GAAA;QACX,OAAO,IAAI,CAAC,YAAY;IAC5B;IAEA,IAAI,WAAW,CAAC,GAAQ,EAAA;QACpB,IAAI,CAAC,GAAG,EAAE;AACN,YAAA,GAAG,GAAG,IAAI,IAAI,EAAE;QACpB;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,GAAG;QACvB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC;QAC9C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IACrD;AAgEA,IAAA,WAAA,CAAoB,eAA+B,EAA6B,SAAgB,EAAU,MAAc,EAAA;QAApG,IAAA,CAAA,eAAe,GAAf,eAAe;QAA6C,IAAA,CAAA,SAAS,GAAT,SAAS;QAAiB,IAAA,CAAA,MAAM,GAAN,MAAM;QA9DvG,IAAA,CAAA,WAAW,GAAY,EAAE;QACzB,IAAA,CAAA,YAAY,GAAgB,OAAO;QACnC,IAAA,CAAA,SAAS,GAAU,GAAG;QACtB,IAAA,CAAA,eAAe,GAAU,KAAK;QAC9B,IAAA,CAAA,cAAc,GAAU,eAAe;QACvC,IAAA,CAAA,eAAe,GAAU,uBAAuB;QAChD,IAAA,CAAA,gBAAgB,GAAU,WAAW;QACrC,IAAA,CAAA,uBAAuB,GAAU,OAAO;QACxC,IAAA,CAAA,gBAAgB,GAAU,IAAI;QAC9B,IAAA,CAAA,eAAe,GAAW,IAAI;QAC9B,IAAA,CAAA,gBAAgB,GAAU,CAAC;QAC3B,IAAA,CAAA,eAAe,GAAU,CAAC;QAC1B,IAAA,CAAA,WAAW,GAAU,SAAS;QAC9B,IAAA,CAAA,aAAa,GAAU,WAAW;QAClC,IAAA,CAAA,SAAS,GAAa,OAAO;AAC7B,QAAA,IAAA,CAAA,IAAI,GAAQ,IAAI,CAAC,IAAI;QACrB,IAAA,CAAA,YAAY,GAAU,EAAE;QACxB,IAAA,CAAA,UAAU,GAAW,IAAI;QAoBzB,IAAA,CAAA,GAAG,GAAU,EAAE;QACf,IAAA,CAAA,YAAY,GAAU,CAAC;QACvB,IAAA,CAAA,sBAAsB,GAAW,KAAK;QACtC,IAAA,CAAA,eAAe,GAAW,KAAK;QAC/B,IAAA,CAAA,eAAe,GAAW,KAAK;QAC/B,IAAA,CAAA,UAAU,GAAW,KAAK;QAC1B,IAAA,CAAA,MAAM,GAAU,EAAE;QAClB,IAAA,CAAA,SAAS,GAAU,CAAC;QACpB,IAAA,CAAA,OAAO,GAAU,EAAE;QAGnB,IAAA,CAAA,uBAAuB,GAAW,KAAK;AAEtC,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,YAAY,EAAQ;AAC/C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAU;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,YAAY,EAAU;AAC5C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAiB;AAClD,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAiB;AACvD,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,CAAS,IAAI,CAAC;AAEjD,QAAA,IAAA,CAAA,YAAY,GAAS,IAAI,IAAI,EAAE;QAChC,IAAA,CAAA,SAAS,GAAG,CAAC;QACb,IAAA,CAAA,YAAY,GAAG,CAAC;AAInB,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS;IAC3B;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,OAAO,EAAE;AACxC,gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAC3B;iBAAO;AACH,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;YAC1B;QACJ;QACA,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY;QAC1C,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI;QAC/B,IAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE;AACpC,YAAA,IAAI,CAAC,SAAS,GAAG,CAAC;QACtB;aAAO;YACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY;QACvD;AACA,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AACpD,QAAA,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAChD,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAE/C,QAAA,IAAI,CAAC,0CAA0C,GAAG,IAAI,CAAC,eAAe,CAAC,+BAA+B,CAAC,SAAS,CAAC,WAAW,IAAG;AAC3H,YAAA,IAAI,CAAC,YAAY,GAAG,WAAW;AAC/B,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/C,QAAA,CAAC,CAAC;IACN;IAEA,WAAW,GAAA;AACP,QAAA,IAAI,IAAI,CAAC,0CAA0C,EAAE;AACjD,YAAA,IAAI,CAAC,0CAA0C,CAAC,WAAW,EAAE;AAC7D,YAAA,IAAI,CAAC,0CAA0C,GAAG,SAAS;QAC/D;IACJ;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;IACpC;AAEA,IAAA,YAAY,CAAC,YAA0B,EAAA;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC;IAC1C;AAEA,IAAA,WAAW,CAAC,WAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;IAC9C;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;AACrB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;IACnC;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;IACrC;IAEA,SAAS,GAAA;AACL,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC;IAEA,SAAS,GAAA;QACL,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC;IAEA,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;IACjC;AApJS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,8CA8EmC,SAAS,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AA9E7D,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,aAAA,EAAA,aAAA,EAAA,eAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,YAAA,EAAA,cAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,qCAAA,EAAA,uCAAA,EAAA,4BAAA,EAAA,8BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,4BAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,kCAAA,EAAA,oCAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,iCAAA,EAAA,mCAAA,EAAA,0CAAA,EAAA,4CAAA,EAAA,0CAAA,EAAA,4CAAA,EAAA,yCAAA,EAAA,2CAAA,EAAA,yCAAA,EAAA,2CAAA,EAAA,aAAA,EAAA,eAAA,EAAA,GAAA,EAAA,KAAA,EAAA,YAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,yBAAA,EAAA,EAAA,OAAA,EAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAHf,CAAC,eAAe,CAAC,0BCdhC,wiSAoHM,EAAA,MAAA,EAAA,CAAA,6gBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,kBAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,+BAAA,EAAA,uCAAA,EAAA,8BAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,6BAAA,EAAA,6BAAA,EAAA,oCAAA,EAAA,oCAAA,EAAA,4CAAA,EAAA,4CAAA,EAAA,iBAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,KAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,qBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,gBAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,6BAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,2CAAA,EAAA,2CAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,WAAA,EAAA,aAAA,EAAA,cAAA,EAAA,QAAA,EAAA,eAAA,EAAA,KAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,eAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,yBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAH,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;2FDnGO,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,EAAA,SAAA,EAGT,CAAC,eAAe,CAAC,cAChB,KAAK,EAAA,QAAA,EAAA,wiSAAA,EAAA,MAAA,EAAA,CAAA,6gBAAA,CAAA,EAAA;;0BAgFqC,MAAM;2BAAC,SAAS;;sBA7ErE;;sBAeA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBAEA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MExEQ,gBAAgB,CAAA;8GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,CALrB,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAEjG,WAAW,EAAE,YAAY,aACzB,iBAAiB,CAAA,EAAA,CAAA,CAAA;+GAElB,gBAAgB,EAAA,OAAA,EAAA,CAHf,WAAW,EAAE,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAG1B,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAP5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE;AACV,wBAAA,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE;AAC/E,qBAAA;AACD,oBAAA,OAAO,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC;oBACpC,OAAO,EAAE,CAAC,iBAAiB;AAC9B,iBAAA;;;ACfD;;AAEG;;;;"}
1
+ {"version":3,"file":"pieninck-ionic2-calendar.mjs","sources":["../../src/calendar.service.ts","../../src/calendar.interface.ts","../../src/monthview.ts","../../src/monthview.html","../../src/init-position-scroll.ts","../../src/weekview.ts","../../src/weekview.html","../../src/dayview.ts","../../src/dayview.html","../../src/calendar.ts","../../src/calendar.html","../../src/pieninck-ionic2-calendar.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\nimport { Observable, Subject } from \"rxjs\";\n\nimport {\n ICalendarComponent,\n IView,\n CalendarMode,\n QueryMode,\n} from \"./calendar.interface\";\n\n@Injectable()\nexport class CalendarService {\n queryMode!: QueryMode;\n currentDateChangedFromParent$: Observable<Date>;\n currentDateChangedFromChildren$: Observable<Date>;\n eventSourceChanged$: Observable<void>;\n slideChanged$: Observable<number>;\n slideUpdated$: Observable<void>;\n\n private _currentDate: Date = new Date();\n private readonly currentDateChangedFromParent = new Subject<Date>();\n private readonly currentDateChangedFromChildren = new Subject<Date>();\n private readonly eventSourceChanged = new Subject<void>();\n private readonly slideChanged = new Subject<number>();\n private readonly slideUpdated = new Subject<void>();\n\n constructor() {\n this.currentDateChangedFromParent$ =\n this.currentDateChangedFromParent.asObservable();\n this.currentDateChangedFromChildren$ =\n this.currentDateChangedFromChildren.asObservable();\n this.eventSourceChanged$ = this.eventSourceChanged.asObservable();\n this.slideChanged$ = this.slideChanged.asObservable();\n this.slideUpdated$ = this.slideUpdated.asObservable();\n }\n\n setCurrentDate(val: Date, fromParent: boolean = false) {\n this._currentDate = new Date(val);\n if (fromParent) {\n this.currentDateChangedFromParent.next(val);\n } else {\n this.currentDateChangedFromChildren.next(val);\n }\n }\n\n get currentDate(): Date {\n return this._currentDate;\n }\n\n rangeChanged(component: ICalendarComponent) {\n if (this.queryMode === \"local\") {\n if (component.eventSource && component.onDataLoaded) {\n component.onDataLoaded();\n }\n } else if (this.queryMode === \"remote\") {\n let rangeStart = new Date(component.range.startTime),\n rangeEnd = new Date(component.range.endTime);\n\n rangeStart.setHours(0);\n if (rangeStart.getHours() === 23) {\n rangeStart.setTime(rangeStart.getTime() + 3600000);\n }\n\n rangeEnd.setHours(0);\n if (rangeEnd.getHours() === 23) {\n rangeEnd.setTime(rangeEnd.getTime() + 3600000);\n }\n component.onRangeChanged.emit({\n startTime: rangeStart,\n endTime: rangeEnd,\n });\n }\n }\n\n private getStep(mode: CalendarMode): {\n years: number;\n months: number;\n days: number;\n } {\n switch (mode) {\n case \"month\":\n return {\n years: 0,\n months: 1,\n days: 0,\n };\n case \"week\":\n return {\n years: 0,\n months: 0,\n days: 7,\n };\n case \"day\":\n return {\n years: 0,\n months: 0,\n days: 1,\n };\n }\n }\n\n getAdjacentCalendarDate(mode: CalendarMode, direction: number): Date {\n let calculateCalendarDate = this.currentDate;\n const step = this.getStep(mode),\n year = calculateCalendarDate.getFullYear() + direction * step.years,\n month = calculateCalendarDate.getMonth() + direction * step.months,\n date = calculateCalendarDate.getDate() + direction * step.days;\n\n calculateCalendarDate = new Date(year, month, date, 12, 0, 0);\n\n if (mode === \"month\") {\n const firstDayInNextMonth = new Date(year, month + 1, 1, 12, 0, 0);\n if (\n firstDayInNextMonth.getTime() <= calculateCalendarDate.getTime()\n ) {\n calculateCalendarDate = new Date(\n firstDayInNextMonth.getTime() - 24 * 60 * 60 * 1000,\n );\n }\n }\n return calculateCalendarDate;\n }\n\n getAdjacentViewStartTime(\n component: ICalendarComponent,\n direction: number,\n ): Date {\n let adjacentCalendarDate = this.getAdjacentCalendarDate(\n component.mode,\n direction,\n );\n return component.getRange(adjacentCalendarDate).startTime;\n }\n\n populateAdjacentViews(component: ICalendarComponent) {\n let currentViewStartDate: Date,\n currentViewData: IView[],\n toUpdateViewIndex: number,\n currentViewIndex = component.currentViewIndex;\n\n if (component.direction === 1) {\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else if (component.direction === -1) {\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else if (component.views) {\n currentViewStartDate = component.range.startTime;\n component.views[currentViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n toUpdateViewIndex = (currentViewIndex + 2) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n toUpdateViewIndex = (currentViewIndex + 1) % 3;\n component.views[toUpdateViewIndex] =\n component.getViewData(currentViewStartDate);\n } else {\n currentViewData = [];\n currentViewStartDate = component.range.startTime;\n currentViewData.push(component.getViewData(currentViewStartDate));\n currentViewStartDate = this.getAdjacentViewStartTime(component, 1);\n currentViewData.push(component.getViewData(currentViewStartDate));\n currentViewStartDate = this.getAdjacentViewStartTime(component, -1);\n currentViewData.push(component.getViewData(currentViewStartDate));\n component.views = currentViewData;\n }\n }\n\n slide(direction: number) {\n this.slideChanged.next(direction);\n }\n}\n","import { EventEmitter, TemplateRef } from \"@angular/core\";\n\nexport interface IEvent {\n allDay: boolean;\n endTime: Date;\n startTime: Date;\n title: string;\n category?: string;\n}\n\nexport interface IRange {\n startTime: Date;\n endTime: Date;\n}\n\nexport interface IView {}\n\nexport interface IDayView extends IView {\n allDayEvents: IDisplayAllDayEvent[];\n rows: IDayViewRow[];\n categorizedAllDayEventsMap: Map<string, IDisplayAllDayEvent[]>;\n}\n\n/**\n * should be renamed to IDayViewCell since row could be vertically sliced into pieces of categories\n */\nexport interface IDayViewRow {\n events: IDisplayEvent[];\n eventsGroupByCategory?: Map<string, IDisplayEvent[]>;\n time: Date;\n}\n\nexport interface IMonthView extends IView {\n dates: IMonthViewRow[];\n dayHeaders: string[];\n}\n\nexport interface IMonthViewRow {\n current?: boolean;\n date: Date;\n events: IEvent[];\n hasEvent?: boolean;\n label: string;\n secondary: boolean;\n selected?: boolean;\n disabled: boolean;\n}\n\nexport interface IWeekView extends IView {\n dates: IWeekViewDateRow[];\n rows: IWeekViewRow[][];\n}\n\nexport interface IWeekViewDateRow {\n current?: boolean;\n date: Date;\n events: IDisplayEvent[];\n hasEvent?: boolean;\n selected?: boolean;\n dayHeader: string;\n}\n\nexport interface IWeekViewRow {\n events: IDisplayEvent[];\n time: Date;\n}\n\nexport interface IDisplayEvent {\n endIndex: number;\n endOffset: number;\n event: IEvent;\n startIndex: number;\n startOffset: number;\n overlapNumber?: number;\n position: number;\n}\n\nexport interface IDisplayWeekViewHeader {\n viewDate: IWeekViewDateRow;\n}\n\nexport interface IDisplayAllDayEvent {\n event: IEvent;\n}\n\nexport interface ICalendarComponent {\n currentViewIndex: number;\n direction: number;\n eventSource: IEvent[];\n getRange: (date: Date) => IRange;\n getViewData: (date: Date) => IView;\n mode: CalendarMode;\n range: IRange;\n views: IView[];\n onDataLoaded: () => void;\n onRangeChanged: EventEmitter<IRange>;\n}\n\nexport interface ITimeSelected {\n events: IEvent[];\n selectedTime: Date;\n disabled: boolean;\n category?: string;\n}\n\nexport interface IMonthViewDisplayEventTemplateContext {\n view?: IView;\n row?: number;\n col?: number;\n showEventDetail?: boolean;\n selectedDate?: IMonthViewRow;\n noEventsLabel?: string;\n}\n\nexport interface IMonthViewEventDetailTemplateContext {\n showEventDetail: boolean;\n selectedDate?: IMonthViewRow;\n noEventsLabel?: string;\n}\n\nexport interface IWeekViewAllDayEventSectionTemplateContext {\n day: IWeekViewDateRow;\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n}\n\nexport interface IWeekViewNormalEventSectionTemplateContext {\n tm: IWeekViewRow;\n eventTemplate?: TemplateRef<IDisplayEvent>;\n hourParts?: number;\n}\n\nexport interface IDayViewAllDayEventSectionTemplateContext {\n allDayEvents: IDisplayAllDayEvent[];\n eventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n}\n\nexport interface IDayViewNormalEventSectionTemplateContext {\n tm: IDayViewRow;\n eventTemplate?: TemplateRef<IDisplayEvent>;\n hourParts?: number;\n category?: string;\n}\n\nexport interface IDayViewCategoryItemTemplateContext {\n category: string;\n}\n\nexport interface IDateFormatter {\n formatMonthViewDay?: (date: Date) => string;\n formatMonthViewDayHeader?: (date: Date) => string;\n formatMonthViewTitle?: (date: Date) => string;\n formatWeekViewDayHeader?: (date: Date) => string;\n formatWeekViewTitle?: (date: Date) => string;\n formatWeekViewHourColumn?: (date: Date) => string;\n formatDayViewTitle?: (date: Date) => string;\n formatDayViewHourColumn?: (date: Date) => string;\n}\n\nexport type CalendarMode = \"day\" | \"month\" | \"week\";\n\nexport type QueryMode = \"local\" | \"remote\";\n\nexport enum Step {\n Hour = 60,\n}\n","import {\n Component,\n OnInit,\n OnChanges,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n TemplateRef,\n OnDestroy,\n AfterViewInit,\n ViewChild,\n ElementRef,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { DatePipe, NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n ICalendarComponent,\n IEvent,\n IMonthView,\n IMonthViewRow,\n ITimeSelected,\n IRange,\n CalendarMode,\n IDateFormatter,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\n\n@Component({\n selector: \"monthview\",\n templateUrl: \"./monthview.html\",\n styleUrls: [\"./monthview.css\"],\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet],\n})\nexport class MonthViewComponent\n implements ICalendarComponent, OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n constructor(private readonly calendarService: CalendarService) {}\n\n private slider!: Swiper;\n @ViewChild(\"monthViewSwiper\") swiperElement?: ElementRef;\n\n @Input()\n monthviewDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate!: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate!: TemplateRef<IMonthViewEventDetailTemplateContext>;\n\n @Input() formatDay?: string;\n @Input() formatDayHeader?: string;\n @Input() formatMonthTitle?: string;\n @Input() eventSource!: IEvent[];\n @Input() startingDayMonth!: number;\n @Input() showEventDetail = true;\n @Input() noEventsLabel?: string;\n @Input() autoSelect = true;\n @Input() markDisabled?: (date: Date) => boolean;\n @Input() locale!: string;\n @Input() dateFormatter?: IDateFormatter;\n @Input() dir = \"\";\n @Input() lockSwipeToPrev?: boolean = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() sliderOptions?: SwiperOptions;\n\n @Output() onRangeChanged = new EventEmitter<IRange>();\n @Output() onEventSelected = new EventEmitter<IEvent>();\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n @Output() onTitleChanged = new EventEmitter<string>();\n\n public views: IMonthView[] = [];\n public currentViewIndex = 0;\n public selectedDate?: IMonthViewRow;\n public range!: IRange;\n public mode: CalendarMode = \"month\";\n public direction = 0;\n\n private moveOnSelected = false;\n private inited = false;\n\n private currentDateChangedFromParentSubscription?: Subscription;\n private eventSourceChangedSubscription?: Subscription;\n private slideChangedSubscription?: Subscription;\n private slideUpdatedSubscription?: Subscription;\n\n private formatDayLabel!: (date: Date) => string;\n private formatDayHeaderLabel!: (date: Date) => string;\n private formatTitle!: (date: Date) => string;\n\n static getDates(startDate: Date, n: number): Date[] {\n const dates = new Array(n),\n current = new Date(startDate);\n let i = 0;\n while (i < n) {\n dates[i++] = new Date(current);\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n if (this.dateFormatter?.formatMonthViewDay) {\n this.formatDayLabel = this.dateFormatter.formatMonthViewDay;\n } else {\n const dayLabelDatePipe = new DatePipe(\"en-US\");\n this.formatDayLabel = function (date: Date) {\n return dayLabelDatePipe.transform(date, this.formatDay) || \"\";\n };\n }\n\n if (this.dateFormatter?.formatMonthViewDayHeader) {\n this.formatDayHeaderLabel =\n this.dateFormatter.formatMonthViewDayHeader;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatDayHeaderLabel = function (date: Date) {\n return datePipe.transform(date, this.formatDayHeader) || \"\";\n };\n }\n\n if (this.dateFormatter?.formatMonthViewTitle) {\n this.formatTitle = this.dateFormatter.formatMonthViewTitle;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatTitle = function (date: Date) {\n return datePipe.transform(date, this.formatMonthTitle) || \"\";\n };\n }\n\n this.refreshView();\n this.inited = true;\n\n this.currentDateChangedFromParentSubscription =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngOnDestroy() {\n if (this.currentDateChangedFromParentSubscription) {\n this.currentDateChangedFromParentSubscription.unsubscribe();\n this.currentDateChangedFromParentSubscription = undefined;\n }\n\n if (this.eventSourceChangedSubscription) {\n this.eventSourceChangedSubscription.unsubscribe();\n this.eventSourceChangedSubscription = undefined;\n }\n\n if (this.slideChangedSubscription) {\n this.slideChangedSubscription.unsubscribe();\n this.slideChangedSubscription = undefined;\n }\n\n if (this.slideUpdatedSubscription) {\n this.slideUpdatedSubscription.unsubscribe();\n this.slideUpdatedSubscription = undefined;\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.inited) {\n return;\n }\n\n const eventSourceChange = changes[\"eventSource\"];\n if (eventSourceChange?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToNext) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.allowTouchMove = !lockSwipes.currentValue;\n }\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir == \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n onSlideChanged(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n\n this.direction = direction;\n if (!this.moveOnSelected) {\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacentDate);\n }\n this.refreshView();\n this.direction = 0;\n this.moveOnSelected = false;\n }\n\n createDateObject(date: Date): IMonthViewRow {\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(date);\n }\n\n return {\n date,\n events: [],\n label: this.formatDayLabel(date),\n secondary: false,\n disabled,\n };\n }\n\n getViewData(startTime: Date): IMonthView {\n const startDate = startTime,\n date = startDate.getDate(),\n month = (startDate.getMonth() + (date === 1 ? 0 : 1)) % 12;\n\n const dates = MonthViewComponent.getDates(startDate, 42);\n const days: IMonthViewRow[] = [];\n for (let i = 0; i < 42; i++) {\n const dateObject = this.createDateObject(dates[i]);\n dateObject.secondary = dates[i].getMonth() !== month;\n days[i] = dateObject;\n }\n\n const dayHeaders: string[] = [];\n for (let i = 0; i < 7; i++) {\n dayHeaders.push(this.formatDayHeaderLabel(days[i].date));\n }\n return {\n dates: days,\n dayHeaders,\n };\n }\n\n getHighlightClass(date: IMonthViewRow): string {\n let className = \"\";\n\n if (date.hasEvent) {\n if (date.secondary) {\n className = \"monthview-secondary-with-event\";\n } else {\n className = \"monthview-primary-with-event\";\n }\n }\n\n if (date.selected) {\n if (className) {\n className += \" \";\n }\n className += \"monthview-selected\";\n }\n\n if (date.current) {\n if (className) {\n className += \" \";\n }\n className += \"monthview-current\";\n }\n\n if (date.secondary) {\n if (className) {\n className += \" \";\n }\n className += \"text-muted\";\n }\n\n if (date.disabled) {\n if (className) {\n className += \" \";\n }\n className += \"monthview-disabled\";\n }\n return className;\n }\n\n getRange(currentDate: Date): IRange {\n const year = currentDate.getFullYear(),\n month = currentDate.getMonth(),\n firstDayOfMonth = new Date(year, month, 1, 12, 0, 0), // set hour to 12 to avoid DST problem\n difference = this.startingDayMonth - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth =\n difference > 0 ? 7 - difference : -difference,\n startDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n startDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n const endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 42);\n\n return {\n startTime: startDate,\n endTime: endDate,\n };\n }\n\n onDataLoaded() {\n const range = this.range,\n eventSource = this.eventSource,\n len = eventSource ? eventSource.length : 0,\n startTime = range.startTime,\n endTime = range.endTime,\n utcStartTime = Date.UTC(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\n currentViewIndex = this.currentViewIndex,\n dates = this.views[currentViewIndex].dates,\n oneDay = 86400000,\n eps = 0.0006;\n\n for (let r = 0; r < 42; r += 1) {\n if (dates[r].hasEvent) {\n dates[r].hasEvent = false;\n dates[r].events = [];\n }\n }\n\n for (let i = 0; i < len; i += 1) {\n const event = eventSource[i],\n eventStartTime = event.startTime,\n eventEndTime = event.endTime;\n\n let eventUTCStartTime: number, eventUTCEndTime: number;\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime\n ) {\n continue;\n }\n\n let timeDifferenceStart: number, timeDifferenceEnd: number;\n\n if (eventUTCStartTime < utcStartTime) {\n timeDifferenceStart = 0;\n } else {\n timeDifferenceStart =\n (eventUTCStartTime - utcStartTime) / oneDay;\n }\n\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd = (utcEndTime - utcStartTime) / oneDay;\n } else {\n timeDifferenceEnd = (eventUTCEndTime - utcStartTime) / oneDay;\n }\n\n let index = Math.floor(timeDifferenceStart);\n const endIndex = Math.ceil(timeDifferenceEnd - eps);\n while (index < endIndex) {\n dates[index].hasEvent = true;\n let eventSet = dates[index].events;\n if (eventSet) {\n eventSet.push(event);\n } else {\n eventSet = [];\n eventSet.push(event);\n dates[index].events = eventSet;\n }\n index += 1;\n }\n }\n\n for (let r = 0; r < 42; r += 1) {\n if (dates[r].hasEvent) {\n dates[r].events.sort(this.compareEvent);\n }\n }\n\n if (this.autoSelect) {\n let findSelected = false;\n for (let r = 0; r < 42; r += 1) {\n if (dates[r].selected) {\n this.selectedDate = dates[r];\n findSelected = true;\n break;\n }\n }\n\n if (findSelected && this.selectedDate) {\n this.onTimeSelected.emit({\n selectedTime: this.selectedDate.date,\n events: this.selectedDate.events,\n disabled: this.selectedDate.disabled,\n });\n }\n }\n }\n\n refreshView() {\n this.range = this.getRange(this.calendarService.currentDate);\n\n if (this.inited) {\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n this.calendarService.populateAdjacentViews(this);\n this.updateCurrentView(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const currentViewStartDate = this.range.startTime,\n date = currentViewStartDate.getDate(),\n month =\n (currentViewStartDate.getMonth() + (date === 1 ? 0 : 1)) % 12,\n year =\n currentViewStartDate.getFullYear() +\n (date !== 1 && month === 0 ? 1 : 0),\n headerDate = new Date(year, month, 1, 12, 0, 0, 0);\n return this.formatTitle(headerDate);\n }\n\n private compareEvent(event1: IEvent, event2: IEvent): number {\n if (event1.allDay) {\n return 1;\n } else if (event2.allDay) {\n return -1;\n } else {\n return event1.startTime.getTime() - event2.startTime.getTime();\n }\n }\n\n select(viewDate: IMonthViewRow) {\n if (!this.views) {\n return;\n }\n\n const selectedDate = viewDate.date,\n events = viewDate.events;\n\n if (!viewDate.disabled) {\n const dates = this.views[this.currentViewIndex].dates,\n currentCalendarDate = this.calendarService.currentDate,\n currentMonth = currentCalendarDate.getMonth(),\n currentYear = currentCalendarDate.getFullYear(),\n selectedMonth = selectedDate.getMonth(),\n selectedYear = selectedDate.getFullYear();\n let direction = 0;\n\n if (currentYear === selectedYear) {\n if (currentMonth !== selectedMonth) {\n direction = currentMonth < selectedMonth ? 1 : -1;\n }\n } else {\n direction = currentYear < selectedYear ? 1 : -1;\n }\n\n this.calendarService.setCurrentDate(selectedDate);\n if (direction === 0) {\n const currentViewStartDate = this.range.startTime,\n oneDay = 86400000,\n selectedDayDifference = Math.round(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 42; r += 1) {\n dates[r].selected = false;\n }\n\n if (selectedDayDifference >= 0 && selectedDayDifference < 42) {\n dates[selectedDayDifference].selected = true;\n this.selectedDate = dates[selectedDayDifference];\n }\n } else {\n this.moveOnSelected = true;\n this.slideView(direction);\n }\n }\n\n this.onTimeSelected.emit({\n selectedTime: selectedDate,\n events,\n disabled: viewDate.disabled,\n });\n }\n\n slideView(direction: number) {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n }\n\n updateCurrentView(currentViewStartDate: Date, view: IMonthView) {\n const currentCalendarDate = this.calendarService.currentDate,\n today = new Date(),\n oneDay = 86400000,\n selectedDayDifference = Math.round(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.round(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 42; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 42 &&\n !view.dates[selectedDayDifference].disabled &&\n (this.autoSelect || this.moveOnSelected)\n ) {\n view.dates[selectedDayDifference].selected = true;\n this.selectedDate = view.dates[selectedDayDifference];\n } else {\n this.selectedDate = undefined;\n }\n\n if (currentDayDifference >= 0 && currentDayDifference < 42) {\n view.dates[currentDayDifference].current = true;\n }\n }\n}\n","<div class=\"swiper monthview-swiper\" #monthViewSwiper>\n <div class=\"swiper-wrapper\">\n <div class=\"swiper-slide\">\n @if (0===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[0].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[0].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (0!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[0].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[0], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (1===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[1].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[1].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (1!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[1].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[1], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n <div class=\"swiper-slide\">\n @if (2===currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr>\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td\n tappable\n (click)=\"select(views[2].dates[row*7+col])\"\n [ngClass]=\"getHighlightClass(views[2].dates[row*7+col])\"\n >\n <ng-template\n [ngTemplateOutlet]=\"monthviewDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n } @if (2!==currentViewIndex) {\n <table class=\"table table-bordered table-fixed monthview-datetable\">\n <thead>\n <tr class=\"text-center\">\n @for (dayHeader of views[2].dayHeaders; track dayHeader)\n {\n <th>\n <small>{{dayHeader}}</small>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of [0,1,2,3,4,5]; track row) {\n <tr>\n @for (col of [0,1,2,3,4,5,6]; track col) {\n <td>\n <ng-template\n [ngTemplateOutlet]=\"monthviewInactiveDisplayEventTemplate\"\n [ngTemplateOutletContext]=\"{view: views[2], row: row, col: col}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n <tr></tr>\n </tbody>\n </table>\n }\n </div>\n </div>\n <ng-template\n [ngTemplateOutlet]=\"monthviewEventDetailTemplate\"\n [ngTemplateOutletContext]=\"{showEventDetail:showEventDetail, selectedDate: selectedDate, noEventsLabel: noEventsLabel}\"\n >\n </ng-template>\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n ElementRef,\n SimpleChanges,\n OnChanges,\n AfterViewInit,\n OnDestroy,\n ViewEncapsulation,\n NgZone,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\n\n@Component({\n selector: \"init-position-scroll\",\n template: `\n <div class=\"scroll-content\" style=\"height:100%\">\n <ng-content></ng-content>\n </div>\n `,\n styles: [\n `\n .scroll-content {\n overflow-y: auto;\n overflow-x: hidden;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n})\nexport class initPositionScrollComponent\n implements OnChanges, AfterViewInit, OnDestroy\n{\n @Input() initPosition!: number;\n @Input() emitEvent?: boolean;\n @Output() onScroll = new EventEmitter<number>();\n\n private readonly element: ElementRef;\n private scrollContent!: HTMLElement;\n private handler!: () => void;\n private listenerAttached: boolean = false;\n\n constructor(\n el: ElementRef,\n private readonly ngZone: NgZone,\n ) {\n this.element = el;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n let initPosition = changes[\"initPosition\"];\n if (\n initPosition?.currentValue !== undefined &&\n this.scrollContent &&\n initPosition.currentValue != this.scrollContent.scrollTop\n ) {\n const me = this;\n this.ngZone.run(() => {\n me.scrollContent.scrollTop = initPosition.currentValue;\n });\n }\n }\n\n ngAfterViewInit() {\n const scrollContent = (this.scrollContent =\n this.element.nativeElement.querySelector(\".scroll-content\"));\n if (this.initPosition !== undefined) {\n scrollContent.scrollTop = this.initPosition;\n }\n\n if (this.emitEvent && !this.listenerAttached) {\n let onScroll = this.onScroll;\n let me = this;\n this.handler = function () {\n if (me.initPosition != scrollContent.scrollTop) {\n onScroll.emit(scrollContent.scrollTop);\n }\n };\n this.listenerAttached = true;\n scrollContent.addEventListener(\"scroll\", this.handler);\n }\n }\n\n ngOnDestroy() {\n if (this.listenerAttached) {\n this.scrollContent.removeEventListener(\"scroll\", this.handler);\n this.listenerAttached = false;\n }\n }\n}\n","import { DatePipe, NgClass, NgTemplateOutlet } from \"@angular/common\";\nimport {\n Component,\n OnInit,\n OnChanges,\n HostBinding,\n Input,\n Output,\n EventEmitter,\n SimpleChanges,\n ViewEncapsulation,\n TemplateRef,\n ElementRef,\n OnDestroy,\n AfterViewInit,\n ViewChild,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport type {\n ICalendarComponent,\n IDisplayEvent,\n IEvent,\n ITimeSelected,\n IRange,\n IWeekView,\n IWeekViewRow,\n IWeekViewDateRow,\n CalendarMode,\n IDateFormatter,\n IDisplayWeekViewHeader,\n IDisplayAllDayEvent,\n IWeekViewAllDayEventSectionTemplateContext,\n IWeekViewNormalEventSectionTemplateContext,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"weekview\",\n templateUrl: \"./weekview.html\",\n styleUrls: [\"./weekview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class WeekViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"weekViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.weekview\") class = true;\n\n @Input() weekviewHeaderTemplate!: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate!: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewInactiveNormalEventSectionTemplate!: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n\n @Input() formatWeekTitle?: string;\n @Input() formatWeekViewDayHeader?: string;\n @Input() formatHourColumn?: string;\n @Input() startingDayWeek!: number;\n @Input() allDayLabel?: string;\n @Input() hourParts!: number;\n @Input() eventSource!: IEvent[];\n @Input() autoSelect = true;\n @Input() markDisabled?: (date: Date) => boolean;\n @Input() locale!: string;\n @Input() dateFormatter?: IDateFormatter;\n @Input() dir = \"\";\n @Input() scrollToHour = 0;\n @Input() preserveScrollPosition?: boolean;\n @Input() lockSwipeToPrev?: boolean;\n @Input() lockSwipeToNext?: boolean;\n @Input() lockSwipes?: boolean;\n @Input() startHour!: number;\n @Input() endHour!: number;\n @Input() sliderOptions?: SwiperOptions;\n @Input() hourSegments!: number;\n\n @Output() onRangeChanged = new EventEmitter<IRange>();\n @Output() onEventSelected = new EventEmitter<IEvent>();\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\n @Output() onTitleChanged = new EventEmitter<string>();\n\n public readonly sliderIndexList = [0, 1, 2];\n public views: IWeekView[] = [];\n public currentViewIndex = 0;\n public range!: IRange;\n public direction = 0;\n public mode: CalendarMode = \"week\";\n\n private inited = false;\n private currentDateChangedFromParentSubscription?: Subscription;\n private eventSourceChangedSubscription?: Subscription;\n private slideChangedSubscription?: Subscription;\n private slideUpdatedSubscription?: Subscription;\n\n public hourColumnLabels!: string[];\n public initScrollPosition!: number;\n private formatDayHeader!: (date: Date) => string;\n private formatTitle!: (date: Date) => string;\n private formatHourColumnLabel!: (date: Date) => string;\n private hourRange!: number;\n\n static createDateObjects(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IWeekViewRow[][] {\n const times: IWeekViewRow[][] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let hourStep, minStep;\n\n if (timeInterval < 1) {\n hourStep = Math.floor(1 / timeInterval);\n minStep = 60;\n } else {\n hourStep = 1;\n minStep = Math.floor(60 / timeInterval);\n }\n\n for (let hour = startHour; hour < endHour; hour += hourStep) {\n for (let interval = 0; interval < 60; interval += minStep) {\n const row: IWeekViewRow[] = [];\n for (let day = 0; day < 7; day += 1) {\n const time = new Date(startTime);\n time.setHours(currentHour + hour, interval);\n time.setDate(currentDate + day);\n row.push({\n events: [],\n time,\n });\n }\n times.push(row);\n }\n }\n return times;\n }\n\n static getDates(startTime: Date, n: number): IWeekViewDateRow[] {\n const dates = new Array(n),\n current = new Date(startTime);\n let i = 0;\n while (i < n) {\n dates[i++] = {\n date: new Date(current),\n events: [],\n dayHeader: \"\",\n };\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ): number {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\n const totalSize = size * hourParts,\n cells = new Array(totalSize);\n\n // sort by position in descending order, the right most columns should be calculated first\n orderedEvents.sort((eventA, eventB) => {\n return eventB.position - eventA.position;\n });\n for (let i = 0; i < totalSize; i += 1) {\n cells[i] = {\n calculated: false,\n events: [],\n };\n }\n const len = orderedEvents.length;\n for (let i = 0; i < len; i += 1) {\n const event = orderedEvents[i];\n let index = event.startIndex * hourParts + event.startOffset;\n while (index < event.endIndex * hourParts - event.endOffset) {\n cells[index].events.push(event);\n index += 1;\n }\n }\n\n let i = 0;\n while (i < len) {\n let event: IDisplayEvent | undefined = orderedEvents[i];\n if (!event.overlapNumber) {\n const overlapNumber = event.position + 1;\n event.overlapNumber = overlapNumber;\n const eventQueue = [event];\n while ((event = eventQueue.shift())) {\n let index =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (this.dateFormatter?.formatWeekViewDayHeader) {\n this.formatDayHeader = this.dateFormatter.formatWeekViewDayHeader;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatDayHeader = function (date: Date) {\n return (\n datePipe.transform(date, this.formatWeekViewDayHeader) || \"\"\n );\n };\n }\n\n if (this.dateFormatter?.formatWeekViewTitle) {\n this.formatTitle = this.dateFormatter.formatWeekViewTitle;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatTitle = function (date: Date) {\n return datePipe.transform(date, this.formatWeekTitle) || \"\";\n };\n }\n\n if (this.dateFormatter?.formatWeekViewHourColumn) {\n this.formatHourColumnLabel =\n this.dateFormatter.formatWeekViewHourColumn;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatHourColumnLabel = function (date: Date) {\n return datePipe.transform(date, this.formatHourColumn) || \"\";\n };\n }\n\n this.refreshView();\n this.hourColumnLabels = this.getHourColumnLabels();\n this.inited = true;\n\n this.currentDateChangedFromParentSubscription =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".weekview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n hourColumns[me.scrollToHour - me.startHour].offsetTop;\n }, 50);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.inited) {\n return;\n }\n\n if (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (this.endHour - this.startHour) * this.hourSegments;\n this.direction = 0;\n this.refreshView();\n this.hourColumnLabels = this.getHourColumnLabels();\n }\n\n const eventSourceChange = changes[\"eventSource\"];\n if (eventSourceChange?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.allowTouchMove = !lockSwipes.currentValue;\n }\n }\n\n ngOnDestroy() {\n if (this.currentDateChangedFromParentSubscription) {\n this.currentDateChangedFromParentSubscription.unsubscribe();\n this.currentDateChangedFromParentSubscription = undefined;\n }\n\n if (this.eventSourceChangedSubscription) {\n this.eventSourceChangedSubscription.unsubscribe();\n this.eventSourceChangedSubscription = undefined;\n }\n\n if (this.slideChangedSubscription) {\n this.slideChangedSubscription.unsubscribe();\n this.slideChangedSubscription = undefined;\n }\n\n if (this.slideUpdatedSubscription) {\n this.slideUpdatedSubscription.unsubscribe();\n this.slideUpdatedSubscription = undefined;\n }\n }\n\n onSlideChanged(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n this.direction = direction;\n const adjacent = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacent);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour][0].time.getHours() !== this.startHour\n ) {\n const time = new Date(this.views[0].rows[hour][0].time);\n time.setDate(time.getDate() + 1);\n time.setHours(this.startHour);\n hourColumnLabels.push(this.formatHourColumnLabel(time));\n } else {\n hourColumnLabels.push(\n this.formatHourColumnLabel(\n this.views[0].rows[hour][0].time,\n ),\n );\n }\n }\n return hourColumnLabels;\n }\n\n getViewData(startTime: Date): IWeekView {\n const dates = WeekViewComponent.getDates(startTime, 7);\n for (let i = 0; i < 7; i++) {\n dates[i].dayHeader = this.formatDayHeader(dates[i].date);\n }\n\n return {\n rows: WeekViewComponent.createDateObjects(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\n dates,\n };\n }\n\n getRange(currentDate: Date): IRange {\n const year = currentDate.getFullYear(),\n month = currentDate.getMonth(),\n date = currentDate.getDate(),\n day = currentDate.getDay();\n let difference = day - this.startingDayWeek;\n\n if (difference < 0) {\n difference += 7;\n }\n\n // set hour to 12 to avoid DST problem\n const firstDayOfWeek = new Date(\n year,\n month,\n date - difference,\n 12,\n 0,\n 0,\n ),\n endTime = new Date(year, month, date - difference + 7, 12, 0, 0);\n\n return {\n startTime: firstDayOfWeek,\n endTime,\n };\n }\n\n onDataLoaded() {\n const eventSource = this.eventSource,\n len = eventSource ? eventSource.length : 0,\n startTime = this.range.startTime,\n endTime = this.range.endTime,\n utcStartTime = Date.UTC(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\n currentViewIndex = this.currentViewIndex,\n rows = this.views[currentViewIndex].rows,\n dates = this.views[currentViewIndex].dates,\n oneHour = 3600000,\n oneDay = 86400000,\n // add allday eps\n eps = 0.016,\n rangeStartRowIndex = this.startHour * this.hourSegments,\n rangeEndRowIndex = this.endHour * this.hourSegments,\n allRows = 24 * this.hourSegments;\n let allDayEventInRange = false,\n normalEventInRange = false;\n\n for (let i = 0; i < 7; i += 1) {\n dates[i].events = [];\n dates[i].hasEvent = false;\n }\n\n for (let day = 0; day < 7; day += 1) {\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n rows[hour][day].events = [];\n }\n }\n for (let i = 0; i < len; i += 1) {\n const event = eventSource[i];\n const eventStartTime = event.startTime;\n const eventEndTime = event.endTime;\n\n let eventUTCStartTime: number, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\n continue;\n }\n\n if (event.allDay) {\n allDayEventInRange = true;\n\n let allDayStartIndex: number;\n if (eventUTCStartTime <= utcStartTime) {\n allDayStartIndex = 0;\n } else {\n allDayStartIndex = Math.round(\n (eventUTCStartTime - utcStartTime) / oneDay,\n );\n }\n\n let allDayEndIndex: number;\n if (eventUTCEndTime >= utcEndTime) {\n allDayEndIndex = Math.round(\n (utcEndTime - utcStartTime) / oneDay,\n );\n } else {\n allDayEndIndex = Math.round(\n (eventUTCEndTime - utcStartTime) / oneDay,\n );\n }\n\n const displayAllDayEvent: IDisplayEvent = {\n event,\n startIndex: allDayStartIndex,\n endIndex: allDayEndIndex,\n startOffset: 0,\n endOffset: 0,\n position: 0,\n };\n\n let eventSet = dates[allDayStartIndex].events;\n if (eventSet) {\n eventSet.push(displayAllDayEvent);\n } else {\n eventSet = [];\n eventSet.push(displayAllDayEvent);\n dates[allDayStartIndex].events = eventSet;\n }\n dates[allDayStartIndex].hasEvent = true;\n } else {\n normalEventInRange = true;\n\n let timeDifferenceStart: number;\n if (eventUTCStartTime < utcStartTime) {\n timeDifferenceStart = 0;\n } else {\n timeDifferenceStart =\n ((eventUTCStartTime - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n ((eventUTCEndTime - oneDay - utcStartTime) / oneHour) *\n this.hourSegments +\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n const startIndex = Math.floor(timeDifferenceStart),\n endIndex = Math.ceil(timeDifferenceEnd - eps);\n let startRowIndex = startIndex % allRows,\n dayIndex = Math.floor(startIndex / allRows),\n endOfDay = dayIndex * allRows,\n startOffset = 0,\n endOffset = 0;\n\n if (this.hourParts !== 1) {\n if (startRowIndex >= rangeStartRowIndex) {\n startOffset = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\n }\n }\n\n do {\n endOfDay += allRows;\n let endRowIndex: number;\n if (endOfDay < endIndex) {\n endRowIndex = allRows;\n } else {\n if (endOfDay === endIndex) {\n endRowIndex = allRows;\n } else {\n endRowIndex = endIndex % allRows;\n }\n if (this.hourParts !== 1) {\n if (endRowIndex > rangeEndRowIndex) {\n endOffset = 0;\n } else {\n endOffset = Math.floor(\n (endIndex - timeDifferenceEnd) *\n this.hourParts,\n );\n }\n }\n }\n if (startRowIndex < rangeStartRowIndex) {\n startRowIndex = 0;\n } else {\n startRowIndex -= rangeStartRowIndex;\n }\n if (endRowIndex > rangeEndRowIndex) {\n endRowIndex = rangeEndRowIndex;\n }\n endRowIndex -= rangeStartRowIndex;\n\n if (startRowIndex < endRowIndex) {\n const displayEvent = {\n event,\n startIndex: startRowIndex,\n endIndex: endRowIndex,\n startOffset,\n endOffset,\n position: 0,\n };\n let eventSet = rows[startRowIndex][dayIndex].events;\n if (eventSet) {\n eventSet.push(displayEvent);\n } else {\n eventSet = [];\n eventSet.push(displayEvent);\n rows[startRowIndex][dayIndex].events = eventSet;\n }\n dates[dayIndex].hasEvent = true;\n }\n startRowIndex = 0;\n startOffset = 0;\n dayIndex += 1;\n } while (endOfDay < endIndex);\n }\n }\n\n if (normalEventInRange) {\n for (let day = 0; day < 7; day += 1) {\n let orderedEvents: IDisplayEvent[] = [];\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n if (rows[hour][day].events) {\n rows[hour][day].events.sort(\n WeekViewComponent.compareEventByStartOffset,\n );\n orderedEvents = orderedEvents.concat(\n rows[hour][day].events,\n );\n }\n }\n if (orderedEvents.length > 0) {\n this.placeEvents(orderedEvents);\n }\n }\n }\n\n if (allDayEventInRange) {\n let orderedAllDayEvents: IDisplayEvent[] = [];\n for (let day = 0; day < 7; day += 1) {\n if (dates[day].events) {\n orderedAllDayEvents = orderedAllDayEvents.concat(\n dates[day].events,\n );\n }\n }\n if (orderedAllDayEvents.length > 0) {\n this.placeAllDayEvents(orderedAllDayEvents);\n }\n }\n\n if (this.autoSelect) {\n let selectedDate;\n for (let r = 0; r < 7; r += 1) {\n if (dates[r].selected) {\n selectedDate = dates[r];\n break;\n }\n }\n\n if (selectedDate) {\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedDate.date);\n }\n\n this.onTimeSelected.emit({\n selectedTime: selectedDate.date,\n events: selectedDate.events.map((e) => e.event),\n disabled,\n });\n }\n }\n }\n\n refreshView() {\n this.range = this.getRange(this.calendarService.currentDate);\n\n if (this.inited) {\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n this.calendarService.populateAdjacentViews(this);\n this.updateCurrentView(\n this.range.startTime,\n this.views[this.currentViewIndex],\n );\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const firstDayOfWeek = new Date(this.range.startTime);\n firstDayOfWeek.setHours(12, 0, 0, 0);\n return this.formatTitle(firstDayOfWeek);\n }\n\n getHighlightClass(date: IWeekViewDateRow): string {\n let className = \" \";\n\n if (date.hasEvent) {\n className = \"weekview-with-event\";\n }\n\n if (date.selected) {\n if (className) {\n className += \" \";\n }\n className += \"weekview-selected\";\n }\n\n if (date.current) {\n if (className) {\n className += \" \";\n }\n className += \"weekview-current\";\n }\n\n return className;\n }\n\n select(selectedTime: Date, events: IDisplayEvent[]) {\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedTime);\n }\n\n this.onTimeSelected.emit({\n selectedTime,\n events: events.map((e) => e.event),\n disabled,\n });\n }\n\n placeEvents(orderedEvents: IDisplayEvent[]) {\n this.calculatePosition(orderedEvents);\n WeekViewComponent.calculateWidth(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\n }\n\n placeAllDayEvents(orderedEvents: IDisplayEvent[]) {\n this.calculatePosition(orderedEvents);\n }\n\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n let earlyEvent = event1,\n lateEvent = event2;\n if (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\n }\n }\n\n calculatePosition(events: IDisplayEvent[]) {\n const len = events.length,\n isForbidden = new Array(len);\n let maxColumn = 0;\n\n for (let i = 0; i < len; i += 1) {\n let col: number;\n for (col = 0; col < maxColumn; col += 1) {\n isForbidden[col] = false;\n }\n for (let j = 0; j < i; j += 1) {\n if (this.overlap(events[i], events[j])) {\n isForbidden[events[j].position] = true;\n }\n }\n for (col = 0; col < maxColumn; col += 1) {\n if (!isForbidden[col]) {\n break;\n }\n }\n if (col < maxColumn) {\n events[i].position = col;\n } else {\n events[i].position = maxColumn++;\n }\n }\n\n if (this.dir === \"rtl\") {\n for (let i = 0; i < len; i += 1) {\n events[i].position = maxColumn - 1 - events[i].position;\n }\n }\n }\n\n updateCurrentView(currentViewStartDate: Date, view: IWeekView) {\n const currentCalendarDate = this.calendarService.currentDate,\n today = new Date(),\n oneDay = 86400000,\n selectedDayDifference = Math.round(\n (Date.UTC(\n currentCalendarDate.getFullYear(),\n currentCalendarDate.getMonth(),\n currentCalendarDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n ),\n currentDayDifference = Math.floor(\n (Date.UTC(\n today.getFullYear(),\n today.getMonth(),\n today.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n for (let r = 0; r < 7; r += 1) {\n view.dates[r].selected = false;\n }\n\n if (\n selectedDayDifference >= 0 &&\n selectedDayDifference < 7 &&\n this.autoSelect\n ) {\n view.dates[selectedDayDifference].selected = true;\n }\n\n if (currentDayDifference >= 0 && currentDayDifference < 7) {\n view.dates[currentDayDifference].current = true;\n }\n }\n\n daySelected(viewDate: IWeekViewDateRow) {\n const selectedDate = viewDate.date,\n dates = this.views[this.currentViewIndex].dates,\n currentViewStartDate = this.range.startTime,\n oneDay = 86400000,\n selectedDayDifference = Math.round(\n (Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n selectedDate.getDate(),\n ) -\n Date.UTC(\n currentViewStartDate.getFullYear(),\n currentViewStartDate.getMonth(),\n currentViewStartDate.getDate(),\n )) /\n oneDay,\n );\n\n this.calendarService.setCurrentDate(selectedDate);\n\n for (let r = 0; r < 7; r += 1) {\n dates[r].selected = false;\n }\n\n if (selectedDayDifference >= 0 && selectedDayDifference < 7) {\n dates[selectedDayDifference].selected = true;\n }\n\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedDate);\n }\n\n this.onDayHeaderSelected.emit({\n selectedTime: selectedDate,\n events: viewDate.events.map((e) => e.event),\n disabled,\n });\n }\n\n setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper weekview-swiper\" #weekViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container weekview-slide-container\">\n <table class=\"table table-bordered table-fixed weekview-header\">\n <thead>\n <tr>\n <th class=\"calendar-hour-column\"></th>\n @for (date of views[sliderIndex].dates; track date) {\n <th\n class=\"weekview-header text-center\"\n [ngClass]=\"getHighlightClass(date)\"\n (click)=\"daySelected(date)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewHeaderTemplate\"\n [ngTemplateOutletContext]=\"{viewDate:date}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n @if (sliderIndex===currentViewIndex) {\n <div>\n <div class=\"weekview-allday-table\">\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n <div class=\"weekview-allday-content-wrapper scroll-content\">\n <table\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day, eventTemplate:weekviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm.time, tm.events)\"\n >\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:weekviewNormalEventTemplate}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n } @if (sliderIndex!==currentViewIndex) {\n <div>\n <div class=\"weekview-allday-table\">\n <div class=\"weekview-allday-label\">{{allDayLabel}}</div>\n <div class=\"weekview-allday-content-wrapper scroll-content\">\n <table\n class=\"table table-fixed weekview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (day of views[sliderIndex].dates; track\n day) {\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{day:day}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n <init-position-scroll\n class=\"weekview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed weekview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let\n i = $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n @for (tm of row; track tm) {\n <td class=\"calendar-cell\">\n @if (tm.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': tm.events}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"weekviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts}\"\n >\n </ng-template>\n </div>\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { DatePipe, NgClass, NgStyle, NgTemplateOutlet } from \"@angular/common\";\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { Swiper } from \"swiper\";\nimport { SwiperOptions } from \"swiper/types\";\n\nimport {\n CalendarMode,\n ICalendarComponent,\n IDateFormatter,\n IDayView,\n IDayViewAllDayEventSectionTemplateContext,\n IDayViewCategoryItemTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDayViewRow,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IEvent,\n IRange,\n ITimeSelected,\n} from \"./calendar.interface\";\nimport { CalendarService } from \"./calendar.service\";\nimport { initPositionScrollComponent } from \"./init-position-scroll\";\n\n@Component({\n selector: \"dayview\",\n templateUrl: \"./dayview.html\",\n styleUrls: [\"./dayview.css\"],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Eager,\n imports: [NgClass, NgStyle, NgTemplateOutlet, initPositionScrollComponent],\n})\nexport class DayViewComponent\n implements ICalendarComponent, OnInit, OnChanges, OnDestroy, AfterViewInit\n{\n constructor(\n private readonly calendarService: CalendarService,\n private readonly elm: ElementRef,\n ) {}\n\n private slider!: Swiper;\n @ViewChild(\"dayViewSwiper\") swiperElement?: ElementRef;\n\n @HostBinding(\"class.dayview\") class = true;\n\n @Input()\n dayviewCategoryItemTemplate!: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate!: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate!: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate!: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewInactiveNormalEventSectionTemplate!: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n\n @Input() formatHourColumn?: string;\n @Input() formatDayTitle?: string;\n @Input() allDayLabel?: string;\n @Input() hourParts!: number;\n @Input() eventSource!: IEvent[];\n @Input() markDisabled?: (date: Date) => boolean;\n @Input() locale!: string;\n @Input() dateFormatter?: IDateFormatter;\n @Input() dir = \"\";\n @Input() scrollToHour = 0;\n @Input() preserveScrollPosition?: boolean;\n @Input() lockSwipeToPrev?: boolean = false;\n @Input() lockSwipeToNext?: boolean = false;\n @Input() lockSwipes?: boolean = false;\n @Input() startHour!: number;\n @Input() endHour!: number;\n @Input() sliderOptions?: SwiperOptions;\n @Input() hourSegments!: number;\n @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView?: boolean;\n\n @Output() onRangeChanged = new EventEmitter<IRange>();\n @Output() onEventSelected = new EventEmitter<IEvent>();\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n @Output() onTitleChanged = new EventEmitter<string>(true);\n\n public readonly sliderIndexList = [0, 1, 2];\n public views: IDayView[] = [];\n public currentViewIndex = 0;\n public direction = 0;\n public mode: CalendarMode = \"day\";\n public range!: IRange;\n\n private inited = false;\n private currentDateChangedFromParentSubscription?: Subscription;\n private eventSourceChangedSubscription?: Subscription;\n private slideChangedSubscription?: Subscription;\n private slideUpdatedSubscription?: Subscription;\n\n public hourColumnLabels!: string[];\n public initScrollPosition!: number;\n private formatTitle!: (date: Date) => string;\n private formatHourColumnLabel!: (date: Date) => string;\n private hourRange!: number;\n\n static createDateObjects(\n startTime: Date,\n startHour: number,\n endHour: number,\n timeInterval: number,\n ): IDayViewRow[] {\n const rows: IDayViewRow[] = [],\n currentHour = 0,\n currentDate = startTime.getDate();\n let time: Date, hourStep, minStep;\n\n if (timeInterval < 1) {\n hourStep = Math.floor(1 / timeInterval);\n minStep = 60;\n } else {\n hourStep = 1;\n minStep = Math.floor(60 / timeInterval);\n }\n\n for (let hour = startHour; hour < endHour; hour += hourStep) {\n for (let interval = 0; interval < 60; interval += minStep) {\n time = new Date(startTime);\n time.setHours(currentHour + hour, interval);\n time.setDate(currentDate);\n rows.push({\n time,\n events: [],\n eventsGroupByCategory: new Map(),\n });\n }\n }\n return rows;\n }\n\n private static compareEventByStartOffset(\n eventA: IDisplayEvent,\n eventB: IDisplayEvent,\n ) {\n return eventA.startOffset - eventB.startOffset;\n }\n\n private static calculateWidth(\n orderedEvents: IDisplayEvent[],\n size: number,\n hourParts: number,\n ) {\n const totalSize = size * hourParts,\n cells: { calculated: boolean; events: IDisplayEvent[] }[] =\n new Array(totalSize);\n\n // sort by position in descending order, the right most columns should be calculated first\n orderedEvents.sort((eventA, eventB) => {\n return eventB.position - eventA.position;\n });\n for (let i = 0; i < totalSize; i += 1) {\n cells[i] = {\n calculated: false,\n events: [],\n };\n }\n const len = orderedEvents.length;\n for (let i = 0; i < len; i += 1) {\n const event = orderedEvents[i];\n let index = event.startIndex * hourParts + event.startOffset;\n while (index < event.endIndex * hourParts - event.endOffset) {\n cells[index].events.push(event);\n index += 1;\n }\n }\n\n let i = 0;\n while (i < len) {\n let event: IDisplayEvent | undefined = orderedEvents[i];\n if (!event.overlapNumber) {\n const overlapNumber = event.position + 1;\n event.overlapNumber = overlapNumber;\n const eventQueue = [event];\n while ((event = eventQueue.shift())) {\n let index =\n event.startIndex * hourParts + event.startOffset;\n while (\n index <\n event.endIndex * hourParts - event.endOffset\n ) {\n if (!cells[index].calculated) {\n cells[index].calculated = true;\n if (cells[index].events) {\n const eventCountInCell =\n cells[index].events.length;\n for (let j = 0; j < eventCountInCell; j += 1) {\n const currentEventInCell =\n cells[index].events[j];\n if (!currentEventInCell.overlapNumber) {\n currentEventInCell.overlapNumber =\n overlapNumber;\n eventQueue.push(currentEventInCell);\n }\n }\n }\n }\n index += 1;\n }\n }\n }\n i += 1;\n }\n }\n\n ngOnInit() {\n this.sliderOptions ??= {};\n this.sliderOptions.loop = true;\n this.sliderOptions.allowSlidePrev = !this.lockSwipeToPrev;\n this.sliderOptions.allowSlideNext = !this.lockSwipeToNext;\n this.sliderOptions.allowTouchMove = !this.lockSwipes;\n\n this.hourRange = (this.endHour - this.startHour) * this.hourSegments;\n if (this.dateFormatter?.formatDayViewTitle) {\n this.formatTitle = this.dateFormatter.formatDayViewTitle;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatTitle = function (date: Date) {\n return datePipe.transform(date, this.formatDayTitle) || \"\";\n };\n }\n\n if (this.dateFormatter?.formatDayViewHourColumn) {\n this.formatHourColumnLabel =\n this.dateFormatter.formatDayViewHourColumn;\n } else {\n const datePipe = new DatePipe(this.locale);\n this.formatHourColumnLabel = function (date: Date) {\n return datePipe.transform(date, this.formatHourColumn) || \"\";\n };\n }\n\n this.refreshView();\n this.hourColumnLabels = this.getHourColumnLabels();\n\n this.inited = true;\n\n this.currentDateChangedFromParentSubscription =\n this.calendarService.currentDateChangedFromParent$.subscribe(() => {\n this.refreshView();\n });\n\n this.eventSourceChangedSubscription =\n this.calendarService.eventSourceChanged$.subscribe(() => {\n this.onDataLoaded();\n });\n\n this.slideChangedSubscription =\n this.calendarService.slideChanged$.subscribe((direction) => {\n if (direction === 1) {\n this.slider.slideNext();\n } else if (direction === -1) {\n this.slider.slidePrev();\n }\n });\n\n this.slideUpdatedSubscription =\n this.calendarService.slideUpdated$.subscribe(() => {\n this.slider.update();\n });\n }\n\n ngAfterViewInit() {\n this.slider = new Swiper(\n this.swiperElement?.nativeElement,\n this.sliderOptions,\n );\n let me = this;\n this.slider.on(\"slideNextTransitionEnd\", function () {\n me.onSlideChanged(1);\n });\n\n this.slider.on(\"slidePrevTransitionEnd\", function () {\n me.onSlideChanged(-1);\n });\n\n if (this.dir === \"rtl\") {\n this.slider.changeLanguageDirection(\"rtl\");\n }\n\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n\n if (this.scrollToHour > 0) {\n const hourColumns = this.elm.nativeElement\n .querySelector(\".dayview-normal-event-container\")\n .querySelectorAll(\".calendar-hour-column\");\n const me = this;\n setTimeout(() => {\n me.initScrollPosition =\n hourColumns[me.scrollToHour - me.startHour].offsetTop;\n }, 50);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.inited) {\n return;\n }\n if (\n (changes[\"startHour\"] || changes[\"endHour\"]) &&\n (!changes[\"startHour\"].isFirstChange() ||\n !changes[\"endHour\"].isFirstChange())\n ) {\n this.views = [];\n this.hourRange =\n (this.endHour - this.startHour) * this.hourSegments;\n this.direction = 0;\n this.refreshView();\n this.hourColumnLabels = this.getHourColumnLabels();\n }\n\n const eventSourceChange = changes[\"eventSource\"];\n if (eventSourceChange?.currentValue) {\n this.onDataLoaded();\n }\n\n const lockSwipeToPrev = changes[\"lockSwipeToPrev\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlidePrev = !lockSwipeToPrev.currentValue;\n }\n\n const lockSwipeToNext = changes[\"lockSwipeToNext\"];\n if (lockSwipeToPrev) {\n this.slider.allowSlideNext = !lockSwipeToNext.currentValue;\n }\n\n const lockSwipes = changes[\"lockSwipes\"];\n if (lockSwipes) {\n this.slider.allowTouchMove = !lockSwipes.currentValue;\n }\n }\n\n ngOnDestroy() {\n if (this.currentDateChangedFromParentSubscription) {\n this.currentDateChangedFromParentSubscription.unsubscribe();\n this.currentDateChangedFromParentSubscription = undefined;\n }\n\n if (this.eventSourceChangedSubscription) {\n this.eventSourceChangedSubscription.unsubscribe();\n this.eventSourceChangedSubscription = undefined;\n }\n\n if (this.slideChangedSubscription) {\n this.slideChangedSubscription.unsubscribe();\n this.slideChangedSubscription = undefined;\n }\n\n if (this.slideUpdatedSubscription) {\n this.slideUpdatedSubscription.unsubscribe();\n this.slideUpdatedSubscription = undefined;\n }\n }\n\n onSlideChanged(direction: number) {\n this.currentViewIndex = (this.currentViewIndex + direction + 3) % 3;\n this.move(direction);\n }\n\n move(direction: number) {\n if (direction === 0) {\n return;\n }\n\n this.direction = direction;\n const adjacentDate = this.calendarService.getAdjacentCalendarDate(\n this.mode,\n direction,\n );\n this.calendarService.setCurrentDate(adjacentDate);\n this.refreshView();\n this.direction = 0;\n }\n\n private getHourColumnLabels(): string[] {\n const hourColumnLabels: string[] = [];\n for (\n let hour = 0, length = this.views[0].rows.length;\n hour < length;\n hour += 1\n ) {\n // handle edge case for DST\n if (\n hour === 0 &&\n this.views[0].rows[hour].time.getHours() !== this.startHour\n ) {\n const time = new Date(this.views[0].rows[hour].time);\n time.setDate(time.getDate() + 1);\n time.setHours(this.startHour);\n hourColumnLabels.push(this.formatHourColumnLabel(time));\n } else {\n hourColumnLabels.push(\n this.formatHourColumnLabel(this.views[0].rows[hour].time),\n );\n }\n }\n return hourColumnLabels;\n }\n\n getViewData(startTime: Date): IDayView {\n return {\n rows: DayViewComponent.createDateObjects(\n startTime,\n this.startHour,\n this.endHour,\n this.hourSegments,\n ),\n allDayEvents: [],\n categorizedAllDayEventsMap: new Map<\n string,\n IDisplayAllDayEvent[]\n >(),\n };\n }\n\n getRange(currentDate: Date): IRange {\n const year = currentDate.getFullYear(),\n month = currentDate.getMonth(),\n date = currentDate.getDate(),\n startTime = new Date(year, month, date, 12, 0, 0),\n endTime = new Date(year, month, date + 1, 12, 0, 0);\n\n return {\n startTime,\n endTime,\n };\n }\n\n onDataLoaded() {\n const eventSource = this.eventSource,\n len = eventSource ? eventSource.length : 0,\n startTime = this.range.startTime,\n endTime = this.range.endTime,\n utcStartTime = Date.UTC(\n startTime.getFullYear(),\n startTime.getMonth(),\n startTime.getDate(),\n ),\n utcEndTime = Date.UTC(\n endTime.getFullYear(),\n endTime.getMonth(),\n endTime.getDate(),\n ),\n currentViewIndex = this.currentViewIndex,\n rows = this.views[currentViewIndex].rows,\n allDayEvents: IDisplayAllDayEvent[] = (this.views[\n currentViewIndex\n ].allDayEvents = []),\n oneHour = 3600000,\n eps = 0.016,\n rangeStartRowIndex = this.startHour * this.hourSegments,\n rangeEndRowIndex = this.endHour * this.hourSegments;\n let normalEventInRange = false;\n\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n rows[hour].events = [];\n rows[hour].eventsGroupByCategory = undefined;\n }\n\n for (let i = 0; i < len; i += 1) {\n const event = eventSource[i];\n const eventStartTime = event.startTime;\n const eventEndTime = event.endTime;\n let eventUTCStartTime: number, eventUTCEndTime: number;\n\n if (event.allDay) {\n eventUTCStartTime = eventStartTime.getTime();\n eventUTCEndTime = eventEndTime.getTime();\n } else {\n eventUTCStartTime = Date.UTC(\n eventStartTime.getFullYear(),\n eventStartTime.getMonth(),\n eventStartTime.getDate(),\n );\n eventUTCEndTime = Date.UTC(\n eventEndTime.getFullYear(),\n eventEndTime.getMonth(),\n eventEndTime.getDate() + 1,\n );\n }\n\n if (\n eventUTCEndTime <= utcStartTime ||\n eventUTCStartTime >= utcEndTime ||\n eventStartTime >= eventEndTime\n ) {\n continue;\n }\n\n if (event.allDay) {\n allDayEvents.push({\n event,\n });\n } else {\n normalEventInRange = true;\n\n let timeDifferenceStart: number;\n if (eventUTCStartTime < utcStartTime) {\n timeDifferenceStart = 0;\n } else {\n timeDifferenceStart =\n (eventStartTime.getHours() +\n eventStartTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let timeDifferenceEnd: number;\n if (eventUTCEndTime > utcEndTime) {\n timeDifferenceEnd =\n ((utcEndTime - utcStartTime) / oneHour) *\n this.hourSegments;\n } else {\n timeDifferenceEnd =\n (eventEndTime.getHours() +\n eventEndTime.getMinutes() / 60) *\n this.hourSegments;\n }\n\n let startIndex = Math.floor(timeDifferenceStart);\n let endIndex = Math.ceil(timeDifferenceEnd - eps);\n let startOffset = 0;\n let endOffset = 0;\n if (this.hourParts !== 1) {\n if (startIndex >= rangeStartRowIndex) {\n startOffset = Math.floor(\n (timeDifferenceStart - startIndex) * this.hourParts,\n );\n }\n if (endIndex <= rangeEndRowIndex) {\n endOffset = Math.floor(\n (endIndex - timeDifferenceEnd) * this.hourParts,\n );\n }\n }\n\n if (startIndex < rangeStartRowIndex) {\n startIndex = 0;\n } else {\n startIndex -= rangeStartRowIndex;\n }\n if (endIndex > rangeEndRowIndex) {\n endIndex = rangeEndRowIndex;\n }\n endIndex -= rangeStartRowIndex;\n\n if (startIndex < endIndex) {\n const displayEvent: IDisplayEvent = {\n event,\n startIndex,\n endIndex,\n startOffset,\n endOffset,\n position: 0,\n };\n\n let eventSet = rows[startIndex].events;\n if (eventSet) {\n eventSet.push(displayEvent);\n } else {\n eventSet = [];\n eventSet.push(displayEvent);\n rows[startIndex].events = eventSet;\n }\n\n // setup eventsGroupedByCategory\n if (\n this.dayviewShowCategoryView &&\n this.dayviewCategorySource &&\n event.category\n ) {\n let groupedEvents =\n rows[startIndex].eventsGroupByCategory;\n if (groupedEvents) {\n if (\n Array.isArray(groupedEvents.get(event.category))\n ) {\n groupedEvents\n .get(event.category)\n ?.push(displayEvent);\n } else {\n groupedEvents.set(event.category, [\n displayEvent,\n ]);\n }\n } else {\n groupedEvents = new Map();\n groupedEvents.set(event.category, [displayEvent]);\n rows[startIndex].eventsGroupByCategory =\n groupedEvents;\n }\n }\n }\n }\n }\n\n if (normalEventInRange) {\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n for (const category of this.dayviewCategorySource) {\n let displayEvents: IDisplayEvent[] = [];\n\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n let groupedEvents =\n rows[hour].eventsGroupByCategory?.get(category);\n if (groupedEvents) {\n groupedEvents.sort(\n DayViewComponent.compareEventByStartOffset,\n );\n displayEvents = displayEvents.concat(groupedEvents);\n }\n }\n\n if (displayEvents.length > 0) {\n this.placeEvents(displayEvents);\n }\n }\n } else {\n let orderedEvents: IDisplayEvent[] = [];\n for (let hour = 0; hour < this.hourRange; hour += 1) {\n if (rows[hour].events) {\n rows[hour].events.sort(\n DayViewComponent.compareEventByStartOffset,\n );\n orderedEvents = orderedEvents.concat(rows[hour].events);\n }\n }\n if (orderedEvents.length > 0) {\n this.placeEvents(orderedEvents);\n }\n }\n }\n\n if (this.dayviewShowCategoryView && this.dayviewCategorySource) {\n this.categorizeAllDayEvents(allDayEvents);\n }\n }\n\n categorizeAllDayEvents(allDayEvents: IDisplayAllDayEvent[]) {\n const categoryIdAllDayEventsMap = (this.views[\n this.currentViewIndex\n ].categorizedAllDayEventsMap = new Map<\n string,\n IDisplayAllDayEvent[]\n >());\n\n for (const displayAllDayEvent of allDayEvents) {\n if (displayAllDayEvent.event.category) {\n if (\n categoryIdAllDayEventsMap.get(\n displayAllDayEvent.event.category,\n )\n ) {\n categoryIdAllDayEventsMap\n .get(displayAllDayEvent.event.category)\n ?.push(displayAllDayEvent);\n } else {\n categoryIdAllDayEventsMap.set(\n displayAllDayEvent.event.category,\n [displayAllDayEvent],\n );\n }\n }\n }\n }\n\n refreshView() {\n this.range = this.getRange(this.calendarService.currentDate);\n if (this.inited) {\n const title = this.getTitle();\n this.onTitleChanged.emit(title);\n }\n\n this.calendarService.populateAdjacentViews(this);\n this.calendarService.rangeChanged(this);\n }\n\n getTitle(): string {\n const startingDate = new Date(this.range.startTime);\n startingDate.setHours(12, 0, 0, 0);\n return this.formatTitle(startingDate);\n }\n\n select(row: IDayViewRow, category?: string) {\n const selectedTime = row.time;\n let events = row.events;\n if (category) {\n events = row.eventsGroupByCategory?.get(category) || [];\n }\n\n let disabled = false;\n if (this.markDisabled) {\n disabled = this.markDisabled(selectedTime);\n }\n\n this.onTimeSelected.emit({\n selectedTime,\n category,\n events: events.map((e) => e.event),\n disabled,\n });\n }\n\n placeEvents(orderedEvents: IDisplayEvent[]) {\n this.calculatePosition(orderedEvents);\n DayViewComponent.calculateWidth(\n orderedEvents,\n this.hourRange,\n this.hourParts,\n );\n }\n\n overlap(event1: IDisplayEvent, event2: IDisplayEvent): boolean {\n let earlyEvent = event1,\n lateEvent = event2;\n if (\n event1.startIndex > event2.startIndex ||\n (event1.startIndex === event2.startIndex &&\n event1.startOffset > event2.startOffset)\n ) {\n earlyEvent = event2;\n lateEvent = event1;\n }\n\n if (earlyEvent.endIndex <= lateEvent.startIndex) {\n return false;\n } else {\n return !(\n earlyEvent.endIndex - lateEvent.startIndex === 1 &&\n earlyEvent.endOffset + lateEvent.startOffset >= this.hourParts\n );\n }\n }\n\n calculatePosition(events: IDisplayEvent[]) {\n const len = events.length,\n isForbidden: boolean[] = new Array(len);\n let maxColumn = 0,\n col: number;\n\n for (let i = 0; i < len; i += 1) {\n for (col = 0; col < maxColumn; col += 1) {\n isForbidden[col] = false;\n }\n for (let j = 0; j < i; j += 1) {\n if (this.overlap(events[i], events[j])) {\n isForbidden[events[j].position] = true;\n }\n }\n for (col = 0; col < maxColumn; col += 1) {\n if (!isForbidden[col]) {\n break;\n }\n }\n if (col < maxColumn) {\n events[i].position = col;\n } else {\n events[i].position = maxColumn++;\n }\n }\n\n if (this.dir === \"rtl\") {\n for (let i = 0; i < len; i += 1) {\n events[i].position = maxColumn - 1 - events[i].position;\n }\n }\n }\n\n setScrollPosition(scrollPosition: number) {\n this.initScrollPosition = scrollPosition;\n }\n}\n","<div class=\"swiper dayview-swiper\" #dayViewSwiper>\n <div class=\"swiper-wrapper slides-container\" [dir]=\"dir\">\n @for (sliderIndex of sliderIndexList; track sliderIndex) {\n <div class=\"swiper-slide slide-container dayview-slide-container\">\n @if (!dayviewShowCategoryView) {\n <div class=\"dayview-allday-table\">\n <div class=\"dayview-allday-label\">{{allDayLabel}}</div>\n <div class=\"dayview-allday-content-wrapper scroll-content\">\n <table\n class=\"table table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @if (sliderIndex===currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n } @if (sliderIndex!==currentViewIndex) {\n <td\n class=\"calendar-cell\"\n [ngClass]=\"{'calendar-event-wrap':views[sliderIndex].allDayEvents.length>0}\"\n [ngStyle]=\"{height: 25*views[sliderIndex].allDayEvents.length+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents:views[sliderIndex].allDayEvents,eventTemplate:dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex===currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td\n class=\"calendar-cell\"\n tappable\n (click)=\"select(tm)\"\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex!==currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (tm of views[sliderIndex].rows; track tm; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{hourColumnLabels[i]}}\n </td>\n <td class=\"calendar-cell\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm:tm, hourParts: hourParts, eventTemplate:dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } } @if (dayviewShowCategoryView) {\n <div class=\"dayview-category-header\">\n <table\n class=\"table table-fixed table-bordered dayview-category-header-table\"\n >\n <thead>\n <tr>\n <th\n class=\"dayview-category-header-item calendar-hour-column\"\n ></th>\n @for (category of dayviewCategorySource; track\n category) {\n <th class=\"dayview-category-header-item\">\n <ng-template\n [ngTemplateOutlet]=\"dayviewCategoryItemTemplate\"\n [ngTemplateOutletContext]=\"{category}\"\n >\n </ng-template>\n </th>\n }\n </tr>\n </thead>\n </table>\n </div>\n <div class=\"dayview-allday-table\">\n <div class=\"dayview-allday-label\">{{ allDayLabel }}</div>\n <div\n class=\"dayview-allday-content-wrapper dayview-allday-category-wrapper scroll-content\"\n >\n <table\n class=\"table table-fixed table-bordered dayview-allday-content-table\"\n >\n <tbody>\n <tr>\n @for (category of dayviewCategorySource; track\n category) {\n <td class=\"calendar-cell\">\n <div class=\"calendar-event-wrap\">\n @if (sliderIndex === currentViewIndex) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n } @if (sliderIndex !== currentViewIndex\n ) {\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveAllDayEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{allDayEvents: views[currentViewIndex].categorizedAllDayEventsMap.get(category)!, eventTemplate: dayviewAllDayEventTemplate}\"\n >\n </ng-template>\n }\n </div>\n </td>\n }\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n @if (sliderIndex === currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n [emitEvent]=\"preserveScrollPosition\"\n (onScroll)=\"setScrollPosition($event)\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } @if (sliderIndex !== currentViewIndex) {\n <init-position-scroll\n class=\"dayview-normal-event-container dayview-categorized-normal-event-container\"\n [initPosition]=\"initScrollPosition\"\n >\n <table\n class=\"table table-bordered table-fixed dayview-normal-event-table\"\n >\n <tbody>\n @for (row of views[sliderIndex].rows; track row; let i =\n $index) {\n <tr>\n <td class=\"calendar-hour-column text-center\">\n {{ hourColumnLabels[i] }}\n </td>\n @if (dayviewCategorySource?.size === 0) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: [], time: row.time }, hourParts, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n } @for (category of dayviewCategorySource; track\n category) {\n <td\n class=\"calendar-cell\"\n (click)=\"select(row, category)\"\n tappable\n >\n <ng-template\n [ngTemplateOutlet]=\"dayviewInactiveNormalEventSectionTemplate\"\n [ngTemplateOutletContext]=\"{tm: { events: $safeNavigationMigration(row.eventsGroupByCategory?.get(category))!, time: row.time }, hourParts, category, eventTemplate: dayviewNormalEventTemplate}\"\n >\n </ng-template>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </init-position-scroll>\n } }\n </div>\n }\n </div>\n</div>\n","import {\n Component,\n EventEmitter,\n Input,\n OnInit,\n Output,\n TemplateRef,\n Inject,\n LOCALE_ID,\n OnDestroy,\n} from \"@angular/core\";\nimport { Subscription } from \"rxjs\";\nimport { CalendarService } from \"./calendar.service\";\nimport SwiperCore from \"swiper\";\nimport { IonicSlides, IonicModule } from \"@ionic/angular\";\nimport {\n IEvent,\n CalendarMode,\n QueryMode,\n Step,\n IMonthViewDisplayEventTemplateContext,\n IMonthViewEventDetailTemplateContext,\n IDisplayWeekViewHeader,\n IDisplayAllDayEvent,\n IDisplayEvent,\n IWeekViewAllDayEventSectionTemplateContext,\n IDayViewAllDayEventSectionTemplateContext,\n IWeekViewNormalEventSectionTemplateContext,\n IDayViewNormalEventSectionTemplateContext,\n IDateFormatter,\n IRange,\n ITimeSelected,\n IDayViewCategoryItemTemplateContext,\n} from \"./calendar.interface\";\nimport { NgClass, NgStyle, NgTemplateOutlet, DatePipe } from \"@angular/common\";\nimport { MonthViewComponent } from \"./monthview\";\nimport { WeekViewComponent } from \"./weekview\";\nimport { DayViewComponent } from \"./dayview\";\n\nSwiperCore.use([IonicSlides]);\n\n@Component({\n selector: \"calendar\",\n templateUrl: \"./calendar.html\",\n styleUrls: [\"./calendar.css\"],\n providers: [CalendarService],\n imports: [\n IonicModule,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n MonthViewComponent,\n WeekViewComponent,\n DayViewComponent,\n DatePipe,\n ],\n})\nexport class CalendarComponent implements OnInit, OnDestroy {\n @Input()\n get currentDate(): Date {\n return this._currentDate;\n }\n\n set currentDate(val: Date) {\n if (!val) {\n val = new Date();\n }\n\n this._currentDate = val;\n this.calendarService.setCurrentDate(val, true);\n this.onCurrentDateChanged.emit(this._currentDate);\n }\n\n @Input() eventSource: IEvent[] = [];\n @Input() calendarMode: CalendarMode = \"month\";\n @Input() formatDay: string = \"d\";\n @Input() formatDayHeader: string = \"EEE\";\n @Input() formatDayTitle: string = \"MMMM dd, yyyy\";\n @Input() formatWeekTitle: string = \"MMMM yyyy, 'Week' w\";\n @Input() formatMonthTitle: string = \"MMMM yyyy\";\n @Input() formatWeekViewDayHeader: string = \"EEE d\";\n @Input() formatHourColumn: string = \"ha\";\n @Input() showEventDetail: boolean = true;\n @Input() startingDayMonth: number = 0;\n @Input() startingDayWeek: number = 0;\n @Input() allDayLabel: string = \"all day\";\n @Input() noEventsLabel: string = \"No Events\";\n @Input() queryMode: QueryMode = \"local\";\n @Input() step: Step = Step.Hour;\n @Input() timeInterval: number = 60;\n @Input() autoSelect: boolean = true;\n @Input() markDisabled?: (date: Date) => boolean;\n @Input()\n monthviewDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewInactiveDisplayEventTemplate?: TemplateRef<IMonthViewDisplayEventTemplateContext>;\n @Input()\n monthviewEventDetailTemplate?: TemplateRef<IMonthViewEventDetailTemplateContext>;\n @Input() weekviewHeaderTemplate?: TemplateRef<IDisplayWeekViewHeader>;\n @Input() weekviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() weekviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n dayviewCategoryItemTemplate?: TemplateRef<IDayViewCategoryItemTemplateContext>;\n @Input() dayviewAllDayEventTemplate?: TemplateRef<IDisplayAllDayEvent>;\n @Input() dayviewNormalEventTemplate?: TemplateRef<IDisplayEvent>;\n @Input()\n weekviewAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewNormalEventSectionTemplate?: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input()\n weekviewInactiveAllDayEventSectionTemplate?: TemplateRef<IWeekViewAllDayEventSectionTemplateContext>;\n @Input()\n weekviewInactiveNormalEventSectionTemplate?: TemplateRef<IWeekViewNormalEventSectionTemplateContext>;\n @Input()\n dayviewInactiveAllDayEventSectionTemplate?: TemplateRef<IDayViewAllDayEventSectionTemplateContext>;\n @Input()\n dayviewInactiveNormalEventSectionTemplate?: TemplateRef<IDayViewNormalEventSectionTemplateContext>;\n @Input() dateFormatter?: IDateFormatter;\n @Input() dir: string = \"\";\n @Input() scrollToHour: number = 0;\n @Input() preserveScrollPosition: boolean = false;\n @Input() lockSwipeToPrev: boolean = false;\n @Input() lockSwipeToNext: boolean = false;\n @Input() lockSwipes: boolean = false;\n @Input() locale: string = \"\";\n @Input() startHour: number = 0;\n @Input() endHour: number = 24;\n @Input() sliderOptions: any;\n @Input() dayviewCategorySource?: Set<string>;\n @Input() dayviewShowCategoryView: boolean = false;\n\n @Output() onCurrentDateChanged = new EventEmitter<Date>();\n @Output() onRangeChanged = new EventEmitter<IRange>();\n @Output() onEventSelected = new EventEmitter<IEvent>();\n @Output() onTimeSelected = new EventEmitter<ITimeSelected>();\n @Output() onDayHeaderSelected = new EventEmitter<ITimeSelected>();\n @Output() onTitleChanged = new EventEmitter<string>(true);\n\n private _currentDate: Date = new Date();\n public hourParts = 1;\n public hourSegments = 1;\n private currentDateChangedFromChildrenSubscription?: Subscription;\n\n constructor(\n private readonly calendarService: CalendarService,\n @Inject(LOCALE_ID) appLocale: string,\n ) {\n this.locale = appLocale;\n }\n\n ngOnInit() {\n if (this.autoSelect) {\n this.autoSelect = this.autoSelect.toString() !== \"false\";\n }\n this.hourSegments = 60 / this.timeInterval;\n this.hourParts = 60 / this.step;\n if (this.hourParts <= this.hourSegments) {\n this.hourParts = 1;\n } else {\n this.hourParts = this.hourParts / this.hourSegments;\n }\n this.startHour = Number.parseInt(this.startHour.toString());\n this.endHour = Number.parseInt(this.endHour.toString());\n this.calendarService.queryMode = this.queryMode;\n\n this.currentDateChangedFromChildrenSubscription =\n this.calendarService.currentDateChangedFromChildren$.subscribe(\n (currentDate) => {\n this._currentDate = currentDate;\n this.onCurrentDateChanged.emit(currentDate);\n },\n );\n }\n\n ngOnDestroy() {\n if (this.currentDateChangedFromChildrenSubscription) {\n this.currentDateChangedFromChildrenSubscription.unsubscribe();\n this.currentDateChangedFromChildrenSubscription = undefined;\n }\n }\n\n rangeChanged(range: IRange) {\n this.onRangeChanged.emit(range);\n }\n\n eventSelected(event: IEvent) {\n this.onEventSelected.emit(event);\n }\n\n timeSelected(timeSelected: ITimeSelected) {\n this.onTimeSelected.emit(timeSelected);\n }\n\n daySelected(daySelected: ITimeSelected) {\n this.onDayHeaderSelected.emit(daySelected);\n }\n\n titleChanged(title: string) {\n this.onTitleChanged.emit(title);\n }\n\n slideNext() {\n this.calendarService.slide(1);\n }\n\n slidePrev() {\n this.calendarService.slide(-1);\n }\n}\n","<ng-template\n #monthviewDefaultDisplayEventTemplate\n let-view=\"view\"\n let-row=\"row\"\n let-col=\"col\"\n>\n {{view.dates[row*7+col].label}}\n</ng-template>\n<ng-template\n #monthviewDefaultEventDetailTemplate\n let-showEventDetail=\"showEventDetail\"\n let-selectedDate=\"selectedDate\"\n let-noEventsLabel=\"noEventsLabel\"\n>\n @if (showEventDetail) {\n <ion-list\n class=\"event-detail-container\"\n has-bouncing=\"false\"\n overflow-scroll=\"false\"\n >\n @for (event of selectedDate?.events; track event) {\n <ion-item (click)=\"eventSelected(event)\">\n @if (!event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{event.startTime|date: 'HH:mm'}} - {{event.endTime|date:\n 'HH:mm'}}\n </span>\n } @if (event.allDay) {\n <span class=\"monthview-eventdetail-timecolumn\"\n >{{allDayLabel}}</span\n >\n }\n <span class=\"event-detail\"> | {{event.title}} </span>\n @if (event.categoryId) {\n <span class=\"event-detail event-category-detail\"\n >[{{event.categoryName}}]</span\n >\n }\n </ion-item>\n } @if (selectedDate?.events.length==0) {\n <ion-item>\n <div class=\"no-events-label\">{{noEventsLabel}}</div>\n </ion-item>\n }\n </ion-list>\n }\n</ng-template>\n<ng-template #defaultWeekviewHeaderTemplate let-viewDate=\"viewDate\">\n {{ viewDate.dayHeader }}\n</ng-template>\n<ng-template #defaultCategoryItemTemplate let-category=\"category\">\n {{ category }}\n</ng-template>\n<ng-template #defaultAllDayEventTemplate let-displayEvent=\"displayEvent\">\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\n</ng-template>\n<ng-template #defaultNormalEventTemplate let-displayEvent=\"displayEvent\">\n <div class=\"calendar-event-inner\">{{displayEvent.event.title}}</div>\n</ng-template>\n<ng-template\n #defaultWeekViewAllDayEventSectionTemplate\n let-day=\"day\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (day.events) {\n <div\n [ngClass]=\"{'calendar-event-wrap': day.events}\"\n [ngStyle]=\"{height: 25*day.events.length+'px'}\"\n >\n @for (displayEvent of day.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*displayEvent.position+'px', width: 100*(displayEvent.endIndex-displayEvent.startIndex)+'%', height: '25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template\n #defaultDayViewAllDayEventSectionTemplate\n let-allDayEvents=\"allDayEvents\"\n let-eventTemplate=\"eventTemplate\"\n>\n @for (displayEvent of allDayEvents; track displayEvent; let eventIndex =\n $index) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: 25*eventIndex+'px',width: '100%',height:'25px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n</ng-template>\n<ng-template\n #defaultNormalEventSectionTemplate\n let-tm=\"tm\"\n let-hourParts=\"hourParts\"\n let-eventTemplate=\"eventTemplate\"\n>\n @if (tm.events) {\n <div [ngClass]=\"{'calendar-event-wrap': tm.events}\">\n @for (displayEvent of tm.events; track displayEvent) {\n <div\n class=\"calendar-event\"\n tappable\n (click)=\"eventSelected(displayEvent.event)\"\n [ngStyle]=\"{top: (37*displayEvent.startOffset/hourParts)+'px',left: 100/displayEvent.overlapNumber*displayEvent.position+'%', width: 100/displayEvent.overlapNumber+'%', height: 37*(displayEvent.endIndex -displayEvent.startIndex - (displayEvent.endOffset + displayEvent.startOffset)/hourParts)+'px'}\"\n >\n <ng-template\n [ngTemplateOutlet]=\"eventTemplate\"\n [ngTemplateOutletContext]=\"{displayEvent:displayEvent}\"\n >\n </ng-template>\n </div>\n }\n </div>\n }\n</ng-template>\n<ng-template #defaultInactiveAllDayEventSectionTemplate> </ng-template>\n<ng-template #defaultInactiveNormalEventSectionTemplate> </ng-template>\n\n<div class=\"{{calendarMode}}view-container\">\n @switch (calendarMode) { @case ('month') {\n <monthview\n [formatDay]=\"formatDay\"\n [formatDayHeader]=\"formatDayHeader\"\n [formatMonthTitle]=\"formatMonthTitle\"\n [startingDayMonth]=\"startingDayMonth\"\n [showEventDetail]=\"showEventDetail\"\n [noEventsLabel]=\"noEventsLabel\"\n [autoSelect]=\"autoSelect\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [monthviewDisplayEventTemplate]=\"monthviewDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\n [monthviewInactiveDisplayEventTemplate]=\"monthviewInactiveDisplayEventTemplate||monthviewDefaultDisplayEventTemplate\"\n [monthviewEventDetailTemplate]=\"monthviewEventDetailTemplate||monthviewDefaultEventDetailTemplate\"\n [locale]=\"locale\"\n [dateFormatter]=\"dateFormatter\"\n [dir]=\"dir\"\n [lockSwipeToPrev]=\"lockSwipeToPrev\"\n [lockSwipeToNext]=\"lockSwipeToNext\"\n [lockSwipes]=\"lockSwipes\"\n [sliderOptions]=\"sliderOptions\"\n (onRangeChanged)=\"rangeChanged($event)\"\n (onEventSelected)=\"eventSelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </monthview>\n } @case ('week') {\n <weekview\n [formatWeekTitle]=\"formatWeekTitle\"\n [formatWeekViewDayHeader]=\"formatWeekViewDayHeader\"\n [formatHourColumn]=\"formatHourColumn\"\n [startingDayWeek]=\"startingDayWeek\"\n [allDayLabel]=\"allDayLabel\"\n [hourParts]=\"hourParts\"\n [autoSelect]=\"autoSelect\"\n [hourSegments]=\"hourSegments\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [weekviewHeaderTemplate]=\"weekviewHeaderTemplate||defaultWeekviewHeaderTemplate\"\n [weekviewAllDayEventTemplate]=\"weekviewAllDayEventTemplate||defaultAllDayEventTemplate\"\n [weekviewNormalEventTemplate]=\"weekviewNormalEventTemplate||defaultNormalEventTemplate\"\n [weekviewAllDayEventSectionTemplate]=\"weekviewAllDayEventSectionTemplate||defaultWeekViewAllDayEventSectionTemplate\"\n [weekviewNormalEventSectionTemplate]=\"weekviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\n [weekviewInactiveAllDayEventSectionTemplate]=\"weekviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\n [weekviewInactiveNormalEventSectionTemplate]=\"weekviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\n [locale]=\"locale\"\n [dateFormatter]=\"dateFormatter\"\n [dir]=\"dir\"\n [scrollToHour]=\"scrollToHour\"\n [preserveScrollPosition]=\"preserveScrollPosition\"\n [lockSwipeToPrev]=\"lockSwipeToPrev\"\n [lockSwipeToNext]=\"lockSwipeToNext\"\n [lockSwipes]=\"lockSwipes\"\n [startHour]=\"startHour\"\n [endHour]=\"endHour\"\n [sliderOptions]=\"sliderOptions\"\n (onRangeChanged)=\"rangeChanged($event)\"\n (onEventSelected)=\"eventSelected($event)\"\n (onDayHeaderSelected)=\"daySelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </weekview>\n } @case ('day') {\n <dayview\n [formatDayTitle]=\"formatDayTitle\"\n [formatHourColumn]=\"formatHourColumn\"\n [allDayLabel]=\"allDayLabel\"\n [hourParts]=\"hourParts\"\n [hourSegments]=\"hourSegments\"\n [eventSource]=\"eventSource\"\n [markDisabled]=\"markDisabled\"\n [dayviewCategoryItemTemplate]=\"dayviewCategoryItemTemplate||defaultCategoryItemTemplate\"\n [dayviewAllDayEventTemplate]=\"dayviewAllDayEventTemplate||defaultAllDayEventTemplate\"\n [dayviewNormalEventTemplate]=\"dayviewNormalEventTemplate||defaultNormalEventTemplate\"\n [dayviewAllDayEventSectionTemplate]=\"dayviewAllDayEventSectionTemplate||defaultDayViewAllDayEventSectionTemplate\"\n [dayviewNormalEventSectionTemplate]=\"dayviewNormalEventSectionTemplate||defaultNormalEventSectionTemplate\"\n [dayviewInactiveAllDayEventSectionTemplate]=\"dayviewInactiveAllDayEventSectionTemplate||defaultInactiveAllDayEventSectionTemplate\"\n [dayviewInactiveNormalEventSectionTemplate]=\"dayviewInactiveNormalEventSectionTemplate||defaultInactiveNormalEventSectionTemplate\"\n [locale]=\"locale\"\n [dateFormatter]=\"dateFormatter\"\n [dir]=\"dir\"\n [scrollToHour]=\"scrollToHour\"\n [preserveScrollPosition]=\"preserveScrollPosition\"\n [lockSwipeToPrev]=\"lockSwipeToPrev\"\n [lockSwipeToNext]=\"lockSwipeToNext\"\n [lockSwipes]=\"lockSwipes\"\n [startHour]=\"startHour\"\n [endHour]=\"endHour\"\n [sliderOptions]=\"sliderOptions\"\n (onRangeChanged)=\"rangeChanged($event)\"\n [dayviewCategorySource]=\"dayviewCategorySource\"\n [dayviewShowCategoryView]=\"dayviewShowCategoryView\"\n (onEventSelected)=\"eventSelected($event)\"\n (onTimeSelected)=\"timeSelected($event)\"\n (onTitleChanged)=\"titleChanged($event)\"\n >\n </dayview>\n } }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.CalendarService"],"mappings":"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"}