File tree Expand file tree Collapse file tree 2 files changed +96
-0
lines changed
Expand file tree Collapse file tree 2 files changed +96
-0
lines changed Original file line number Diff line number Diff line change 1+ "use client"
2+
3+ import { Button } from "@/components/ui/button"
4+ import { Card } from "@/components/ui/card"
5+ import { AlertCircle } from "lucide-react"
6+
7+ export default function Error ( {
8+ error,
9+ reset,
10+ } : {
11+ error : Error & { digest ?: string }
12+ reset : ( ) => void
13+ } ) {
14+ return (
15+ < div className = "min-h-screen w-full flex items-center justify-center bg-gray-50" >
16+ < Card className = "w-full max-w-md p-6 bg-white shadow-lg" >
17+ { /* Icône d'erreur */ }
18+ < div className = "flex justify-center mb-6" >
19+ < AlertCircle className = "h-12 w-12 text-red-500 animate-pulse" />
20+ </ div >
21+
22+ { /* Titre */ }
23+ < h2 className = "text-xl font-semibold text-gray-800 mb-4 text-center" >
24+ { "Une erreur est survenue" }
25+ </ h2 >
26+
27+ { /* Message d'erreur */ }
28+ < p className = "text-gray-600 text-center mb-6" >
29+ { "Une erreur est survenue pendant l'analyse." }
30+ { error ?. message && (
31+ < span className = "block mt-2 text-sm text-gray-500" >
32+ Détail: { error . message }
33+ </ span >
34+ ) }
35+ </ p >
36+
37+ { /* Boutons d'action */ }
38+ < div className = "flex flex-col sm:flex-row gap-4 justify-center" >
39+ < Button
40+ onClick = { ( ) => reset ( ) }
41+ className = "bg-green-600 hover:bg-green-700 text-white"
42+ >
43+ { "Réessayer" }
44+ </ Button >
45+ < Button
46+ onClick = { ( ) => ( window . location . href = "/" ) }
47+ variant = "outline"
48+ className = "border-green-600 text-green-600 hover:bg-green-50"
49+ >
50+ { "Retour à l'accueil" }
51+ </ Button >
52+ </ div >
53+ </ Card >
54+ </ div >
55+ )
56+ }
Original file line number Diff line number Diff line change 1+ import { Card } from "@/components/ui/card"
2+
3+ export default function Loading ( ) {
4+ return (
5+ < div className = "min-h-screen w-full flex items-center justify-center bg-gray-50" >
6+ < Card className = "w-full max-w-md p-6 bg-white shadow-lg relative overflow-hidden" >
7+ { /* Barre de progression animée */ }
8+ < div className = "h-1 w-full bg-gray-100 mb-6 overflow-hidden" >
9+ < div
10+ className = "h-full bg-green-500 w-full animate-[shimmer_2s_infinite]
11+ relative before:absolute before:inset-0
12+ before:translate-x-[-100%] before:bg-gradient-to-r
13+ before:from-transparent before:via-green-500 before:to-transparent
14+ before:animate-[shimmer_2s_infinite]"
15+ />
16+ </ div >
17+
18+ { /* Titre */ }
19+ < h2 className = "text-xl font-semibold text-gray-800 mb-4" >
20+ { "Calcul d'éco-conception en cours" }
21+ </ h2 >
22+
23+ { /* Indicateur de chargement rotatif */ }
24+ < div className = "flex justify-center mb-6" >
25+ < div className = "w-12 h-12 border-4 border-green-200 border-t-green-500 rounded-full animate-spin" />
26+ </ div >
27+
28+ { /* Message */ }
29+ < p className = "text-gray-600 text-center" >
30+ { "Cette analyse peut prendre jusqu'à une minute." }
31+ < br />
32+ { "Merci de patienter..." }
33+ </ p >
34+
35+ { /* Effet de pulsation */ }
36+ < div className = "absolute inset-0 bg-green-100 opacity-20 animate-pulse" />
37+ </ Card >
38+ </ div >
39+ )
40+ }
You can’t perform that action at this time.
0 commit comments