import React, { useState, useMemo } from "react"; import type { Phase } from "../types"; interface DocumentPaneProps { content: string; onChange: (content: string) => void; phase: Phase; disabled: boolean; showOnboarding?: boolean; } function renderMarkdown(md: string): string { return ( md // Headers .replace(/^### (.*$)/gm, "

$1

") .replace(/^## (.*$)/gm, "

$1

") .replace(/^# (.*$)/gm, "

$1

") // Bold/italic .replace(/\*\*([^*]+)\*\*/g, "$1") .replace(/\*([^*]+)\*/g, "$1") // Code blocks .replace( /```(\w*)\n([\s\S]*?)```/g, '
$2
' ) .replace(/`([^`]+)`/g, "$1") // Lists .replace(/^- \[x\] (.*$)/gm, '
  • ☑ $1
  • ') .replace(/^- \[ \] (.*$)/gm, '
  • ☐ $1
  • ') .replace(/^- (.*$)/gm, "
  • $1
  • ") // Review comments (highlight them) .replace(/(\/\/ REVIEW:.*$)/gm, '$1') .replace(/(\/\/ NOTE:.*$)/gm, '$1') // Paragraphs .replace(/\n\n/g, "

    ") .replace(/^(.+)$/gm, "

    $1

    ") // Clean up .replace(/

    <\/p>/g, "") .replace(/

    ()/g, "$1") .replace(/(<\/h[1-3]>)<\/p>/g, "$1") .replace(/

    (

    )/g, "$1")
          .replace(/(<\/pre>)<\/p>/g, "$1")
          .replace(/

    ()<\/p>/g, "$1") ); } export function DocumentPane({ content, onChange, phase, disabled, showOnboarding, }: DocumentPaneProps) { const [isEditing, setIsEditing] = useState(false); const renderedHtml = useMemo(() => renderMarkdown(content), [content]); if (showOnboarding) { return (

    Welcome to Claude Flow

    Claude Flow

    A structured workflow for AI-assisted coding: Research → Plan → Implement.

    Setup

    Export your Anthropic API key:

    export ANTHROPIC_API_KEY=your-key-here

    Get one at platform.claude.com

    Getting Started

    1. Add a project — Select a codebase folder
    2. Create a session — Start a new task
    3. Describe your work — Tell Claude what you want to build

    Workflow

    Research: Claude analyzes your codebase and writes findings to research.md. Add notes like // REVIEW: check this — click Review when done.

    Plan: Claude drafts an implementation plan in plan.md with code snippets and a TODO list. Iterate the same way.

    Implement: Claude executes the plan, marking tasks complete as it goes.

    Iterate on research and plan docs as long as you want. Click Submit when happy to move to the next phase.

    ); } if (phase === "implement") { return (
    plan.md Implementing...
    ); } const filename = phase === "research" ? "research.md" : "plan.md"; return (
    {filename}
    {isEditing ? (