import {UITextView} from 'react-native-uitextview' import {logger} from '#/logger' import {atoms, flatten, useAlf, useTheme, web} from '#/alf' import { childHasEmoji, normalizeTextStyles, renderChildrenWithEmoji, TextProps, } from '#/alf/typography' export type {TextProps} /** * Our main text component. Use this most of the time. */ export function Text({ children, emoji, style, selectable, title, dataSet, ...rest }: TextProps) { const {fonts, flags} = useAlf() const t = useTheme() const s = normalizeTextStyles([atoms.text_sm, t.atoms.text, flatten(style)], { fontScale: fonts.scaleMultiplier, fontFamily: fonts.family, flags, }) if (__DEV__) { if (!emoji && childHasEmoji(children)) { logger.warn( `Text: emoji detected but emoji not enabled: "${children}"\n\nPlease add '`, ) } } const shared = { uiTextView: true, selectable, style: s, dataSet: Object.assign({tooltip: title}, dataSet || {}), ...rest, } return ( {renderChildrenWithEmoji(children, shared, emoji ?? false)} ) } function createHeadingElement({level}: {level: number}) { return function HeadingElement({style, ...rest}: TextProps) { const attr = web({ role: 'heading', 'aria-level': level, }) || {} return } } /* * Use semantic components when it's beneficial to the user or to a web scraper */ export const H1 = createHeadingElement({level: 1}) export const H2 = createHeadingElement({level: 2}) export const H3 = createHeadingElement({level: 3}) export const H4 = createHeadingElement({level: 4}) export const H5 = createHeadingElement({level: 5}) export const H6 = createHeadingElement({level: 6}) export function P({style, ...rest}: TextProps) { const attr = web({ role: 'paragraph', }) || {} return ( ) }