81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
|
|
/**
|
||
|
|
* 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;
|
||
|
|
}
|