import * as React from 'react'; import { StyleProp, StyleSheet, TextStyle, useWindowDimensions, View, ViewStyle, } from 'react-native'; import { useInternalTheme } from '../../core/theming'; import { white } from '../../styles/themes/v2/colors'; import type { ThemeProp } from '../../types'; import getContrastingColor from '../../utils/getContrastingColor'; import Text from '../Typography/Text'; const defaultSize = 64; export type Props = React.ComponentPropsWithRef & { /** * Initials to show as the text in the `Avatar`. */ label: string; /** * Size of the avatar. */ size?: number; /** * Custom color for the text. */ color?: string; /** * Style for text container */ style?: StyleProp; /** * Style for the title. */ labelStyle?: StyleProp; /** * Specifies the largest possible scale a text font can reach. */ maxFontSizeMultiplier?: number; /** * @optional */ theme?: ThemeProp; }; /** * Avatars can be used to represent people in a graphical way. * * ## Usage * ```js * import * as React from 'react'; * import { Avatar } from 'react-native-paper'; * * const MyComponent = () => ( * * ); * ``` */ const AvatarText = ({ label, size = defaultSize, style, labelStyle, color: customColor, theme: themeOverrides, maxFontSizeMultiplier, ...rest }: Props) => { const theme = useInternalTheme(themeOverrides); const { backgroundColor = theme.colors?.primary, ...restStyle } = StyleSheet.flatten(style) || {}; const textColor = customColor ?? getContrastingColor(backgroundColor, white, 'rgba(0, 0, 0, .54)'); const { fontScale } = useWindowDimensions(); return ( {label} ); }; AvatarText.displayName = 'Avatar.Text'; const styles = StyleSheet.create({ container: { justifyContent: 'center', alignItems: 'center', }, text: { textAlign: 'center', textAlignVertical: 'center', }, }); export default AvatarText;