Files
jarca-ledger-mcp/dashboard/components.py

82 lines
2.6 KiB
Python

from __future__ import annotations
from typing import Any, Callable
import streamlit as st
class JarcaList:
def __init__(
self,
*,
render_header: Callable[[list[dict[str, Any]]], None] | None,
render_item: Callable[[dict[str, Any]], None],
items: list[dict[str, Any]],
empty_message: str,
) -> None:
self.render_header = render_header
self.render_item = render_item
self.items = items
self.empty_message = empty_message
def render(self) -> None:
st.markdown(
"""
<style>
.jarca-list {
border: 0.0625rem solid #d1d9e0;
border-radius: 0.375rem;
padding: 0;
margin: 1rem 0 0;
gap: 0;
}
.st-key-jarca-list {
border: 0.0625rem solid #d1d9e0;
border-radius: 0.375rem;
padding: 0;
margin: 0;
gap: 0;
}
.st-key-jarca-list-header {
margin: 0;
background-color: #f6f8fa;
padding: 1rem;
border-top-left-radius: 0.375rem;
border-top-right-radius: 0.375rem;
gap: 0;
}
.st-key-jarca-list-body {
background-color: #ffffff;
border-top: 0.0625rem solid #d1d9e0;
border-bottom-left-radius: 0.375rem;
border-bottom-right-radius: 0.375rem;
margin: 0;
padding: 0;
gap: 0;
}
[class^="st-key-jarca-list-item-"],
[class*=" st-key-jarca-list-item-"] {
border-top: 0.0625rem solid #d1d9e0;
margin: 0;
padding: 1rem;
gap: 0;
}
.st-key-jarca-list-item-0 {
border-top: 0;
}
</style>
""",
unsafe_allow_html=True,
)
with st.container(key="jarca-list", border=False):
with st.container(key="jarca-list-header", border=False):
if self.render_header:
self.render_header(self.items)
with st.container(key="jarca-list-body", border=False):
for index, item in enumerate(self.items):
with st.container(key=f"jarca-list-item-{index}", border=False):
self.render_item(item)
if not self.items:
st.info(self.empty_message)