import { type ReactElement } from "react"; import { LogIn, LogOut, MessageSquareReply, UserPlus, CheckCircle2, } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { cn } from "@/lib/utils"; /** * Email Marketing primitives — WealthX DS * * Atomic building blocks for the Email Marketing Hub (BUILD-2282): campaign * and drip status, and drip trigger conditions. Used inside * CampaignSummaryCard, DripStepCard, CampaignList and DripSequenceBuilder. */ // --------------------------------------------------------------------------- // EmailStatusBadge // --------------------------------------------------------------------------- export type EmailStatus = | "scheduled" | "sending" | "sent" | "paused" | "active" | "ended" /** The campaign's own setup is broken — terminal, and only deletable. */ | "error"; const STATUS_CONFIG: Record< EmailStatus, { label: string; variant: "secondary" | "info" | "warning" | "success" | "outline" | "destructive"; } > = { scheduled: { label: "Scheduled", variant: "info" }, sending: { label: "Sending", variant: "warning" }, sent: { label: "Sent", variant: "success" }, paused: { label: "Paused", variant: "outline" }, active: { label: "Active", variant: "success" }, ended: { label: "Ended", variant: "secondary" }, error: { label: "Error", variant: "destructive" }, }; export interface EmailStatusBadgeProps { status: EmailStatus; className?: string; } /** Status badge for a campaign or drip — draft/scheduled/sending/sent/paused/active/ended. */ export function EmailStatusBadge({ status, className, }: EmailStatusBadgeProps): ReactElement { const config = STATUS_CONFIG[status]; return ( {config.label} ); } // --------------------------------------------------------------------------- // EmailTriggerChip // --------------------------------------------------------------------------- export type EmailTriggerKind = | "contact-added" | "stage-enter" | "stage-exit" | "reply" | "completed"; const TRIGGER_ICON: Record = { "contact-added": UserPlus, "stage-enter": LogIn, "stage-exit": LogOut, reply: MessageSquareReply, completed: CheckCircle2, }; export interface EmailTriggerChipProps { kind: EmailTriggerKind; /** e.g. "Client enters stage: Leads" or "Replies to any step email". */ label: string; className?: string; } /** Icon + label chip describing a drip start/end trigger condition. */ export function EmailTriggerChip({ kind, label, className, }: EmailTriggerChipProps): ReactElement { const Icon = TRIGGER_ICON[kind]; return ( {label} ); }