react-pdf-html-flabs-2 1.1.7 → 1.1.8

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/render.js CHANGED
@@ -144,9 +144,6 @@ const renderElement = (element, stylesheets, renderers, children, index) => {
144
144
  Element = (0, exports.hasBlockContent)(element) ? renderers_1.renderBlock : renderers_1.renderInline;
145
145
  }
146
146
  }
147
- // if (element.tag === 'p') {
148
- // console.log({ style: element.style });
149
- // }
150
147
  return (react_1.default.createElement(Element, { key: index, style: element.style, children: children, element: element, stylesheets: stylesheets }));
151
148
  };
152
149
  exports.renderElement = renderElement;
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement } from 'react';\nimport renderers, { renderBlock, renderInline, renderNoop } from './renderers';\nimport { Text, View } from '@react-pdf/renderer';\nimport parseHtml, { HtmlContent, HtmlElement } from './parse';\nimport { createHtmlStylesheet, HtmlStyle, HtmlStyles } from './styles';\nimport { Style } from '@react-pdf/types';\nimport { isText, Tag } from './tags';\n\nexport type HtmlRenderer = React.FC<\n React.PropsWithChildren<{\n element: HtmlElement;\n style: Style[];\n stylesheets: HtmlStyles[];\n }>\n>;\n\nexport type HtmlRenderers = Record<Tag | string, HtmlRenderer>;\n\nexport type HtmlRenderOptions = {\n collapse: boolean;\n renderers: HtmlRenderers;\n stylesheets: HtmlStyles[];\n resetStyles: boolean;\n};\n\ntype ContentBucket = {\n hasBlock: boolean;\n content: HtmlContent;\n};\n\nconst convertEntities = (input: string) => {\n const entities = [\n ['amp', '&'],\n ['apos', \"'\"],\n ['#x27', \"'\"],\n ['#x2F', '/'],\n ['#39', \"'\"],\n ['#47', '/'],\n ['lt', '<'],\n ['gt', '>'],\n ['nbsp', ' '],\n ['quot', '\"'],\n ];\n\n let text = input;\n for (let entity of entities) {\n text = text.replace(new RegExp('&' + entity[0] + ';', 'g'), entity[1]);\n }\n return text;\n};\n\nexport const isBlockStyle = (style: HtmlStyle) =>\n ['block', 'flex'].includes(style.display);\n\nexport const hasBlockContent = (element: HtmlElement | string): boolean => {\n if (typeof element === 'string') {\n return false;\n }\n\n if (element.tag === 'a' || isText[element.tag]) {\n if (element.style?.some(isBlockStyle)) {\n return true;\n }\n\n // anchor tags match their content\n if (element.content) {\n return element.content.some(hasBlockContent);\n }\n return false;\n }\n\n return true;\n};\n\nconst ltrim = (text: string): string => text.replace(/^\\s+/, '');\nconst rtrim = (text: string): string => text.replace(/\\s+$/, '');\n\n/**\n * Groups all block and non-block elements into buckets so that all non-block elements can be rendered in a parent Text element\n * @param elements Elements to place in buckets of block and non-block content\n * @param collapse\n * @param parentTag\n */\nexport const bucketElements = (\n elements: HtmlContent,\n collapse: boolean,\n parentTag?: Tag | string\n): ContentBucket[] => {\n let bucket: ContentBucket;\n let hasBlock: boolean;\n const buckets: ContentBucket[] = [];\n elements.forEach((element, index) => {\n // clear empty strings between block elements\n if (typeof element === 'string') {\n if (collapse) {\n if (parentTag === 'pre') {\n if (element[0] === '\\n') {\n element = element.substr(1);\n }\n if (element[element.length - 1] === '\\n') {\n element = element.substr(0, element.length - 1);\n }\n } else {\n if (hasBlock || hasBlock === undefined) {\n element = ltrim(element);\n }\n const next = elements[index + 1];\n if (next && hasBlockContent(next)) {\n element = rtrim(element);\n }\n }\n }\n if (element === '') {\n return;\n }\n }\n const block = hasBlockContent(element);\n if (block !== hasBlock) {\n hasBlock = block;\n bucket = {\n hasBlock,\n content: [],\n };\n buckets.push(bucket);\n }\n bucket.content.push(element);\n });\n\n return buckets;\n};\n\ntype RenderedContent = ReactElement | ReactElement[] | string | string[];\n\nexport const renderElement = (\n element: HtmlElement | string,\n stylesheets: HtmlStyles[],\n renderers: HtmlRenderers,\n children?: any,\n index?: number\n): RenderedContent => {\n if (typeof element === 'string') {\n element = convertEntities(element);\n if (/(\\s )|( \\s)/.test(element)) {\n // hack to avoid collapsing sequential spaces\n return element\n .split(/(\\s{2,})/g)\n .reduce(\n (strings, string, index) =>\n string === ''\n ? strings\n : strings.concat(index % 2 ? string.split('') : string),\n [] as string[]\n );\n }\n return element;\n }\n let Element: HtmlRenderer | undefined = renderers[element.tag];\n if (!Element) {\n if (!(element.tag in isText)) {\n // Unknown element, do nothing\n console.warn(`Excluding \"${element.tag}\" because it has no renderer`);\n Element = renderNoop;\n } else {\n Element = hasBlockContent(element) ? renderBlock : renderInline;\n }\n }\n\n // if (element.tag === 'p') {\n // console.log({ style: element.style });\n // }\n return (\n <Element\n key={index}\n style={element.style}\n children={children}\n element={element}\n stylesheets={stylesheets}\n />\n );\n};\n\nexport const collapseWhitespace = (string: any): string =>\n string.replace(/(\\s+)/g, ' ');\n\nexport const renderBucketElement = (\n element: HtmlElement | string,\n options: HtmlRenderOptions,\n index: number\n): RenderedContent => {\n if (typeof element === 'string') {\n return renderElement(\n options.collapse ? collapseWhitespace(element) : element,\n options.stylesheets,\n options.renderers,\n undefined,\n index\n );\n }\n return renderElement(\n element,\n options.stylesheets,\n options.renderers,\n renderElements(\n element.content,\n element.tag === 'pre' ? { ...options, collapse: false } : options,\n element\n ),\n index\n );\n};\n\nconst isAnchor = (content: HtmlContent | HtmlElement): boolean => {\n return Array.isArray(content)\n ? content.length === 1 &&\n typeof content[0] !== 'string' &&\n content[0].tag === 'a'\n : content.tag === 'a';\n};\n\nexport const renderElements = (\n elements: HtmlContent,\n options: HtmlRenderOptions,\n parent?: HtmlElement\n): RenderedContent | RenderedContent[] => {\n const buckets = bucketElements(elements, options.collapse, parent?.tag);\n const parentIsText = parent && !isAnchor(parent) && !hasBlockContent(parent);\n\n const renderedBuckets: (RenderedContent[] | RenderedContent)[] = buckets.map(\n (bucket, bucketIndex) => {\n const wrapWithText =\n !bucket.hasBlock && !parentIsText && !isAnchor(bucket.content);\n\n // Avoid extra array\n if (bucket.content.length === 1 && !wrapWithText) {\n return renderBucketElement(bucket.content[0], options, bucketIndex);\n }\n\n let rendered: RenderedContent | RenderedContent[] = bucket.content.map(\n (element, index) => {\n return renderBucketElement(element, options, index);\n }\n );\n\n // unwrap extra array\n if (rendered.length === 1) {\n rendered = rendered[0];\n }\n\n if (wrapWithText) {\n return <Text key={bucketIndex}>{rendered}</Text>;\n } else {\n return buckets.length === 1 ? (\n rendered\n ) : (\n <React.Fragment key={bucketIndex}>{rendered}</React.Fragment>\n );\n }\n }\n );\n\n // unwrap extra array\n return buckets.length === 1\n ? (renderedBuckets[0] as RenderedContent)\n : (renderedBuckets as RenderedContent[]);\n};\n\nexport const applyStylesheets = (\n stylesheets: HtmlStyles[],\n rootElement: HtmlElement\n) => {\n stylesheets.forEach((stylesheet) => {\n for (const selector of Object.keys(stylesheet)) {\n const elements = rootElement.querySelectorAll(selector) as HtmlElement[];\n elements.forEach((element) => {\n element.style.push(stylesheet[selector]);\n });\n }\n });\n};\n\nconst renderHtml = (\n text: string,\n options: {\n collapse?: boolean;\n renderers?: HtmlRenderers;\n style?: Style | (Style | undefined)[];\n stylesheet?: HtmlStyles | HtmlStyles[];\n resetStyles?: boolean;\n } = {}\n): ReactElement => {\n const defaultFontSize = 10;\n const fontSizeStyle: any = { fontSize: defaultFontSize };\n const styles = options.style\n ? Array.isArray(options.style)\n ? options.style\n : [options.style]\n : [];\n\n styles.forEach((style) => {\n if (!style) {\n return;\n }\n if (typeof style.fontSize === 'number') {\n fontSizeStyle.fontSize = style.fontSize as unknown as number;\n }\n if (typeof style.fontSize === 'string' && style.fontSize.endsWith('px')) {\n fontSizeStyle.fontSize = parseInt(style.fontSize, 10);\n }\n });\n const baseStyles = createHtmlStylesheet(\n fontSizeStyle.fontSize,\n options.resetStyles\n );\n const parsed = parseHtml(text);\n\n const stylesheets = options.stylesheet\n ? Array.isArray(options.stylesheet)\n ? options.stylesheet\n : [options.stylesheet]\n : [];\n\n const opts: HtmlRenderOptions = {\n collapse: true,\n resetStyles: false,\n ...options,\n renderers: { ...renderers, ...options.renderers },\n stylesheets: [baseStyles, ...stylesheets, ...parsed.stylesheets],\n };\n\n applyStylesheets(opts.stylesheets, parsed.rootElement);\n\n return (\n <View style={{ ...styles, ...fontSizeStyle }}>\n {renderElements(parsed.rootElement.content, opts)}\n </View>\n );\n};\n\nexport default renderHtml;\n"]}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { ReactElement } from 'react';\nimport renderers, { renderBlock, renderInline, renderNoop } from './renderers';\nimport { Text, View } from '@react-pdf/renderer';\nimport parseHtml, { HtmlContent, HtmlElement } from './parse';\nimport { createHtmlStylesheet, HtmlStyle, HtmlStyles } from './styles';\nimport { Style } from '@react-pdf/types';\nimport { isText, Tag } from './tags';\n\nexport type HtmlRenderer = React.FC<\n React.PropsWithChildren<{\n element: HtmlElement;\n style: Style[];\n stylesheets: HtmlStyles[];\n }>\n>;\n\nexport type HtmlRenderers = Record<Tag | string, HtmlRenderer>;\n\nexport type HtmlRenderOptions = {\n collapse: boolean;\n renderers: HtmlRenderers;\n stylesheets: HtmlStyles[];\n resetStyles: boolean;\n};\n\ntype ContentBucket = {\n hasBlock: boolean;\n content: HtmlContent;\n};\n\nconst convertEntities = (input: string) => {\n const entities = [\n ['amp', '&'],\n ['apos', \"'\"],\n ['#x27', \"'\"],\n ['#x2F', '/'],\n ['#39', \"'\"],\n ['#47', '/'],\n ['lt', '<'],\n ['gt', '>'],\n ['nbsp', ' '],\n ['quot', '\"'],\n ];\n\n let text = input;\n for (let entity of entities) {\n text = text.replace(new RegExp('&' + entity[0] + ';', 'g'), entity[1]);\n }\n return text;\n};\n\nexport const isBlockStyle = (style: HtmlStyle) =>\n ['block', 'flex'].includes(style.display);\n\nexport const hasBlockContent = (element: HtmlElement | string): boolean => {\n if (typeof element === 'string') {\n return false;\n }\n\n if (element.tag === 'a' || isText[element.tag]) {\n if (element.style?.some(isBlockStyle)) {\n return true;\n }\n\n // anchor tags match their content\n if (element.content) {\n return element.content.some(hasBlockContent);\n }\n return false;\n }\n\n return true;\n};\n\nconst ltrim = (text: string): string => text.replace(/^\\s+/, '');\nconst rtrim = (text: string): string => text.replace(/\\s+$/, '');\n\n/**\n * Groups all block and non-block elements into buckets so that all non-block elements can be rendered in a parent Text element\n * @param elements Elements to place in buckets of block and non-block content\n * @param collapse\n * @param parentTag\n */\nexport const bucketElements = (\n elements: HtmlContent,\n collapse: boolean,\n parentTag?: Tag | string\n): ContentBucket[] => {\n let bucket: ContentBucket;\n let hasBlock: boolean;\n const buckets: ContentBucket[] = [];\n elements.forEach((element, index) => {\n // clear empty strings between block elements\n if (typeof element === 'string') {\n if (collapse) {\n if (parentTag === 'pre') {\n if (element[0] === '\\n') {\n element = element.substr(1);\n }\n if (element[element.length - 1] === '\\n') {\n element = element.substr(0, element.length - 1);\n }\n } else {\n if (hasBlock || hasBlock === undefined) {\n element = ltrim(element);\n }\n const next = elements[index + 1];\n if (next && hasBlockContent(next)) {\n element = rtrim(element);\n }\n }\n }\n if (element === '') {\n return;\n }\n }\n const block = hasBlockContent(element);\n if (block !== hasBlock) {\n hasBlock = block;\n bucket = {\n hasBlock,\n content: [],\n };\n buckets.push(bucket);\n }\n bucket.content.push(element);\n });\n\n return buckets;\n};\n\ntype RenderedContent = ReactElement | ReactElement[] | string | string[];\n\nexport const renderElement = (\n element: HtmlElement | string,\n stylesheets: HtmlStyles[],\n renderers: HtmlRenderers,\n children?: any,\n index?: number\n): RenderedContent => {\n if (typeof element === 'string') {\n element = convertEntities(element);\n if (/(\\s )|( \\s)/.test(element)) {\n // hack to avoid collapsing sequential spaces\n return element\n .split(/(\\s{2,})/g)\n .reduce(\n (strings, string, index) =>\n string === ''\n ? strings\n : strings.concat(index % 2 ? string.split('') : string),\n [] as string[]\n );\n }\n return element;\n }\n let Element: HtmlRenderer | undefined = renderers[element.tag];\n if (!Element) {\n if (!(element.tag in isText)) {\n // Unknown element, do nothing\n console.warn(`Excluding \"${element.tag}\" because it has no renderer`);\n Element = renderNoop;\n } else {\n Element = hasBlockContent(element) ? renderBlock : renderInline;\n }\n }\n\n return (\n <Element\n key={index}\n style={element.style}\n children={children}\n element={element}\n stylesheets={stylesheets}\n />\n );\n};\n\nexport const collapseWhitespace = (string: any): string =>\n string.replace(/(\\s+)/g, ' ');\n\nexport const renderBucketElement = (\n element: HtmlElement | string,\n options: HtmlRenderOptions,\n index: number\n): RenderedContent => {\n if (typeof element === 'string') {\n return renderElement(\n options.collapse ? collapseWhitespace(element) : element,\n options.stylesheets,\n options.renderers,\n undefined,\n index\n );\n }\n return renderElement(\n element,\n options.stylesheets,\n options.renderers,\n renderElements(\n element.content,\n element.tag === 'pre' ? { ...options, collapse: false } : options,\n element\n ),\n index\n );\n};\n\nconst isAnchor = (content: HtmlContent | HtmlElement): boolean => {\n return Array.isArray(content)\n ? content.length === 1 &&\n typeof content[0] !== 'string' &&\n content[0].tag === 'a'\n : content.tag === 'a';\n};\n\nexport const renderElements = (\n elements: HtmlContent,\n options: HtmlRenderOptions,\n parent?: HtmlElement\n): RenderedContent | RenderedContent[] => {\n const buckets = bucketElements(elements, options.collapse, parent?.tag);\n const parentIsText = parent && !isAnchor(parent) && !hasBlockContent(parent);\n\n const renderedBuckets: (RenderedContent[] | RenderedContent)[] = buckets.map(\n (bucket, bucketIndex) => {\n const wrapWithText =\n !bucket.hasBlock && !parentIsText && !isAnchor(bucket.content);\n\n // Avoid extra array\n if (bucket.content.length === 1 && !wrapWithText) {\n return renderBucketElement(bucket.content[0], options, bucketIndex);\n }\n\n let rendered: RenderedContent | RenderedContent[] = bucket.content.map(\n (element, index) => {\n return renderBucketElement(element, options, index);\n }\n );\n\n // unwrap extra array\n if (rendered.length === 1) {\n rendered = rendered[0];\n }\n\n if (wrapWithText) {\n return <Text key={bucketIndex}>{rendered}</Text>;\n } else {\n return buckets.length === 1 ? (\n rendered\n ) : (\n <React.Fragment key={bucketIndex}>{rendered}</React.Fragment>\n );\n }\n }\n );\n\n // unwrap extra array\n return buckets.length === 1\n ? (renderedBuckets[0] as RenderedContent)\n : (renderedBuckets as RenderedContent[]);\n};\n\nexport const applyStylesheets = (\n stylesheets: HtmlStyles[],\n rootElement: HtmlElement\n) => {\n stylesheets.forEach((stylesheet) => {\n for (const selector of Object.keys(stylesheet)) {\n const elements = rootElement.querySelectorAll(selector) as HtmlElement[];\n elements.forEach((element) => {\n element.style.push(stylesheet[selector]);\n });\n }\n });\n};\n\nconst renderHtml = (\n text: string,\n options: {\n collapse?: boolean;\n renderers?: HtmlRenderers;\n style?: Style | (Style | undefined)[];\n stylesheet?: HtmlStyles | HtmlStyles[];\n resetStyles?: boolean;\n } = {}\n): ReactElement => {\n const defaultFontSize = 10;\n const fontSizeStyle: any = { fontSize: defaultFontSize };\n const styles = options.style\n ? Array.isArray(options.style)\n ? options.style\n : [options.style]\n : [];\n\n styles.forEach((style) => {\n if (!style) {\n return;\n }\n if (typeof style.fontSize === 'number') {\n fontSizeStyle.fontSize = style.fontSize as unknown as number;\n }\n if (typeof style.fontSize === 'string' && style.fontSize.endsWith('px')) {\n fontSizeStyle.fontSize = parseInt(style.fontSize, 10);\n }\n });\n const baseStyles = createHtmlStylesheet(\n fontSizeStyle.fontSize,\n options.resetStyles\n );\n const parsed = parseHtml(text);\n\n const stylesheets = options.stylesheet\n ? Array.isArray(options.stylesheet)\n ? options.stylesheet\n : [options.stylesheet]\n : [];\n\n const opts: HtmlRenderOptions = {\n collapse: true,\n resetStyles: false,\n ...options,\n renderers: { ...renderers, ...options.renderers },\n stylesheets: [baseStyles, ...stylesheets, ...parsed.stylesheets],\n };\n\n applyStylesheets(opts.stylesheets, parsed.rootElement);\n\n return (\n <View style={{ ...styles, ...fontSizeStyle }}>\n {renderElements(parsed.rootElement.content, opts)}\n </View>\n );\n};\n\nexport default renderHtml;\n"]}
package/dist/renderers.js CHANGED
@@ -13,14 +13,24 @@ const renderPassThrough = ({ children, }) => children;
13
13
  exports.renderPassThrough = renderPassThrough;
14
14
  const renderBlock = ({ style, children }) => {
15
15
  if (style === null || style === void 0 ? void 0 : style.find((e) => e.textAlign == 'center')) {
16
- style === null || style === void 0 ? void 0 : style.push({ justifyContent: 'center' });
16
+ style === null || style === void 0 ? void 0 : style.push({
17
+ display: 'flex',
18
+ flexDirection: 'row',
19
+ justifyContent: 'center',
20
+ width: '100%',
21
+ });
17
22
  }
18
23
  return react_1.default.createElement(renderer_1.View, { style: style }, children);
19
24
  };
20
25
  exports.renderBlock = renderBlock;
21
26
  const renderInline = ({ style, children }) => {
22
27
  if (style === null || style === void 0 ? void 0 : style.find((e) => e.textAlign == 'center')) {
23
- style === null || style === void 0 ? void 0 : style.push({ justifyContent: 'center' });
28
+ style === null || style === void 0 ? void 0 : style.push({
29
+ display: 'flex',
30
+ flexDirection: 'row',
31
+ justifyContent: 'center',
32
+ width: '100%',
33
+ });
24
34
  }
25
35
  return react_1.default.createElement(renderer_1.Text, { style: style }, children);
26
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../src/renderers.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Link, Text, View, Image } from '@react-pdf/renderer';\nimport { HtmlRenderer, HtmlRenderers } from './render';\nimport { HtmlElement } from './parse';\nimport { HtmlStyle } from './styles';\nimport { lowerAlpha, orderedAlpha, upperAlpha } from './ordered.type';\n\nexport const renderNoop: HtmlRenderer = ({ children }) => <></>;\n\nexport const renderPassThrough: React.FC<React.PropsWithChildren<any>> = ({\n children,\n}) => children;\n\nexport const renderBlock: HtmlRenderer = ({ style, children }) => {\n if (style?.find((e) => e.textAlign == 'center')) {\n style?.push({ justifyContent: 'center' });\n }\n return <View style={style}>{children}</View>;\n};\n\nexport const renderInline: HtmlRenderer = ({ style, children }) => {\n if (style?.find((e) => e.textAlign == 'center')) {\n style?.push({ justifyContent: 'center' });\n }\n return <Text style={style}>{children}</Text>;\n};\n\nexport const renderCell: HtmlRenderer = ({ style, element, children }) => {\n const table = element.closest('table') as HtmlElement | undefined;\n const tableAttributes = table?.attributes as any;\n if (!table) {\n throw new Error('td element rendered outside of a table');\n }\n const columnIndex = element.indexOfType;\n const combinedStyle = style.reduce(\n (acc, current) => Object.assign(acc, current),\n {} as HtmlStyle\n );\n\n const tableStyles = table.style.reduce(\n (combined, tableStyle) => Object.assign(combined, tableStyle),\n {} as HtmlStyle\n );\n\n const colWidths = tableStyles.colWidths || [];\n const columnWidth = colWidths[columnIndex];\n\n const baseStyles: HtmlStyle = {\n border: tableStyles.border,\n borderColor: tableStyles.borderColor,\n borderWidth: tableStyles.borderWidth,\n borderStyle: tableStyles.borderStyle,\n };\n\n if (\n (tableStyles as any).borderSpacing &&\n (tableStyles as any).borderCollapse !== 'collapse'\n ) {\n baseStyles.borderWidth = tableStyles.borderWidth;\n baseStyles.margin = (tableStyles as any).borderSpacing;\n } else {\n baseStyles.borderRightWidth = 0;\n baseStyles.borderBottomWidth = 0;\n if (element.indexOfType !== 0) {\n baseStyles.borderLeftWidth = tableStyles.borderWidth;\n baseStyles.borderTopWidth = tableStyles.borderWidth;\n }\n }\n\n if (tableAttributes?.border == 0) {\n baseStyles.borderRightWidth = '0px';\n baseStyles.borderBottomWidth = '0px';\n baseStyles.borderTopWidth = '0px';\n baseStyles.borderLeftWidth = '0px';\n }\n\n const overrides: HtmlStyle = {};\n if (combinedStyle.textAlign == 'center') {\n overrides.alignItems = 'center';\n }\n\n if (combinedStyle.verticalAlign == 'center') {\n overrides.justifyContent = 'center';\n }\n\n if (columnWidth) {\n overrides.width = columnWidth;\n }\n\n const finalStyles = Object.assign({}, baseStyles, combinedStyle, overrides);\n if (!finalStyles.width) finalStyles.flex = 1;\n delete finalStyles.height;\n\n return <View style={finalStyles}>{children}</View>;\n};\n\nconst renderers: HtmlRenderers = {\n style: renderNoop,\n script: renderNoop,\n html: renderPassThrough,\n li: ({ element, stylesheets, style, children }) => {\n const bulletStyles = stylesheets.map((stylesheet) => stylesheet.li_bullet);\n const contentStyles = stylesheets.map(\n (stylesheet) => stylesheet.li_content\n );\n const list: HtmlElement = element.closest('ol, ul') as HtmlElement;\n const ordered = list?.tag === 'ol' || element.parentNode.tag === 'ol';\n const listStyle =\n list?.style?.reduce(\n (combined, listStyle) => Object.assign(combined, listStyle),\n {} as HtmlStyle\n ) || {};\n const itemStyle = element.style.reduce(\n (combined, itemStyle) => Object.assign(combined, itemStyle),\n {} as HtmlStyle\n );\n const listStyleType =\n itemStyle.listStyleType ||\n itemStyle.listStyle ||\n listStyle.listStyleType ||\n listStyle.listStyle ||\n '';\n\n let bullet;\n if (listStyleType.includes('none')) {\n bullet = false;\n } else if (listStyleType.includes('url(')) {\n bullet = (\n <Image\n src={listStyleType.match(/\\((.*?)\\)/)[1].replace(/(['\"])/g, '')}\n />\n );\n } else if (ordered) {\n if (lowerAlpha.includes(listStyleType)) {\n bullet = (\n <Text>{orderedAlpha[element.indexOfType].toLowerCase()}.</Text>\n );\n } else if (upperAlpha.includes(listStyleType)) {\n bullet = (\n <Text>{orderedAlpha[element.indexOfType].toUpperCase()}.</Text>\n );\n } else {\n bullet = <Text>{element.indexOfType + 1}.</Text>;\n }\n } else {\n // if (listStyleType.includes('square')) {\n // bullet = <Text>■</Text>;\n // } else {\n bullet = <Text>•</Text>;\n // }\n }\n return (\n <View style={style}>\n {bullet && <View style={bulletStyles}>{bullet}</View>}\n <View style={contentStyles}>{children}</View>\n </View>\n );\n },\n a: ({ style, element, children }) => (\n <Link style={style} src={element.attributes.href}>\n {children}\n </Link>\n ),\n img: ({ style, element }) => {\n const { width, height } = element.attributes;\n const dimensions: any = {};\n if (width) {\n dimensions.width = width;\n }\n if (height) {\n dimensions.height = height;\n }\n const finalStyles = Object.assign({}, ...style, dimensions);\n return (\n <View wrap={true}>\n <Image\n style={finalStyles}\n source={{\n uri: element.attributes.src,\n body: null,\n method: 'GET',\n headers: {\n 'Cache-Control': 'no-cache',\n 'Access-Control-Allow-Origin': '*',\n },\n }}\n />\n </View>\n );\n },\n table: ({ element, style, children }) => {\n const tableStyles = element.style.reduce(\n (combined, tableStyle) => Object.assign(combined, tableStyle),\n {} as HtmlStyle\n );\n const { border } = element.attributes as any;\n const overrides: HtmlStyle = {};\n if (\n !(tableStyles as any).borderSpacing ||\n (tableStyles as any).borderCollapse === 'collapse'\n ) {\n overrides.borderLeftWidth = 0;\n overrides.borderTopWidth = 0;\n }\n\n if (border == 0) {\n overrides.borderWidth = '0px';\n overrides.borderStyle = 'none';\n }\n const borderColor = style.find(\n (s) => s.borderColor && s.borderColor !== 'gray'\n )?.borderColor;\n if (borderColor) {\n overrides.borderColor = borderColor;\n }\n const finalStyles = Object.assign({}, ...style, overrides);\n if (!finalStyles.width || parseFloat(finalStyles.width) > 100) {\n finalStyles.width = '100%';\n }\n delete finalStyles.height;\n return <View style={finalStyles}>{children}</View>;\n },\n colgroup: ({ element, children }) => {\n let cols = children as any;\n cols = Array.isArray(cols) ? cols : [cols];\n const colWidths = cols.map((col: any) => {\n const style = col?.props?.style || '';\n const widthStyle = style.find((s: any) => s.hasOwnProperty('width'));\n if (widthStyle) return widthStyle.width;\n return undefined;\n });\n\n const table = element.closest('table') as HtmlElement | undefined;\n if (table) {\n if (Array.isArray(table.style)) {\n table.style.push({ colWidths });\n } else {\n table.style = [{ colWidths }];\n }\n }\n\n return <></>; // don't render anything\n },\n tr: ({ style, children }) => {\n const finalStyles = Object.assign({}, ...style);\n delete finalStyles.height;\n return (\n <View wrap={true} style={finalStyles}>\n {children}\n </View>\n );\n },\n br: ({ style }) => (\n <Text wrap={true} style={style}>\n {'\\n'}\n </Text>\n ),\n td: renderCell,\n th: renderCell,\n};\n\nexport default renderers;\n"]}
1
+ {"version":3,"file":"renderers.js","sourceRoot":"","sources":["../src/renderers.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Link, Text, View, Image } from '@react-pdf/renderer';\nimport { HtmlRenderer, HtmlRenderers } from './render';\nimport { HtmlElement } from './parse';\nimport { HtmlStyle } from './styles';\nimport { lowerAlpha, orderedAlpha, upperAlpha } from './ordered.type';\n\nexport const renderNoop: HtmlRenderer = ({ children }) => <></>;\n\nexport const renderPassThrough: React.FC<React.PropsWithChildren<any>> = ({\n children,\n}) => children;\n\nexport const renderBlock: HtmlRenderer = ({ style, children }) => {\n if (style?.find((e) => e.textAlign == 'center')) {\n style?.push({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n width: '100%',\n });\n }\n return <View style={style}>{children}</View>;\n};\n\nexport const renderInline: HtmlRenderer = ({ style, children }) => {\n if (style?.find((e) => e.textAlign == 'center')) {\n style?.push({\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n width: '100%',\n });\n }\n return <Text style={style}>{children}</Text>;\n};\n\nexport const renderCell: HtmlRenderer = ({ style, element, children }) => {\n const table = element.closest('table') as HtmlElement | undefined;\n const tableAttributes = table?.attributes as any;\n if (!table) {\n throw new Error('td element rendered outside of a table');\n }\n const columnIndex = element.indexOfType;\n const combinedStyle = style.reduce(\n (acc, current) => Object.assign(acc, current),\n {} as HtmlStyle\n );\n\n const tableStyles = table.style.reduce(\n (combined, tableStyle) => Object.assign(combined, tableStyle),\n {} as HtmlStyle\n );\n\n const colWidths = tableStyles.colWidths || [];\n const columnWidth = colWidths[columnIndex];\n\n const baseStyles: HtmlStyle = {\n border: tableStyles.border,\n borderColor: tableStyles.borderColor,\n borderWidth: tableStyles.borderWidth,\n borderStyle: tableStyles.borderStyle,\n };\n\n if (\n (tableStyles as any).borderSpacing &&\n (tableStyles as any).borderCollapse !== 'collapse'\n ) {\n baseStyles.borderWidth = tableStyles.borderWidth;\n baseStyles.margin = (tableStyles as any).borderSpacing;\n } else {\n baseStyles.borderRightWidth = 0;\n baseStyles.borderBottomWidth = 0;\n if (element.indexOfType !== 0) {\n baseStyles.borderLeftWidth = tableStyles.borderWidth;\n baseStyles.borderTopWidth = tableStyles.borderWidth;\n }\n }\n\n if (tableAttributes?.border == 0) {\n baseStyles.borderRightWidth = '0px';\n baseStyles.borderBottomWidth = '0px';\n baseStyles.borderTopWidth = '0px';\n baseStyles.borderLeftWidth = '0px';\n }\n\n const overrides: HtmlStyle = {};\n if (combinedStyle.textAlign == 'center') {\n overrides.alignItems = 'center';\n }\n\n if (combinedStyle.verticalAlign == 'center') {\n overrides.justifyContent = 'center';\n }\n\n if (columnWidth) {\n overrides.width = columnWidth;\n }\n\n const finalStyles = Object.assign({}, baseStyles, combinedStyle, overrides);\n if (!finalStyles.width) finalStyles.flex = 1;\n delete finalStyles.height;\n\n return <View style={finalStyles}>{children}</View>;\n};\n\nconst renderers: HtmlRenderers = {\n style: renderNoop,\n script: renderNoop,\n html: renderPassThrough,\n li: ({ element, stylesheets, style, children }) => {\n const bulletStyles = stylesheets.map((stylesheet) => stylesheet.li_bullet);\n const contentStyles = stylesheets.map(\n (stylesheet) => stylesheet.li_content\n );\n const list: HtmlElement = element.closest('ol, ul') as HtmlElement;\n const ordered = list?.tag === 'ol' || element.parentNode.tag === 'ol';\n const listStyle =\n list?.style?.reduce(\n (combined, listStyle) => Object.assign(combined, listStyle),\n {} as HtmlStyle\n ) || {};\n const itemStyle = element.style.reduce(\n (combined, itemStyle) => Object.assign(combined, itemStyle),\n {} as HtmlStyle\n );\n const listStyleType =\n itemStyle.listStyleType ||\n itemStyle.listStyle ||\n listStyle.listStyleType ||\n listStyle.listStyle ||\n '';\n\n let bullet;\n if (listStyleType.includes('none')) {\n bullet = false;\n } else if (listStyleType.includes('url(')) {\n bullet = (\n <Image\n src={listStyleType.match(/\\((.*?)\\)/)[1].replace(/(['\"])/g, '')}\n />\n );\n } else if (ordered) {\n if (lowerAlpha.includes(listStyleType)) {\n bullet = (\n <Text>{orderedAlpha[element.indexOfType].toLowerCase()}.</Text>\n );\n } else if (upperAlpha.includes(listStyleType)) {\n bullet = (\n <Text>{orderedAlpha[element.indexOfType].toUpperCase()}.</Text>\n );\n } else {\n bullet = <Text>{element.indexOfType + 1}.</Text>;\n }\n } else {\n // if (listStyleType.includes('square')) {\n // bullet = <Text>■</Text>;\n // } else {\n bullet = <Text>•</Text>;\n // }\n }\n return (\n <View style={style}>\n {bullet && <View style={bulletStyles}>{bullet}</View>}\n <View style={contentStyles}>{children}</View>\n </View>\n );\n },\n a: ({ style, element, children }) => (\n <Link style={style} src={element.attributes.href}>\n {children}\n </Link>\n ),\n img: ({ style, element }) => {\n const { width, height } = element.attributes;\n const dimensions: any = {};\n if (width) {\n dimensions.width = width;\n }\n if (height) {\n dimensions.height = height;\n }\n const finalStyles = Object.assign({}, ...style, dimensions);\n return (\n <View wrap={true}>\n <Image\n style={finalStyles}\n source={{\n uri: element.attributes.src,\n body: null,\n method: 'GET',\n headers: {\n 'Cache-Control': 'no-cache',\n 'Access-Control-Allow-Origin': '*',\n },\n }}\n />\n </View>\n );\n },\n table: ({ element, style, children }) => {\n const tableStyles = element.style.reduce(\n (combined, tableStyle) => Object.assign(combined, tableStyle),\n {} as HtmlStyle\n );\n const { border } = element.attributes as any;\n const overrides: HtmlStyle = {};\n if (\n !(tableStyles as any).borderSpacing ||\n (tableStyles as any).borderCollapse === 'collapse'\n ) {\n overrides.borderLeftWidth = 0;\n overrides.borderTopWidth = 0;\n }\n\n if (border == 0) {\n overrides.borderWidth = '0px';\n overrides.borderStyle = 'none';\n }\n const borderColor = style.find(\n (s) => s.borderColor && s.borderColor !== 'gray'\n )?.borderColor;\n if (borderColor) {\n overrides.borderColor = borderColor;\n }\n const finalStyles = Object.assign({}, ...style, overrides);\n if (!finalStyles.width || parseFloat(finalStyles.width) > 100) {\n finalStyles.width = '100%';\n }\n delete finalStyles.height;\n return <View style={finalStyles}>{children}</View>;\n },\n colgroup: ({ element, children }) => {\n let cols = children as any;\n cols = Array.isArray(cols) ? cols : [cols];\n const colWidths = cols.map((col: any) => {\n const style = col?.props?.style || '';\n const widthStyle = style.find((s: any) => s.hasOwnProperty('width'));\n if (widthStyle) return widthStyle.width;\n return undefined;\n });\n\n const table = element.closest('table') as HtmlElement | undefined;\n if (table) {\n if (Array.isArray(table.style)) {\n table.style.push({ colWidths });\n } else {\n table.style = [{ colWidths }];\n }\n }\n\n return <></>; // don't render anything\n },\n tr: ({ style, children }) => {\n const finalStyles = Object.assign({}, ...style);\n delete finalStyles.height;\n return (\n <View wrap={true} style={finalStyles}>\n {children}\n </View>\n );\n },\n br: ({ style }) => (\n <Text wrap={true} style={style}>\n {'\\n'}\n </Text>\n ),\n td: renderCell,\n th: renderCell,\n};\n\nexport default renderers;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-pdf-html-flabs-2",
3
- "version": "1.1.7",
3
+ "version": "1.1.8",
4
4
  "author": "Harsh",
5
5
  "description": "Html component for react-pdf with CSS support optimized",
6
6
  "keywords": [