Component Inventory
Component Inventory
Project:
{{PROJECT_NAME}}Drop — Fintech Payment App Version:{{VERSION}}0.1.0 Date:{{DATE}}2026-02-23 Author:{{AUTHOR}}John (AI Director, ALAI) Status:Draft |In Review| ApprovedReviewers:{{REVIEWERS}}Alem Bašić (CEO)
Document History
| Version | Date | Author | Changes |
|---|---|---|---|
| 0.1 | Initial draft from source code analysis (src/drop-app/src/) |
1. Overview
All file paths are relative to src/drop-app/src/.
Total custom components: {{N}}13 (including sub-exports)
Libraryshadcn/ui location:components: 14
src/components/Storybook:Custom icons: {{https://storybook.PROJECT_NAME.example.com}}
Design source: {{Figma file URL}}
Owner team: {{TEAM_NAME}}
This inventory tracks every reusable component in {{PROJECT_NAME}}. It follows Atomic Design categorization: atoms → molecules → organisms → templates → pages.9
2.1. ComponentCustom Hierarchy DiagramComponents
BottomNav
graph
TB
subgraph Pages
PageLogin["LoginPage"]
PageDashboard["DashboardPage"]
end
subgraph Templates
TplAuth["AuthLayout"]
TplApp["AppLayout"]
end
subgraph Organisms
OrgNavbar["Navbar"]
OrgSidebar["Sidebar"]
OrgDataTable["DataTable"]
OrgUserForm["UserForm"]
end
subgraph Molecules
MolFormField["FormField"]
MolCard["Card"]
MolSearchBar["SearchBar"]
MolDropdown["Dropdown"]
MolPagination["Pagination"]
end
subgraph Atoms
AtomButton["Button"]
AtomInput["Input"]
AtomBadge["Badge"]
AtomSpinner["Spinner"]
AtomAvatar["Avatar"]
AtomIcon["Icon"]
end
Pages --> Templates
Templates --> Organisms
Organisms --> Molecules
Molecules --> Atoms
components/bottom-nav.tsxusePathname() for active state detection. Active tab: text-[#0B6E35], inactive: text-[#9CA3AF]. Fixed to h-16
border-t 3.bg-white
.3.1 Button
| Icon | ||
|---|---|---|
| Home (lucide) | ||
| Clock (lucide) | ||
/scan |
IconQrScan (custom) | |
/accounts |
Landmark (lucide) | |
|
User |
- Used in: dashboard, accounts, history, profile, scan, notifications pages
- Requirements: Pages using BottomNav must add
pb-24to content container
DropLogo
- File:
components/drop-logo.tsx(line 5) - Export:
DropLogo - Props:
{ size?: number; className?: string }(LogoProps) - Description: Forward-D SVG mark — letter "d" with stem sweeping into gold arrow. Default size 40.
- Colors:
#0B6E35(green body),#D4A017(gold arrow) - Used in: dashboard page header
DropWordmark
- File:
components/drop-logo.tsx(line 30) - Export:
DropWordmark - Props:
{ size?: number; className?: string }(LogoProps) - Description: Text "drop" (always lowercase) rendered in Fraunces font, bold, color
#1A1A1A. Default size 24 (font-size). - Logo rules: Always lowercase "drop" — never "Drop" or "DROP" in logo context
DropLogoFull
- File:
components/drop-logo.tsx(line 44) - Export:
DropLogoFull - Props:
{ size?: number; className?: string }(LogoProps) - Description: Combines DropLogo mark + DropWordmark side by side. Default size 40.
- Used in:
/(marketing page) header
DropAppIcon
- File:
components/drop-logo.tsx(line 57) - Export:
DropAppIcon - Props:
{ size?: number; className?: string }(LogoProps) - Description: App icon — rounded green square with dollar sign and circular arrows. Default size 64.
- Used in:
/(marketing page), favicon/app launcher
CookieConsent
- File:
components/cookie-consent.tsx - Props: None (self-contained)
- Description: GDPR cookie consent banner and modal. Manages localStorage consent preferences:
necessary,analytics,marketing. Shows banner on first visit. "Tilpass" button opens modal for granular control. Saves consent to/api/consentsendpoint. - State:
visible,showModal,preferences: CookiePreferences - Components used:
X(lucide), Dialog components - Storage: localStorage key for consent preferences
- Used in: Root layout (
app/layout.tsx) - Compliance: GDPR — required for all EU users
PrePaymentDisclosure
- File:
components/pre-payment-disclosure.tsx - Props:
{ amount: number; fee: number; exchangeRate: number; receiveAmount: number; receiveCurrency: string; estimatedDelivery: string; onConfirm: () => void; onCancel: () => void; } - Description: PSD2-compliant pre-payment disclosure modal for remittance. Shows full breakdown: amount, fee (with %), exchange rate, recipient receives, total cost, estimated delivery. Explicit confirm/cancel buttons. Norwegian language.
- Components used:
Info(lucide) - Used in:
/sendpage (remittance flow, step before confirmation) - Compliance: PSD2 PISP — required before initiating payment
PWARegister
- File:
components/pwa-register.tsx - Props: None
- Description: Service Worker registration component. Registers
/sw.json mount. Silent registration (console logs only). Returnsnull(no UI). - Used in: Root layout (
app/layout.tsx)
2. Custom Icons (drop-icons.tsx)
File: components/drop-icons.tsx
interface IconProps {
size?: number; // Default: 24
className?: string;
}
Style: Outlined, 2px stroke, round linecap/linejoin, currentColor fill for theming.
| Default Size | ||||
|---|---|---|---|---|
|
line |
24 |
||
|
scan corners |
24 |
||
|
Credit card outline |
24 |
||
|
Shield with checkmark |
24 |
||
|
Lightning bolt |
24 |
||
|
Globe with meridians |
24 |
||
|
outline |
24 |
||
|
arrow |
24 |
||
|
Plus inside circle |
24 |
3. shadcn/ui Components
Variants & States:Directory: primary, secondary, ghost, danger, link × default, hover, focus, active, disabled, loadingcomponents/ui/
Accessibility:
Dependencies: Icon component, Spinner componentGreen).
3.2 Input
| Radix Primitive | Used In | ||
|---|---|---|---|
ui/alert.tsx |
— (div-based) | Accounts page (PSD2 info banner) | |
|
@radix-ui/react-avatar | Profile pages | |
|
— (cva variants) | Accounts (isPrimary), Security (2FA status) | |
|
Props API:
|
@radix-ui/react-slot |
| All |||
Card |
|
— (div-based) | |||
| Dialog | |
@radix-ui/react-dialog |
|||
| Input | |
— (input element) |
| ||
| ScrollArea | |
@radix-ui/react-scroll-area |
| Dashboard ||
| Select | |
@radix-ui/react-select |
| Complaints, ||
| Separator | |
@radix-ui/react-separator |
| |
|
| Sheet | |
@radix-ui/react-dialog |
| Side ||
| Skeleton | |
— (pulse animation) |
| Loading ||
| Sonner | |
library |
| Toast
Variants & States: default, focused, error, disabled, with-left-icon, with-right-icon
Accessibility:
Must always be paired with<label>(use FormField molecule)Error:aria-invalid="true"+aria-describedbypointing to error message idPassword: toggle visibility button must havearia-label
3.3 Badge
| |
|
Props API:
@radix-ui/react-tabs |
| | ||
| | | ||
| | | ||
| |
TODO: Add remaining atom components following the same pattern (Select, Checkbox, Radio, Toggle, Textarea, Avatar, Tooltip, Spinner, Divider).
4. Molecules (Composite Components)
4.1 FormField
| |
| |
Props API:
| | |||
| | |||
| | | ||
| | | ||
| | | ||
| |
Accessibility: Label always associated with input via htmlFor/id pair.
4.2 Card
| |
|
Props API:
| | | ||
| | | ||
| | | ||
| |
Sub-components: Card.Header, Card.Body, Card.Footer
TODO: Add remaining molecule components: Modal, Dropdown, Table, Pagination, Toast, SearchBar, Breadcrumb, Tabs, Accordion, DatePicker.
5. Organisms (Complex Components)
5.1 DataTable
| |
| |
Features:
Sortable columns (client + server-side)Pagination (configurableTransactions pagesizes)Row selection(single + multi)Column visibility toggleExport action slotLoading skeleton stateEmpty state slotRow action slot (per-row dropdown)
TODO: Document full props API for DataTable.
5.2 Navigation / Sidebar
| |
|
TODO: Add remaining organism components.
6. Shared Hooks / Composables Inventory
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| | | filters) |
7.4. Third-PartyExternal ComponentDependencies Usage(UI-Related)
| Package | Version | ||
|---|---|---|---|
|
Latest |
library — |
|
|
Next.js 15 | Image optimization | |
|
|||
next/navigation |
Next.js 15 | useRouter, |
|
|
Latest |
cva) |
|
|
Latest | Class name conditional merging | |
|
|||
|
Latest | Headless UI primitives (via shadcn) | |
sonner |
Latest | Toast notification library |
Policy: Never use third-party components directly in feature code — always wrap in local component to control API surface and allow future swap.
8.5. Page-Level Component DeprecationUsage ProcessMap
Active → Deprecated (soft) → Deprecated (hard) → Removed
/ ( |
DropAppIcon, |
/login |
Input |
/register |
|
/dashboard |
DropLogo, BottomNav, ScrollArea, Bell, LogOut (lucide) |
/accounts |
BottomNav, Card, ArrowLeft, Landmark, Plus, ChevronRight (lucide), Alert |
/transactions |
BottomNav, Tabs, TabsList, TabsTrigger, ArrowLeft, Clock (lucide) |
/scan |
BottomNav, Button, ArrowLeft, Camera, Check, X, Store (lucide) |
/send |
Button, PrePaymentDisclosure, ArrowLeft, ArrowRight, Check, ChevronDown, Globe, User (lucide) |
/profile |
BottomNav, ArrowLeft, ChevronRight, LogOut, Settings, Shield, HelpCircle, Bell, CreditCard, Landmark (lucide) |
/profile/personal |
BottomNav, ChevronLeft, ShieldCheck (lucide) |
/profile/security |
BottomNav, ChevronLeft, ChevronRight, Lock, Smartphone, Laptop (lucide) |
/profile/notifications |
BottomNav, ChevronLeft, Bell, Mail (lucide) |
/profile/language |
BottomNav, ChevronLeft, Check (lucide) |
/notifications |
BottomNav, ArrowLeft, Bell, ArrowUpRight, ScanLine, Smartphone, TrendingUp (lucide) |
/cards |
Button, Dialog (feature-flagged — all flags false by default) |
/complaints |
MessageSquare, CheckCircle, ChevronLeft, ExternalLink (lucide) |
/withdrawal |
ChevronLeft, RotateCcw, CheckCircle (lucide) |
/fees |
ChevronLeft, Receipt (lucide) |
/privacy |
ChevronLeft, Shield (lucide) |
/terms |
ChevronLeft, FileText (lucide) |
Deprecation
notice6. Component Standards
Naming Conventions
DropLogoFull, BottomNav, PrePaymentDisclosure)Icon prefix + domain name (IconSendMoney, IconQrScan)Button, Dialog, Tabs)File Organization
drop-logo.tsx which exports 4 related logo variants)drop-icons.tsxcomponents/ui/ directoryAccessibility Baseline
44×44px focus:ring-[#0B6E35])period:2(buttons sprinth-12 cycles= before48px, hardinputs removal.
h-11 TODO:= Link44px)
to
aria-hidden="true" aria-label when meaningful<label> elementsApproval
| Role | Name | Date | Signature |
|---|---|---|---|
| Author | John (AI Director) | 2026-02-23 | |
| Frontend Lead | |||