// Main entry point for Calendar Plantempus import { Container } from '@novadi/core'; import { eventBus } from './core/EventBus'; import { ConfigManager } from './configurations/ConfigManager'; import { URLManager } from './utils/URLManager'; // Import all managers import { EventManager } from './managers/EventManager'; import { EventRenderingService } from './renderers/EventRendererManager'; import { GridManager } from './managers/GridManager'; import { ScrollManager } from './managers/ScrollManager'; import { NavigationManager } from './managers/NavigationManager'; import { NavigationButtons } from './components/NavigationButtons'; import { ViewSelector } from './components/ViewSelector'; import { CalendarManager } from './managers/CalendarManager'; import { DragDropManager } from './managers/DragDropManager'; import { AllDayManager } from './managers/AllDayManager'; import { ResizeHandleManager } from './managers/ResizeHandleManager'; import { EdgeScrollManager } from './managers/EdgeScrollManager'; import { HeaderManager } from './managers/HeaderManager'; import { WorkweekPresets } from './components/WorkweekPresets'; import { IndexedDBEventRepository } from './repositories/IndexedDBEventRepository'; import { ApiEventRepository } from './repositories/ApiEventRepository'; import { IndexedDBService } from './storage/IndexedDBService'; import { OperationQueue } from './storage/OperationQueue'; // Import workers import { SyncManager } from './workers/SyncManager'; // Import renderers import { DateHeaderRenderer } from './renderers/DateHeaderRenderer'; import { DateColumnRenderer } from './renderers/ColumnRenderer'; import { DateEventRenderer } from './renderers/EventRenderer'; import { AllDayEventRenderer } from './renderers/AllDayEventRenderer'; import { GridRenderer } from './renderers/GridRenderer'; import { WeekInfoRenderer } from './renderers/WeekInfoRenderer'; // Import utilities and services import { DateService } from './utils/DateService'; import { TimeFormatter } from './utils/TimeFormatter'; import { PositionUtils } from './utils/PositionUtils'; import { WorkHoursManager } from './managers/WorkHoursManager'; import { EventStackManager } from './managers/EventStackManager'; import { EventLayoutCoordinator } from './managers/EventLayoutCoordinator'; /** * Handle deep linking functionality after managers are initialized */ async function handleDeepLinking(eventManager, urlManager) { try { const eventId = urlManager.parseEventIdFromURL(); if (eventId) { console.log(`Deep linking to event ID: ${eventId}`); // Wait a bit for managers to be fully ready setTimeout(async () => { const success = await eventManager.navigateToEvent(eventId); if (!success) { console.warn(`Deep linking failed: Event with ID ${eventId} not found`); } }, 500); } } catch (error) { console.warn('Deep linking failed:', error); } } /** * Initialize the calendar application using NovaDI */ async function initializeCalendar() { try { // Load configuration from JSON const config = await ConfigManager.load(); // Create NovaDI container const container = new Container(); const builder = container.builder(); // Enable debug mode for development eventBus.setDebug(true); // Bind core services as instances builder.registerInstance(eventBus).as(); // Register configuration instance builder.registerInstance(config).as(); // Register storage and repository services builder.registerType(IndexedDBService).as(); builder.registerType(OperationQueue).as(); builder.registerType(ApiEventRepository).as(); builder.registerType(IndexedDBEventRepository).as(); // Register workers builder.registerType(SyncManager).as(); // Register renderers builder.registerType(DateHeaderRenderer).as(); builder.registerType(DateColumnRenderer).as(); builder.registerType(DateEventRenderer).as(); // Register core services and utilities builder.registerType(DateService).as(); builder.registerType(EventStackManager).as(); builder.registerType(EventLayoutCoordinator).as(); builder.registerType(WorkHoursManager).as(); builder.registerType(URLManager).as(); builder.registerType(TimeFormatter).as(); builder.registerType(PositionUtils).as(); // Note: AllDayLayoutEngine is instantiated per-operation with specific dates, not a singleton builder.registerType(WeekInfoRenderer).as(); builder.registerType(AllDayEventRenderer).as(); builder.registerType(EventRenderingService).as(); builder.registerType(GridRenderer).as(); builder.registerType(GridManager).as(); builder.registerType(ScrollManager).as(); builder.registerType(NavigationManager).as(); builder.registerType(NavigationButtons).as(); builder.registerType(ViewSelector).as(); builder.registerType(DragDropManager).as(); builder.registerType(AllDayManager).as(); builder.registerType(ResizeHandleManager).as(); builder.registerType(EdgeScrollManager).as(); builder.registerType(HeaderManager).as(); builder.registerType(CalendarManager).as(); builder.registerType(WorkweekPresets).as(); builder.registerType(ConfigManager).as(); builder.registerType(EventManager).as(); // Build the container const app = builder.build(); // Get managers from container const eb = app.resolveType(); const calendarManager = app.resolveType(); const eventManager = app.resolveType(); const resizeHandleManager = app.resolveType(); const headerManager = app.resolveType(); const dragDropManager = app.resolveType(); const viewSelectorManager = app.resolveType(); const navigationManager = app.resolveType(); const navigationButtonsManager = app.resolveType(); const edgeScrollManager = app.resolveType(); const allDayManager = app.resolveType(); const urlManager = app.resolveType(); const workweekPresetsManager = app.resolveType(); const configManager = app.resolveType(); // Initialize managers await calendarManager.initialize?.(); await resizeHandleManager.initialize?.(); // Resolve SyncManager (starts automatically in constructor) // Resolve SyncManager (starts automatically in constructor) // Resolve SyncManager (starts automatically in constructor) // Resolve SyncManager (starts automatically in constructor) // Resolve SyncManager (starts automatically in constructor) //const syncManager = app.resolveType(); // Handle deep linking after managers are initialized await handleDeepLinking(eventManager, urlManager); // Expose to window for debugging (with proper typing) window.calendarDebug = { eventBus, app, calendarManager, eventManager, workweekPresetsManager, //syncManager, }; } catch (error) { throw error; } } // Initialize when DOM is ready - now handles async properly if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => { initializeCalendar().catch(error => { console.error('Calendar initialization failed:', error); }); }); } else { initializeCalendar().catch(error => { console.error('Calendar initialization failed:', error); }); } //# sourceMappingURL=index.js.map