scalesite/components/checkout/checkout-steps.tsx
bast1qn 98552163a8 Initial ScaleSite Next.js implementation
Complete frontend implementation with:
- Next.js 16 with App Router and TypeScript
- Tailwind CSS v4 with custom violet theme
- shadcn/ui components with Lucide React icons
- Landing page with hero, services, pricing, testimonials, FAQ
- Service selection page with toggle
- Login/Register pages with social auth UI
- Multi-step checkout flow
- Client dashboard with stats, projects, support tickets
- Billing page with subscription, payment methods, invoices
- All mock data and TypeScript types

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 21:42:48 +01:00

55 lines
1.7 KiB
TypeScript

import Link from 'next/link'
interface CheckoutStepsProps {
currentStep: 'account' | 'billing' | 'payment'
}
const steps = [
{ id: 'account', label: 'Account' },
{ id: 'billing', label: 'Billing' },
{ id: 'payment', label: 'Payment' },
]
export function CheckoutSteps({ currentStep }: CheckoutStepsProps) {
const currentIndex = steps.findIndex((s) => s.id === currentStep)
return (
<div className="flex items-center justify-center mb-12">
<div className="flex items-center gap-4">
{steps.map((step, index) => (
<div key={step.id} className="flex items-center">
{index > 0 && (
<div
className={`w-12 h-0.5 ${
index <= currentIndex ? 'bg-primary' : 'bg-border'
}`}
/>
)}
<Link
href={index <= currentIndex ? `/checkout?step=${step.id}` : '#'}
className={`flex items-center justify-center w-10 h-10 rounded-full text-sm font-bold transition-colors ${
index === currentIndex
? 'bg-primary text-white'
: index < currentIndex
? 'bg-primary/20 text-primary'
: 'bg-card border border-border text-muted-foreground'
}`}
>
{index < currentIndex ? '✓' : index + 1}
</Link>
<span
className={`ml-2 text-sm font-medium ${
index === currentIndex
? 'text-foreground'
: 'text-muted-foreground'
}`}
>
{step.label}
</span>
</div>
))}
</div>
</div>
)
}