---
name: table_view
kind: component
lang: cpp
domain: viz
version: "1.0.0"
purity: pure
signature: "bool table_view(const char* id, const char* const* headers, int col_count, const char* const* cells, int row_count)"
description: "Renderiza una tabla interactiva con sorting y scroll usando ImGui Tables API"
tags: [imgui, table, visualization, dashboard, data]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: [imgui]
tested: true
tests:
  - "compiles and links against Catch2 (placeholder, visual cubierto en 0048)"
test_file_path: "cpp/tests/test_table_view.cpp"
file_path: "cpp/functions/viz/table_view.cpp"
framework: imgui
params:
  - name: id
    desc: "Identificador unico de la tabla para ImGui (debe ser unico en el frame)"
  - name: headers
    desc: "Array de strings con los nombres de las columnas"
  - name: col_count
    desc: "Numero de columnas"
  - name: cells
    desc: "Array flat row-major de strings; acceso a celda (row, col) via cells[row * col_count + col]"
  - name: row_count
    desc: "Numero de filas de datos, sin contar el header"
output: "true si la tabla se renderizo visible, false si fue clipped o skipped por ImGui"
notes: "scaffolding/demo en primitives_gallery"
---

# table_view

Wrapper atomico sobre `ImGui::BeginTable` / `ImGui::EndTable`. Renderiza una tabla con las siguientes capacidades:

- **Borders**: bordes entre celdas y columnas
- **Sortable**: muestra indicadores de orden en los headers (el caller es responsable de ordenar `cells` antes de llamar)
- **RowBg**: filas alternadas con color de fondo
- **Resizable**: el usuario puede arrastrar los separadores de columna
- **ScrollY**: scroll vertical con altura fija de 300px
- **Reorderable**: el usuario puede reordenar columnas arrastrando los headers

El caller controla el orden de los datos — `table_view` solo habilita el flag `Sortable` para que ImGui muestre los indicadores visuales, pero no reordena `cells` internamente.

Debe llamarse dentro del render callback de `fn::run_app` (o cualquier contexto con un frame ImGui activo).

## Ejemplo

```cpp
const char* headers[] = {"Nombre", "Valor", "Estado"};
const char* cells[] = {
    "Alpha", "1.23", "OK",
    "Beta",  "4.56", "WARN",
    "Gamma", "7.89", "ERROR",
};
table_view("##mi_tabla", headers, 3, cells, 3);
```

## Notas

- `id` debe comenzar con `##` si no se quiere mostrar como titulo de ventana en el contexto ImGui.
- El outer size fijo de `ImVec2(0, 300)` puede parametrizarse en una version futura.
- El sorting real de datos queda fuera del scope de esta funcion para mantenerla pura y componible.
