import { type ComponentPropsWithoutRef, type HTMLAttributes, type ReactNode } from 'react';
import * as RadixPopover from '@radix-ui/react-popover';
import { type VariantProps } from 'class-variance-authority';
export type HoverCardSide = 'top' | 'end' | 'bottom' | 'start';
declare const contentVariants: (props?: ({
size?: "sm" | "md" | "lg" | null | undefined;
padding?: "default" | "flush" | null | undefined;
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
export interface HoverCardHandle {
getIsOpen: () => boolean;
open: () => void;
close: () => void;
}
export interface HoverCardProps {
children: ReactNode;
/**
* How the card opens. `hover-or-click` (the default) opens on pointer hover
* without taking focus, and on click, tap or Enter with focus moved into the
* card so the footer actions are reachable. `click` disables hover entirely.
*/
openOn?: 'hover-or-click' | 'click';
/** Controlled open state. */
open?: boolean;
/** Uncontrolled initial open state. */
defaultOpen?: boolean;
onOpenChange?: (open: boolean) => void;
/** Delay before a hover opens the card, in ms. Default 300. */
openDelay?: number;
/** Grace period before a pointer leaving closes the card, in ms. Default 300. */
closeDelay?: number;
/** Opaque instance id — emitted on Content as `data-component-id`. */
id?: string;
}
declare function HoverCardRoot({ children, openOn, open: controlledOpen, defaultOpen, onOpenChange, openDelay, closeDelay, id, }: HoverCardProps): import("react/jsx-runtime").JSX.Element;
declare namespace HoverCardRoot {
var displayName: string;
}
export type HoverCardTriggerProps = ComponentPropsWithoutRef;
export type HoverCardAnchorProps = ComponentPropsWithoutRef;
export interface HoverCardContentProps extends Omit, 'side' | 'align'>, VariantProps {
/** Logical side, resolved against the reading direction. Default `'top'`. */
side?: HoverCardSide;
align?: 'start' | 'center' | 'end';
size?: 'sm' | 'md' | 'lg';
padding?: 'default' | 'flush';
/** Render the arrow. Default `true`. */
showArrow?: boolean;
/** Render a close button, for touch users on a card with actions. */
showClose?: boolean;
/**
* An action pinned to the top-end corner — the same slot `showClose` uses.
* For a card whose ANCHOR has a real open action, so the card mirrors it
* instead of describing it in prose ("Click to open …"). Only give a card
* one when the trigger genuinely opens something; a card that merely points
* somewhere else should say so in a hint line, because an icon button there
* promises a click the anchor does not have.
*
* A card carrying one must be interactive — the pointer has to be able to
* travel into it — so do not combine it with a pointer-events-none peek.
*/
headerAction?: ReactNode;
className?: string;
children: ReactNode;
}
export interface HoverCardHeadingProps extends HTMLAttributes {
as?: 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
}
export declare function useHoverCardTiming(): {
cancelClose: () => void;
closeWithDelay: () => void;
};
export declare const HoverCard: typeof HoverCardRoot & {
Root: typeof HoverCardRoot;
Trigger: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>;
Anchor: import("react").ForwardRefExoticComponent, "ref"> & import("react").RefAttributes>;
Content: import("react").ForwardRefExoticComponent>;
Media: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
Eyebrow: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
Heading: import("react").ForwardRefExoticComponent>;
Body: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
Footer: import("react").ForwardRefExoticComponent & import("react").RefAttributes>;
};
export {};
//# sourceMappingURL=hover-card.d.ts.map