import { createSignal, Show, For } from 'solid-js'; import { StatsData, ComparisonEntry } from '../utils/types'; import { BarChart2, Clock } from 'lucide-solid'; interface FileUploadProps { onFileLoad: (data: StatsData, raw: Record) => void; onTextLoad: (text: string) => void; showHelp: boolean; onToggleHelp: () => void; snapshots?: ComparisonEntry[]; onLoadSnapshot?: (entry: ComparisonEntry) => void; } export default function FileUpload(props: FileUploadProps) { const [textInput, setTextInput] = createSignal(''); const [isTextMode, setIsTextMode] = createSignal(false); const [error, setError] = createSignal(''); const handleFile = async (e: Event) => { const target = e.target as HTMLInputElement; const file = target.files?.[0]; if (!file) return; try { const text = await file.text(); const json = JSON.parse(text); props.onFileLoad(json, json); } catch { setError('Invalid JSON file'); } }; const handleTextLoad = () => { if (!textInput().trim()) return; try { JSON.parse(textInput()); props.onTextLoad(textInput()); } catch { setError('Invalid JSON'); } }; return (

Load Statistics

Generating Stats

NIX_SHOW_STATS=1 nix-instantiate expr.nix > stats.json NIX_SHOW_STATS=1 NIX_COUNT_CALLS=1 nix-build > stats.json

Or use NIX_SHOW_STATS_PATH=/path/to/output.json for file output.