文档菜单

平滑流式文字

新到达的流式文字柔和浮现,光标实时跟随。

安装

pnpm dlx shadcn@latest add https://loading.design/r/smooth-stream.json

用法

import { SmoothStream } from "@/components/loading/smooth-stream"
<SmoothStream text={"Good things take a moment. Let’s make that moment better."} size={14} speed={0.35} active={true} />

将已接收的完整回复传入 text,流式传输结束后将 active 设为 false。已有字符保持挂载,新字符柔和淡入。此组件显示纯文本;需要 Markdown 时请单独渲染。

使用 AI SDK 时,从消息的 parts 读取文字,并用流式状态控制光标。参阅 AI SDK 聊天文档。

import { useChat } from "@ai-sdk/react"import { SmoothStream } from "@/components/loading/smooth-stream"
export function ChatResponse() {  const { messages, status } = useChat()  const message = messages.at(-1)  if (message?.role !== "assistant") return null  const text = message.parts    .filter(part => part.type === "text")    .map(part => part.text)    .join("")  return <SmoothStream key={message.id} text={text} active={status === "streaming"} />}

API

属性类型默认值说明
textstringGood things take a moment. Let’s make that moment better.显示的状态文字或已接收的完整流式回复。
sizenumber14文字大小,单位为像素。
speednumber0.35动画时长(秒)。对于流式文字,此值为每个字符淡入的时长。
activebooleantrue是否启用动画。工作完成后关闭,可隐藏流式光标。
labelstringStreaming response无障碍状态标签。装饰用途请传入空字符串。

无障碍

流式文字使用带有名称和 aria-busy 的区域,避免逐字播报。如有需要,可在完成后单独通知。所有动效都遵循减少动态效果偏好;装饰性输出请使用空标签。