"use client"; import { useState, useCallback } from "react"; import TextAnimation from "@/components/text/TextAnimation"; import Accordion from "@/components/Accordion"; import Button from "@/components/button/Button"; import { cls } from "@/lib/utils"; import { getButtonProps } from "@/lib/buttonUtils"; import { useTheme } from "@/providers/themeProvider/ThemeProvider"; import { useButtonAnimation } from "@/components/hooks/useButtonAnimation"; import type { AnimationType } from "@/components/text/types"; import type { ButtonConfig, ButtonAnimationType } from "@/components/cardStack/types"; interface FaqItem { id: string; title: string; content: string; } interface FaqSplitTextProps { faqs: FaqItem[]; sideTitle: string; sideDescription?: string; buttons?: ButtonConfig[]; buttonAnimation?: ButtonAnimationType; faqsAnimation: ButtonAnimationType; textPosition?: "left" | "right"; useInvertedBackground: boolean; animationType?: "smooth" | "instant"; showCard?: boolean; ariaLabel?: string; className?: string; containerClassName?: string; contentClassName?: string; textContainerClassName?: string; sideTitleClassName?: string; sideDescriptionClassName?: string; buttonContainerClassName?: string; buttonClassName?: string; buttonTextClassName?: string; faqsContainerClassName?: string; accordionClassName?: string; accordionTitleClassName?: string; accordionIconContainerClassName?: string; accordionIconClassName?: string; accordionContentClassName?: string; separatorClassName?: string; } const FaqSplitText = ({ faqs, sideTitle, sideDescription, buttons, buttonAnimation = "none", faqsAnimation, textPosition = "left", useInvertedBackground, animationType = "smooth", showCard = true, ariaLabel = "FAQ section", className = "", containerClassName = "", contentClassName = "", textContainerClassName = "", sideTitleClassName = "", sideDescriptionClassName = "", buttonContainerClassName = "", buttonClassName = "", buttonTextClassName = "", faqsContainerClassName = "", accordionClassName = "", accordionTitleClassName = "", accordionIconContainerClassName = "", accordionIconClassName = "", accordionContentClassName = "", separatorClassName = "", }: FaqSplitTextProps) => { const [activeIndex, setActiveIndex] = useState(null); const theme = useTheme(); const { containerRef: buttonContainerRef } = useButtonAnimation({ animationType: buttonAnimation }); const { containerRef: faqsContainerRef } = useButtonAnimation({ animationType: faqsAnimation }); const handleToggle = useCallback((index: number) => { setActiveIndex((prevActiveIndex) => prevActiveIndex === index ? null : index ); }, []); const textContent = (
{sideDescription && ( )} {buttons && buttons.length > 0 && (
{buttons.slice(0, 2).map((button, index) => (
)}
); const faqsContent = (
{faqs.map((faq, index) => (
{!showCard && index < faqs.length - 1 && (
)}
))}
); return (
{textPosition === "left" && textContent} {faqsContent} {textPosition === "right" && textContent}
); }; FaqSplitText.displayName = "FaqSplitText"; export default FaqSplitText;