popover-lite
Version:
Tiny wrapper over the native Popover API + CSS Anchor Positioning
43 lines (42 loc) • 1.49 kB
TypeScript
/*************************************************
* Public Types & API *
*************************************************/
export type Placement = 'top' | 'bottom' | 'left' | 'right';
export interface PopoverOptions {
/** Preferred placement or priority list. */
placement?: Placement | Placement[];
/** Gap between popover and anchor, in px. */
offset?: number | {
x?: number;
y?: number;
};
/** Extra bias per placement used in scoring. */
preference?: Partial<Record<Placement, number>>;
}
export interface PopoverController {
readonly element: HTMLElement;
show(): void;
hide(): void;
toggle(): void;
update(): void;
destroy(): void;
}
/*************************************************
* Placement scoring engine *
*************************************************/
export interface PlacementScore {
placement: Placement;
space: number;
overflow: number;
misalign: number;
preference: number;
score: number;
}
export declare function computeScores(anchor: HTMLElement, size: {
width: number;
height: number;
}, prefs?: Partial<Record<Placement, number>>): PlacementScore[];
/*************************************************
* createPopover *
*************************************************/
export declare function createPopover(anchor: HTMLElement, opts?: PopoverOptions): PopoverController;