import { useTransform, MotionValue } from "motion/react";
import { StaticImageData } from "next/image";
import * as m from "motion/react-m";
import clsx from "clsx";
import { Link } from "@/utils/Link";
import { Card } from "./Card";
export type HeroOffset = {
x: number;
y: number;
rot: number;
s: number;
dx?: number; // fine-tune X
dy?: number; // fine-tune Y
};
export function AnimatedCard({
src,
href,
alt,
offset,
color,
type,
"data-grid-id": gridId,
reveal,
progress,
}: {
src: StaticImageData;
href?: string;
alt: string;
offset: HeroOffset;
color: string;
"data-grid-id": string;
type: string;
isMobile: boolean;
reveal: boolean;
progress: MotionValue<number>;
}) {
const x = useTransform(progress, [0, 1], [0, offset.x]);
const y = useTransform(progress, [0, 1], [0, offset.y]);
const scale = useTransform(progress, [0, 1], [1, offset.s]);
const rotate = useTransform(progress, [0, 1], [0, [Link]]);
return (
<Link href={href || "/projects"} data-grid-id={gridId}>
<[Link]
style={{ x, y, scale, rotate, willChange: "transform" }}
className={clsx(
"group relative h-full w-full",
reveal && "hover-target [&_span]:opacity-0"
)}
// data-text={!reveal ? "View Project" : null}
>
<Card src={src} alt={alt} color={color} type={type} />
</[Link]>
</Link>
);
}