import React, { useCallback, useEffect, useRef, useState } from 'react' import { MoveHorizontalIcon } from 'lucide-react' import { Reveal } from '../Reveal' import { SectionHeading } from '../SectionHeading' import { useSite } from '../../api' import { SingletonPill } from '../../admin/Editable' export function BeforeAfter() { const { before_after } = useSite() const containerRef = useRef(null) const [position, setPosition] = useState(52) const dragging = useRef(false) const setFromClientX = useCallback((clientX: number) => { const el = containerRef.current if (!el) return const rect = el.getBoundingClientRect() const ratio = ((clientX - rect.left) / rect.width) * 100 setPosition(Math.min(98, Math.max(2, ratio))) }, []) useEffect(() => { const move = (e: MouseEvent | TouchEvent) => { if (!dragging.current) return const clientX = 'touches' in e ? e.touches[0].clientX : e.clientX setFromClientX(clientX) } const stop = () => { dragging.current = false } window.addEventListener('mousemove', move) window.addEventListener('touchmove', move) window.addEventListener('mouseup', stop) window.addEventListener('touchend', stop) return () => { window.removeEventListener('mousemove', move) window.removeEventListener('touchmove', move) window.removeEventListener('mouseup', stop) window.removeEventListener('touchend', stop) } }, [setFromClientX]) const onKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'ArrowLeft') setPosition((p) => Math.max(2, p - 4)) if (e.key === 'ArrowRight') setPosition((p) => Math.min(98, p + 4)) } return (
{ dragging.current = true setFromClientX(e.clientX) }} onTouchStart={(e) => { dragging.current = true setFromClientX(e.touches[0].clientX) }} > {before_after.before_label} {before_after.before_label} {before_after.after_label}
) }