import { useCallback } from 'react'; import type { Cell } from '../../../lib/types'; import type { WaveformData } from '../../../lib/types'; import { useNotebookStore } from '../../../lib/notebook-store'; import { CellToolbar } from '../toolbar/CellToolbar'; import { SpiceEditor } from '../editor/SpiceEditor'; import { WaveformViewer } from '../output/WaveformViewer'; import { SchematicViewer } from '../output/SchematicViewer'; import { SimulationLog } from '../output/SimulationLog'; import { cn } from '../../../lib/cn'; interface SpiceCellProps { cell: Cell; isFirst: boolean; isLast: boolean; } export function SpiceCell({ cell, isFirst, isLast }: SpiceCellProps) { const { activeCell, runningCells, setActiveCell, updateCellSource, deleteCell, moveCell, runCell, generateSchematic, } = useNotebookStore(); const isActive = activeCell === cell.id; const isRunning = runningCells.has(cell.id); const handleChange = useCallback( (value: string) => { updateCellSource(cell.id, value); }, [cell.id, updateCellSource], ); const handleRun = useCallback(() => { runCell(cell.id); }, [cell.id, runCell]); const handleGenerateSchematic = useCallback(() => { generateSchematic(cell.id); }, [cell.id, generateSchematic]); // Extract simulation output const simOutput = cell.outputs.find( (o) => o.output_type === 'simulation_result' || o.output_type === 'error', ); const outputData = simOutput?.data as { success?: boolean; waveform?: WaveformData | null; log?: string; error?: string | null; elapsed_seconds?: number; } | null; // Extract schematic output const schematicOutput = cell.outputs.find((o) => o.output_type === 'schematic'); const schematicSvg = schematicOutput?.data?.svg as string | null; return (