import { useState } from "react"; import { ChevronRight } from "lucide-react"; import type { ActivityEvent } from "@paperclipai/shared"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; export type RoutineActivityEvent = Pick; function formatTime(value: string | Date): string { try { return new Date(value).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }); } catch { return String(value); } } function summarizeDetails(details: Record | null | undefined): string { if (!details) return ""; const entries = Object.entries(details).slice(0, 3); return entries .map(([key, value]) => `${key.replaceAll("_", " ")}: ${formatDetailValue(value)}`) .join(" · "); } function formatDetailValue(value: unknown): string { if (value === null) return "null"; if (typeof value === "string") return value; if (typeof value === "number" || typeof value === "boolean") return String(value); if (Array.isArray(value)) return value.length === 0 ? "[]" : value.map(formatDetailValue).join(", "); try { return JSON.stringify(value); } catch { return "[unserializable]"; } } /** Activity log row with an expandable JSON payload (§3.7). */ export function RoutineActivityRow({ event }: { event: RoutineActivityEvent }) { const [expanded, setExpanded] = useState(false); const hasPayload = event.details != null && Object.keys(event.details).length > 0; return (
{expanded && hasPayload ? (
          {JSON.stringify(event.details, null, 2)}
        
) : null}
); }