"use client"; import { motion, useMotionTemplate, useMotionValue, useMotionValueEvent, useTransform, } from "motion/react"; import { type PropsWithChildren, useEffect, useRef, useState } from "react"; type HandlebarsProps = PropsWithChildren; export function Handlebars({ children }: HandlebarsProps) { const containerRef = useRef(null); const [width, setWidth] = useState(0); const [leftHandle, setLeftHandle] = useState(0); const [rightHandle, setRightHandle] = useState(width); const leftHandleX = useMotionValue(0); const rightHandleX = useMotionValue(width); useEffect(() => { const el = containerRef.current; if (!el) return; const observer = new ResizeObserver(() => { setWidth(el.offsetWidth); setRightHandle(el.offsetWidth); rightHandleX.set(el.offsetWidth); }); observer.observe(el); return () => observer.disconnect(); }, [rightHandleX.set]); useMotionValueEvent(leftHandleX, "change", () => { setLeftHandle(leftHandleX.get()); }); useMotionValueEvent(rightHandleX, "change", () => { setRightHandle(rightHandleX.get()); }); const leftGradient = useTransform(leftHandleX, [0, width - 10], [0, 100]); const rightGradient = useTransform(rightHandleX, [0, width + 10], [0, 100]); return (
{children}
); }