"use client"; import { memo, useRef } from "react"; import { useMotionValue } from "framer-motion"; import { LucideIcon } from "lucide-react"; import { CardPattern } from "@/components/background/CardPattern"; import Button from "@/components/button/Button"; import { usePatternInteraction } from "./usePatternInteraction"; import { cls } from "@/lib/utils"; import { getButtonProps } from "@/lib/buttonUtils"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import type { ButtonConfig } from "@/components/cardStack/types"; export interface FeatureHoverPatternItemData { icon: LucideIcon; title: string; description: string; button?: ButtonConfig; } interface FeatureHoverPatternItemProps { item: FeatureHoverPatternItemData; index: number; className?: string; iconContainerClassName?: string; iconClassName?: string; titleClassName?: string; descriptionClassName?: string; gradientClassName?: string; shouldUseLightText?: boolean; buttonClassName?: string; buttonTextClassName?: string; } const FeatureHoverPatternItem = memo(function FeatureHoverPatternItem({ item, index, className = "", iconContainerClassName = "", iconClassName = "", titleClassName = "", descriptionClassName = "", gradientClassName = "", shouldUseLightText = false, buttonClassName = "", buttonTextClassName = "", }: FeatureHoverPatternItemProps) { const theme = useTheme(); const Icon = item.icon; const mouseX = useMotionValue(0); const mouseY = useMotionValue(0); const containerRef = useRef(null); const getButtonConfigProps = () => { if (theme.defaultButtonVariant === "hover-bubble") { return { bgClassName: "w-full" }; } if (theme.defaultButtonVariant === "icon-arrow") { return { className: "justify-between" }; } return {}; }; const { state, onMouseMove } = usePatternInteraction( mouseX, mouseY, containerRef ); return (

{item.title}

{item.description}

{item.button && (
); }); FeatureHoverPatternItem.displayName = "FeatureHoverPatternItem"; export default FeatureHoverPatternItem;