Icon
The Icon component provides a simple way to display icons using the Lucide React Native icon library with automatic theming support.
Import
Section titled “Import”import { Icon, type IconName } from '@space-uy/pulsar-ui';Basic usage
Section titled “Basic usage”<Icon name="Heart" />Properties
Section titled “Properties”| Property | Type | Required | Default value | Description | 
|---|---|---|---|---|
| name | IconName | ✅ | - | Lucide React Native icon name | 
| size | number | ❌ | 24 | Size of the icon in pixels | 
| color | string | ❌ | colors.foreground | Color of the icon | 
| style | StyleProp<ViewStyle> | ❌ | - | Custom styles for the icon | 
IconName Type
Section titled “IconName Type”The IconName type includes all available Lucide React Native icons. Common examples include:
- Heart,- Star,- User,- Home,- Settings
- ArrowLeft,- ArrowRight,- ArrowUp,- ArrowDown
- Check,- X,- Plus,- Minus,- Search
- Mail,- Phone,- Calendar,- Camera,- Edit
- Download,- Upload,- Share,- Save,- Delete
Basic examples
Section titled “Basic examples”Simple icons
Section titled “Simple icons”<View style={{ flexDirection: 'row', gap: 16 }}>  <Icon name="Heart" />  <Icon name="Star" />  <Icon name="User" />  <Icon name="Settings" /></View>Different sizes
Section titled “Different sizes”<View style={{ flexDirection: 'row', gap: 16, alignItems: 'center' }}>  <Icon name="Heart" size={16} />  <Icon name="Heart" size={24} />  <Icon name="Heart" size={32} />  <Icon name="Heart" size={48} /></View>Custom colors
Section titled “Custom colors”<View style={{ flexDirection: 'row', gap: 16 }}>  <Icon name="Heart" color="red" />  <Icon name="Star" color="gold" />  <Icon name="Check" color="green" />  <Icon name="X" color="red" /></View>Advanced examples
Section titled “Advanced examples”Navigation icons
Section titled “Navigation icons”<View style={{ flexDirection: 'row', gap: 12 }}>  <Icon name="ArrowLeft" size={20} />  <Icon name="Home" size={20} />  <Icon name="Search" size={20} />  <Icon name="User" size={20} />  <Icon name="Settings" size={20} /></View>Status indicators
Section titled “Status indicators”const getStatusIcon = (status: 'success' | 'warning' | 'error' | 'info') => {  const statusConfig = {    success: { name: 'CheckCircle', color: 'green' },    warning: { name: 'AlertTriangle', color: 'orange' },    error: { name: 'XCircle', color: 'red' },    info: { name: 'Info', color: 'blue' },  };
  const config = statusConfig[status];
  return <Icon name={config.name as IconName} color={config.color} size={20} />;};
// Usage<View style={{ gap: 8 }}>  {getStatusIcon('success')}  {getStatusIcon('warning')}  {getStatusIcon('error')}  {getStatusIcon('info')}</View>;Interactive icon list
Section titled “Interactive icon list”const actions = [  { name: 'Edit', icon: 'Edit', onPress: handleEdit },  { name: 'Share', icon: 'Share', onPress: handleShare },  { name: 'Delete', icon: 'Trash', onPress: handleDelete },];
<View style={{ gap: 16 }}>  {actions.map((action) => (    <Pressable      key={action.name}      style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}      onPress={action.onPress}    >      <Icon name={action.icon as IconName} size={20} />      <Text variant="pm">{action.name}</Text>    </Pressable>  ))}</View>;Icon with badge
Section titled “Icon with badge”<View style={{ position: 'relative' }}>  <Icon name="Bell" size={24} />  <View    style={{      position: 'absolute',      top: -4,      right: -4,      backgroundColor: 'red',      borderRadius: 8,      width: 16,      height: 16,      alignItems: 'center',      justifyContent: 'center',    }}  >    <Text variant="caption" style={{ color: 'white', fontSize: 10 }}>      3    </Text>  </View></View>Weather icons
Section titled “Weather icons”const weatherIcons = {  sunny: 'Sun',  cloudy: 'Cloud',  rainy: 'CloudRain',  snowy: 'Snowflake',  stormy: 'Zap',};
const currentWeather = 'sunny';
<View style={{ alignItems: 'center', gap: 8 }}>  <Icon    name={weatherIcons[currentWeather] as IconName}    size={48}    color={colors.primary}  />  <Text variant="h4">Sunny</Text>  <Text variant="pm">25°C</Text></View>;File type icons
Section titled “File type icons”const getFileIcon = (fileName: string) => {  const extension = fileName.split('.').pop()?.toLowerCase();
  const iconMap: Record<string, IconName> = {    pdf: 'FileText',    doc: 'FileText',    docx: 'FileText',    jpg: 'Image',    jpeg: 'Image',    png: 'Image',    mp4: 'Video',    mp3: 'Music',    zip: 'Archive',  };
  return iconMap[extension || ''] || 'File';};
const files = ['document.pdf', 'photo.jpg', 'video.mp4', 'archive.zip'];
<View style={{ gap: 12 }}>  {files.map((file) => (    <View      key={file}      style={{ flexDirection: 'row', alignItems: 'center', gap: 12 }}    >      <Icon name={getFileIcon(file)} size={20} color={colors.foreground} />      <Text variant="pm">{file}</Text>    </View>  ))}</View>;Social media icons
Section titled “Social media icons”const socialIcons = [  { name: 'Github', platform: 'GitHub' },  { name: 'Twitter', platform: 'Twitter' },  { name: 'Linkedin', platform: 'LinkedIn' },  { name: 'Instagram', platform: 'Instagram' },];
<View style={{ flexDirection: 'row', gap: 16 }}>  {socialIcons.map((social) => (    <Pressable      key={social.platform}      onPress={() => openSocial(social.platform)}    >      <Icon        name={social.name as IconName}        size={24}        color={colors.foreground}      />    </Pressable>  ))}</View>;Popular Icons
Section titled “Popular Icons”Here are some commonly used icons in the library:
Navigation
Section titled “Navigation”- ArrowLeft,- ArrowRight,- ArrowUp,- ArrowDown
- ChevronLeft,- ChevronRight,- ChevronUp,- ChevronDown
- Home,- Search,- Menu,- X
Actions
Section titled “Actions”- Plus,- Minus,- Edit,- Delete,- Save
- Check,- X,- Copy,- Share,- Download
Communication
Section titled “Communication”- Mail,- Phone,- MessageCircle,- Send
- Bell,- Notification,- Volume,- Mic
Files & Media
Section titled “Files & Media”- File,- Folder,- Image,- Video,- Music
- Camera,- Upload,- Download,- Archive
User & Account
Section titled “User & Account”- User,- Users,- Settings,- Lock,- Eye
- Heart,- Star,- Bookmark,- Flag
Implementation notes
Section titled “Implementation notes”- The component uses Lucide React Native icons exclusively
- Icons automatically inherit theme foreground color when no color is specified
- All icons are vector-based and scale cleanly at any size
- The component is a thin wrapper around the Lucide React Native icon components
- TypeScript provides full autocomplete support for icon names
Accessibility
Section titled “Accessibility”- Icons are properly announced by screen readers when used in interactive contexts
- Color contrast is maintained when using theme colors
- Icon sizing follows accessibility guidelines for touch targets when interactive
- Semantic meaning is preserved through proper icon selection