x-chatmarkdown-u AI聊天Markdown
AI 聊天气泡的 Markdown 渲染。支持 GFM 表格、代码高亮、数学公式、图片/视频和流式追加。思考时间、重试、复制按钮请自己在外层做。
图片宽度默认铺满气泡,高度按原图比例自适应;HTML <img width height> 或 <img width="50%"> 里写了尺寸时按写的输出。视频使用各端系统播放器(Android VideoView、iOS AVPlayer、鸿蒙 Video、Web/小程序 <video>),带原生控制条。
兼容性
| Harmony | IOS | Android | WEB | 小程序 |
|---|---|---|---|---|
| 支持 | 支持 | 支持 | 支持 | 支持 |
调用
vue
<x-chatmarkdown-u
ref="bubbleRef"
:content="item.content"
:dark="false"
:font-size="14"
@linkclick="onLinkClick"
@codecopy="onCodeCopy"
@longpress="onLongPress"
></x-chatmarkdown-u>流式:
ts
bubbleRef.value?.appendChunk(tokenText)
bubbleRef.value?.finish()只解析不渲染:
ts
import { xChatMarkdownParse } from "@/uni_modules/x-chatmarkdown-u"
xChatMarkdownParse(md, {
success: (res) => {
console.log(res.plainText, res.ir)
}
})参数
| 字段 | 说明 | 默认 |
|---|---|---|
| content | Markdown | "" |
| dark | 深色 | false |
| fontSize | 基础字号 px | 15 |
| reasoningTime | 推理秒数,组件不渲染 | 0 |
| status | idle / streaming / done / error,组件不渲染 | idle |
| errorMsg | 失败文案,组件不渲染 | "" |
| showRetry / showCopy | 兼容保留,组件不渲染按钮 | true |
事件
| 名称 | 参数 | 说明 |
|---|---|---|
| sizechange | { width, height } | 内容尺寸变化 |
| linkclick | { href, text } | 点击链接 |
| codecopy | { lang, code } | 点击代码块复制 |
| longpress | { text } | 长按气泡;App 端已复制纯文本 |
| imageclick | { src, alt } | 点击图片(图片被链接包裹时改为触发 linkclick) |
| rendered | { blockCount, parseMs } | 本次解析渲染完成 |
| error | { errSubject, errCode, errMsg } | 解析或渲染失败 |
方法
| 名称 | 需要 | 说明 |
|---|---|---|
| setContent | content: string | 全量更新 Markdown |
| appendChunk | chunk: string | 流式追加一段文本 |
| finish | 无 | 结束流式,立刻把剩余内容渲染完 |
| getContent | 无 | 返回当前原始 Markdown |
| getPlainText | 无 | 返回纯文本,可用来复制整条 |
| getIR | 无 | 返回渲染中间层 JSON |
| xChatMarkdownParse | md,可选 success / fail / complete | 只解析不渲染,独立函数 |
版本
版权归https://xui.tmui.design你不得修改及二次开发,仅供TMUI4会员商用使用。不得转给非VIP会员使用,一经查实数倍赔偿,并追究法律责任。
更新日志
1.2.0(2026-10-20)
- 新增图片渲染:
、HTML<img>都解析为块级图片;默认铺满容器宽、按原图比例自适应高,HTML 写了width/height(含百分比)时按设定尺寸输出 - 新增视频渲染:HTML
<video>与自动识别为视频,Android 用系统VideoView、iOS 用AVPlayer、鸿蒙用Video、Web/小程序用<video>,各端带系统控制条 - Android 图片复用 uni-app x SDK 同款 Fresco(无需新增图片库),支持远程、file、GIF 与内存缓存
- 段落内与文字混排的图片会在 IR 层拆成「文本段 + 图片块」,三端渲染器无需处理内联图片;表格单元格中的图片退化为 alt 文本
- 新增
imageclick事件({ src, alt });图片被链接包裹时改为linkclick - 图片异步解码完成后自动重新测量高度,
sizechange会再次触发,native-view不会出现底部空白
1.1.0(2026-08-04)
- Web / 微信小程序:Emscripten 编译独立
.wasm+ ES6 glue(export default),与 App 共用同一套 IR - Web:
uni.request拉 wasm +instantiateWasm(对齐 uni-cmark web) - 小程序:
WXWebAssembly.instantiate(包内路径)(static/mp-weixin/*.wasm,对齐 uni-cmark loader) - 新增
x-chatmarkdown-u-node递归块节点;数学字体 base64@font-face - 重新编译:
bash native-src/web/build_wasm.sh
1.0.0(2026-08-03)
- 首个版本
- cmark-gfm 0.29.0.gfm.13 C 核心交叉编译三端(Android AAR / iOS Framework / HarmonyOS HAR)
- GFM 解析:标题、加粗/斜体/删除线、行内代码、链接、引用、有序/无序/任务列表、表格(对齐)、分割线
- 代码块:语言标签 + 右上角复制 + 通用关键字高亮(kotlin/java/swift/js/ts/python/c/cpp/go/rust/bash/sql/json/dart/ruby/lua/php/html/css 等)
- 数学公式:块级
$$...$$与 ```math 代码块、行内$...$,LaTeX 符号 Unicode 化渲染(\frac、\sqrt、上下标等) - 流式渲染:appendChunk 节流解析 + 块级 hash 缓存复用
- 交互:长按复制整条气泡、代码块复制、链接点击事件
- 独立 API
xChatMarkdownParse:导出 IR 中间件供自行渲染;组件暴露getIR/getPlainText/getContent
