Files
fn_registry/cpp/functions/core/toast.md
T
egutierrez 3699a2554d docs(registry): tested:true + test_file_path en .md de primitivos
20 funciones C++ pasan de tested:false a tested:true con sus tests
correspondientes y test_file_path apuntando a cpp/tests/. Cubre 4 tests
reales (tween_curves, pie/kpi/bar math) y 16 placeholders (componentes
UI con tests visuales pendientes para 0048).

Coverage cpp pasa de 4% (3/81) a 28% (23/81).
2026-04-28 23:42:35 +02:00

2.8 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, framework, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path framework params output
toast component cpp core 1.1.0 impure void fn_ui::toast_push(ToastKind kind, const char* text); void fn_ui::toast_render(); void fn_ui::toast_inbox_button(const char* id); int fn_ui::toast_unread_count(); void fn_ui::toast_history_clear() Notificaciones efimeras apiladas en esquina inferior + inbox con campana (badge no-leidos) y popover con historial (50 entradas)
imgui
toast
notification
ui
tokens
tokens_cpp_core
false
imgui
true
compiles and links against Catch2 (placeholder, visual cubierto en 0048)
cpp/tests/test_toast.cpp cpp/functions/core/toast.cpp imgui
name desc
kind ToastKind: Info (azul), Success (verde), Warning (amarillo), Error (rojo)
name desc
text Mensaje. Se copia internamente, el caller no necesita mantenerlo vivo
toast_push encola un toast; toast_render renderiza todos los activos (llamar una vez por frame)

toast

Sistema global de notificaciones efimeras. Duracion ~3.5s con fade-out. Cola thread-safe (std::mutex) — se puede hacer push desde callbacks async.

Patron

// 1) Push desde cualquier handler (tras terminar una operacion):
fn_ui::toast_push(fn_ui::ToastKind::Success, "Reindexed 881 functions");

// 2) Render una vez por frame en el bucle principal, DESPUES del contenido:
// (asi los toasts se superponen a ventanas y modales)
render_dashboard();
fn_ui::toast_render();

Inbox (v1.1)

Los toasts empujados tambien se guardan en un historial de 50 entradas. toast_inbox_button(id) dibuja un boton con icono de campana y un badge rojo con el numero de no-leidos; al hacer click abre un popover con el historial ordenado por fecha (mas reciente arriba) y un boton "Clear".

// En la toolbar, al lado de Reindex/Add/Reload:
fn_ui::toast_inbox_button("##inbox");

El id debe ser unico si tienes varios botones (raro). Al abrir el popover se marcan todos como leidos (el badge desaparece hasta el siguiente toast_push).

Notas

  • Los toasts activos se descartan solos a los ~3.5s; el historial persiste hasta 50 entradas o hasta toast_history_clear.
  • Pila vertical de esquina inferior derecha con gap de 8px; ancho fijo 320px.
  • NoInputs en los toasts para que no roben foco ni bloqueen clicks sobre el contenido.
  • Alpha transicional durante los ultimos 0.6s (fade-out suave).
  • Si text es null o vacio, toast_push lo sustituye por "(no message)" para que el inbox nunca quede con entradas en blanco.
  • La campana usa el codepoint U+1F514 (🔔). Asegurate de que la fuente ImGui tenga cargado el rango de simbolos miscellaneous symbols.