import { AfterViewChecked, AfterViewInit, ChangeDetectorRef, NgZone, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from '@angular/core';
import { ChannelService } from '../channel.service';
import { Observable } from 'rxjs';
import { MessageContext, StreamMessage, TypingIndicatorContext, CustomMessageActionItem, DateSeparatorContext, UnreadMessagesNotificationContext, UnreadMessagesIndicatorContext } from '../types';
import { ChatClientService } from '../chat-client.service';
import { GroupStyle } from './group-styles';
import { UserResponse } from 'stream-chat';
import { CustomTemplatesService } from '../custom-templates.service';
import { DateParserService } from '../date-parser.service';
import { MessageActionsService } from '../message-actions.service';
import * as i0 from "@angular/core";
/**
 * The `MessageList` component renders a scrollable list of messages.
 */
export declare class MessageListComponent implements AfterViewChecked, OnChanges, OnInit, OnDestroy, AfterViewInit {
    private channelService;
    private chatClientService;
    private customTemplatesService;
    private dateParser;
    private ngZone;
    private cdRef;
    private messageActionsService;
    /**
     * Determines if the message list should display channel messages or [thread messages](https://getstream.io/chat/docs/javascript/threads/?language=javascript).
     */
    mode: 'main' | 'thread';
    /**
     * The direction of the messages in the list, `bottom-to-top` means newest message is at the bottom of the message list and users scroll upwards to load older messages
     */
    direction: 'bottom-to-top' | 'top-to-bottom';
    /**
     * Determines what triggers the appearance of the message options: by default you can hover (click on mobile) anywhere in the row of the message (`message-row` option), or you can set `message-bubble`, in that case only a hover (click on mobile) in the message bubble will trigger the options to appear.
     */
    messageOptionsTrigger: 'message-row' | 'message-bubble';
    /**
     * You can hide the "jump to latest" button while scrolling. A potential use-case for this input would be to [workaround a known issue on iOS Safar webview](https://github.com/GetStream/stream-chat-angular/issues/418)
     *
     */
    hideJumpToLatestButtonDuringScroll: boolean;
    /**
     * A list of custom message actions to be displayed in the message action box
     *
     * @deprecated please use the [`MessageActionsService`](https://getstream.io/chat/docs/sdk/angular/services/MessageActionsService) to set this property.
     */
    customMessageActions: CustomMessageActionItem<any>[];
    /**
     * If `true` date separators will be displayed
     */
    displayDateSeparator: boolean;
    /**
     * If `true` unread indicator will be displayed
     */
    displayUnreadSeparator: boolean;
    /**
     * If date separators are displayed, you can set the horizontal position of the date text.
     */
    dateSeparatorTextPos: 'center' | 'right' | 'left';
    /**
     * `last-message` option will open the message list at the last message, `last-read-message` will open the list at the last unread message. This option only works if mode is `main`.
     */
    openMessageListAt: 'last-message' | 'last-read-message';
    /**
     * If the user has unread messages when they open the channel the UI shows the unread indicator / notification which features the unread count by default. This count will be increased every time a user receives a new message. If you don't want to show the unread count, you can turn that off.
     *
     * This is only applicable for `main` mode, as threads doesn't have read infromation.
     */
    hideUnreadCountForNotificationAndIndicator: boolean;
    /**
     * You can turn on and off the loading indicator that signals to users that more messages are being loaded to the message list
     */
    displayLoadingIndicator: boolean;
    /**
     * @internal
     */
    limitNumberOfMessagesInList: boolean;
    typingIndicatorTemplate: TemplateRef<TypingIndicatorContext> | undefined;
    messageTemplate: TemplateRef<MessageContext> | undefined;
    customDateSeparatorTemplate: TemplateRef<DateSeparatorContext> | undefined;
    customnewMessagesIndicatorTemplate: TemplateRef<UnreadMessagesIndicatorContext> | undefined;
    customnewMessagesNotificationTemplate: TemplateRef<UnreadMessagesNotificationContext> | undefined;
    emptyMainMessageListTemplate: TemplateRef<void> | null;
    emptyThreadMessageListTemplate: TemplateRef<void> | null;
    messages$: Observable<StreamMessage[]>;
    enabledMessageActions: string[];
    isEmpty: boolean;
    newMessageCountWhileBeingScrolled: number;
    isUserScrolled: boolean | undefined;
    groupStyles: GroupStyle[];
    isNextMessageOnSeparateDate: boolean[];
    lastSentMessageId: string | undefined;
    parentMessage: StreamMessage | undefined;
    highlightedMessageId: string | undefined;
    isLoading: boolean;
    scrollEndTimeout: any;
    lastReadMessageId?: string;
    isUnreadNotificationVisible: boolean;
    firstUnreadMessageId?: string;
    unreadCount?: number;
    isJumpingToLatestUnreadMessage: boolean;
    isJumpToLatestButtonVisible: boolean;
    private scrollContainer;
    private parentMessageElement;
    private latestMessage;
    private hasNewMessages;
    private containerHeight;
    private oldestMessage;
    private olderMassagesLoaded;
    private isNewMessageSentByUser;
    private subscriptions;
    private newMessageSubscription;
    private prevScrollTop;
    private usersTypingInChannel$;
    private usersTypingInThread$;
    private isLatestMessageInList;
    private channelId?;
    private parsedDates;
    private isViewInited;
    private checkIfUnreadNotificationIsVisibleTimeout?;
    private jumpToLatestButtonVisibilityTimeout?;
    private messageRemoveTimeout?;
    private removeOldMessagesSubscription?;
    private isSafari;
    private forceRepaintSubject;
    private get class();
    constructor(channelService: ChannelService, chatClientService: ChatClientService, customTemplatesService: CustomTemplatesService, dateParser: DateParserService, ngZone: NgZone, cdRef: ChangeDetectorRef, messageActionsService: MessageActionsService);
    messageNotificationJumpClicked: () => void;
    messageNotificationDismissClicked: () => void;
    ngOnInit(): void;
    ngOnChanges(changes: SimpleChanges): void;
    ngAfterViewInit(): void;
    ngAfterViewChecked(): void;
    ngOnDestroy(): void;
    trackByMessageId(index: number, item: StreamMessage): string;
    trackByUserId(index: number, user: UserResponse): string;
    jumpToLatestMessage(): void;
    scrollToBottom(): void;
    scrollToTop(): void;
    scrolled(): void;
    jumpToFirstUnreadMessage(): void;
    getTypingIndicatorContext(): TypingIndicatorContext;
    getTypingIndicatorText(users: UserResponse[]): string;
    isSentByCurrentUser(message?: StreamMessage): boolean;
    parseDate(date: Date): string | undefined;
    get replyCountParam(): {
        replyCount: number | undefined;
    };
    get emptyListTemplate(): TemplateRef<void> | null;
    private preserveScrollbarPosition;
    private forceRepaint;
    private getScrollPosition;
    private shouldLoadMoreMessages;
    private setMessages$;
    private resetScrollState;
    private get usersTyping$();
    private scrollMessageIntoView;
    private scrollToLatestMessage;
    private newMessageReceived;
    private checkIfOnSeparateDates;
    static ɵfac: i0.ɵɵFactoryDeclaration<MessageListComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<MessageListComponent, "stream-message-list", never, { "mode": "mode"; "direction": "direction"; "messageOptionsTrigger": "messageOptionsTrigger"; "hideJumpToLatestButtonDuringScroll": "hideJumpToLatestButtonDuringScroll"; "customMessageActions": "customMessageActions"; "displayDateSeparator": "displayDateSeparator"; "displayUnreadSeparator": "displayUnreadSeparator"; "dateSeparatorTextPos": "dateSeparatorTextPos"; "openMessageListAt": "openMessageListAt"; "hideUnreadCountForNotificationAndIndicator": "hideUnreadCountForNotificationAndIndicator"; "displayLoadingIndicator": "displayLoadingIndicator"; "limitNumberOfMessagesInList": "limitNumberOfMessagesInList"; }, {}, never, never>;
}
