Component Inventory
BilkoDrop Frontend — Component Inventory
LastAuto-generatedUpdated:from2026-02-20sourceSourcecodeofanalysis.Truth:AllFilesystemfilescanpathsofrelative to.apps/web/components/src/drop-app/src/
LayoutCustom Components
SidebarBottomNav
- File:
components/sidebar.bottom-nav.tsx Purpose:Dark left navigation sidebar with hierarchical menu- Props: None
(uses pathname from Next.js navigation) Features:Description:- Fixed
Expandablebottomsectionsnavigation(Sales, Purchases, Reports)Active link highlighting (primary green border + background)Dark theme (#111113 background)Logo at top ("BILKO" in primary color)Collapsible sub-navigationbar withchevron5iconstabs.
usePathname()for active state detection. Active tab:text-[#0B6E35], inactive:text-[#9CA3AF].- Navigation Items:
DashboardLabel Route Icon Hjem /dashboard Home ( directlucide)link)Sales→Aktivitet Invoices/history Purchases → ExpensesBankingClock ( directlucide)link)Reports→Skann VAT/scan ReportSettingsIconQrScan ( directcustom)link)Kontoer /accounts Landmark (lucide) Profil /profile User (lucide)
State:Used in:Localdashboard,stateaccounts,forhistory,expandedprofile,sectionsscan Dependencies:Lucide icons (ChevronDown, ChevronRight, LayoutDashboard, Receipt, ShoppingCart, Landmark, BarChart3, Settings)pages
TopBarDropLogo
- File:
components/top-bar.tsxdrop-logo.tsx:5 Purpose:Header bar with search, notifications, user menu- Props:
{ size?: number; className?: string }(LogoProps) SVG mark —onMenuClick?:Description:()Forward=>Dvoidcallbackletterfor"d"mobilewithmenustemtogglesweeping into gold arrow. Default size 40. Colors:#0B6E35(green body),#D4A017(gold arrow).
Mobile menu button (hidden on desktop)Mobile logo (hidden on desktop)Search input (placeholder: "Search... (Cmd+K)")Notification bell icon (no badge count yet)User dropdown menu (Profile, Settings, Logout)
UI Components (shadcn/ui)
All components in components/ui/ are from shadcn/ui library (Radix UI primitives + Tailwind).
AvatarDropWordmark
- File:
components/ui/avatar.tsxdrop-logo.tsx:30 Purpose:Props:User{(LogoProps)avatarsize?:withnumber;fallbackclassName?: string }Radix Primitive:Description:@radix-ui/react-avatarText Usage:"drop"Not yet usedrendered incurrentFrauncespagesfont, bold, color#1A1A1A. Default size 24 (ready for user profile)font-size).
BadgeDropLogoFull
- File:
components/ui/badge.tsxdrop-logo.tsx:44 Purpose:Status indicators (draft, sent, paid, overdue, success, warning, etc.)Variants:default, secondary, success, warning, destructiveUsage:Invoice status badgesExpense status badges"Coming Soon" tags on report cardsUser status in settings
- Props:
variant?{ size?:"default"number;|className?:"secondary"string|}"destructive"(LogoProps) - Description:
"outline"Combines|DropLogo"success"mark|+"warning"DropWordmark side by side. Default size 40. Used on marketing/landing pages.
ButtonDropAppIcon
- File:
components/ui/button.tsxdrop-logo.tsx:57 Purpose:Props:Primary{(LogoProps)UIsize?:buttonnumber; className?: string }Variants:Description:default, destructive, outline, secondary, ghost, linkSizes:default, sm, lg,App iconUsage:—Allroundedactiongreenbuttonssquarethroughoutwiththedollar sign and circular arrows. Default size 64. Used as favicon/appRadixlauncherPrimitive:@radix-ui/react-slot(asChild support)icon.
CardCookieConsent
- File:
components/ui/card.cookie-consent.tsx Purpose:Props:Content container with header/content sectionsNoneSub-components: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
Card/api/consents— outer wrapper CardHeader— header sectionCardTitle— title textCardDescription— subtitle/description textCardContent— body contentCardFooter— footer section (not used yet)
endpoint.- 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
Usage:State:- visible,
DashboardshowModal,metricpreferencescardsReport cardsSettings content wrapperBanking account/transaction tables
(CookiePreferences)Shadow:Components used:X (shadow-card0lucide),2pxDialog8pxcomponents- Used
0,in:0,Root0.08))layout
DialogPrePaymentDisclosure
- File:
components/ui/dialog.pre-payment-disclosure.tsx Purpose:Modal dialogsRadix Primitive:Props:@radix-ui/react-dialog{ amount, fee, exchangeRate, receiveAmount, receiveCurrency, estimatedDelivery, onConfirm, onCancel }Sub-components:Description:- PSD2-compliant
pre-paymentDialog— wrapperDialogTrigger— trigger buttonDialogContent—disclosure modalcontentfor remittance.DialogHeader—Showsheaderfullsectionbreakdown: amount,DialogTitle—feemodal(withtitle%), exchangeDialogDescription—rate,modalrecipientdescriptiongets, totalDialogFooter—cost,actionestimatedbuttonsdelivery.
Usage:Components used:Add Customer dialogInfo (invoice wizard)Add Expense dialog
lucide)Overlay:Used in:Black/send50%pageopacity,(remittanceclick-to-closeflow)
Dropdown MenuPWARegister
- File:
components/ui/dropdown-menu.pwa-register.tsx Purpose:Props:Context menus and dropdownsNoneRadix Primitive:Description: Service Worker registration component. Registerson mount. Silent registration (console logs only). Returns null (no UI).@radix-ui/react-dropdown-menu/sw.jsSub-components:Used in:- Root
DropdownMenu— wrapperDropdownMenuTrigger— trigger buttonDropdownMenuContent— menu contentDropdownMenuItem— menu itemDropdownMenuLabel— label textDropdownMenuSeparator— divider
Usage:Invoice row actions (view, edit, send, download, delete)User menu in top bar
Shadow:shadow-dropdown(0 4px 16px rgba(0, 0, 0, 0.10))
Input
File:components/ui/input.tsxPurpose:Text input fieldTypes Supported:text, email, number, date, searchUsage:All form inputs (invoice wizard, expense form, settings)Search inputs (invoice list, expense list)Filter inputs
Styling:Border, padding, focus ring (primary color)
Label
File:components/ui/label.tsxPurpose:Form field labelsRadix Primitive:@radix-ui/react-labelUsage:All form field labelsAccessibility:Proper label-input association
Select
File:components/ui/select.tsxPurpose:Dropdown select inputRadix Primitive:@radix-ui/react-selectSub-components:Select— wrapperSelectTrigger— trigger buttonSelectValue— selected value displaySelectContent— dropdown contentSelectItem— option item
Usage:Status filters (invoices, expenses)Date range filtersCurrency selectorsCategory selectorsSettings dropdowns
Styling:Chevron icon, border, focus ring
Separator
File:components/ui/separator.tsxPurpose:Visual divider lineRadix Primitive:@radix-ui/react-separatorOrientations:horizontal, verticalUsage:Not heavily used yet (potential in settings/forms)
Sheet
File:components/ui/sheet.tsxPurpose:Slide-out panel (mobile sidebar alternative)Radix Primitive:@radix-ui/react-dialog(styled as sheet)Usage:Not yet used (potential for mobile sidebar instead of overlay)Direction:Can slide from left/right/top/bottom
Skeleton
File:components/ui/skeleton.tsxPurpose:Loading placeholderUsage:Not yet used (ready for loading states)Animation:Pulse animationFuture Use:Data fetching loading states
Table
File:components/ui/table.tsxPurpose:Data tableSub-components:Table— wrapperTableHeader— header sectionTableBody— body sectionTableRow— rowTableHead— header cellTableCell— data cellTableCaption— caption text (not used)TableFooter— footer section (not used)
Usage:Invoice listExpense listBank transactionsVAT transactionsRecent transactions (dashboard)Settings (users, integrations)
Styling:Border, alternating row hover
Tabs
File:components/ui/tabs.tsxPurpose:Tab navigationRadix Primitive:@radix-ui/react-tabsSub-components:Tabs— wrapperTabsList— tab button containerTabsTrigger— tab buttonTabsContent— tab panel
Usage:Banking page (Accounts, Reconcile, Transactions)VAT Report (Reconciliation, Audit, Summary)
Styling:Primary underline for active tab
Textarea
File:components/ui/textarea.tsxPurpose:Multi-line text inputUsage:Invoice notes (customization step)Invoice terms (customization step)Email message (send step)Expense description (optional)
Rows:Configurable (default: 3-6 rows)layout
ChartCustom ComponentsIcons (drop-icons.tsx)
ChartsFile: arecomponents/drop-icons.tsx
builtShared Props Interface: IconProps { size?: number; className?: string }
Style: Outlined, 2px stroke, round linecap/linejoin, currentColor fill for theming.
| Export | Description | Default Size | Notes |
|---|---|---|---|
| IconSendMoney | Arrow going up-right from horizontal line | 24 | |
| IconQrScan | QR code frame with |
24 | |
| IconVirtualCard | Credit
|
24 | |
| IconShield | Shield with checkmark | 24 | |
| IconFastTransfer | Lightning bolt | 24 | |
| IconCorridors | Globe with meridians | 24 | |
| IconWallet | Wallet outline | 24 | Unused — |
| IconHistory | Clock with arrow | 24 | |
| IconTopUp | Plus inside circle | 24 | Unused — |
Utility Components
cn (lib/utils.ts)
Purpose:Utility function for conditional class namesUsage:cn("base-class", condition && "conditional-class")Dependencies:clsx+tailwind-merge
Page-Specificshadcn/ui Components
None.Directory: components/ui/
All components are reusablestandard shadcn/ui componentsprimitives built on Radix UI. Styled via Tailwind + layoutCSS components.variables Nodefined page-specificin components exist yet.globals.css.
Potential future page-specific components:
InvoicePreview (extracted from wizard step 5)MetricCard (extracted from dashboard)TransactionRow (extracted from dashboard/banking)ExpenseFormDialog (extracted from expenses page)
Component Usage Map
| Component | ||
|---|---|---|
| Alert | ui/alert.tsx |
— (div-based) |
| Avatar | ui/avatar.tsx |
@radix-ui/react-avatar |
| Badge | ui/badge.tsx |
— (span-based, cva variants) |
| Button | ui/button.tsx |
|
| Card | ui/card.tsx |
|
ui/dialog.tsx |
||
| Input | ui/input.tsx |
|
| ScrollArea | ui/scroll-area.tsx |
@radix-ui/react-scroll-area |
| Select | ui/select.tsx |
|
ui/separator.tsx |
||
ui/sheet.tsx |
||
ui/skeleton.tsx |
||
| Sonner | ui/sonner.tsx |
sonner (toast library) |
| Tabs | ui/tabs.tsx |
|
NotesExternal Dependencies (UI-related)
AllUIcomponentsPackage areUsage fromshadcn/uilucide-react Icon library ( noMail,customLock,variantsEye,yet)EyeOff, CreditCard,NoArrowRight,phantomHome,componentsClock,—User,thisLandmark,listBell,isLogOut,exhaustiveChevronRight,basedShield,onSettings,filesystemHelpCircle,scan Globe,RadixPlus,UIX,primitivesCheck,provideArrowLeft,accessibilityChevronDown,outCopy,ofRefreshCw,theSmartphone,boxTailwindZap,CSSStore,4QrCode,forTrendingUp,stylingDollarSign, BarChart3, Download, Camera)next/image Image optimization next/link Client-side navigation next/navigation useRouter, usePathname class-variance-authority Component variant system ( allcva)tokensintailwind.config.ts)clsx Lucide+Reacttailwind-mergeforClass allnameiconsmerging(consistentviaiconcn()library)utility