51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
import reflex as rx
|
|
|
|
def terminal_window(logs: list[str], title="System Output"):
|
|
return rx.card(
|
|
rx.vstack(
|
|
rx.hstack(
|
|
rx.icon("terminal", size=18, color="var(--gray-11)"),
|
|
rx.text(title, size="2", weight="bold", color="var(--gray-11)"),
|
|
rx.spacer(),
|
|
# Minimal header controls (visual only for now)
|
|
rx.box(width="10px", height="10px", bg="var(--red-9)", border_radius="50%"),
|
|
rx.box(width="10px", height="10px", bg="var(--yellow-9)", border_radius="50%"),
|
|
rx.box(width="10px", height="10px", bg="var(--green-9)", border_radius="50%"),
|
|
align_items="center",
|
|
width="100%",
|
|
padding_bottom="3",
|
|
border_bottom="1px solid var(--gray-4)"
|
|
),
|
|
rx.scroll_area(
|
|
rx.vstack(
|
|
rx.foreach(
|
|
logs,
|
|
lambda log: rx.box(
|
|
rx.text(
|
|
log,
|
|
font_family="JetBrains Mono, monospace",
|
|
font_size="13px",
|
|
color="var(--gray-12)",
|
|
white_space="pre-wrap" # Handle multi-line logs
|
|
),
|
|
padding_y="1"
|
|
)
|
|
),
|
|
align_items="start",
|
|
spacing="0",
|
|
),
|
|
height="400px", # Fixed height for scroll
|
|
type="always",
|
|
scrollbars="vertical",
|
|
bg="var(--gray-2)",
|
|
padding="4",
|
|
border_radius="0 0 8px 8px"
|
|
),
|
|
spacing="0",
|
|
width="100%"
|
|
),
|
|
padding="0",
|
|
variant="surface",
|
|
width="100%"
|
|
)
|