import type * as React from 'react';
/**
 * Shared field props that every form control accepts.
 * When any of these are set, the control wraps itself in Field internally.
 * When none are set, the control renders bare with zero overhead.
 */
export interface FieldProps {
    /** Label text above the control */
    label?: string;
    /** Whether to show required indicator (*) */
    required?: boolean;
    /** Icon after the label text */
    labelIcon?: React.ReactNode;
    /** Tooltip content — renders an Info icon next to the label wrapped in Tooltip */
    tooltip?: React.ReactNode;
    /** Content at top-right (e.g., "Optional", char count) */
    topRight?: React.ReactNode;
    /** Description/hint text at bottom-left */
    description?: React.ReactNode;
    /** Content at bottom-right (e.g., char count, help link) */
    bottomRight?: React.ReactNode;
    /** Error message — sets state to 'destructive' and shows error text */
    error?: string;
    /** Additional className for the field wrapper (not the control) */
    fieldClassName?: string;
}
/**
 * List of field prop keys to destructure out of combined props.
 */
export declare const FIELD_PROP_KEYS: readonly ["label", "required", "labelIcon", "tooltip", "topRight", "description", "bottomRight", "error", "fieldClassName"];
/** Check whether any field prop is set, meaning the control should wrap in Field. */
export declare function hasFieldProps(props: FieldProps): boolean;
/**
 * Separate field props from control props.
 * Returns [fieldProps, controlProps].
 */
export declare function splitFieldProps<T extends FieldProps>(props: T): [FieldProps, Omit<T, keyof FieldProps>];
