import { ICalendarEvent } from '../types/CalendarTypes'; import { Configuration } from '../configurations/CalendarConfig'; import { PositionUtils } from '../utils/PositionUtils'; import { IColumnBounds } from '../utils/ColumnDetectionUtils'; import { IDragColumnChangeEventPayload, IDragMoveEventPayload, IDragStartEventPayload, IDragMouseEnterColumnEventPayload } from '../types/EventTypes'; import { DateService } from '../utils/DateService'; import { EventStackManager } from '../managers/EventStackManager'; import { EventLayoutCoordinator } from '../managers/EventLayoutCoordinator'; /** * Interface for event rendering strategies */ export interface IEventRenderer { renderEvents(events: ICalendarEvent[], container: HTMLElement): void; clearEvents(container?: HTMLElement): void; renderSingleColumnEvents?(column: IColumnBounds, events: ICalendarEvent[]): void; handleDragStart?(payload: IDragStartEventPayload): void; handleDragMove?(payload: IDragMoveEventPayload): void; handleDragAutoScroll?(eventId: string, snappedY: number): void; handleDragEnd?(originalElement: HTMLElement, draggedClone: HTMLElement, finalColumn: IColumnBounds, finalY: number): void; handleEventClick?(eventId: string, originalElement: HTMLElement): void; handleColumnChange?(payload: IDragColumnChangeEventPayload): void; handleNavigationCompleted?(): void; handleConvertAllDayToTimed?(payload: IDragMouseEnterColumnEventPayload): void; } /** * Date-based event renderer */ export declare class DateEventRenderer implements IEventRenderer { private dateService; private stackManager; private layoutCoordinator; private config; private positionUtils; private draggedClone; private originalEvent; constructor(dateService: DateService, stackManager: EventStackManager, layoutCoordinator: EventLayoutCoordinator, config: Configuration, positionUtils: PositionUtils); private applyDragStyling; /** * Handle drag start event */ handleDragStart(payload: IDragStartEventPayload): void; /** * Handle drag move event */ handleDragMove(payload: IDragMoveEventPayload): void; /** * Handle column change during drag */ handleColumnChange(payload: IDragColumnChangeEventPayload): void; /** * Handle conversion of all-day event to timed event */ handleConvertAllDayToTimed(payload: IDragMouseEnterColumnEventPayload): void; /** * Handle drag end event */ handleDragEnd(originalElement: HTMLElement, draggedClone: HTMLElement, finalColumn: IColumnBounds, finalY: number): void; /** * Handle navigation completed event */ handleNavigationCompleted(): void; /** * Fade out and remove element */ private fadeOutAndRemove; renderEvents(events: ICalendarEvent[], container: HTMLElement): void; /** * Render events for a single column */ renderSingleColumnEvents(column: IColumnBounds, events: ICalendarEvent[]): void; /** * Render events in a column using combined stacking + grid algorithm */ private renderColumnEvents; /** * Render events in a grid container (side-by-side with column sharing) */ private renderGridGroup; /** * Render a single column within a grid group * Column may contain multiple events that don't overlap */ private renderGridColumn; /** * Render event within a grid container (absolute positioning within column) */ private renderEventInGrid; private renderEvent; protected calculateEventPosition(event: ICalendarEvent): { top: number; height: number; }; clearEvents(container?: HTMLElement): void; protected getColumns(container: HTMLElement): HTMLElement[]; protected getEventsForColumn(column: HTMLElement, events: ICalendarEvent[]): ICalendarEvent[]; }