Prompt Input
Tek sakin bir satır olarak başlayan, yazdıkça karta dönüşen ve konuşma başladığında aşağı inen bir sohbet yazma alanı. Enter gönderir; Japonca ve Çince girişle de güvenle çalışır. Dosyaları yapıştırın, bırakın ya da seçin; önizleme, ilerleme ve yeniden deneme desteği vardır. @ dosya ekler, / ise imleçte açılan bir menüden komut çalıştırır. Sayı tuşlarıyla çalışan bir model seçici, Max'ta canlanan bir efor kaydırıcısı, bir bağlam halkası, canlı dalga biçimli dikte, araç çipleri, yanıt akarken yazılan mesajlar için bir kuyruk ve yeniden yüklemeden sağ çıkan taslaklar.
Yazma alanı, bir sohbetin insanların en çok dokunduğu kısmıdır; bu yüzden her tuş vuruşu doğru hissettirmelidir. Prompt Input solda + ve sağda gönder ile tek sakin bir satır olarak başlar, metin sarıldığında ya da dosya eklendiğinde karta dönüşür ve temizlenince geri yerleşir.
Enter gönderir ve Shift+Enter yeni satır ekler; Japonca, Çince ve Korece giriş yöntemleri asla kesintiye uğramaz. Dokunmatik ekranlarda klavyede Shift olmadığı için Enter yeni satır ekler. Eklemeler tarayıcının kendi geri alma yığınından geçer, bu yüzden ⌘Z her zaman çalışır; uzun yapıştırmalar önizleyebileceğiniz ya da satır içine geri koyabileceğiniz bir eke dönüşür.
Her şey tek bir bağlamı paylaşan parçalardan oluşturulur. Yalnızca alanı ve gönder düğmesini kullanın ya da ilerleme ve yeniden denemeli dosya yüklemeleri, imleçte @ ve / menüleri, bir model seçici, bir efor kaydırıcısı, bir bağlam halkası, dikte, araç çipleri, yanıt akarken gönderilen mesajlar için bir kuyruk ve yeniden yüklemeden sağ çıkan taslaklar ekleyin.
Prompt Input ücretsizdir. Hesap ya da token olmadan yükleyin ve istediğiniz kadar projede Pro Lisansı kapsamında kullanın.
pnpm dlx shadcn@latest add https://hextaui.com/r/pro/prompt-input.jsonAI SDK ile
useChat'in status ve stop değerlerini iletin. Dosyalar data URL'li FileUIPart olarak gelir ve yanıt akarken yazılan mesaj kuyruğa alınır ve yanıt bitince gönderilir.
Model, efor ve dikte
Model seçiciyi, efor kaydırıcısını ve bağlam halkasını PromptInputMeta ile yazma alanının altına koyun. Araçları + menüsünden açın ve çip olarak gösterin. Kayıtları kendi konuşma modelinize göndermek için transcribe, metin düşer düşmez göndermek için autoSend iletin.
Bahsetmeler ve komutlar
Tetikleyici başına bir menü ekleyin. @ bir seçimi metnin üstünde bir çipe çevirir, / ise komutu ekler. Ok tuşları gezinir, Enter veya Tab seçer, Escape kapatır; hepsi metinden ayrılmadan.
Dosya yükleme
upload'a ilerlemeyi bildiren ve iptal sinyaline uyan bir fonksiyon verin. Sunucu için çok büyük bir dosya gibi, yeniden denemenin düzeltemeyeceği hatalar için retryable: false ile UploadError fırlatın.
Ajan harness'i
Gövdeyi PromptInputInset ile sarın ve bir PromptInputFooter ekleyin. Mod, çalıştığı yer ve üzerinde çalıştığı klasör için PromptInputSelect kullanın.
Yapı
Dıştan içe doğru birleştirdiğiniz parçalar.
| Parça | Açıklama |
|---|---|
PromptInput | Form ve paylaşılan durum: metin, dosyalar, bahsetmeler, kuyruk ve durum. |
PromptInputBody | Kompakt ve genişletilmiş arasında değişen yuvarlak yüzey. |
PromptInputTextarea | Alan. Tüm klavye işleme burada yaşar. |
PromptInputTools | Sol taraf: + menüsü ve araç çipleri. |
PromptInputActions | Sağ taraf: dikte ve gönder. |
PromptInputSubmit | Duruma ve metne göre gönder, durdur veya kuyruğa al. |
PromptInputAttachments | Metnin üstünde dosya ve bahsetme çipleri. |
PromptInputMenu | Tek bir tetikleyici karakter için bir imleç menüsü. |
PromptInputMeta | Model, efor ve bağlam kontrolleri için yazma alanının altındaki satır. |
PromptInputModel | Model ve efor için düşünme anahtarıyla birlikte tek bir kontrol. |
PromptInputInset | Gövdeyi saran, ajan harness'leri için bir alt satır tutan soluk bir kabuk. |
PromptInputFooter | Konum, klasör ve oturum kontrolleri için iç kabuktaki satır. |
PromptInputSelect | Modlar, çalıştırma konumu, klasörler veya depolar için kompakt bir seçici. |
PromptInputQueue, PromptInputSuggestions, PromptInputMeter | Kuyruktaki mesajlar, başlangıç istemleri ve maxLength yakınında bir karakter ölçeri. |
PromptInput
Ayrıca onSubmit ve defaultValue dışındaki her form prop'unu kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
onSubmit{ text, files, mentions } alır. Çözülene kadar metni korumak için bir promise döndürün. | (message: PromptMessage) => void | Promise<unknown> | – |
statususeChat'in status değerini iletin. Meşgulken gönder, durdur veya kuyruğa al olur. | "ready" | "submitted" | "streaming" | "error" | "ready" |
onStopDurdur düğmesinden ya da Escape ile çağrılır. | () => void | – |
onEditLastBoş bir alanda ↑ ile yüklemek için son mesajı döndürün. | () => string | void | – |
valueKontrollü metin. | string | – |
defaultValueBaşlangıç metni. | string | "" |
onValueChangeMetin değiştikçe çağrılır. | (value: string) => void | – |
submitOnHangi tuşun gönderdiği. ⌘↵ her zaman gönderir. | "enter" | "mod+enter" | "enter" |
pasteLimitBir yapıştırmanın ek olmasından önceki karakter sayısı. | number | false | 5000 |
maxLengthPromptInputMeter tarafından gösterilen kesin limit. | number | – |
draftKeyGönderilmemiş metni bu anahtar altında yerel depolamaya kaydeder. | string | – |
globalDropSayfanın herhangi bir yerine bırakılan dosyaları kabul eder. | boolean | false |
focusOnTypeBaşka hiçbir şey odaktayken yazmak, yazmayı buradan başlatır. | boolean | false |
layoutGeçiş yapmak yerine bir düzeni zorlar. | "auto" | "compact" | "expanded" | "auto" |
acceptKabul edilen dosya türleri, input niteliği gibi. | string | – |
maxFilesAynı anda en fazla dosya. | number | – |
maxFileSizeBayt cinsinden en büyük dosya. | number | – |
uploadHer dosyayı yükler. Kalıcı hatalar için retryable: false ile UploadError fırlatın. | (file, { signal, onProgress }) => Promise<unknown> | – |
onRejectBir limiti aşan ya da yanlış türde dosyalar için çağrılır. | (file: File, reason: string) => void | – |
disabledTüm yazma alanını devre dışı bırakır. | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
triggerOnu açan karakter, örneğin @ veya /. | string | – |
items{ value, label, description?, icon?, hint?, keywords?, insert? } | PromptMenuItem[] | – |
modeMentions bir çip ekler; text, insert ?? label ekler. | "mention" | "text" | – |
labelMenünün en üstündeki bölüm etiketi. | string | – |
limitGösterilen en fazla satır. | number | – |
onSelectBir seçimden sonra çağrılır. | (item: PromptMenuItem) => void | – |
PromptInputModel
Model seçici ve efor kaydırıcısı tek kontrolde. Ayrıca value ve onValueChange dışındaki her PromptInputEffort prop'unu alır.
| Prop | Tür | Varsayılan |
|---|---|---|
modelsİlk dokuzu 1–9 kısayollarını alır. | { value, label }[] | – |
modelSeçili model. | string | – |
onModelChangeSeçimde çağrılır. | (value: string) => void | – |
levelsEfor düzeyleri, en azdan en çoğa. | { value, label }[] | – |
effortSeçili efor. | string | – |
onEffortChangeKaydırıcı hareket ettikçe çağrılır. | (value: string) => void | – |
| Prop | Tür | Varsayılan |
|---|---|---|
modelsİlk dokuzu 1–9 kısayollarını alır. | { value, label }[] | – |
valueSeçili model. | string | – |
onValueChangeSeçimde çağrılır. | (value: string) => void | – |
| Prop | Tür | Varsayılan |
|---|---|---|
levelsEn azdan en çoğa. | { value, label }[] | – |
valueSeçili düzey. | string | – |
onValueChangeKaydırıcı hareket ettikçe çağrılır. | (value: string) => void | – |
recommendedBir düzeyi önerilen olarak işaretler. | string | – |
thinkingAyarlıysa genişletilmiş düşünme anahtarını gösterir. | boolean | – |
onThinkingChangeAnahtardan çağrılır. | (thinking: boolean) => void | – |
thinkingLabelAnahtar etiketi. | string | – |
descriptionTooltip'teki yardım metni. | string | – |
| Prop | Tür | Varsayılan |
|---|---|---|
usedKullanılan token'lar. | number | – |
limitBağlam penceresi boyutu. | number | – |
limitsPlan kullanımı gibi ek satırlar. | { label, used, detail? }[] | – |
limitsLabelBu satırların başlığı. | string | – |
| Prop | Tür | Varsayılan |
|---|---|---|
transcribeKaydı konuşma modelinize gönderir. Verilmezse tarayıcının konuşma tanıması kullanılır. | (audio: Blob) => Promise<string> | – |
shortcutHer yerden bir kaydı başlatır ve bitirir. | string | false | "ctrl+shift+d" |
autoSendTranskript düşer düşmez gönderir. | boolean | false |
| Prop | Tür | Varsayılan |
|---|---|---|
iconÇipte gösterilir ve hover'da × ile değiştirilir. | ReactNode | – |
childrenAraç adı. | string | – |
toneÇip rengi. | "blue" | "green" | "amber" | "violet" | "pink" | "blue" |
onRemoveÇipe tıklandığında çağrılır. | () => void | – |
| Prop | Tür | Varsayılan |
|---|---|---|
optionsSeçenekler. Açıklamalar her etiketin altında görünür. | { value, label, icon?, description? }[] | – |
valueSeçili seçenek. Yer tutucuyu göstermek için ayarlamayın. | string | – |
onValueChangeSeçimde çağrılır. | (value: string) => void | – |
labelMode veya Run on gibi erişilebilir ad ve tooltip. | string | – |
placeholderHiçbir şey seçili değilken gösterilir. | string | – |
iconSeçili seçeneğin simgesi yoksa gösterilir. | ReactNode | – |
headingMenünün en üstündeki etiket. | string | – |
shortcutSeçenekler arasında her yerden, alt+m gibi, döngüyle geçer. | string | – |
childrenSeçeneklerin altında Open folder gibi ek menü öğeleri. | ReactNode | – |
| Tuş | Action |
|---|---|
| Enter | Gönderir. Dokunmatik ekranlarda bunun yerine bir satır ekler. |
| ShiftEnter | Bir satır ekler. |
| ⌘Enter | submitOn mod+enter olsa bile her zaman gönderir. |
| Esc | Akan bir yanıtı durdurur, bir menüyü kapatır ya da bir kaydı iptal eder. |
| ↑ | Boş bir alanda, onEditLast ayarlıysa son mesajınızı geri getirir. |
| ↑↓ | Açık bir @ veya / menüsünde gezinir. |
| EnterTab | Vurgulanan menü satırını seçer. |
| 1–9 | Model menüsü açıkken bir model seçer. |
| ←→ | Efor kaydırıcısını hareket ettirir. Home ve End uçlara atlar. |
| CtrlShiftD | Dikteyi başlatır ve yeniden basıldığında transkripti ekler. |
| AltM | Ajan modu gibi shortcut="alt+m" olan bir PromptInputSelect'i döngüyle değiştirir. |
- Alanın görünür bir yer tutucusu ve erişilebilir bir adı vardır; her simge düğmesinin etiketi ve kısayolunu gösteren bir tooltip'i vardır.
- İmleç menüsü aria-activedescendant içeren bir combobox'tur; böylece içinde gezinirken odak metinden asla ayrılmaz.
- Yüklemeler, reddedilenler, kuyruk değişiklikleri ve dikte polite bir live region ile duyurulur.
- Efor kontrolü değer metni olan bir kaydırıcıdır ve ok tuşları ile Home ve End ile çalışmaya devam eder.
- Dokunmatik ekranlarda input'lar en az 16px'tir; böylece iOS odaklanınca asla yakınlaştırmaz.
- Azaltılmış harekette yükseklik değişiklikleri, dalga biçimi ve efor dolgusu animasyonsuz yerleşir.
Şunlarla geliştirildi
Prompt Input bloğunun yapıldığı ücretsiz HextaUI bileşenleri. Her biri tek başına yüklenir.
Kod
10 dosya, components/blocks/prompt-input konumuna eklendi.