@nanogiants/react-native-render-html 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -250,6 +250,7 @@ var HtmlProvider = (options) => {
250
250
  ...baseStyle,
251
251
  fontSize: 32,
252
252
  lineHeight: 38.4,
253
+ fontWeight: "bold",
253
254
  ...options.tagStyles?.h1?.text
254
255
  },
255
256
  block: {
@@ -263,6 +264,7 @@ var HtmlProvider = (options) => {
263
264
  ...baseStyle,
264
265
  fontSize: 24,
265
266
  lineHeight: 28.8,
267
+ fontWeight: "bold",
266
268
  ...options.tagStyles?.h2?.text
267
269
  },
268
270
  block: {
@@ -276,6 +278,7 @@ var HtmlProvider = (options) => {
276
278
  ...baseStyle,
277
279
  fontSize: 18.72,
278
280
  lineHeight: 22.46,
281
+ fontWeight: "bold",
279
282
  ...options.tagStyles?.h3?.text
280
283
  },
281
284
  block: {
@@ -289,6 +292,7 @@ var HtmlProvider = (options) => {
289
292
  ...baseStyle,
290
293
  fontSize: 16,
291
294
  lineHeight: 19.2,
295
+ fontWeight: "bold",
292
296
  ...options.tagStyles?.h4?.text
293
297
  },
294
298
  block: {
@@ -302,6 +306,7 @@ var HtmlProvider = (options) => {
302
306
  ...baseStyle,
303
307
  fontSize: 13.28,
304
308
  lineHeight: 15.94,
309
+ fontWeight: "bold",
305
310
  ...options.tagStyles?.h5?.text
306
311
  },
307
312
  block: {
@@ -315,6 +320,7 @@ var HtmlProvider = (options) => {
315
320
  ...baseStyle,
316
321
  fontSize: 10.72,
317
322
  lineHeight: 12.86,
323
+ fontWeight: "bold",
318
324
  ...options.tagStyles?.h6?.text
319
325
  },
320
326
  block: {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/RenderHTML.tsx","../src/context/HtmlProvider.tsx","../src/HTMLValidator.ts","../src/renderers/_NodeRenderer.tsx","../src/context/AlignedWidthItem.tsx","../src/context/AlignedWidthProvider.tsx","../src/types.ts","../src/utils.ts","../src/renderers/_DefaultBlockRenderer.tsx","../src/renderers/_DefaultTextRenderer.tsx","../src/assets.ts","../src/renderers/ATagRenderer.tsx","../src/renderers/ImgTagRenderer.tsx","../src/renderers/LiTagRenderer.tsx","../src/renderers/PTagRenderer.tsx","../src/renderers/_NodesRenderer.tsx"],"sourcesContent":["export type { OnHTMLLinkPress } from './context/HtmlProvider';\nexport type { RenderHTMLProps } from './RenderHTML';\nexport { RenderHTML } from './RenderHTML';\nexport type { HTMLTag, HtmlStyle, TagStyles } from './types';\n","import { parseDocument } from 'htmlparser2';\nimport { type ComponentType, type FunctionComponent, type ReactNode, useMemo } from 'react';\nimport {\n type ColorValue,\n type ImageProps,\n type TextProps,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport { HtmlProvider, type OnHTMLLinkPress } from './context/HtmlProvider';\nimport { HTMLValidator } from './HTMLValidator';\nimport { NodesRenderer } from './renderers/_NodesRenderer';\nimport type { CommonProps, HtmlStyle, TagStyles } from './types';\n\nexport interface RenderHTMLProps extends CommonProps {\n html: string;\n}\n\nexport const RenderHTML: FunctionComponent<RenderHTMLProps> = (props) => {\n const nodes = useMemo(() => {\n if (!props.html) {\n return [];\n }\n const cleaned = props.html.replace(/\\n/g, '');\n const n = parseDocument(cleaned);\n return new HTMLValidator(n.children).cleanup();\n }, [props.html]);\n\n return (\n <View>\n <HtmlProvider\n tagStyles={props.tagStyles}\n baseStyle={props.baseStyle}\n classesStyles={props.classesStyles}\n listGap={props.listGap}\n overrideExternalLinkTintColor={props.overrideExternalLinkTintColor}\n markerColor={props.markerColor}\n onLinkPress={props.onLinkPress}\n renderImage={props.renderImage}\n renderTextComponent={props.renderTextComponent}\n >\n <NodesRenderer nodes={nodes} />\n </HtmlProvider>\n </View>\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { createContext, type ReactNode, useCallback, useContext, useMemo } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\nimport { Image, Text } from 'react-native';\n\nimport type { CommonProps, HTMLTag, TagStyles } from '../types';\n\nexport interface OnHTMLLinkPress {\n url: string;\n title: string;\n}\n\ninterface ContextValue {\n getStyle: (node: AnyNode | ChildNode) => {\n text: TextStyle;\n block: ViewStyle;\n };\n baseStyle: TextStyle;\n tagsStyles: TagStyles;\n overrideExternalLinkTintColor?: ColorValue;\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n renderImage: (props: ImageProps) => ReactNode;\n renderText: (props: TextProps) => ReactNode;\n}\n\nconst HtmlContext = createContext<ContextValue | null>(null);\n\ninterface ProviderProps extends CommonProps {\n children: ReactNode;\n}\n\nexport const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {\n const baseStyle = useMemo<TextStyle>(() => {\n return {\n ...options.baseStyle,\n };\n }, [options.baseStyle]);\n\n const tagsStyles = useMemo<TagStyles>(() => {\n // Sorted by renderer type: block first, then text\n return {\n // BLOCK RENDERER TAGS\n thead: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.thead?.text,\n },\n block: {\n ...options.tagStyles?.thead?.block,\n },\n },\n tbody: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tbody?.text,\n },\n block: {\n ...options.tagStyles?.tbody?.block,\n },\n },\n tfoot: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tfoot?.text,\n },\n block: {\n ...options.tagStyles?.tfoot?.block,\n },\n },\n blockquote: {\n text: {\n ...baseStyle,\n fontStyle: 'italic',\n ...options.tagStyles?.blockquote?.text,\n },\n block: {\n borderLeftWidth: 4,\n borderLeftColor: 'black',\n marginLeft: 8,\n paddingLeft: 12,\n backgroundColor: '#cccccc',\n ...options.tagStyles?.blockquote?.block,\n },\n },\n ul: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ul?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ul?.block,\n },\n },\n ol: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ol?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ol?.block,\n },\n },\n dl: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dl?.text,\n },\n block: {\n ...options.tagStyles?.dl?.block,\n },\n },\n div: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.div?.text,\n },\n block: {\n ...options.tagStyles?.div?.block,\n },\n },\n main: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.main?.text,\n },\n block: {\n ...options.tagStyles?.main?.block,\n },\n },\n section: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.section?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.section?.block,\n },\n },\n article: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.article?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.article?.block,\n },\n },\n aside: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.aside?.text,\n },\n block: {\n ...options.tagStyles?.aside?.block,\n },\n },\n nav: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.nav?.text,\n },\n block: {\n ...options.tagStyles?.nav?.block,\n },\n },\n header: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.header?.text,\n },\n block: {\n marginBottom: 8,\n ...options.tagStyles?.header?.block,\n },\n },\n footer: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.footer?.text,\n },\n block: {\n marginTop: 8,\n ...options.tagStyles?.footer?.block,\n },\n },\n hr: {\n text: {\n ...options.tagStyles?.hr?.text,\n },\n block: {\n borderBottomWidth: 1,\n borderBottomColor: 'black',\n marginVertical: 12,\n ...options.tagStyles?.hr?.block,\n },\n },\n br: {\n text: {\n ...options.tagStyles?.br?.text,\n },\n block: {\n height: 16,\n ...options.tagStyles?.br?.block,\n },\n },\n\n img: {\n text: {\n ...options.tagStyles?.img?.text,\n },\n block: {\n marginVertical: 8,\n\n flex: 1,\n width: undefined,\n height: 100,\n\n ...options.tagStyles?.img?.block,\n },\n },\n table: {\n text: {\n ...options.tagStyles?.table?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.table?.block,\n },\n },\n tr: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tr?.text,\n },\n block: {\n ...options.tagStyles?.tr?.block,\n },\n },\n\n // TEXT RENDERER TAGS\n h1: {\n text: {\n ...baseStyle,\n fontSize: 32,\n lineHeight: 38.4,\n ...options.tagStyles?.h1?.text,\n },\n block: {\n marginTop: 12,\n marginBottom: 8,\n ...options.tagStyles?.h1?.block,\n },\n },\n h2: {\n text: {\n ...baseStyle,\n fontSize: 24,\n lineHeight: 28.8,\n ...options.tagStyles?.h2?.text,\n },\n block: {\n marginTop: 10,\n marginBottom: 6,\n ...options.tagStyles?.h2?.block,\n },\n },\n h3: {\n text: {\n ...baseStyle,\n fontSize: 18.72,\n lineHeight: 22.46,\n ...options.tagStyles?.h3?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 6,\n ...options.tagStyles?.h3?.block,\n },\n },\n h4: {\n text: {\n ...baseStyle,\n fontSize: 16,\n lineHeight: 19.2,\n ...options.tagStyles?.h4?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 4,\n ...options.tagStyles?.h4?.block,\n },\n },\n h5: {\n text: {\n ...baseStyle,\n fontSize: 13.28,\n lineHeight: 15.94,\n ...options.tagStyles?.h5?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h5?.block,\n },\n },\n h6: {\n text: {\n ...baseStyle,\n fontSize: 10.72,\n lineHeight: 12.86,\n ...options.tagStyles?.h6?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h6?.block,\n },\n },\n p: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.p?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 8,\n ...options.tagStyles?.p?.block,\n },\n },\n a: {\n text: {\n ...baseStyle,\n textDecorationLine: 'underline',\n ...options.tagStyles?.a?.text,\n },\n },\n li: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.li?.text,\n },\n block: {\n paddingLeft: 0,\n ...options.tagStyles?.li?.block,\n },\n },\n pre: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.pre?.text,\n },\n },\n code: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.code?.text,\n },\n },\n\n // inline text styles\n b: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.b?.text,\n },\n },\n strong: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.strong?.text,\n },\n },\n i: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.i?.text,\n },\n },\n em: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.em?.text,\n },\n },\n u: {\n text: {\n textDecorationLine: 'underline',\n ...options.tagStyles?.u?.text,\n },\n },\n mark: {\n text: {\n ...baseStyle,\n backgroundColor: '#fff59d',\n ...options.tagStyles?.mark?.text,\n },\n },\n small: {\n text: {\n ...baseStyle,\n fontSize: Math.max((baseStyle.fontSize as number) - 2, 12),\n ...options.tagStyles?.small?.text,\n },\n },\n s: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.s?.text,\n },\n },\n del: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.del?.text,\n },\n },\n sup: {\n text: {\n ...baseStyle,\n textAlignVertical: 'top',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sup?.text,\n },\n },\n sub: {\n text: {\n ...baseStyle,\n textAlignVertical: 'bottom',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sub?.text,\n },\n },\n th: {\n text: {\n ...baseStyle,\n fontWeight: 'bold',\n padding: 8,\n borderWidth: 1,\n borderColor: 'black',\n ...options.tagStyles?.th?.text,\n },\n },\n td: {\n text: {\n ...baseStyle,\n padding: 8,\n ...options.tagStyles?.td?.text,\n },\n },\n dt: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dt?.text,\n },\n },\n dd: {\n text: {\n ...baseStyle,\n marginLeft: 20,\n ...options.tagStyles?.dd?.text,\n },\n },\n span: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.span?.text,\n },\n },\n };\n }, [baseStyle, options.tagStyles, options.listGap]);\n\n const getStyle = useCallback(\n (\n node: AnyNode | ChildNode,\n ): {\n text: TextStyle;\n block: ViewStyle;\n } => {\n if (node.type === 'tag') {\n const classStyle = node.attribs.class\n ? options.classesStyles?.[node.attribs.class] || {}\n : {};\n return {\n text: {\n ...tagsStyles[node.tagName as HTMLTag].text,\n ...classStyle.text,\n },\n block: {\n ...(tagsStyles[node.tagName as HTMLTag].block ?? {}),\n ...classStyle.block,\n },\n };\n }\n return {\n text: {},\n block: {},\n };\n },\n [tagsStyles, options.classesStyles],\n );\n\n const renderImage = useMemo<(props: ImageProps) => ReactNode>(() => {\n if (options.renderImage) {\n return options.renderImage;\n }\n return (props: ImageProps) => <Image {...props} />;\n }, [options.renderImage]);\n\n const renderText = useMemo<(props: TextProps) => ReactNode>(() => {\n if (options.renderTextComponent) {\n return options.renderTextComponent;\n }\n return (props: TextProps) => <Text {...props} />;\n }, [options.renderTextComponent]);\n\n const providerValue = useMemo(\n () => ({\n getStyle,\n baseStyle,\n tagsStyles,\n overrideExternalLinkTintColor: options.overrideExternalLinkTintColor,\n onLinkPress: options.onLinkPress,\n markerColor: options.markerColor,\n renderImage,\n renderText,\n }),\n [\n getStyle,\n baseStyle,\n tagsStyles,\n options.overrideExternalLinkTintColor,\n options.onLinkPress,\n options.markerColor,\n renderImage,\n renderText,\n ],\n );\n\n return <HtmlContext.Provider value={providerValue}>{options.children}</HtmlContext.Provider>;\n};\n\nexport const useHtmlContext = () => {\n const context = useContext(HtmlContext);\n if (!context) {\n throw new Error('useHtml must be used within a HtmlProvider');\n }\n return context;\n};\n","import type { AnyNode } from 'domhandler';\n\n/**\n * Cleans up `<ul>` and `<ol>` nodes by removing any empty text nodes\n */\nconst cleanUlNodesUtil = (nodes: AnyNode[]): AnyNode[] => {\n return nodes.map((node) => {\n if (node.type !== 'tag') {\n return node;\n }\n if (node.name === 'ul' || node.name === 'ol') {\n if (!node.children) {\n return node;\n }\n node.children = node.children.filter((child) => {\n return child.type !== 'text' || (child.type === 'text' && child.data.trim() !== '');\n });\n }\n // Recursively process children if present\n if (node.children) {\n node.children = cleanUlNodesUtil(node.children);\n return node;\n }\n return node;\n });\n};\n\nexport class HTMLValidator {\n constructor(private nodes: AnyNode[]) {}\n\n cleanup(): AnyNode[] {\n this.nodes = cleanUlNodesUtil(this.nodes);\n return this.nodes;\n }\n}\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, View } from 'react-native';\n\nimport { AlignedWidthItem } from '../context/AlignedWidthItem';\nimport { AlignedWidthProvider } from '../context/AlignedWidthProvider';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { isTextRenderer } from '../utils';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\nimport { DefaultTextRenderer } from './_DefaultTextRenderer';\nimport { ATagRenderer } from './ATagRenderer';\nimport { ImgTagRenderer } from './ImgTagRenderer';\nimport { LiTagRenderer } from './LiTagRenderer';\nimport { PTagRenderer } from './PTagRenderer';\n\ninterface Props {\n node: AnyNode | ChildNode;\n}\n\nexport const NodeRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n if (node.type === 'tag') {\n switch (node.tagName) {\n case 'thead':\n case 'tbody':\n case 'tfoot':\n case 'blockquote':\n case 'ul':\n case 'ol':\n case 'dl':\n case 'dt':\n case 'dd':\n case 'div':\n case 'main':\n case 'section':\n case 'article':\n case 'aside':\n case 'nav':\n case 'header':\n case 'footer':\n case 'tr':\n return <DefaultBlockRenderer node={node} />;\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return (\n <DefaultBlockRenderer\n node={node}\n textProps={{\n accessible: true,\n accessibilityRole: 'header',\n }}\n />\n );\n case 'p':\n return <PTagRenderer node={node} />;\n case 'li':\n return <LiTagRenderer node={node} />;\n case 'hr':\n return <View style={[getStyle(node).block]} />;\n case 'br':\n if (isTextRenderer(node.prev)) {\n return null;\n }\n return <View style={[getStyle(node).block]} />;\n case 'table':\n return (\n <AlignedWidthProvider>\n <DefaultBlockRenderer node={node} />\n </AlignedWidthProvider>\n );\n case 'img':\n return <ImgTagRenderer node={node} />;\n // text renderers\n case 'b':\n case 'strong':\n case 'i':\n case 'em':\n case 'u':\n case 'mark':\n case 'small':\n case 's':\n case 'del':\n case 'sup':\n case 'sub':\n case 'span':\n case 'pre':\n case 'code':\n return <DefaultTextRenderer node={node} />;\n case 'a':\n return <ATagRenderer node={node} />;\n case 'th':\n case 'td': {\n const currentIndex = node.parent?.children.indexOf(node) || 0;\n return (\n <AlignedWidthItem index={currentIndex}>\n <DefaultTextRenderer node={node} />\n </AlignedWidthItem>\n );\n }\n default:\n // Ignore unsupported tags (script, style, iframe, etc.)\n return null;\n }\n }\n if (node.type === 'text') {\n const text = node.data\n // crush multiple spaces into one\n .replace(/\\s+/g, ' ')\n .replace(/&nbsp;/g, ' ');\n\n return <Text>{text}</Text>;\n }\n return null;\n};\n","import type { FunctionComponent, PropsWithChildren } from 'react';\nimport { type StyleProp, View, type ViewStyle } from 'react-native';\n\nimport { useAlignedWidth } from './AlignedWidthProvider';\n\ninterface Props extends PropsWithChildren {\n index: number;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * This component is used to wrap items that need to have aligned widths.\n * It uses the AlignedWidthProvider context to measure and set the width\n * of each item based on the widest item in the same index position.\n * For example, in a table column.\n */\nexport const AlignedWidthItem: FunctionComponent<Props> = ({ children, index, style }) => {\n const { getLayoutHandlerForIndex, getWidthStyle } = useAlignedWidth();\n\n return (\n <View style={[getWidthStyle(index), style]} onLayout={getLayoutHandlerForIndex(index)}>\n {children}\n </View>\n );\n};\n","import { createContext, type ReactNode, useContext, useState } from 'react';\nimport type { LayoutChangeEvent } from 'react-native';\n\ninterface AlignedWidthContextProps {\n getLayoutHandlerForIndex: (colIdx: number) => (event: LayoutChangeEvent) => void;\n getWidthStyle: (colIdx: number) => { minWidth?: number; width?: number };\n}\n\nconst AlignedWidthContext = createContext<AlignedWidthContextProps | undefined>(undefined);\n\nexport const AlignedWidthProvider = ({ children }: { children: ReactNode }) => {\n const [colWidths, setColWidths] = useState<{ [colIdx: number]: number }>({});\n\n const getLayoutHandlerForIndex = (colIdx: number) => {\n return (event: LayoutChangeEvent) => {\n const { width } = event.nativeEvent.layout;\n setColWidths((prev) => {\n const previousWidth = prev[colIdx] || 0;\n return {\n ...prev,\n [colIdx]: Math.max(previousWidth, width),\n };\n });\n };\n };\n\n const getWidthStyle = (colIdx: number) => {\n return {\n minWidth: colWidths[colIdx] || undefined,\n width: colWidths[colIdx] || undefined,\n };\n };\n\n return (\n <AlignedWidthContext.Provider\n value={{\n getLayoutHandlerForIndex,\n getWidthStyle,\n }}\n >\n {children}\n </AlignedWidthContext.Provider>\n );\n};\n\nexport const useAlignedWidth = () => {\n const context = useContext(AlignedWidthContext);\n if (!context) {\n throw new Error('useAlignedWidth must be used within a AlignedWidthProvider');\n }\n return context;\n};\n","import { ComponentType, ReactNode } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\n\nimport { OnHTMLLinkPress } from './context/HtmlProvider';\n\nexport type HTMLTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'a'\n | 'ul'\n | 'ol'\n | 'li'\n | 'img'\n | 'table'\n | 'tr'\n | 'th'\n | 'td'\n | 'pre'\n | 'code'\n | 'blockquote'\n | 'hr'\n | 'br'\n | 'div'\n | 'b'\n | 'strong'\n | 'i'\n | 'em'\n | 'u'\n | 'mark'\n | 'small'\n | 's'\n | 'del'\n | 'sup'\n | 'sub'\n | 'span'\n | 'dt'\n | 'dd'\n | 'thead'\n | 'tbody'\n | 'tfoot'\n | 'dl'\n | 'main'\n | 'section'\n | 'article'\n | 'aside'\n | 'nav'\n | 'header'\n | 'footer';\n\nexport type RendererType = 'text' | 'block';\n\nexport const rendererTypeMap = {\n // Elements rendered with a View (block)\n thead: 'block',\n tbody: 'block',\n tfoot: 'block',\n blockquote: 'block',\n ul: 'block',\n ol: 'block',\n dl: 'block',\n li: 'block',\n div: 'block',\n hr: 'block',\n br: 'block',\n pre: 'block',\n code: 'block',\n img: 'block',\n table: 'block',\n tr: 'block',\n dt: 'block',\n dd: 'block',\n p: 'block',\n h1: 'block',\n h2: 'block',\n h3: 'block',\n h4: 'block',\n h5: 'block',\n h6: 'block',\n main: 'block',\n section: 'block',\n article: 'block',\n aside: 'block',\n nav: 'block',\n header: 'block',\n footer: 'block',\n\n // All other elements are text\n b: 'text',\n strong: 'text',\n i: 'text',\n em: 'text',\n u: 'text',\n mark: 'text',\n small: 'text',\n s: 'text',\n del: 'text',\n sup: 'text',\n sub: 'text',\n span: 'text',\n a: 'text',\n th: 'text',\n td: 'text',\n} satisfies Record<HTMLTag, RendererType>;\n\nexport type HtmlStyle = {\n text?: TextStyle;\n block?: ViewStyle;\n};\n\nexport type TagStyles = {\n [key in HTMLTag]: HtmlStyle;\n};\n\nexport interface CommonProps {\n /**\n * Render prop for all images rendered by the HTML renderer\n * (<img> tags, bullet markers, and external link icons).\n * Keeps the package free of any specific image library dependency.\n *\n * @example\n * renderImage={(props) => <Image {...props} />}\n */\n renderImage?: (props: ImageProps) => ReactNode;\n\n /**\n * Custom component to use instead of the built-in React Native `Text`.\n * Useful for applying a global font or integrating a design-system text component.\n * Must accept the same props as `Text` (i.e. `TextProps`).\n *\n * @example\n * TextComponent={MyAppText}\n */\n TextComponent?: ComponentType<TextProps & { children?: ReactNode }>;\n\n /**\n * Render prop for all text nodes rendered by the HTML renderer.\n * Receives the full `TextProps` (including `style`, `children`, accessibility props, etc.)\n * and must return a renderable node. Takes priority over `TextComponent` when both are set.\n *\n * @example\n * renderTextComponent={(props) => <MyText {...props} />}\n */\n renderTextComponent?: (props: TextProps) => ReactNode;\n\n // style props\n baseStyle?: TextStyle;\n tagStyles?: Partial<TagStyles>;\n classesStyles?: {\n [className: string]: HtmlStyle;\n };\n listGap?: number;\n\n // interaction/functional props\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n overrideExternalLinkTintColor?: ColorValue;\n}\n","import type { AnyNode, ChildNode, Element } from 'domhandler';\n\nimport { type HTMLTag, rendererTypeMap } from './types';\n\nexport const isTextRenderer = (node: AnyNode | ChildNode | null): boolean => {\n if (!node) {\n return false;\n }\n if (node.type === 'tag') {\n return rendererTypeMap[node.tagName as HTMLTag] === 'text';\n }\n return node.type === 'text';\n};\n\n// Concatenate all text nodes from children\nexport const concatTextNodes = (children: (AnyNode | ChildNode)[]): string => {\n let result = '';\n for (const child of children) {\n if (child.type === 'text') {\n result += child.data;\n }\n // Recursively check for text nodes in element children\n if (child.type === 'tag' && Array.isArray(child.children)) {\n result += concatTextNodes(child.children);\n }\n }\n return result;\n};\n\nexport const isList = (child: ChildNode) => {\n return child.type === 'tag' && (child.tagName === 'ol' || child.tagName === 'ul');\n};\n\nexport const getTextFromNode = (node: Element): string => {\n return node.children.map((c) => (c.type === 'text' ? c.data : '')).join('');\n};\n\nexport const isExternalURL = (url?: string): boolean => {\n if (!url) {\n return false;\n }\n return url.startsWith('https://') || url.startsWith('http://');\n};\n","import type { ChildNode, Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, type TextProps, View, type ViewProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { type HTMLTag, type RendererType, rendererTypeMap } from '../types';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n viewProps?: ViewProps;\n textProps?: TextProps;\n}\n\nexport const DefaultBlockRenderer: FunctionComponent<Props> = ({\n node,\n viewProps = {},\n textProps = {},\n}) => {\n const { getStyle } = useHtmlContext();\n const { style: viewStyle, ...restViewProps } = viewProps;\n const { style: textStyle, ...restTextProps } = textProps;\n\n const groupedChildren = groupByInlineBlock(node.children);\n\n return (\n <View {...restViewProps} style={[getStyle(node).block, viewStyle]}>\n {groupedChildren.map((childrenGroup, index) => {\n if (childrenGroup.type === 'text') {\n return (\n <Text\n {...restTextProps}\n key={`${node.type}-${index}`}\n style={[getStyle(node).text, textStyle]}\n >\n <NodesRenderer nodes={childrenGroup.nodes} />\n </Text>\n );\n }\n return <NodesRenderer key={`${node.type}-${index}`} nodes={childrenGroup.nodes} />;\n })}\n </View>\n );\n};\n\nfunction groupByInlineBlock(arr: ChildNode[]): {\n type: RendererType;\n nodes: ChildNode[];\n}[] {\n const result: {\n type: RendererType;\n nodes: ChildNode[];\n }[] = [];\n let currentGroup: ChildNode[] = [];\n\n for (const item of arr) {\n const isTextNode = item.type === 'text';\n const isTextTag = item.type === 'tag' && rendererTypeMap[item.name as HTMLTag] === 'text';\n if (isTextNode || isTextTag) {\n currentGroup.push(item);\n } else {\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n currentGroup = [];\n }\n result.push({\n type: 'block',\n nodes: [item],\n });\n }\n }\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n }\n return result;\n}\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { type TextProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n textProps?: TextProps;\n}\n\nexport const DefaultTextRenderer: FunctionComponent<Props> = ({ node, textProps = {} }) => {\n const { style, ...restProps } = textProps;\n const { getStyle, renderText } = useHtmlContext();\n\n return (\n <>\n {renderText({\n ...restProps,\n style: [getStyle(node).text, style],\n children: <NodesRenderer nodes={node.children} />,\n })}\n </>\n );\n};\n","export const EXTERNAL_LINK_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IB2cksfwAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJCwwjMljq2h8AAAD4SURBVEjH7dY9SgNBGMbxn7vpIngXwc5SbG39KjxCLDyCnY0nUFGIH0Uu4CU8gXZ2iYU2IsRmiiCz+u4sBpQ8sLwMDPPf53mWYVnoP2sH44bn8evmXgfQM+5n1jW20lz6LXc9DDHFByYRR2foBw4/xkM64xLbuMYy1iNvN8H7N/mPMcg4Gab1KOeoCTQK7KuTkyluZ9LJgqrCTmqcYx932E3dtNJPjnJxwWqamzjoCqpxlYlrEIw7BGqChHqtWnRygb3STqKgkwS5KS0+egWdpnlUAmkDesJhlzuqMifNDdQU3Vr6hKPql4BesIKNFqBXvC3+Bf62PgFLzkKE8ZczlwAAAABJRU5ErkJggg==';\n\nexport const UL_MARKER_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAwCAYAAAAsJjtLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAACKADAAQAAAABAAAAMAAAAAAE1YgVAAAAZklEQVQ4EWNgGAWjITC4QoDxiYRE/H9GxgkM//8LIDuNkYHhAZDfAFJw/z8DgwKyJJzNyPiBCackSBXQVCa4ahwMaigAOgSH6QwgnzD9//+/EOolVHVAjf8YGBpRBUd5oyEw8CEAAGO5FkZ9+flOAAAAAElFTkSuQmCC';\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { EXTERNAL_LINK_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isExternalURL } from '../utils';\n\ninterface Props {\n node: Element;\n}\n\nexport const ATagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { overrideExternalLinkTintColor, onLinkPress, getStyle, renderImage, renderText } =\n useHtmlContext();\n\n const text = concatTextNodes(node.children);\n if (!text) {\n return null;\n }\n const style = getStyle(node);\n\n const fontSize = style.text?.fontSize ?? 18;\n\n const isExternal = node.attribs.href ? isExternalURL(node.attribs.href) : false;\n\n return (\n <>\n {renderText({\n accessible: true,\n onPress: () => {\n onLinkPress?.({\n url: node.attribs.href,\n title: text,\n });\n },\n accessibilityRole: 'link',\n accessibilityHint: isExternal ? 'External link' : undefined,\n importantForAccessibility: 'yes',\n accessibilityElementsHidden: false,\n style: style.text,\n children: (\n <>\n {text}\n {isExternal\n ? renderImage({\n source: { uri: EXTERNAL_LINK_URI },\n style: {\n tintColor: overrideExternalLinkTintColor ?? style.text.color ?? 'black',\n height: fontSize,\n width: fontSize,\n paddingTop: 5,\n },\n })\n : null}\n </>\n ),\n })}\n </>\n );\n};\n","import type { Element } from 'domhandler';\nimport { type FunctionComponent, useEffect, useState } from 'react';\nimport { Image, type ImageStyle, View } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\n\ninterface Props {\n node: Element;\n}\n\nexport const ImgTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, renderImage } = useHtmlContext();\n const [size, setSize] = useState<{\n w: number;\n h: number;\n } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const { src, alt } = node.attribs || {};\n\n useEffect(() => {\n if (!src) {\n return;\n }\n Image.getSize(\n src,\n (width, height) => {\n setSize({ w: width, h: height });\n },\n () => {\n // ignore errors — image simply won't render\n },\n );\n }, [src]);\n\n if (!size) return null;\n\n const { w, h } = size;\n\n const finalWidth = Math.min(w, containerWidth);\n const ratio = h / w;\n\n const imageStyle = {\n ...(getStyle(node).block as ImageStyle),\n width: finalWidth,\n height: finalWidth * ratio,\n };\n\n return (\n <View\n onLayout={(e) => {\n const width = e.nativeEvent.layout.width;\n setContainerWidth(width);\n }}\n style={{ width: '100%' }}\n >\n {renderImage({\n source: { uri: src },\n style: imageStyle,\n alt,\n })}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { View } from 'react-native';\n\nimport { UL_MARKER_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isList } from '../utils';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const LiTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, markerColor, renderImage, renderText } = useHtmlContext();\n\n const isParentOl = node.parent?.type === 'tag' && node.parent?.tagName === 'ol';\n const parentLiTags = node.parent?.children || [];\n const currentIndex = parentLiTags.indexOf(node) + 1;\n const items = node.children;\n const style = getStyle(node);\n const { lineHeight = 20, fontSize = 16 } = style.text;\n const markerHeight = 5;\n const markerColorResult = markerColor ?? style.text.color ?? 'pink';\n const renderMarker = () => {\n if (isParentOl) {\n return renderText({ style: [style.text], children: `${currentIndex}.` });\n } else {\n return renderImage({\n source: { uri: UL_MARKER_URI },\n style: {\n width: markerHeight,\n height: lineHeight,\n tintColor: markerColorResult,\n },\n });\n }\n };\n\n // Separate nested lists and main content\n const nestedLists = items.filter((child) => isList(child));\n const mainContent = items.filter((child) => !isList(child));\n\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n marginRight: 8,\n marginBottom: lineHeight - fontSize,\n }}\n >\n {renderMarker()}\n </View>\n {renderText({\n accessible: true,\n accessibilityLabel: `List item ${currentIndex} of ${parentLiTags.length}: ${concatTextNodes(mainContent)}`,\n style: [style.text, { flex: 1 }],\n children: <NodesRenderer nodes={mainContent} />,\n })}\n </View>\n {nestedLists.length > 0 && (\n <View style={{ width: '100%' }}>\n <NodesRenderer nodes={nestedLists} />\n </View>\n )}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const PTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n const isFirstChild = !node.previousSibling;\n const isLastChild = !node.nextSibling;\n const style = getStyle(node);\n // collapse top margin for first child and bottom margin for last child\n const marginTop = isFirstChild ? 0 : style.block.marginTop;\n const marginBottom = isLastChild ? 0 : style.block.marginBottom;\n return (\n <DefaultBlockRenderer\n node={node}\n viewProps={{\n style: {\n marginTop,\n marginBottom,\n },\n }}\n />\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { NodeRenderer } from './_NodeRenderer';\n\ninterface Props {\n nodes: (AnyNode | ChildNode)[];\n}\n\nexport const NodesRenderer: FunctionComponent<Props> = ({ nodes }) => {\n return nodes.map((node, index) => <NodeRenderer key={`${node.type}-${index}`} node={node} />);\n};\n"],"mappings":"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","names":["import_react","import_react_native","import_react_native","import_react_native","import_react","import_jsx_runtime","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/RenderHTML.tsx","../src/context/HtmlProvider.tsx","../src/HTMLValidator.ts","../src/renderers/_NodeRenderer.tsx","../src/context/AlignedWidthItem.tsx","../src/context/AlignedWidthProvider.tsx","../src/types.ts","../src/utils.ts","../src/renderers/_DefaultBlockRenderer.tsx","../src/renderers/_DefaultTextRenderer.tsx","../src/assets.ts","../src/renderers/ATagRenderer.tsx","../src/renderers/ImgTagRenderer.tsx","../src/renderers/LiTagRenderer.tsx","../src/renderers/PTagRenderer.tsx","../src/renderers/_NodesRenderer.tsx"],"sourcesContent":["export type { OnHTMLLinkPress } from './context/HtmlProvider';\nexport type { RenderHTMLProps } from './RenderHTML';\nexport { RenderHTML } from './RenderHTML';\nexport type { HTMLTag, HtmlStyle, TagStyles } from './types';\n","import { parseDocument } from 'htmlparser2';\nimport { type ComponentType, type FunctionComponent, type ReactNode, useMemo } from 'react';\nimport {\n type ColorValue,\n type ImageProps,\n type TextProps,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport { HtmlProvider, type OnHTMLLinkPress } from './context/HtmlProvider';\nimport { HTMLValidator } from './HTMLValidator';\nimport { NodesRenderer } from './renderers/_NodesRenderer';\nimport type { CommonProps, HtmlStyle, TagStyles } from './types';\n\nexport interface RenderHTMLProps extends CommonProps {\n html: string;\n}\n\nexport const RenderHTML: FunctionComponent<RenderHTMLProps> = (props) => {\n const nodes = useMemo(() => {\n if (!props.html) {\n return [];\n }\n const cleaned = props.html.replace(/\\n/g, '');\n const n = parseDocument(cleaned);\n return new HTMLValidator(n.children).cleanup();\n }, [props.html]);\n\n return (\n <View>\n <HtmlProvider\n tagStyles={props.tagStyles}\n baseStyle={props.baseStyle}\n classesStyles={props.classesStyles}\n listGap={props.listGap}\n overrideExternalLinkTintColor={props.overrideExternalLinkTintColor}\n markerColor={props.markerColor}\n onLinkPress={props.onLinkPress}\n renderImage={props.renderImage}\n renderTextComponent={props.renderTextComponent}\n >\n <NodesRenderer nodes={nodes} />\n </HtmlProvider>\n </View>\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { createContext, type ReactNode, useCallback, useContext, useMemo } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\nimport { Image, Text } from 'react-native';\n\nimport type { CommonProps, HTMLTag, TagStyles } from '../types';\n\nexport interface OnHTMLLinkPress {\n url: string;\n title: string;\n}\n\ninterface ContextValue {\n getStyle: (node: AnyNode | ChildNode) => {\n text: TextStyle;\n block: ViewStyle;\n };\n baseStyle: TextStyle;\n tagsStyles: TagStyles;\n overrideExternalLinkTintColor?: ColorValue;\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n renderImage: (props: ImageProps) => ReactNode;\n renderText: (props: TextProps) => ReactNode;\n}\n\nconst HtmlContext = createContext<ContextValue | null>(null);\n\ninterface ProviderProps extends CommonProps {\n children: ReactNode;\n}\n\nexport const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {\n const baseStyle = useMemo<TextStyle>(() => {\n return {\n ...options.baseStyle,\n };\n }, [options.baseStyle]);\n\n const tagsStyles = useMemo<TagStyles>(() => {\n // Sorted by renderer type: block first, then text\n return {\n // BLOCK RENDERER TAGS\n thead: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.thead?.text,\n },\n block: {\n ...options.tagStyles?.thead?.block,\n },\n },\n tbody: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tbody?.text,\n },\n block: {\n ...options.tagStyles?.tbody?.block,\n },\n },\n tfoot: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tfoot?.text,\n },\n block: {\n ...options.tagStyles?.tfoot?.block,\n },\n },\n blockquote: {\n text: {\n ...baseStyle,\n fontStyle: 'italic',\n ...options.tagStyles?.blockquote?.text,\n },\n block: {\n borderLeftWidth: 4,\n borderLeftColor: 'black',\n marginLeft: 8,\n paddingLeft: 12,\n backgroundColor: '#cccccc',\n ...options.tagStyles?.blockquote?.block,\n },\n },\n ul: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ul?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ul?.block,\n },\n },\n ol: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ol?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ol?.block,\n },\n },\n dl: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dl?.text,\n },\n block: {\n ...options.tagStyles?.dl?.block,\n },\n },\n div: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.div?.text,\n },\n block: {\n ...options.tagStyles?.div?.block,\n },\n },\n main: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.main?.text,\n },\n block: {\n ...options.tagStyles?.main?.block,\n },\n },\n section: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.section?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.section?.block,\n },\n },\n article: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.article?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.article?.block,\n },\n },\n aside: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.aside?.text,\n },\n block: {\n ...options.tagStyles?.aside?.block,\n },\n },\n nav: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.nav?.text,\n },\n block: {\n ...options.tagStyles?.nav?.block,\n },\n },\n header: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.header?.text,\n },\n block: {\n marginBottom: 8,\n ...options.tagStyles?.header?.block,\n },\n },\n footer: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.footer?.text,\n },\n block: {\n marginTop: 8,\n ...options.tagStyles?.footer?.block,\n },\n },\n hr: {\n text: {\n ...options.tagStyles?.hr?.text,\n },\n block: {\n borderBottomWidth: 1,\n borderBottomColor: 'black',\n marginVertical: 12,\n ...options.tagStyles?.hr?.block,\n },\n },\n br: {\n text: {\n ...options.tagStyles?.br?.text,\n },\n block: {\n height: 16,\n ...options.tagStyles?.br?.block,\n },\n },\n\n img: {\n text: {\n ...options.tagStyles?.img?.text,\n },\n block: {\n marginVertical: 8,\n\n flex: 1,\n width: undefined,\n height: 100,\n\n ...options.tagStyles?.img?.block,\n },\n },\n table: {\n text: {\n ...options.tagStyles?.table?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.table?.block,\n },\n },\n tr: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tr?.text,\n },\n block: {\n ...options.tagStyles?.tr?.block,\n },\n },\n\n // TEXT RENDERER TAGS\n h1: {\n text: {\n ...baseStyle,\n fontSize: 32,\n lineHeight: 38.4,\n fontWeight: 'bold',\n ...options.tagStyles?.h1?.text,\n },\n block: {\n marginTop: 12,\n marginBottom: 8,\n ...options.tagStyles?.h1?.block,\n },\n },\n h2: {\n text: {\n ...baseStyle,\n fontSize: 24,\n lineHeight: 28.8,\n fontWeight: 'bold',\n ...options.tagStyles?.h2?.text,\n },\n block: {\n marginTop: 10,\n marginBottom: 6,\n ...options.tagStyles?.h2?.block,\n },\n },\n h3: {\n text: {\n ...baseStyle,\n fontSize: 18.72,\n lineHeight: 22.46,\n fontWeight: 'bold',\n ...options.tagStyles?.h3?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 6,\n ...options.tagStyles?.h3?.block,\n },\n },\n h4: {\n text: {\n ...baseStyle,\n fontSize: 16,\n lineHeight: 19.2,\n fontWeight: 'bold',\n ...options.tagStyles?.h4?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 4,\n ...options.tagStyles?.h4?.block,\n },\n },\n h5: {\n text: {\n ...baseStyle,\n fontSize: 13.28,\n lineHeight: 15.94,\n fontWeight: 'bold',\n ...options.tagStyles?.h5?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h5?.block,\n },\n },\n h6: {\n text: {\n ...baseStyle,\n fontSize: 10.72,\n lineHeight: 12.86,\n fontWeight: 'bold',\n ...options.tagStyles?.h6?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h6?.block,\n },\n },\n p: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.p?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 8,\n ...options.tagStyles?.p?.block,\n },\n },\n a: {\n text: {\n ...baseStyle,\n textDecorationLine: 'underline',\n ...options.tagStyles?.a?.text,\n },\n },\n li: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.li?.text,\n },\n block: {\n paddingLeft: 0,\n ...options.tagStyles?.li?.block,\n },\n },\n pre: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.pre?.text,\n },\n },\n code: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.code?.text,\n },\n },\n\n // inline text styles\n b: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.b?.text,\n },\n },\n strong: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.strong?.text,\n },\n },\n i: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.i?.text,\n },\n },\n em: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.em?.text,\n },\n },\n u: {\n text: {\n textDecorationLine: 'underline',\n ...options.tagStyles?.u?.text,\n },\n },\n mark: {\n text: {\n ...baseStyle,\n backgroundColor: '#fff59d',\n ...options.tagStyles?.mark?.text,\n },\n },\n small: {\n text: {\n ...baseStyle,\n fontSize: Math.max((baseStyle.fontSize as number) - 2, 12),\n ...options.tagStyles?.small?.text,\n },\n },\n s: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.s?.text,\n },\n },\n del: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.del?.text,\n },\n },\n sup: {\n text: {\n ...baseStyle,\n textAlignVertical: 'top',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sup?.text,\n },\n },\n sub: {\n text: {\n ...baseStyle,\n textAlignVertical: 'bottom',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sub?.text,\n },\n },\n th: {\n text: {\n ...baseStyle,\n fontWeight: 'bold',\n padding: 8,\n borderWidth: 1,\n borderColor: 'black',\n ...options.tagStyles?.th?.text,\n },\n },\n td: {\n text: {\n ...baseStyle,\n padding: 8,\n ...options.tagStyles?.td?.text,\n },\n },\n dt: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dt?.text,\n },\n },\n dd: {\n text: {\n ...baseStyle,\n marginLeft: 20,\n ...options.tagStyles?.dd?.text,\n },\n },\n span: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.span?.text,\n },\n },\n };\n }, [baseStyle, options.tagStyles, options.listGap]);\n\n const getStyle = useCallback(\n (\n node: AnyNode | ChildNode,\n ): {\n text: TextStyle;\n block: ViewStyle;\n } => {\n if (node.type === 'tag') {\n const classStyle = node.attribs.class\n ? options.classesStyles?.[node.attribs.class] || {}\n : {};\n return {\n text: {\n ...tagsStyles[node.tagName as HTMLTag].text,\n ...classStyle.text,\n },\n block: {\n ...(tagsStyles[node.tagName as HTMLTag].block ?? {}),\n ...classStyle.block,\n },\n };\n }\n return {\n text: {},\n block: {},\n };\n },\n [tagsStyles, options.classesStyles],\n );\n\n const renderImage = useMemo<(props: ImageProps) => ReactNode>(() => {\n if (options.renderImage) {\n return options.renderImage;\n }\n return (props: ImageProps) => <Image {...props} />;\n }, [options.renderImage]);\n\n const renderText = useMemo<(props: TextProps) => ReactNode>(() => {\n if (options.renderTextComponent) {\n return options.renderTextComponent;\n }\n return (props: TextProps) => <Text {...props} />;\n }, [options.renderTextComponent]);\n\n const providerValue = useMemo(\n () => ({\n getStyle,\n baseStyle,\n tagsStyles,\n overrideExternalLinkTintColor: options.overrideExternalLinkTintColor,\n onLinkPress: options.onLinkPress,\n markerColor: options.markerColor,\n renderImage,\n renderText,\n }),\n [\n getStyle,\n baseStyle,\n tagsStyles,\n options.overrideExternalLinkTintColor,\n options.onLinkPress,\n options.markerColor,\n renderImage,\n renderText,\n ],\n );\n\n return <HtmlContext.Provider value={providerValue}>{options.children}</HtmlContext.Provider>;\n};\n\nexport const useHtmlContext = () => {\n const context = useContext(HtmlContext);\n if (!context) {\n throw new Error('useHtml must be used within a HtmlProvider');\n }\n return context;\n};\n","import type { AnyNode } from 'domhandler';\n\n/**\n * Cleans up `<ul>` and `<ol>` nodes by removing any empty text nodes\n */\nconst cleanUlNodesUtil = (nodes: AnyNode[]): AnyNode[] => {\n return nodes.map((node) => {\n if (node.type !== 'tag') {\n return node;\n }\n if (node.name === 'ul' || node.name === 'ol') {\n if (!node.children) {\n return node;\n }\n node.children = node.children.filter((child) => {\n return child.type !== 'text' || (child.type === 'text' && child.data.trim() !== '');\n });\n }\n // Recursively process children if present\n if (node.children) {\n node.children = cleanUlNodesUtil(node.children);\n return node;\n }\n return node;\n });\n};\n\nexport class HTMLValidator {\n constructor(private nodes: AnyNode[]) {}\n\n cleanup(): AnyNode[] {\n this.nodes = cleanUlNodesUtil(this.nodes);\n return this.nodes;\n }\n}\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, View } from 'react-native';\n\nimport { AlignedWidthItem } from '../context/AlignedWidthItem';\nimport { AlignedWidthProvider } from '../context/AlignedWidthProvider';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { isTextRenderer } from '../utils';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\nimport { DefaultTextRenderer } from './_DefaultTextRenderer';\nimport { ATagRenderer } from './ATagRenderer';\nimport { ImgTagRenderer } from './ImgTagRenderer';\nimport { LiTagRenderer } from './LiTagRenderer';\nimport { PTagRenderer } from './PTagRenderer';\n\ninterface Props {\n node: AnyNode | ChildNode;\n}\n\nexport const NodeRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n if (node.type === 'tag') {\n switch (node.tagName) {\n case 'thead':\n case 'tbody':\n case 'tfoot':\n case 'blockquote':\n case 'ul':\n case 'ol':\n case 'dl':\n case 'dt':\n case 'dd':\n case 'div':\n case 'main':\n case 'section':\n case 'article':\n case 'aside':\n case 'nav':\n case 'header':\n case 'footer':\n case 'tr':\n return <DefaultBlockRenderer node={node} />;\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return (\n <DefaultBlockRenderer\n node={node}\n textProps={{\n accessible: true,\n accessibilityRole: 'header',\n }}\n />\n );\n case 'p':\n return <PTagRenderer node={node} />;\n case 'li':\n return <LiTagRenderer node={node} />;\n case 'hr':\n return <View style={[getStyle(node).block]} />;\n case 'br':\n if (isTextRenderer(node.prev)) {\n return null;\n }\n return <View style={[getStyle(node).block]} />;\n case 'table':\n return (\n <AlignedWidthProvider>\n <DefaultBlockRenderer node={node} />\n </AlignedWidthProvider>\n );\n case 'img':\n return <ImgTagRenderer node={node} />;\n // text renderers\n case 'b':\n case 'strong':\n case 'i':\n case 'em':\n case 'u':\n case 'mark':\n case 'small':\n case 's':\n case 'del':\n case 'sup':\n case 'sub':\n case 'span':\n case 'pre':\n case 'code':\n return <DefaultTextRenderer node={node} />;\n case 'a':\n return <ATagRenderer node={node} />;\n case 'th':\n case 'td': {\n const currentIndex = node.parent?.children.indexOf(node) || 0;\n return (\n <AlignedWidthItem index={currentIndex}>\n <DefaultTextRenderer node={node} />\n </AlignedWidthItem>\n );\n }\n default:\n // Ignore unsupported tags (script, style, iframe, etc.)\n return null;\n }\n }\n if (node.type === 'text') {\n const text = node.data\n // crush multiple spaces into one\n .replace(/\\s+/g, ' ')\n .replace(/&nbsp;/g, ' ');\n\n return <Text>{text}</Text>;\n }\n return null;\n};\n","import type { FunctionComponent, PropsWithChildren } from 'react';\nimport { type StyleProp, View, type ViewStyle } from 'react-native';\n\nimport { useAlignedWidth } from './AlignedWidthProvider';\n\ninterface Props extends PropsWithChildren {\n index: number;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * This component is used to wrap items that need to have aligned widths.\n * It uses the AlignedWidthProvider context to measure and set the width\n * of each item based on the widest item in the same index position.\n * For example, in a table column.\n */\nexport const AlignedWidthItem: FunctionComponent<Props> = ({ children, index, style }) => {\n const { getLayoutHandlerForIndex, getWidthStyle } = useAlignedWidth();\n\n return (\n <View style={[getWidthStyle(index), style]} onLayout={getLayoutHandlerForIndex(index)}>\n {children}\n </View>\n );\n};\n","import { createContext, type ReactNode, useContext, useState } from 'react';\nimport type { LayoutChangeEvent } from 'react-native';\n\ninterface AlignedWidthContextProps {\n getLayoutHandlerForIndex: (colIdx: number) => (event: LayoutChangeEvent) => void;\n getWidthStyle: (colIdx: number) => { minWidth?: number; width?: number };\n}\n\nconst AlignedWidthContext = createContext<AlignedWidthContextProps | undefined>(undefined);\n\nexport const AlignedWidthProvider = ({ children }: { children: ReactNode }) => {\n const [colWidths, setColWidths] = useState<{ [colIdx: number]: number }>({});\n\n const getLayoutHandlerForIndex = (colIdx: number) => {\n return (event: LayoutChangeEvent) => {\n const { width } = event.nativeEvent.layout;\n setColWidths((prev) => {\n const previousWidth = prev[colIdx] || 0;\n return {\n ...prev,\n [colIdx]: Math.max(previousWidth, width),\n };\n });\n };\n };\n\n const getWidthStyle = (colIdx: number) => {\n return {\n minWidth: colWidths[colIdx] || undefined,\n width: colWidths[colIdx] || undefined,\n };\n };\n\n return (\n <AlignedWidthContext.Provider\n value={{\n getLayoutHandlerForIndex,\n getWidthStyle,\n }}\n >\n {children}\n </AlignedWidthContext.Provider>\n );\n};\n\nexport const useAlignedWidth = () => {\n const context = useContext(AlignedWidthContext);\n if (!context) {\n throw new Error('useAlignedWidth must be used within a AlignedWidthProvider');\n }\n return context;\n};\n","import { ComponentType, ReactNode } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\n\nimport { OnHTMLLinkPress } from './context/HtmlProvider';\n\nexport type HTMLTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'a'\n | 'ul'\n | 'ol'\n | 'li'\n | 'img'\n | 'table'\n | 'tr'\n | 'th'\n | 'td'\n | 'pre'\n | 'code'\n | 'blockquote'\n | 'hr'\n | 'br'\n | 'div'\n | 'b'\n | 'strong'\n | 'i'\n | 'em'\n | 'u'\n | 'mark'\n | 'small'\n | 's'\n | 'del'\n | 'sup'\n | 'sub'\n | 'span'\n | 'dt'\n | 'dd'\n | 'thead'\n | 'tbody'\n | 'tfoot'\n | 'dl'\n | 'main'\n | 'section'\n | 'article'\n | 'aside'\n | 'nav'\n | 'header'\n | 'footer';\n\nexport type RendererType = 'text' | 'block';\n\nexport const rendererTypeMap = {\n // Elements rendered with a View (block)\n thead: 'block',\n tbody: 'block',\n tfoot: 'block',\n blockquote: 'block',\n ul: 'block',\n ol: 'block',\n dl: 'block',\n li: 'block',\n div: 'block',\n hr: 'block',\n br: 'block',\n pre: 'block',\n code: 'block',\n img: 'block',\n table: 'block',\n tr: 'block',\n dt: 'block',\n dd: 'block',\n p: 'block',\n h1: 'block',\n h2: 'block',\n h3: 'block',\n h4: 'block',\n h5: 'block',\n h6: 'block',\n main: 'block',\n section: 'block',\n article: 'block',\n aside: 'block',\n nav: 'block',\n header: 'block',\n footer: 'block',\n\n // All other elements are text\n b: 'text',\n strong: 'text',\n i: 'text',\n em: 'text',\n u: 'text',\n mark: 'text',\n small: 'text',\n s: 'text',\n del: 'text',\n sup: 'text',\n sub: 'text',\n span: 'text',\n a: 'text',\n th: 'text',\n td: 'text',\n} satisfies Record<HTMLTag, RendererType>;\n\nexport type HtmlStyle = {\n text?: TextStyle;\n block?: ViewStyle;\n};\n\nexport type TagStyles = {\n [key in HTMLTag]: HtmlStyle;\n};\n\nexport interface CommonProps {\n /**\n * Render prop for all images rendered by the HTML renderer\n * (<img> tags, bullet markers, and external link icons).\n * Keeps the package free of any specific image library dependency.\n *\n * @example\n * renderImage={(props) => <Image {...props} />}\n */\n renderImage?: (props: ImageProps) => ReactNode;\n\n /**\n * Custom component to use instead of the built-in React Native `Text`.\n * Useful for applying a global font or integrating a design-system text component.\n * Must accept the same props as `Text` (i.e. `TextProps`).\n *\n * @example\n * TextComponent={MyAppText}\n */\n TextComponent?: ComponentType<TextProps & { children?: ReactNode }>;\n\n /**\n * Render prop for all text nodes rendered by the HTML renderer.\n * Receives the full `TextProps` (including `style`, `children`, accessibility props, etc.)\n * and must return a renderable node. Takes priority over `TextComponent` when both are set.\n *\n * @example\n * renderTextComponent={(props) => <MyText {...props} />}\n */\n renderTextComponent?: (props: TextProps) => ReactNode;\n\n // style props\n baseStyle?: TextStyle;\n tagStyles?: Partial<TagStyles>;\n classesStyles?: {\n [className: string]: HtmlStyle;\n };\n listGap?: number;\n\n // interaction/functional props\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n overrideExternalLinkTintColor?: ColorValue;\n}\n","import type { AnyNode, ChildNode, Element } from 'domhandler';\n\nimport { type HTMLTag, rendererTypeMap } from './types';\n\nexport const isTextRenderer = (node: AnyNode | ChildNode | null): boolean => {\n if (!node) {\n return false;\n }\n if (node.type === 'tag') {\n return rendererTypeMap[node.tagName as HTMLTag] === 'text';\n }\n return node.type === 'text';\n};\n\n// Concatenate all text nodes from children\nexport const concatTextNodes = (children: (AnyNode | ChildNode)[]): string => {\n let result = '';\n for (const child of children) {\n if (child.type === 'text') {\n result += child.data;\n }\n // Recursively check for text nodes in element children\n if (child.type === 'tag' && Array.isArray(child.children)) {\n result += concatTextNodes(child.children);\n }\n }\n return result;\n};\n\nexport const isList = (child: ChildNode) => {\n return child.type === 'tag' && (child.tagName === 'ol' || child.tagName === 'ul');\n};\n\nexport const getTextFromNode = (node: Element): string => {\n return node.children.map((c) => (c.type === 'text' ? c.data : '')).join('');\n};\n\nexport const isExternalURL = (url?: string): boolean => {\n if (!url) {\n return false;\n }\n return url.startsWith('https://') || url.startsWith('http://');\n};\n","import type { ChildNode, Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, type TextProps, View, type ViewProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { type HTMLTag, type RendererType, rendererTypeMap } from '../types';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n viewProps?: ViewProps;\n textProps?: TextProps;\n}\n\nexport const DefaultBlockRenderer: FunctionComponent<Props> = ({\n node,\n viewProps = {},\n textProps = {},\n}) => {\n const { getStyle } = useHtmlContext();\n const { style: viewStyle, ...restViewProps } = viewProps;\n const { style: textStyle, ...restTextProps } = textProps;\n\n const groupedChildren = groupByInlineBlock(node.children);\n\n return (\n <View {...restViewProps} style={[getStyle(node).block, viewStyle]}>\n {groupedChildren.map((childrenGroup, index) => {\n if (childrenGroup.type === 'text') {\n return (\n <Text\n {...restTextProps}\n key={`${node.type}-${index}`}\n style={[getStyle(node).text, textStyle]}\n >\n <NodesRenderer nodes={childrenGroup.nodes} />\n </Text>\n );\n }\n return <NodesRenderer key={`${node.type}-${index}`} nodes={childrenGroup.nodes} />;\n })}\n </View>\n );\n};\n\nfunction groupByInlineBlock(arr: ChildNode[]): {\n type: RendererType;\n nodes: ChildNode[];\n}[] {\n const result: {\n type: RendererType;\n nodes: ChildNode[];\n }[] = [];\n let currentGroup: ChildNode[] = [];\n\n for (const item of arr) {\n const isTextNode = item.type === 'text';\n const isTextTag = item.type === 'tag' && rendererTypeMap[item.name as HTMLTag] === 'text';\n if (isTextNode || isTextTag) {\n currentGroup.push(item);\n } else {\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n currentGroup = [];\n }\n result.push({\n type: 'block',\n nodes: [item],\n });\n }\n }\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n }\n return result;\n}\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { type TextProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n textProps?: TextProps;\n}\n\nexport const DefaultTextRenderer: FunctionComponent<Props> = ({ node, textProps = {} }) => {\n const { style, ...restProps } = textProps;\n const { getStyle, renderText } = useHtmlContext();\n\n return (\n <>\n {renderText({\n ...restProps,\n style: [getStyle(node).text, style],\n children: <NodesRenderer nodes={node.children} />,\n })}\n </>\n );\n};\n","export const EXTERNAL_LINK_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IB2cksfwAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJCwwjMljq2h8AAAD4SURBVEjH7dY9SgNBGMbxn7vpIngXwc5SbG39KjxCLDyCnY0nUFGIH0Uu4CU8gXZ2iYU2IsRmiiCz+u4sBpQ8sLwMDPPf53mWYVnoP2sH44bn8evmXgfQM+5n1jW20lz6LXc9DDHFByYRR2foBw4/xkM64xLbuMYy1iNvN8H7N/mPMcg4Gab1KOeoCTQK7KuTkyluZ9LJgqrCTmqcYx932E3dtNJPjnJxwWqamzjoCqpxlYlrEIw7BGqChHqtWnRygb3STqKgkwS5KS0+egWdpnlUAmkDesJhlzuqMifNDdQU3Vr6hKPql4BesIKNFqBXvC3+Bf62PgFLzkKE8ZczlwAAAABJRU5ErkJggg==';\n\nexport const UL_MARKER_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAwCAYAAAAsJjtLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAACKADAAQAAAABAAAAMAAAAAAE1YgVAAAAZklEQVQ4EWNgGAWjITC4QoDxiYRE/H9GxgkM//8LIDuNkYHhAZDfAFJw/z8DgwKyJJzNyPiBCackSBXQVCa4ahwMaigAOgSH6QwgnzD9//+/EOolVHVAjf8YGBpRBUd5oyEw8CEAAGO5FkZ9+flOAAAAAElFTkSuQmCC';\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { EXTERNAL_LINK_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isExternalURL } from '../utils';\n\ninterface Props {\n node: Element;\n}\n\nexport const ATagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { overrideExternalLinkTintColor, onLinkPress, getStyle, renderImage, renderText } =\n useHtmlContext();\n\n const text = concatTextNodes(node.children);\n if (!text) {\n return null;\n }\n const style = getStyle(node);\n\n const fontSize = style.text?.fontSize ?? 18;\n\n const isExternal = node.attribs.href ? isExternalURL(node.attribs.href) : false;\n\n return (\n <>\n {renderText({\n accessible: true,\n onPress: () => {\n onLinkPress?.({\n url: node.attribs.href,\n title: text,\n });\n },\n accessibilityRole: 'link',\n accessibilityHint: isExternal ? 'External link' : undefined,\n importantForAccessibility: 'yes',\n accessibilityElementsHidden: false,\n style: style.text,\n children: (\n <>\n {text}\n {isExternal\n ? renderImage({\n source: { uri: EXTERNAL_LINK_URI },\n style: {\n tintColor: overrideExternalLinkTintColor ?? style.text.color ?? 'black',\n height: fontSize,\n width: fontSize,\n paddingTop: 5,\n },\n })\n : null}\n </>\n ),\n })}\n </>\n );\n};\n","import type { Element } from 'domhandler';\nimport { type FunctionComponent, useEffect, useState } from 'react';\nimport { Image, type ImageStyle, View } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\n\ninterface Props {\n node: Element;\n}\n\nexport const ImgTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, renderImage } = useHtmlContext();\n const [size, setSize] = useState<{\n w: number;\n h: number;\n } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const { src, alt } = node.attribs || {};\n\n useEffect(() => {\n if (!src) {\n return;\n }\n Image.getSize(\n src,\n (width, height) => {\n setSize({ w: width, h: height });\n },\n () => {\n // ignore errors — image simply won't render\n },\n );\n }, [src]);\n\n if (!size) return null;\n\n const { w, h } = size;\n\n const finalWidth = Math.min(w, containerWidth);\n const ratio = h / w;\n\n const imageStyle = {\n ...(getStyle(node).block as ImageStyle),\n width: finalWidth,\n height: finalWidth * ratio,\n };\n\n return (\n <View\n onLayout={(e) => {\n const width = e.nativeEvent.layout.width;\n setContainerWidth(width);\n }}\n style={{ width: '100%' }}\n >\n {renderImage({\n source: { uri: src },\n style: imageStyle,\n alt,\n })}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { View } from 'react-native';\n\nimport { UL_MARKER_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isList } from '../utils';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const LiTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, markerColor, renderImage, renderText } = useHtmlContext();\n\n const isParentOl = node.parent?.type === 'tag' && node.parent?.tagName === 'ol';\n const parentLiTags = node.parent?.children || [];\n const currentIndex = parentLiTags.indexOf(node) + 1;\n const items = node.children;\n const style = getStyle(node);\n const { lineHeight = 20, fontSize = 16 } = style.text;\n const markerHeight = 5;\n const markerColorResult = markerColor ?? style.text.color ?? 'pink';\n const renderMarker = () => {\n if (isParentOl) {\n return renderText({ style: [style.text], children: `${currentIndex}.` });\n } else {\n return renderImage({\n source: { uri: UL_MARKER_URI },\n style: {\n width: markerHeight,\n height: lineHeight,\n tintColor: markerColorResult,\n },\n });\n }\n };\n\n // Separate nested lists and main content\n const nestedLists = items.filter((child) => isList(child));\n const mainContent = items.filter((child) => !isList(child));\n\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n marginRight: 8,\n marginBottom: lineHeight - fontSize,\n }}\n >\n {renderMarker()}\n </View>\n {renderText({\n accessible: true,\n accessibilityLabel: `List item ${currentIndex} of ${parentLiTags.length}: ${concatTextNodes(mainContent)}`,\n style: [style.text, { flex: 1 }],\n children: <NodesRenderer nodes={mainContent} />,\n })}\n </View>\n {nestedLists.length > 0 && (\n <View style={{ width: '100%' }}>\n <NodesRenderer nodes={nestedLists} />\n </View>\n )}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const PTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n const isFirstChild = !node.previousSibling;\n const isLastChild = !node.nextSibling;\n const style = getStyle(node);\n // collapse top margin for first child and bottom margin for last child\n const marginTop = isFirstChild ? 0 : style.block.marginTop;\n const marginBottom = isLastChild ? 0 : style.block.marginBottom;\n return (\n <DefaultBlockRenderer\n node={node}\n viewProps={{\n style: {\n marginTop,\n marginBottom,\n },\n }}\n />\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { NodeRenderer } from './_NodeRenderer';\n\ninterface Props {\n nodes: (AnyNode | ChildNode)[];\n}\n\nexport const NodesRenderer: FunctionComponent<Props> = ({ nodes }) => {\n return nodes.map((node, index) => <NodeRenderer key={`${node.type}-${index}`} node={node} />);\n};\n"],"mappings":"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","names":["import_react","import_react_native","import_react_native","import_react_native","import_react","import_jsx_runtime","import_jsx_runtime","import_react_native","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_react_native","import_jsx_runtime","import_react_native","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
package/dist/index.mjs CHANGED
@@ -226,6 +226,7 @@ var HtmlProvider = (options) => {
226
226
  ...baseStyle,
227
227
  fontSize: 32,
228
228
  lineHeight: 38.4,
229
+ fontWeight: "bold",
229
230
  ...options.tagStyles?.h1?.text
230
231
  },
231
232
  block: {
@@ -239,6 +240,7 @@ var HtmlProvider = (options) => {
239
240
  ...baseStyle,
240
241
  fontSize: 24,
241
242
  lineHeight: 28.8,
243
+ fontWeight: "bold",
242
244
  ...options.tagStyles?.h2?.text
243
245
  },
244
246
  block: {
@@ -252,6 +254,7 @@ var HtmlProvider = (options) => {
252
254
  ...baseStyle,
253
255
  fontSize: 18.72,
254
256
  lineHeight: 22.46,
257
+ fontWeight: "bold",
255
258
  ...options.tagStyles?.h3?.text
256
259
  },
257
260
  block: {
@@ -265,6 +268,7 @@ var HtmlProvider = (options) => {
265
268
  ...baseStyle,
266
269
  fontSize: 16,
267
270
  lineHeight: 19.2,
271
+ fontWeight: "bold",
268
272
  ...options.tagStyles?.h4?.text
269
273
  },
270
274
  block: {
@@ -278,6 +282,7 @@ var HtmlProvider = (options) => {
278
282
  ...baseStyle,
279
283
  fontSize: 13.28,
280
284
  lineHeight: 15.94,
285
+ fontWeight: "bold",
281
286
  ...options.tagStyles?.h5?.text
282
287
  },
283
288
  block: {
@@ -291,6 +296,7 @@ var HtmlProvider = (options) => {
291
296
  ...baseStyle,
292
297
  fontSize: 10.72,
293
298
  lineHeight: 12.86,
299
+ fontWeight: "bold",
294
300
  ...options.tagStyles?.h6?.text
295
301
  },
296
302
  block: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/RenderHTML.tsx","../src/context/HtmlProvider.tsx","../src/HTMLValidator.ts","../src/renderers/_NodeRenderer.tsx","../src/context/AlignedWidthItem.tsx","../src/context/AlignedWidthProvider.tsx","../src/types.ts","../src/utils.ts","../src/renderers/_DefaultBlockRenderer.tsx","../src/renderers/_DefaultTextRenderer.tsx","../src/assets.ts","../src/renderers/ATagRenderer.tsx","../src/renderers/ImgTagRenderer.tsx","../src/renderers/LiTagRenderer.tsx","../src/renderers/PTagRenderer.tsx","../src/renderers/_NodesRenderer.tsx"],"sourcesContent":["import { parseDocument } from 'htmlparser2';\nimport { type ComponentType, type FunctionComponent, type ReactNode, useMemo } from 'react';\nimport {\n type ColorValue,\n type ImageProps,\n type TextProps,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport { HtmlProvider, type OnHTMLLinkPress } from './context/HtmlProvider';\nimport { HTMLValidator } from './HTMLValidator';\nimport { NodesRenderer } from './renderers/_NodesRenderer';\nimport type { CommonProps, HtmlStyle, TagStyles } from './types';\n\nexport interface RenderHTMLProps extends CommonProps {\n html: string;\n}\n\nexport const RenderHTML: FunctionComponent<RenderHTMLProps> = (props) => {\n const nodes = useMemo(() => {\n if (!props.html) {\n return [];\n }\n const cleaned = props.html.replace(/\\n/g, '');\n const n = parseDocument(cleaned);\n return new HTMLValidator(n.children).cleanup();\n }, [props.html]);\n\n return (\n <View>\n <HtmlProvider\n tagStyles={props.tagStyles}\n baseStyle={props.baseStyle}\n classesStyles={props.classesStyles}\n listGap={props.listGap}\n overrideExternalLinkTintColor={props.overrideExternalLinkTintColor}\n markerColor={props.markerColor}\n onLinkPress={props.onLinkPress}\n renderImage={props.renderImage}\n renderTextComponent={props.renderTextComponent}\n >\n <NodesRenderer nodes={nodes} />\n </HtmlProvider>\n </View>\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { createContext, type ReactNode, useCallback, useContext, useMemo } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\nimport { Image, Text } from 'react-native';\n\nimport type { CommonProps, HTMLTag, TagStyles } from '../types';\n\nexport interface OnHTMLLinkPress {\n url: string;\n title: string;\n}\n\ninterface ContextValue {\n getStyle: (node: AnyNode | ChildNode) => {\n text: TextStyle;\n block: ViewStyle;\n };\n baseStyle: TextStyle;\n tagsStyles: TagStyles;\n overrideExternalLinkTintColor?: ColorValue;\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n renderImage: (props: ImageProps) => ReactNode;\n renderText: (props: TextProps) => ReactNode;\n}\n\nconst HtmlContext = createContext<ContextValue | null>(null);\n\ninterface ProviderProps extends CommonProps {\n children: ReactNode;\n}\n\nexport const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {\n const baseStyle = useMemo<TextStyle>(() => {\n return {\n ...options.baseStyle,\n };\n }, [options.baseStyle]);\n\n const tagsStyles = useMemo<TagStyles>(() => {\n // Sorted by renderer type: block first, then text\n return {\n // BLOCK RENDERER TAGS\n thead: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.thead?.text,\n },\n block: {\n ...options.tagStyles?.thead?.block,\n },\n },\n tbody: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tbody?.text,\n },\n block: {\n ...options.tagStyles?.tbody?.block,\n },\n },\n tfoot: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tfoot?.text,\n },\n block: {\n ...options.tagStyles?.tfoot?.block,\n },\n },\n blockquote: {\n text: {\n ...baseStyle,\n fontStyle: 'italic',\n ...options.tagStyles?.blockquote?.text,\n },\n block: {\n borderLeftWidth: 4,\n borderLeftColor: 'black',\n marginLeft: 8,\n paddingLeft: 12,\n backgroundColor: '#cccccc',\n ...options.tagStyles?.blockquote?.block,\n },\n },\n ul: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ul?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ul?.block,\n },\n },\n ol: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ol?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ol?.block,\n },\n },\n dl: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dl?.text,\n },\n block: {\n ...options.tagStyles?.dl?.block,\n },\n },\n div: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.div?.text,\n },\n block: {\n ...options.tagStyles?.div?.block,\n },\n },\n main: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.main?.text,\n },\n block: {\n ...options.tagStyles?.main?.block,\n },\n },\n section: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.section?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.section?.block,\n },\n },\n article: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.article?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.article?.block,\n },\n },\n aside: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.aside?.text,\n },\n block: {\n ...options.tagStyles?.aside?.block,\n },\n },\n nav: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.nav?.text,\n },\n block: {\n ...options.tagStyles?.nav?.block,\n },\n },\n header: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.header?.text,\n },\n block: {\n marginBottom: 8,\n ...options.tagStyles?.header?.block,\n },\n },\n footer: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.footer?.text,\n },\n block: {\n marginTop: 8,\n ...options.tagStyles?.footer?.block,\n },\n },\n hr: {\n text: {\n ...options.tagStyles?.hr?.text,\n },\n block: {\n borderBottomWidth: 1,\n borderBottomColor: 'black',\n marginVertical: 12,\n ...options.tagStyles?.hr?.block,\n },\n },\n br: {\n text: {\n ...options.tagStyles?.br?.text,\n },\n block: {\n height: 16,\n ...options.tagStyles?.br?.block,\n },\n },\n\n img: {\n text: {\n ...options.tagStyles?.img?.text,\n },\n block: {\n marginVertical: 8,\n\n flex: 1,\n width: undefined,\n height: 100,\n\n ...options.tagStyles?.img?.block,\n },\n },\n table: {\n text: {\n ...options.tagStyles?.table?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.table?.block,\n },\n },\n tr: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tr?.text,\n },\n block: {\n ...options.tagStyles?.tr?.block,\n },\n },\n\n // TEXT RENDERER TAGS\n h1: {\n text: {\n ...baseStyle,\n fontSize: 32,\n lineHeight: 38.4,\n ...options.tagStyles?.h1?.text,\n },\n block: {\n marginTop: 12,\n marginBottom: 8,\n ...options.tagStyles?.h1?.block,\n },\n },\n h2: {\n text: {\n ...baseStyle,\n fontSize: 24,\n lineHeight: 28.8,\n ...options.tagStyles?.h2?.text,\n },\n block: {\n marginTop: 10,\n marginBottom: 6,\n ...options.tagStyles?.h2?.block,\n },\n },\n h3: {\n text: {\n ...baseStyle,\n fontSize: 18.72,\n lineHeight: 22.46,\n ...options.tagStyles?.h3?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 6,\n ...options.tagStyles?.h3?.block,\n },\n },\n h4: {\n text: {\n ...baseStyle,\n fontSize: 16,\n lineHeight: 19.2,\n ...options.tagStyles?.h4?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 4,\n ...options.tagStyles?.h4?.block,\n },\n },\n h5: {\n text: {\n ...baseStyle,\n fontSize: 13.28,\n lineHeight: 15.94,\n ...options.tagStyles?.h5?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h5?.block,\n },\n },\n h6: {\n text: {\n ...baseStyle,\n fontSize: 10.72,\n lineHeight: 12.86,\n ...options.tagStyles?.h6?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h6?.block,\n },\n },\n p: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.p?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 8,\n ...options.tagStyles?.p?.block,\n },\n },\n a: {\n text: {\n ...baseStyle,\n textDecorationLine: 'underline',\n ...options.tagStyles?.a?.text,\n },\n },\n li: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.li?.text,\n },\n block: {\n paddingLeft: 0,\n ...options.tagStyles?.li?.block,\n },\n },\n pre: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.pre?.text,\n },\n },\n code: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.code?.text,\n },\n },\n\n // inline text styles\n b: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.b?.text,\n },\n },\n strong: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.strong?.text,\n },\n },\n i: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.i?.text,\n },\n },\n em: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.em?.text,\n },\n },\n u: {\n text: {\n textDecorationLine: 'underline',\n ...options.tagStyles?.u?.text,\n },\n },\n mark: {\n text: {\n ...baseStyle,\n backgroundColor: '#fff59d',\n ...options.tagStyles?.mark?.text,\n },\n },\n small: {\n text: {\n ...baseStyle,\n fontSize: Math.max((baseStyle.fontSize as number) - 2, 12),\n ...options.tagStyles?.small?.text,\n },\n },\n s: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.s?.text,\n },\n },\n del: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.del?.text,\n },\n },\n sup: {\n text: {\n ...baseStyle,\n textAlignVertical: 'top',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sup?.text,\n },\n },\n sub: {\n text: {\n ...baseStyle,\n textAlignVertical: 'bottom',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sub?.text,\n },\n },\n th: {\n text: {\n ...baseStyle,\n fontWeight: 'bold',\n padding: 8,\n borderWidth: 1,\n borderColor: 'black',\n ...options.tagStyles?.th?.text,\n },\n },\n td: {\n text: {\n ...baseStyle,\n padding: 8,\n ...options.tagStyles?.td?.text,\n },\n },\n dt: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dt?.text,\n },\n },\n dd: {\n text: {\n ...baseStyle,\n marginLeft: 20,\n ...options.tagStyles?.dd?.text,\n },\n },\n span: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.span?.text,\n },\n },\n };\n }, [baseStyle, options.tagStyles, options.listGap]);\n\n const getStyle = useCallback(\n (\n node: AnyNode | ChildNode,\n ): {\n text: TextStyle;\n block: ViewStyle;\n } => {\n if (node.type === 'tag') {\n const classStyle = node.attribs.class\n ? options.classesStyles?.[node.attribs.class] || {}\n : {};\n return {\n text: {\n ...tagsStyles[node.tagName as HTMLTag].text,\n ...classStyle.text,\n },\n block: {\n ...(tagsStyles[node.tagName as HTMLTag].block ?? {}),\n ...classStyle.block,\n },\n };\n }\n return {\n text: {},\n block: {},\n };\n },\n [tagsStyles, options.classesStyles],\n );\n\n const renderImage = useMemo<(props: ImageProps) => ReactNode>(() => {\n if (options.renderImage) {\n return options.renderImage;\n }\n return (props: ImageProps) => <Image {...props} />;\n }, [options.renderImage]);\n\n const renderText = useMemo<(props: TextProps) => ReactNode>(() => {\n if (options.renderTextComponent) {\n return options.renderTextComponent;\n }\n return (props: TextProps) => <Text {...props} />;\n }, [options.renderTextComponent]);\n\n const providerValue = useMemo(\n () => ({\n getStyle,\n baseStyle,\n tagsStyles,\n overrideExternalLinkTintColor: options.overrideExternalLinkTintColor,\n onLinkPress: options.onLinkPress,\n markerColor: options.markerColor,\n renderImage,\n renderText,\n }),\n [\n getStyle,\n baseStyle,\n tagsStyles,\n options.overrideExternalLinkTintColor,\n options.onLinkPress,\n options.markerColor,\n renderImage,\n renderText,\n ],\n );\n\n return <HtmlContext.Provider value={providerValue}>{options.children}</HtmlContext.Provider>;\n};\n\nexport const useHtmlContext = () => {\n const context = useContext(HtmlContext);\n if (!context) {\n throw new Error('useHtml must be used within a HtmlProvider');\n }\n return context;\n};\n","import type { AnyNode } from 'domhandler';\n\n/**\n * Cleans up `<ul>` and `<ol>` nodes by removing any empty text nodes\n */\nconst cleanUlNodesUtil = (nodes: AnyNode[]): AnyNode[] => {\n return nodes.map((node) => {\n if (node.type !== 'tag') {\n return node;\n }\n if (node.name === 'ul' || node.name === 'ol') {\n if (!node.children) {\n return node;\n }\n node.children = node.children.filter((child) => {\n return child.type !== 'text' || (child.type === 'text' && child.data.trim() !== '');\n });\n }\n // Recursively process children if present\n if (node.children) {\n node.children = cleanUlNodesUtil(node.children);\n return node;\n }\n return node;\n });\n};\n\nexport class HTMLValidator {\n constructor(private nodes: AnyNode[]) {}\n\n cleanup(): AnyNode[] {\n this.nodes = cleanUlNodesUtil(this.nodes);\n return this.nodes;\n }\n}\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, View } from 'react-native';\n\nimport { AlignedWidthItem } from '../context/AlignedWidthItem';\nimport { AlignedWidthProvider } from '../context/AlignedWidthProvider';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { isTextRenderer } from '../utils';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\nimport { DefaultTextRenderer } from './_DefaultTextRenderer';\nimport { ATagRenderer } from './ATagRenderer';\nimport { ImgTagRenderer } from './ImgTagRenderer';\nimport { LiTagRenderer } from './LiTagRenderer';\nimport { PTagRenderer } from './PTagRenderer';\n\ninterface Props {\n node: AnyNode | ChildNode;\n}\n\nexport const NodeRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n if (node.type === 'tag') {\n switch (node.tagName) {\n case 'thead':\n case 'tbody':\n case 'tfoot':\n case 'blockquote':\n case 'ul':\n case 'ol':\n case 'dl':\n case 'dt':\n case 'dd':\n case 'div':\n case 'main':\n case 'section':\n case 'article':\n case 'aside':\n case 'nav':\n case 'header':\n case 'footer':\n case 'tr':\n return <DefaultBlockRenderer node={node} />;\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return (\n <DefaultBlockRenderer\n node={node}\n textProps={{\n accessible: true,\n accessibilityRole: 'header',\n }}\n />\n );\n case 'p':\n return <PTagRenderer node={node} />;\n case 'li':\n return <LiTagRenderer node={node} />;\n case 'hr':\n return <View style={[getStyle(node).block]} />;\n case 'br':\n if (isTextRenderer(node.prev)) {\n return null;\n }\n return <View style={[getStyle(node).block]} />;\n case 'table':\n return (\n <AlignedWidthProvider>\n <DefaultBlockRenderer node={node} />\n </AlignedWidthProvider>\n );\n case 'img':\n return <ImgTagRenderer node={node} />;\n // text renderers\n case 'b':\n case 'strong':\n case 'i':\n case 'em':\n case 'u':\n case 'mark':\n case 'small':\n case 's':\n case 'del':\n case 'sup':\n case 'sub':\n case 'span':\n case 'pre':\n case 'code':\n return <DefaultTextRenderer node={node} />;\n case 'a':\n return <ATagRenderer node={node} />;\n case 'th':\n case 'td': {\n const currentIndex = node.parent?.children.indexOf(node) || 0;\n return (\n <AlignedWidthItem index={currentIndex}>\n <DefaultTextRenderer node={node} />\n </AlignedWidthItem>\n );\n }\n default:\n // Ignore unsupported tags (script, style, iframe, etc.)\n return null;\n }\n }\n if (node.type === 'text') {\n const text = node.data\n // crush multiple spaces into one\n .replace(/\\s+/g, ' ')\n .replace(/&nbsp;/g, ' ');\n\n return <Text>{text}</Text>;\n }\n return null;\n};\n","import type { FunctionComponent, PropsWithChildren } from 'react';\nimport { type StyleProp, View, type ViewStyle } from 'react-native';\n\nimport { useAlignedWidth } from './AlignedWidthProvider';\n\ninterface Props extends PropsWithChildren {\n index: number;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * This component is used to wrap items that need to have aligned widths.\n * It uses the AlignedWidthProvider context to measure and set the width\n * of each item based on the widest item in the same index position.\n * For example, in a table column.\n */\nexport const AlignedWidthItem: FunctionComponent<Props> = ({ children, index, style }) => {\n const { getLayoutHandlerForIndex, getWidthStyle } = useAlignedWidth();\n\n return (\n <View style={[getWidthStyle(index), style]} onLayout={getLayoutHandlerForIndex(index)}>\n {children}\n </View>\n );\n};\n","import { createContext, type ReactNode, useContext, useState } from 'react';\nimport type { LayoutChangeEvent } from 'react-native';\n\ninterface AlignedWidthContextProps {\n getLayoutHandlerForIndex: (colIdx: number) => (event: LayoutChangeEvent) => void;\n getWidthStyle: (colIdx: number) => { minWidth?: number; width?: number };\n}\n\nconst AlignedWidthContext = createContext<AlignedWidthContextProps | undefined>(undefined);\n\nexport const AlignedWidthProvider = ({ children }: { children: ReactNode }) => {\n const [colWidths, setColWidths] = useState<{ [colIdx: number]: number }>({});\n\n const getLayoutHandlerForIndex = (colIdx: number) => {\n return (event: LayoutChangeEvent) => {\n const { width } = event.nativeEvent.layout;\n setColWidths((prev) => {\n const previousWidth = prev[colIdx] || 0;\n return {\n ...prev,\n [colIdx]: Math.max(previousWidth, width),\n };\n });\n };\n };\n\n const getWidthStyle = (colIdx: number) => {\n return {\n minWidth: colWidths[colIdx] || undefined,\n width: colWidths[colIdx] || undefined,\n };\n };\n\n return (\n <AlignedWidthContext.Provider\n value={{\n getLayoutHandlerForIndex,\n getWidthStyle,\n }}\n >\n {children}\n </AlignedWidthContext.Provider>\n );\n};\n\nexport const useAlignedWidth = () => {\n const context = useContext(AlignedWidthContext);\n if (!context) {\n throw new Error('useAlignedWidth must be used within a AlignedWidthProvider');\n }\n return context;\n};\n","import { ComponentType, ReactNode } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\n\nimport { OnHTMLLinkPress } from './context/HtmlProvider';\n\nexport type HTMLTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'a'\n | 'ul'\n | 'ol'\n | 'li'\n | 'img'\n | 'table'\n | 'tr'\n | 'th'\n | 'td'\n | 'pre'\n | 'code'\n | 'blockquote'\n | 'hr'\n | 'br'\n | 'div'\n | 'b'\n | 'strong'\n | 'i'\n | 'em'\n | 'u'\n | 'mark'\n | 'small'\n | 's'\n | 'del'\n | 'sup'\n | 'sub'\n | 'span'\n | 'dt'\n | 'dd'\n | 'thead'\n | 'tbody'\n | 'tfoot'\n | 'dl'\n | 'main'\n | 'section'\n | 'article'\n | 'aside'\n | 'nav'\n | 'header'\n | 'footer';\n\nexport type RendererType = 'text' | 'block';\n\nexport const rendererTypeMap = {\n // Elements rendered with a View (block)\n thead: 'block',\n tbody: 'block',\n tfoot: 'block',\n blockquote: 'block',\n ul: 'block',\n ol: 'block',\n dl: 'block',\n li: 'block',\n div: 'block',\n hr: 'block',\n br: 'block',\n pre: 'block',\n code: 'block',\n img: 'block',\n table: 'block',\n tr: 'block',\n dt: 'block',\n dd: 'block',\n p: 'block',\n h1: 'block',\n h2: 'block',\n h3: 'block',\n h4: 'block',\n h5: 'block',\n h6: 'block',\n main: 'block',\n section: 'block',\n article: 'block',\n aside: 'block',\n nav: 'block',\n header: 'block',\n footer: 'block',\n\n // All other elements are text\n b: 'text',\n strong: 'text',\n i: 'text',\n em: 'text',\n u: 'text',\n mark: 'text',\n small: 'text',\n s: 'text',\n del: 'text',\n sup: 'text',\n sub: 'text',\n span: 'text',\n a: 'text',\n th: 'text',\n td: 'text',\n} satisfies Record<HTMLTag, RendererType>;\n\nexport type HtmlStyle = {\n text?: TextStyle;\n block?: ViewStyle;\n};\n\nexport type TagStyles = {\n [key in HTMLTag]: HtmlStyle;\n};\n\nexport interface CommonProps {\n /**\n * Render prop for all images rendered by the HTML renderer\n * (<img> tags, bullet markers, and external link icons).\n * Keeps the package free of any specific image library dependency.\n *\n * @example\n * renderImage={(props) => <Image {...props} />}\n */\n renderImage?: (props: ImageProps) => ReactNode;\n\n /**\n * Custom component to use instead of the built-in React Native `Text`.\n * Useful for applying a global font or integrating a design-system text component.\n * Must accept the same props as `Text` (i.e. `TextProps`).\n *\n * @example\n * TextComponent={MyAppText}\n */\n TextComponent?: ComponentType<TextProps & { children?: ReactNode }>;\n\n /**\n * Render prop for all text nodes rendered by the HTML renderer.\n * Receives the full `TextProps` (including `style`, `children`, accessibility props, etc.)\n * and must return a renderable node. Takes priority over `TextComponent` when both are set.\n *\n * @example\n * renderTextComponent={(props) => <MyText {...props} />}\n */\n renderTextComponent?: (props: TextProps) => ReactNode;\n\n // style props\n baseStyle?: TextStyle;\n tagStyles?: Partial<TagStyles>;\n classesStyles?: {\n [className: string]: HtmlStyle;\n };\n listGap?: number;\n\n // interaction/functional props\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n overrideExternalLinkTintColor?: ColorValue;\n}\n","import type { AnyNode, ChildNode, Element } from 'domhandler';\n\nimport { type HTMLTag, rendererTypeMap } from './types';\n\nexport const isTextRenderer = (node: AnyNode | ChildNode | null): boolean => {\n if (!node) {\n return false;\n }\n if (node.type === 'tag') {\n return rendererTypeMap[node.tagName as HTMLTag] === 'text';\n }\n return node.type === 'text';\n};\n\n// Concatenate all text nodes from children\nexport const concatTextNodes = (children: (AnyNode | ChildNode)[]): string => {\n let result = '';\n for (const child of children) {\n if (child.type === 'text') {\n result += child.data;\n }\n // Recursively check for text nodes in element children\n if (child.type === 'tag' && Array.isArray(child.children)) {\n result += concatTextNodes(child.children);\n }\n }\n return result;\n};\n\nexport const isList = (child: ChildNode) => {\n return child.type === 'tag' && (child.tagName === 'ol' || child.tagName === 'ul');\n};\n\nexport const getTextFromNode = (node: Element): string => {\n return node.children.map((c) => (c.type === 'text' ? c.data : '')).join('');\n};\n\nexport const isExternalURL = (url?: string): boolean => {\n if (!url) {\n return false;\n }\n return url.startsWith('https://') || url.startsWith('http://');\n};\n","import type { ChildNode, Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, type TextProps, View, type ViewProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { type HTMLTag, type RendererType, rendererTypeMap } from '../types';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n viewProps?: ViewProps;\n textProps?: TextProps;\n}\n\nexport const DefaultBlockRenderer: FunctionComponent<Props> = ({\n node,\n viewProps = {},\n textProps = {},\n}) => {\n const { getStyle } = useHtmlContext();\n const { style: viewStyle, ...restViewProps } = viewProps;\n const { style: textStyle, ...restTextProps } = textProps;\n\n const groupedChildren = groupByInlineBlock(node.children);\n\n return (\n <View {...restViewProps} style={[getStyle(node).block, viewStyle]}>\n {groupedChildren.map((childrenGroup, index) => {\n if (childrenGroup.type === 'text') {\n return (\n <Text\n {...restTextProps}\n key={`${node.type}-${index}`}\n style={[getStyle(node).text, textStyle]}\n >\n <NodesRenderer nodes={childrenGroup.nodes} />\n </Text>\n );\n }\n return <NodesRenderer key={`${node.type}-${index}`} nodes={childrenGroup.nodes} />;\n })}\n </View>\n );\n};\n\nfunction groupByInlineBlock(arr: ChildNode[]): {\n type: RendererType;\n nodes: ChildNode[];\n}[] {\n const result: {\n type: RendererType;\n nodes: ChildNode[];\n }[] = [];\n let currentGroup: ChildNode[] = [];\n\n for (const item of arr) {\n const isTextNode = item.type === 'text';\n const isTextTag = item.type === 'tag' && rendererTypeMap[item.name as HTMLTag] === 'text';\n if (isTextNode || isTextTag) {\n currentGroup.push(item);\n } else {\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n currentGroup = [];\n }\n result.push({\n type: 'block',\n nodes: [item],\n });\n }\n }\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n }\n return result;\n}\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { type TextProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n textProps?: TextProps;\n}\n\nexport const DefaultTextRenderer: FunctionComponent<Props> = ({ node, textProps = {} }) => {\n const { style, ...restProps } = textProps;\n const { getStyle, renderText } = useHtmlContext();\n\n return (\n <>\n {renderText({\n ...restProps,\n style: [getStyle(node).text, style],\n children: <NodesRenderer nodes={node.children} />,\n })}\n </>\n );\n};\n","export const EXTERNAL_LINK_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IB2cksfwAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJCwwjMljq2h8AAAD4SURBVEjH7dY9SgNBGMbxn7vpIngXwc5SbG39KjxCLDyCnY0nUFGIH0Uu4CU8gXZ2iYU2IsRmiiCz+u4sBpQ8sLwMDPPf53mWYVnoP2sH44bn8evmXgfQM+5n1jW20lz6LXc9DDHFByYRR2foBw4/xkM64xLbuMYy1iNvN8H7N/mPMcg4Gab1KOeoCTQK7KuTkyluZ9LJgqrCTmqcYx932E3dtNJPjnJxwWqamzjoCqpxlYlrEIw7BGqChHqtWnRygb3STqKgkwS5KS0+egWdpnlUAmkDesJhlzuqMifNDdQU3Vr6hKPql4BesIKNFqBXvC3+Bf62PgFLzkKE8ZczlwAAAABJRU5ErkJggg==';\n\nexport const UL_MARKER_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAwCAYAAAAsJjtLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAACKADAAQAAAABAAAAMAAAAAAE1YgVAAAAZklEQVQ4EWNgGAWjITC4QoDxiYRE/H9GxgkM//8LIDuNkYHhAZDfAFJw/z8DgwKyJJzNyPiBCackSBXQVCa4ahwMaigAOgSH6QwgnzD9//+/EOolVHVAjf8YGBpRBUd5oyEw8CEAAGO5FkZ9+flOAAAAAElFTkSuQmCC';\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { EXTERNAL_LINK_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isExternalURL } from '../utils';\n\ninterface Props {\n node: Element;\n}\n\nexport const ATagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { overrideExternalLinkTintColor, onLinkPress, getStyle, renderImage, renderText } =\n useHtmlContext();\n\n const text = concatTextNodes(node.children);\n if (!text) {\n return null;\n }\n const style = getStyle(node);\n\n const fontSize = style.text?.fontSize ?? 18;\n\n const isExternal = node.attribs.href ? isExternalURL(node.attribs.href) : false;\n\n return (\n <>\n {renderText({\n accessible: true,\n onPress: () => {\n onLinkPress?.({\n url: node.attribs.href,\n title: text,\n });\n },\n accessibilityRole: 'link',\n accessibilityHint: isExternal ? 'External link' : undefined,\n importantForAccessibility: 'yes',\n accessibilityElementsHidden: false,\n style: style.text,\n children: (\n <>\n {text}\n {isExternal\n ? renderImage({\n source: { uri: EXTERNAL_LINK_URI },\n style: {\n tintColor: overrideExternalLinkTintColor ?? style.text.color ?? 'black',\n height: fontSize,\n width: fontSize,\n paddingTop: 5,\n },\n })\n : null}\n </>\n ),\n })}\n </>\n );\n};\n","import type { Element } from 'domhandler';\nimport { type FunctionComponent, useEffect, useState } from 'react';\nimport { Image, type ImageStyle, View } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\n\ninterface Props {\n node: Element;\n}\n\nexport const ImgTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, renderImage } = useHtmlContext();\n const [size, setSize] = useState<{\n w: number;\n h: number;\n } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const { src, alt } = node.attribs || {};\n\n useEffect(() => {\n if (!src) {\n return;\n }\n Image.getSize(\n src,\n (width, height) => {\n setSize({ w: width, h: height });\n },\n () => {\n // ignore errors — image simply won't render\n },\n );\n }, [src]);\n\n if (!size) return null;\n\n const { w, h } = size;\n\n const finalWidth = Math.min(w, containerWidth);\n const ratio = h / w;\n\n const imageStyle = {\n ...(getStyle(node).block as ImageStyle),\n width: finalWidth,\n height: finalWidth * ratio,\n };\n\n return (\n <View\n onLayout={(e) => {\n const width = e.nativeEvent.layout.width;\n setContainerWidth(width);\n }}\n style={{ width: '100%' }}\n >\n {renderImage({\n source: { uri: src },\n style: imageStyle,\n alt,\n })}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { View } from 'react-native';\n\nimport { UL_MARKER_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isList } from '../utils';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const LiTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, markerColor, renderImage, renderText } = useHtmlContext();\n\n const isParentOl = node.parent?.type === 'tag' && node.parent?.tagName === 'ol';\n const parentLiTags = node.parent?.children || [];\n const currentIndex = parentLiTags.indexOf(node) + 1;\n const items = node.children;\n const style = getStyle(node);\n const { lineHeight = 20, fontSize = 16 } = style.text;\n const markerHeight = 5;\n const markerColorResult = markerColor ?? style.text.color ?? 'pink';\n const renderMarker = () => {\n if (isParentOl) {\n return renderText({ style: [style.text], children: `${currentIndex}.` });\n } else {\n return renderImage({\n source: { uri: UL_MARKER_URI },\n style: {\n width: markerHeight,\n height: lineHeight,\n tintColor: markerColorResult,\n },\n });\n }\n };\n\n // Separate nested lists and main content\n const nestedLists = items.filter((child) => isList(child));\n const mainContent = items.filter((child) => !isList(child));\n\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n marginRight: 8,\n marginBottom: lineHeight - fontSize,\n }}\n >\n {renderMarker()}\n </View>\n {renderText({\n accessible: true,\n accessibilityLabel: `List item ${currentIndex} of ${parentLiTags.length}: ${concatTextNodes(mainContent)}`,\n style: [style.text, { flex: 1 }],\n children: <NodesRenderer nodes={mainContent} />,\n })}\n </View>\n {nestedLists.length > 0 && (\n <View style={{ width: '100%' }}>\n <NodesRenderer nodes={nestedLists} />\n </View>\n )}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const PTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n const isFirstChild = !node.previousSibling;\n const isLastChild = !node.nextSibling;\n const style = getStyle(node);\n // collapse top margin for first child and bottom margin for last child\n const marginTop = isFirstChild ? 0 : style.block.marginTop;\n const marginBottom = isLastChild ? 0 : style.block.marginBottom;\n return (\n <DefaultBlockRenderer\n node={node}\n viewProps={{\n style: {\n marginTop,\n marginBottom,\n },\n }}\n />\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { NodeRenderer } from './_NodeRenderer';\n\ninterface Props {\n nodes: (AnyNode | ChildNode)[];\n}\n\nexport const NodesRenderer: FunctionComponent<Props> = ({ nodes }) => {\n return nodes.map((node, index) => <NodeRenderer key={`${node.type}-${index}`} node={node} />);\n};\n"],"mappings":"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","names":["useMemo","View","Text","View","createContext","useContext","jsx","jsx","Text","View","jsx","View","Text","jsx","Fragment","jsx","useState","Image","View","jsx","useState","Image","View","View","jsx","jsxs","View","jsx","jsx","View","Text","jsx","jsx","useMemo","View"]}
1
+ {"version":3,"sources":["../src/RenderHTML.tsx","../src/context/HtmlProvider.tsx","../src/HTMLValidator.ts","../src/renderers/_NodeRenderer.tsx","../src/context/AlignedWidthItem.tsx","../src/context/AlignedWidthProvider.tsx","../src/types.ts","../src/utils.ts","../src/renderers/_DefaultBlockRenderer.tsx","../src/renderers/_DefaultTextRenderer.tsx","../src/assets.ts","../src/renderers/ATagRenderer.tsx","../src/renderers/ImgTagRenderer.tsx","../src/renderers/LiTagRenderer.tsx","../src/renderers/PTagRenderer.tsx","../src/renderers/_NodesRenderer.tsx"],"sourcesContent":["import { parseDocument } from 'htmlparser2';\nimport { type ComponentType, type FunctionComponent, type ReactNode, useMemo } from 'react';\nimport {\n type ColorValue,\n type ImageProps,\n type TextProps,\n type TextStyle,\n View,\n} from 'react-native';\n\nimport { HtmlProvider, type OnHTMLLinkPress } from './context/HtmlProvider';\nimport { HTMLValidator } from './HTMLValidator';\nimport { NodesRenderer } from './renderers/_NodesRenderer';\nimport type { CommonProps, HtmlStyle, TagStyles } from './types';\n\nexport interface RenderHTMLProps extends CommonProps {\n html: string;\n}\n\nexport const RenderHTML: FunctionComponent<RenderHTMLProps> = (props) => {\n const nodes = useMemo(() => {\n if (!props.html) {\n return [];\n }\n const cleaned = props.html.replace(/\\n/g, '');\n const n = parseDocument(cleaned);\n return new HTMLValidator(n.children).cleanup();\n }, [props.html]);\n\n return (\n <View>\n <HtmlProvider\n tagStyles={props.tagStyles}\n baseStyle={props.baseStyle}\n classesStyles={props.classesStyles}\n listGap={props.listGap}\n overrideExternalLinkTintColor={props.overrideExternalLinkTintColor}\n markerColor={props.markerColor}\n onLinkPress={props.onLinkPress}\n renderImage={props.renderImage}\n renderTextComponent={props.renderTextComponent}\n >\n <NodesRenderer nodes={nodes} />\n </HtmlProvider>\n </View>\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { createContext, type ReactNode, useCallback, useContext, useMemo } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\nimport { Image, Text } from 'react-native';\n\nimport type { CommonProps, HTMLTag, TagStyles } from '../types';\n\nexport interface OnHTMLLinkPress {\n url: string;\n title: string;\n}\n\ninterface ContextValue {\n getStyle: (node: AnyNode | ChildNode) => {\n text: TextStyle;\n block: ViewStyle;\n };\n baseStyle: TextStyle;\n tagsStyles: TagStyles;\n overrideExternalLinkTintColor?: ColorValue;\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n renderImage: (props: ImageProps) => ReactNode;\n renderText: (props: TextProps) => ReactNode;\n}\n\nconst HtmlContext = createContext<ContextValue | null>(null);\n\ninterface ProviderProps extends CommonProps {\n children: ReactNode;\n}\n\nexport const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {\n const baseStyle = useMemo<TextStyle>(() => {\n return {\n ...options.baseStyle,\n };\n }, [options.baseStyle]);\n\n const tagsStyles = useMemo<TagStyles>(() => {\n // Sorted by renderer type: block first, then text\n return {\n // BLOCK RENDERER TAGS\n thead: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.thead?.text,\n },\n block: {\n ...options.tagStyles?.thead?.block,\n },\n },\n tbody: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tbody?.text,\n },\n block: {\n ...options.tagStyles?.tbody?.block,\n },\n },\n tfoot: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tfoot?.text,\n },\n block: {\n ...options.tagStyles?.tfoot?.block,\n },\n },\n blockquote: {\n text: {\n ...baseStyle,\n fontStyle: 'italic',\n ...options.tagStyles?.blockquote?.text,\n },\n block: {\n borderLeftWidth: 4,\n borderLeftColor: 'black',\n marginLeft: 8,\n paddingLeft: 12,\n backgroundColor: '#cccccc',\n ...options.tagStyles?.blockquote?.block,\n },\n },\n ul: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ul?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ul?.block,\n },\n },\n ol: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.ol?.text,\n },\n block: {\n paddingLeft: 12,\n paddingVertical: 0,\n gap: options.listGap ?? 0,\n ...options.tagStyles?.ol?.block,\n },\n },\n dl: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dl?.text,\n },\n block: {\n ...options.tagStyles?.dl?.block,\n },\n },\n div: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.div?.text,\n },\n block: {\n ...options.tagStyles?.div?.block,\n },\n },\n main: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.main?.text,\n },\n block: {\n ...options.tagStyles?.main?.block,\n },\n },\n section: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.section?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.section?.block,\n },\n },\n article: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.article?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.article?.block,\n },\n },\n aside: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.aside?.text,\n },\n block: {\n ...options.tagStyles?.aside?.block,\n },\n },\n nav: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.nav?.text,\n },\n block: {\n ...options.tagStyles?.nav?.block,\n },\n },\n header: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.header?.text,\n },\n block: {\n marginBottom: 8,\n ...options.tagStyles?.header?.block,\n },\n },\n footer: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.footer?.text,\n },\n block: {\n marginTop: 8,\n ...options.tagStyles?.footer?.block,\n },\n },\n hr: {\n text: {\n ...options.tagStyles?.hr?.text,\n },\n block: {\n borderBottomWidth: 1,\n borderBottomColor: 'black',\n marginVertical: 12,\n ...options.tagStyles?.hr?.block,\n },\n },\n br: {\n text: {\n ...options.tagStyles?.br?.text,\n },\n block: {\n height: 16,\n ...options.tagStyles?.br?.block,\n },\n },\n\n img: {\n text: {\n ...options.tagStyles?.img?.text,\n },\n block: {\n marginVertical: 8,\n\n flex: 1,\n width: undefined,\n height: 100,\n\n ...options.tagStyles?.img?.block,\n },\n },\n table: {\n text: {\n ...options.tagStyles?.table?.text,\n },\n block: {\n marginVertical: 8,\n ...options.tagStyles?.table?.block,\n },\n },\n tr: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.tr?.text,\n },\n block: {\n ...options.tagStyles?.tr?.block,\n },\n },\n\n // TEXT RENDERER TAGS\n h1: {\n text: {\n ...baseStyle,\n fontSize: 32,\n lineHeight: 38.4,\n fontWeight: 'bold',\n ...options.tagStyles?.h1?.text,\n },\n block: {\n marginTop: 12,\n marginBottom: 8,\n ...options.tagStyles?.h1?.block,\n },\n },\n h2: {\n text: {\n ...baseStyle,\n fontSize: 24,\n lineHeight: 28.8,\n fontWeight: 'bold',\n ...options.tagStyles?.h2?.text,\n },\n block: {\n marginTop: 10,\n marginBottom: 6,\n ...options.tagStyles?.h2?.block,\n },\n },\n h3: {\n text: {\n ...baseStyle,\n fontSize: 18.72,\n lineHeight: 22.46,\n fontWeight: 'bold',\n ...options.tagStyles?.h3?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 6,\n ...options.tagStyles?.h3?.block,\n },\n },\n h4: {\n text: {\n ...baseStyle,\n fontSize: 16,\n lineHeight: 19.2,\n fontWeight: 'bold',\n ...options.tagStyles?.h4?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 4,\n ...options.tagStyles?.h4?.block,\n },\n },\n h5: {\n text: {\n ...baseStyle,\n fontSize: 13.28,\n lineHeight: 15.94,\n fontWeight: 'bold',\n ...options.tagStyles?.h5?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h5?.block,\n },\n },\n h6: {\n text: {\n ...baseStyle,\n fontSize: 10.72,\n lineHeight: 12.86,\n fontWeight: 'bold',\n ...options.tagStyles?.h6?.text,\n },\n block: {\n marginTop: 6,\n marginBottom: 4,\n ...options.tagStyles?.h6?.block,\n },\n },\n p: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.p?.text,\n },\n block: {\n marginTop: 8,\n marginBottom: 8,\n ...options.tagStyles?.p?.block,\n },\n },\n a: {\n text: {\n ...baseStyle,\n textDecorationLine: 'underline',\n ...options.tagStyles?.a?.text,\n },\n },\n li: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.li?.text,\n },\n block: {\n paddingLeft: 0,\n ...options.tagStyles?.li?.block,\n },\n },\n pre: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.pre?.text,\n },\n },\n code: {\n text: {\n ...baseStyle,\n fontFamily: 'monospace',\n backgroundColor: '#bbbbbb',\n ...options.tagStyles?.code?.text,\n },\n },\n\n // inline text styles\n b: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.b?.text,\n },\n },\n strong: {\n text: {\n fontWeight: 'bold',\n ...options.tagStyles?.strong?.text,\n },\n },\n i: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.i?.text,\n },\n },\n em: {\n text: {\n fontStyle: 'italic',\n ...options.tagStyles?.em?.text,\n },\n },\n u: {\n text: {\n textDecorationLine: 'underline',\n ...options.tagStyles?.u?.text,\n },\n },\n mark: {\n text: {\n ...baseStyle,\n backgroundColor: '#fff59d',\n ...options.tagStyles?.mark?.text,\n },\n },\n small: {\n text: {\n ...baseStyle,\n fontSize: Math.max((baseStyle.fontSize as number) - 2, 12),\n ...options.tagStyles?.small?.text,\n },\n },\n s: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.s?.text,\n },\n },\n del: {\n text: {\n ...baseStyle,\n textDecorationLine: 'line-through',\n ...options.tagStyles?.del?.text,\n },\n },\n sup: {\n text: {\n ...baseStyle,\n textAlignVertical: 'top',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sup?.text,\n },\n },\n sub: {\n text: {\n ...baseStyle,\n textAlignVertical: 'bottom',\n fontSize: Math.max((baseStyle.fontSize as number) - 4, 10),\n ...options.tagStyles?.sub?.text,\n },\n },\n th: {\n text: {\n ...baseStyle,\n fontWeight: 'bold',\n padding: 8,\n borderWidth: 1,\n borderColor: 'black',\n ...options.tagStyles?.th?.text,\n },\n },\n td: {\n text: {\n ...baseStyle,\n padding: 8,\n ...options.tagStyles?.td?.text,\n },\n },\n dt: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.dt?.text,\n },\n },\n dd: {\n text: {\n ...baseStyle,\n marginLeft: 20,\n ...options.tagStyles?.dd?.text,\n },\n },\n span: {\n text: {\n ...baseStyle,\n ...options.tagStyles?.span?.text,\n },\n },\n };\n }, [baseStyle, options.tagStyles, options.listGap]);\n\n const getStyle = useCallback(\n (\n node: AnyNode | ChildNode,\n ): {\n text: TextStyle;\n block: ViewStyle;\n } => {\n if (node.type === 'tag') {\n const classStyle = node.attribs.class\n ? options.classesStyles?.[node.attribs.class] || {}\n : {};\n return {\n text: {\n ...tagsStyles[node.tagName as HTMLTag].text,\n ...classStyle.text,\n },\n block: {\n ...(tagsStyles[node.tagName as HTMLTag].block ?? {}),\n ...classStyle.block,\n },\n };\n }\n return {\n text: {},\n block: {},\n };\n },\n [tagsStyles, options.classesStyles],\n );\n\n const renderImage = useMemo<(props: ImageProps) => ReactNode>(() => {\n if (options.renderImage) {\n return options.renderImage;\n }\n return (props: ImageProps) => <Image {...props} />;\n }, [options.renderImage]);\n\n const renderText = useMemo<(props: TextProps) => ReactNode>(() => {\n if (options.renderTextComponent) {\n return options.renderTextComponent;\n }\n return (props: TextProps) => <Text {...props} />;\n }, [options.renderTextComponent]);\n\n const providerValue = useMemo(\n () => ({\n getStyle,\n baseStyle,\n tagsStyles,\n overrideExternalLinkTintColor: options.overrideExternalLinkTintColor,\n onLinkPress: options.onLinkPress,\n markerColor: options.markerColor,\n renderImage,\n renderText,\n }),\n [\n getStyle,\n baseStyle,\n tagsStyles,\n options.overrideExternalLinkTintColor,\n options.onLinkPress,\n options.markerColor,\n renderImage,\n renderText,\n ],\n );\n\n return <HtmlContext.Provider value={providerValue}>{options.children}</HtmlContext.Provider>;\n};\n\nexport const useHtmlContext = () => {\n const context = useContext(HtmlContext);\n if (!context) {\n throw new Error('useHtml must be used within a HtmlProvider');\n }\n return context;\n};\n","import type { AnyNode } from 'domhandler';\n\n/**\n * Cleans up `<ul>` and `<ol>` nodes by removing any empty text nodes\n */\nconst cleanUlNodesUtil = (nodes: AnyNode[]): AnyNode[] => {\n return nodes.map((node) => {\n if (node.type !== 'tag') {\n return node;\n }\n if (node.name === 'ul' || node.name === 'ol') {\n if (!node.children) {\n return node;\n }\n node.children = node.children.filter((child) => {\n return child.type !== 'text' || (child.type === 'text' && child.data.trim() !== '');\n });\n }\n // Recursively process children if present\n if (node.children) {\n node.children = cleanUlNodesUtil(node.children);\n return node;\n }\n return node;\n });\n};\n\nexport class HTMLValidator {\n constructor(private nodes: AnyNode[]) {}\n\n cleanup(): AnyNode[] {\n this.nodes = cleanUlNodesUtil(this.nodes);\n return this.nodes;\n }\n}\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, View } from 'react-native';\n\nimport { AlignedWidthItem } from '../context/AlignedWidthItem';\nimport { AlignedWidthProvider } from '../context/AlignedWidthProvider';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { isTextRenderer } from '../utils';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\nimport { DefaultTextRenderer } from './_DefaultTextRenderer';\nimport { ATagRenderer } from './ATagRenderer';\nimport { ImgTagRenderer } from './ImgTagRenderer';\nimport { LiTagRenderer } from './LiTagRenderer';\nimport { PTagRenderer } from './PTagRenderer';\n\ninterface Props {\n node: AnyNode | ChildNode;\n}\n\nexport const NodeRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n if (node.type === 'tag') {\n switch (node.tagName) {\n case 'thead':\n case 'tbody':\n case 'tfoot':\n case 'blockquote':\n case 'ul':\n case 'ol':\n case 'dl':\n case 'dt':\n case 'dd':\n case 'div':\n case 'main':\n case 'section':\n case 'article':\n case 'aside':\n case 'nav':\n case 'header':\n case 'footer':\n case 'tr':\n return <DefaultBlockRenderer node={node} />;\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return (\n <DefaultBlockRenderer\n node={node}\n textProps={{\n accessible: true,\n accessibilityRole: 'header',\n }}\n />\n );\n case 'p':\n return <PTagRenderer node={node} />;\n case 'li':\n return <LiTagRenderer node={node} />;\n case 'hr':\n return <View style={[getStyle(node).block]} />;\n case 'br':\n if (isTextRenderer(node.prev)) {\n return null;\n }\n return <View style={[getStyle(node).block]} />;\n case 'table':\n return (\n <AlignedWidthProvider>\n <DefaultBlockRenderer node={node} />\n </AlignedWidthProvider>\n );\n case 'img':\n return <ImgTagRenderer node={node} />;\n // text renderers\n case 'b':\n case 'strong':\n case 'i':\n case 'em':\n case 'u':\n case 'mark':\n case 'small':\n case 's':\n case 'del':\n case 'sup':\n case 'sub':\n case 'span':\n case 'pre':\n case 'code':\n return <DefaultTextRenderer node={node} />;\n case 'a':\n return <ATagRenderer node={node} />;\n case 'th':\n case 'td': {\n const currentIndex = node.parent?.children.indexOf(node) || 0;\n return (\n <AlignedWidthItem index={currentIndex}>\n <DefaultTextRenderer node={node} />\n </AlignedWidthItem>\n );\n }\n default:\n // Ignore unsupported tags (script, style, iframe, etc.)\n return null;\n }\n }\n if (node.type === 'text') {\n const text = node.data\n // crush multiple spaces into one\n .replace(/\\s+/g, ' ')\n .replace(/&nbsp;/g, ' ');\n\n return <Text>{text}</Text>;\n }\n return null;\n};\n","import type { FunctionComponent, PropsWithChildren } from 'react';\nimport { type StyleProp, View, type ViewStyle } from 'react-native';\n\nimport { useAlignedWidth } from './AlignedWidthProvider';\n\ninterface Props extends PropsWithChildren {\n index: number;\n style?: StyleProp<ViewStyle>;\n}\n\n/**\n * This component is used to wrap items that need to have aligned widths.\n * It uses the AlignedWidthProvider context to measure and set the width\n * of each item based on the widest item in the same index position.\n * For example, in a table column.\n */\nexport const AlignedWidthItem: FunctionComponent<Props> = ({ children, index, style }) => {\n const { getLayoutHandlerForIndex, getWidthStyle } = useAlignedWidth();\n\n return (\n <View style={[getWidthStyle(index), style]} onLayout={getLayoutHandlerForIndex(index)}>\n {children}\n </View>\n );\n};\n","import { createContext, type ReactNode, useContext, useState } from 'react';\nimport type { LayoutChangeEvent } from 'react-native';\n\ninterface AlignedWidthContextProps {\n getLayoutHandlerForIndex: (colIdx: number) => (event: LayoutChangeEvent) => void;\n getWidthStyle: (colIdx: number) => { minWidth?: number; width?: number };\n}\n\nconst AlignedWidthContext = createContext<AlignedWidthContextProps | undefined>(undefined);\n\nexport const AlignedWidthProvider = ({ children }: { children: ReactNode }) => {\n const [colWidths, setColWidths] = useState<{ [colIdx: number]: number }>({});\n\n const getLayoutHandlerForIndex = (colIdx: number) => {\n return (event: LayoutChangeEvent) => {\n const { width } = event.nativeEvent.layout;\n setColWidths((prev) => {\n const previousWidth = prev[colIdx] || 0;\n return {\n ...prev,\n [colIdx]: Math.max(previousWidth, width),\n };\n });\n };\n };\n\n const getWidthStyle = (colIdx: number) => {\n return {\n minWidth: colWidths[colIdx] || undefined,\n width: colWidths[colIdx] || undefined,\n };\n };\n\n return (\n <AlignedWidthContext.Provider\n value={{\n getLayoutHandlerForIndex,\n getWidthStyle,\n }}\n >\n {children}\n </AlignedWidthContext.Provider>\n );\n};\n\nexport const useAlignedWidth = () => {\n const context = useContext(AlignedWidthContext);\n if (!context) {\n throw new Error('useAlignedWidth must be used within a AlignedWidthProvider');\n }\n return context;\n};\n","import { ComponentType, ReactNode } from 'react';\nimport type { ColorValue, ImageProps, TextProps, TextStyle, ViewStyle } from 'react-native';\n\nimport { OnHTMLLinkPress } from './context/HtmlProvider';\n\nexport type HTMLTag =\n | 'h1'\n | 'h2'\n | 'h3'\n | 'h4'\n | 'h5'\n | 'h6'\n | 'p'\n | 'a'\n | 'ul'\n | 'ol'\n | 'li'\n | 'img'\n | 'table'\n | 'tr'\n | 'th'\n | 'td'\n | 'pre'\n | 'code'\n | 'blockquote'\n | 'hr'\n | 'br'\n | 'div'\n | 'b'\n | 'strong'\n | 'i'\n | 'em'\n | 'u'\n | 'mark'\n | 'small'\n | 's'\n | 'del'\n | 'sup'\n | 'sub'\n | 'span'\n | 'dt'\n | 'dd'\n | 'thead'\n | 'tbody'\n | 'tfoot'\n | 'dl'\n | 'main'\n | 'section'\n | 'article'\n | 'aside'\n | 'nav'\n | 'header'\n | 'footer';\n\nexport type RendererType = 'text' | 'block';\n\nexport const rendererTypeMap = {\n // Elements rendered with a View (block)\n thead: 'block',\n tbody: 'block',\n tfoot: 'block',\n blockquote: 'block',\n ul: 'block',\n ol: 'block',\n dl: 'block',\n li: 'block',\n div: 'block',\n hr: 'block',\n br: 'block',\n pre: 'block',\n code: 'block',\n img: 'block',\n table: 'block',\n tr: 'block',\n dt: 'block',\n dd: 'block',\n p: 'block',\n h1: 'block',\n h2: 'block',\n h3: 'block',\n h4: 'block',\n h5: 'block',\n h6: 'block',\n main: 'block',\n section: 'block',\n article: 'block',\n aside: 'block',\n nav: 'block',\n header: 'block',\n footer: 'block',\n\n // All other elements are text\n b: 'text',\n strong: 'text',\n i: 'text',\n em: 'text',\n u: 'text',\n mark: 'text',\n small: 'text',\n s: 'text',\n del: 'text',\n sup: 'text',\n sub: 'text',\n span: 'text',\n a: 'text',\n th: 'text',\n td: 'text',\n} satisfies Record<HTMLTag, RendererType>;\n\nexport type HtmlStyle = {\n text?: TextStyle;\n block?: ViewStyle;\n};\n\nexport type TagStyles = {\n [key in HTMLTag]: HtmlStyle;\n};\n\nexport interface CommonProps {\n /**\n * Render prop for all images rendered by the HTML renderer\n * (<img> tags, bullet markers, and external link icons).\n * Keeps the package free of any specific image library dependency.\n *\n * @example\n * renderImage={(props) => <Image {...props} />}\n */\n renderImage?: (props: ImageProps) => ReactNode;\n\n /**\n * Custom component to use instead of the built-in React Native `Text`.\n * Useful for applying a global font or integrating a design-system text component.\n * Must accept the same props as `Text` (i.e. `TextProps`).\n *\n * @example\n * TextComponent={MyAppText}\n */\n TextComponent?: ComponentType<TextProps & { children?: ReactNode }>;\n\n /**\n * Render prop for all text nodes rendered by the HTML renderer.\n * Receives the full `TextProps` (including `style`, `children`, accessibility props, etc.)\n * and must return a renderable node. Takes priority over `TextComponent` when both are set.\n *\n * @example\n * renderTextComponent={(props) => <MyText {...props} />}\n */\n renderTextComponent?: (props: TextProps) => ReactNode;\n\n // style props\n baseStyle?: TextStyle;\n tagStyles?: Partial<TagStyles>;\n classesStyles?: {\n [className: string]: HtmlStyle;\n };\n listGap?: number;\n\n // interaction/functional props\n onLinkPress?: (options: OnHTMLLinkPress) => void;\n markerColor?: string;\n overrideExternalLinkTintColor?: ColorValue;\n}\n","import type { AnyNode, ChildNode, Element } from 'domhandler';\n\nimport { type HTMLTag, rendererTypeMap } from './types';\n\nexport const isTextRenderer = (node: AnyNode | ChildNode | null): boolean => {\n if (!node) {\n return false;\n }\n if (node.type === 'tag') {\n return rendererTypeMap[node.tagName as HTMLTag] === 'text';\n }\n return node.type === 'text';\n};\n\n// Concatenate all text nodes from children\nexport const concatTextNodes = (children: (AnyNode | ChildNode)[]): string => {\n let result = '';\n for (const child of children) {\n if (child.type === 'text') {\n result += child.data;\n }\n // Recursively check for text nodes in element children\n if (child.type === 'tag' && Array.isArray(child.children)) {\n result += concatTextNodes(child.children);\n }\n }\n return result;\n};\n\nexport const isList = (child: ChildNode) => {\n return child.type === 'tag' && (child.tagName === 'ol' || child.tagName === 'ul');\n};\n\nexport const getTextFromNode = (node: Element): string => {\n return node.children.map((c) => (c.type === 'text' ? c.data : '')).join('');\n};\n\nexport const isExternalURL = (url?: string): boolean => {\n if (!url) {\n return false;\n }\n return url.startsWith('https://') || url.startsWith('http://');\n};\n","import type { ChildNode, Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { Text, type TextProps, View, type ViewProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { type HTMLTag, type RendererType, rendererTypeMap } from '../types';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n viewProps?: ViewProps;\n textProps?: TextProps;\n}\n\nexport const DefaultBlockRenderer: FunctionComponent<Props> = ({\n node,\n viewProps = {},\n textProps = {},\n}) => {\n const { getStyle } = useHtmlContext();\n const { style: viewStyle, ...restViewProps } = viewProps;\n const { style: textStyle, ...restTextProps } = textProps;\n\n const groupedChildren = groupByInlineBlock(node.children);\n\n return (\n <View {...restViewProps} style={[getStyle(node).block, viewStyle]}>\n {groupedChildren.map((childrenGroup, index) => {\n if (childrenGroup.type === 'text') {\n return (\n <Text\n {...restTextProps}\n key={`${node.type}-${index}`}\n style={[getStyle(node).text, textStyle]}\n >\n <NodesRenderer nodes={childrenGroup.nodes} />\n </Text>\n );\n }\n return <NodesRenderer key={`${node.type}-${index}`} nodes={childrenGroup.nodes} />;\n })}\n </View>\n );\n};\n\nfunction groupByInlineBlock(arr: ChildNode[]): {\n type: RendererType;\n nodes: ChildNode[];\n}[] {\n const result: {\n type: RendererType;\n nodes: ChildNode[];\n }[] = [];\n let currentGroup: ChildNode[] = [];\n\n for (const item of arr) {\n const isTextNode = item.type === 'text';\n const isTextTag = item.type === 'tag' && rendererTypeMap[item.name as HTMLTag] === 'text';\n if (isTextNode || isTextTag) {\n currentGroup.push(item);\n } else {\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n currentGroup = [];\n }\n result.push({\n type: 'block',\n nodes: [item],\n });\n }\n }\n if (currentGroup.length) {\n result.push({\n type: 'text',\n nodes: currentGroup,\n });\n }\n return result;\n}\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { type TextProps } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n textProps?: TextProps;\n}\n\nexport const DefaultTextRenderer: FunctionComponent<Props> = ({ node, textProps = {} }) => {\n const { style, ...restProps } = textProps;\n const { getStyle, renderText } = useHtmlContext();\n\n return (\n <>\n {renderText({\n ...restProps,\n style: [getStyle(node).text, style],\n children: <NodesRenderer nodes={node.children} />,\n })}\n </>\n );\n};\n","export const EXTERNAL_LINK_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAAAXNSR0IB2cksfwAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAuIwAALiMBeKU/dgAAAAd0SU1FB+kJCwwjMljq2h8AAAD4SURBVEjH7dY9SgNBGMbxn7vpIngXwc5SbG39KjxCLDyCnY0nUFGIH0Uu4CU8gXZ2iYU2IsRmiiCz+u4sBpQ8sLwMDPPf53mWYVnoP2sH44bn8evmXgfQM+5n1jW20lz6LXc9DDHFByYRR2foBw4/xkM64xLbuMYy1iNvN8H7N/mPMcg4Gab1KOeoCTQK7KuTkyluZ9LJgqrCTmqcYx932E3dtNJPjnJxwWqamzjoCqpxlYlrEIw7BGqChHqtWnRygb3STqKgkwS5KS0+egWdpnlUAmkDesJhlzuqMifNDdQU3Vr6hKPql4BesIKNFqBXvC3+Bf62PgFLzkKE8ZczlwAAAABJRU5ErkJggg==';\n\nexport const UL_MARKER_URI =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAwCAYAAAAsJjtLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAACKADAAQAAAABAAAAMAAAAAAE1YgVAAAAZklEQVQ4EWNgGAWjITC4QoDxiYRE/H9GxgkM//8LIDuNkYHhAZDfAFJw/z8DgwKyJJzNyPiBCackSBXQVCa4ahwMaigAOgSH6QwgnzD9//+/EOolVHVAjf8YGBpRBUd5oyEw8CEAAGO5FkZ9+flOAAAAAElFTkSuQmCC';\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { EXTERNAL_LINK_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isExternalURL } from '../utils';\n\ninterface Props {\n node: Element;\n}\n\nexport const ATagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { overrideExternalLinkTintColor, onLinkPress, getStyle, renderImage, renderText } =\n useHtmlContext();\n\n const text = concatTextNodes(node.children);\n if (!text) {\n return null;\n }\n const style = getStyle(node);\n\n const fontSize = style.text?.fontSize ?? 18;\n\n const isExternal = node.attribs.href ? isExternalURL(node.attribs.href) : false;\n\n return (\n <>\n {renderText({\n accessible: true,\n onPress: () => {\n onLinkPress?.({\n url: node.attribs.href,\n title: text,\n });\n },\n accessibilityRole: 'link',\n accessibilityHint: isExternal ? 'External link' : undefined,\n importantForAccessibility: 'yes',\n accessibilityElementsHidden: false,\n style: style.text,\n children: (\n <>\n {text}\n {isExternal\n ? renderImage({\n source: { uri: EXTERNAL_LINK_URI },\n style: {\n tintColor: overrideExternalLinkTintColor ?? style.text.color ?? 'black',\n height: fontSize,\n width: fontSize,\n paddingTop: 5,\n },\n })\n : null}\n </>\n ),\n })}\n </>\n );\n};\n","import type { Element } from 'domhandler';\nimport { type FunctionComponent, useEffect, useState } from 'react';\nimport { Image, type ImageStyle, View } from 'react-native';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\n\ninterface Props {\n node: Element;\n}\n\nexport const ImgTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, renderImage } = useHtmlContext();\n const [size, setSize] = useState<{\n w: number;\n h: number;\n } | null>(null);\n const [containerWidth, setContainerWidth] = useState<number>(0);\n\n const { src, alt } = node.attribs || {};\n\n useEffect(() => {\n if (!src) {\n return;\n }\n Image.getSize(\n src,\n (width, height) => {\n setSize({ w: width, h: height });\n },\n () => {\n // ignore errors — image simply won't render\n },\n );\n }, [src]);\n\n if (!size) return null;\n\n const { w, h } = size;\n\n const finalWidth = Math.min(w, containerWidth);\n const ratio = h / w;\n\n const imageStyle = {\n ...(getStyle(node).block as ImageStyle),\n width: finalWidth,\n height: finalWidth * ratio,\n };\n\n return (\n <View\n onLayout={(e) => {\n const width = e.nativeEvent.layout.width;\n setContainerWidth(width);\n }}\n style={{ width: '100%' }}\n >\n {renderImage({\n source: { uri: src },\n style: imageStyle,\n alt,\n })}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\nimport { View } from 'react-native';\n\nimport { UL_MARKER_URI } from '../assets';\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { concatTextNodes, isList } from '../utils';\nimport { NodesRenderer } from './_NodesRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const LiTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle, markerColor, renderImage, renderText } = useHtmlContext();\n\n const isParentOl = node.parent?.type === 'tag' && node.parent?.tagName === 'ol';\n const parentLiTags = node.parent?.children || [];\n const currentIndex = parentLiTags.indexOf(node) + 1;\n const items = node.children;\n const style = getStyle(node);\n const { lineHeight = 20, fontSize = 16 } = style.text;\n const markerHeight = 5;\n const markerColorResult = markerColor ?? style.text.color ?? 'pink';\n const renderMarker = () => {\n if (isParentOl) {\n return renderText({ style: [style.text], children: `${currentIndex}.` });\n } else {\n return renderImage({\n source: { uri: UL_MARKER_URI },\n style: {\n width: markerHeight,\n height: lineHeight,\n tintColor: markerColorResult,\n },\n });\n }\n };\n\n // Separate nested lists and main content\n const nestedLists = items.filter((child) => isList(child));\n const mainContent = items.filter((child) => !isList(child));\n\n return (\n <View>\n <View\n style={{\n flexDirection: 'row',\n }}\n >\n <View\n style={{\n marginRight: 8,\n marginBottom: lineHeight - fontSize,\n }}\n >\n {renderMarker()}\n </View>\n {renderText({\n accessible: true,\n accessibilityLabel: `List item ${currentIndex} of ${parentLiTags.length}: ${concatTextNodes(mainContent)}`,\n style: [style.text, { flex: 1 }],\n children: <NodesRenderer nodes={mainContent} />,\n })}\n </View>\n {nestedLists.length > 0 && (\n <View style={{ width: '100%' }}>\n <NodesRenderer nodes={nestedLists} />\n </View>\n )}\n </View>\n );\n};\n","import type { Element } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { useHtmlContext } from '../context/HtmlProvider';\nimport { DefaultBlockRenderer } from './_DefaultBlockRenderer';\n\ninterface Props {\n node: Element;\n}\n\nexport const PTagRenderer: FunctionComponent<Props> = ({ node }) => {\n const { getStyle } = useHtmlContext();\n\n const isFirstChild = !node.previousSibling;\n const isLastChild = !node.nextSibling;\n const style = getStyle(node);\n // collapse top margin for first child and bottom margin for last child\n const marginTop = isFirstChild ? 0 : style.block.marginTop;\n const marginBottom = isLastChild ? 0 : style.block.marginBottom;\n return (\n <DefaultBlockRenderer\n node={node}\n viewProps={{\n style: {\n marginTop,\n marginBottom,\n },\n }}\n />\n );\n};\n","import type { AnyNode, ChildNode } from 'domhandler';\nimport type { FunctionComponent } from 'react';\n\nimport { NodeRenderer } from './_NodeRenderer';\n\ninterface Props {\n nodes: (AnyNode | ChildNode)[];\n}\n\nexport const NodesRenderer: FunctionComponent<Props> = ({ nodes }) => {\n return nodes.map((node, index) => <NodeRenderer key={`${node.type}-${index}`} node={node} />);\n};\n"],"mappings":"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","names":["useMemo","View","Text","View","createContext","useContext","jsx","jsx","Text","View","jsx","View","Text","jsx","Fragment","jsx","useState","Image","View","jsx","useState","Image","View","View","jsx","jsxs","View","jsx","jsx","View","Text","jsx","jsx","useMemo","View"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanogiants/react-native-render-html",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "A lightweight, customisable HTML renderer for React Native",
5
5
  "keywords": [
6
6
  "react-native",
@@ -253,6 +253,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
253
253
  ...baseStyle,
254
254
  fontSize: 32,
255
255
  lineHeight: 38.4,
256
+ fontWeight: 'bold',
256
257
  ...options.tagStyles?.h1?.text,
257
258
  },
258
259
  block: {
@@ -266,6 +267,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
266
267
  ...baseStyle,
267
268
  fontSize: 24,
268
269
  lineHeight: 28.8,
270
+ fontWeight: 'bold',
269
271
  ...options.tagStyles?.h2?.text,
270
272
  },
271
273
  block: {
@@ -279,6 +281,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
279
281
  ...baseStyle,
280
282
  fontSize: 18.72,
281
283
  lineHeight: 22.46,
284
+ fontWeight: 'bold',
282
285
  ...options.tagStyles?.h3?.text,
283
286
  },
284
287
  block: {
@@ -292,6 +295,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
292
295
  ...baseStyle,
293
296
  fontSize: 16,
294
297
  lineHeight: 19.2,
298
+ fontWeight: 'bold',
295
299
  ...options.tagStyles?.h4?.text,
296
300
  },
297
301
  block: {
@@ -305,6 +309,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
305
309
  ...baseStyle,
306
310
  fontSize: 13.28,
307
311
  lineHeight: 15.94,
312
+ fontWeight: 'bold',
308
313
  ...options.tagStyles?.h5?.text,
309
314
  },
310
315
  block: {
@@ -318,6 +323,7 @@ export const HtmlProvider: FunctionComponent<ProviderProps> = (options) => {
318
323
  ...baseStyle,
319
324
  fontSize: 10.72,
320
325
  lineHeight: 12.86,
326
+ fontWeight: 'bold',
321
327
  ...options.tagStyles?.h6?.text,
322
328
  },
323
329
  block: {