---
name: slider
kind: function
lang: cpp
domain: core
version: "1.0.0"
purity: impure
signature: "bool slider_float(const char* label, float* v, float min, float max, const char* fmt); bool slider_float_log(...); bool slider_int(const char* label, int* v, int min, int max, const char* fmt); bool slider_double(const char* label, double* v, double min, double max, const char* fmt)"
description: "Slider ImGui con label muted arriba, estilo acorde con fn_tokens (radius, border, primary grab). Variantes float, float_log (logaritmico), int, double. Equivalente al <Slider> de Mantine / fn_library."
tags: [imgui, slider, ui, tokens, mantine, core]
uses_functions: ["tokens_cpp_core"]
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [imgui.h, cstdio]
tested: false
tests: []
test_file_path: ""
file_path: "cpp/functions/core/slider.cpp"
framework: imgui
params:
  - name: label
    desc: "Texto del label (mostrado en text_muted arriba). Tambien se usa como id ImGui (concatenado con ##)."
  - name: value
    desc: "Pointer al valor; mutado in-place si el usuario lo cambia."
  - name: min_v
    desc: "Limite inferior."
  - name: max_v
    desc: "Limite superior."
  - name: fmt
    desc: "printf-format para el value display. Float default '%.3f'; int default '%d'."
output: "Renderiza label + slider full-width. Devuelve true si el valor cambio este frame."
---

# slider

Slider canonico para los calculadores. Cada calculadora del set tiene 15-30 sliders; tener uno consistente con tokens y full-width acelera el desarrollo y mantiene la identidad visual.

## Patron tipico

```cpp
static float prob = 0.2f;
if (fn_ui::slider_float("Probabilidad de hit", &prob, 0.0f, 1.0f, "%.3f")) {
    recalculate();
}

static float sigma = 0.1f;
fn_ui::slider_float_log("Proposal sigma (log)", &sigma, 0.001f, 10.0f, "%.4f");

static int n_chains = 4;
fn_ui::slider_int("Numero de cadenas", &n_chains, 1, 16);

static double mu = 0.0;
fn_ui::slider_double("Mu", &mu, -10.0, 10.0, "%.6f");
```

## Estilo

Usa `fn_tokens::colors::primary` para el grab (mismo color que `button` primary). Background `bg`, border `border`, radius `sm`. Coincide con la identidad de `text_input` y demas widgets `core`.

## Notas

- `slider_double` down-castea a float internamente (ImGui no expone SliderDouble). Si tu rango requiere fp64 usa `text_input` con parsing manual.
- El label es tambien el id ImGui — duplicar labels en el mismo frame causa colision (ImGui asigna ids unicos basados en label). Si necesitas dos sliders con el mismo nombre visible, agregar un sufijo distinto (ej. "Mu##chain1" / "Mu##chain2").
- Para multi-value (vec2/vec3) — no incluido aqui; usar 2/3 sliders separados o ImGui::SliderFloat2/3 directamente.
