import React from 'react';
import type { FileUploaderAttachedFile, FileUploaderUploadButtonPosition, FileUploaderValidationSummary, FileUploaderView } from '../../internal/FileUploaderControl/fileUtils';
import { FileUploaderFileStatus } from '../../internal/FileUploaderControl/fileUtils';
import type { InstanceWithRootNode } from '../../lib/rootNode';
import type { FileUploaderControlProviderProps } from '../../internal/FileUploaderControl/FileUploaderControlProvider';
import type { FileUploaderFileProps } from '../../internal/FileUploaderControl/FileUploaderFile/FileUploaderFile';
import type { CommonProps } from '../../internal/CommonWrapper';
import type { Nullable } from '../../typings/utility-types';
import type { SizeProp } from '../../lib/types/props';
import type { PopupPositionsType, ShortPopupPositionsType } from '../../internal/Popup';
type FileUploaderOverriddenProps = 'size';
interface _FileUploaderProps extends CommonProps, Omit<React.InputHTMLAttributes<HTMLInputElement>, FileUploaderOverriddenProps> {
    /** Переводит контрол в состояние валидации "ошибка". */
    /** Состояние ошибки всего контрола */
    error?: boolean;
    /** Переводит контрол в состояние валидации "предупреждение" */
    warning?: boolean;
    /** Задает приоритетное расположение подсказки относительно контрола
     * @default 'top left' */
    validationTooltipPosition?: ShortPopupPositionsType | PopupPositionsType;
    /** Использовать тултип для отображения валидации
     * @default false */
    withValidationTooltip?: boolean;
    /** Использовать иконку для ворнинга (восклицательный знак)
     * @default false */
    withWarningIcon?: boolean;
    /** Задает длину компонента. */
    width?: React.CSSProperties['width'];
    /** Задаёт размер контрола.
     * @default small */
    size?: SizeProp;
    /** Скрывает отображение файлов.
     * @default false */
    hideFiles?: boolean;
    /** Пользовательский текст для загрузки файла
     * @default 'Загрузить файл'
     */
    uploaderText?: string;
    /** Пользовательская иконка для загрузки файла
     * @default UploadIcon
     */
    uploaderIcon?: React.ReactNode;
    /** Вид компонента
     *  - `row` — строчный вид
     *  - `tile` — плиточный вид
     *  @default row
     */
    view?: FileUploaderView;
    /** Отображать ли саммари с детализацией ошибок. Работает с версией темы >= 5_5.
     *  - `auto` — саммари отображается, если количество загруженных файлов >= validationSummaryStart
     *  - `enabled` — всегда включено
     *  - `disabled` — всегда отключено
     *  @default auto
     */
    validationSummary?: FileUploaderValidationSummary;
    /** Количество файлов, от которого показываем саммари (при validationSummary = `auto`)
     * @default 5 */
    validationSummaryStart?: number;
    /** Позиционирование области загрузки файла
     * @default start */
    uploadButtonPosition?: FileUploaderUploadButtonPosition;
    /** Задает функцию, через которую отправляются файлы. Используется для отслеживания статуса загрузки файла.
     * @param {FileUploaderAttachedFile} file - файл, статус загрузки которого необходимо отследить. */
    request?: (file: FileUploaderAttachedFile) => Promise<void>;
    /** Задает функцию, которая вызывается при удачной попытке отправки через request. */
    onRequestSuccess?: (fileId: string) => void;
    /** Задает функцию, которая вызывается при неудачной попытке отправки через request. */
    onRequestError?: (fileId: string) => void;
    /** Определяет функцию валидации каждого файла. Срабатывает после выбора файлов и перед попыткой отправить в request.
     * Чтобы вывести валидацию ошибки, промис должен вернуть строку или объект с ошибкой.
     *  @returns {Promise<Nullable<string | { message: string; status: FileUploaderFileStatus }>>} */
    validateBeforeUpload?: (file: FileUploaderAttachedFile) => Promise<Nullable<string | {
        message: string;
        status: FileUploaderFileStatus;
    }>>;
    /**
     * Задает функцию, которая позволяет кастомизировать файлы. Через нее можно вешать кастомные валидации на каждый файл.
     * @param {FileUploaderAttachedFile} file - файл, отображение которого нужно кастомизировать.
     * @param {fileNode} fileNode - `reactElement` компонента `FileUploaderFile`
     * @param {FileUploaderFileProps} props - пропы компонента `FileUploaderFile`, смотри примеры использования в документации.
     */
    renderFile?: (file: FileUploaderAttachedFile, fileNode: React.ReactElement, props: FileUploaderFileProps) => React.ReactNode;
}
export interface FileUploaderRef extends InstanceWithRootNode {
    focus: () => void;
    blur: () => void;
    /** Сбрасывает выбранные файлы */
    reset: () => void;
    removeFile: (fileId: string) => void;
}
export type FileUploader = FileUploaderRef;
export declare const FileUploaderDataTids: {
    readonly root: "FileUploader__root";
    readonly content: "FileUploader__content";
    readonly link: "FileUploader__link";
    readonly input: "FileUploader__input";
};
export interface FileUploaderProps extends _FileUploaderProps, FileUploaderControlProviderProps {
}
/**
 * `FileUploader` — контрол для выбора пользователем файла на компьютере и отображения статуса его отправки на сервер.
 *
 * Можно использовать для синхронной отправки данных, например, в форме. Или же можно использовать в асинхронном режиме.
 */
export declare const FileUploader: React.MemoExoticComponent<React.ForwardRefExoticComponent<FileUploaderProps & FileUploaderControlProviderProps & React.RefAttributes<FileUploaderRef>>>;
export {};
