Vercel UI SDK 0.1.0-beta.1 üzerine kurulu. API’si değişebilir.
Token input
Vercel UI SDK üzerinde, yazılan metni kişi, dosya ve komut token’larıyla birleştiren, @ ve / önerileri sunan bir metin alanı.
- Form bileşenleri
- 15 parça
- 10 örnek
@tabler/icons-react@ui-sdk/core@ui-sdk/react
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-token-input.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @ui-sdk/react@0.1.0-beta.1 @ui-sdk/core@0.1.0-beta.1 @tabler/icons-react cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/ui-sdk-token-input.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
UI SDK, ui-sdk adlı bir cascade katmanında kendi CSS’ini biraz ekler. Sınıflarınızın kazanması için bu katmanı genel stil dosyanızın en üstünde, Tailwind import’unun üzerinde tanımlayın.
Değer, metin ve token’lardan oluşan bir dizidir. Her token’ın bir type, uygulamanız için bir value ve insanların okuduğu bir label değeri vardır. Editör içeriğini, seçimi ve geri almayı kendisi yönetir; çizimi ona bırakın ve bir token’ın görünümünü değiştirmek için renderToken verin. Verilmezse her token etiketini ve bir kaldırma düğmesini gösterir.
Input içindeki bir TriggerMenu, biri @ ya da / gibi bir tetikleyici yazdığında token önerir. Token’ları kodunuz sağlıyorsa onu kullanmayın.
Dosyalar için @, başta skill’ler için / yazın. Bir dosya yüklenirken beklemede kalır; gönderince her skill updateToken() ile önce çalışıyor, sonra tamamlandı olarak işaretlenir. Enter gönderir, Shift+Enter satır ekler.
tokenDeletion, Backspace’in bir token’da ne yapacağını belirler. whole onu kaldırır, select önce seçer, revert onu yeniden metne çevirir.
createTokenInputController() ile oluşturulan bir controller, koddan token ekler, günceller ve kaldırır. Bir token’ı sonuçlanana kadar beklemede tutmak için resolve olarak bir promise verin.
Bir name ile input, her token’ı [@label](type:value) olarak yazarak metnini gönderir. required boş gönderimi engeller, sıfırlama defaultValue değerine döner.
submitShortcut="mod+enter" ile Enter satır ekler, Command ya da Control+Enter gönderir; Japonca ve Çince yazan pek çok kişi bunu tercih eder.
Codec token’ları metne ve geri çevirir; burada <@id> biçiminde. copy="label" ile kopyalama okunan metni yazar, geri yapıştırınca token’lar yine gelir.
Devre dışı bir input odak almaz, değişmez, kaldırma düğmelerini gizler ve hiçbir şey göndermez.
readOnly ile metin odak alabilir, seçilebilir ve gönderilir, ama yazma, yapıştırma ve bırakma onu değiştirmez.
Editör sayfanın yönünü izler ve bir token sağdan sola metin içinde tek parça kalır.
| Tuş | Action |
|---|---|
| BackspaceDelete | İmlecin önündeki ya da arkasındaki token’ı tokenDeletion’a göre kaldırır. |
| ←→ | İmleci tek basışta bir token’ın ötesine taşır. İmleç asla token içinde durmaz. |
| ↑↓ | Menü açıkken öneriler arasında gezinir. |
| Enter | Gönderir. Menü açıkken vurgulanan öneriyi seçer. |
| Shift + Enter | Yeni bir satır başlatır. |
| ⌘ + EnterCtrl + Enter | submitShortcut mod+enter olduğunda gönderir. Enter bu durumda yeni satır başlatır. |
| ⌘ + ZCtrl + Z | Son adımı geri alır. Yazma gruplanır; yapıştırmalar ve token değişiklikleri ayrı adımlardır. |
| Esc | Önerileri kapatır. |
Editör çok satırlı bir metin kutusudur. İçindeki bir tetikleyici menü aria-autocomplete ve aria-haspopup ekler; ok tuşları önerilerde gezinirken odak metinde kalır. Her token etiketi ve türüyle okunur, örneğin “routes.ts dosya”; eklenmesi ya da kaldırılması duyurulur. Editörü aria-label ile ya da çevresindeki bir etiketle adlandırın.
Backspace bir token’ı klavyeden kaldırdığı için kaldırma düğmeleri ekran okuyuculardan gizlenir. Dokunmatik ekranlarda dokunma alanları büyür, bekleyen bir token yalnızca harekete izin verildiğinde nabız gibi atar ve seçili token zorunlu renkler modunda sistem vurgu kenarlığı alır.
Her parça aynı adlı UI SDK parçasını sarar ve render ile parçanın durumuna bağlı bir fonksiyon olabilen className dahil tüm prop’larını kabul eder.
| Prop | Tür | Varsayılan |
|---|---|---|
value | TokenInputValue | – |
defaultValue | TokenInputValue | – |
onValueChangeYazma, yapıştırma, menüler, geri alma ve controller çağrılarında çalışır. details nedeni ve kaldırılan token’ları listeler. | (value, details) => void | – |
onSubmitGönderme kısayolunda çalışır; bir menü açıksa ya da bir giriş yöntemi metin oluşturuyorsa çalışmaz. | (value, details) => void | – |
submitShortcut | "enter" | "mod+enter" | "enter" |
tokenDeletion | "whole" | "select" | "revert" | "whole" |
renderTokenBir token çizer. Varsayılan olarak etiketli ve kaldırma düğmeli bir TokenInputToken. | (token: Token) => ReactNode | – |
copy | "codec" | "label" | "codec" |
codec | TokenCodec | – |
getTokenDescriptionBir token’ın ekran okuyuculara etiketi dışında söylediği. | (token: Token) => string | – |
history | { limit, groupDelay } | – |
name | string | – |
form | string | – |
required | boolean | false |
disabled | boolean | false |
readOnly | boolean | false |
controllercreateTokenInputController() ile oluşturulur. | TokenInputController | – |
| Prop | Tür | Varsayılan |
|---|---|---|
placeholderInput boşken aria-placeholder ile gösterilir. | string | – |
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="token-input-editor" | Editörü CSS’te hedeflemek için. |
data-empty | Input boşken bulunur. |
data-disabled | Devre dışıyken bulunur. |
data-readonly | Salt okunur olduğunda bulunur. |
| Öznitelik | Açıklama |
|---|---|
data-slot="token-input-token" | Bir token’ı CSS’te hedeflemek için. |
data-token-type | Token’ın türü, örneğin file ya da mention. |
data-selected | Token seçimdeyken ya da kaldırılmak üzere seçiliyken bulunur. |
data-pending | Token yüklenirken bulunur. |
data-unresolved | Token kullanıcıya ihtiyaç duyduğu sürece bulunur, örneğin belirsiz bir anma. |
Token’ını kaldırır ve odağı editörde tutar. children verilmezse bir Tabler X simgesi çizer; input devre dışı ya da salt okunurken kendini gizler.
| Prop | Tür | Varsayılan |
|---|---|---|
triggersMenüyü açan karakterler, her birinin eklediği token türü ve öğeleri. | TriggerDefinition[] | – |
onSelectBir öğe seçildiğinde çalışır. Token’ı beklemede eklemek için bir promise döndürün. | (value, details) => void | Promise | – |
autoHighlight | boolean | true |
loop | boolean | true |
| Prop | Tür | Varsayılan |
|---|---|---|
align | "start" | "center" | "end" | "start" |
sideOffset | number | 6 |
collisionPadding | number | 8 |
| Öznitelik | Açıklama |
|---|---|
data-slot="trigger-menu-content" | Popup’ı CSS’te hedeflemek için. |
data-trigger | Geçerli eşleşmenin tetikleyicisi, örneğin @; böylece her liste farklı görünebilir. |
data-starting-style | Açılır pencere animasyonla girerken bulunur. |
data-ending-style | Açılır pencere animasyonla çıkarken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
value | T | – |
labelİçerik düz metin değilse eklenen ve eşleştirilen metin. | string | – |
disabled | boolean | false |
| Öznitelik | Açıklama |
|---|---|
data-highlighted | Vurgulanan öğede bulunur. Odak editörde kalır. |
data-disabled | Öğe seçilemiyorsa bulunur. |
- CalendarTekli, aralık ve çoklu seçim için, kayan aylar, aralık önizlemeleri ve dokunmaya uygun boyutta günler içeren bir tarih ızgarası.
- Checkboxİşareti çizilerek beliren, belirsiz üst öğeleri, grupları ve hover durumunu paylaşan etiketleri olan bir onay kutusu.
- ComboboxÇipler, gruplar ve asenkron sonuçlar içeren, siz yazdıkça boyutu değişen bir açılır pencerede filtrelenebilir bir select.
- Date pickerTek tarihler ve aralıklar için takvimi bir popover içinde, telefonlarda ise alt sayfa olarak açan bir düğme.
- FieldKontrolüne bağlanmış etiketler, açıklamalar ve hatalar; doğrulama durumları ve formlar için düzenler içerir.
- InputÜç boyutlu, geçersiz ve salt okunur durumları, yerel doğrulama stilleri ve telefonların asla yakınlaştırmaması için 16px dokunmatik yazı tipi olan bir metin girişi.