import { AllowedComponentProps, VNodeProps } from '../common' import type { Message, GroupMember } from 'im-ui-mobile' declare interface TypingUser { id: number name: string avatar?: string } declare interface ActionMenuAction { key: string text: string icon?: string color?: string disabled?: boolean } declare interface MessageListProps { // 数据相关 messages: Message[] groupMembers?: GroupMember[] typingUser?: TypingUser | null // 显示控制 theme?: 'light' | 'dark' mode?: 'normal' | 'compact' loading?: boolean loadingText?: string loadingPosition?: 'top' | 'inside' // 日期时间显示 showTimestamp?: boolean timestampInterval?: number showMessageTime?: boolean dateFormat?: string timeFormat?: string // 消息显示 showMessageStatus?: boolean showMessageMenu?: boolean showMessageReceipt?: boolean displayName?: string showAvatar?: boolean groupShowName?: boolean // 滚动相关 autoScroll?: boolean scrollAnimation?: boolean showScrollbar?: boolean enableBackToTop?: boolean loadMoreThreshold?: number scrollToBottomThreshold?: number keepAtBottom?: boolean // 交互提示 showScrollToBottom?: boolean showUnreadTips?: boolean unreadCount?: number newMessageCount?: number // 空状态 emptyText?: string emptyIconColor?: string // 样式控制 backgroundColor?: string minHeight?: string | number maxHeight?: string | number padding?: string | number margin?: string | number // 自定义操作 showActionMenu: boolean actionMenuActions?: ActionMenuAction[] } declare interface MessageListEvents { // 数据事件 'load-more': [] 'clickMessage': [message: Message, event: MouseEvent] 'longpressMessage': [message: Message, event: TouchEvent] 'longpressAvatar': [] // 消息操作 'resend': [message: Message] 'recall': [message: Message] 'delete': [message: Message] 'copy': [message: Message] 'forward': [message: Message] 'reply': [message: Message] 'download': [message: Message] // 交互事件 'clickAvatar': [] 'click-name': [message: Message, event: MouseEvent] 'scroll': [event: any] 'scrollToBottom': [] 'scroll-to-top': [] // 音频事件 'audio-play': [message: Message] 'audio-pause': [message: Message] // 动作菜单 'action-menu-select': [action: ActionMenuAction, message: Message] } declare interface MessageListSlots { // 默认插槽(消息项) message?: (props: { message: Message, index: number }) => any // 空状态插槽 empty?: () => any // 正在输入插槽 typing?: () => any } declare interface _MessageList { new(): { $props: AllowedComponentProps & VNodeProps & MessageListProps $emit: MessageListEvents $slots: MessageListSlots $exposed?: { scrollToBottom: (animated?: boolean) => void scrollToMessage: (messageId: number | string, animated?: boolean) => void scrollToUnread: () => void getScrollTop: () => number setScrollTop: (top: number) => void stopAllAudio: () => void } } } export declare const MessageList: _MessageList export default MessageList export type { TypingUser, ActionMenuAction, MessageListProps, MessageListEvents, MessageListSlots }