/** * FxInsertSlot — a single FX insert on a channel strip. * * Shows: * - Plugin name * - Bypass toggle button * - Wet/dry mix slider * - Remove button */ import React, { useCallback } from 'react'; import type { FxInsert } from '../../hooks/useFxInserts'; import './FxInsertPanel.css'; interface FxInsertSlotProps { insert: FxInsert; accentColor: string; onToggleBypass: (id: string, currentBypassed: boolean) => void; onWetDryChange: (id: string, wetDry: number) => void; onRemove: (id: string) => void; } const FxInsertSlot: React.FC = ({ insert, accentColor, onToggleBypass, onWetDryChange, onRemove, }) => { const handleBypass = useCallback(() => { onToggleBypass(insert.id, insert.bypassed); }, [insert.id, insert.bypassed, onToggleBypass]); const handleWetDry = useCallback( (e: React.ChangeEvent) => { onWetDryChange(insert.id, parseFloat(e.target.value)); }, [insert.id, onWetDryChange], ); const handleRemove = useCallback(() => { onRemove(insert.id); }, [insert.id, onRemove]); const wetDryPercent = Math.round(insert.wet_dry_mix * 100); return (
{/* Header: plugin name + bypass + remove */}
{insert.bypassed ? 'OFF' : 'ON'} {insert.plugin_name}
{/* Wet/dry mix slider */} {!insert.bypassed && (
{wetDryPercent}%
)}
); }; export { FxInsertSlot }; export default FxInsertSlot;