Table

Tablo verisi için stillenmiş primitive'ler: ince çizgi halkalı bir çerçeve içinde, yer kalmadığında yatayda kayan gerçek bir <table>. Sıralama, sayfalama ve seçim mantığı senin kodunda kalır.

KararlıKaynak kod
FaturaMüşteriDurumTutar
INV-1042NorthwindÖdendi1.240,00
INV-1043GlobexBekliyor860,50
INV-1044InitechGecikmiş3.120,00

Import

tsx
import { Table, TableHead, TableBody, TableRow, TableHeader, TableCell } from "@merid/react";

Örnekler

Sıkı, hover'sız

density="sm" hücreleri 10px × 12px'e sıkılaştırır; hoverable={false} salt okunur tablolar için satırdaki hover rengini kapatır.

Anahtarİstek
api/search12.480
api/users3.904

Satır seçimi

Bir satırdaki selected, accent-soft dolguyu uygular. Seçimin kullanılabilir olması ve duyurulması için bunu bir Checkbox kolonuyla birlikte kullan. scrollLabel çerçeveyi focus alabilen, adlandırılmış bir bölgeye çevirir; böylece klavye kullanıcıları onu kaydırabilir.

FaturaTutar
INV-10421.240,00
INV-1043860,50
INV-10443.120,00

Sıralanabilir kolonlar

Bir başlığa sortDirection ve onSort ver: <th> üzerine aria-sort koyar ve etiketi yön ikonlu gerçek bir butona sarar. Satırları sıralamak senin işin; sıralanabilir ama o an aktif sıralama olmayan kolonlarda "none" kullan.

tsx
const [sort, setSort] = useState<{ key: "name" | "amount"; dir: "ascending" | "descending" }>({ key: "name", dir: "ascending" });
const toggle = (key: "name" | "amount") =>
  setSort((s) => ({ key, dir: s.key === key && s.dir === "ascending" ? "descending" : "ascending" }));

<TableHeader sortDirection={sort.key === "name" ? sort.dir : "none"} onSort={() => toggle("name")}>
  Ad
</TableHeader>

API referansı

Her parça ref'ini karşılık gelen native elemana iletir ve native attribute'ları aktarır.

Table

Çerçeve div'i <table>'ı sarar; className ve native prop'lar <table>'a gider.

PropTipVarsayılanAçıklama
density"sm" | "md""md"Satır yoğunluğu: md'de hücreler 14px 16px, sm'de 10px 12px.
hoverablebooleantrueHover'da satırı vurgular.
scrollLabelstring–Kaydırma sarmalayıcısını bu adla focus alabilen bir bölgeye çevirir. Hiç taşmayan tablolarda verme.

TableHead, TableBody

<thead> (hafif yüzey üzerinde) ve <tbody>. Native attribute'lar dışında prop'ları yok.

TableRow

PropTipVarsayılanAçıklama
selectedboolean–`data-selected` ile accent-soft dolgu. ARIA eklemez: seçimi seçim kontrolüyle (örneğin işaretli bir checkbox hücresiyle) aktar, `aria-selected`'ı da yalnızca `role="grid"` olan bir tabloda kendin ver.

TableHeader

PropTipVarsayılanAçıklama
align"start" | "center" | "end""start"Metin hizalaması; sayısal kolonlarda end kullan.
scope"col" | "row" | "colgroup" | "rowgroup""col"Native başlık scope'u.
sortDirection"ascending" | "descending" | "none"–Kolonu sıralanabilir yapar: aria-sort'u ayarlar ve etiketi yön ikonlu bir butonun içinde render'lar.
onSort(event) => void–Sıralama butonuna basıldığında çağrılır. Sonraki yönü hesaplamak ve satırları sıralamak sana kalır.

TableCell

PropTipVarsayılanAçıklama
align"start" | "center" | "end""start"Metin hizalaması; sayısal kolonlarda end kullan.

Stil verme

SeçiciDeğerler
.mrd-table-frameKaydırılabilen, ince çizgi halkalı sarmalayıcı
.mrd-table<table> elemanı; data-density = sm · md, data-hoverable
.mrd-table__head, .mrd-table__bodyBölümler
.mrd-table__rowSatırlar; seçiliyken data-selected
.mrd-table__header, .mrd-table__cellHücreler; data-align = start · center · end

Component değişkeni: her yoğunluk için ayarlanan --mrd-table-cell-padding.

Erişilebilirlik

  • Native bir tablo olduğu için ekran okuyucular satır ve kolon gezintisini hazır alır. TableHeader varsayılan olarak scope="col"'dur; satır başlıkları için scope="row" kullan.
  • Tabloyu tanımlamak için bir <caption> (bunu VisuallyHidden ile görsel olarak gizleyebilirsin) ya da tabloya aria-label ekle.
  • TableRow selected yalnızca görseldir (data-selected); düz bir tablonun seçim anlamı yoktur, bu yüzden state'i satırdaki seçim kontrolü taşımalı.
  • Tablo taşabiliyorsa scrollLabel ver; çerçeveye Tab ile ulaşılır ve ok tuşlarıyla kaydırılır.
TuşNe yapar
TabFocus'u kaydırma bölgesine (scrollLabel verildiyse) ve hücrelerdeki etkileşimli içeriğe taşır.
←→Focus'taki bölgeyi yatayda kaydırır.

Kullanım ilkeleri

Yap

Rakamlar alt alta hizalansın diye sayıları align="end" ile sağa yasla; hücreler zaten tabular rakam kullanıyor.

Kaçın

Layout için tablo kullanmak ya da metin kolonlarını ortalamak.

İlgili sayfalar