"use client"; import React, { memo, useState, useEffect } from "react"; import TextBox from "@/components/Textbox"; import Accordion from "@/components/Accordion"; import MediaContent from "@/components/shared/MediaContent"; import { cls } from "@/lib/utils"; import type { LucideIcon } from "lucide-react"; import type { ButtonConfig, TitleSegment } from "@/components/cardStack/types"; import type { InvertedBackground } from "@/providers/themeProvider/config/constants"; type MediaProps = | { imageSrc: string; imageAlt?: string; videoSrc?: never; videoAriaLabel?: never; } | { videoSrc: string; videoAriaLabel?: string; imageSrc?: never; imageAlt?: never; }; type AccordionItem = { id: string; title: string; content: string; }; type FeatureCardTwentyOneProps = MediaProps & { title: string; titleSegments?: TitleSegment[]; description: string; tag?: string; tagIcon?: LucideIcon; buttons?: ButtonConfig[]; accordionItems: AccordionItem[]; useInvertedBackground: InvertedBackground; mediaPosition?: "left" | "right"; ariaLabel?: string; className?: string; containerClassName?: string; mediaWrapperClassName?: string; mediaClassName?: string; contentClassName?: string; textBoxClassName?: string; titleClassName?: string; descriptionClassName?: string; tagClassName?: string; buttonContainerClassName?: string; buttonClassName?: string; buttonTextClassName?: string; titleImageWrapperClassName?: string; titleImageClassName?: string; accordionContainerClassName?: string; accordionClassName?: string; accordionTitleClassName?: string; accordionContentClassName?: string; accordionIconContainerClassName?: string; accordionIconClassName?: string; }; const FeatureCardTwentyOne = ({ title, titleSegments, description, tag, tagIcon, buttons, accordionItems, imageSrc, imageAlt, videoSrc, videoAriaLabel, useInvertedBackground, mediaPosition = "left", ariaLabel = "Feature section", className = "", containerClassName = "", mediaWrapperClassName = "", mediaClassName = "", contentClassName = "", textBoxClassName = "", titleClassName = "", descriptionClassName = "", tagClassName = "", buttonContainerClassName = "", buttonClassName = "", buttonTextClassName = "", titleImageWrapperClassName = "", titleImageClassName = "", accordionContainerClassName = "", accordionClassName = "", accordionTitleClassName = "", accordionContentClassName = "", accordionIconContainerClassName = "", accordionIconClassName = "", }: FeatureCardTwentyOneProps) => { const [isCentered, setIsCentered] = useState(false); const [activeAccordion, setActiveAccordion] = useState(0); useEffect(() => { const handleResize = () => { setIsCentered(window.innerWidth < 768); }; handleResize(); window.addEventListener("resize", handleResize); return () => window.removeEventListener("resize", handleResize); }, []); const handleAccordionToggle = (index: number) => { setActiveAccordion(activeAccordion === index ? -1 : index); }; const mediaElement = (
); const contentElement = (
{accordionItems.map((item, index) => ( ))}
); return (
{mediaPosition === "left" ? ( <> {mediaElement} {contentElement} ) : ( <> {contentElement} {mediaElement} )}
); }; FeatureCardTwentyOne.displayName = "FeatureCardTwentyOne"; export default memo(FeatureCardTwentyOne);