---
name: dashboard_panel
kind: component
lang: cpp
domain: core
version: "1.0.0"
purity: pure
signature: "bool dashboard_panel_begin(const char* title, float min_width = 200.0f, float min_height = 150.0f); void dashboard_panel_end()"
description: "Contenedor estilizado tipo panel para dashboards con titulo, bordes redondeados y tamaño minimo configurable"
tags: [imgui, panel, container, layout, dashboard]
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_dashboard_panel.cpp"
file_path: "cpp/functions/core/dashboard_panel.cpp"
framework: imgui
params:
  - name: title
    desc: "Titulo del panel, tambien sirve como ID de ImGui para distinguir multiples paneles"
  - name: min_width
    desc: "Ancho minimo del panel en pixels (0 = sin restriccion)"
  - name: min_height
    desc: "Alto minimo del panel en pixels (0 = sin restriccion)"
output: "true si el panel es visible y se debe renderizar contenido; llamar siempre dashboard_panel_end() independientemente del valor de retorno"
notes: "scaffolding/demo en primitives_gallery"
---

# dashboard_panel

Panel estilizado para dashboards ImGui. Envuelve un `BeginChild`/`EndChild` con estilos predefinidos: fondo oscuro (`#1F1F26`), bordes redondeados (5 px), borde visible y separador bajo el titulo.

## Uso

```cpp
if (dashboard_panel_begin("Revenue", 300.0f, 200.0f)) {
    line_plot("Revenue", xs, ys, N);
}
dashboard_panel_end(); // siempre llamar
```

## Implementacion

- `PushStyleVar` aplica `ChildRounding = 5.0f` y `ChildBorderSize = 1.0f`
- `PushStyleColor` establece el fondo del child a `(0.12, 0.12, 0.15, 1.0)`
- `BeginChild` con `ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeY`
- Titulo con `TextUnformatted` seguido de `Separator`
- `dashboard_panel_end` hace `EndChild`, `PopStyleColor(1)`, `PopStyleVar(2)`

## Notas

- El titulo actua como ID de ImGui: dos paneles con el mismo titulo en el mismo frame se comportan como uno solo. Usar `##` para diferenciar IDs si se repite el texto: `"Revenue##panel1"`.
- `AutoResizeY` hace que el panel crezca verticalmente con su contenido; `min_height` establece el piso.
- El patron begin/end es idomatico en ImGui: `end` debe llamarse siempre para hacer pop de los estilos, aunque `begin` retorne false.
