← Back to DWS Receipts
UI built with shadcn/ui (52 components) plus 12 custom app components.
All in components/ui/
| Component | Purpose |
|---|
button.tsx | Buttons with variants |
input.tsx | Text input |
textarea.tsx | Multi-line input |
checkbox.tsx | Checkbox |
switch.tsx | Toggle switch |
select.tsx | Dropdown select |
calendar.tsx | Date picker |
input-otp.tsx | OTP code input |
| Component | Purpose |
|---|
card.tsx | Card container |
table.tsx | Data table |
tabs.tsx | Tab navigation |
separator.tsx | Divider |
scroll-area.tsx | Scrollable area |
aspect-ratio.tsx | Aspect ratio container |
| Component | Purpose |
|---|
dialog.tsx | Modal dialog (desktop) |
drawer.tsx | Bottom sheet (mobile) |
alert-dialog.tsx | Confirmation dialog |
popover.tsx | Popover overlay |
tooltip.tsx | Tooltip |
sheet.tsx | Side panel |
| Component | Purpose |
|---|
dropdown-menu.tsx | Dropdown menu |
pagination.tsx | Pagination controls |
breadcrumb.tsx | Breadcrumb nav |
| Component | Purpose |
|---|
badge.tsx | Status badge |
alert.tsx | Alert message |
sonner.tsx | Toast notifications |
skeleton.tsx | Loading skeleton |
progress.tsx | Progress bar |
| Hook | Purpose |
|---|
use-toast.ts | Toast state |
use-mobile.tsx | Mobile detection |
| Component | Purpose |
|---|
receipt-dashboard.tsx | Admin dashboard view |
receipt-table.tsx | Admin receipt table |
employee-receipt-table.tsx | Employee receipt table |
receipt-uploader.tsx | Upload + OCR flow |
receipt-details-card.tsx | Edit/confirm form |
| Component | Purpose |
|---|
batch-review-dashboard.tsx | Batch approval UI |
| Component | Purpose |
|---|
user-management-dashboard.tsx | User admin view |
user-table.tsx | User list table |
user-form-modal.tsx | Create/edit user |
ban-user-dialog.tsx | Ban confirmation |
| Component | Purpose |
|---|
date-range-picker.tsx | Date range selection |
providers/query-provider.tsx | React Query provider |
Mobile uses Drawer (bottom sheet), desktop uses Dialog (centered modal).
<Drawer open={open} onOpenChange={setOpen}>
<ReceiptDetailsCard ... />
<Dialog open={open} onOpenChange={setOpen}>
<ReceiptDetailsCard ... />
Used in: receipt-uploader.tsx, employee-receipt-table.tsx
className="text-xs sm:text-sm"
className="px-1.5 sm:px-2"
<Icon size={isMobile ? 14 : 16} />
Mobile uses native <input type="date"> for better UX:
<input type="date" value={format(date, 'yyyy-MM-dd')} ... />
App uses dark theme throughout.
Background: bg-[#222222]
Cards: bg-[#2e2e2e]
Borders: border-[#444444]
Status badge colors use dark variants:
- Pending:
bg-yellow-900/30 text-yellow-300
- Approved:
bg-green-900/30 text-green-300
- Rejected:
bg-red-900/30 text-red-300
- Reimbursed:
bg-blue-900/30 text-blue-300