Contexto
Los mensajes de éxito/error están dispersos: algunos usan alert(), otros toast de sonner, otros texto inline. Falta un patrón único.
Alcance
- Auditar todos los usos de
alert, window.alert, console.error mostrados al usuario.
- Reemplazar por
toast.success / toast.error / toast.loading de sonner (ya instalado).
- Crear
lib/ui/toasts.ts con helpers tipados:
toastTxPending(hash) → "Transacción enviada" con link a Stellar Expert.
toastTxSuccess(hash) → "Confirmada en la red".
toastTxError(err) → parsea errores comunes (insufficient balance, trustline missing, user rejected).
toastInvoiceCreated, toastInvestmentCompleted, etc.
- Catálogo en
docs/UI-TOASTS.md con todos los mensajes y cuándo usar cada uno.
Definition of done
- 0
alert() en el código.
- Todos los toasts importan del helper.
- Errores de wallet (Freighter rejection) tienen mensaje amigable.
Por qué es seguro delegarlo
Solo capa de presentación. Los flujos de firma siguen igual.
Contexto
Los mensajes de éxito/error están dispersos: algunos usan
alert(), otrostoastde sonner, otros texto inline. Falta un patrón único.Alcance
alert,window.alert,console.errormostrados al usuario.toast.success / toast.error / toast.loadingdesonner(ya instalado).lib/ui/toasts.tscon helpers tipados:toastTxPending(hash)→ "Transacción enviada" con link a Stellar Expert.toastTxSuccess(hash)→ "Confirmada en la red".toastTxError(err)→ parsea errores comunes (insufficient balance, trustline missing, user rejected).toastInvoiceCreated,toastInvestmentCompleted, etc.docs/UI-TOASTS.mdcon todos los mensajes y cuándo usar cada uno.Definition of done
alert()en el código.Por qué es seguro delegarlo
Solo capa de presentación. Los flujos de firma siguen igual.