import { ICalendarConfig } from './ICalendarConfig'; import { IGridSettings } from './GridSettings'; import { IDateViewSettings } from './DateViewSettings'; import { ITimeFormatConfig } from './TimeFormatConfig'; import { IWorkWeekSettings } from './WorkWeekSettings'; import { CalendarView } from '../types/CalendarTypes'; /** * All-day event layout constants */ export const ALL_DAY_CONSTANTS = { EVENT_HEIGHT: 22, EVENT_GAP: 2, CONTAINER_PADDING: 4, MAX_COLLAPSED_ROWS: 4, get SINGLE_ROW_HEIGHT() { return this.EVENT_HEIGHT + this.EVENT_GAP; // 28px } } as const; /** * Work week presets - Configuration data */ export const WORK_WEEK_PRESETS: { [key: string]: IWorkWeekSettings } = { 'standard': { id: 'standard', workDays: [1, 2, 3, 4, 5], totalDays: 5, firstWorkDay: 1 }, 'compressed': { id: 'compressed', workDays: [1, 2, 3, 4], totalDays: 4, firstWorkDay: 1 }, 'midweek': { id: 'midweek', workDays: [3, 4, 5], totalDays: 3, firstWorkDay: 3 }, 'weekend': { id: 'weekend', workDays: [6, 7], totalDays: 2, firstWorkDay: 6 }, 'fullweek': { id: 'fullweek', workDays: [1, 2, 3, 4, 5, 6, 7], totalDays: 7, firstWorkDay: 1 } }; /** * Configuration - DTO container for all configuration * Pure data object loaded from JSON via ConfigManager */ export class Configuration { private static _instance: Configuration | null = null; public config: ICalendarConfig; public gridSettings: IGridSettings; public dateViewSettings: IDateViewSettings; public timeFormatConfig: ITimeFormatConfig; public currentWorkWeek: string; public currentView: CalendarView; public selectedDate: Date; public apiEndpoint: string = '/api'; constructor( config: ICalendarConfig, gridSettings: IGridSettings, dateViewSettings: IDateViewSettings, timeFormatConfig: ITimeFormatConfig, currentWorkWeek: string, currentView: CalendarView, selectedDate: Date = new Date() ) { this.config = config; this.gridSettings = gridSettings; this.dateViewSettings = dateViewSettings; this.timeFormatConfig = timeFormatConfig; this.currentWorkWeek = currentWorkWeek; this.currentView = currentView; this.selectedDate = selectedDate; // Store as singleton instance for web components Configuration._instance = this; } /** * Get the current Configuration instance * Used by web components that can't use dependency injection */ public static getInstance(): Configuration { if (!Configuration._instance) { throw new Error('Configuration has not been initialized. Call ConfigManager.load() first.'); } return Configuration._instance; } setSelectedDate(date: Date): void { this.selectedDate = date; } getWorkWeekSettings(): IWorkWeekSettings { return WORK_WEEK_PRESETS[this.currentWorkWeek] || WORK_WEEK_PRESETS['standard']; } } // Backward compatibility alias export { Configuration as CalendarConfig };