// src/app/(dashboard)/billing/page.tsx 'use client'; import { useState } from 'react'; import { Search, Filter, Plus } from 'lucide-react'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; import { Badge } from '@/components/ui/Badge'; // Mock data matching your design const invoices = [ { id: '#123456', patient: 'Ali Rahmani', date: '24/9/2026', service: 'Hygiene', amount: 300, paid: 0, status: 'unpaid' }, { id: '#123457', patient: 'Neda Akbari', date: '01/10/2026', service: 'Filling', amount: 700, paid: 400, status: 'overdue' }, { id: '#123458', patient: 'Nima Haghi', date: '09/12/2026', service: 'Extraction', amount: 450, paid: 450, status: 'paid' }, ]; const statusColors = { paid: 'success', unpaid: 'warning', overdue: 'danger', } as const; type StatCardColor = 'blue' | 'yellow' | 'green' | 'red'; interface StatCardProps { title: string; count: number; amount: number; color: StatCardColor; } export default function BillingPage() { const [search, setSearch] = useState(''); const [statusFilter, setStatusFilter] = useState('all'); const stats = { total: { count: 235, amount: 80900 }, unpaid: { count: 30, amount: 2800 }, paid: { count: 190, amount: 80900 }, overdue: { count: 235, amount: 80900 }, }; return (
{/* Header */}

Billing

{/* Stats Cards - Matching your design */}
{/* Filters */}
setSearch(e.target.value)} icon={} />
{['all', 'paid', 'unpaid', 'overdue'].map((status) => ( ))}
{/* Invoices Table - Matching your design */}
{invoices.map((invoice) => ( ))}
Invoice ID Patient name Date Service Total amount Paid Status Action
{invoice.id} {invoice.patient} {invoice.date} {invoice.service} ${invoice.amount} ${invoice.paid} {invoice.status}
{/* Pagination - Matching your design */}
Page 1 of 10
); } function StatCard({ title, count, amount, color }: StatCardProps) { const colors: Record = { blue: 'bg-blue-50 text-blue-700 border-blue-200', yellow: 'bg-yellow-50 text-yellow-700 border-yellow-200', green: 'bg-green-50 text-green-700 border-green-200', red: 'bg-red-50 text-red-700 border-red-200', }; return (

{title}

{count}

${amount.toLocaleString()}

); }