LeadPilot / Website /src /components /FeatureCard.tsx
Ashraf Al-Kassem
feat: Mission 33 — Marketing Website Alignment + DB-Driven Content
6acfd72
raw
history blame
3.4 kB
import * as Icons from "lucide-react";
import { type LucideIcon, Clock } from "lucide-react";
interface FeatureCardProps {
icon?: LucideIcon;
iconName?: string;
title: string;
benefit: string;
description: string;
dark?: boolean;
comingSoon?: boolean;
}
function resolveIcon(iconName?: string, icon?: LucideIcon): LucideIcon {
if (icon) return icon;
if (iconName && iconName in Icons) {
return (Icons as unknown as Record<string, LucideIcon>)[iconName];
}
return Icons.Zap; // fallback
}
export default function FeatureCard({
icon,
iconName,
title,
benefit,
description,
dark = false,
comingSoon = false,
}: FeatureCardProps) {
const Icon = resolveIcon(iconName, icon);
if (dark) {
return (
<div className={`relative rounded-xl p-6 ${comingSoon ? "catalog-card-muted" : "feature-card-dark"}`}>
{comingSoon && (
<div
className="absolute top-4 right-4 flex items-center gap-1.5 px-2 py-0.5 rounded-full"
style={{
background: "rgba(255,255,255,0.06)",
border: "1px solid rgba(255,255,255,0.1)",
}}
>
<Clock className="w-3 h-3" style={{ color: "#64748B" }} aria-hidden="true" />
<span className="text-[10px] font-medium" style={{ color: "#64748B" }}>
Coming Soon
</span>
</div>
)}
<div
className="w-10 h-10 rounded-lg flex items-center justify-center mb-4"
style={{ background: "rgba(15,118,110,0.2)", border: "1px solid rgba(20,184,166,0.25)" }}
>
<Icon className="w-5 h-5" style={{ color: "#14B8A6" }} aria-hidden="true" />
</div>
<p
className="text-xs font-bold uppercase tracking-widest mb-1"
style={{ color: "#14B8A6" }}
>
{benefit}
</p>
<h3 className="text-white font-semibold text-base mb-2">{title}</h3>
<p className="text-sm leading-relaxed" style={{ color: "rgba(148,163,184,0.85)" }}>
{description}
</p>
</div>
);
}
return (
<div className={`relative rounded-xl p-6 ${comingSoon ? "opacity-50" : "feature-card-light"}`}>
{comingSoon && (
<div
className="absolute top-4 right-4 flex items-center gap-1.5 px-2 py-0.5 rounded-full"
style={{
background: "rgba(15,118,110,0.08)",
border: "1px solid rgba(15,118,110,0.2)",
}}
>
<Clock className="w-3 h-3" style={{ color: "#64748B" }} aria-hidden="true" />
<span className="text-[10px] font-medium" style={{ color: "#64748B" }}>
Coming Soon
</span>
</div>
)}
<div
className="w-10 h-10 rounded-lg flex items-center justify-center mb-4"
style={{ background: "rgba(15,118,110,0.08)", border: "1px solid rgba(15,118,110,0.15)" }}
>
<Icon className="w-5 h-5" style={{ color: "#0F766E" }} aria-hidden="true" />
</div>
<p
className="text-xs font-bold uppercase tracking-widest mb-1"
style={{ color: "#0F766E" }}
>
{benefit}
</p>
<h3 className="font-semibold text-base mb-2" style={{ color: "#1E293B" }}>
{title}
</h3>
<p className="text-sm leading-relaxed" style={{ color: "#64748B" }}>
{description}
</p>
</div>
);
}