sitcod3 commited on
Commit
d914040
·
verified ·
1 Parent(s): 4897492

Upload src/components/StatusBadge.tsx with huggingface_hub

Browse files
Files changed (1) hide show
  1. src/components/StatusBadge.tsx +83 -0
src/components/StatusBadge.tsx ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { ReactNode } from "react";
2
+ import { cn } from "../utils/cn";
3
+
4
+ interface StatusBadgeProps {
5
+ status: string;
6
+ className?: string;
7
+ size?: "sm" | "md";
8
+ }
9
+
10
+ export default function StatusBadge({ status, className, size = "md" }: StatusBadgeProps) {
11
+ const normalized = (status || "").toUpperCase();
12
+
13
+ let colorClasses = "bg-zinc-800 text-zinc-300 border-zinc-700";
14
+ let dotColor = "bg-zinc-400";
15
+ let pulse = false;
16
+
17
+ switch (normalized) {
18
+ case "ACTIVE":
19
+ case "CONNECTED":
20
+ case "EXCELLENT":
21
+ case "INTERESTED":
22
+ case "MEETING_BOOKED":
23
+ colorClasses = "bg-emerald-500/10 text-emerald-400 border-emerald-500/20";
24
+ dotColor = "bg-emerald-400 shadow-[0_0_8px_rgba(63,156,132,0.6)]";
25
+ pulse = true;
26
+ break;
27
+
28
+ case "PAUSED":
29
+ case "GOOD":
30
+ case "REPLIED":
31
+ case "RECONNECTING":
32
+ case "WARMING":
33
+ colorClasses = "bg-amber-500/10 text-amber-400 border-amber-500/20";
34
+ dotColor = "bg-amber-400 shadow-[0_0_8px_rgba(194,160,74,0.6)]";
35
+ break;
36
+
37
+ case "STOPPED":
38
+ case "ERROR":
39
+ case "POOR":
40
+ case "BOUNCED":
41
+ case "NOT_INTERESTED":
42
+ case "UNSUBSCRIBED":
43
+ case "DO_NOT_CONTACT":
44
+ colorClasses = "bg-rose-500/10 text-rose-400 border-rose-500/20";
45
+ dotColor = "bg-rose-400 shadow-[0_0_8px_rgba(203,117,80,0.6)]";
46
+ break;
47
+
48
+ case "MEETING_DONE":
49
+ case "COMPLETED":
50
+ colorClasses = "bg-indigo-500/10 text-indigo-400 border-indigo-500/20";
51
+ dotColor = "bg-indigo-400";
52
+ break;
53
+
54
+ default:
55
+ colorClasses = "bg-zinc-800/80 text-zinc-300 border-zinc-700";
56
+ dotColor = "bg-zinc-400";
57
+ break;
58
+ }
59
+
60
+ const formatText = (text: string) => {
61
+ return text.replace(/_/g, " ");
62
+ };
63
+
64
+ return (
65
+ <span
66
+ className={cn(
67
+ "inline-flex items-center gap-1.5 font-medium rounded-full border transition-all",
68
+ size === "sm" ? "px-2 py-0.5 text-[11px]" : "px-2.5 py-1 text-xs",
69
+ colorClasses,
70
+ className
71
+ )}
72
+ >
73
+ <span
74
+ className={cn(
75
+ "w-1.5 h-1.5 rounded-full shrink-0",
76
+ dotColor,
77
+ pulse && "animate-pulse"
78
+ )}
79
+ />
80
+ <span className="capitalize">{formatText(status)}</span>
81
+ </span>
82
+ );
83
+ }