Skip to content

介绍

第一阶段优化说明

AiBubbleListProps 已覆盖封装层新增的 messageslisttriggerIndicesautoScrollmaxHeightshowBackButton,并继续兼容底层 BubbleListProps

ts
import type {
  AiBubbleListExpose,
  AiBubbleListProps,
  AiBubbleListSlotContext,
} from '@zhiyongui/lingxi-ui'

BubbleList 基于 Bubble 组件,用于展示一组对话气泡列表。内置虚拟滚动(virtua/vue)、自动追底、滚动状态机、未读计数、双向分页加载、回底按钮和混合节点渲染,开箱即用,按需配置。

代码演示

基础使用

滚动控制方法

自动触底控制

返回底部按钮

流式跟随

模拟真实 SSE(全量累计)复现自动触底失效

极端场景:动态插槽高度与自动触底压力测试

双向分页加载

混合节点

插槽自定义

自定义主题

通过 ConfigProvider.themeOverrides 覆盖 BubbleList 的主题变量。完整变量表与可复制模板见:

与 x-markdown-vue 结合使用

v2.0.0 开始,组件库不再内置 XMarkdown / XMarkdownAsync。如需 Markdown 渲染,请使用独立包 x-markdown-vue,或查看专属文档:XMarkdown

安装

bash
npm install x-markdown-vue
npm install katex
npm install shiki shiki-stream

TIP

如果需要代码块语法高亮功能,请安装 shikishiki-stream。否则控制台可能会报错:Streaming highlighter initialization failed: Error: Failed to load shiki-stream module

基础用法

雾化效果

API 标准表

Props

属性类型默认值说明
messagesAiChatMessage[][]简化的 user/assistant 消息列表。
listBubbleListItemProps[]undefined底层 BubbleList 原生列表数据,优先级高于 messages
autoScrollbooleantrue新消息到达时是否自动滚动到底部。
maxHeightstring'100%'列表最大高度。
showBackButtonbooleantrue是否显示回到底部按钮。
triggerIndices'only-last' | 'all' | number[]'only-last'控制哪些消息触发 complete。

Events

事件参数说明
completeinstance, index指定气泡打字完成。
scrollStateChangestate滚动状态变化。
unreadCountChangecount: number未读数变化。
loadMoreTop-请求加载更早消息。
loadMoreBottom-请求加载更晚消息。

Slots

插槽参数说明
avatar / header / content / footer / loading{ item }定制单条消息局部内容。
backToBottom{}自定义回到底部按钮。
topStatus / bottomStatus / itemRecord<string, unknown>自定义边界状态或非气泡项。

Exposes

方法参数说明
scrollToTop()-滚动到顶部。
scrollToBottom()-滚动到底部。
scrollToBubble(index)number滚动到指定消息。

样式入口

ts
import '@zhiyongui/lingxi-ui/ai-bubble-list/style.css'

FAQ

messageslist 应该选哪个?

普通聊天数据用 messages;需要完整控制底层气泡属性时用 list