import { type ReactElement, type ReactNode } from 'react';
import { type UseFormReturn } from '../useForm';
import { type FIELD_NAME } from './constants';
import type { FormValues, ValidationFn } from './types';
export type ShowEditIconMode = 'always' | 'none' | 'onHover';
export type EditableTextProps<TValue = string> = {
    /**
     * Название класса, применяется к корневому компоненту
     */
    className?: string;
    /**
     * Значение поля в форме редактирования.
     * Если в children строка или число, то это значение будет по умолчанию считаться initialValue
     */
    initialValue?: TValue;
    /**
     * Если false, иконка редактирования не будет отображаться.
     * Для новых сценариев предпочтительнее `showEditIcon`.
     * Если переданы оба параметра, для отображения иконки используется `showEditIcon`.
     * @default true
     */
    isShowIcon?: boolean;
    /**
     * Режим отображения иконки редактирования (аналогично `CopyTypography.showCopyIcon`).
     * Имеет приоритет над `isShowIcon`.
     * @default если не задан — наследуется из `isShowIcon` (true → always, false → none)
     */
    showEditIcon?: ShowEditIconMode;
    /**
     * Если true, будет отображаться лоадер
     */
    isLoading?: boolean;
    /**
     * Отображаемое значение
     */
    children: ReactNode;
    /**
     * Отображает иконку слева или справа от текста
     * @default right
     */
    iconPosition?: 'right' | 'left';
    /**
     * Render-props для замены компонента поля формы
     */
    componentField?: (fieldProps: {
        name: typeof FIELD_NAME;
        control: UseFormReturn<FormValues>['control'];
        fullWidth: boolean;
    }) => ReactElement;
    /**
     * Функция валидации для редактируемого поля.
     */
    validate?: ValidationFn;
    /**
     * Функция, вызываемая при отправке формы.
     * @param fieldValue - Значение поля.
     */
    onSubmit: (fieldValue?: TValue) => void | Promise<void>;
};
export declare const EditableText: <TValue extends unknown = string>(props: EditableTextProps<TValue>) => import("react/jsx-runtime").JSX.Element;
