/* eslint-disable @typescript-eslint/no-explicit-any */ import { useRef } from 'react' import { motion, useAnimationFrame, useMotionTemplate, useMotionValue, useTransform, } from 'motion/react' export const MovingBorder = ({ children, duration = 3000, rx, ry, }: { children: React.ReactNode duration?: number rx?: string ry?: string [key: string]: any }) => { const pathRef = useRef(null) const progress = useMotionValue(0) useAnimationFrame((time) => { const length = pathRef.current?.getTotalLength() if (length) { const pxPerMillisecond = length / duration progress.set((time * pxPerMillisecond) % length) } }) const x = useTransform( progress, (val) => pathRef.current?.getPointAtLength(val).x ) const y = useTransform( progress, (val) => pathRef.current?.getPointAtLength(val).y ) const transform = useMotionTemplate`translateX(${x}px) translateY(${y}px) translateX(-50%) translateY(-50%)` return ( <> {children} ) }