Table

Pattern de tabla de datos con cabecera, acciones, filtros, ordenación y alineación configurable.

Estado: draft

Vista Previa

1. Tabla Básica

Estructura semántica estándar usando celdas de cabecera y datos.

Nombre
Cargo
Departamento
Juan Pérez Director Finanzas
Ana Gómez Analista RRHH

2. Bloque Superior (Label, Hint, Acciones)

Directorio de Empleados

Lista actualizada de la plantilla actual.

Nombre
Departamento
Ana Gómez RRHH

3. Columna de Selección (Checkbox)

Documento
Informe Q1.pdf

4. Cabeceras Ordenables

Nombre
Fecha Alta
Carlos Ruiz 12/03/2021

5. Cabecera con Filtro (Select)

Estado
Usuario
Activo carlos.ruiz

6. Cabecera con Filtro (Searchbar Integrado)

Email
admin@ejemplo.com

7. Acciones por Fila

Archivo
Acciones
Documento_final.docx

8. Alineaciones (Izquierda, Centro, Derecha)

Texto (Izq)
Estado (Centro)
Importe (Der)
Factura 001 Pagado 1.250,00 €
Factura 002 Pendiente 45,50 €

9. Ejemplo Compuesto Completo

Gestión de Usuarios

Panel de administración para dar de alta y filtrar.

Usuario
Rol
Acciones
Marta Sánchez marta@ejemplo.com
Administrador

# Table Pattern

El Table es un patrón integral utilizado para mostrar datos estructurados de forma tabular. En lugar de ofrecer "Celdas" individuales sueltas sin semántica, este patrón orquesta la tabla completa asegurando su accesibilidad, relaciones de cabecera-dato y capacidad de albergar interactividad (filtros, ordenación, acciones masivas).

¿Por qué es un Pattern?

No se trata de un componente atómico aislado. Es una plantilla de orquestación que agrupa múltiples responsabilidades y reutiliza componentes existentes: - Organiza elementos nativos (<table>, <thead>, <tbody>, <tr>, <th>, <td>). - Reutiliza componentes de formulario como gn-checkbox, gn-select y el patrón searchbar incrustándolos fluidamente. - Permite adjuntar un bloque superior descriptivo y de acciones primarias que se comunican lógicamente con la tabla.

Componentes Estructurales

1. Bloque Superior (Label / Hint / Actions)

Se utiliza .table__header para albergar opcionalmente: - Un .table__title que da nombre a la tabla (vital conectarlo al aria-labelledby del contenedor o usar <caption>). - Un .table__hint descriptivo. - Un bloque .table__actions para acciones globales (p.ej. botones de "Exportar" o "Nuevo").

2. Tabla (Table, Thead, Tbody)

Toda tabla va envuelta en un .table__container que tiene overflow-x: auto nativo. Esto garantiza un comportamiento *Responsive* por defecto: si la tabla requiere más ancho del disponible en la pantalla, la tabla hará scroll horizontal interno sin romper el layout global de la página ni afectar a la barra de acciones superior.

3. Cabeceras (Table Header Cells)

Los <th> reciben la clase .table__th. Admiten varias integraciones: - Ordenación: Si la columna es ordenable, se debe marcar con el atributo nativo aria-sort="ascending|descending|none". Visualmente se incluye un <button class="table__sort-button"> dentro del th que alberga el icono de flechas, asegurando el acceso y uso exclusivo por teclado. - Filtros: Si Figma requiere un filtro bajo el nombre de columna, se inyecta en el div .table__filter. Este contenedor permite anidar sin esfuerzo tanto select como searchbar, adaptando sus anchuras.

4. Celdas de Datos (Table Cells)

Los <td> (.table__td) pueden soportar modificadores: - .table__td--fill: Aplica el fondo contrastado gris claro exigido en diseño. - .table--compact: Un modificador a aplicar en la cabecera .table que reduce el padding y altura a (35px) de todas sus celdas internas.

Alineación (Izquierda, Centro, Derecha)

El CSS expone modificadores explícitos (.table__th--left, .table__th--center, .table__th--right y sus respectivos en td) que resuelven tanto la alineación del texto (text-align) como la distribución Flex de su contenido (justify-content), garantizando que si una columna está a la derecha, también lo estén los botones de acción que contenga.

Consideraciones de Accesibilidad

- Todo el marcado descansa sobre semántica tabular real. No hay capas flotantes falsas hechas con divs. - El contenedor desplazable .table__container requiere tabindex="0" para garantizar que los usuarios que solo utilizan teclado puedan desplazar la tabla horizontalmente cuando aparece el scroll en móviles. - Los iconos de ordenación son *botones reales*, permitiendo anunciar su disponibilidad a lectores de pantalla y proporcionando focos claros interactivos. - Las interacciones de ordenación o filtrado requerirán JavaScript por parte de la aplicación final para manipular los datos; el patrón únicamente facilita los "anchors" visuales y semánticos.

HTML

<div class="table">
  <div class="table__container">
    <table class="table__element">
      <thead class="table__thead">
        <tr class="table__tr">
          <th class="table__th table__th--left" scope="col">
            <div class="table__th-content">Encabezado</div>
          </th>
          <th class="table__th table__th--left" scope="col">
            <div class="table__th-content">Encabezado</div>
          </th>
        </tr>
      </thead>
      <tbody class="table__tbody">
        <tr class="table__tr">
          <td class="table__td table__td--left">Dato 1</td>
          <td class="table__td table__td--left">Dato 2</td>
        </tr>
      </tbody>
    </table>
  </div>
</div>