Vercel UI SDK 0.1.0-beta.2 üzerine kurulu. API’si değişebilir.
File input
Vercel UI SDK üzerinde bırakma alanı, yapıştırma, tür ve boyut denetimi, gerekçeleriyle reddedilen dosyalar, görsel önizlemeleri ve form desteği olan bir dosya girişi.
- Form bileşenleri
- 14 parça
- 12 örnek
@tabler/icons-react@ui-sdk/core@ui-sdk/reactclass-variance-authority
Drop files here
Images or PDFs, up to 5 files of 5 MB each. You can paste them too.
pnpm dlx shadcn@latest add https://hextaui.com/r/ui-sdk-file-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.2 @ui-sdk/core@0.1.0-beta.2 @tabler/icons-react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/ui-sdk-file-input.tsx components/ui/button.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.
Dosya girişi, kişilerin seçtiği, bıraktığı veya yapıştırdığı dosyaları tutar ve bir formla gönderir. Yüklemek uygulamanıza kalır. Çocuğu olmayan FileInputItem, listedeki her dosya için önizleme, ad, boyut ve kaldırma düğmesi olan hazır bir satır çizer.
accept, boyut, sayı ve validate denetimleri yalnızca tarayıcıda çalışır; bir dosyanın neden dışarıda kaldığını erkenden söyler. Herkes bunları atlayabilir, bu yüzden her yüklemeyi sunucunuzda yeniden denetleyin.
accept, MIME türlerini, joker karakterleri ve uzantıları alır. maxFiles, minSize ve maxSize sınırları belirler, validate kendi denetimlerinizi ekler. FileInputRejections, dışarıda kalan her dosyayı tüm nedenleriyle, kabul edilen bir sonraki dosyaya kadar listeler.
FileInputItemPreview, dosya gidince iptal ettiği bir nesne URL’sinden görsel, diğer türler için simge gösterir. layout="grid" ile her dosya kare bir kutucuktur.
Tek başına bir tetikleyici, sistemin dosya seçicisini açar. multiple olmadan yeni bir dosya mevcut olanın yerini alır ve kökün çocukları durumunun bir fonksiyonu olabilir.
variant="composer" ile bırakma alanı bir mesaj kutusunu saran kart olur, layout="chips" ise dosyaları küçük çipler olarak listeler. pasteTarget, metin alanına yapıştırılan ekran görüntülerini alır; yapıştırılan metin metin olarak kalır.
target="document" ve variant="overlay" ile alan, dosyalar pencere üzerinde sürüklenirken sayfayı kaplar ve her yere bırakılan dosyaları alır. Başka bir alana bırakılan dosyalar o alanda kalır.
directory bütün bir klasörü seçer ve multiple özelliğini açar. Öğe adları klasör içindeki yolu gösterir.
value ve onValueChange verin. createFileInputController() ile oluşturulan bir denetleyici, seçiciyi herhangi bir düğmeden açar, dosyaları temizler ya da ekler.
Bir name ile dosyalar, sayfa hidrate olmadan önce bile yerel bir dosya girişiyle gönderilir. Reddedilen dosyalar asla gönderilmez, formu sıfırlamak listeyi boşaltır.
invalid, bırakma alanını ve tetikleyiciyi işaretler; tetikleyici bunu ekran okuyuculara bildirir. Tetikleyicinin aria-describedby özniteliğini mesajınıza yönlendirin.
Devre dışı bir dosya girişi seçimleri, bırakmaları ve yapıştırmaları yok sayar ve hiçbir şey göndermez.
Satırlar ve bırakma alanı yansır, dosya adları kendi yönünü korur, boyutlar verdiğiniz yerel ayarda biçimlenir.
| Tuş | Action |
|---|---|
| Tab | Tetikleyiciye, sonra listeye geçer; son odaklanan dosyaya ya da ilkine. |
| EnterSpace | Tetikleyiciden dosya seçiciyi açar. |
| ↑↓←→ | Listedeki dosyalar arasında gezinir. |
| HomeEnd | İlk ya da son dosyaya gider. |
| DeleteBackspace | Odaktaki dosyayı kaldırır ve sonrakine odaklanır. |
| ⌘V | Odak bırakma alanında ya da yapıştırma hedefindeyken dosya yapıştırır. |
Bırakma alanı bir denetim değildir; klavye ya da ekran okuyucu kullananlar için yanında her zaman bir tetikleyici bulundurun. Liste tek bir sekme durağıdır; her kaldırma düğmesi dosyasının adını taşır, örneğin “Remove photo.png”, ve öğede Delete aynı işi yaptığı için sekme sırasının dışında kalır.
Kabul edilen, kaldırılan ve reddedilen dosyalar kibar bir canlı bölgeyle İngilizce duyurulur. Kendi dilinizde söylemek için announcement, gerekçeler için FileInputRejections bileşenine getReasonLabel verin. Bırakma alanı simgesi yalnızca harekete izin varken yükselir, yeni satırlar da yalnızca o zaman belirerek gelir.
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 | File[] | – |
defaultValue | File[] | [] |
onValueChangedetails; nedeni ve eklenen, kaldırılan ve reddedilen dosyaları içerir. | (value: File[], details) => void | – |
onRejectHiçbiri kabul edilmese bile, dosyalar denetimlerden geçemediğinde çalışır. | (rejected: FileRejection[], details) => void | – |
accept | string | string[] | – |
multiple | boolean | false |
maxFiles | number | – |
maxSizeBayt cinsinden. | number | – |
minSizeBayt cinsinden. | number | – |
validateYerleşik denetimlerden sonra dosyayı reddetmek için bir neden döndürün. | (file: File) => string | null | – |
directory | boolean | false |
captureTelefonlarda kamerayı açar. | "user" | "environment" | boolean | – |
invalid | boolean | false |
disabled | boolean | false |
required | boolean | false |
name | string | – |
form | string | – |
announcementBir değişiklikten sonra ekran okuyucuların duyduğu. | (change) => string | null | – |
controllercreateFileInputController() ile oluşturulur. | FileInputController | – |
children | ReactNode | (state) => ReactNode | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input" | CSS’te dosya girişini hedefler. |
data-dragging | Dosyalar bırakma alanlarından birinin üzerinde sürüklenirken bulunur. |
data-invalid | Geçersiz olduğunda bulunur. |
data-required | Bir dosya zorunlu olduğunda bulunur. |
data-disabled | Devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
variantKesikli çizgili bir alan, bir mesaj yazma alanını saran bir kart ya da sürüklerken görünen tam sayfa bir katman. | "default" | "composer" | "overlay" | "default" |
target | "element" | "document" | "element" |
pasteTargetYapıştırılan dosyaların alınacağı başka bir yer. | "document" | string | Element | () => Element | – |
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input-dropzone" | CSS’te bırakma alanını hedefler. |
data-variant | Varyant: default, composer ya da overlay. |
data-dragging | Dosyalar üzerinde sürüklenirken bulunur. |
data-drag-accept | Sürüklenen dosyalar türlerine ve sayılarına göre kabul edilebilir göründüğü sürece bulunur. |
data-drag-reject | Sürüklenen bir dosyanın türü kabul edilmiyorsa ya da çok fazla dosya varsa bulunur. |
data-disabled | Devre dışıyken bulunur. |
| Prop | Tür | Varsayılan |
|---|---|---|
variant | Button variant | "outline" |
size | Button size | "sm" |
controllerAraç çubuğundaki gibi dosya girişinin dışındaki bir tetikleyiciyi bağlar. | FileInputController | – |
render | ReactElement | (props, state) => ReactElement | – |
| Prop | Tür | Varsayılan |
|---|---|---|
layoutSatırlar, kare görsel kutucukları ya da küçük çipler. Öğeler görünümünü buradan alır. | "list" | "grid" | "chips" | "list" |
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input-list" | CSS’te listeyi hedefler. |
data-layout | Düzen: list, grid ya da chips. Öğeler de bunu taşır. |
| Prop | Tür | Varsayılan |
|---|---|---|
childrenVarsayılan olarak önizleme, ad, boyut ve kaldırma düğmesi. Durum, dosyayı ve dizinini içerir. | ReactNode | (state) => ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input-item" | CSS’te bir dosyanın satırını hedefler. |
data-disabled | Devre dışıyken bulunur. |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input-item-preview" | CSS’te önizlemeyi hedefler. |
data-kind | Görsel önizleme için image, dosya türüne göre simge için icon. |
| Prop | Tür | Varsayılan |
|---|---|---|
localeBoyutu, örneğin 2.4 kB, bu yerel ayarda biçimlendirir. Varsayılan, tarayıcınınkidir. | string | – |
| Prop | Tür | Varsayılan |
|---|---|---|
childrenVarsayılan olarak bir X simgesi. | ReactNode | – |
render | ReactElement | (props, state) => ReactElement | – |
| Prop | Tür | Varsayılan |
|---|---|---|
getReasonLabelHer nedeni adlandırır. Varsayılan İngilizcedir, örneğin “Larger than 5 MB”. | (reason, rules, rejection) => string | – |
| Öznitelik | Açıklama |
|---|---|
data-slot="file-input-rejections" | CSS’te reddedilen dosyaların listesini hedefler. |
- ButtonHer varyant ve boyutta düğmeler; hızlı istekler için spinner'ı atlayan yerleşik yükleme, başarı ve hata akışı.
- 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.