Calendar/wwwroot/js/renderers/EventRenderer.d.ts

97 lines
3.8 KiB
TypeScript
Raw Permalink Normal View History

2026-02-03 00:02:25 +01:00
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[];
}