diff --git a/components/converter/VisualComparison.tsx b/components/converter/VisualComparison.tsx index 6869be9..26f549e 100644 --- a/components/converter/VisualComparison.tsx +++ b/components/converter/VisualComparison.tsx @@ -16,6 +16,7 @@ export default function VisualComparison({ onValueChange, }: VisualComparisonProps) { const [draggingUnit, setDraggingUnit] = useState(null); + const [draggedPercentage, setDraggedPercentage] = useState(null); const dragStartX = useRef(0); const dragStartWidth = useRef(0); const activeBarRef = useRef(null); @@ -100,6 +101,9 @@ export default function VisualComparison({ let newPercentage = dragStartWidth.current + deltaPercentage; newPercentage = Math.max(3, Math.min(100, newPercentage)); + // Update the visual percentage immediately + setDraggedPercentage(newPercentage); + // Find the conversion result for this unit const conversion = conversions.find(c => c.unit === draggingUnit); if (!conversion) return; @@ -117,6 +121,7 @@ export default function VisualComparison({ const handleMouseUp = useCallback(() => { setDraggingUnit(null); + setDraggedPercentage(null); activeBarRef.current = null; }, []); @@ -143,6 +148,9 @@ export default function VisualComparison({ let newPercentage = dragStartWidth.current + deltaPercentage; newPercentage = Math.max(3, Math.min(100, newPercentage)); + // Update the visual percentage immediately + setDraggedPercentage(newPercentage); + const conversion = conversions.find(c => c.unit === draggingUnit); if (!conversion) return; @@ -157,6 +165,7 @@ export default function VisualComparison({ const handleTouchEnd = useCallback(() => { setDraggingUnit(null); + setDraggedPercentage(null); activeBarRef.current = null; }, []); @@ -190,6 +199,8 @@ export default function VisualComparison({ {withPercentages.map(item => { const isDragging = draggingUnit === item.unit; const isDraggable = !!onValueChange; + // Use dragged percentage if this bar is being dragged, otherwise use calculated percentage + const displayPercentage = isDragging && draggedPercentage !== null ? draggedPercentage : item.percentage; return (
@@ -230,14 +241,14 @@ export default function VisualComparison({ draggingUnit ? "transition-none" : "transition-all duration-500 ease-out" )} style={{ - width: `${item.percentage}%`, + width: `${displayPercentage}%`, backgroundColor: color, }} /> {/* Percentage label overlay */}
- {Math.round(item.percentage)}% + {Math.round(displayPercentage)}%