/** * SimpleEventOverlapManager - Clean, focused overlap management * Eliminates complex state tracking in favor of direct DOM manipulation */ import { CalendarEvent } from '../types/CalendarTypes'; export declare enum OverlapType { NONE = "none", COLUMN_SHARING = "column_sharing", STACKING = "stacking" } export interface OverlapGroup { type: OverlapType; events: CalendarEvent[]; position: { top: number; height: number; }; } export interface StackLink { prev?: string; next?: string; stackLevel: number; } export declare class SimpleEventOverlapManager { private static readonly STACKING_WIDTH_REDUCTION_PX; /** * Detect overlap type between two DOM elements - pixel-based logic */ resolveOverlapType(element1: HTMLElement, element2: HTMLElement): OverlapType; /** * Group overlapping elements - pixel-based algorithm */ groupOverlappingElements(elements: HTMLElement[]): HTMLElement[][]; /** * Create flexbox container for column sharing - clean and simple */ createEventGroup(events: CalendarEvent[], position: { top: number; height: number; }): HTMLElement; /** * Add event to flexbox group - simple relative positioning */ addToEventGroup(container: HTMLElement, eventElement: HTMLElement): void; /** * Create stacked event with data-attribute tracking */ createStackedEvent(eventElement: HTMLElement, underlyingElement: HTMLElement, stackLevel: number): void; /** * Remove stacked styling with proper stack re-linking */ removeStackedStyling(eventElement: HTMLElement): void; /** * Update stack levels for all events following a given event ID */ private updateSubsequentStackLevels; /** * Check if element is stacked - check both style and data-stack-link */ isStackedEvent(element: HTMLElement): boolean; /** * Remove event from group with proper cleanup */ removeFromEventGroup(container: HTMLElement, eventId: string): boolean; /** * Restack events in container - respects separate stack chains */ restackEventsInContainer(container: HTMLElement): void; /** * Utility methods - simple DOM traversal */ getEventGroup(eventElement: HTMLElement): HTMLElement | null; isInEventGroup(element: HTMLElement): boolean; /** * Helper methods for data-attribute based stack tracking */ getStackLink(element: HTMLElement): StackLink | null; private setStackLink; private findElementById; }