"use client"; import { useState, useCallback, Fragment } 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 type { AnimationType } from "@/components/text/types"; import type { ButtonConfig } from "@/components/cardStack/types"; interface FaqItem { id: string; title: string; content: string; } interface FaqSplitTextProps { faqs: FaqItem[]; sideTitle: string; sideDescription?: string; buttons?: ButtonConfig[]; textPosition?: "left" | "right"; useInvertedBackground: "noInvert" | "invertDefault" | "invertCard"; 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, 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 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;