{"version":3,"file":"angular-calendar-scheduler.mjs","sources":["../../lib/modules/scheduler/utils/calendar-scheduler-utils.ts","../../lib/modules/common/utils.ts","../../lib/modules/common/temp/util.ts","../../lib/modules/common/temp/calendar-resize-helper.provider.ts","../../lib/modules/common/temp/calendar-drag-helper.provider.ts","../../lib/modules/scheduler/scheduler-config.ts","../../lib/modules/scheduler/utils/calendar-scheduler-utils.provider.ts","../../lib/modules/scheduler/calendar-scheduler-hour-segment.component.ts","../../lib/modules/scheduler/calendar-scheduler-header.component.ts","../../lib/modules/scheduler/calendar-scheduler-event-actions.component.ts","../../lib/modules/scheduler/formatters/scheduler-event-title-formatter.provider.ts","../../lib/modules/scheduler/pipes/scheduler-event-title.pipe.ts","../../lib/modules/scheduler/calendar-scheduler-event-title.component.ts","../../lib/modules/scheduler/calendar-scheduler-event-content.component.ts","../../lib/modules/scheduler/calendar-scheduler-event.component.ts","../../lib/modules/scheduler/calendar-scheduler-view.component.ts","../../lib/modules/scheduler/pipes/calendar-scheduler-date.pipe.ts","../../lib/modules/scheduler/formatters/scheduler-date-formatter.provider.ts","../../lib/modules/scheduler/scheduler.module.ts","../../lib/angular-calendar-scheduler.ts"],"sourcesContent":["import {\n    CalendarSchedulerEvent,\n    SchedulerViewHour,\n    SchedulerViewDay,\n    SchedulerViewEvent,\n    SchedulerViewHourSegment,\n    SchedulerView,\n    SchedulerViewPeriod\n} from '../models';\nimport {\n    WeekViewHour,\n    WeekViewHourSegment\n} from 'calendar-utils';\nimport { DateAdapter } from 'angular-calendar';\n\n// import * as momentNS from 'moment';\n// const moment = momentNS;\n// import moment from 'moment-timezone';\n\nexport enum DAYS_OF_WEEK {\n    SUNDAY = 0,\n    MONDAY = 1,\n    TUESDAY = 2,\n    WEDNESDAY = 3,\n    THURSDAY = 4,\n    FRIDAY = 5,\n    SATURDAY = 6\n}\n\nconst DEFAULT_WEEKEND_DAYS: number[] = [\n    DAYS_OF_WEEK.SUNDAY,\n    DAYS_OF_WEEK.SATURDAY\n];\n\nexport const DAYS_IN_WEEK: number = 7;\nexport const HOURS_IN_DAY: number = 24;\nexport const MINUTES_IN_HOUR: number = 60;\nexport const SECONDS_IN_DAY: number = 60 * 60 * 24;\n\nexport const DEFAULT_HOUR_SEGMENT_HEIGHT_PX = 40;\nexport const DEFAULT_EVENT_WIDTH = 1;\nexport const DEFAULT_HOUR_SEGMENTS = 2;\n\nexport interface Time {\n    hour: number;\n    minute: number;\n  }\n\nexport interface GetSchedulerViewHourGridArgs {\n    viewDate: Date;\n    hourSegments: number;\n    dayStart: Time;\n    dayEnd: Time;\n}\n\nexport function getSchedulerViewHourGrid(\n    dateAdapter: DateAdapter,\n    {\n        viewDate,\n        hourSegments,\n        dayStart,\n        dayEnd\n    }: GetSchedulerViewHourGridArgs\n): WeekViewHour[] {\n    const {\n        setMinutes,\n        setHours,\n        startOfDay,\n        startOfMinute,\n        endOfDay,\n        addMinutes,\n        addHours,\n        addDays\n      } = dateAdapter;\n    const hours: WeekViewHour[] = [];\n\n    let startOfView: Date = setMinutes(\n        setHours(startOfDay(viewDate), sanitiseHours(dayStart.hour)),\n        sanitiseMinutes(dayStart.minute)\n    );\n    let endOfView: Date = setMinutes(\n        setHours(startOfMinute(endOfDay(viewDate)), sanitiseHours(dayEnd.hour)),\n        sanitiseMinutes(dayEnd.minute)\n    );\n    const segmentDuration: number = MINUTES_IN_HOUR / hourSegments;\n    let startOfViewDay: Date = startOfDay(viewDate);\n    const endOfViewDay: Date = endOfDay(viewDate);\n    let dateAdjustment: (d: Date) => Date = (d: Date) => d;\n\n    // this means that we change from or to DST on this day and that's going to cause problems so we bump the date\n    if (startOfViewDay.getTimezoneOffset() !== endOfViewDay.getTimezoneOffset()) {\n        startOfViewDay = addDays(startOfViewDay, 1);\n        startOfView = addDays(startOfView, 1);\n        endOfView = addDays(endOfView, 1);\n        dateAdjustment = (d: Date) => addDays(d, -1);\n    }\n\n    for (let i: number = 0; i < HOURS_IN_DAY; i++) {\n    }\n\n    for (let i: number = 0; i < HOURS_IN_DAY; i++) {\n        const segments: WeekViewHourSegment[] = [];\n        for (let j: number = 0; j < hourSegments; j++) {\n          const date: Date = addMinutes(\n            addHours(startOfViewDay, i),\n            j * segmentDuration\n          );\n          if (date >= startOfView && date < endOfView) {\n            segments.push({\n              date: dateAdjustment(date),\n              displayDate: date,\n              isStart: j === 0\n            });\n          }\n        }\n        if (segments.length > 0) {\n          hours.push({ segments });\n        }\n    }\n\n    return hours;\n}\n\nexport interface GetSchedulerViewArgs {\n    events?: CalendarSchedulerEvent[];\n    viewDate: Date;\n    viewDays: number;\n    hourSegments: 1 | 2 | 4 | 6;\n    weekStartsOn: number;\n    startsWithToday: boolean;\n    dayStart: Time;\n    dayEnd: Time;\n    weekendDays?: number[];\n    excluded?: number[];\n    eventWidth: number;\n    hourSegmentHeight: number;\n    logEnabled?: boolean;\n}\n\nexport function getSchedulerView(\n    dateAdapter: DateAdapter,\n    moment: any,\n    {\n        events = [],\n        viewDate,\n        viewDays,\n        weekStartsOn,\n        startsWithToday,\n        excluded = [],\n        hourSegments = DEFAULT_HOUR_SEGMENTS,\n        dayStart,\n        dayEnd,\n        weekendDays = DEFAULT_WEEKEND_DAYS,\n        hourSegmentHeight = DEFAULT_HOUR_SEGMENT_HEIGHT_PX,\n        eventWidth = DEFAULT_EVENT_WIDTH,\n        logEnabled,\n    }: GetSchedulerViewArgs\n): SchedulerView {\n    if (!events) { events = []; }\n\n    const { addDays, startOfDay, endOfDay, startOfWeek, endOfWeek } = dateAdapter;\n    const startOfViewWeek: Date = startsWithToday || viewDays < DAYS_IN_WEEK ? startOfDay(viewDate) : startOfWeek(viewDate, { weekStartsOn: weekStartsOn });\n    const endOfViewWeek: Date = startsWithToday || viewDays < DAYS_IN_WEEK ? addDays(endOfDay(viewDate), viewDays - 1) : endOfWeek(viewDate, { weekStartsOn: weekStartsOn });\n\n    const eventsInWeek: CalendarSchedulerEvent[] = getEventsInPeriod(dateAdapter, {\n        events: events,\n        periodStart: startOfViewWeek,\n        periodEnd: endOfViewWeek\n    });\n\n    const days: SchedulerViewDay[] = getSchedulerViewDays(dateAdapter, {\n        viewDate: viewDate,\n        viewDays: viewDays,\n        weekStartsOn: weekStartsOn,\n        startsWithToday: startsWithToday,\n        excluded: excluded,\n        weekendDays: weekendDays\n    });\n    days.forEach((day: SchedulerViewDay) => {\n        const startOfView: Date = dateAdapter.setMinutes(dateAdapter.setHours(dateAdapter.startOfDay(day.date), dayStart.hour), dayStart.minute);\n        const endOfView: Date = dateAdapter.setMinutes(dateAdapter.setHours(dateAdapter.startOfMinute(dateAdapter.endOfDay(day.date)), dayEnd.hour), dayEnd.minute);\n        const previousDayEvents: SchedulerViewEvent[] = [];\n\n        const eventsInDay: CalendarSchedulerEvent[] = getEventsInPeriod(dateAdapter, {\n            events: eventsInWeek,\n            periodStart: startOfView,\n            periodEnd: endOfView\n        });\n\n        const dayEvents = eventsInDay\n            .sort((eventA: CalendarSchedulerEvent, eventB: CalendarSchedulerEvent) => eventA.start.valueOf() - eventB.start.valueOf())\n            .map((ev: CalendarSchedulerEvent) => {\n                const eventStart: Date = ev.start;\n                const eventEnd: Date = ev.end || eventStart;\n                const startsBeforeDay: boolean = eventStart < startOfView;\n                const endsAfterDay: boolean = dateAdapter.addMinutes(eventEnd, -1) > endOfView;\n                const hourHeightModifier: number = ((hourSegments * hourSegmentHeight) + 1) / MINUTES_IN_HOUR; // +1 for the 1px segment bottom border\n\n                let top: number = 0;\n                if (eventStart > startOfView) {\n                    top += dateAdapter.differenceInMinutes(eventStart, startOfView);\n                }\n                top *= hourHeightModifier;\n\n                const startDate: Date = startsBeforeDay ? startOfView : eventStart;\n                const endDate: Date = endsAfterDay ? endOfView : eventEnd;\n                let height: number = dateAdapter.differenceInMinutes(endDate, startDate);\n                if (!ev.end) {\n                    height = hourSegmentHeight;\n                } else {\n                    height *= hourHeightModifier;\n                }\n\n                const bottom: number = top + height;\n                const overlappingPreviousEvents = getOverLappingEvents(\n                    ev,\n                    previousDayEvents,\n                    top,\n                    bottom,\n                    logEnabled\n                );\n\n                let left: number = 0;\n                while (overlappingPreviousEvents.some(previousEvent => previousEvent.left === left)) {\n                    left += eventWidth;\n                }\n\n                const event: SchedulerViewEvent =\n                    <SchedulerViewEvent>{\n                        event: ev,\n                        top: top,\n                        height: height,\n                        width: eventWidth,\n                        left: left,\n                        startsBeforeDay: startsBeforeDay,\n                        endsAfterDay: endsAfterDay\n                    };\n\n                previousDayEvents.push(event);\n\n                return event;\n            });\n\n        function getColumnCount(\n            allEvents: SchedulerViewEvent[],\n            prevOverlappingEvents: SchedulerViewEvent[]\n        ): number {\n            const columnCount = Math.max(\n                ...prevOverlappingEvents.map((ev: SchedulerViewEvent) => ev.left + 1)\n            );\n\n            const nextOverlappingEvents = allEvents\n                .filter((ev: SchedulerViewEvent) => ev.left >= columnCount)\n                .filter((ev: SchedulerViewEvent) => {\n                    return (\n                        getOverLappingEvents(\n                            ev,\n                            prevOverlappingEvents,\n                            ev.top,\n                            ev.top + ev.height,\n                            logEnabled\n                        ).length > 0\n                    );\n            });\n\n            if (nextOverlappingEvents.length > 0) {\n                return getColumnCount(allEvents, nextOverlappingEvents);\n            } else {\n                return columnCount;\n            }\n        }\n\n        const mappedEvents = dayEvents.map(event => {\n            const columnCount = getColumnCount(\n                dayEvents,\n                getOverLappingEvents(\n                    event,\n                    dayEvents,\n                    event.top,\n                    event.top + event.height,\n                    logEnabled\n                )\n            );\n\n            const width = 100 / columnCount;\n            return { ...event, left: event.left * width, width };\n        });\n\n        day.events = mappedEvents.map(event => {\n            const overLappingEvents = getOverLappingEvents(event,\n              mappedEvents.filter(otherEvent => otherEvent.left > event.left),\n              event.top,\n              event.top + event.height,\n              logEnabled\n            );\n\n            if (logEnabled) {\n                console.log(\n                    `DAY [${moment(day.date).format('dddd L')}] ` +\n                    `- EVENT ${event.event.id} [${moment(event.event.start).format('dddd L, LTS')} ` +\n                    `- ${moment(event.event.end).format('dddd L, LTS')}] overLappingEvents -> `,\n                    overLappingEvents\n                );\n            }\n\n            if (overLappingEvents.length > 0) {\n              return {\n                ...event,\n                width:\n                  Math.min(\n                    ...overLappingEvents.map(otherEvent => otherEvent.left)\n                  ) - event.left\n              };\n            }\n            return event;\n        });\n\n        day.hours = getSchedulerViewHourGrid(dateAdapter, {\n            viewDate: viewDate,\n            hourSegments: hourSegments,\n            dayStart: {\n                hour: dayStart.hour,\n                minute: dayStart.minute\n            },\n            dayEnd: {\n                hour: dayEnd.hour,\n                minute: dayEnd.minute\n            }\n        }).map((hour: WeekViewHour) => {\n            const date: Date = new Date(day.date.getFullYear(), day.date.getMonth(), day.date.getDate(), hour.segments[0].date.getHours());\n\n            const startOfHour: Date = new Date(day.date.getFullYear(), day.date.getMonth(), day.date.getDate(), hour.segments[0].date.getHours());\n            const endOfHour: Date = dateAdapter.addSeconds(dateAdapter.addHours(startOfHour, 1), -1);\n\n            const eventsInHour: SchedulerViewEvent[] = getSchedulerEventsInPeriod(dateAdapter, {\n                events: day.events,\n                periodStart: startOfHour,\n                periodEnd: endOfHour\n            });\n\n            const segments: SchedulerViewHourSegment[] =\n                hour.segments.map((segment: WeekViewHourSegment) => {\n                    segment.date = dateAdapter.setDate(dateAdapter.setMonth(dateAdapter.setYear(segment.date, day.date.getFullYear()), day.date.getMonth()), day.date.getDate());\n\n                    const startOfSegment: Date = segment.date;\n                    const endOfSegment: Date = dateAdapter.addSeconds(dateAdapter.addMinutes(startOfSegment, MINUTES_IN_HOUR / hourSegments), -1);\n\n                    const eventsInSegment: SchedulerViewEvent[] = getSchedulerEventsInPeriod(dateAdapter, {\n                        events: eventsInHour,\n                        periodStart: startOfSegment,\n                        periodEnd: endOfSegment\n                    });\n\n                    if (logEnabled) {\n                        console.log(\n                            `SEGMENT [${moment(startOfSegment).format('dddd L, LTS')} - ${moment(endOfSegment).format('dddd L, LTS')}] EVENTS -> `,\n                            eventsInSegment\n                        );\n                    }\n\n                    return <SchedulerViewHourSegment>{\n                        segment: segment,\n                        date: new Date(segment.date),\n                        events: eventsInSegment\n                    };\n                });\n\n            return <SchedulerViewHour>{\n                hour: hour,\n                date: date,\n                events: eventsInHour,\n                segments: segments\n            };\n        });\n    });\n\n    return <SchedulerView>{\n        days: days,\n        period: <SchedulerViewPeriod>{\n            events: eventsInWeek,\n            start: startOfViewWeek,\n            end: endOfViewWeek\n        }\n    };\n}\n\nexport interface GetSchedulerViewDaysArgs {\n    viewDate: Date;\n    viewDays: number;\n    weekStartsOn: number;\n    startsWithToday: boolean;\n    excluded?: number[];\n    weekendDays?: number[];\n}\n\nexport function getSchedulerViewDays(\n    dateAdapter: DateAdapter,\n    {\n        viewDate,\n        viewDays,\n        weekStartsOn,\n        startsWithToday,\n        excluded = [],\n        weekendDays = DEFAULT_WEEKEND_DAYS\n    }: GetSchedulerViewDaysArgs\n): SchedulerViewDay[] {\n    const start = startsWithToday || viewDays < DAYS_IN_WEEK\n        ? new Date(viewDate)\n        : dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn });\n\n    const days: SchedulerViewDay[] = [];\n\n    let currentDate = new Date(start);\n\n    while (days.length < viewDays) {\n        const dayOfWeek = currentDate.getDay();\n        \n        if (!excluded.includes(dayOfWeek)) {\n            days.push(getSchedulerDay(dateAdapter, { date: currentDate, weekendDays }));\n        }\n        \n        currentDate = dateAdapter.addDays(currentDate, 1);\n    }\n    \n    return days;\n}\n\nfunction getSchedulerDay(dateAdapter: DateAdapter, args: { date: Date, weekendDays: number[] }): SchedulerViewDay {\n    const date: Date = args.date;\n    const today: Date = dateAdapter.startOfDay(new Date());\n\n    return <SchedulerViewDay>{\n        date: date,\n        isPast: date < today,\n        isToday: dateAdapter.isSameDay(date, today),\n        isFuture: date >= dateAdapter.addDays(today, 1),\n        isWeekend: args.weekendDays.indexOf(dateAdapter.getDay(date)) > -1,\n        inMonth: dateAdapter.isSameMonth(date, today),\n        hours: []\n    };\n}\n\nexport interface GetEventsInPeriodArgs {\n    events: CalendarSchedulerEvent[];\n    periodStart: Date;\n    periodEnd: Date;\n}\n\nfunction getEventsInPeriod(\n    dateAdapter: DateAdapter,\n    {\n        events,\n        periodStart,\n        periodEnd\n    }: GetEventsInPeriodArgs\n): CalendarSchedulerEvent[] {\n    return events.filter((event) => isEventInPeriod(dateAdapter, { event: event, periodStart: periodStart, periodEnd: periodEnd }));\n}\n\nexport interface GetSchedulerEventsInPeriodArgs {\n    events: SchedulerViewEvent[];\n    periodStart: Date;\n    periodEnd: Date;\n}\n\nfunction getSchedulerEventsInPeriod(\n    dateAdapter: DateAdapter,\n    {\n        events,\n        periodStart,\n        periodEnd\n    }: GetSchedulerEventsInPeriodArgs\n): SchedulerViewEvent[] {\n    return events.filter((event) => isEventInPeriod(dateAdapter, { event: event.event, periodStart: periodStart, periodEnd: periodEnd }));\n}\n\ninterface IsEventInPeriodArgs {\n    event: CalendarSchedulerEvent;\n    periodStart: Date;\n    periodEnd: Date;\n}\n\nfunction isEventInPeriod(dateAdapter: DateAdapter, { event, periodStart, periodEnd}: IsEventInPeriodArgs): boolean {\n    const { isSameSecond, addSeconds } = dateAdapter;\n    const eventStart: Date = event.start;\n    const eventEnd: Date = event.end || event.start;\n\n    if (eventStart > periodStart && eventStart < periodEnd) {\n        return true;\n    }\n\n    if (eventEnd > periodStart && eventEnd < periodEnd) {\n        return true;\n    }\n\n    if (eventStart < periodStart && eventEnd > periodEnd) {\n        return true;\n    }\n\n    if (isSameSecond(eventStart, periodStart) || isSameSecond(eventStart, periodEnd)) {\n        return true;\n    }\n\n    if (isSameSecond(addSeconds(eventEnd, -1), periodStart) || isSameSecond(addSeconds(eventEnd, -1), periodEnd)) {\n        return true;\n    }\n\n    return false;\n}\n\n\nfunction getOverLappingEvents(event: any/*SchedulerViewEvent | CalendarSchedulerEvent*/, events: SchedulerViewEvent[], top: number, bottom: number, logEnabled: boolean = false): SchedulerViewEvent[] {\n    return events.filter((previousEvent: SchedulerViewEvent) => {\n        top = Math.round(top);\n        bottom = Math.round(bottom);\n        const previousEventTop: number = Math.floor(previousEvent.top);\n        const previousEventBottom: number = Math.floor(previousEvent.top + previousEvent.height);\n\n        if (top < previousEventBottom && previousEventBottom < bottom) {\n            if (logEnabled) {\n                console.log('[getOverLappingEvents] - EVENT ' + (event.event?.id || event.id) + ' -> top: ' + top + ' - bottom: ' + bottom + ' | PREVIOUS EVENT ' + previousEvent.event.id\n                    + ' -> previousEventTop: ' + previousEventTop + ' - previousEventBottom: ' + previousEventBottom + ' -> top < previousEventBottom && previousEventBottom < bottom');\n            }\n            return true;\n        } else if (top < previousEventTop && previousEventTop < bottom) {\n            if (logEnabled) {\n                console.log('[getOverLappingEvents] - EVENT ' + (event.event?.id || event.id) + ' -> top: ' + top + ' - bottom: ' + bottom + ' | PREVIOUS EVENT ' + previousEvent.event.id\n                    + ' -> previousEventTop: ' + previousEventTop + ' - previousEventBottom: ' + previousEventBottom + ' -> top < previousEventTop && previousEventTop < bottom');\n            }\n            return true;\n        } else if (previousEventTop <= top && bottom <= previousEventBottom) {\n            if (logEnabled) {\n                console.log('[getOverLappingEvents] - EVENT ' + (event.event?.id || event.id) + ' -> top: ' + top + ' - bottom: ' + bottom + ' | PREVIOUS EVENT ' + previousEvent.event.id\n                    + ' -> previousEventTop: ' + previousEventTop + ' - previousEventBottom: ' + previousEventBottom + ' -> previousEventTop <= top && bottom <= previousEventBottom');\n            }\n            return true;\n        }\n\n        return false;\n    });\n}\n\n\nfunction sanitiseHours(hours: number): number {\n    return Math.max(Math.min(23, hours), 0);\n}\n\nfunction sanitiseMinutes(minutes: number): number {\n    return Math.max(Math.min(59, minutes), 0);\n}\n","import {\n    SchedulerViewPeriod,\n    SchedulerViewEvent,\n    SchedulerViewDay,\n    CalendarSchedulerEvent,\n    SchedulerViewHour,\n    SchedulerViewHourSegment\n} from '../scheduler/models';\nimport {\n    WeekViewHour\n} from 'calendar-utils';\nimport {\n    CalendarView,\n    DateAdapter\n} from 'angular-calendar';\nimport { MINUTES_IN_HOUR } from '../scheduler/utils/calendar-scheduler-utils';\n\nexport function addPeriod(dateAdapter: DateAdapter, period: CalendarView, date: Date, amount: number): Date {\n    return {\n        day: dateAdapter.addDays,\n        week: dateAdapter.addWeeks,\n        month: dateAdapter.addMonths\n    }[period](date, amount);\n}\n\nexport function subPeriod(dateAdapter: DateAdapter, period: CalendarView, date: Date, amount: number): Date {\n    return {\n        day: dateAdapter.subDays,\n        week: dateAdapter.subWeeks,\n        month: dateAdapter.subMonths\n    }[period](date, amount);\n}\n\nexport function startOfPeriod(dateAdapter: DateAdapter, period: CalendarView, date: Date): Date {\n    return {\n        day: dateAdapter.startOfDay,\n        week: dateAdapter.startOfWeek,\n        month: dateAdapter.startOfMonth\n    }[period](date);\n}\n\nexport function endOfPeriod(dateAdapter: DateAdapter, period: CalendarView, date: Date): Date {\n    return {\n        day: dateAdapter.endOfDay,\n        week: dateAdapter.endOfWeek,\n        month: dateAdapter.endOfMonth\n    }[period](date);\n}\n\n\nexport const trackByDayOrEvent = (index: number, event: SchedulerViewEvent ) =>\n    (event.event.id ? event.event.id : event.event);\n\nexport const trackByHourColumn = (index: number, day: SchedulerViewDay) =>\n    day.hours[0] ? day.hours[0].segments[0].date.toISOString() : day;\n\nexport const trackByHour = (index: number, hour: WeekViewHour | SchedulerViewHour) =>\n    hour.segments[0].date.toISOString();\n\nexport const trackByHourSegment = (index: number, segment: SchedulerViewHourSegment) =>\n    segment.date.toISOString();\n\n\nexport function getMinimumEventHeightInMinutes(hourSegments: number, hourSegmentHeight: number) {\n    return (MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight)) * hourSegmentHeight;\n}\n\nexport function getDefaultEventEnd(dateAdapter: DateAdapter, event: CalendarSchedulerEvent, minimumMinutes: number): Date {\n    return event.end ? event.end : dateAdapter.addMinutes(event.start, minimumMinutes);\n}\n\nexport function roundToNearest(amount: number, precision: number): number {\n    return Math.round(amount / precision) * precision;\n}\n\nexport function getMinutesMoved(movedY: number, hourSegments: number, hourSegmentHeight: number, eventSnapSize: number): number {\n    const draggedInPixelsSnapSize = roundToNearest(movedY, eventSnapSize || hourSegmentHeight);\n    const pixelAmountInMinutes = MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight);\n    return draggedInPixelsSnapSize * pixelAmountInMinutes;\n}\n\nexport function isDraggedWithinPeriod(newStart: Date, newEnd: Date, period: SchedulerViewPeriod): boolean {\n    const end = newEnd || newStart;\n    return (\n        (period.start <= newStart && newStart <= period.end) ||\n        (period.start <= end && end <= period.end)\n    );\n}\n\nexport function shouldFireDroppedEvent(dropEvent: { dropData?: { event?: CalendarSchedulerEvent; calendarId?: symbol } }, date: Date, calendarId: symbol): boolean {\n    return (\n        dropEvent.dropData &&\n        dropEvent.dropData.event &&\n        dropEvent.dropData.calendarId !== calendarId\n    );\n}\n","import { DateAdapter } from 'angular-calendar';\nimport {\n    CalendarEvent,\n    WeekViewTimeEvent,\n    WeekViewHour,\n    WeekViewHourSegment,\n    validateEvents as validateEventsWithoutLog,\n    ViewPeriod,\n    WeekDay,\n    WeekViewAllDayEvent,\n  } from 'calendar-utils';\n  \n  export const validateEvents = (events: CalendarEvent[]) => {\n    const warn = (...args) => console.warn('angular-calendar', ...args);\n    return validateEventsWithoutLog(events, warn);\n  };\n  \n  export function isInsideLeftAndRight(\n    outer: ClientRect,\n    inner: ClientRect\n  ): boolean {\n    return (\n      Math.floor(outer.left) <= Math.ceil(inner.left) &&\n      Math.floor(inner.left) <= Math.ceil(outer.right) &&\n      Math.floor(outer.left) <= Math.ceil(inner.right) &&\n      Math.floor(inner.right) <= Math.ceil(outer.right)\n    );\n  }\n  \n  function isInsideTopAndBottom(outer: ClientRect, inner: ClientRect): boolean {\n    return (\n      Math.floor(outer.top) <= Math.ceil(inner.top) &&\n      Math.floor(inner.top) <= Math.ceil(outer.bottom) &&\n      Math.floor(outer.top) <= Math.ceil(inner.bottom) &&\n      Math.floor(inner.bottom) <= Math.ceil(outer.bottom)\n    );\n  }\n  \n  export function isInside(outer: ClientRect, inner: ClientRect): boolean {\n    return (\n      isInsideLeftAndRight(outer, inner) && isInsideTopAndBottom(outer, inner)\n    );\n  }\n  \n  export function roundToNearest(amount: number, precision: number) {\n    return Math.round(amount / precision) * precision;\n  }\n  \n  export const trackByEventId = (index: number, event: CalendarEvent) =>\n    event.id ? event.id : event;\n  \n  export const trackByWeekDayHeaderDate = (index: number, day: WeekDay) =>\n    day.date.toISOString();\n  \n  export const trackByHourSegment = (\n    index: number,\n    segment: WeekViewHourSegment\n  ) => segment.date.toISOString();\n  \n  export const trackByHour = (index: number, hour: WeekViewHour) =>\n    hour.segments[0].date.toISOString();\n  \n  export const trackByWeekAllDayEvent = (\n    index: number,\n    weekEvent: WeekViewAllDayEvent\n  ) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\n  \n  export const trackByWeekTimeEvent = (\n    index: number,\n    weekEvent: WeekViewTimeEvent\n  ) => (weekEvent.event.id ? weekEvent.event.id : weekEvent.event);\n  \n  const MINUTES_IN_HOUR = 60;\n  \n  function getPixelAmountInMinutes(\n    hourSegments: number,\n    hourSegmentHeight: number,\n    hourDuration?: number\n  ) {\n    return (hourDuration || MINUTES_IN_HOUR) / (hourSegments * hourSegmentHeight);\n  }\n  \n  export function getMinutesMoved(\n    movedY: number,\n    hourSegments: number,\n    hourSegmentHeight: number,\n    eventSnapSize: number,\n    hourDuration?: number\n  ): number {\n    const draggedInPixelsSnapSize = roundToNearest(\n      movedY,\n      eventSnapSize || hourSegmentHeight\n    );\n    const pixelAmountInMinutes = getPixelAmountInMinutes(\n      hourSegments,\n      hourSegmentHeight,\n      hourDuration\n    );\n    return draggedInPixelsSnapSize * pixelAmountInMinutes;\n  }\n  \n  export function getDefaultEventEnd(\n    dateAdapter: DateAdapter,\n    event: CalendarEvent,\n    minimumMinutes: number\n  ): Date {\n    if (event.end) {\n      return event.end;\n    } else {\n      return dateAdapter.addMinutes(event.start, minimumMinutes);\n    }\n  }\n  \n  export function addDaysWithExclusions(\n    dateAdapter: DateAdapter,\n    date: Date,\n    days: number,\n    excluded: number[]\n  ): Date {\n    let daysCounter = 0;\n    let daysToAdd = 0;\n    const changeDays = days < 0 ? dateAdapter.subDays : dateAdapter.addDays;\n    let result = date;\n    while (daysToAdd <= Math.abs(days)) {\n      result = changeDays(date, daysCounter);\n      const day = dateAdapter.getDay(result);\n      if (excluded.indexOf(day) === -1) {\n        daysToAdd++;\n      }\n      daysCounter++;\n    }\n    return result;\n  }\n  \n  export function isDraggedWithinPeriod(\n    newStart: Date,\n    newEnd: Date,\n    period: ViewPeriod\n  ): boolean {\n    const end = newEnd || newStart;\n    return (\n      (period.start <= newStart && newStart <= period.end) ||\n      (period.start <= end && end <= period.end)\n    );\n  }\n  \n  export function shouldFireDroppedEvent(\n    dropEvent: { dropData?: { event?: CalendarEvent; calendarId?: symbol } },\n    date: Date,\n    allDay: boolean,\n    calendarId: symbol\n  ) {\n    return (\n      dropEvent.dropData &&\n      dropEvent.dropData.event &&\n      (dropEvent.dropData.calendarId !== calendarId ||\n        (dropEvent.dropData.event.allDay && !allDay) ||\n        (!dropEvent.dropData.event.allDay && allDay))\n    );\n  }\n  \n  export function getWeekViewPeriod(\n    dateAdapter: DateAdapter,\n    viewDate: Date,\n    weekStartsOn: number,\n    excluded: number[] = [],\n    daysInWeek?: number\n  ): { viewStart: Date; viewEnd: Date } {\n    let viewStart = daysInWeek\n      ? dateAdapter.startOfDay(viewDate)\n      : dateAdapter.startOfWeek(viewDate, { weekStartsOn });\n    const endOfWeek = dateAdapter.endOfWeek(viewDate, { weekStartsOn });\n    while (\n      excluded.indexOf(dateAdapter.getDay(viewStart)) > -1 &&\n      viewStart < endOfWeek\n    ) {\n      viewStart = dateAdapter.addDays(viewStart, 1);\n    }\n    if (daysInWeek) {\n      const viewEnd = dateAdapter.endOfDay(\n        addDaysWithExclusions(dateAdapter, viewStart, daysInWeek - 1, excluded)\n      );\n      return { viewStart, viewEnd };\n    } else {\n      let viewEnd = endOfWeek;\n      while (\n        excluded.indexOf(dateAdapter.getDay(viewEnd)) > -1 &&\n        viewEnd > viewStart\n      ) {\n        viewEnd = dateAdapter.subDays(viewEnd, 1);\n      }\n      return { viewStart, viewEnd };\n    }\n  }\n  \n  export function isWithinThreshold({ x, y }: { x: number; y: number }) {\n    const DRAG_THRESHOLD = 1;\n    return Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;\n  }","import { isInside } from './util';\n\nexport class CalendarResizeHelper {\n  constructor(\n    private resizeContainerElement: HTMLElement,\n    private minWidth: number,\n    private rtl: boolean\n  ) {}\n\n  validateResize({ rectangle, edges }): boolean {\n    if (this.rtl) {\n      // TODO - find a way of testing this, for some reason the tests always fail but it does actually work\n      /* istanbul ignore next */\n      if (typeof edges.left !== 'undefined') {\n        rectangle.left -= edges.left;\n        rectangle.right += edges.left;\n      } else if (typeof edges.right !== 'undefined') {\n        rectangle.left += edges.right;\n        rectangle.right -= edges.right;\n      }\n      rectangle.width = rectangle.right - rectangle.left;\n    }\n\n    if (\n      this.minWidth &&\n      Math.ceil(rectangle.width) < Math.ceil(this.minWidth)\n    ) {\n      return false;\n    }\n\n    return isInside(\n      this.resizeContainerElement.getBoundingClientRect(),\n      rectangle\n    );\n  }\n}","\nimport { isInsideLeftAndRight, isWithinThreshold } from './util';\nimport { ValidateDragParams } from 'angular-draggable-droppable';\n\nexport class CalendarDragHelper {\n  private readonly startPosition: ClientRect;\n\n  constructor(\n    private dragContainerElement: HTMLElement,\n    draggableElement: HTMLElement\n  ) {\n    this.startPosition = draggableElement.getBoundingClientRect();\n  }\n\n  validateDrag({\n    x,\n    y,\n    snapDraggedEvents,\n    dragAlreadyMoved,\n    transform,\n  }: {\n    x: number;\n    y: number;\n    snapDraggedEvents: boolean;\n    dragAlreadyMoved: boolean;\n    transform: ValidateDragParams['transform'];\n  }): boolean {\n    const isDraggedWithinThreshold =\n      isWithinThreshold({ x, y }) || dragAlreadyMoved;\n\n    if (snapDraggedEvents) {\n      const inner: ClientRect = Object.assign({}, this.startPosition, {\n        left: this.startPosition.left + transform.x,\n        right: this.startPosition.right + transform.x,\n        top: this.startPosition.top + transform.y,\n        bottom: this.startPosition.bottom + transform.y,\n      });\n\n      if (isDraggedWithinThreshold) {\n        const outer = this.dragContainerElement.getBoundingClientRect();\n\n        const isTopInside = outer.top < inner.top && inner.top < outer.bottom;\n\n        const isBottomInside =\n          outer.top < inner.bottom && inner.bottom < outer.bottom;\n\n        return (\n          /*isInsideLeftAndRight(outer, inner) &&*/ (isTopInside || isBottomInside)\n        );\n      }\n\n      /* istanbul ignore next */\n      return false;\n    } else {\n      return isDraggedWithinThreshold;\n    }\n  }\n}","import { Injectable } from '@angular/core';\n\n/**\n * Auth configuration.\n */\n@Injectable()\nexport class SchedulerConfig {\n    locale?: string = 'en';\n    headerDateFormat?: 'weekNumber' | 'daysRange' = 'daysRange';\n    logEnabled?: boolean = false;\n\n    constructor(config: SchedulerConfig = {}) {\n        function use<T>(source: T, defaultValue: T): T {\n            return config && source !== undefined ? source : defaultValue;\n        }\n\n        this.locale = use(config.locale, this.locale);\n        this.headerDateFormat = use(config.headerDateFormat, this.headerDateFormat);\n        this.logEnabled = use(config.logEnabled, this.logEnabled);\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    getSchedulerViewHourGrid,\n    GetSchedulerViewHourGridArgs,\n    getSchedulerViewDays,\n    GetSchedulerViewDaysArgs,\n    getSchedulerView,\n    GetSchedulerViewArgs\n} from './calendar-scheduler-utils';\nimport { WeekViewHour } from 'calendar-utils';\nimport { SchedulerView, SchedulerViewDay } from '../models';\nimport { DateAdapter, MOMENT } from 'angular-calendar';\n\n@Injectable()\nexport class CalendarSchedulerUtils {\n    constructor(private dateAdapter: DateAdapter, @Inject(MOMENT) protected moment: any) { }\n\n    getSchedulerViewHourGrid(args: GetSchedulerViewHourGridArgs): WeekViewHour[] {\n        return getSchedulerViewHourGrid(this.dateAdapter, args);\n    }\n\n    getSchedulerViewDays(args: GetSchedulerViewDaysArgs): SchedulerViewDay[] {\n        return getSchedulerViewDays(this.dateAdapter, args);\n    }\n\n    getSchedulerView(args: GetSchedulerViewArgs): SchedulerView {\n        return getSchedulerView(this.dateAdapter, this.moment, args);\n    }\n}\n","import { Component, OnInit, Input, Output, EventEmitter, TemplateRef, Inject } from '@angular/core';\nimport { MOMENT } from 'angular-calendar';\nimport {\n    SchedulerViewDay,\n    SchedulerViewHourSegment,\n    CalendarSchedulerEvent\n} from './models';\n\n// import * as momentNS from 'moment';\n// const moment = momentNS;\n// import moment from 'moment-timezone';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-hour-segment',\n    template: `\n        <ng-template #defaultTemplate>\n          <div class=\"cal-scheduler-hour-segment\"\n            [title]=\"title\"\n            [ngClass]=\"segment?.cssClass\"\n            [class.has-events]=\"segment.events.length > 0\"\n            [class.cal-cancelled]=\"segment.isCancelled\"\n            [class.cal-disabled]=\"segment.isDisabled\"\n            [style.backgroundColor]=\"segment.backgroundColor\"\n            [style.height.px]=\"hourSegmentHeight\"\n            (mwlClick)=\"onSegmentClick($event, segment)\">\n            @if (showHour && segment.events.length === 0) {\n              <div class=\"cal-scheduler-time unselectable\">\n                {{ segment.date | calendarDate:'dayViewHour':locale }}\n              </div>\n            }\n          </div>\n        </ng-template>\n        <ng-template\n          [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n                title: title,\n                day: day,\n                segment: segment,\n                locale: locale,\n                hourSegmentHeight: hourSegmentHeight,\n                showHour: showHour,\n                segmentClicked: segmentClicked\n            }\">\n        </ng-template>\n        `\n})\nexport class CalendarSchedulerHourSegmentComponent implements OnInit {\n    @Input() title: string;\n\n    @Input() day: SchedulerViewDay;\n\n    @Input() segment: SchedulerViewHourSegment;\n\n    @Input() locale: string;\n\n    @Input() customTemplate: TemplateRef<any>;\n\n    @Input() hourSegmentHeight: number = 58;\n\n    @Input() showHour: boolean = false;\n\n    @Output() segmentClicked: EventEmitter<{ segment: SchedulerViewHourSegment }> = new EventEmitter<{ segment: SchedulerViewHourSegment }>();\n\n    constructor(@Inject(MOMENT) protected moment: any) {}\n\n    ngOnInit(): void {\n        this.title = this.title || this.moment(this.segment.date).format('dddd L, LT');\n    }\n\n    /**\n     * @hidden\n     */\n    onMouseEnter(mouseEvent: MouseEvent, segment: SchedulerViewHourSegment, event: CalendarSchedulerEvent): void {\n        if (!event.isDisabled && !segment.isDisabled) {\n            // Maybe do something\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    onMouseLeave(mouseEvent: MouseEvent, segment: SchedulerViewHourSegment, event: CalendarSchedulerEvent): void {\n        if (!event.isDisabled && !segment.isDisabled) {\n            // Maybe do something\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    onSegmentClick(mouseEvent: MouseEvent, segment: SchedulerViewHourSegment): void {\n        if (mouseEvent.stopPropagation) {\n            mouseEvent.stopPropagation();\n        }\n\n        if (segment.events.length === 0 && !segment.isDisabled && !segment.isCancelled) {\n            this.segmentClicked.emit({ segment: segment });\n        }\n    }\n}\n","import { Component, Input, Output, EventEmitter, TemplateRef } from '@angular/core';\nimport { SchedulerViewDay } from './models';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-header',\n    template: `\n        <ng-template #defaultTemplate>\n          <div class=\"cal-scheduler-headers\">\n            <div class=\"cal-header aside cal-header-clock align-center\">\n              <i class=\"material-icons md-32\" style=\"margin:auto;\">schedule</i>\n            </div>\n        \n            <div class=\"cal-header-cols aside\">\n              @for (day of days; track day) {\n                <div\n                  class=\"cal-header\"\n                  [class.cal-past]=\"day.isPast\"\n                  [class.cal-today]=\"day.isToday\"\n                  [class.cal-future]=\"day.isFuture\"\n                  [class.cal-weekend]=\"day.isWeekend\"\n                  (mwlClick)=\"onDayHeaderClick($event, day)\">\n                  <b>{{ day.date | calendarDate:'weekViewColumnHeader':locale }}</b><br>\n                  <span>{{ day.date | calendarDate:'weekViewColumnSubHeader':locale }}</span>\n                </div>\n              }\n            </div>\n          </div>\n        </ng-template>\n        <ng-template\n          [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n                days: days,\n                locale: locale,\n                dayHeaderClicked: dayHeaderClicked\n            }\">\n        </ng-template>\n        `\n})\nexport class CalendarSchedulerHeaderComponent {\n\n    @Input() days: SchedulerViewDay[];\n\n    @Input() locale: string;\n\n    @Input() customTemplate: TemplateRef<any>;\n\n    @Output() dayHeaderClicked: EventEmitter<{ day: SchedulerViewDay }> = new EventEmitter<{ day: SchedulerViewDay }>();\n\n    /**\n     * @hidden\n     */\n    onDayHeaderClick(mouseEvent: MouseEvent, day: SchedulerViewDay): void {\n        if (mouseEvent.stopPropagation) {\n            mouseEvent.stopPropagation();\n        }\n\n        this.dayHeaderClicked.emit({ day: day });\n    }\n}\n","import { Component, Input, OnInit, SimpleChanges, OnChanges } from '@angular/core';\nimport {\n    CalendarSchedulerEvent,\n    CalendarSchedulerEventAction\n} from './models';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-event-actions',\n    template: `\n        @if (event.actions) {\n          <span\n            class=\"cal-scheduler-event-actions\">\n            @for (action of actions; track action) {\n              <a\n                class=\"cal-scheduler-event-action\"\n                href=\"javascript:;\"\n                (mwlClick)=\"onActionClick($event, action, event)\"\n                [ngClass]=\"action.cssClass\"\n                [innerHtml]=\"action.label\"\n                [title]=\"action.title\">\n              </a>\n            }\n          </span>\n        }\n        `,\n    host: {\n        'class': 'cal-scheduler-event-actions-container'\n    }\n})\nexport class CalendarSchedulerEventActionsComponent implements OnInit, OnChanges {\n\n    @Input() event: CalendarSchedulerEvent;\n\n    public actions: CalendarSchedulerEventAction[] = [];\n\n    public ngOnInit(): void {\n        this.setupActions();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.event) {\n            this.setupActions();\n        }\n    }\n\n    private setupActions(): void {\n        if (this.event.actions) {\n            this.actions = this.event.isCancelled\n                ? this.event.actions.filter((a: CalendarSchedulerEventAction) => !a.when || a.when === 'cancelled')\n                : this.event.isDisabled\n                    ? this.event.actions.filter((a: CalendarSchedulerEventAction) => !a.when || a.when === 'disabled')\n                    : this.event.actions.filter((a: CalendarSchedulerEventAction) => !a.when || a.when === 'enabled');\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    onActionClick(mouseEvent: MouseEvent, action: CalendarSchedulerEventAction, event: CalendarSchedulerEvent): void {\n        if (mouseEvent.stopPropagation) {\n            mouseEvent.stopPropagation();\n        }\n\n        action.onClick(event);\n    }\n}\n","import { CalendarEventTitleFormatter } from 'angular-calendar';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class SchedulerEventTitleFormatter extends CalendarEventTitleFormatter {\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { CalendarSchedulerEvent } from '../models';\nimport { SchedulerEventTitleFormatter } from '../formatters/scheduler-event-title-formatter.provider';\n\n@Pipe({\n  standalone: false,\n  name: 'schedulerEventTitle'\n})\nexport class SchedulerEventTitlePipe implements PipeTransform {\n  constructor(private schedulerEventTitle: SchedulerEventTitleFormatter) {}\n\n  transform(title: string, titleType: string, event: CalendarSchedulerEvent): string {\n    return this.schedulerEventTitle[titleType](event);\n  }\n}\n","import { Component, Input, TemplateRef } from '@angular/core';\nimport {\n    CalendarSchedulerEvent\n} from './models';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-event-title',\n    template: `\n        <ng-template #defaultTemplate>\n          <div\n            class=\"cal-scheduler-event-title\"\n            [innerHTML]=\"event.title | schedulerEventTitle:view:event\">\n          </div>\n          @if (showActions && !showContent && (event.isClickable || event.isDisabled)) {\n            <calendar-scheduler-event-actions\n              class=\"no-content-actions\"\n              [event]=\"event\">\n            </calendar-scheduler-event-actions>\n          }\n          @if (event.status && showStatus) {\n            <div\n              class=\"cal-scheduler-event-status\"\n              [class.ok]=\"event.status === 'ok'\"\n              [class.warning]=\"event.status === 'warning'\"\n              [class.danger]=\"event.status === 'danger'\">\n            </div>\n          }\n        </ng-template>\n        <ng-template\n          [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n                view: view,\n                event: event,\n                showStatus: showStatus,\n                showContent: showContent,\n                showActions: showActions\n            }\">\n        </ng-template>\n        `,\n    host: {\n        'class': 'cal-scheduler-event-title-container'\n    }\n})\nexport class CalendarSchedulerEventTitleComponent {\n\n    @Input() view: string;\n\n    @Input() event: CalendarSchedulerEvent;\n\n    @Input() showStatus: boolean = true;\n\n    @Input() showContent: boolean = true;\n\n    @Input() showActions: boolean = true;\n\n    @Input() customTemplate: TemplateRef<any>;\n}\n","import { Component, Input, ElementRef, AfterViewInit } from '@angular/core';\nimport {\n    CalendarSchedulerEvent\n} from './models';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-event-content',\n    template: `\n        @if (event.content) {\n          <div\n            class=\"cal-scheduler-event-content\"\n            [style.max-height.px]=\"maxHeight\"\n            [style.white-space]=\"maxHeight && maxHeight > 30 ? 'normal' : 'nowrap'\"\n            [innerHTML]=\"event.content\">\n          </div>\n        }\n        `,\n    host: {\n        'class': 'cal-scheduler-event-content-container'\n    }\n})\nexport class CalendarSchedulerEventContentComponent implements AfterViewInit {\n\n    @Input() event: CalendarSchedulerEvent;\n\n    @Input() eventContainer: HTMLElement;\n\n    maxHeight: number;\n\n    constructor(private hostElement: ElementRef) {  }\n\n    public ngAfterViewInit(): void {\n        setTimeout(() => { this.maxHeight = Math.max(30, this.eventContainer.clientHeight - 70); }, 0);\n    }\n}\n","import { Component, Input, Output, EventEmitter, TemplateRef, OnInit, ElementRef, ChangeDetectorRef, AfterContentChecked, Inject } from '@angular/core';\nimport { MOMENT } from 'angular-calendar';\nimport {\n    SchedulerViewDay,\n    CalendarSchedulerEvent,\n    SchedulerViewEvent\n} from './models';\n\n// import * as momentNS from 'moment';\n// const moment = momentNS;\n// import moment from 'moment-timezone';\n\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-event',\n    template: `\n        <ng-template #defaultTemplate>\n          <div class=\"cal-scheduler-event\"\n            [title]=\"title\"\n            [style.max-width.px]=\"container.clientWidth - 4\"\n            [class.cal-cancelled]=\"event.event.isCancelled\"\n            [class.cal-disabled]=\"event.event.isDisabled\"\n            [class.cal-not-clickable]=\"!event.event.isClickable\"\n            [class.cal-draggable]=\"event.event.draggable\"\n            [class.cal-starts-before-day]=\"event.startsBeforeDay\"\n            [class.cal-ends-after-day]=\"event.endsAfterDay\"\n            [style.color]=\"event.event.color?.secondaryText\"\n            [style.backgroundColor]=\"event.event.color?.secondary\"\n            [style.borderColor]=\"event.event.color?.primary\"\n            (mwlClick)=\"onEventClick($event, event.event)\"\n            (mouseenter)=\"onMouseEnter()\"\n            (mouseleave)=\"onMouseLeave()\">\n            <calendar-scheduler-event-title\n              view=\"week\"\n              [event]=\"event.event\"\n              [showStatus]=\"showStatus\"\n              [showContent]=\"showContent\"\n              [showActions]=\"showActions\"\n              [customTemplate]=\"eventTitleTemplate\">\n            </calendar-scheduler-event-title>\n            @if (showContent) {\n              <calendar-scheduler-event-content\n                [event]=\"event.event\"\n                [eventContainer]=\"container\">\n              </calendar-scheduler-event-content>\n            }\n            @if (showActions && showContent && (event.event.isClickable || event.event.isDisabled)) {\n              <calendar-scheduler-event-actions\n                [event]=\"event.event\">\n              </calendar-scheduler-event-actions>\n            }\n          </div>\n        </ng-template>\n        <ng-template\n          [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n            [ngTemplateOutletContext]=\"{\n                title: title,\n                day: day,\n                event: event,\n                container: container,\n                showContent: showContent,\n                showActions: showActions,\n                showStatus: showStatus,\n                eventTitleTemplate: eventTitleTemplate,\n                eventClicked: eventClicked\n            }\">\n        </ng-template>\n        `,\n    host: {\n        '[style.height.%]': '100',\n        '[style.width.%]': '100',\n        '[style.display]': '\\'flex\\'',\n    }\n})\nexport class CalendarSchedulerEventComponent implements OnInit, AfterContentChecked {\n    @Input() title: string;\n\n    @Input() day: SchedulerViewDay;\n\n    @Input() event: SchedulerViewEvent;\n\n    @Input() container: HTMLElement;\n\n    @Input() showContent: boolean = true;\n\n    @Input() showActions: boolean = true;\n\n    @Input() showStatus: boolean = true;\n\n    @Input() customTemplate: TemplateRef<any>;\n\n    @Input() eventTitleTemplate: TemplateRef<any>;\n\n    @Output() eventClicked: EventEmitter<{ event: CalendarSchedulerEvent }> = new EventEmitter<{ event: CalendarSchedulerEvent }>();\n\n    constructor(private hostElement: ElementRef, protected changeDetectorRef: ChangeDetectorRef, @Inject(MOMENT) protected moment: any) {   }\n\n    public ngOnInit(): void {\n        this.title = this.title || `${this.event.event.title}, ${this.event.event.content ? `${this.event.event.content},` : null} ${this.moment(this.event.event.start).format('dddd L, LT')}`;\n    }\n\n    public ngAfterContentChecked(): void {\n        this.changeDetectorRef.detectChanges();\n    }\n\n    onMouseEnter(): void {\n        // Maybe do something\n    }\n\n    onMouseLeave(): void {\n        // Maybe do something\n    }\n\n    /**\n     * @hidden\n     */\n    onEventClick(mouseEvent: MouseEvent, event: CalendarSchedulerEvent): void {\n        if (mouseEvent.stopPropagation) {\n            mouseEvent.stopPropagation();\n        }\n        if (event.isClickable) {\n            this.eventClicked.emit({ event: event });\n        }\n    }\n}\n","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    ChangeDetectorRef,\n    OnChanges,\n    OnInit,\n    OnDestroy,\n    LOCALE_ID,\n    Inject,\n    TemplateRef,\n    ViewEncapsulation,\n    HostListener\n} from '@angular/core';\nimport { MediaMatcher } from '@angular/cdk/layout';\nimport { Subject, Subscription } from 'rxjs';\nimport {\n    WeekViewHour\n} from 'calendar-utils';\nimport {\n    isBefore\n} from 'date-fns';\nimport { ResizeEvent } from 'angular-resizable-element';\n// import { CalendarDragHelper } from 'angular-calendar/modules/common/calendar-drag-helper.provider';\n// import { CalendarResizeHelper } from 'angular-calendar/modules/common/calendar-resize-helper.provider';\nimport { SchedulerConfig } from './scheduler-config';\nimport { CalendarEventTimesChangedEventType, DateAdapter } from 'angular-calendar';\nimport { DragMoveEvent, DragEndEvent, DropEvent } from 'angular-draggable-droppable';\n\nimport {\n    CalendarSchedulerEvent,\n    SchedulerViewDay,\n    SchedulerViewHour,\n    SchedulerViewHourSegment,\n    SchedulerEventTimesChangedEvent,\n    SchedulerViewEvent,\n    SchedulerView\n} from './models';\nimport {\n    shouldFireDroppedEvent,\n    isDraggedWithinPeriod,\n    roundToNearest,\n    getMinutesMoved,\n    trackByHourColumn,\n    trackByDayOrEvent,\n    trackByHour,\n    trackByHourSegment,\n    getMinimumEventHeightInMinutes,\n    getDefaultEventEnd\n} from '../common/utils';\nimport {\n    DEFAULT_HOUR_SEGMENTS,\n    DEFAULT_HOUR_SEGMENT_HEIGHT_PX,\n    MINUTES_IN_HOUR,\n    Time,\n    DAYS_IN_WEEK\n} from './utils/calendar-scheduler-utils';\nimport { CalendarSchedulerUtils } from './utils/calendar-scheduler-utils.provider';\nimport { CalendarResizeHelper } from '../common/temp/calendar-resize-helper.provider';\nimport { CalendarDragHelper } from '../common/temp/calendar-drag-helper.provider';\n\n/**\n *  [ngClass]=\"getPositioningClasses(event)\"\n *\n *  [style.top.px]=\"event.top\"\n *  [style.height.px]=\"event.height\"\n *  [style.left.%]=\"event.left\"\n *  [style.width.%]=\"event.width\"\n *\n *  DRAG & DROP & RESIZE -> https://github.com/mattlewis92/angular-calendar/blob/main/projects/angular-calendar/src/modules/week/calendar-week-view.component.ts\n *  FLEXBOX -> https://css-tricks.com/snippets/css/a-guide-to-flexbox/\n */\n@Component({\n    standalone: false,\n    selector: 'calendar-scheduler-view',\n    template: `\n        <div class=\"cal-scheduler-view\">\n          <calendar-scheduler-header\n            [days]=\"days\"\n            [locale]=\"locale\"\n            [customTemplate]=\"headerTemplate\"\n            (dayHeaderClicked)=\"dayHeaderClicked.emit($event)\">\n          </calendar-scheduler-header>\n        \n          <div class=\"cal-scheduler\" #calendarContainer>\n            <div class=\"cal-scheduler-hour-rows aside\">\n              @for (hour of hours; track trackByHour($index, hour)) {\n                <div class=\"cal-scheduler-hour align-center horizontal\">\n                  <div class=\"cal-scheduler-time\">\n                    @for (segment of hour.segments; track segment) {\n                      <div class=\"cal-scheduler-time-segment\"\n                        [style.height.px]=\"hourSegmentHeight\">\n                        {{ segment.date | calendarDate:'dayViewHour':locale }}\n                      </div>\n                    }\n                  </div>\n                </div>\n              }\n            </div>\n        \n            <div class=\"cal-scheduler-cols aside\" #dayColumns\n              [class.cal-resize-active]=\"resizes.size > 0\"\n              mwlDroppable\n              (dragEnter)=\"eventDragEnter = eventDragEnter + 1\"\n              (dragLeave)=\"eventDragEnter = eventDragEnter - 1\">\n              @for (day of view.days; track trackByHourColumn($index, day)) {\n                <div class=\"cal-scheduler-col\"\n                  [ngClass]=\"day?.cssClass\"\n                  [style.backgroundColor]=\"day.backgroundColor\">\n                  @for (event of day.events; track trackByDayOrEvent($index, event)) {\n                    <div #eventContainer\n                      class=\"cal-scheduler-event-container\"\n                      [ngClass]=\"event.event?.cssClass\"\n                      [hidden]=\"event.height === 0 && event.width === 0\"\n                      [style.top.px]=\"event.top\"\n                      [style.height.px]=\"event.height\"\n                      [style.left.%]=\"event.left\"\n                      [style.width.%]=\"event.width\"\n                      [class.zoom-on-hover]=\"zoomEventOnHover\"\n                      mwlResizable\n                      [resizeSnapGrid]=\"{left: dayColumnWidth, right: dayColumnWidth, top: eventSnapSize || hourSegmentHeight, bottom: eventSnapSize || hourSegmentHeight}\"\n                      [validateResize]=\"validateResize\"\n                      [allowNegativeResizes]=\"true\"\n                      (resizeStart)=\"resizeStarted(dayColumns, event, $event)\"\n                      (resizing)=\"resizing(event, $event)\"\n                      (resizeEnd)=\"resizeEnded(event)\"\n                      mwlDraggable\n                      dragActiveClass=\"cal-drag-active\"\n                      [dropData]=\"{event: event.event, calendarId: calendarId}\"\n                            [dragAxis]=\"{\n                                x: event.event.draggable && resizes.size === 0,\n                                y: event.event.draggable && resizes.size === 0\n                            }\"\n                      [dragSnapGrid]=\"snapDraggedEvents ? {x: dayColumnWidth, y: eventSnapSize || hourSegmentHeight} : {}\"\n                      [ghostDragEnabled]=\"!snapDraggedEvents\"\n                      [validateDrag]=\"validateDrag\"\n                      (dragPointerDown)=\"dragStarted(dayColumns, eventContainer, event)\"\n                      (dragging)=\"dragMove(event, $event)\"\n                      (dragEnd)=\"dragEnded(event, $event, dayColumnWidth, true)\">\n                      @if (event.event?.resizable?.beforeStart && !event.startsBeforeDay) {\n                        <div\n                          class=\"cal-resize-handle cal-resize-handle-before-start\"\n                          mwlResizeHandle\n                                [resizeEdges]=\"{\n                                    left: true,\n                                    top: true\n                                }\">\n                        </div>\n                      }\n                      <calendar-scheduler-event\n                        [day]=\"day\"\n                        [event]=\"event\"\n                        [container]=\"eventContainer\"\n                        [showContent]=\"showEventContent && event.height >= 75\"\n                        [showActions]=\"showEventActions\"\n                        [showStatus]=\"showEventStatus\"\n                        [customTemplate]=\"eventTemplate\"\n                        [eventTitleTemplate]=\"eventTitleTemplate\"\n                        (eventClicked)=\"eventClicked.emit($event)\">\n                      </calendar-scheduler-event>\n                      @if (event.event?.resizable?.afterEnd && !event.endsAfterDay) {\n                        <div\n                          class=\"cal-resize-handle cal-resize-handle-after-end\"\n                          mwlResizeHandle\n                                [resizeEdges]=\"{\n                                    right: true,\n                                    bottom: true\n                                }\">\n                        </div>\n                      }\n                    </div>\n                  }\n                  @for (hour of day.hours; track trackByHour(i, hour); let i = $index) {\n                    <div class=\"cal-scheduler-hour\"\n                      [class.cal-even]=\"i % 2 === 0\"\n                      [class.cal-odd]=\"i % 2 === 1\"\n                      [ngClass]=\"hour.cssClass\"\n                      [style.backgroundColor]=\"hour.backgroundColor\"\n                      (mwlClick)=\"hourClicked.emit({hour: hour})\"\n                      [class.cal-past]=\"day.isPast\"\n                      [class.cal-today]=\"day.isToday\"\n                      [class.cal-future]=\"day.isFuture\"\n                      [class.cal-weekend]=\"day.isWeekend\"\n                      [class.cal-in-month]=\"day.inMonth\"\n                      [class.cal-out-month]=\"!day.inMonth\">\n                      <div class=\"cal-scheduler-hour-segments\">\n                        @for (segment of hour.segments; track trackByHourSegment($index, segment)) {\n                          <calendar-scheduler-hour-segment\n                            [day]=\"day\"\n                            [segment]=\"segment\"\n                            [locale]=\"locale\"\n                            [customTemplate]=\"cellTemplate\"\n                            [hourSegmentHeight]=\"hourSegmentHeight\"\n                            [showHour]=\"showSegmentHour\"\n                            (segmentClicked)=\"segmentClicked.emit($event)\"\n                            mwlDroppable\n                            [dragOverClass]=\"!dragActive || !snapDraggedEvents ? 'cal-drag-over' : 'null'\"\n                            dragActiveClass=\"cal-drag-active\"\n                            (drop)=\"eventDropped($event, segment.date)\">\n                          </calendar-scheduler-hour-segment>\n                        }\n                      </div>\n                    </div>\n                  }\n                </div>\n              }\n            </div>\n          </div>\n        </div>\n        `,\n    styleUrls: ['./calendar-scheduler-view.component.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class CalendarSchedulerViewComponent implements OnInit, OnChanges, OnDestroy {\n\n    /**\n     * Number of days shown. This value will be always normalized to DAYS_IN_WEEK (7)\n     */\n    _viewDays: number = DAYS_IN_WEEK;\n    get viewDays(): number {\n        return this._viewDays;\n    }\n    @Input() set viewDays(value: number) {\n        this._viewDays = Math.min(value, DAYS_IN_WEEK);\n    }\n\n    /**\n     * The current view date\n     */\n    @Input() viewDate: Date;\n\n    /**\n     * Specify if the calendar must be resposive on window resize, changing the days showed automatically\n     */\n    @Input() responsive: boolean = false;\n\n    /**\n     * An array of events to display on view\n     */\n    @Input() events: CalendarSchedulerEvent[] = [];\n\n    /**\n     * The number of segments in an hour. Must be one of 1, 2, 4, 6\n     */\n    @Input() hourSegments: 1 | 2 | 4 | 6 = DEFAULT_HOUR_SEGMENTS;\n\n    /**\n    * The height in pixels of each hour segment\n    */\n    @Input() hourSegmentHeight: number = DEFAULT_HOUR_SEGMENT_HEIGHT_PX;\n\n    /**\n     * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view\n     */\n    @Input() excludeDays: number[] = [];\n\n    /**\n     * Specify if the first day of current scheduler view has to be today or the first day of the week\n     */\n    @Input() startsWithToday: boolean = false;\n\n    /**\n     * Specify if content must be shown or not\n     */\n    @Input() showEventContent: boolean = true;\n\n    /**\n     * Specify if actions must be shown or not\n     */\n    @Input() showEventActions: boolean = true;\n\n    /**\n     * Specify if status must be shown or not\n     */\n    @Input() showEventStatus: boolean = true;\n\n    /**\n     * Specify if hour must be shown on segment or not\n     */\n    @Input() showSegmentHour: boolean = false;\n\n    /**\n     * Specify if event must zoom on mouse hover or not\n     */\n    @Input() zoomEventOnHover: boolean = false;\n\n    /**\n     * A function that will be called before each cell is rendered. The first argument will contain the calendar (day, hour or segment) cell.\n     * If you add the `cssClass` property to the cell it will add that class to the cell in the template\n     */\n    @Input() dayModifier: Function;\n    @Input() hourModifier: Function;\n    @Input() segmentModifier: Function;\n    @Input() eventModifier: Function;\n\n    /**\n     * An observable that when emitted on will re-render the current view\n     */\n    @Input() refresh: Subject<any>;\n\n    /**\n     * The locale used to format dates\n     */\n    @Input() locale: string;\n\n    /**\n     * The grid size to snap resizing and dragging of events to\n     */\n    @Input() eventSnapSize: number = this.hourSegmentHeight;\n\n    /**\n    * Whether to snap events to a grid when dragging\n    */\n    @Input() snapDraggedEvents: boolean = true;\n\n    /**\n     * The start number of the week\n     */\n    @Input() weekStartsOn: number;\n\n    /**\n     * A custom template to use to replace the header\n     */\n    @Input() headerTemplate: TemplateRef<any>;\n\n    /**\n     * A custom template to use to replace the day cell\n     */\n    @Input() cellTemplate: TemplateRef<any>;\n\n    /**\n     * A custom template to use for week view events\n     */\n    @Input() eventTemplate: TemplateRef<any>;\n\n    /**\n     * A custom template to use for event titles\n     */\n    @Input() eventTitleTemplate: TemplateRef<any>;\n\n    /**\n     * A custom template to use for all day events\n     */\n    @Input() allDayEventTemplate: TemplateRef<any>;\n\n    /**\n     * An array of day indexes (0 = sunday, 1 = monday etc) that indicate which days are weekends\n     */\n    @Input() weekendDays: number[];\n\n    /**\n     * The day start hours in 24 hour time. Must be 0-23\n     */\n    @Input() dayStartHour: number = 0;\n\n    /**\n     * The day start minutes. Must be 0-59\n     */\n    @Input() dayStartMinute: number = 0;\n\n    /**\n     * The day end hours in 24 hour time. Must be 0-23\n     */\n    @Input() dayEndHour: number = 23;\n\n    /**\n     * The day end minutes. Must be 0-59\n     */\n    @Input() dayEndMinute: number = 59;\n\n    /**\n     * Called when view days value changes\n     */\n    @Output() viewDaysChanged: EventEmitter<number> = new EventEmitter<number>();\n\n    /**\n     * Called when a header week day is clicked\n     */\n    @Output() dayHeaderClicked: EventEmitter<{ day: SchedulerViewDay }> = new EventEmitter<{ day: SchedulerViewDay }>();\n\n    /**\n     * Called when the hour is clicked\n     */\n    @Output() hourClicked: EventEmitter<{ hour: SchedulerViewHour }> = new EventEmitter<{ hour: SchedulerViewHour }>();\n\n    /**\n     * Called when the segment is clicked\n     */\n    @Output() segmentClicked: EventEmitter<{ segment: SchedulerViewHourSegment }> = new EventEmitter<{ segment: SchedulerViewHourSegment }>();\n\n    /**\n     * Called when the event is clicked\n     */\n    @Output() eventClicked: EventEmitter<{ event: CalendarSchedulerEvent }> = new EventEmitter<{ event: CalendarSchedulerEvent }>();\n\n    /**\n     * Called when an event is resized or dragged and dropped\n     */\n    @Output() eventTimesChanged: EventEmitter<SchedulerEventTimesChangedEvent> = new EventEmitter<SchedulerEventTimesChangedEvent>();\n\n    /**\n     * @hidden\n     */\n    view: SchedulerView;\n\n    /**\n     * @hidden\n     */\n    refreshSubscription: Subscription;\n\n    /**\n     * @hidden\n     */\n    days: SchedulerViewDay[];\n\n    /**\n     * @hidden\n     */\n    hours: WeekViewHour[] = [];\n\n    /**\n     * @hidden\n     */\n    // resizes: Map<CalendarSchedulerEvent, SchedulerResizeEvent> = new Map();\n    resizes: Map<CalendarSchedulerEvent, ResizeEvent> = new Map();\n\n    /**\n     * @hidden\n     */\n    eventDragEnter: number = 0;\n\n    /**\n     * @hidden\n     */\n    dragActive: boolean = false;\n\n    /**\n     * @hidden\n     */\n    dragAlreadyMoved = false;\n\n    /**\n     * @hidden\n     */\n    validateResize: (args: any) => boolean;\n\n    /**\n     * @hidden\n     */\n    validateDrag: (args: any) => boolean;\n\n    /**\n     * @hidden\n     */\n    dayColumnWidth: number;\n\n    /**\n     * @hidden\n     */\n    calendarId: symbol = Symbol('angular calendar scheduler view id');\n\n    /**\n     * @hidden\n     */\n    rtl = false;\n\n    /**\n     * @hidden\n     */\n    trackByHourColumn = trackByHourColumn;\n\n    /**\n     * @hidden\n     */\n    trackByDayOrEvent = trackByDayOrEvent;\n\n    /**\n     * @hidden\n     */\n    trackByHour = trackByHour;\n\n    /**\n     * @hidden\n     */\n    trackByHourSegment = trackByHourSegment;\n\n    mobileQueryXs: MediaQueryList;\n    mobileQuerySm: MediaQueryList;\n    mobileQueryListener: (this: MediaQueryList, ev: MediaQueryListEvent) => any;\n    @HostListener('window:resize', ['$event'])\n    onResize(event: any) {\n        this.adjustViewDays();\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(private cdr: ChangeDetectorRef, @Inject(LOCALE_ID) locale: string, private config: SchedulerConfig,\n        private utils: CalendarSchedulerUtils, private dateAdapter: DateAdapter, private media: MediaMatcher,\n        private changeDetectorRef: ChangeDetectorRef) {\n\n        this.locale = this.config.locale || locale;\n\n        // See 'Responsive breakpoints' at https://getbootstrap.com/docs/4.1/layout/overview/\n        this.mobileQueryXs = this.media.matchMedia('(max-width: 576px)');           // Extra small devices (portrait phones, less than 576px)\n        this.mobileQuerySm = this.media.matchMedia('(max-width: 768px)');           // Small devices (landscape phones, less than 768px)\n\n        this.mobileQueryListener = () => this.changeDetectorRef.detectChanges();\n\n        // this.mobileQueryXs.addEventListener('change', this.mobileQueryListener);\n        this.mobileQueryXs.addListener(this.mobileQueryListener);\n        // this.mobileQuerySm.addEventListener('change', this.mobileQueryListener);\n        this.mobileQuerySm.addListener(this.mobileQueryListener);\n    }\n\n    /**\n     * @hidden\n     */\n    ngOnInit(): void {\n        this.adjustViewDays();\n\n        if (this.refresh) {\n            this.refreshSubscription = this.refresh\n                // tslint:disable-next-line: deprecation\n                .subscribe({\n                    next: () => {\n                        this.refreshAll();\n                        this.cdr.markForCheck();\n                    },\n                    error: () => {},\n                    complete: () => {}\n                });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    ngOnChanges(changes: any): void {\n        if (changes.viewDays || changes.viewDate || changes.excludeDays || changes.weekendDays) {\n            this.refreshHeader();\n        }\n\n        if (changes.viewDays ||\n            changes.viewDate ||\n            changes.events ||\n            changes.dayStartHour ||\n            changes.dayEndHour ||\n            changes.dayStartMinute ||\n            changes.dayEndMinute ||\n            changes.excludeDays ||\n            changes.eventWidth\n        ) {\n            this.refreshHourGrid();\n            this.refreshBody();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    ngOnDestroy(): void {\n        if (this.refreshSubscription) {\n            this.refreshSubscription.unsubscribe();\n        }\n\n        // this.mobileQueryXs.removeEventListener('change', this.mobileQueryListener);\n        this.mobileQueryXs.removeListener(this.mobileQueryListener);\n        // this.mobileQuerySm.removeEventListener('change', this.mobileQueryListener);\n        this.mobileQuerySm.removeListener(this.mobileQueryListener);\n    }\n\n    setViewDays(viewDays: number) {\n        const oldViewDays: number = this._viewDays;\n\n        this.viewDays = viewDays;\n\n        if (this._viewDays !== oldViewDays) {\n            this.viewDaysChanged.emit(this._viewDays);\n            this.refreshAll();\n        }\n    }\n\n    protected adjustViewDays(): void {\n        const oldViewDays: number = this._viewDays;\n\n        if (this.responsive) {\n            // https://www.digitalocean.com/community/tutorials/angular-breakpoints-angular-cdk\n            // With a Component: https://www.digitalocean.com/community/tutorials/detect-responsive-screen-sizes-in-angular\n            // check/set the size\n            if (this.mobileQueryXs.matches) {\n                this.viewDays = 1;\n            } else if (this.mobileQuerySm.matches) {\n                this.viewDays = 3;\n            } else {\n                this.viewDays = DAYS_IN_WEEK;\n            }\n        }\n\n        if (this._viewDays !== oldViewDays) {\n            this.viewDaysChanged.emit(this._viewDays);\n            this.refreshAll();\n        }\n    }\n\n    protected getPositioningClasses(day: SchedulerViewDay, event: CalendarSchedulerEvent): string {\n        const classes: string[] = [\n            this.getDayClass(event.start),\n            this.getTimeClass(day.date, event),\n            this.getLengthClass(day.date, event)\n        ];\n        return classes.join(' ');\n    }\n\n    private getDayClass(date: Date): string {\n        return '';\n    }\n\n    private getTimeClass(date: Date, event: CalendarSchedulerEvent): string {\n        if (this.dateAdapter.isSameDay(date, event.start)) {\n            let hours: number = event.start.getHours();\n            if (this.dayStartHour > 0) { hours = event.start.getHours() - this.dayStartHour; }\n            const hoursString: string = hours < 10 ? `0${hours}` : `${hours}`;\n            const minutesString: string = event.start.getMinutes() < 10 ? `0${event.start.getMinutes()}` : `${event.start.getMinutes()}`;\n            return `time${hoursString}${minutesString}`;\n        } else if (isBefore(event.start, this.dateAdapter.startOfDay(date))) {\n            return `time0000`;\n        }\n    }\n\n    private getLengthClass(date: Date, event: CalendarSchedulerEvent): string {\n        if (this.dateAdapter.isSameDay(date, event.start)) {\n            const durationInMinutes: number = this.dateAdapter.differenceInMinutes(event.end, event.start);\n            const leftToEndOfDay: number = this.dateAdapter.differenceInMinutes(this.dateAdapter.setMinutes(this.dateAdapter.setHours(event.start, this.dayEndHour + 1), 0), event.start);\n            return leftToEndOfDay > durationInMinutes ? `length${durationInMinutes}` : `length${leftToEndOfDay}`;\n        } else if (isBefore(event.start, this.dateAdapter.startOfDay(date))) {\n            let leftDurationInMinutes: number = 0;\n            if (this.dateAdapter.isSameDay(date, event.end)) {\n                leftDurationInMinutes = this.dateAdapter.differenceInMinutes(event.end, this.dateAdapter.startOfDay(date));\n                if (this.dayStartHour > 0) { leftDurationInMinutes = (event.end.getHours() - this.dayStartHour) * MINUTES_IN_HOUR; }\n            } else {\n                leftDurationInMinutes = ((this.dayEndHour + 1) - this.dayStartHour) * MINUTES_IN_HOUR;\n            }\n            return `length${leftDurationInMinutes}`;\n        }\n    }\n\n\n    private refreshHourGrid(): void {\n        this.hours = this.utils.getSchedulerViewHourGrid({\n            viewDate: this.viewDate,\n            hourSegments: this.hourSegments,\n            dayStart: {\n                hour: this.dayStartHour,\n                minute: this.dayStartMinute\n            },\n            dayEnd: {\n                hour: this.dayEndHour,\n                minute: this.dayEndMinute\n            }\n        });\n    }\n\n    private refreshHeader(): void {\n        this.days = this.utils.getSchedulerViewDays({\n            viewDate: this.viewDate,\n            viewDays: this.viewDays,\n            weekStartsOn: this.weekStartsOn,\n            startsWithToday: this.startsWithToday,\n            excluded: this.excludeDays,\n            weekendDays: this.weekendDays\n        });\n    }\n\n    private refreshBody(events?: CalendarSchedulerEvent[]): void {\n        this.view = this.getSchedulerView(events || this.events);\n\n        if (this.dayModifier) {\n            this.days.forEach(day => this.dayModifier(day));\n        }\n\n        if (this.dayModifier || this.hourModifier || this.segmentModifier) {\n            this.view.days.forEach(day => {\n                if (this.dayModifier) {\n                    this.dayModifier(day);\n                }\n                day.hours.forEach((hour: SchedulerViewHour) => {\n                    if (this.hourModifier) {\n                        this.hourModifier(hour);\n                    }\n                    hour.segments.forEach((segment: SchedulerViewHourSegment) => {\n                        if (this.segmentModifier) {\n                            this.segmentModifier(segment);\n                        }\n                    });\n                });\n            });\n        }\n\n        if (this.eventModifier) {\n            this.events.forEach(event => this.eventModifier(event));\n        }\n    }\n\n    private refreshAll(): void {\n        this.refreshHeader();\n        this.refreshHourGrid();\n        this.refreshBody();\n    }\n\n\n    private getSchedulerView(events: CalendarSchedulerEvent[]): SchedulerView {\n        return this.utils.getSchedulerView({\n            events: events,\n            viewDate: this.viewDate,\n            viewDays: this.viewDays,\n            hourSegments: this.hourSegments,\n            weekStartsOn: this.weekStartsOn,\n            startsWithToday: this.startsWithToday,\n            dayStart: <Time>{\n                hour: this.dayStartHour,\n                minute: this.dayStartMinute\n            },\n            dayEnd: <Time>{\n                hour: this.dayEndHour,\n                minute: this.dayEndMinute\n            },\n            excluded: this.excludeDays,\n            eventWidth: 1,\n            hourSegmentHeight: this.hourSegmentHeight,\n            logEnabled: this.config.logEnabled\n        });\n    }\n\n\n    //#region RESIZE\n\n    /**\n     * @hidden\n     */\n    resizeStarted(eventsContainer: HTMLElement, event: SchedulerViewEvent, resizeEvent: ResizeEvent): void {\n        this.resizes.set(event.event, resizeEvent);\n        this.dayColumnWidth = Math.floor(eventsContainer.offsetWidth / this.days.length);\n\n        const resizeHelper: CalendarResizeHelper = new CalendarResizeHelper(eventsContainer, this.dayColumnWidth, this.rtl);\n        this.validateResize = ({ rectangle, edges }) => resizeHelper.validateResize({\n            rectangle: { ...rectangle },\n            edges\n        });\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    resizing(event: SchedulerViewEvent, resizeEvent: ResizeEvent): void {\n        this.resizes.set(event.event, resizeEvent);\n        const adjustedEvents = new Map<CalendarSchedulerEvent, CalendarSchedulerEvent>();\n\n        const tempEvents = [...this.events];\n\n        this.resizes.forEach((lastResizeEvent, ev) => {\n            const newEventDates = this.getResizedEventDates(\n                ev,\n                lastResizeEvent\n            );\n            const adjustedEvent = { ...ev, ...newEventDates };\n            adjustedEvents.set(adjustedEvent, ev);\n            const eventIndex = tempEvents.indexOf(ev);\n            tempEvents[eventIndex] = adjustedEvent;\n        });\n\n        this.restoreOriginalEvents(tempEvents, adjustedEvents);\n    }\n\n    /**\n     * @hidden\n     */\n    resizeEnded(event: SchedulerViewEvent): void {\n        this.view = this.getSchedulerView(this.events);\n        const lastResizeEvent = this.resizes.get(event.event);\n        this.resizes.delete(event.event);\n        const newEventDates = this.getResizedEventDates(\n            event.event,\n            lastResizeEvent\n        );\n        this.eventTimesChanged.emit(\n            <SchedulerEventTimesChangedEvent>{\n                newStart: newEventDates.start,\n                newEnd: newEventDates.end,\n                event: event.event,\n                type: CalendarEventTimesChangedEventType.Resize\n            });\n    }\n\n    private getResizedEventDates(event: CalendarSchedulerEvent, resizeEvent: ResizeEvent): { start: Date, end: Date} {\n        const minimumEventHeight = getMinimumEventHeightInMinutes(this.hourSegments, this.hourSegmentHeight);\n        const newEventDates = {\n            start: event.start,\n            end: getDefaultEventEnd(this.dateAdapter, event, minimumEventHeight)\n        };\n        const { end, ...eventWithoutEnd } = event;\n        const smallestResizes = {\n            start: this.dateAdapter.addMinutes(newEventDates.end, minimumEventHeight * -1),\n            end: getDefaultEventEnd(this.dateAdapter, eventWithoutEnd, minimumEventHeight)\n        };\n\n        if (resizeEvent.edges.left) {\n            const daysDiff = Math.round(\n                +resizeEvent.edges.left / this.dayColumnWidth\n            );\n            const newStart = this.dateAdapter.addDays(newEventDates.start, daysDiff);\n            if (newStart < smallestResizes.start) {\n                newEventDates.start = newStart;\n            } else {\n                newEventDates.start = smallestResizes.start;\n            }\n        } else if (resizeEvent.edges.right) {\n            const daysDiff = Math.round(\n                +resizeEvent.edges.right / this.dayColumnWidth\n            );\n            const newEnd = this.dateAdapter.addDays(newEventDates.end, daysDiff);\n            if (newEnd > smallestResizes.end) {\n                newEventDates.end = newEnd;\n            } else {\n                newEventDates.end = smallestResizes.end;\n            }\n        }\n\n        if (resizeEvent.edges.top) {\n            const precision: number = this.eventSnapSize || this.hourSegmentHeight;\n            const draggedInPixelsSnapSize = Math.round((resizeEvent.edges.top as number) / precision) * precision;\n\n            const pixelAmountInMinutes = MINUTES_IN_HOUR / (this.hourSegments * this.hourSegmentHeight);\n            const minutesMoved = draggedInPixelsSnapSize * pixelAmountInMinutes;\n\n            const newStart = this.dateAdapter.addMinutes(newEventDates.start, minutesMoved);\n            if (newStart < smallestResizes.start) {\n                newEventDates.start = newStart;\n            } else {\n                newEventDates.start = smallestResizes.start;\n            }\n        } else if (resizeEvent.edges.bottom) {\n            const precision: number = this.eventSnapSize || this.hourSegmentHeight;\n            const draggedInPixelsSnapSize = Math.round((resizeEvent.edges.bottom as number) / precision) * precision;\n\n            const pixelAmountInMinutes = MINUTES_IN_HOUR / (this.hourSegments * this.hourSegmentHeight);\n            const minutesMoved = draggedInPixelsSnapSize * pixelAmountInMinutes;\n\n            const newEnd = this.dateAdapter.addMinutes(newEventDates.end, minutesMoved);\n            if (newEnd > smallestResizes.end) {\n                newEventDates.end = newEnd;\n            } else {\n                newEventDates.end = smallestResizes.end;\n            }\n        }\n        return newEventDates;\n    }\n\n    //#endregion\n\n    //#region DRAG & DROP\n\n    /**\n     * @hidden\n     */\n    eventDropped(dropEvent: DropEvent<{ event?: CalendarSchedulerEvent; calendarId?: symbol }>, date: Date): void {\n        if (shouldFireDroppedEvent(dropEvent, date, this.calendarId)) {\n            this.eventTimesChanged.emit(\n                <SchedulerEventTimesChangedEvent>{\n                    type: CalendarEventTimesChangedEventType.Drop,\n                    event: dropEvent.dropData.event,\n                    newStart: date,\n                    newEnd: null\n                });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    dragStarted(eventsContainer: HTMLElement, eventContainer: HTMLElement, event?: SchedulerViewEvent): void {\n        this.dayColumnWidth = Math.floor(eventsContainer.offsetWidth / this.days.length);\n        const dragHelper: CalendarDragHelper = new CalendarDragHelper(\n            eventsContainer,\n            eventContainer\n        );\n        this.validateDrag = ({ x, y, transform }) =>\n            this.resizes.size === 0 && dragHelper.validateDrag({\n                x,\n                y,\n                snapDraggedEvents: this.snapDraggedEvents,\n                dragAlreadyMoved: this.dragAlreadyMoved,\n                transform\n            });\n            this.dragActive = true;\n            this.dragAlreadyMoved = false;\n            this.eventDragEnter = 0;\n            if (!this.snapDraggedEvents && event) {\n                this.view.days.forEach((day: SchedulerViewDay) => {\n                const linkedEvent = day.events.find(ev => ev.event === event.event && ev !== event);\n                // hide any linked events while dragging\n                if (linkedEvent) {\n                    linkedEvent.width = 0;\n                    linkedEvent.height = 0;\n                }\n            });\n          }\n          this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    dragMove(event: SchedulerViewEvent, dragEvent: DragMoveEvent) {\n        if (this.snapDraggedEvents) {\n            const newEventTimes = this.getDragMovedEventTimes(\n                event,\n                dragEvent,\n                this.dayColumnWidth,\n                true\n            );\n            const originalEvent = event.event;\n            const adjustedEvent = { ...originalEvent, ...newEventTimes };\n            const tempEvents = this.events.map(ev => {\n                if (ev === originalEvent) {\n                    return adjustedEvent;\n                }\n                return ev;\n            });\n\n            this.restoreOriginalEvents(tempEvents, new Map([[adjustedEvent, originalEvent]]));\n        }\n        this.dragAlreadyMoved = true;\n    }\n\n    dragEnded(event: SchedulerViewEvent, dragEndEvent: DragEndEvent, dayWidth: number, useY = false): void {\n        this.view = this.getSchedulerView(this.events);\n        this.dragActive = false;\n        const { start, end } = this.getDragMovedEventTimes(event, dragEndEvent, dayWidth, useY);\n        if (\n            this.eventDragEnter > 0 &&\n            isDraggedWithinPeriod(start, end, this.view.period)\n        ) {\n            this.eventTimesChanged.emit(\n                <SchedulerEventTimesChangedEvent>{\n                    newStart: start,\n                    newEnd: end,\n                    event: event.event,\n                    type: CalendarEventTimesChangedEventType.Drag\n                });\n        }\n    }\n\n    private getDragMovedEventTimes(event: SchedulerViewEvent, dragEndEvent: DragEndEvent | DragMoveEvent, dayWidth: number, useY: boolean): { start: Date, end: Date} {\n        const daysDragged = roundToNearest(dragEndEvent.x, dayWidth) / dayWidth;\n        const minutesMoved = useY ?\n            getMinutesMoved(\n                dragEndEvent.y,\n                this.hourSegments,\n                this.hourSegmentHeight,\n                this.eventSnapSize)\n            : 0;\n\n        const start = this.dateAdapter.addMinutes(\n            this.dateAdapter.addDays(event.event.start, daysDragged),\n            minutesMoved\n        );\n        let end: Date;\n        if (event.event.end) {\n            end = this.dateAdapter.addMinutes(\n                this.dateAdapter.addDays(event.event.end, daysDragged),\n                minutesMoved\n            );\n        }\n\n        return { start, end };\n    }\n\n    private restoreOriginalEvents(tempEvents: CalendarSchedulerEvent[], adjustedEvents: Map<CalendarSchedulerEvent, CalendarSchedulerEvent>) {\n        this.refreshBody(tempEvents);\n        const adjustedEventsArray = tempEvents.filter(event => adjustedEvents.has(event));\n        this.view.days.forEach(day => {\n            adjustedEventsArray.forEach(adjustedEvent => {\n                const originalEvent = adjustedEvents.get(adjustedEvent);\n                const existingColumnEvent = day.events.find(ev => ev.event === adjustedEvent);\n                if (existingColumnEvent) {\n                    // restore the original event so trackBy kicks in and the dom isn't changed\n                    existingColumnEvent.event = originalEvent;\n                } else {\n                    // add a dummy event to the drop so if the event was removed from the original column the drag doesn't end early\n                    day.events.push({\n                        event: originalEvent,\n                        left: 0,\n                        top: 0,\n                        height: 0,\n                        width: 0,\n                        startsBeforeDay: false,\n                        endsAfterDay: false\n                    });\n                }\n            });\n        });\n        adjustedEvents.clear();\n      }\n\n    //#endregion\n}\n","import { Pipe, PipeTransform, LOCALE_ID, Inject } from '@angular/core';\nimport { CalendarDateFormatter, DateAdapter } from 'angular-calendar';\n\n@Pipe({\n  standalone: false,\n  name: 'calendarSchedulerDate'\n})\nexport class CalendarSchedulerDatePipe implements PipeTransform {\n  constructor(\n    private dateAdapter: DateAdapter,\n    private dateFormatter: CalendarDateFormatter,\n    @Inject(LOCALE_ID) private locale: string\n  ) {}\n\n  transform(\n    date: Date,\n    method: string,\n    locale: string = this.locale,\n    weekStartsOn: number = 0,\n    excludeDays: number[] = [],\n    daysInWeek?: number,\n    startsWithToday?: boolean\n  ): string {\n    if (typeof this.dateFormatter[method] === 'undefined') {\n      const allowedMethods = Object.getOwnPropertyNames(\n        Object.getPrototypeOf(CalendarDateFormatter.prototype)\n      ).filter(iMethod => iMethod !== 'constructor');\n      throw new Error(\n        `${method} is not a valid date formatter. Can only be one of ${allowedMethods.join(\n          ', '\n        )}`\n      );\n    }\n    return this.dateFormatter[method]({\n      dateAdapter: this.dateAdapter,\n      date,\n      locale,\n      weekStartsOn,\n      excludeDays,\n      daysInWeek,\n      startsWithToday\n    });\n  }\n}\n","import { CalendarDateFormatter, DateFormatterParams, DateAdapter } from 'angular-calendar';\nimport { DAYS_IN_WEEK } from '../utils/calendar-scheduler-utils';\nimport {inject, Injectable} from '@angular/core';\n\nexport interface SchedulerDateFormatterParams extends DateFormatterParams {\n    dateAdapter: DateAdapter;\n    startsWithToday: boolean;\n}\n\n@Injectable()\nexport class SchedulerDateFormatter extends CalendarDateFormatter {\n    protected dateAdapter = inject(DateAdapter);\n\n    constructor(dateAdapter: DateAdapter) {\n        super();\n    }\n\n    /**\n     * The time formatting down the left hand side of the day view\n     */\n    public dayViewHour({ date, locale }: SchedulerDateFormatterParams): string {\n        return new Intl.DateTimeFormat(locale, { hour: 'numeric', minute: 'numeric' }).format(date);\n    }\n\n    public weekViewTitle({ date, locale, weekStartsOn, excludeDays, daysInWeek, startsWithToday }: SchedulerDateFormatterParams): string {\n        // http://generatedcontent.org/post/59403168016/esintlapi\n        const year: string = new Intl.DateTimeFormat(locale, { year: 'numeric' }).format(date);\n        const month: string = new Intl.DateTimeFormat(locale, { month: 'short' }).format(date);\n\n        const dateInner: Date = startsWithToday || daysInWeek < DAYS_IN_WEEK\n            ? date\n            : this.dateAdapter.startOfWeek(date, { weekStartsOn: weekStartsOn });\n\n        const start = new Date(dateInner);\n        while (excludeDays.includes(start.getDay())) {\n            start.setDate(start.getDate() + 1);\n        }\n\n        const end = new Date(start);\n        let addedDays = 0;\n        while (addedDays < daysInWeek - 1) {\n            end.setDate(end.getDate() + 1);\n            if (!excludeDays.includes(end.getDay())) {\n                addedDays++;\n        }\n        }\n\n        // Se stesso giorno → mostra solo una data\n        if (start.toDateString() === end.toDateString()) {\n            return new Intl.DateTimeFormat(locale, {\n            day: 'numeric',\n            month: 'short',\n            year: 'numeric'\n            }).format(start);\n        }\n\n        const sameMonth = start.getMonth() === end.getMonth();\n        const sameYear = start.getFullYear() === end.getFullYear();\n\n        // Formattatori localizzati\n        const formatDay = (d: Date) =>\n            new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(d);\n        const formatMonth = (d: Date) =>\n            new Intl.DateTimeFormat(locale, { month: 'short' }).format(d);\n        const formatYear = (d: Date) =>\n            new Intl.DateTimeFormat(locale, { year: 'numeric' }).format(d);\n\n        if (sameMonth && sameYear) {\n            // Es: 4–10 nov 2025\n            return `${formatDay(start)}–${formatDay(end)} ${formatMonth(end)} ${formatYear(end)}`;\n        }\n\n        if (sameYear) {\n            // Es: 30 dic – 5 gen 2025\n            return `${formatDay(start)} ${formatMonth(start)} – ${formatDay(end)} ${formatMonth(end)} ${formatYear(end)}`;\n        }\n\n        // Anno diverso\n        return `${formatDay(start)} ${formatMonth(start)} ${formatYear(start)} – ${formatDay(end)} ${formatMonth(end)} ${formatYear(end)}`;\n    }\n\n    private daysInMonth(anyDateInMonth: Date): number {\n        return new Date(anyDateInMonth.getFullYear(), anyDateInMonth.getMonth() + 1, 0).getDate();\n    }\n}\n","import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\n\nimport { CalendarModule, DateAdapter } from 'angular-calendar';\nimport { CalendarSchedulerViewComponent } from './calendar-scheduler-view.component';\nimport { CalendarSchedulerHourSegmentComponent } from './calendar-scheduler-hour-segment.component';\nimport { CalendarSchedulerHeaderComponent } from './calendar-scheduler-header.component';\nimport { CalendarSchedulerEventComponent } from './calendar-scheduler-event.component';\nimport { CalendarSchedulerEventTitleComponent } from './calendar-scheduler-event-title.component';\nimport { CalendarSchedulerEventContentComponent } from './calendar-scheduler-event-content.component';\nimport { CalendarSchedulerEventActionsComponent } from './calendar-scheduler-event-actions.component';\n\nimport { CalendarSchedulerUtils } from './utils/calendar-scheduler-utils.provider';\n\nimport { SchedulerEventTitlePipe } from './pipes/scheduler-event-title.pipe';\nimport { CalendarSchedulerDatePipe } from './pipes/calendar-scheduler-date.pipe';\n\nimport { SchedulerDateFormatter } from './formatters/scheduler-date-formatter.provider';\nimport { SchedulerEventTitleFormatter } from './formatters/scheduler-event-title-formatter.provider';\n\nexport * from './calendar-scheduler-view.component';\nexport * from './formatters/scheduler-date-formatter.provider';\nexport * from './formatters/scheduler-event-title-formatter.provider';\nexport * from './pipes/scheduler-event-title.pipe';\nexport * from './pipes/calendar-scheduler-date.pipe';\nexport * from './utils/calendar-scheduler-utils';\nexport * from './utils/calendar-scheduler-utils.provider';\nexport * from '../common/utils';\nexport * from './models';\n\nexport * from './calendar-scheduler-hour-segment.component';\nexport * from './calendar-scheduler-header.component';\nexport * from './calendar-scheduler-event.component';\nexport * from './calendar-scheduler-event-title.component';\nexport * from './calendar-scheduler-event-content.component';\nexport * from './calendar-scheduler-event-actions.component';\n\nimport { SchedulerConfig } from './scheduler-config';\n\nexport const SCHEDULER_CONFIG = new InjectionToken('SchedulerConfig');\n\nexport function provideSchedulerConfig(config: SchedulerConfig) {\n    return new SchedulerConfig(config);\n}\n\n/**\n * The main module of this library. Example usage:\n *\n * ```typescript\n * import { CalendarModule, DateAdapter } from 'angular-calendar';\n * import { adapterFactory } from 'angular-calendar/date-adapters/date-fns';\n * import { SchedulerModule } from 'angular-calendar-scheduler';\n *\n * @NgModule({\n *  imports: [\n *     CalendarModule.forRoot({\n *       provide: DateAdapter,\n *       useFactory: adapterFactory\n *     }),\n *     SchedulerModule.forRoot({ locale: 'en', headerDateFormat: 'daysRange' })\n *   ]\n * })\n * class MyModule {}\n * ```\n *\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    // TODO CONVERTIRE A STANDALONE\n    CalendarModule.forRoot({\n      provide: DateAdapter,\n      useFactory: adapterFactory\n    })\n  ],\n  declarations: [\n    CalendarSchedulerViewComponent,\n    CalendarSchedulerHourSegmentComponent,\n    CalendarSchedulerHeaderComponent,\n    CalendarSchedulerEventComponent,\n    CalendarSchedulerEventTitleComponent,\n    CalendarSchedulerEventContentComponent,\n    CalendarSchedulerEventActionsComponent,\n    SchedulerEventTitlePipe,\n    CalendarSchedulerDatePipe\n  ],\n  providers: [\n    CalendarSchedulerUtils,\n    SchedulerEventTitlePipe,\n    CalendarSchedulerDatePipe,\n    SchedulerEventTitleFormatter,\n    SchedulerDateFormatter\n  ],\n  exports: [\n    CalendarSchedulerDatePipe,\n    CalendarSchedulerViewComponent,\n    CalendarSchedulerHourSegmentComponent,\n    CalendarSchedulerHeaderComponent,\n    CalendarSchedulerEventComponent,\n    CalendarSchedulerEventTitleComponent,\n    CalendarSchedulerEventContentComponent,\n    CalendarSchedulerEventActionsComponent\n  ]\n})\nexport class SchedulerModule {\n  static forRoot(config?: SchedulerConfig): ModuleWithProviders<SchedulerModule> {\n    return {\n        ngModule: SchedulerModule,\n        providers: [\n            { provide: SCHEDULER_CONFIG, useValue: config },\n            { provide: SchedulerConfig, useFactory: provideSchedulerConfig, deps: [SCHEDULER_CONFIG] }\n        ]\n    };\n}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["MINUTES_IN_HOUR","trackByHour","trackByHourSegment","getDefaultEventEnd","roundToNearest","getMinutesMoved","isDraggedWithinPeriod","shouldFireDroppedEvent","validateEventsWithoutLog","i1","i2","i1.SchedulerEventTitleFormatter","i2.CalendarSchedulerEventActionsComponent","i3.SchedulerEventTitlePipe","i3.CalendarSchedulerEventTitleComponent","i4.CalendarSchedulerEventContentComponent","i5.CalendarSchedulerEventActionsComponent","i1.SchedulerConfig","i2.CalendarSchedulerUtils","i3","i5","i8.CalendarSchedulerHourSegmentComponent","i9.CalendarSchedulerHeaderComponent","i10.CalendarSchedulerEventComponent"],"mappings":"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"}