组件/Message Actions

Message Actions

消息下方的操作条,内置复制与重新生成,方向键在按钮间移动。

Verified自 0.3.9

Message Actions

基础用法

Message Actions

示例加载中...

交互契约

  • 复制按钮只在 copyText 有定义时渲染——空字符串同样会渲染出按钮,但点击不做任何事。若要隐藏它,请不要传这个属性。
  • 点击复制会写入 navigator.clipboard;即使写入被权限策略拒绝,copy 事件仍会派发,宿主可以据此走自己的复制通道。
  • 复制后按钮进入「已复制」态并持续 1200ms,期间重复点击被忽略。
  • 整条操作条是 role="toolbar":只占一个 Tab 停靠点,内部用 ← → ↑ ↓ 移动,Home / End 跳到首尾。
  • 漫游顺序是从 DOM 实时读取的(button:not([disabled])[href]tabindex 非 -1),因此默认插槽里的自定义按钮会自动加入同一顺序,无需额外接线。
  • 禁用的按钮会被排除在漫游之外。
  • appear 为真时挂载播放一次缓慢的模糊淡入;不需要入场动画时请显式关掉。

API

Props

属性名类型默认值说明
copyTextstring复制按钮要写入的文本。未传时不渲染复制按钮。
regenerablebooleanfalse是否显示重新生成按钮。
appearbooleantrue挂载时是否播放模糊淡入。
copyLabelstring'Copy'复制按钮的可访问名称。
copiedLabelstring'Copied'已复制状态下的可访问名称。
regenerateLabelstring'Regenerate'重新生成按钮的可访问名称。
labelstring'Message actions'整条工具栏的可访问名称。

Events

事件名参数说明
copy(text: string)点击复制后派发,携带 copyText;剪贴板写入失败时同样派发。
regenerate点击重新生成时派发。

Slots

插槽名说明
default追加在内置按钮之后。放在这里的可聚焦元素会自动并入方向键漫游顺序。

最佳实践

  • 自定义按钮请用原生 <button>,漫游逻辑靠标签与 tabindex 识别,包一层 <div> 会被跳过。
  • 不要因为剪贴板可能失败就自己再复制一遍——监听 copy 事件即可,组件已经把两种情况统一了。
  • 本地化时把 copyLabelcopiedLabelregenerateLabellabel 一起覆盖,它们都只作用于可访问名称,不影响视觉。
  • 消息还在流式输出时先不要挂上这条操作条,否则用户会复制到半截内容。