@endforeach
Tabla densa multi-dimensional al estilo command.blade.php:128-228.
Diseño de slots:
- Component provee: card + header + thead con columnas + tbody empty
- Parent provee: las `
...
` dentro del slot default
Eso permite que el parent acceda a su scope (con `$item` o nombre custom)
sin tener que pasar callbacks ni reformatear.
Props:
- items: Collection|array — para calcular itemCount + empty state
- columns: array — definición de headers
- title: ?string — título del card
- icon: string — icono del título
- icon-color: string — color del icono
- badge-count: ?int — número en badge derecha del título
- badge-text: ?string — texto del badge (default null)
- badge-color: string — color del badge
- empty-icon: string — icono empty state
- empty-text: string — texto empty state
- empty-cta-url: ?string — URL botón empty state
- empty-cta-label: ?string — texto botón empty state
Pattern: command.blade.php líneas 128-228
--}}
@props([
'items' => [],
'columns' => [],
'title' => null,
'icon' => 'bi-table',
'iconColor' => 'primary',
'badgeCount' => null,
'badgeText' => null,
'badgeColor' => 'primary',
'emptyIcon' => 'bi-inbox',
'emptyText' => 'Sin datos',
'emptyCtaUrl' => null,
'emptyCtaLabel' => null,
])
@php
$itemCount = is_countable($items) ? count($items) : (method_exists($items, 'count') ? $items->count() : 0);
$showBadge = !is_null($badgeCount);
@endphp