import { useLiveField, type LiveFieldProp, type ReactComponentImplementationProps, } from "@quixos/web-studio-react-runtime"; import type { TodoReactComponentAction, TodoReactComponentRenderProps, } from "./gen/quixos.todo.TodoReactComponent.react.js"; type TodoReactComponentCaminoProps = { task_id: string; title: LiveFieldProp; status: LiveFieldProp; priority: LiveFieldProp; notes: LiveFieldProp; due_date: LiveFieldProp; energy: LiveFieldProp; display_label: string; }; const palette = { ink: "#28362d", muted: "#6f776e", cream: "#fffdf5", line: "#d9d0ba", moss: "#5f7f63", honey: "#d99b3d", berry: "#a9544f", }; const statusTone = (status: string) => status === "DONE" ? palette.moss : status === "ARCHIVED" ? palette.muted : "#52749a"; const fieldLabelStyle = { display: "grid", gap: "4px", color: palette.muted, fontSize: "10px", fontWeight: 750, letterSpacing: "0.08em", textTransform: "uppercase" as const, }; const controlStyle = { minWidth: 0, width: "100%", border: `1px solid ${palette.line}`, borderRadius: "7px", background: "#fff", color: palette.ink, fontSize: "11px", padding: "6px 8px", }; type TodoComponentImplementationProps = ReactComponentImplementationProps< TodoReactComponentCaminoProps, TodoReactComponentRenderProps, TodoReactComponentAction >; export default function TodoComponent({ camino: props, render, dispatch, }: TodoComponentImplementationProps) { const [title, setTitle] = useLiveField(props.title); const [status, setStatus] = useLiveField(props.status); const [priority, setPriority] = useLiveField(props.priority); const [notes, setNotes] = useLiveField(props.notes); const [dueDate, setDueDate] = useLiveField(props.due_date); const [energy, setEnergy] = useLiveField(props.energy); const done = status === "DONE"; return (
{title || "Untitled task"} {status || "OPEN"} · {priority || "NORMAL"}
{!render.compact ? (