Streaming Textv1.0.1
متن را حرفبهحرف نشان میدهد تا حسِ جریانِ توکنِ مدل را بدهد. برای پیامِ واقعاً استریمشونده از سرور، بجای این کامپوننت مستقیم متنِ رسیده را append کنید و همینجا فقط با mode="static" نشانش دهید؛ StreamingText برای شبیهسازی و پاسخهای ازپیشکامل است.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/streaming-text.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/streaming-text.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/streaming-text.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/streaming-text.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import { StreamingText, StreamingSources } from "@/components/ui/streaming-text"
<StreamingText text={message.text} onDone={() => scrollToBottom()} />
<StreamingSources sources={message.sources} />این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
هوکِ useStreamingText(text, speedMs) هم جداگانه export شده اگر بخواهید متن را داخل عنصر دیگری (نه یک div ساده) نشان دهید.
با تغییرِ text (پاسخِ تازه) نمایش از نو شروع میشود؛ برای پخشِ دوباره روی همان متن، یک key متفاوت به کامپوننت بدهید (نمونهٔ بالا همین کار را میکند).
StreamingSources کاملاً جدا از انیمیشنِ متن است؛ معمولاً با onDone نشانش میدهید تا قبل از تمامِ پاسخ ظاهر نشود.
دسترسپذیری
- نشانگرِ چشمکزنِ انتها aria-hidden است؛ محتوای واقعی همان متنِ درحالِنمایش است، پس صفحهخوان چیزِ اضافهای نمیشنود.
- برای کاربرانی که motion کاهشیافته میخواهند، mode="static" را بر پایهٔ prefers-reduced-motion انتخاب کنید تا متن یکجا نشان داده شود.
مرجع API
StreamingText
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| text | string | — | متنِ کامل؛ حرفبهحرف آشکار میشود. |
| speed | number | 25 | میلیثانیه بین هر حرف. |
| mode | "streaming" | "static" | "streaming" | static یعنی همین حالا کامل نشان بده (تاریخچهٔ گفتگو). |
| onDone | () => void | — | وقتی نمایش کامل شد صدا زده میشود. |
StreamingSources
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| sources | { title: string; url: string }[] | — | ردیف چیپهای لینکدار زیرِ پاسخ. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
Custom Speed
speed میلیثانیهٔ بین هر کلمه است؛ عددِ کمتر یعنی سریعتر.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Without Cursor
با showCursor={false} فقط خودِ متن پخش میشود، بدون نشانگرِ انتها.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| Custom Speed | شبیهسازیِ مدلِ سریعتر یا کندتر |
| Without Cursor | وقتی نشانگرِ چشمکزن با طراحیِ حباب همخوانی ندارد |
دستورالعمل استفاده
پیامِ تاریخچه را static نشان بده
انجام بده
پیامهای قدیمیِ گفتگو (نه پاسخِ تازه) باید mode="static" باشند تا هر بار اسکرول به بالا، دوباره پخش نشوند.
انجام نده
streamingکردنِ دوبارهٔ پیامهایِ قدیمی هر بار که کاربر اسکرول میکند، آزاردهنده و کندکننده است.
منابع را فقط بعدِ اتمامِ متن نشان بده
انجام بده
با onDone، StreamingSources درست بعدِ کاملشدنِ پاسخ ظاهر میشود؛ ترتیبِ طبیعیِ خواندن حفظ میشود.
انجام نده
نشاندادنِ منابع همزمان با شروعِ پخشِ متن، قبل از اینکه کاربر بداند متن دربارهٔ چیست، بیمعنی است.