// @ts-nocheck import { TNode } from '@native-html/transient-render-engine'; import React from 'react'; import { Platform, Text, View } from 'react-native'; import { InternalTextContentRenderer } from '../render/render-types'; const emptyProps = { testID: 'br' }; const isWeb = Platform.OS === 'web'; function renderEmptyLineBreak(tnode: TNode) { const lineHeight = tnode.styles.nativeTextFlow.lineHeight || tnode.styles.nativeTextFlow.fontSize! * 1.4; return ; } const BRRenderer: InternalTextContentRenderer = function BRRenderer({ renderIndex, renderLength, sharedProps, tnode }) { // If it is the last child and BR collapsing is enabled, render an empty // string to prevent inserting an undesired space to follow HTML specs, // unless the platform is web and it is also the first child. // // Note that we are taking advantage of the Ghost Line oddity in React // Native, where an empty element displays a line, since a // line break opening **and** closing an inline formatting context // should be printed as a one line-height item. const isFirst = renderIndex === 0; const isLast = renderIndex === renderLength - 1; const isLonelyBreak = isFirst && isLast; const shouldCollapse = sharedProps.enableExperimentalBRCollapsing && (isFirst ? isLast && !isWeb : isLast); return isLonelyBreak && shouldCollapse ? renderEmptyLineBreak(tnode) : React.createElement(Text, emptyProps, shouldCollapse ? '' : '\n'); }; BRRenderer.isNativeInternalTextRenderer = true; export default BRRenderer;