🎨 Icons
Icon color system for ExpoBase with theme-aware colors.
🔧 Icon Colors Setup
ExpoBase uses a dedicated color system for icons that adapts to light and dark themes.
Icon Colors Configuration File
Go to /constants/colors.ts:
export const colors = {
icons: {
base: {
light: '#000000',
dark: '#FFFFFF',
},
primary: {
light: '#FF6B35',
dark: '#FF6B35',
},
secondary: {
light: '#374151',
dark: '#374151',
},
success: {
light: '#10B981',
dark: '#10B981',
},
error: {
light: '#EF4444',
dark: '#EF4444',
},
warning: {
light: '#F59E0B',
dark: '#F59E0B',
},
info: {
light: '#3B82F6',
dark: '#3B82F6',
},
muted: {
light: '#9CA3AF',
dark: '#9CA3AF',
},
}
}Icon Colors Hook
Create /hooks/useIconColors.ts:
import { useTheme } from '@/context/ThemeContext';
import { colors } from '@/constants/colors';
export const useIconColors = () => {
const { isDark } = useTheme();
return {
base: colors.icons.base[isDark ? 'dark' : 'light'],
primary: colors.icons.primary[isDark ? 'dark' : 'light'],
secondary: colors.icons.secondary[isDark ? 'dark' : 'light'],
success: colors.icons.success[isDark ? 'dark' : 'light'],
error: colors.icons.error[isDark ? 'dark' : 'light'],
warning: colors.icons.warning[isDark ? 'dark' : 'light'],
info: colors.icons.info[isDark ? 'dark' : 'light'],
muted: colors.icons.muted[isDark ? 'dark' : 'light'],
};
};📱 Usage
1. Basic Icon Usage
import { SearchX } from 'lucide-react-native';
import { useIconColors } from '@/hooks/useIconColors';
export const MyComponent = () => {
const iconColors = useIconColors();
return (
<SearchX size={64} color={iconColors.muted} />
);
};2. Different Icon States
import { Check, X, AlertTriangle, Info } from 'lucide-react-native';
import { useIconColors } from '@/hooks/useIconColors';
export const StatusIcons = () => {
const iconColors = useIconColors();
return (
<View style={{ flexDirection: 'row', gap: 16 }}>
<Check size={24} color={iconColors.success} />
<X size={24} color={iconColors.error} />
<AlertTriangle size={24} color={iconColors.warning} />
<Info size={24} color={iconColors.info} />
</View>
);
};3. Dynamic Icon Colors
import { Heart } from 'lucide-react-native';
import { useIconColors } from '@/hooks/useIconColors';
export const LikeButton = ({ isLiked }) => {
const iconColors = useIconColors();
return (
<TouchableOpacity>
<Heart
size={24}
color={isLiked ? iconColors.error : iconColors.muted}
fill={isLiked ? iconColors.error : 'transparent'}
/>
</TouchableOpacity>
);
};🎨 Available Icon Colors
Color Types
base- Black/White (theme adaptive)primary- Orange accent colorsecondary- Gray neutralsuccess- Green for positive actionserror- Red for dangerous/negative actionswarning- Yellow for cautioninfo- Blue for informationmuted- Light gray for inactive elements
Usage Examples
const iconColors = useIconColors();
// Navigation icons
<Home size={24} color={iconColors.base} />
// Primary actions
<Plus size={24} color={iconColors.primary} />
// Status indicators
<CheckCircle size={20} color={iconColors.success} />
<XCircle size={20} color={iconColors.error} />
<AlertCircle size={20} color={iconColors.warning} />
// Secondary/inactive
<Settings size={24} color={iconColors.muted} />🎨 Customization
Change Icon Colors
To modify icon colors, edit the hex values in the colors object:
export const colors = {
icons: {
primary: {
light: '#007AFF', // iOS blue
dark: '#007AFF',
},
// ... other colors
}
}Add Custom Icon Colors
export const colors = {
icons: {
// ... existing colors
custom: {
light: '#FF69B4', // Hot pink
dark: '#FF69B4',
},
}
}
// Update hook
export const useIconColors = () => {
const { isDark } = useTheme();
return {
// ... existing colors
custom: colors.icons.custom[isDark ? 'dark' : 'light'],
};
};🎨 Icon System Ready ✅
Theme-aware icon colors for your entire app!
