polen
Version:
A framework for delightful GraphQL developer portals
45 lines • 1.65 kB
TypeScript
/**
* State management for GraphQL token popovers
*
* Handles hover delays, pinning, and multiple popover coordination
*/
export interface PopoverState {
/** Currently visible popover (via hover) */
hoveredId: string | null;
/** Set of pinned popover IDs */
pinnedIds: Set<string>;
/** ID pending show (waiting for delay) */
pendingShowId: string | null;
/** ID pending hide (waiting for grace period) */
pendingHideId: string | null;
}
export interface UsePopoverStateOptions {
/** Delay before showing popover on hover (ms) */
showDelay?: number;
/** Delay before hiding popover on mouse leave (ms) */
hideDelay?: number;
/** Whether to allow multiple pinned popovers */
allowMultiplePins?: boolean;
}
export interface UsePopoverStateReturn {
/** Check if a popover should be visible */
isOpen: (id: string) => boolean;
/** Check if a popover is pinned */
isPinned: (id: string) => boolean;
/** Handle hover start */
onHoverStart: (id: string) => void;
/** Handle hover end */
onHoverEnd: (id: string) => void;
/** Handle click (toggle pin) */
onTogglePin: (id: string) => void;
/** Handle popover content hover (cancels hide) */
onPopoverHover: (id: string) => void;
/** Handle popover content leave (starts hide timer) */
onPopoverLeave: (id: string) => void;
/** Unpin a specific popover */
unpin: (id: string) => void;
/** Unpin all popovers */
unpinAll: () => void;
}
export declare const usePopoverState: (options?: UsePopoverStateOptions) => UsePopoverStateReturn;
//# sourceMappingURL=use-popover-state.d.ts.map