import type { ReactNode } from 'react';
import { type IconSize } from '../Icon';
import type { FieldStatusVariant } from '../FieldStatus/FieldStatus';
import type { InputStatus } from '../Field/types';
export interface UseInputStatusIconOptions {
    /** The input's status, or undefined when there is none. */
    status?: InputStatus;
    /** How the status is presented relative to the input. */
    statusVariant?: FieldStatusVariant;
    /** Whether the input is inside an InputGroup (which owns status rendering). */
    isInGroup?: boolean;
    /** Size of the on-field icon. @default 'md' */
    size?: IconSize;
}
export interface UseInputStatusIconReturn {
    /**
     * The on-field status affordance to render inside the input container —
     * the status icon (plain, for attached) or a focusable info-tip button plus
     * its tooltip layer (for the `tooltip` variant). `null` when no icon should
     * render (no status, `detached` variant, or inside a group).
     */
    statusIcon: ReactNode;
    /**
     * ID to add to the input's `aria-describedby` when — and only when — the
     * status is surfaced through a rendered tooltip layer (the `tooltip` variant
     * with a message). It is `undefined` in every other case (no status, no
     * message, `attached`/`detached`, or inside a group), so call-sites can drop
     * it straight into their described-by list without a dangling reference: the
     * id is present exactly when its tooltip element is in the DOM.
     */
    describedBy: string | undefined;
}
/**
 * Builds the on-field status icon and its accessibility wiring for a bordered
 * input. See the file header for the per-variant behavior.
 */
export declare function useInputStatusIcon({ status, statusVariant, isInGroup, size, }: UseInputStatusIconOptions): UseInputStatusIconReturn;
//# sourceMappingURL=useInputStatusIcon.d.ts.map