import { useCallback, useState } from "react" import { InteractiveGraphics } from "graphics-debug/react" import { convertCircuitJsonToBpc } from "../lib/convertCircuitJsonToBpc" import type { CircuitJson } from "circuit-json" import { getGraphicsForBpcGraph, type BpcGraph } from "bpc-graph" export default () => { const [circuitJson, setCircuitJson] = useState(null) const [bpcGraph, setBpcGraph] = useState(null) const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault() if (e.dataTransfer.files) { Array.from(e.dataTransfer.files).forEach((file) => { const reader = new FileReader() reader.onload = (e: ProgressEvent) => { try { const json = JSON.parse(e.target?.result as string) setCircuitJson(json) const bpc = convertCircuitJsonToBpc(json) setBpcGraph(bpc) } catch (err) { console.error("Failed to parse JSON:", err) } } reader.readAsText(file) }) } }, []) const handleFileSelect = useCallback( (e: React.ChangeEvent) => { if (!e.target.files?.length) return const file = e.target.files[0] const reader = new FileReader() reader.onload = (e: ProgressEvent) => { try { const json = JSON.parse(e.target?.result as string) setCircuitJson(json) const bpc = convertCircuitJsonToBpc(json) setBpcGraph(bpc) } catch (err) { console.error("Failed to parse JSON:", err) } } reader.readAsText(file!) }, [], ) const downloadBpcJson = useCallback(() => { if (!bpcGraph) return const dataStr = JSON.stringify(bpcGraph, null, 2) const dataUri = "data:application/json;charset=utf-8," + encodeURIComponent(dataStr) const exportFileDefaultName = "bpc-graph.json" const linkElement = document.createElement("a") linkElement.setAttribute("href", dataUri) linkElement.setAttribute("download", exportFileDefaultName) linkElement.click() }, [bpcGraph]) const reset = useCallback(() => { setCircuitJson(null) setBpcGraph(null) }, []) return (
e.preventDefault()} > {!circuitJson ? (

Circuit JSON to BPC Converter

Drag and drop a circuit JSON file here

or

) : (

BPC Graph Viewer

{bpcGraph && ( )}
)}
) }