"use client"; import React, { useState, useRef, useEffect } from "react"; import { AnimatePresence, motion } from "framer-motion"; import { Plus } from "lucide-react"; import { cn } from "@/lib/utils"; import gsap from "gsap"; import { ScrollTrigger } from "gsap/ScrollTrigger"; gsap.registerPlugin(ScrollTrigger); interface FAQItemType { question: string; answer: string; } interface FAQProps { title?: string; subtitle?: string; faqData: FAQItemType[]; className?: string; } export const FAQ: React.FC = ({ title = "FAQs", subtitle = "Frequently Asked Questions", faqData, className, ...props }) => { const accordionRef = useRef(null); useEffect(() => { const items = accordionRef.current?.querySelectorAll(".accordion-item"); if (items) { gsap.set(items, { opacity: 0, y: 50, }); ScrollTrigger.batch(items, { onEnter: (batch) => { gsap.to(batch, { opacity: 1, y: 0, stagger: 0.12, duration: 1, ease: "power1.inOut", overwrite: true, }); }, start: "top 90%", once: true, }); } return () => { ScrollTrigger.getAll().forEach((t) => t.kill()); }; }, []); return (
); }; const FAQList = ({ faqData, accordionRef, }: { faqData: FAQItemType[]; accordionRef: React.RefObject; }) => (
{faqData?.map((faq, index) => ( ))}
); const FAQItem = ({ question, answer, className, }: FAQItemType & { className?: string }) => { const [isOpen, setIsOpen] = useState(false); return (

{answer}

); };