From 54075e0cbdce63743f86bc9182064c65a800d536 Mon Sep 17 00:00:00 2001 From: Paul Elliott Date: Tue, 3 Feb 2026 09:21:14 -0500 Subject: [PATCH 1/4] Use VSnackbarQueue for stacking notifications --- align_app/app/alerts_controller.py | 15 +++++---------- align_app/app/ui.py | 16 ++++------------ 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/align_app/app/alerts_controller.py b/align_app/app/alerts_controller.py index 304981c..797b719 100644 --- a/align_app/app/alerts_controller.py +++ b/align_app/app/alerts_controller.py @@ -5,15 +5,10 @@ class AlertsController: def __init__(self, server): self.server = server - self.server.state.alert_message = "" - self.server.state.alert_visible = False - self.server.state.alert_timeout = -1 + self.server.state.alert_messages = [] def show(self, message: str, timeout: int = -1): - with self.server.state: - self.server.state.alert_message = message - self.server.state.alert_timeout = timeout - self.server.state.alert_visible = True - - def hide(self): - self.server.state.alert_visible = False + self.server.state.alert_messages = [ + *self.server.state.alert_messages, + {"text": message, "timeout": timeout}, + ] diff --git a/align_app/app/ui.py b/align_app/app/ui.py index 742e59c..019c715 100644 --- a/align_app/app/ui.py +++ b/align_app/app/ui.py @@ -1541,20 +1541,12 @@ def __init__( ) with layout.content: - with vuetify3.VSnackbar( - v_model=("alert_visible", False), - text=("alert_message", ""), - location="bottom left", + vuetify3.VSnackbarQueue( + v_model=("alert_messages", []), + location="bottom right", color="white", - timeout=("alert_timeout", -1), content_class="text-h6 font-weight-medium", - ): - with vuetify3.Template(v_slot_actions=""): - vuetify3.VBtn( - icon="mdi-close", - variant="text", - click="alert_visible = false", - ) + ) html.Div( v_html=( "'