@props([ 'caption' => null, 'columns' => [], 'empty' => false, 'emptyLabel' => null, ]) @php $columnCount = max(count($columns), 1); // O estado da ordenação é dito em texto para quem usa leitor de tela: `aria-sort` só é lido // pela coluna atual, então cada link carrega a ação que ele executa. $sortHints = [ 'ascending' => __('layout::shell.sort_ascending'), 'descending' => __('layout::shell.sort_descending'), 'none' => __('layout::shell.sort_none'), ]; @endphp {{-- Tabela de dados fina sobre `x-cms::table`: `columns` descreve o cabeçalho (e o estado de ordenação); as linhas vêm do slot. A coluna ordenável aponta para uma URL **real** (o servidor decide a ordem e o desempate — ADR-001); a linha inteira nunca é clicável. O vazio nunca é uma tabela sem `` e aceita um estado próprio pelo slot `emptyState`. --}} @foreach ($columns as $column) @php($sortable = ($column['sortable'] ?? false) === true) @php($direction = $sortable ? (string) ($column['direction'] ?? 'none') : null) @if ($sortable && filled($column['url'] ?? null)) {{ $column['label'] }} {{ $sortHints[$direction] ?? $sortHints['none'] }} @else {{ $column['label'] }} @endif @endforeach @if ($empty) @isset($emptyState) {{ $emptyState }} @else @endisset @else {{ $slot }} @endif