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}