import React, { useState, useEffect } from "react"; import MDEditor from "@uiw/react-md-editor"; import { motion } from "framer-motion"; import { ArrowLeft, Save, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Toast, ToastContainer } from "@/components/ui/toast"; import { api } from "@/lib/api"; import { cn } from "@/lib/utils"; interface MarkdownEditorProps { /** * Callback to go back to the main view */ onBack: () => void; /** * Optional className for styling */ className?: string; } /** * MarkdownEditor component for editing the CLAUDE.md system prompt * * @example * setView('main')} /> */ export const MarkdownEditor: React.FC = ({ onBack, className, }) => { const [content, setContent] = useState(""); const [originalContent, setOriginalContent] = useState(""); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [toast, setToast] = useState<{ message: string; type: "success" | "error" } | null>(null); const hasChanges = content !== originalContent; // Load the system prompt on mount useEffect(() => { loadSystemPrompt(); }, []); const loadSystemPrompt = async () => { try { setLoading(true); setError(null); const prompt = await api.getSystemPrompt(); setContent(prompt); setOriginalContent(prompt); } catch (err) { console.error("Failed to load system prompt:", err); setError("Failed to load CLAUDE.md file"); } finally { setLoading(false); } }; const handleSave = async () => { try { setSaving(true); setError(null); setToast(null); await api.saveSystemPrompt(content); setOriginalContent(content); setToast({ message: "CLAUDE.md saved successfully", type: "success" }); } catch (err) { console.error("Failed to save system prompt:", err); setError("Failed to save CLAUDE.md file"); setToast({ message: "Failed to save CLAUDE.md", type: "error" }); } finally { setSaving(false); } }; const handleBack = () => { if (hasChanges) { const confirmLeave = window.confirm( "You have unsaved changes. Are you sure you want to leave?" ); if (!confirmLeave) return; } onBack(); }; return (
{/* Header */}

CLAUDE.md

Edit your Claude Code system prompt

{/* Error display */} {error && ( {error} )} {/* Editor */}
{loading ? (
) : (
setContent(val || "")} preview="edit" height="100%" visibleDragbar={false} />
)}
{/* Toast Notification */} {toast && ( setToast(null)} /> )}
); };