QuantumShield / frontend /components /ControlPanel.tsx
SantoshKumar1310's picture
Upload folder using huggingface_hub
49e53ae verified
'use client'
import { Settings, Gauge, Zap, Clock } from 'lucide-react'
interface Config {
threshold: number
batchSize: number
speed: number
}
interface ControlPanelProps {
config: Config
setConfig: (config: Config) => void
}
export default function ControlPanel({ config, setConfig }: ControlPanelProps) {
return (
<div className="glass rounded-xl p-6">
<h3 className="text-lg font-semibold mb-4 flex items-center gap-2">
<Settings className="w-5 h-5 text-primary-500" />
Configuration
</h3>
<div className="space-y-6">
{/* Threshold slider */}
<div>
<div className="flex items-center justify-between mb-2">
<label className="text-sm text-dark-300 flex items-center gap-2">
<Gauge className="w-4 h-4" />
Fraud Threshold
</label>
<span className="text-sm font-mono text-primary-500">{config.threshold.toFixed(2)}</span>
</div>
<input
type="range"
min="0"
max="1"
step="0.05"
value={config.threshold}
onChange={(e) => setConfig({ ...config, threshold: parseFloat(e.target.value) })}
className="w-full h-2 bg-dark-700 rounded-lg appearance-none cursor-pointer accent-primary-500"
/>
<div className="flex justify-between text-xs text-dark-500 mt-1">
<span>Sensitive (0.0)</span>
<span>Conservative (1.0)</span>
</div>
</div>
{/* Batch size slider */}
<div>
<div className="flex items-center justify-between mb-2">
<label className="text-sm text-dark-300 flex items-center gap-2">
<Zap className="w-4 h-4" />
Batch Size
</label>
<span className="text-sm font-mono text-primary-500">{config.batchSize}</span>
</div>
<input
type="range"
min="1"
max="50"
step="1"
value={config.batchSize}
onChange={(e) => setConfig({ ...config, batchSize: parseInt(e.target.value) })}
className="w-full h-2 bg-dark-700 rounded-lg appearance-none cursor-pointer accent-primary-500"
/>
<div className="flex justify-between text-xs text-dark-500 mt-1">
<span>Detailed (1)</span>
<span>Fast (50)</span>
</div>
</div>
{/* Speed slider */}
<div>
<div className="flex items-center justify-between mb-2">
<label className="text-sm text-dark-300 flex items-center gap-2">
<Clock className="w-4 h-4" />
Processing Speed
</label>
<span className="text-sm font-mono text-primary-500">{config.speed.toFixed(1)}s</span>
</div>
<input
type="range"
min="0.1"
max="3"
step="0.1"
value={config.speed}
onChange={(e) => setConfig({ ...config, speed: parseFloat(e.target.value) })}
className="w-full h-2 bg-dark-700 rounded-lg appearance-none cursor-pointer accent-primary-500"
/>
<div className="flex justify-between text-xs text-dark-500 mt-1">
<span>Fast (0.1s)</span>
<span>Slow (3.0s)</span>
</div>
</div>
</div>
{/* Config summary */}
<div className="mt-6 pt-4 border-t border-dark-700">
<p className="text-xs text-dark-400">
💡 Lower threshold = More fraud alerts (higher recall)<br/>
💡 Higher threshold = Fewer false positives (higher precision)
</p>
</div>
</div>
)
}