feat: composant SyncStepper
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
'use client'
|
||||
|
||||
const STEPS = [
|
||||
{ id: 1, label: 'Analyse Sheets' },
|
||||
{ id: 2, label: 'Aperçu diff' },
|
||||
{ id: 3, label: 'Confirmation' },
|
||||
{ id: 4, label: 'Synchronisation' },
|
||||
]
|
||||
|
||||
interface SyncStepperProps {
|
||||
currentStep: number // 1–4
|
||||
}
|
||||
|
||||
export function SyncStepper({ currentStep }: SyncStepperProps) {
|
||||
return (
|
||||
<div className="flex items-center gap-0">
|
||||
{STEPS.map((step, i) => {
|
||||
const done = currentStep > step.id
|
||||
const active = currentStep === step.id
|
||||
return (
|
||||
<div key={step.id} className="flex items-center">
|
||||
{i > 0 && (
|
||||
<div className={`h-0.5 w-12 ${done ? 'bg-indigo-500' : 'bg-slate-700'}`} />
|
||||
)}
|
||||
<div className="flex flex-col items-center gap-1">
|
||||
<div
|
||||
className={`w-8 h-8 rounded-full flex items-center justify-center text-xs font-bold transition-colors ${
|
||||
done
|
||||
? 'bg-indigo-500 text-white'
|
||||
: active
|
||||
? 'bg-indigo-600 text-white ring-2 ring-indigo-400'
|
||||
: 'bg-slate-800 text-slate-500 border border-slate-700'
|
||||
}`}
|
||||
>
|
||||
{done ? '✓' : step.id}
|
||||
</div>
|
||||
<span className={`text-xs ${active ? 'text-slate-200 font-semibold' : 'text-slate-500'}`}>
|
||||
{step.label}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user