import { ReadFileError, ReadFileResult, ReadMode } from "@ryuzaki13/react-foundation-lib/file";
import { UiBaseProps } from "../types";
interface InputFileCommonProps extends Omit<UiBaseProps<undefined>, "value" | "onChange"> {
    /** Callback очистки выбранного файла. Если передан — отображается кнопка «крестик» */
    onClear?: () => void;
    /** Callback ошибки чтения файла (невалидный MIME, превышение размера и т.д.) */
    onReadError?: (error: ReadFileError) => void;
    /** HTML-атрибут accept для нативного input[type="file"] (например `[".pdf", ".docx"]`) */
    accept?: readonly string[];
    /** Список допустимых MIME-типов — передаётся в readFile для валидации */
    allowedMime?: readonly string[];
    /** Максимальный размер файла в байтах — передаётся в readFile для валидации */
    maxBytes?: number;
    /** Режим чтения файла: "data-url" (по умолчанию) или "array-buffer" */
    readMode?: ReadMode;
    /** Текст ошибки под полем */
    error?: string;
    /** Callback сброса ошибки (вызывается при повторном выборе файла) */
    onClearError?: () => void;
    /** CSS-класс обёртки */
    className?: string;
}
type InputFileDataUrlResult = Extract<ReadFileResult, {
    mode: "data-url";
}>;
type InputFileArrayBufferResult = Extract<ReadFileResult, {
    mode: "array-buffer";
}>;
/**
 * Пропсы компонента InputFile.
 *
 * Компонент предназначен для выбора одного файла.
 * Внешний вид идентичен InputText — label, description, error, кнопка очистки.
 *
 * В onChange передаётся результат чтения файла через readFile:
 * - В режиме "data-url" — объект с dataUrl и метаданными
 * - В режиме "array-buffer" — объект с ArrayBuffer и метаданными
 */
export type InputFileProps = (InputFileCommonProps & {
    value: ReadFileResult | undefined;
    onChange: (value: InputFileDataUrlResult) => void;
    readMode?: "data-url";
}) | (InputFileCommonProps & {
    value: ReadFileResult | undefined;
    onChange: (value: InputFileArrayBufferResult) => void;
    readMode: "array-buffer";
});
/**
 * InputFile — компонент выбора одного файла.
 *
 * Визуально идентичен InputText: поле с label, description, placeholder,
 * кнопкой очистки (крестик) и блоком ошибки.
 *
 * При клике открывается нативный диалог выбора файла.
 * После выбора файл читается через readFile, результат передаётся в onChange.
 *
 * InputFile позволяет выбрать один файл и передаёт наружу типизированный результат чтения.
 * Если `readMode` не задан или равен `"data-url"`, в `onChange` приходит объект с `dataUrl`.
 * Если `readMode` равен `"array-buffer"`, в `onChange` приходит объект с `buffer`.
 */
export declare function InputFile(props: InputFileProps): import("react").JSX.Element;
export {};
//# sourceMappingURL=InputFile.d.ts.map