// viz_render — dispatcher de visualizaciones ImPlot sobre StageOutput. // Cada modo elige automaticamente las columnas relevantes (primera categorica, // primera o varias numericas) salvo override desde ViewConfig. // Issue 0081-G. Promovido desde cpp/apps/primitives_gallery/playground/tables/viz.h #pragma once #include "core/data_table_types.h" #include "imgui.h" #include #include namespace viz { // Render principal. Devuelve true si renderiza el modo solicitado, false si // no se cumplen pre-condiciones (faltan cols numericas/categoricas etc.). // // `size`: ImVec2(-1,-1) usa todo el espacio disponible. // `out`: output del stage activo (headers, types, cells flat row-major). // `clicked_row_out`: si != nullptr, el render escribira el indice de row del // `StageOutput` clicado por user. -1 si no hubo click drillable. Fase 10 // (issue 0079): habilitado para bar/column/pie/donut/funnel/scatter/bubble/ // heatmap. Resto de modos: no hit-test, queda en -1. bool render(const data_table::StageOutput& out, data_table::ViewMode mode, const data_table::ViewConfig& cfg, ImVec2 size = ImVec2(-1, -1), int* clicked_row_out = nullptr); // Helper expuesto: encuentra primera col numerica. -1 si ninguna. int first_numeric_col(const data_table::StageOutput& out); // Helper: primera col categorica (String/Date/Bool/Json o Int con muchos // uniques bajos — heuristica). -1 si ninguna. int first_category_col(const data_table::StageOutput& out); // Helper: extrae columna como vector. Cells no parseables -> NaN. std::vector extract_numeric(const data_table::StageOutput& out, int col); // Helper: extrae columna como vector (categorias). std::vector extract_category(const data_table::StageOutput& out, int col); } // namespace viz