11import { Badge } from "@ux-patterns/ui/components/shadcn/badge" ;
2+ import { Gauge , Rocket , Zap } from "lucide-react" ;
23import { cn } from "@/lib/cn" ;
34
45type BuildEffortProps = {
@@ -9,42 +10,102 @@ type BuildEffortProps = {
910export const BuildEffort = ( { level, description } : BuildEffortProps ) => {
1011 const effortConfig = {
1112 low : {
12- label : "Low" ,
13- icon : "🟢" ,
14- className :
15- "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-100" ,
13+ label : "Low Complexity" ,
14+ icon : Zap ,
15+ bgGradient :
16+ "from-blue-50 to-indigo-50 dark:from-blue-950/30 dark:to-indigo-950/30" ,
17+ borderColor : "border-blue-200 dark:border-blue-800" ,
18+ iconColor : "text-blue-500 dark:text-blue-400" ,
19+ badgeClass :
20+ "bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300 border-blue-200 dark:border-blue-700" ,
21+ progressWidth : "w-1/3" ,
1622 } ,
1723 medium : {
18- label : "Medium" ,
19- icon : "🟡" ,
20- className :
21- "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-100" ,
24+ label : "Medium Complexity" ,
25+ icon : Gauge ,
26+ bgGradient :
27+ "from-amber-50 to-orange-50 dark:from-amber-950/30 dark:to-orange-950/30" ,
28+ borderColor : "border-amber-200 dark:border-amber-800" ,
29+ iconColor : "text-amber-500 dark:text-amber-400" ,
30+ badgeClass :
31+ "bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300 border-amber-200 dark:border-amber-700" ,
32+ progressWidth : "w-2/3" ,
2233 } ,
2334 high : {
24- label : "High" ,
25- icon : "🔴" ,
26- className : "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-100" ,
35+ label : "High Complexity" ,
36+ icon : Rocket ,
37+ bgGradient :
38+ "from-rose-50 to-red-50 dark:from-rose-950/30 dark:to-red-950/30" ,
39+ borderColor : "border-rose-200 dark:border-rose-800" ,
40+ iconColor : "text-rose-500 dark:text-rose-400" ,
41+ badgeClass :
42+ "bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300 border-rose-200 dark:border-rose-700" ,
43+ progressWidth : "w-full" ,
2744 } ,
2845 } [ level ] ;
2946
47+ const Icon = effortConfig . icon ;
48+
3049 return (
31- < div className = "border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-900 mt-4 p-6 rounded-lg" >
32- < div className = "space-y-4" >
33- < div className = "flex items-center justify-between" >
34- < span className = "text-lg font-semibold tracking-tight" >
35- Build Effort
36- </ span >
37- < Badge
38- className = { cn ( "px-3 py-1 font-medium" , effortConfig . className ) }
39- aria-label = { `Effort level: ${ effortConfig . label } ` }
50+ < div
51+ className = { cn (
52+ "relative mt-8 mb-8 rounded-xl overflow-hidden" ,
53+ "border" ,
54+ effortConfig . borderColor ,
55+ "bg-gradient-to-br" ,
56+ effortConfig . bgGradient ,
57+ ) }
58+ >
59+ { /* Decorative pattern */ }
60+ < div className = "absolute inset-0 opacity-5" >
61+ < svg className = "w-full h-full" xmlns = "http://www.w3.org/2000/svg" >
62+ < defs >
63+ < pattern
64+ id = "build-pattern"
65+ x = "0"
66+ y = "0"
67+ width = "20"
68+ height = "20"
69+ patternUnits = "userSpaceOnUse"
70+ >
71+ < rect x = "0" y = "0" width = "1" height = "20" fill = "currentColor" />
72+ < rect x = "0" y = "0" width = "20" height = "1" fill = "currentColor" />
73+ </ pattern >
74+ </ defs >
75+ < rect width = "100%" height = "100%" fill = "url(#build-pattern)" />
76+ </ svg >
77+ </ div >
78+
79+ < div className = "relative px-4 py-3" >
80+ < div className = "flex items-center gap-3" >
81+ < div
82+ className = { cn (
83+ "flex h-10 w-10 items-center justify-center rounded-md" ,
84+ "bg-white/60 dark:bg-black/20 backdrop-blur-sm" ,
85+ "border border-white/50 dark:border-white/10" ,
86+ ) }
4087 >
41- < span className = "mr-1.5" > { effortConfig . icon } </ span >
42- { effortConfig . label }
43- </ Badge >
88+ < Icon className = { cn ( "h-5 w-5" , effortConfig . iconColor ) } />
89+ </ div >
90+
91+ < div className = "flex-1" >
92+ < div className = "flex items-center justify-between gap-4" >
93+ < span className = "text-xs font-medium text-muted-foreground uppercase tracking-wider" >
94+ Build Effort
95+ </ span >
96+ < Badge
97+ variant = "outline"
98+ className = { cn ( "text-xs" , effortConfig . badgeClass ) }
99+ >
100+ { effortConfig . label }
101+ </ Badge >
102+ </ div >
103+
104+ < p className = "text-sm text-muted-foreground leading-relaxed mt-1 mb-0" >
105+ { description }
106+ </ p >
107+ </ div >
44108 </ div >
45- < p className = "text-sm text-gray-600 dark:text-gray-300 leading-relaxed mb-0" >
46- { description }
47- </ p >
48109 </ div >
49110 </ div >
50111 ) ;
0 commit comments