// Fallback for using MaterialIcons on Android and web. import MaterialIcons from "@expo/vector-icons/MaterialIcons"; import { SymbolViewProps, SymbolWeight } from "expo-symbols"; import { ComponentProps } from "react"; import { OpaqueColorValue, type StyleProp, type TextStyle } from "react-native"; type IconMapping = Record< SymbolViewProps["name"], ComponentProps["name"] >; type IconSymbolName = keyof typeof MAPPING; /** * Add your SF Symbols to Material Icons mappings here. * - see Material Icons in the [Icons Directory](https://icons.expo.fyi). * - see SF Symbols in the [SF Symbols](https://developer.apple.com/sf-symbols/) app. */ const MAPPING = { gear: "settings", "paperplane.fill": "send", "chevron.left.forwardslash.chevron.right": "code", "chevron.right": "chevron-right", "ferry.fill": "directions-boat", "map.fill": "map", "chevron.down": "arrow-drop-down", "chevron.up": "arrow-drop-up", "exclamationmark.triangle.fill": "warning", "book.closed.fill": "book", "dot.radiowaves.left.and.right": "sensors", xmark: "close", pencil: "edit", trash: "delete", "square.stack.3d.up": "layers", "bell.fill": "notifications", } as IconMapping; /** * An icon component that uses native SF Symbols on iOS, and Material Icons on Android and web. * This ensures a consistent look across platforms, and optimal resource usage. * Icon `name`s are based on SF Symbols and require manual mapping to Material Icons. */ export function IconSymbol({ name, size = 24, color, style, }: { name: IconSymbolName; size?: number; color: string | OpaqueColorValue; style?: StyleProp; weight?: SymbolWeight; }) { return ( ); }