Prompt Inputv1.0.2
کامپوزرِ چت. Enter میفرستد، Shift+Enter خط جدید میگذارد؛ نه رفتار فرمِ معمولی. با onSubmit={handleSubmit} روی PromptInput پیام را میگیرید؛ streaming روی PromptInputSubmitButton دکمهٔ ارسال را به دکمهٔ توقف (مربع) تبدیل میکند، همان الگوی رایج حین دریافت پاسخ.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/prompt-input.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/prompt-input.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/prompt-input.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/prompt-input.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import {
PromptInput,
PromptInputTextarea,
PromptInputToolbar,
PromptInputSubmitButton,
} from "@/components/ui/prompt-input"
<PromptInput onSubmit={(value) => send(value)}>
<PromptInputTextarea />
<PromptInputToolbar>
<PromptInputSubmitButton />
</PromptInputToolbar>
</PromptInput>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
PromptInputTextarea روی خودِ Textarea با field-sizing-content است، پس با تایپ خودش بلند میشود؛ حالتش را از context خودِ PromptInput میگیرد، نیازی به value/onChange دستی نیست مگر بخواهید کنترلشده باشد (همان props را مستقیم رویِ خودِ PromptInput بدهید).
PromptInputModelPicker یک DropdownMenu با DropdownMenuRadioGroup است؛ برای فهرست مدلهای واقعی فقط آرایهٔ models را عوض کنید.
متن خالی (فقط فاصله) هرگز فرستاده نمیشود؛ دکمهٔ ارسال هم تا وقتی متنی نباشد غیرفعال میماند.
دسترسپذیری
- دکمههای فقطآیکون (پیوست، ارسال، توقف) همه aria-label دارند.
- Enter برای ارسال فقط وقتی فوکوس روی خودِ textarea باشد کار میکند؛ Shift+Enter همیشه خط جدید میگذارد، حتی برای صفحهخوان که ممکن است الگوی متفاوتی انتظار داشته باشد.
مرجع API
PromptInput
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value / defaultValue / onValueChange | string / string / (value: string) => void | — | متنِ textarea؛ کنترلشده یا نه. |
| onSubmit | (value: string) => void | — | با Enter یا کلیک دکمهٔ ارسال صدا زده میشود؛ فقط وقتی متن غیرخالی باشد. |
| disabled | boolean | — | کل کامپوزر (تایپ و ارسال) را غیرفعال میکند؛ حین streaming بدهید. |
PromptInputSubmitButton
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| streaming | boolean | false | به دکمهٔ توقف تبدیل میشود و onStop را صدا میزند. |
| onStop | () => void | — | فقط وقتی streaming=true صدا زده میشود. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
With Model Picker
PromptInputModelPicker یک DropdownMenu رادیویی است؛ فهرستِ models را از سرورِ خودتان بدهید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Disabled
کلِ کامپوزر غیرفعال میشود؛ تایپ و ارسال هر دو مسدود میمانند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| With Model Picker | انتخابِ مدل کنارِ دکمهٔ پیوست، قبل از ارسال |
| Disabled | وقتی کاربر مجاز به ارسالِ پیامِ جدید نیست (مثلاً حساب مسدود یا محدودیتِ نرخ) |
دستورالعمل استفاده
حینِ streaming حتماً disabled بده
انجام بده
با disabled روی PromptInput، کاربر نمیتواند پیامِ بعدی را قبل از تمامشدنِ پاسخِ فعلی بفرستد.
انجام نده
بدونِ disabled، ارسالِ همزمانِ چند پیام میتواند ترتیبِ پاسخها را در سمتِ سرور بههم بریزد.
ابزارها را در PromptInputTools جمع کن
انجام بده
پیوست و انتخابِ مدل باید سمتِ ابزارها باشند، جدا از دکمهٔ ارسال؛ چیدمان همیشه یکسان میماند.
انجام نده
پخشکردنِ دکمههای ابزار در جاهای مختلفِ نوار، پیداکردنشان را برای کاربر سخت میکند.