---
name: empty_state
kind: component
lang: cpp
domain: core
version: "1.0.0"
purity: pure
signature: "void empty_state(const char* icon, const char* title, const char* description = nullptr)"
description: "Estado vacío centrado para tablas/listas sin datos. Icono grande (muted) + título + descripción opcional. Equivalente a <EmptyState> de @fn_library."
tags: [imgui, empty-state, ui, placeholder, design-system]
uses_functions:
  - tokens_cpp_core
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_empty_state.cpp"
file_path: "cpp/functions/core/empty_state.cpp"
framework: imgui
params:
  - name: icon
    desc: "Emoji o texto corto (ej: '📭', '📊', 'No data')"
  - name: title
    desc: "Título principal (ej: 'No apps yet')"
  - name: description
    desc: "Descripción opcional con instrucciones o contexto"
output: "Dibuja el bloque centrado verticalmente en el espacio disponible del parent"
---

# empty_state

Placeholder para tablas/listas sin datos. Centra icono + título + descripción en la altura disponible del contenedor actual.

## Uso

```cpp
#include "core/empty_state.h"

if (apps.empty()) {
    empty_state("📭", "No apps registered",
                "Run 'fn sync' to fetch apps from the server");
} else {
    draw_apps_table(apps);
}
```

## Casos de uso típicos

- **Tablas sin datos**: "No functions found", "No assertions yet"
- **Búsquedas sin resultados**: "No results for 'xyz'"
- **Estados iniciales**: antes del primer `fn sync` en un PC nuevo

## Notas

- Ocupa todo el espacio vertical del parent. Si quieres un bloque compacto, envuélvelo en un `BeginChild` con alto fijo.
- El icono se escala 2x con `SetWindowFontScale`. Los emojis Unicode funcionan si el atlas de fuente los incluye (con ImGui por defecto NO incluye emojis, usar texto corto como "📭" solo si cargaste una fuente con coverage; en su defecto usar algo como `"( empty )"`).
