Icons
Fidus uses Lucide React icons for a consistent, modern icon system. All icons are open-source, accessible, and customizable.
Icon Library
We use Lucide React - a community-maintained fork of Feather Icons with over 1,000+ icons.
Benefits
- •Consistent design language across all icons
- •Tree-shakeable (only import icons you use)
- •Fully accessible with proper ARIA attributes
- •Customizable size, color, and stroke width
- •React components (not SVG sprites)
Domain Icons
Each Fidus domain has a representative icon used in cards, navigation, and badges:
Calendar
Calendar domain, events, appointments
DollarSign
Finance domain, budgets, transactions
Plane
Travel domain, trips, flights
Home
Home domain, smart home, maintenance
Heart
Health domain, wellness, medical
ShoppingCart
Shopping domain, lists, purchases
BookOpen
Learning domain, courses, study
MessageSquare
Communication domain, messages, email
System Icons
Common system functionality icons:
Bell
Notifications, alerts
Settings
Settings, configuration
User
User profile, avatar fallback
Search
Search functionality
Navigation Icons
Icons for navigation and user actions:
ChevronRight
Navigate forward, next
ChevronDown
Expand, dropdown
X
Close, dismiss, cancel
Check
Confirm, success, done
Status & Privacy Icons
Icons indicating status, privacy level, and data source:
AlertCircle
Warning, error, attention needed
Info
Information, help, tooltip
Lock
Privacy, security, local data
Cloud
Cloud sync, remote data
Link
External service, connection
Icon Sizes
Consistent sizing scale for different use cases:
Small (12px)
Inline with text, tight spaces
className="h-3 w-3"Medium (16px) - Default
Buttons, cards, most UI elements
className="h-4 w-4"Large (20px)
Headers, prominent features
className="h-5 w-5"Extra Large (24px)
Page headers, hero sections
className="h-6 w-6"Usage Examples
In Buttons
import { Calendar } from 'lucide-react';
import { Button } from '@fidus/ui/button';
import { Stack } from '@fidus/ui/stack';;
<Button>
<Stack direction="horizontal" spacing="sm" align="center">
<Calendar className="h-4 w-4" />
<span>Add Event</span>
</Stack>
</Button>In Card Headers
import { DollarSign } from 'lucide-react';
<OpportunityCard
title="Budget Alert"
icon={<DollarSign className="h-5 w-5" />}
urgency="important"
>
Card content...
</OpportunityCard>As Status Indicators
import { Lock, Cloud, Link } from 'lucide-react';
// Privacy badge with icon
<Badge>
<Lock className="h-3 w-3" /> Local
</Badge>
// Connection status
<Cloud className="h-4 w-4 text-success" />
<Link className="h-4 w-4 text-muted-foreground" />Customization
Color
Use Tailwind text color utilities:
Stroke Width
Adjust stroke width for visual weight:
Best Practices
- •Consistent Sizing: Use the standard size scale (h-3, h-4, h-5, h-6)
- •Semantic Usage: Choose icons that clearly represent their function
- •Color Contrast: Ensure icons meet WCAG 2.1 AA contrast ratios
- •Avoid Icon-Only Buttons: Include text labels for clarity
- •Tree-Shaking: Import only the icons you need
- •Accessibility: Add aria-label when icon is the only content
Accessibility
Decorative Icons
Icons that accompany text don't need additional labels:
<Button>
<Stack direction="horizontal" spacing="sm" align="center">
<Calendar className="h-4 w-4" />
<span>Add Event</span> {/* Text provides context */}
</Stack>
</Button>Standalone Icons
Icons without text need aria-label:
<button aria-label="Close">
<X className="h-4 w-4" />
</button>