/**
 * The resolved interactive role for a polymorphic component.
 *
 * - `'link'` — render as `<a>` (via LinkComponent)
 * - `'button'` — render as `<button>`
 * - `'inert'` — render as `<span>` or `<div>` (non-interactive)
 */
export type InteractiveRole = 'link' | 'button' | 'inert';
export interface UseInteractiveRoleOptions {
    /**
     * URL for link navigation. When provided, the component renders as a link.
     * Takes highest priority — a link always navigates.
     */
    href?: string;
    /**
     * Click handler. When provided, the component renders as a button.
     * Takes priority over context-based triggers.
     */
    onClick?: ((...args: never[]) => unknown) | null;
    /**
     * Whether the component is disabled. When true, an `href` is ignored for
     * role resolution (a disabled link is an a11y anti-pattern), so the role is
     * decided by the remaining inputs: `onClick` → `'button'`, an interactive
     * context → its role, otherwise `'inert'`. In particular a disabled `href`
     * with no `onClick` and no context override resolves to `'inert'`, not a
     * link or a button.
     * @default false
     */
    isDisabled?: boolean;
}
/**
 * Determines the interactive role for a polymorphic component.
 *
 * Centralizes the element-type decision so that adding new context-based
 * triggers (popover, dropdown, etc.) only requires updating this hook —
 * all consuming components inherit the new behavior automatically.
 *
 * @example
 * ```ts
 * function Token({ href, onClick, ... }) {
 *   const role = useInteractiveRole({ href, onClick });
 *
 *   switch (role) {
 *     case 'link': return <LinkComponent href={href} ...>{content}</LinkComponent>;
 *     case 'button': return <button ...>{content}</button>;
 *     case 'inert': return <span ...>{content}</span>;
 *   }
 * }
 * ```
 */
export declare function useInteractiveRole({ href, onClick, isDisabled, }: UseInteractiveRoleOptions): InteractiveRole;
//# sourceMappingURL=useInteractiveRole.d.ts.map