import { motion } from "motion/react"; import Button from "@/components/ui/Button"; import TextAnimation from "@/components/ui/TextAnimation"; import GridOrCarousel from "@/components/ui/GridOrCarousel"; import InfoCardMarquee from "@/components/ui/InfoCardMarquee"; import TiltedStackCards from "@/components/ui/TiltedStackCards"; import AnimatedBarChart from "@/components/ui/AnimatedBarChart"; import OrbitingIcons from "@/components/ui/OrbitingIcons"; import IconTextMarquee from "@/components/ui/IconTextMarquee"; import ChatMarquee from "@/components/ui/ChatMarquee"; import ChecklistTimeline from "@/components/ui/ChecklistTimeline"; import MediaStack from "@/components/ui/MediaStack"; import type { LucideIcon } from "lucide-react"; type IconInput = string | LucideIcon; type FeatureCard = { title: string; description: string } & ( | { bentoComponent: "info-card-marquee"; items: { icon: IconInput; label: string; value: string }[] } | { bentoComponent: "tilted-stack-cards"; items: [{ icon: IconInput; title: string; subtitle: string; detail: string }, { icon: IconInput; title: string; subtitle: string; detail: string }, { icon: IconInput; title: string; subtitle: string; detail: string }] } | { bentoComponent: "animated-bar-chart" } | { bentoComponent: "orbiting-icons"; centerIcon: IconInput; items: IconInput[] } | { bentoComponent: "icon-text-marquee"; centerIcon: IconInput; texts: string[] } | { bentoComponent: "chat-marquee"; aiIcon: IconInput; userIcon: IconInput; exchanges: { userMessage: string; aiResponse: string }[]; placeholder: string } | { bentoComponent: "checklist-timeline"; heading: string; subheading: string; items: [{ label: string; detail: string }, { label: string; detail: string }, { label: string; detail: string }]; completedLabel: string } | { bentoComponent: "media-stack"; items: [{ imageSrc?: string; videoSrc?: string }, { imageSrc?: string; videoSrc?: string }, { imageSrc?: string; videoSrc?: string }] } ); const getBentoComponent = (feature: FeatureCard) => { switch (feature.bentoComponent) { case "info-card-marquee": return ; case "tilted-stack-cards": return ; case "animated-bar-chart": return ; case "orbiting-icons": return ; case "icon-text-marquee": return ; case "chat-marquee": return ; case "checklist-timeline": return ; case "media-stack": return ; } }; const FeaturesBento = ({ tag, title, description, primaryButton, secondaryButton, features, }: { tag: string; title: string; description: string; primaryButton?: { text: string; href: string }; secondaryButton?: { text: string; href: string }; features: FeatureCard[]; }) => ( {tag} {(primaryButton || secondaryButton) && ( {primaryButton && } {secondaryButton && } )} {features.map((feature) => ( {getBentoComponent(feature)} {feature.title} {feature.description} ))} ); export default FeaturesBento;
{feature.description}