Upload current progress
This commit is contained in:
58
obsidian_automator/components/layout.py
Normal file
58
obsidian_automator/components/layout.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import reflex as rx
|
||||
from ..state.auth import AuthState
|
||||
|
||||
def sidebar_item(text: str, icon: str, href: str):
|
||||
return rx.link(
|
||||
rx.hstack(
|
||||
rx.icon(icon, size=18),
|
||||
rx.text(text, size="3", weight="medium"),
|
||||
spacing="3",
|
||||
align_items="center",
|
||||
padding="12px",
|
||||
border_radius="8px",
|
||||
_hover={"bg": "var(--gray-3)"},
|
||||
color="var(--gray-11)"
|
||||
),
|
||||
href=href,
|
||||
width="100%",
|
||||
text_decoration="none"
|
||||
)
|
||||
|
||||
def dashboard_layout(content: rx.Component):
|
||||
return rx.flex(
|
||||
# Sidebar
|
||||
rx.vstack(
|
||||
rx.heading("Obsidian Automator", size="4", margin_bottom="6", color="var(--accent-9)"),
|
||||
|
||||
sidebar_item("Dashboard", "layout-dashboard", "/"),
|
||||
sidebar_item("Settings", "settings", "/settings"),
|
||||
|
||||
rx.spacer(),
|
||||
|
||||
rx.button(
|
||||
rx.hstack(rx.icon("log-out"), rx.text("Logout")),
|
||||
on_click=AuthState.logout,
|
||||
variant="ghost",
|
||||
width="100%",
|
||||
justify_content="start"
|
||||
),
|
||||
|
||||
width="250px",
|
||||
height="100vh",
|
||||
padding="6",
|
||||
bg="var(--gray-2)",
|
||||
border_right="1px solid var(--gray-4)",
|
||||
),
|
||||
|
||||
# Main Content
|
||||
rx.box(
|
||||
content,
|
||||
flex="1",
|
||||
height="100vh",
|
||||
bg="var(--gray-1)",
|
||||
padding="8",
|
||||
overflow="auto",
|
||||
),
|
||||
width="100vw",
|
||||
height="100vh",
|
||||
)
|
||||
50
obsidian_automator/components/terminal.py
Normal file
50
obsidian_automator/components/terminal.py
Normal file
@@ -0,0 +1,50 @@
|
||||
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%"
|
||||
)
|
||||
Reference in New Issue
Block a user