Tablo
Veri tabloları için kart görünümlü, yatay kaydırılabilen kap ve hazır tablo stilleri. Kendi table etiketinizi yazarsınız; ui-table sınıfı başlık, hücre, satır ve toplam satırı görünümünü verir.
Temel kullanım
Tabloyu acun:table içine koyun ve table etiketine ui-table sınıfını verin. Kap tabloyu beyaz bir kart gibi çerçeveler ve sığmayan sütunlarda yatay kaydırma sağlar. Hücreler varsayılan olarak tek satırdır.
<acun:table>
<table class="ui-table">
<thead>
<tr><th>Müşteri</th><th>Şehir</th><th>Son sipariş</th></tr>
</thead>
<tbody>
<tr><td>Ayşe Yılmaz</td><td>İstanbul</td><td>12.09.2026</td></tr>
<tr><td>Mehmet Kaya</td><td>Ankara</td><td>10.09.2026</td></tr>
<tr><td>Zeynep Arslan</td><td>İzmir</td><td>08.09.2026</td></tr>
</tbody>
</table>
</acun:table>
| Prop | Değerler |
|---|---|
ui-table | table etiketine verilen sınıf |
Sayılar ve hizalama
Sayı sütunlarını text-right ile sağa yaslayın ve tabular-nums ile rakamları eşit genişlikte yazın; böylece basamaklar alt alta hizalanır. Kısa kod ve adetler için text-center da kullanılabilir.
<acun:table>
<table class="ui-table">
<thead>
<tr><th>Ürün</th><th class="text-center">Kod</th><th class="text-right">Satış</th><th class="text-right">Memnuniyet</th></tr>
</thead>
<tbody>
<tr><td>Kablosuz kulaklık</td><td class="text-center">WH-01</td><td class="text-right tabular-nums">312</td><td class="text-right tabular-nums">%91,4</td></tr>
<tr><td>Mekanik klavye</td><td class="text-center">MK-04</td><td class="text-right tabular-nums">148</td><td class="text-right tabular-nums">%75,7</td></tr>
<tr><td>USB-C şarj aleti</td><td class="text-center">UC-02</td><td class="text-right tabular-nums">96</td><td class="text-right tabular-nums">%68,8</td></tr>
</tbody>
</table>
</acun:table>
| Prop | Değerler |
|---|---|
text-right · text-center | Hücre hizalama |
tabular-nums | Eşit genişlikte rakamlar |
Toplam satırı
tfoot içindeki satır kalın yazı, koyu bir üst çizgi ve gri zeminle toplam satırı olarak görünür.
<acun:table>
<table class="ui-table">
<thead>
<tr><th>Ay</th><th class="text-right">Sipariş</th><th class="text-right">İade</th></tr>
</thead>
<tbody>
<tr><td>Eylül 2026</td><td class="text-right tabular-nums">1.248</td><td class="text-right tabular-nums">86</td></tr>
<tr><td>Ağustos 2026</td><td class="text-right tabular-nums">1.192</td><td class="text-right tabular-nums">104</td></tr>
</tbody>
<tfoot>
<tr><td>Toplam</td><td class="text-right tabular-nums">2.440</td><td class="text-right tabular-nums">190</td></tr>
</tfoot>
</table>
</acun:table>
| Prop | Değerler |
|---|---|
tfoot | Toplam satırı stili |
Sıralanabilir başlıklar
acun:sortable-th sıradan bir th yerine kullanılır ve tıklanınca Livewire bileşeninin sortBy(field) metodunu çağırır (WithListing bu metodu sağlar). sort-field ile sort-direction o anki sıralamayı alır; eşleşen sütunun oku vurgulanır ve aria-sort eklenir. Başlık klavyeyle de kullanılabilen bir düğmedir.
<acun:table>
<table class="ui-table">
<thead>
<tr>
<acun:sortable-th field="ad" sort-field="satis" sort-direction="desc">Ürün</acun:sortable-th>
<acun:sortable-th field="satis" sort-field="satis" sort-direction="desc" class="text-right">Satış</acun:sortable-th>
</tr>
</thead>
<tbody>
<tr><td>Kablosuz kulaklık</td><td class="text-right tabular-nums">312</td></tr>
<tr><td>Mekanik klavye</td><td class="text-right tabular-nums">148</td></tr>
</tbody>
</table>
</acun:table>
| Prop | Değerler |
|---|---|
field | Bu sütunun alan adı |
sort-field | Şu anki sıralama alanı ($sortField) |
sort-direction | asc | desc ($sortDirection) |
Durum ve işlemler
Durumu acun:badge ile, satır işlemlerini sağdaki ikon düğmeleriyle gösterin. İkon düğmelerine aria-label verin; uzun metinli hücrelerde tek satır kuralını whitespace-normal ile kaldırabilirsiniz.
<acun:table>
<table class="ui-table">
<thead>
<tr><th>Ürün</th><th>Not</th><th>Durum</th><th class="w-24"><span class="sr-only">İşlemler</span></th></tr>
</thead>
<tbody>
<tr>
<td class="font-medium text-gray-900 dark:text-zinc-100">Mekanik klavye</td>
<td class="min-w-64 whitespace-normal">Tedarikçi kasımda fiyat artıracak; kampanya fiyatı ekim sonuna kadar geçerli olmalı.</td>
<td><acun:badge variant="success">Aktif</acun:badge></td>
<td class="text-right">
<acun:button variant="ghost" size="icon" aria-label="Düzenle"><acun:icon name="pencil-square" /></acun:button>
<acun:button variant="ghost" size="icon" aria-label="Sil" class="text-red-600"><acun:icon name="trash" /></acun:button>
</td>
</tr>
</tbody>
</table>
</acun:table>
Boş tablo
Kayıt yoksa başlık satırını koruyup tek bir hücreye acun:empty-state koyun; colspan sütun sayısı kadar olmalıdır.
<acun:table>
<table class="ui-table">
<thead>
<tr><th>Müşteri</th><th>Şehir</th><th>Son sipariş</th></tr>
</thead>
<tbody>
<tr>
<td colspan="3" class="whitespace-normal">
<acun:empty-state title="Kayıt bulunamadı" description="Arama veya filtre kriterlerinizi değiştirmeyi deneyin." class="border-0" />
</td>
</tr>
</tbody>
</table>
</acun:table>
Parçalı tablo
table etiketini kendiniz yazmak yerine tabloyu parçalarla kurun: acun:table.columns › acun:table.column, acun:table.rows › acun:table.row › acun:table.cell. İçerik bir parçayla başlayınca bileşen <table class="ui-table"> etiketini kendisi çizer. align (start · center · end) kolonu ve hücreyi hizalar.
<acun:table>
<acun:table.columns>
<acun:table.column>Proje</acun:table.column>
<acun:table.column>Sorumlu</acun:table.column>
<acun:table.column align="center">Durum</acun:table.column>
<acun:table.column align="end">Görev</acun:table.column>
<acun:table.column align="end">İlerleme</acun:table.column>
</acun:table.columns>
<acun:table.rows>
<acun:table.row>
<acun:table.cell class="font-medium text-gray-900 dark:text-zinc-100">Mobil uygulama</acun:table.cell>
<acun:table.cell>Ahmet Yılmaz</acun:table.cell>
<acun:table.cell align="center"><acun:badge variant="info">Devam ediyor</acun:badge></acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">42</acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">%64</acun:table.cell>
</acun:table.row>
<acun:table.row>
<acun:table.cell class="font-medium text-gray-900 dark:text-zinc-100">Web sitesi</acun:table.cell>
<acun:table.cell>Elif Kaya</acun:table.cell>
<acun:table.cell align="center"><acun:badge variant="success">Tamamlandı</acun:badge></acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">37</acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">%100</acun:table.cell>
</acun:table.row>
<acun:table.row>
<acun:table.cell class="font-medium text-gray-900 dark:text-zinc-100">Ödeme sayfası</acun:table.cell>
<acun:table.cell>Murat Demir</acun:table.cell>
<acun:table.cell align="center"><acun:badge variant="warning">Gecikmede</acun:badge></acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">51</acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">%38</acun:table.cell>
</acun:table.row>
</acun:table.rows>
</acun:table>
Parçalı tabloda sıralama (Livewire)
sortable ve field alan kolon, tıklanınca Livewire bileşeninizin sortBy(field) metodunu çağırır ve aria-sort ile yönü duyurur; sıralama durumunu bir kez acun:table'a verin. Bileşende $sortField, $sortDirection ve sortBy() bulunmalıdır (WithListing bunları hazır getirir).
<acun:table :sort-field="$sortField" :sort-direction="$sortDirection">
<acun:table.columns>
<acun:table.column sortable field="name">Proje</acun:table.column>
<acun:table.column sortable field="owner">Sorumlu</acun:table.column>
<acun:table.column sortable field="tasks" align="end">Görev</acun:table.column>
<acun:table.column align="end">İşlemler</acun:table.column>
</acun:table.columns>
<acun:table.rows>
@forelse ($projects as $project)
<acun:table.row wire:key="project-{{ $project->id }}">
<acun:table.cell class="font-medium text-gray-900 dark:text-zinc-100">{{ $project->name }}</acun:table.cell>
<acun:table.cell>{{ $project->owner }}</acun:table.cell>
<acun:table.cell align="end" class="tabular-nums">{{ $project->tasks }}</acun:table.cell>
<acun:table.cell align="end">
<acun:button size="icon" variant="soft" wire:click="edit({{ $project->id }})" aria-label="Düzenle" title="Düzenle">
<acun:icon name="pencil-square" size="4" />
</acun:button>
</acun:table.cell>
</acun:table.row>
@empty
<acun:table.row>
<acun:table.cell colspan="4" align="center" class="text-gray-500 dark:text-zinc-400">Bu filtrede proje yok.</acun:table.cell>
</acun:table.row>
@endforelse
</acun:table.rows>
</acun:table>
Prop'lar ve slot'lar
Bileşenin kabul ettiği değerler.
| Prop | Varsayılan | Açıklama |
|---|---|---|
acun:table | — | class gibi öznitelikler kaydırılabilir kaba eklenir |
acun:table: sort-field · sort-direction | null | Parçalı kullanımda sıralanabilir kolonların ortak sıralama durumu |
table.column: align | start | start · center · end |
table.column: sortable · field | false · null | Sıralanabilir başlık; field zorunlu, tıklanınca sortBy(field) çağrılır |
table.cell: align | start | start · center · end |
ui-table (sınıf) | — | table etiketine: başlık, hücre, satır üzerine gelme ve tfoot stilleri |
sortable-th: field | — | Zorunlu. Tıklanınca sortBy(field) çağrılır |
sortable-th: sort-field | — | Zorunlu. O anki sıralama alanı |
sortable-th: sort-direction | — | Zorunlu. asc · desc |