import type { FontAwesomeIconName } from '@react-native-vector-icons/fontawesome/static'; import type { FontAwesome5BrandIconName, FontAwesome5RegularIconName, FontAwesome5SolidIconName, } from '@react-native-vector-icons/fontawesome5/static'; import type { FontAwesome6BrandIconName, FontAwesome6RegularIconName, FontAwesome6SolidIconName, } from '@react-native-vector-icons/fontawesome6/static'; import type { IoniconsIconName } from '@react-native-vector-icons/ionicons/static'; import type { MaterialDesignIconsIconName } from '@react-native-vector-icons/material-design-icons/static'; import type { StyleProp, TextStyle, ViewStyle } from 'react-native'; import type { SurfaceImageSource } from './image'; import type { SurfaceTheme } from './theme'; export type IconProvider = 'Ionicons' | 'FontAwesome' | 'FontAwesome5' | 'FontAwesome6' | 'MaterialDesignIcons'; export type IconVariant = 'regular' | 'solid' | 'brand'; export type FontIconSource = | { name: IoniconsIconName; provider?: 'Ionicons'; variant?: never } | { name: FontAwesomeIconName; provider: 'FontAwesome'; variant?: never } | { name: FontAwesome5RegularIconName; provider: 'FontAwesome5'; variant: 'regular' } | { name: FontAwesome5SolidIconName; provider: 'FontAwesome5'; variant: 'solid' } | { name: FontAwesome5BrandIconName; provider: 'FontAwesome5'; variant: 'brand' } | { name: FontAwesome6RegularIconName; provider: 'FontAwesome6'; variant: 'regular' } | { name: FontAwesome6SolidIconName; provider: 'FontAwesome6'; variant: 'solid' } | { name: FontAwesome6BrandIconName; provider: 'FontAwesome6'; variant: 'brand' } | { name: MaterialDesignIconsIconName; provider: 'MaterialDesignIcons'; variant?: never }; export interface SvgIconSource { source: SurfaceImageSource; name?: never; provider?: never; variant?: never; } export type IconSource = FontIconSource | SvgIconSource; interface IconPresentationProps { size?: keyof SurfaceTheme['spacing'] | number; color?: keyof SurfaceTheme['colors'] | string; testID?: string; } export type IconProps = | (FontIconSource & IconPresentationProps & { style?: StyleProp }) | (SvgIconSource & IconPresentationProps & { style?: StyleProp });