45 lines
2.1 KiB
Python
45 lines
2.1 KiB
Python
import reflex as rx
|
|
from ..state.auth import AuthState
|
|
|
|
def setup_step(title: str, children: list):
|
|
return rx.vstack(
|
|
rx.heading(title, size="6", margin_bottom="4"),
|
|
*children,
|
|
width="100%",
|
|
max_width="500px",
|
|
spacing="4",
|
|
align_items="start"
|
|
)
|
|
|
|
def setup_page():
|
|
return rx.center(
|
|
rx.card(
|
|
rx.vstack(
|
|
rx.heading("Welcome to Obsidian Automator", size="8", color="var(--accent-9)"),
|
|
rx.text("Let's secure your agent and configure your vault.", color="gray.11", margin_bottom="6"),
|
|
|
|
rx.separator(margin_bottom="6"),
|
|
|
|
rx.text("Create Admin Account", weight="bold"),
|
|
rx.input(placeholder="Username", value=AuthState.username, on_change=AuthState.set_username, width="100%"),
|
|
rx.input(placeholder="Password", type="password", value=AuthState.password, on_change=AuthState.set_password, width="100%"),
|
|
rx.input(placeholder="Confirm Password", type="password", value=AuthState.confirm_password, on_change=AuthState.set_confirm_password, width="100%"),
|
|
|
|
rx.separator(margin_y="4"),
|
|
|
|
rx.text("Agent Configuration", weight="bold"),
|
|
rx.input(placeholder="Gemini API Key", value=AuthState.setup_api_key, on_change=AuthState.set_setup_api_key, width="100%", type="password"),
|
|
rx.input(placeholder="Vault Input Path", value=AuthState.setup_input_folder, on_change=AuthState.set_setup_input_folder, width="100%"),
|
|
rx.text_area(placeholder="Vault Philosophy (e.g. Zettelkasten rules)", value=AuthState.setup_philosophy, on_change=AuthState.set_setup_philosophy, width="100%", height="100px"),
|
|
|
|
rx.button("Complete Setup", size="4", width="100%", on_click=AuthState.create_admin_account, margin_top="4"),
|
|
|
|
padding="8",
|
|
),
|
|
size="4",
|
|
width="600px"
|
|
),
|
|
height="100vh",
|
|
bg="var(--gray-2)"
|
|
)
|