{"version":3,"file":"sowatech-shared-fullcalendar.mjs","sources":["../../../projects/shared/fullcalendar/calendar-settings.ts","../../../projects/shared/fullcalendar/calender-theme.ts","../../../projects/shared/fullcalendar/toolbar-config.ts","../../../projects/shared/fullcalendar/fullcalendar.component.ts","../../../projects/shared/fullcalendar/fullcalendar.component.html","../../../projects/shared/fullcalendar/fullcalendar.module.ts","../../../projects/shared/fullcalendar/sowatech-shared-fullcalendar.ts"],"sourcesContent":["import { WeekDay } from '@angular/common';\r\n\r\nexport interface CalendarSettings {\r\n    startTime: number;\r\n    endTime: number;\r\n    visibleDays: WeekDay[];\r\n    slotDuration: string;\r\n}\r\n\r\nexport const defaultCalendarSettings: CalendarSettings = {\r\n    startTime: 8,\r\n    endTime: 18,\r\n    visibleDays: [\r\n        WeekDay.Monday,\r\n        WeekDay.Tuesday,\r\n        WeekDay.Wednesday,\r\n        WeekDay.Thursday,\r\n        WeekDay.Friday,\r\n    ],\r\n    slotDuration: '00:15:00'\r\n};\r\n","import { createPlugin } from '@fullcalendar/core';\r\nimport { Theme } from '@fullcalendar/core/internal';\r\n\r\nclass FontAwesomeTheme extends Theme { }\r\n\r\nFontAwesomeTheme.prototype.classes = {\r\n    root: 'fc-theme-standard',\r\n    tableCellShaded: 'fc-cell-shaded',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'fc-button fc-button-primary',\r\n    buttonActive: 'fc-button-active',\r\n    popover: 'popover',\r\n    popoverHeader: 'popover-header',\r\n    popoverContent: 'popover-body',\r\n};\r\n\r\nFontAwesomeTheme.prototype.baseIconClass = 'fa-icon fa';\r\n\r\nFontAwesomeTheme.prototype.iconClasses = {\r\n    close: 'fa-x',\r\n    prev: 'fa-chevron-left',\r\n    next: 'fa-chevron-right',\r\n    prevYear: 'fa-chevrons-left',\r\n    nextYear: 'fa-chevrons-right',\r\n};\r\n\r\nFontAwesomeTheme.prototype.rtlIconClasses = {\r\n    prev: 'fa-chevron-right',\r\n    next: 'fa-chevron-left',\r\n    prevYear: 'fa-chevrons-right',\r\n    nextYear: 'fa-chevrons-left',\r\n};\r\n\r\nFontAwesomeTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nFontAwesomeTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nFontAwesomeTheme.prototype.iconOverridePrefix = 'fa-';\r\n\r\nexport const fontAwesomeThemePlugin = createPlugin({ name: 'font-awesome', themeClasses: { 'font-awesome': FontAwesomeTheme } });\r\n","import { CustomButtonInput, ToolbarInput } from '@fullcalendar/core';\r\n\r\nimport { ViewMode } from './fullcalendar.component';\r\n\r\n\r\nexport type ToolbarChunkPosition = 'start' | 'left' | 'center' | 'right' | 'end';\r\nexport type FullCalendarTool = 'title' | 'text' | 'prev' | 'next' | 'prevYear' | 'nextYear' | 'today' | ViewMode;\r\n\r\nexport type ToolbarConfig = Record<ToolbarChunkPosition, ToolbarChunkData[] | null>;\r\nexport type ToolbarChunkData = Array<FullCalendarTool | Record<string, CustomButtonInput>>;\r\n\r\nexport class ToolbarConfigConverter {\r\n\r\n    private readonly toolbarConfig: ToolbarConfig;\r\n    private customButtons: Record<string, CustomButtonInput> = {};\r\n    private toolbar: ToolbarInput = {};\r\n\r\n    public get getCustomButtons() {\r\n        return this.customButtons;\r\n    }\r\n\r\n    public get getToolbar() {\r\n        return this.toolbar;\r\n    }\r\n\r\n    constructor(toolbarConfig: ToolbarConfig) {\r\n        this.toolbarConfig = toolbarConfig;\r\n        this.init();\r\n    }\r\n\r\n    private init() {\r\n        if (!this.toolbarConfig) return;\r\n        Object.keys(this.toolbarConfig).forEach(pos => {\r\n            const key = pos as ToolbarChunkPosition;\r\n            this.toolbar[key] = this.getToolbarLayout(this.toolbarConfig[key]);\r\n        });\r\n    }\r\n\r\n    // Komma und Leerzeichen haben unterschiedlichen Effekt: https://fullcalendar.io/docs/headerToolbar\r\n    private getToolbarLayout(toolGroups: ToolbarChunkData[] | null): string | undefined {\r\n        if (toolGroups === null) return undefined;\r\n\r\n        const groups: string[] = toolGroups.map(group => {\r\n            const items: string[] = [];\r\n            for (const tool of group)\r\n                items.push(typeof tool === 'string' ? tool : this.registerCustomBtn(tool));\r\n            return items.join(',');\r\n        });\r\n        return groups.join(' ');\r\n    }\r\n\r\n    private registerCustomBtn(customButton: Record<string, CustomButtonInput>): string {\r\n        const btnIdent = Object.keys(customButton)[0];\r\n        const customBtn = customButton[btnIdent];\r\n        this.customButtons[btnIdent] = customBtn;\r\n        return btnIdent;\r\n    }\r\n}\r\n","import { getLocaleFirstDayOfWeek } from '@angular/common';\r\nimport { Component, ContentChild, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport type { CalendarTemplateRef } from '@fullcalendar/angular/private-types';\r\nimport { CalendarApi, CalendarOptions, DatesSetArg, EventClickArg, PluginDef, ViewMountArg } from '@fullcalendar/core';\r\nimport { EventImpl } from '@fullcalendar/core/internal';\r\nimport dayGridPlugin from '@fullcalendar/daygrid';\r\nimport interactionPlugin from '@fullcalendar/interaction';\r\nimport listPlugin from '@fullcalendar/list';\r\nimport timeGridPlugin from '@fullcalendar/timegrid';\r\nimport { debounceTime, Subject } from 'rxjs';\r\n\r\nimport { CalendarSettings, defaultCalendarSettings } from './calendar-settings';\r\nimport { CalendarInterval, ICalendarEvent, ICalendarViewEvent, PartialCalendarInterval } from './calendar-view-event';\r\nimport { fontAwesomeThemePlugin } from './calender-theme';\r\nimport { ToolbarConfig, ToolbarConfigConverter } from './toolbar-config';\r\n\r\nexport type ViewMode = 'timeGridDay' | 'timeGridWeek' | 'dayGridMonth' | 'listWeek';\r\n\r\n@Component({\r\n    selector: 'eno-fullcalendar',\r\n    templateUrl: './fullcalendar.component.html',\r\n    styleUrls: ['./fullcalendar.component.scss'],\r\n    standalone: false\r\n})\r\n\r\nexport class EnoFullcalendarComponent<Feed extends number> implements OnInit {\r\n    @ContentChild('eventContent', { static: true }) protected _eventContent?: CalendarTemplateRef<'eventContent'>;\r\n\r\n    @Output() public eventClick: EventEmitter<ICalendarViewEvent<Feed>> = new EventEmitter();\r\n\r\n    private _data: ICalendarEvent<Feed>[] = [];\r\n    @Input()\r\n    public get data(): ICalendarEvent<Feed>[] {\r\n        return this._data;\r\n    }\r\n    public set data(value: ICalendarEvent<Feed>[]) {\r\n        this._data = value;\r\n        this.updateEventSource();\r\n    }\r\n    @Output() public requestData = new EventEmitter<CalendarInterval>();\r\n\r\n    @Input() public initialViewMode: ViewMode = 'dayGridMonth';\r\n    @Input() public headerToolbarConfig?: ToolbarConfig;\r\n    @Input()\r\n    public set settings(value: CalendarSettings) {\r\n        this.startTime = value.startTime;\r\n        this.endTime = value.endTime;\r\n        this.visibleDays = value.visibleDays;\r\n        this.calendarOptions = this.configureFullCalendar();\r\n    }\r\n    public slotDuration = defaultCalendarSettings.slotDuration;\r\n    private startTime = defaultCalendarSettings.startTime;\r\n    private endTime = defaultCalendarSettings.endTime;\r\n    private visibleDays = defaultCalendarSettings.visibleDays;\r\n    private get hiddenDays() {\r\n        const allDays = [1, 2, 3, 4, 5, 6, 0];\r\n        return allDays.filter(d => !this.visibleDays.includes(d));\r\n    }\r\n\r\n    public set selectedDate(date: Date) {\r\n        this.calendarApi?.gotoDate(date);\r\n    }\r\n\r\n    public calendarOptions?: CalendarOptions;\r\n    private calendarApi?: CalendarApi;\r\n\r\n    constructor() {\r\n        this.refreshDays$.pipe(\r\n            debounceTime(500),\r\n            takeUntilDestroyed(),\r\n        ).subscribe(interval => this.loadEvents(interval));\r\n    }\r\n\r\n    ngOnInit() {\r\n        this.calendarOptions = this.configureFullCalendar();\r\n    }\r\n\r\n    private readonly refreshDays$ = new Subject<PartialCalendarInterval>();\r\n    public refreshDays(start?: Date, end?: Date) {\r\n        this.refreshDays$.next({ start, end });\r\n    }\r\n\r\n    private loadEvents(interval: PartialCalendarInterval) {\r\n        if (!this.calendarApi) return;\r\n        this.requestData.emit({\r\n            start: interval.start ?? this.calendarApi.view.currentStart,\r\n            end: interval.end ?? this.calendarApi.view.currentEnd,\r\n        });\r\n    }\r\n\r\n    private configureFullCalendar(): CalendarOptions {\r\n        let headerToolbar;\r\n        if (this.headerToolbarConfig !== undefined)\r\n            headerToolbar = new ToolbarConfigConverter(this.headerToolbarConfig);\r\n        const locale = $localize.locale ?? 'de-de';\r\n        return {\r\n            themeSystem: 'font-awesome',\r\n            locale,\r\n            firstDay: getLocaleFirstDayOfWeek(locale),\r\n            plugins: EnoFullcalendarComponent.configurePlugins(),\r\n            customButtons: headerToolbar?.getCustomButtons,\r\n            headerToolbar: headerToolbar?.getToolbar,\r\n            initialView: this.initialViewMode,\r\n            events: this.data,\r\n            buttonText: {\r\n                month: $localize`:@@Fullcalendar.month.dsp.Label:Monat`,\r\n                week: $localize`:@@Fullcalendar.week.dsp.Label:Woche`,\r\n                day: $localize`:@@Fullcalendar.day.dsp.Label:Tag`,\r\n                list: $localize`:@@Fullcalendar.list.dsp.Label:Liste`\r\n            },\r\n            datesSet: (arg: DatesSetArg) => this.refreshDays(arg.start, arg.end),\r\n            eventClick: (arg: EventClickArg) => this.eventClick.emit(EnoFullcalendarComponent.mapCalendarViewEvent(arg.event)),\r\n            viewDidMount: (arg: ViewMountArg) => this.calendarApi = arg.view.calendar,\r\n            slotMinTime: `${this.startTime}:00:00`,\r\n            slotMaxTime: `${this.endTime}:00:00`,\r\n            allDaySlot: false,\r\n            slotDuration: this.slotDuration,\r\n            hiddenDays: this.hiddenDays,\r\n        };\r\n    }\r\n\r\n    private updateEventSource() {\r\n        if (!this.calendarOptions || !this.calendarApi)\r\n            return;\r\n        this.calendarOptions.events = this.data;\r\n        // Bei mehreren EventSources sollte hier vllt. https://fullcalendar.io/docs/Calendar-getEventSourceById verwendet werden, um ungewollte Updates zu vermeiden\r\n        this.calendarApi.refetchEvents();\r\n    }\r\n\r\n    private static mapCalendarViewEvent<Feed extends number>(eventObject: EventImpl): ICalendarViewEvent<Feed> {\r\n        return {\r\n            id: eventObject.id,\r\n            title: eventObject.title,\r\n            start: eventObject.start,\r\n            end: eventObject.end,\r\n            allDay: eventObject.allDay,\r\n            url: eventObject.url,\r\n            ...eventObject.extendedProps\r\n        } as ICalendarViewEvent<Feed>;\r\n    }\r\n\r\n    private static configurePlugins(): PluginDef[] {\r\n        return [\r\n            interactionPlugin,\r\n            timeGridPlugin,\r\n            dayGridPlugin,\r\n            listPlugin,\r\n            fontAwesomeThemePlugin\r\n        ];\r\n    }\r\n}\r\n","<full-calendar [options]=\"calendarOptions\" inspinia-class=\"inspinia\" sneat-class=\"sneat\">\r\n  <ng-template #eventContent let-arg>\r\n    @if (_eventContent) {\r\n      <ng-container *ngTemplateOutlet=\"_eventContent; context: { $implicit: arg }\"></ng-container>\r\n    }\r\n    @if (!_eventContent) {\r\n      <div [title]=\"arg.event.extendedProps.description\" class=\"event-item-wrapper\">\r\n        @if (arg.view.type === 'dayGridMonth') {\r\n          <small>{{ arg.event.start | date: 'shortTime' }}\r\n          </small>\r\n        }\r\n        <b [title]=\"arg.event.title\">{{ arg.event.title }}</b><br/>\r\n        <small [title]=\"arg.event.extendedProps.description\">{{ arg.event.extendedProps.description }}</small>\r\n      </div>\r\n    }\r\n  </ng-template>\r\n</full-calendar>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { FullCalendarModule } from '@fullcalendar/angular';\r\nimport { SwitchTemplateModule } from '@sowatech/shared/template';\r\n\r\nimport { EnoFullcalendarComponent } from './fullcalendar.component';\r\n\r\n@NgModule({\r\n    imports: [\r\n        CommonModule,\r\n        FormsModule,\r\n        FullCalendarModule,\r\n        SwitchTemplateModule\r\n    ],\r\n    declarations: [\r\n        EnoFullcalendarComponent\r\n    ],\r\n    exports: [\r\n        EnoFullcalendarComponent\r\n    ]\r\n})\r\nexport class FullcalendarModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}