"use client" import { useMemo } from "react" import { Gauge, Timer, Zap } from "lucide-react" export interface PerformanceData { fpsAvg?: number fpsOnePercentLow?: number fpsLow?: number fpsHigh?: number loadTimeSsd?: number loadTimeSd?: number tdpWatts?: number } interface PerformanceStepProps { value: PerformanceData onChange: (value: PerformanceData) => void } export function PerformanceStep({ value, onChange }: PerformanceStepProps) { const error = useMemo(() => { if (value.fpsAvg !== undefined && value.fpsAvg !== null && (isNaN(value.fpsAvg) || value.fpsAvg <= 0)) { return "FPS Average must be greater than 0" } return null }, [value.fpsAvg]) const update = (field: keyof PerformanceData, val: string) => { const isDecimalField = field === "loadTimeSsd" || field === "loadTimeSd" const cleaned = isDecimalField ? val.replace(/[^0-9.]/g, "").replace(/(\..*)\./g, "$1") : val.replace(/[^0-9]/g, "") const num = cleaned === "" || cleaned === "." ? undefined : Number(cleaned) onChange({ ...value, [field]: num }) } return (
Required — average framerate during gameplay
FPS at the 1st percentile — represents worst 1% of frametimes
{error}
)}