import { CommentsImpl } from "@docsvision/webclient/BackOffice/CommentsImpl";
import { ICommentEventArgs } from "@docsvision/webclient/BackOffice/ICommentEventArgs";
import { CommentModel } from '@docsvision/webclient/BackOffice/CommentModel';
import { $CommentsController } from "@docsvision/webclient/Generated/DocsVision.WebClient.Controllers";
import { GenModels } from "@docsvision/webclient/Generated/DocsVision.WebClient.Models";
import { $CurrentEmployeeId, $DeviceType, $IsIE, $Locale } from "@docsvision/webclient/StandardServices";
import { BaseControl, BaseControlParams, BaseControlState } from "@docsvision/webclient/System/BaseControl";
import { IDataChangedEventArgsEx } from "@docsvision/webclient/System/IDataChangedEventArgs";
import { $CardInfo, $EditOperationStore, $LayoutInfo } from "@docsvision/webclient/System/LayoutServices";
import { IBindingResult } from "@docsvision/webclient/System/IBindingResult";
import { BasicApiEvent, CancelableApiEvent } from "@docsvision/webclient/System/ApiEvent";
import { $ExperimentalFeature } from "@docsvision/webclient/System/$ExperimentalFeature";
/**
 * Публичные свойства для контрола {@link Comments}.
 */
export declare class CommentsParams extends BaseControlParams {
    /** Стандартный CSS класс со стилями элемента управления. */
    standardCssClass?: string;
    /** Список комментариев. */
    comments: Array<CommentModel>;
    /** Источник данных. */
    commentsDataSource?: GenModels.CommentsDataSourceInfoModel;
    /** Количество комментариев. */
    allCommentsCount?: number;
    /** Максимальное количество отображаемых комментариев. */
    maxVisibleComments?: number;
    /** Плейсхолдер */
    placeHolder?: string;
    /** Ширина блока комментария. */
    commentMaxWidth?: string;
    /** Событие, возникающее после добавления комментария. */
    commentAdded?: BasicApiEvent<ICommentEventArgs>;
    /** Событие, возникающее перед добавлением комментария. */
    commentAdding?: CancelableApiEvent<ICommentEventArgs>;
    /** Событие, возникающее после удаления комментария. */
    commentDeleted?: BasicApiEvent<ICommentEventArgs>;
    /** Событие, возникающее перед удалением комментария. */
    commentDeleting?: CancelableApiEvent<ICommentEventArgs>;
    /** Событие, возникающее после изменения комментария. */
    commentEdited?: BasicApiEvent<ICommentEventArgs>;
    /** Событие, возникающее перед изменением комментария. */
    commentEditing?: CancelableApiEvent<ICommentEventArgs>;
    /** Событие, возникающее после изменения списка комментариев. */
    dataChanged?: BasicApiEvent<IDataChangedEventArgsEx<GenModels.Comment[]>>;
    /** Можно ли добавлять новые комментарии. */
    canComment?: boolean;
    /** Можно ли изменять собственные комментарии. */
    canEditSelf?: boolean;
    /** Можно ли изменять все комментарии. */
    canEditAll?: boolean;
    /** Флаг, показывающий включен ли режим создания комментариев через HTML (Summernote в режиме Air-mode). */
    useHtml?: boolean;
    /** Редактируется ли комментарий в данный момент. */
    isCommentEditing?: boolean;
    services?: $CommentsController & $CurrentEmployeeId & $CardInfo & $LayoutInfo & $EditOperationStore & $DeviceType & $Locale & $IsIE & $ExperimentalFeature;
}
/** @internal */
export interface CommentsState extends CommentsParams, BaseControlState {
    addingComment: CommentModel;
    editingComment: CommentModel | undefined;
    textArea: HTMLElement;
    binding: IBindingResult<GenModels.CommentsModel>;
    useHtml: boolean;
    isCommentEditing: boolean;
}
/**
 * Представляет элемент управления для отображения списка комментариев.
 */
export declare class Comments extends BaseControl<CommentsParams, CommentsState> {
    protected createParams(): CommentsParams;
    private get CommentsImpl();
    protected createImpl(): CommentsImpl;
    protected set canComment(binding: IBindingResult<{}>);
    protected set canEditSelf(binding: IBindingResult<{}>);
    protected set canEditAll(binding: IBindingResult<{}>);
    protected set comments(binding: IBindingResult<GenModels.CommentsModel>);
    init(): void;
    /** Обновление комментариев. */
    refresh(): void;
    /**
     * Добавление комментария.
     * @param text Текст нового комментария
     */
    addComment(text: string): Promise<{}>;
    /**
     * Изменение комментария
     * @param commentId Идентификатор комментария
     * @param text Текст комментария
     */
    updateComment(commentId: string, text: string): Promise<{}>;
    /**
     * Удаление комментария
     * @param commentId Идентификатор комментария
     */
    deleteComment(commentId: string): Promise<{}>;
}
