82 lines
2.6 KiB
Python
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)
|