from __future__ import annotations from typing import Any import streamlit as st def render_loading_shell(title: str = "Project Kasper", message: str | None = None) -> dict[str, Any]: message = message or "We apologize for the very long load times. Sometimes it can take multiple minutes." shell = st.empty() progress_slot = st.empty() status_slot = st.empty() shell.markdown( f"""
Loading
{title}
{message}
""", unsafe_allow_html=True, ) progress = progress_slot.progress(0) status = status_slot.caption("Preparing page...") def update(step_text: str, pct: float) -> None: progress.progress(int(max(0, min(100, round(pct * 100))))) status_slot.caption(step_text) def clear() -> None: shell.empty() progress_slot.empty() status_slot.empty() return {"update": update, "clear": clear, "progress": progress, "status": status}