"use client"; import { TUTORIAL_STEPS } from "./TutorialOverlay"; // Catppuccin Latte accents const CAT = { red: "#d20f39", teal: "#179299", peach: "#fe640b", blue: "#1e66f5", green: "#40a02b", mauve: "#8839ef", sapphire: "#209fb5", pink: "#ea76cb", surface: "#dce0e8", }; interface HelpPanelProps { isOpen: boolean; onClose: () => void; tutorialStep?: number | null; onStartTutorial?: () => void; onNextStep?: () => void; onPrevStep?: () => void; onEndTutorial?: () => void; } export function HelpPanel({ isOpen, onClose, tutorialStep = null, onStartTutorial, onNextStep, onPrevStep, onEndTutorial, }: HelpPanelProps) { const isTutorialActive = tutorialStep !== null; const headerText = isTutorialActive ? "Tutorial" : "Welcome to Heartbeads"; const content = isTutorialActive ? ( ) : ( ); return ( <> {/* Desktop: right sidebar — z-[60] during tutorial so it sits above the overlay */} {/* Mobile: bottom drawer */}

{headerText}

{content}
); } /* ------------------------------------------------------------------ */ /* Tutorial step-by-step content */ /* ------------------------------------------------------------------ */ function TutorialContent({ step, onNext, onPrev, onEnd, }: { step: number; onNext: () => void; onPrev: () => void; onEnd: () => void; }) { const currentStep = TUTORIAL_STEPS[step]; const totalSteps = TUTORIAL_STEPS.length; const isFirst = step === 0; const isLast = step === totalSteps - 1; return (
{/* Step indicator */}
{step + 1} / {totalSteps}
{Array.from({ length: totalSteps }).map((_, i) => (
))}
{/* Step title */}

{currentStep.title}

{/* Step description */}

{currentStep.description}

{/* Spacer */}
{/* Navigation */}
{isFirst ? ( ) : ( )}
{isLast ? ( ) : ( )}
); } /* ------------------------------------------------------------------ */ /* Bullet with Catppuccin colored dot */ /* ------------------------------------------------------------------ */ function Bullet({ color, children }: { color: string; children: React.ReactNode }) { return (
  • {children}
  • ); } function SectionTitle({ children, color }: { children: React.ReactNode; color: string }) { return (

    {children}

    ); } /* ------------------------------------------------------------------ */ /* Static help content */ /* ------------------------------------------------------------------ */ function HelpContent({ onStartTutorial }: { onStartTutorial?: () => void }) { return (
    {/* Start Tutorial */} {onStartTutorial && ( )}

    Your command center for AI coding tasks.

    Heartbeads shows everything your AI agents are working on as a live, interactive graph — tasks, dependencies, who's doing what, and what's blocking progress.

    The graph

    Each circle is a task. Flowing particles{" "} stream between them to show dependency direction.

      Bigger circles — more connected, more important Solid lines + particles — “blocks” (A must finish before B) Dashed lines — parent-child grouping Colored ring — which project it belongs to Avatars — small profile pictures on nodes show who claimed or is assigned to that task Labels — tags like “mobile”, “ux”, or “build” shown as pills in node details and hover tooltips
    Navigation
      Click a node to open its details Hover for a quick summary Right-click for actions — descriptions, comments, claims, collapse, or focus on an epic Scroll to zoom, drag to pan
    Keyboard shortcuts
      Cmd/Ctrl+F — search by name, ID, owner, or commenter Shift+0 — zoom to the most recently edited node Shift+1-9 — zoom to a node from the #1-#9 leaderboard contributor Escape — clear search or multi-selection
    Layouts

    Top-left buttons rearrange the graph:

      Force — organic, physics-based DAG — clean top-down tree Radial — rings from center outward Cluster — grouped by project Spread — spaced out for screenshots
    Color modes

    Bottom-right panel — paint nodes by:

      Status — open, in progress, blocked, closed Priority — P0 critical to P4 backlog Type — epic, task, bug, feature, or chore Owner — who created it Assignee — who's working on it Prefix — which project Click to filter — click any legend label to show only matching nodes. Combine multiple for a union view
    More
      Collapse/Expand — tidy up epics into single nodes Focus on epic — right-click an epic to isolate its subgraph (children + dependencies). Click the banner or right-click again to return Clusters — dashed circles grouping projects when zoomed out Replay — step through your project's history Comments — leave notes on tasks (sign in first) Activity feed — compact overlay in top-right and full sidebar. Real-time local changes with pagination. During replay, filters to the current point in time Claim tasks — right-click to mark as yours Minimap — click to jump, drag edges to resize Auto-fit — top-left toggle to lock/unlock automatic camera reframing Pulse — the most recently active node pulses with emerald ripples. Toggle it on/off in view controls Copy — clipboard icon copies task with project info
    Multi-select
      Right-click + drag — draw a rectangle on the canvas background to select multiple nodes Shift + click — toggle individual nodes into or out of the selection Group drag — drag any selected node to move them all together Escape — clear the selection
    Leaderboard & Profiles
      Leaderboard — top-right overlay ranking contributors by closed, created, and commented issues. Click “See all” for the full sidebar Profiles — click any avatar on the graph to open their profile panel with stats and recent activity Your profile — click your handle in the sign-in dropdown to see your own stats
    Sharing & Settings
      Shareable URLs — the current view state is stored in the URL. Copy it to share a specific node, panel, color mode, or filter with anyone Text-to-speech — open a task description and click the speaker icon to hear it read aloud. Select text for targeted playback. Adjust speed in settings Settings — gear icon for TTS voice, playback speed, and dashboard access controls
    Appearance
      Dark mode — click the moon/sun icon in the header to toggle. Your preference is saved to localStorage and persists across sessions System preference — on first visit, heartbeads follows your OS dark/light setting automatically
    Built with{" "} beads {" "} — open-source issue tracking for AI-native development. Heartbeads is built for the GainForest agentic workflow and open-sourced at{" "} github.com/daviddao/heartbeads .
    ); }