Sources
可折叠的引用来源列表,链接是否跳转完全由宿主决定。
Sources
基础用法
Sources
示例加载中...
来源堆叠
variant="stack" 把头部的地球图标换成前几条来源的站点图标,重叠排列。折叠状态下读者就能看出引用了哪些站点,展不展开都成立。
流式回答里的来源堆叠
答案定稿后,堆叠头部与纵向追问列表一起出现。
示例加载中...
交互契约
variant="stack"最多取前 3 条能画出图标的来源;一条都画不出时回落到地球图标,而不是留一片空白。图标加载失败后该条退出堆叠,后面的来源顶上来。- 堆叠图标的描边色走
--tx-sources-stack-ring(默认取页面底色):它的作用是在重叠处挖出缝隙,头部放在非页面底色的容器上时需要改指向。 - 链接不会自己跳转。 点击时组件调用
preventDefault()并派发open,是否打开、在哪打开由宿主决定——这对沙箱环境(如 Electron 渲染进程)是刻意设计。 href仍然写在<a>上,所以「在新标签页打开」「复制链接地址」等浏览器原生右键菜单依旧可用。- 展开态由组件自己持有,初值取
defaultOpen;这是非受控组件,后续改defaultOpen不生效。 - 折叠标题默认是
Used N source(s),会按单复数变形;labelFormatter可整体接管。 - 标题回退到域名:
title为空时显示url的 hostname(去掉www.);url无法被URL解析时,原样显示url本身。 - 站点图标加载失败会被永久记下并停止重试该条,不会反复请求坏图。
- 图标标了
alt=""与aria-hidden,可访问名称由标题与域名文本承载。 - 列表是
<ol>,序号来自渲染顺序而非数据字段——重排sources就会重排编号。
API
Props
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sources | AiSourceItem[] | — | 引用列表;AiSourceItem 为 { id, url, title?, favicon? }。必填。 |
labelFormatter | (count: number) => string | — | 自定义折叠标题;未设时回退到 Used N source(s)。 |
defaultOpen | boolean | false | 初始是否展开。仅在挂载时读取一次。 |
variant | 'default' | 'stack' | 'default' | stack 用重叠的站点图标替代头部的地球图标。 |
Events
| 事件名 | 参数 | 说明 |
|---|---|---|
open | (source: AiSourceItem) | 点击某条引用时派发。默认跳转已被阻止,导航需宿主自行完成。 |
Slots
TxSources 不暴露插槽。条目结构固定为序号 + 图标 + 标题 + 域名。
最佳实践
- 必须监听
open,否则点击引用不会有任何反应。 - 桌面端在外部浏览器打开,并带上
noopener;不要在应用窗口里直接导航走。 id用稳定标识:图标失败记录是按id存的,id变化会让坏图重新尝试加载。- 中文界面记得覆盖
labelFormatter,默认文案是英文且带英文复数规则。