@blocknote/xl-pdf-exporter 0.31.3 → 0.32.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"blocknote-xl-pdf-exporter.js","sources":["../src/pdf/util/listItem.tsx","../src/pdf/util/table/Table.tsx","../src/pdf/defaultSchema/blocks.tsx","../src/pdf/defaultSchema/inlinecontent.tsx","../src/pdf/defaultSchema/styles.tsx","../src/pdf/defaultSchema/index.ts","../../../shared/api/corsProxy.ts","../../../shared/util/fileUtil.ts","../src/pdf/pdfExporter.tsx"],"sourcesContent":["import { Path, StyleSheet, Svg, Text, View } from \"@react-pdf/renderer\";\nimport { Style } from \"../types.js\";\n\n// https://github.com/diegomura/react-pdf/issues/134\n\nconst PIXELS_PER_POINT = 0.75;\n\nconst styles = StyleSheet.create({\n listItem: {\n display: \"flex\",\n flexDirection: \"row\",\n gap: 8 * PIXELS_PER_POINT,\n paddingRight: 10, // otherwise text overflows, seems like a react-pdf / yoga bug\n },\n bullet: {\n // fontFamily: \"\", // we could add symbol font if we don't want to use inter (default font) here\n },\n});\n\nexport const BULLET_MARKER = \"\\u2022\";\n\n// https://fonts.google.com/icons?selected=Material+Symbols+Outlined:check_box_outline_blank:FILL@0;wght@400;GRAD@0;opsz@24&icon.size=24&icon.color=undefined\nexport const CHECK_MARKER_UNCHECKED = (\n <Svg\n style={{ marginTop: 2 }}\n height=\"12\"\n viewBox=\"0 -960 960 960\"\n width=\"12\"\n fill=\"undefined\"\n >\n <Path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z\" />\n </Svg>\n);\n\n// https://fonts.google.com/icons?selected=Material+Symbols+Outlined:check_box:FILL@0;wght@400;GRAD@0;opsz@24&icon.size=24&icon.color=undefined\nexport const CHECK_MARKER_CHECKED = (\n <Svg\n style={{ marginTop: 2 }}\n height=\"12\"\n viewBox=\"0 -960 960 960\"\n width=\"12\"\n fill=\"undefined\"\n >\n <Path d=\"m424-312 282-282-56-56-226 226-114-114-56 56 170 170ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" />\n </Svg>\n);\n\nexport const ListItem = ({\n listMarker,\n children,\n style,\n}: {\n listMarker: string | React.ReactNode;\n children: React.ReactNode;\n style?: Style;\n}) => {\n return (\n <View style={[styles.listItem, style || {}]}>\n <View style={styles.bullet}>\n {/* <Svg width={2} height={2}>\n <Circle cx=\"1\" cy=\"1\" r=\"2\" fill=\"black\" />\n </Svg> */}\n {typeof listMarker === \"string\" ? (\n <Text>{listMarker}</Text>\n ) : (\n listMarker\n )}\n </View>\n {children}\n </View>\n );\n};\n","import {\n Exporter,\n InlineContentSchema,\n mapTableCell,\n StyleSchema,\n TableContent,\n} from \"@blocknote/core\";\nimport { StyleSheet, View } from \"@react-pdf/renderer\";\nconst PIXELS_PER_POINT = 0.75;\n\n// ( impossible?) to make tables with flex that don't have a fixed / 100% width?\n// we'd need to measure the width of every column manually\nconst styles = StyleSheet.create({\n tableContainer: {\n // width: \"100%\",\n },\n row: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n // width: \"100%\",\n // justifyContent: \"space-between\",\n display: \"flex\",\n },\n cell: {\n paddingHorizontal: 5 * PIXELS_PER_POINT,\n paddingTop: 3 * PIXELS_PER_POINT,\n // paddingBottom: 1 * PIXELS_PER_POINT, should be 3px but looks odd, better with no padding Bottom\n borderLeft: \"1px solid #ddd\",\n borderTop: \"1px solid #ddd\",\n wordWrap: \"break-word\",\n whiteSpace: \"pre-wrap\",\n },\n headerCell: {\n fontWeight: \"bold\",\n },\n bottomCell: {\n borderBottom: \"1px solid #ddd\",\n },\n rightCell: {\n borderRight: \"1px solid #ddd\",\n },\n});\n\nexport const Table = (props: {\n data: TableContent<InlineContentSchema>;\n transformer: Exporter<\n any,\n InlineContentSchema,\n StyleSchema,\n any,\n any,\n any,\n any\n >;\n}) => {\n // If headerRows is 1, then the first row is a header row\n const headerRows = new Array(props.data.headerRows ?? 0).fill(true);\n // If headerCols is 1, then the first column is a header column\n const headerCols = new Array(props.data.headerCols ?? 0).fill(true);\n\n return (\n <View style={styles.tableContainer} wrap={false}>\n {props.data.rows.map((row, rowIndex) => (\n <View\n style={[\n styles.row,\n rowIndex === props.data.rows.length - 1 ? styles.bottomCell : {},\n ]}\n key={rowIndex}\n >\n {row.cells.map((c, colIndex) => {\n const cell = mapTableCell(c);\n\n const isHeaderRow = headerRows[rowIndex];\n const isHeaderCol = headerCols[colIndex];\n\n // TODO we need to support for colspan and rowspan, but at the moment are blocked by react-pdf\n return (\n <View\n style={[\n styles.cell,\n isHeaderRow || isHeaderCol ? styles.headerCell : {},\n colIndex === row.cells.length - 1 ? styles.rightCell : {},\n props.data.columnWidths[colIndex]\n ? { width: props.data.columnWidths[colIndex] }\n : { flex: 1 },\n {\n color:\n cell.props.textColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props\n .textColor as keyof typeof props.transformer.options.colors\n ].text,\n backgroundColor:\n cell.props.backgroundColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props\n .backgroundColor as keyof typeof props.transformer.options.colors\n ].background,\n textAlign: cell.props.textAlignment,\n },\n ]}\n key={colIndex}\n >\n {props.transformer.transformInlineContent(cell.content)}\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","import {\n BlockMapping,\n DefaultBlockSchema,\n DefaultProps,\n pageBreakSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport { Image, Link, Path, Svg, Text, View } from \"@react-pdf/renderer\";\nimport {\n BULLET_MARKER,\n CHECK_MARKER_CHECKED,\n CHECK_MARKER_UNCHECKED,\n ListItem,\n} from \"../util/listItem.js\";\nimport { Table } from \"../util/table/Table.js\";\n\nconst PIXELS_PER_POINT = 0.75;\nconst FONT_SIZE = 16;\n\nexport const pdfBlockMappingForDefaultSchema: BlockMapping<\n DefaultBlockSchema & typeof pageBreakSchema.blockSchema,\n any,\n any,\n React.ReactElement<Text>,\n React.ReactElement<Text> | React.ReactElement<Link>\n> = {\n paragraph: (block, exporter) => {\n // const style = blocknoteDefaultPropsToReactPDFStyle(block.props);\n return <Text>{exporter.transformInlineContent(block.content)}</Text>;\n },\n bulletListItem: (block, exporter) => {\n // const style = t(block.props);\n return (\n <ListItem listMarker={BULLET_MARKER}>\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n numberedListItem: (block, exporter, _nestingLevel, numberedListIndex) => {\n // const style = blocknoteDefaultPropsToReactPDFStyle(block.props);\n // console.log(\"NUMBERED LIST ITEM\", block.props.textAlignment, style);\n return (\n <ListItem listMarker={`${numberedListIndex}.`}>\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n // would be nice to have pdf checkboxes:\n // https://github.com/diegomura/react-pdf/issues/2103\n checkListItem: (block, exporter) => {\n return (\n <ListItem\n listMarker={\n block.props.checked ? CHECK_MARKER_CHECKED : CHECK_MARKER_UNCHECKED\n }\n >\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n heading: (block, exporter) => {\n const fontSizeEM =\n block.props.level === 1 ? 2 : block.props.level === 2 ? 1.5 : 1.17;\n return (\n <Text\n style={{\n fontSize: fontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n fontWeight: 700,\n }}\n >\n {exporter.transformInlineContent(block.content)}\n </Text>\n );\n },\n quote: (block, exporter) => {\n return (\n <Text\n style={{\n borderLeft: \"#7D797A\",\n color: \"#7D797A\",\n paddingLeft: 9.5 * PIXELS_PER_POINT,\n }}\n >\n {exporter.transformInlineContent(block.content)}\n </Text>\n );\n },\n codeBlock: (block) => {\n const textContent = (block.content as StyledText<any>[])[0]?.text || \"\";\n const lines = textContent.split(\"\\n\").map((line, index) => {\n const indent = line.match(/^\\s*/)?.[0].length || 0;\n\n return (\n <Text\n key={`line_${index}`}\n style={{\n marginLeft: indent * 9.5 * PIXELS_PER_POINT,\n }}\n >\n {line.trimStart() || <>&nbsp;</>}\n </Text>\n );\n });\n\n return (\n <View\n wrap={false}\n style={{\n padding: 24 * PIXELS_PER_POINT,\n backgroundColor: \"#161616\",\n color: \"#ffffff\",\n lineHeight: 1.25,\n fontSize: FONT_SIZE * PIXELS_PER_POINT,\n fontFamily: \"GeistMono\",\n }}\n >\n {lines}\n </View>\n );\n },\n pageBreak: () => {\n return <View break />;\n },\n audio: (block, exporter) => {\n return (\n <View wrap={false}>\n {file(\n block.props,\n \"Open audio file\",\n <Svg height={14} width={14} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M2 16.0001H5.88889L11.1834 20.3319C11.2727 20.405 11.3846 20.4449 11.5 20.4449C11.7761 20.4449 12 20.2211 12 19.9449V4.05519C12 3.93977 11.9601 3.8279 11.887 3.73857C11.7121 3.52485 11.3971 3.49335 11.1834 3.66821L5.88889 8.00007H2C1.44772 8.00007 1 8.44778 1 9.00007V15.0001C1 15.5524 1.44772 16.0001 2 16.0001ZM23 12C23 15.292 21.5539 18.2463 19.2622 20.2622L17.8445 18.8444C19.7758 17.1937 21 14.7398 21 12C21 9.26016 19.7758 6.80629 17.8445 5.15557L19.2622 3.73779C21.5539 5.75368 23 8.70795 23 12ZM18 12C18 10.0883 17.106 8.38548 15.7133 7.28673L14.2842 8.71584C15.3213 9.43855 16 10.64 16 12C16 13.36 15.3213 14.5614 14.2842 15.2841L15.7133 16.7132C17.106 15.6145 18 13.9116 18 12Z\"></Path>\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n video: (block, exporter) => {\n return (\n <View wrap={false}>\n {file(\n block.props,\n \"Open video file\",\n <Svg height={14} width={14} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M2 3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934ZM8 5V19H16V5H8ZM4 5V7H6V5H4ZM18 5V7H20V5H18ZM4 9V11H6V9H4ZM18 9V11H20V9H18ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z\" />\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n file: (block, exporter) => {\n return (\n <View wrap={false}>\n {file(\n block.props,\n \"Open file\",\n <Svg height={16} width={16} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z\" />\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n image: async (block, t) => {\n return (\n <View wrap={false}>\n <Image\n src={await t.resolveFile(block.props.url)}\n style={{\n width: block.props.previewWidth\n ? block.props.previewWidth * PIXELS_PER_POINT\n : undefined,\n }}\n />\n {caption(block.props, t)}\n </View>\n );\n },\n table: (block, t) => {\n return <Table data={block.content} transformer={t} />;\n },\n};\n\nfunction file(\n props: Partial<DefaultProps & { name: string; url: string }>,\n defaultText: string,\n icon: React.ReactElement<Svg>,\n _exporter: any,\n) {\n const PIXELS_PER_POINT = 0.75;\n return (\n <Link src={props.url}>\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {icon}\n <Text>{props.name || defaultText}</Text>\n </View>\n </Link>\n );\n}\n\nfunction caption(\n props: Partial<DefaultProps & { caption: string; previewWidth: number }>,\n _exporter: any,\n) {\n if (!props.caption) {\n return undefined;\n }\n return (\n <Text\n style={{\n width: props.previewWidth\n ? props.previewWidth * PIXELS_PER_POINT\n : undefined,\n fontSize: FONT_SIZE * 0.8 * PIXELS_PER_POINT,\n }}\n >\n {props.caption}\n </Text>\n );\n}\n","import {\n DefaultInlineContentSchema,\n InlineContentMapping,\n} from \"@blocknote/core\";\nimport { Link, Text } from \"@react-pdf/renderer\";\n\nexport const pdfInlineContentMappingForDefaultSchema: InlineContentMapping<\n DefaultInlineContentSchema,\n any,\n React.ReactElement<Link> | React.ReactElement<Text>,\n React.ReactElement<Text>\n> = {\n link: (ic, exporter) => {\n return (\n <Link href={ic.href}>\n {ic.content.map((content) => exporter.transformStyledText(content))}\n </Link>\n );\n },\n text: (ic, exporter) => {\n return exporter.transformStyledText(ic);\n },\n};\n","import { DefaultStyleSchema, StyleMapping } from \"@blocknote/core\";\nimport { TextProps } from \"@react-pdf/renderer\";\n\nexport const pdfStyleMappingForDefaultSchema: StyleMapping<\n DefaultStyleSchema,\n TextProps[\"style\"]\n> = {\n bold: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontWeight: \"bold\",\n };\n },\n italic: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontStyle: \"italic\",\n };\n },\n underline: (val) => {\n if (!val) {\n return {};\n }\n return {\n textDecoration: \"underline\", // TODO: could conflict with strike\n };\n },\n strike: (val) => {\n if (!val) {\n return {};\n }\n return {\n textDecoration: \"line-through\",\n };\n },\n backgroundColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n backgroundColor:\n exporter.options.colors[val as keyof typeof exporter.options.colors]\n .background,\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color:\n exporter.options.colors[val as keyof typeof exporter.options.colors]\n .text,\n };\n },\n code: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontFamily: \"GeistMono\",\n };\n },\n};\n","import { pdfBlockMappingForDefaultSchema } from \"./blocks.js\";\nimport { pdfInlineContentMappingForDefaultSchema } from \"./inlinecontent.js\";\nimport { pdfStyleMappingForDefaultSchema } from \"./styles.js\";\n\nexport const pdfDefaultSchemaMappings: {\n blockMapping: typeof pdfBlockMappingForDefaultSchema;\n inlineContentMapping: typeof pdfInlineContentMappingForDefaultSchema;\n styleMapping: typeof pdfStyleMappingForDefaultSchema;\n} = {\n blockMapping: pdfBlockMappingForDefaultSchema,\n inlineContentMapping: pdfInlineContentMappingForDefaultSchema,\n styleMapping: pdfStyleMappingForDefaultSchema,\n};\n","export async function corsProxyResolveFileUrl(url: string) {\n return (\n \"https://corsproxy.api.blocknotejs.org/corsproxy/?url=\" +\n encodeURIComponent(url)\n );\n}\n","/**\n *\n * Helper functions so that we can import files both on vitest, browser and node\n * TODO: should find a way to test automatically in all environments\n */\n\nexport async function loadFileDataUrl(\n requireUrl: { default: string },\n mimeType: string,\n) {\n if (import.meta.env.NODE_ENV === \"test\") {\n const buffer = await loadFileBuffer(requireUrl);\n const fileBase64 = buffer.toString(\"base64\");\n\n const dataUrl = `data:${mimeType};base64,${fileBase64}`;\n return dataUrl;\n } else {\n // in browser, this is already a data url\n return requireUrl.default as string;\n }\n}\n\nexport async function loadFontDataUrl(requireUrl: { default: string }) {\n return loadFileDataUrl(requireUrl, \"font/ttf\");\n}\n\nexport async function loadFileBuffer(requireUrl: {\n default: string;\n}): Promise<Buffer | ArrayBuffer> {\n if (import.meta.env.NODE_ENV === \"test\") {\n // in vitest, this is the url we need to load with readfilesync\n // eslint-disable-next-line\n const fs = require(\"fs\");\n let url = requireUrl.default;\n\n if (url.startsWith(\"/@fs/\")) {\n url = url.substring(\"/@fs\".length);\n }\n const buffer = fs.readFileSync(url);\n return buffer;\n } else {\n // in browser, this is already a data url\n const dataUrl = requireUrl.default as string;\n // convert to buffer on browser\n const response = await fetch(dataUrl);\n const arrayBuffer = await response.arrayBuffer();\n return arrayBuffer;\n }\n}\n\n/**\n * usage:\n * \n * await loadFontDataUrl(\n await import(\"../fonts/inter/Inter_18pt-Italic.ttf\")\n );\n */\n","import {\n Block,\n BlockNoteSchema,\n BlockSchema,\n COLORS_DEFAULT,\n DefaultProps,\n Exporter,\n ExporterOptions,\n InlineContentSchema,\n StyleSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport {\n Document,\n Font,\n Link,\n Page,\n StyleSheet,\n Text,\n TextProps,\n View,\n} from \"@react-pdf/renderer\";\nimport { corsProxyResolveFileUrl } from \"@shared/api/corsProxy.js\";\nimport { loadFontDataUrl } from \"../../../../shared/util/fileUtil.js\";\n\nimport { Style } from \"./types.js\";\n\nconst FONT_SIZE = 16;\nconst PIXELS_PER_POINT = 0.75;\n\ntype Options = ExporterOptions & {\n /**\n *\n * @default uses the remote emoji source hosted on cloudflare (https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/)\n */\n emojiSource: false | ReturnType<typeof Font.getEmojiSource>;\n};\n\n/**\n * Exports a BlockNote document to a .pdf file using the react-pdf library.\n */\nexport class PDFExporter<\n B extends BlockSchema,\n S extends StyleSchema,\n I extends InlineContentSchema,\n> extends Exporter<\n B,\n I,\n S,\n React.ReactElement<Text>,\n React.ReactElement<Link> | React.ReactElement<Text>,\n TextProps[\"style\"],\n React.ReactElement<Text>\n> {\n private fontsRegistered = false;\n\n public styles = StyleSheet.create({\n page: {\n paddingTop: 35,\n paddingBottom: 65,\n paddingHorizontal: 35,\n fontFamily: \"Inter\",\n fontSize: FONT_SIZE * PIXELS_PER_POINT, // pixels\n lineHeight: 1.5,\n },\n block: {},\n blockChildren: {},\n header: {},\n footer: {\n position: \"absolute\",\n },\n });\n\n public readonly options: Options;\n\n public constructor(\n /**\n * The schema of your editor. The mappings are automatically typed checked against this schema.\n */\n protected readonly schema: BlockNoteSchema<B, I, S>,\n /**\n * The mappings that map the BlockNote schema to the react-pdf content.\n *\n * Pass {@link pdfDefaultSchemaMappings} for the default schema.\n */\n mappings: Exporter<\n NoInfer<B>,\n NoInfer<I>,\n NoInfer<S>,\n React.ReactElement<Text>, // RB\n React.ReactElement<Link> | React.ReactElement<Text>, // RI\n TextProps[\"style\"], // RS\n React.ReactElement<Text> // TS\n >[\"mappings\"],\n options?: Partial<Options>,\n ) {\n const defaults = {\n emojiSource: {\n format: \"png\",\n url: \"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/\",\n },\n resolveFileUrl: corsProxyResolveFileUrl,\n colors: COLORS_DEFAULT,\n } satisfies Partial<Options>;\n\n const newOptions = {\n ...defaults,\n ...options,\n };\n super(schema, mappings, newOptions);\n this.options = newOptions;\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toReactPDFDocument` instead.\n */\n public transformStyledText(styledText: StyledText<S>) {\n const stylesArray = this.mapStyles(styledText.styles);\n const styles = Object.assign({}, ...stylesArray);\n return <Text style={styles}>{styledText.text}</Text>;\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toReactPDFDocument` instead.\n */\n public async transformBlocks(\n blocks: Block<B, I, S>[], // Or BlockFromConfig<B[keyof B], I, S>?\n nestingLevel = 0,\n ): Promise<React.ReactElement<Text>[]> {\n const ret: React.ReactElement<Text>[] = [];\n let numberedListIndex = 0;\n\n for (const b of blocks) {\n if (b.type === \"numberedListItem\") {\n numberedListIndex++;\n } else {\n numberedListIndex = 0;\n }\n const children = await this.transformBlocks(b.children, nestingLevel + 1);\n const self = await this.mapBlock(\n b as any,\n nestingLevel,\n numberedListIndex,\n ); // TODO: any\n\n if (b.type === \"pageBreak\") {\n ret.push(self);\n continue;\n }\n\n const style = this.blocknoteDefaultPropsToReactPDFStyle(b.props as any);\n ret.push(\n <>\n <View\n style={{\n paddingVertical: 3 * PIXELS_PER_POINT,\n ...this.styles.block,\n ...style,\n }}\n >\n {self}\n </View>\n {children.length > 0 && (\n <View\n style={{\n marginLeft: FONT_SIZE * 1.5 * PIXELS_PER_POINT,\n ...this.styles.blockChildren,\n }}\n >\n {children}\n </View>\n )}\n </>,\n );\n }\n\n return ret;\n }\n\n protected async registerFonts() {\n if (this.fontsRegistered) {\n return;\n }\n\n if (this.options.emojiSource) {\n Font.registerEmojiSource(this.options.emojiSource);\n }\n let font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Regular.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n src: font,\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Italic.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n fontStyle: \"italic\",\n src: font,\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Bold.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n src: font,\n fontWeight: \"bold\",\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-BoldItalic.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n fontStyle: \"italic\",\n src: font,\n fontWeight: \"bold\",\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/GeistMono-Regular.ttf\"),\n );\n Font.register({\n family: \"GeistMono\",\n src: font,\n });\n\n this.fontsRegistered = true;\n }\n\n /**\n * Convert a document (array of Blocks) to a react-pdf Document.\n */\n public async toReactPDFDocument(\n blocks: Block<B, I, S>[],\n options: {\n /**\n * Add a header to every page.\n * The React component passed must be a React-PDF component\n */\n header?: React.ReactElement;\n /**\n * Add a footer to every page.\n * The React component passed must be a React-PDF component\n */\n footer?: React.ReactElement;\n } = {},\n ) {\n await this.registerFonts();\n\n return (\n <Document>\n <Page dpi={100} size=\"A4\" style={this.styles.page}>\n {options.header && (\n <View fixed style={this.styles.header}>\n {options.header}\n </View>\n )}\n {await this.transformBlocks(blocks)}\n {options.footer && (\n <View\n fixed\n style={[\n {\n left: this.styles.page.paddingHorizontal || 0,\n bottom: (this.styles.page.paddingBottom || 0) / 2,\n right: this.styles.page.paddingHorizontal || 0,\n },\n this.styles.footer,\n ]}\n >\n {options.footer}\n </View>\n )}\n </Page>\n </Document>\n );\n }\n\n protected blocknoteDefaultPropsToReactPDFStyle(\n props: Partial<DefaultProps>,\n ): Style {\n return {\n textAlign: props.textAlignment,\n backgroundColor:\n props.backgroundColor === \"default\" || !props.backgroundColor\n ? undefined\n : this.options.colors[\n props.backgroundColor as keyof typeof this.options.colors\n ].background,\n color:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : this.options.colors[\n props.textColor as keyof typeof this.options.colors\n ].text,\n alignItems:\n props.textAlignment === \"right\"\n ? \"flex-end\"\n : props.textAlignment === \"center\"\n ? \"center\"\n : undefined,\n };\n }\n}\n"],"names":["PIXELS_PER_POINT","styles","StyleSheet","BULLET_MARKER","CHECK_MARKER_UNCHECKED","jsx","Svg","Path","CHECK_MARKER_CHECKED","ListItem","listMarker","children","style","jsxs","View","Text","Table","props","headerRows","headerCols","row","rowIndex","colIndex","cell","mapTableCell","isHeaderRow","isHeaderCol","FONT_SIZE","pdfBlockMappingForDefaultSchema","block","exporter","_nestingLevel","numberedListIndex","fontSizeEM","lines","_a","line","index","indent","Fragment","file","caption","t","Image","defaultText","icon","_exporter","Link","pdfInlineContentMappingForDefaultSchema","ic","content","pdfStyleMappingForDefaultSchema","val","pdfDefaultSchemaMappings","corsProxyResolveFileUrl","url","loadFileDataUrl","requireUrl","mimeType","loadFontDataUrl","PDFExporter","Exporter","schema","mappings","options","newOptions","COLORS_DEFAULT","__publicField","styledText","stylesArray","blocks","nestingLevel","ret","b","self","Font","font","Document","Page"],"mappings":"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"}
1
+ {"version":3,"file":"blocknote-xl-pdf-exporter.js","sources":["../src/pdf/util/listItem.tsx","../src/pdf/util/table/Table.tsx","../src/pdf/defaultSchema/blocks.tsx","../src/pdf/defaultSchema/inlinecontent.tsx","../src/pdf/defaultSchema/styles.tsx","../src/pdf/defaultSchema/index.ts","../../../shared/api/corsProxy.ts","../../../shared/util/fileUtil.ts","../src/pdf/pdfExporter.tsx"],"sourcesContent":["import { Path, StyleSheet, Svg, Text, View } from \"@react-pdf/renderer\";\nimport { Style } from \"../types.js\";\n\n// https://github.com/diegomura/react-pdf/issues/134\n\nconst PIXELS_PER_POINT = 0.75;\n\nconst styles = StyleSheet.create({\n listItem: {\n display: \"flex\",\n flexDirection: \"row\",\n gap: 8 * PIXELS_PER_POINT,\n paddingRight: 10, // otherwise text overflows, seems like a react-pdf / yoga bug\n },\n bullet: {\n // fontFamily: \"\", // we could add symbol font if we don't want to use inter (default font) here\n },\n});\n\nexport const BULLET_MARKER = \"\\u2022\";\n\n// https://fonts.google.com/icons?selected=Material+Symbols+Rounded:chevron_right:FILL@0;wght@700;GRAD@0;opsz@24&icon.query=chevron&icon.style=Rounded&icon.size=24&icon.color=%23e8eaed\nexport const CHEVRON_MARKER = (\n <Svg\n style={{ marginTop: 2 }}\n height=\"12\"\n viewBox=\"0 -960 960 960\"\n width=\"12\"\n fill=\"undefined\"\n >\n <Path d=\"M472-480 332-620q-18-18-18-44t18-44q18-18 44-18t44 18l183 183q9 9 14 21t5 24q0 12-5 24t-14 21L420-252q-18 18-44 18t-44-18q-18-18-18-44t18-44l140-140Z\" />\n </Svg>\n);\n\n// https://fonts.google.com/icons?selected=Material+Symbols+Outlined:check_box_outline_blank:FILL@0;wght@400;GRAD@0;opsz@24&icon.size=24&icon.color=undefined\nexport const CHECK_MARKER_UNCHECKED = (\n <Svg\n style={{ marginTop: 2 }}\n height=\"12\"\n viewBox=\"0 -960 960 960\"\n width=\"12\"\n fill=\"undefined\"\n >\n <Path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Z\" />\n </Svg>\n);\n\n// https://fonts.google.com/icons?selected=Material+Symbols+Outlined:check_box:FILL@0;wght@400;GRAD@0;opsz@24&icon.size=24&icon.color=undefined\nexport const CHECK_MARKER_CHECKED = (\n <Svg\n style={{ marginTop: 2 }}\n height=\"12\"\n viewBox=\"0 -960 960 960\"\n width=\"12\"\n fill=\"undefined\"\n >\n <Path d=\"m424-312 282-282-56-56-226 226-114-114-56 56 170 170ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z\" />\n </Svg>\n);\n\nexport const ListItem = ({\n listMarker,\n children,\n style,\n}: {\n listMarker: string | React.ReactNode;\n children: React.ReactNode;\n style?: Style;\n}) => {\n return (\n <View style={[styles.listItem, style || {}]}>\n <View style={styles.bullet}>\n {/* <Svg width={2} height={2}>\n <Circle cx=\"1\" cy=\"1\" r=\"2\" fill=\"black\" />\n </Svg> */}\n {typeof listMarker === \"string\" ? (\n <Text>{listMarker}</Text>\n ) : (\n listMarker\n )}\n </View>\n {children}\n </View>\n );\n};\n","import {\n Exporter,\n InlineContentSchema,\n mapTableCell,\n StyleSchema,\n TableContent,\n} from \"@blocknote/core\";\nimport { StyleSheet, View } from \"@react-pdf/renderer\";\nconst PIXELS_PER_POINT = 0.75;\n\n// ( impossible?) to make tables with flex that don't have a fixed / 100% width?\n// we'd need to measure the width of every column manually\nconst styles = StyleSheet.create({\n tableContainer: {\n // width: \"100%\",\n },\n row: {\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n // width: \"100%\",\n // justifyContent: \"space-between\",\n display: \"flex\",\n },\n cell: {\n paddingHorizontal: 5 * PIXELS_PER_POINT,\n paddingTop: 3 * PIXELS_PER_POINT,\n // paddingBottom: 1 * PIXELS_PER_POINT, should be 3px but looks odd, better with no padding Bottom\n borderLeft: \"1px solid #ddd\",\n borderTop: \"1px solid #ddd\",\n wordWrap: \"break-word\",\n whiteSpace: \"pre-wrap\",\n },\n headerCell: {\n fontWeight: \"bold\",\n },\n bottomCell: {\n borderBottom: \"1px solid #ddd\",\n },\n rightCell: {\n borderRight: \"1px solid #ddd\",\n },\n});\n\nexport const Table = (props: {\n data: TableContent<InlineContentSchema>;\n transformer: Exporter<\n any,\n InlineContentSchema,\n StyleSchema,\n any,\n any,\n any,\n any\n >;\n}) => {\n // If headerRows is 1, then the first row is a header row\n const headerRows = new Array(props.data.headerRows ?? 0).fill(true);\n // If headerCols is 1, then the first column is a header column\n const headerCols = new Array(props.data.headerCols ?? 0).fill(true);\n\n return (\n <View style={styles.tableContainer} wrap={false}>\n {props.data.rows.map((row, rowIndex) => (\n <View\n style={[\n styles.row,\n rowIndex === props.data.rows.length - 1 ? styles.bottomCell : {},\n ]}\n key={rowIndex}\n >\n {row.cells.map((c, colIndex) => {\n const cell = mapTableCell(c);\n\n const isHeaderRow = headerRows[rowIndex];\n const isHeaderCol = headerCols[colIndex];\n\n // TODO we need to support for colspan and rowspan, but at the moment are blocked by react-pdf\n return (\n <View\n style={[\n styles.cell,\n isHeaderRow || isHeaderCol ? styles.headerCell : {},\n colIndex === row.cells.length - 1 ? styles.rightCell : {},\n props.data.columnWidths[colIndex]\n ? { width: props.data.columnWidths[colIndex] }\n : { flex: 1 },\n {\n color:\n cell.props.textColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props\n .textColor as keyof typeof props.transformer.options.colors\n ].text,\n backgroundColor:\n cell.props.backgroundColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props\n .backgroundColor as keyof typeof props.transformer.options.colors\n ].background,\n textAlign: cell.props.textAlignment,\n },\n ]}\n key={colIndex}\n >\n {props.transformer.transformInlineContent(cell.content)}\n </View>\n );\n })}\n </View>\n ))}\n </View>\n );\n};\n","import {\n BlockMapping,\n DefaultBlockSchema,\n DefaultProps,\n pageBreakSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport { Image, Link, Path, Svg, Text, View } from \"@react-pdf/renderer\";\nimport {\n BULLET_MARKER,\n CHECK_MARKER_CHECKED,\n CHECK_MARKER_UNCHECKED,\n CHEVRON_MARKER,\n ListItem,\n} from \"../util/listItem.js\";\nimport { Table } from \"../util/table/Table.js\";\n\nconst PIXELS_PER_POINT = 0.75;\nconst FONT_SIZE = 16;\n\nexport const pdfBlockMappingForDefaultSchema: BlockMapping<\n DefaultBlockSchema & typeof pageBreakSchema.blockSchema,\n any,\n any,\n React.ReactElement<Text>,\n React.ReactElement<Text> | React.ReactElement<Link>\n> = {\n paragraph: (block, exporter) => {\n // const style = blocknoteDefaultPropsToReactPDFStyle(block.props);\n return (\n <Text key={\"paragraph\" + block.id}>\n {exporter.transformInlineContent(block.content)}\n </Text>\n );\n },\n toggleListItem: (block, exporter) => {\n return (\n <ListItem listMarker={CHEVRON_MARKER}>\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n bulletListItem: (block, exporter) => {\n // const style = t(block.props);\n return (\n <ListItem listMarker={BULLET_MARKER} key={\"bulletListItem\" + block.id}>\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n numberedListItem: (block, exporter, _nestingLevel, numberedListIndex) => {\n // const style = blocknoteDefaultPropsToReactPDFStyle(block.props);\n // console.log(\"NUMBERED LIST ITEM\", block.props.textAlignment, style);\n return (\n <ListItem\n listMarker={`${numberedListIndex}.`}\n key={\"numberedListItem\" + block.id}\n >\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n // would be nice to have pdf checkboxes:\n // https://github.com/diegomura/react-pdf/issues/2103\n checkListItem: (block, exporter) => {\n return (\n <ListItem\n listMarker={\n block.props.checked ? CHECK_MARKER_CHECKED : CHECK_MARKER_UNCHECKED\n }\n key={\"checkListItem\" + block.id}\n >\n <Text>{exporter.transformInlineContent(block.content)}</Text>\n </ListItem>\n );\n },\n heading: (block, exporter) => {\n const levelFontSizeEM = {\n 1: 2,\n 2: 1.5,\n 3: 1.17,\n 4: 1,\n 5: 0.83,\n 6: 0.67,\n }[block.props.level];\n return (\n <Text\n key={\"heading\" + block.id}\n style={{\n fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n fontWeight: 700,\n }}\n >\n {exporter.transformInlineContent(block.content)}\n </Text>\n );\n },\n quote: (block, exporter) => {\n return (\n <Text\n key={\"quote\" + block.id}\n style={{\n borderLeft: \"#7D797A\",\n color: \"#7D797A\",\n paddingLeft: 9.5 * PIXELS_PER_POINT,\n }}\n >\n {exporter.transformInlineContent(block.content)}\n </Text>\n );\n },\n codeBlock: (block) => {\n const textContent = (block.content as StyledText<any>[])[0]?.text || \"\";\n const lines = textContent.split(\"\\n\").map((line, index) => {\n const indent = line.match(/^\\s*/)?.[0].length || 0;\n\n return (\n <Text\n key={`line_${index}` + block.id}\n style={{\n marginLeft: indent * 9.5 * PIXELS_PER_POINT,\n }}\n >\n {line.trimStart() || <>&nbsp;</>}\n </Text>\n );\n });\n\n return (\n <View\n wrap={false}\n style={{\n padding: 24 * PIXELS_PER_POINT,\n backgroundColor: \"#161616\",\n color: \"#ffffff\",\n lineHeight: 1.25,\n fontSize: FONT_SIZE * PIXELS_PER_POINT,\n fontFamily: \"GeistMono\",\n }}\n key={\"codeBlock\" + block.id}\n >\n {lines}\n </View>\n );\n },\n pageBreak: () => {\n return <View break key={\"pageBreak\"} />;\n },\n audio: (block, exporter) => {\n return (\n <View wrap={false} key={\"audio\" + block.id}>\n {file(\n block.props,\n \"Open audio file\",\n <Svg height={14} width={14} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M2 16.0001H5.88889L11.1834 20.3319C11.2727 20.405 11.3846 20.4449 11.5 20.4449C11.7761 20.4449 12 20.2211 12 19.9449V4.05519C12 3.93977 11.9601 3.8279 11.887 3.73857C11.7121 3.52485 11.3971 3.49335 11.1834 3.66821L5.88889 8.00007H2C1.44772 8.00007 1 8.44778 1 9.00007V15.0001C1 15.5524 1.44772 16.0001 2 16.0001ZM23 12C23 15.292 21.5539 18.2463 19.2622 20.2622L17.8445 18.8444C19.7758 17.1937 21 14.7398 21 12C21 9.26016 19.7758 6.80629 17.8445 5.15557L19.2622 3.73779C21.5539 5.75368 23 8.70795 23 12ZM18 12C18 10.0883 17.106 8.38548 15.7133 7.28673L14.2842 8.71584C15.3213 9.43855 16 10.64 16 12C16 13.36 15.3213 14.5614 14.2842 15.2841L15.7133 16.7132C17.106 15.6145 18 13.9116 18 12Z\"></Path>\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n video: (block, exporter) => {\n return (\n <View wrap={false} key={\"video\" + block.id}>\n {file(\n block.props,\n \"Open video file\",\n <Svg height={14} width={14} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M2 3.9934C2 3.44476 2.45531 3 2.9918 3H21.0082C21.556 3 22 3.44495 22 3.9934V20.0066C22 20.5552 21.5447 21 21.0082 21H2.9918C2.44405 21 2 20.5551 2 20.0066V3.9934ZM8 5V19H16V5H8ZM4 5V7H6V5H4ZM18 5V7H20V5H18ZM4 9V11H6V9H4ZM18 9V11H20V9H18ZM4 13V15H6V13H4ZM18 13V15H20V13H18ZM4 17V19H6V17H4ZM18 17V19H20V17H18Z\" />\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n file: (block, exporter) => {\n return (\n <View wrap={false} key={\"file\" + block.id}>\n {file(\n block.props,\n \"Open file\",\n <Svg height={16} width={16} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <Path d=\"M3 8L9.00319 2H19.9978C20.5513 2 21 2.45531 21 2.9918V21.0082C21 21.556 20.5551 22 20.0066 22H3.9934C3.44476 22 3 21.5501 3 20.9932V8ZM10 4V9H5V20H19V4H10Z\" />\n </Svg>,\n exporter,\n )}\n {caption(block.props, exporter)}\n </View>\n );\n },\n image: async (block, t) => {\n return (\n <View wrap={false} key={\"image\" + block.id}>\n <Image\n src={await t.resolveFile(block.props.url)}\n style={{\n width: block.props.previewWidth\n ? block.props.previewWidth * PIXELS_PER_POINT\n : undefined,\n }}\n />\n {caption(block.props, t)}\n </View>\n );\n },\n table: (block, t) => {\n return (\n <Table data={block.content} transformer={t} key={\"table\" + block.id} />\n );\n },\n};\n\nfunction file(\n props: Partial<DefaultProps & { name: string; url: string }>,\n defaultText: string,\n icon: React.ReactElement<Svg>,\n _exporter: any,\n) {\n const PIXELS_PER_POINT = 0.75;\n return (\n <Link src={props.url} key={\"file\" + props.url}>\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {icon}\n <Text>{props.name || defaultText}</Text>\n </View>\n </Link>\n );\n}\n\nfunction caption(\n props: Partial<DefaultProps & { caption: string; previewWidth: number }>,\n _exporter: any,\n) {\n if (!props.caption) {\n return undefined;\n }\n return (\n <Text\n key={\"caption\" + props.caption}\n style={{\n width: props.previewWidth\n ? props.previewWidth * PIXELS_PER_POINT\n : undefined,\n fontSize: FONT_SIZE * 0.8 * PIXELS_PER_POINT,\n }}\n >\n {props.caption}\n </Text>\n );\n}\n","import {\n DefaultInlineContentSchema,\n InlineContentMapping,\n} from \"@blocknote/core\";\nimport { Link, Text } from \"@react-pdf/renderer\";\n\nexport const pdfInlineContentMappingForDefaultSchema: InlineContentMapping<\n DefaultInlineContentSchema,\n any,\n React.ReactElement<Link> | React.ReactElement<Text>,\n React.ReactElement<Text>\n> = {\n link: (ic, exporter) => {\n return (\n <Link href={ic.href} key={\"link\" + ic.href}>\n {ic.content.map((content) => exporter.transformStyledText(content))}\n </Link>\n );\n },\n text: (ic, exporter) => {\n return exporter.transformStyledText(ic);\n },\n};\n","import { DefaultStyleSchema, StyleMapping } from \"@blocknote/core\";\nimport { TextProps } from \"@react-pdf/renderer\";\n\nexport const pdfStyleMappingForDefaultSchema: StyleMapping<\n DefaultStyleSchema,\n TextProps[\"style\"]\n> = {\n bold: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontWeight: \"bold\",\n };\n },\n italic: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontStyle: \"italic\",\n };\n },\n underline: (val) => {\n if (!val) {\n return {};\n }\n return {\n textDecoration: \"underline\", // TODO: could conflict with strike\n };\n },\n strike: (val) => {\n if (!val) {\n return {};\n }\n return {\n textDecoration: \"line-through\",\n };\n },\n backgroundColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n backgroundColor:\n exporter.options.colors[val as keyof typeof exporter.options.colors]\n .background,\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color:\n exporter.options.colors[val as keyof typeof exporter.options.colors]\n .text,\n };\n },\n code: (val) => {\n if (!val) {\n return {};\n }\n return {\n fontFamily: \"GeistMono\",\n };\n },\n};\n","import { pdfBlockMappingForDefaultSchema } from \"./blocks.js\";\nimport { pdfInlineContentMappingForDefaultSchema } from \"./inlinecontent.js\";\nimport { pdfStyleMappingForDefaultSchema } from \"./styles.js\";\n\nexport const pdfDefaultSchemaMappings: {\n blockMapping: typeof pdfBlockMappingForDefaultSchema;\n inlineContentMapping: typeof pdfInlineContentMappingForDefaultSchema;\n styleMapping: typeof pdfStyleMappingForDefaultSchema;\n} = {\n blockMapping: pdfBlockMappingForDefaultSchema,\n inlineContentMapping: pdfInlineContentMappingForDefaultSchema,\n styleMapping: pdfStyleMappingForDefaultSchema,\n};\n","export async function corsProxyResolveFileUrl(url: string) {\n return (\n \"https://corsproxy.api.blocknotejs.org/corsproxy/?url=\" +\n encodeURIComponent(url)\n );\n}\n","/**\n *\n * Helper functions so that we can import files both on vitest, browser and node\n * TODO: should find a way to test automatically in all environments\n */\n\nexport async function loadFileDataUrl(\n requireUrl: { default: string },\n mimeType: string,\n) {\n if (import.meta.env.NODE_ENV === \"test\") {\n const buffer = await loadFileBuffer(requireUrl);\n const fileBase64 = buffer.toString(\"base64\");\n\n const dataUrl = `data:${mimeType};base64,${fileBase64}`;\n return dataUrl;\n } else {\n // in browser, this is already a data url\n return requireUrl.default as string;\n }\n}\n\nexport async function loadFontDataUrl(requireUrl: { default: string }) {\n return loadFileDataUrl(requireUrl, \"font/ttf\");\n}\n\nexport async function loadFileBuffer(requireUrl: {\n default: string;\n}): Promise<Buffer | ArrayBuffer> {\n if (import.meta.env.NODE_ENV === \"test\") {\n // in vitest, this is the url we need to load with readfilesync\n // eslint-disable-next-line\n const fs = require(\"fs\");\n let url = requireUrl.default;\n\n if (url.startsWith(\"/@fs/\")) {\n url = url.substring(\"/@fs\".length);\n }\n const buffer = fs.readFileSync(url);\n return buffer;\n } else {\n // in browser, this is already a data url\n const dataUrl = requireUrl.default as string;\n // convert to buffer on browser\n const response = await fetch(dataUrl);\n const arrayBuffer = await response.arrayBuffer();\n return arrayBuffer;\n }\n}\n\n/**\n * usage:\n * \n * await loadFontDataUrl(\n await import(\"../fonts/inter/Inter_18pt-Italic.ttf\")\n );\n */\n","import {\n Block,\n BlockNoteSchema,\n BlockSchema,\n COLORS_DEFAULT,\n DefaultProps,\n Exporter,\n ExporterOptions,\n InlineContentSchema,\n StyleSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport { Fragment } from \"react\";\nimport {\n Document,\n Font,\n Link,\n Page,\n StyleSheet,\n Text,\n TextProps,\n View,\n} from \"@react-pdf/renderer\";\nimport { corsProxyResolveFileUrl } from \"@shared/api/corsProxy.js\";\nimport { loadFontDataUrl } from \"../../../../shared/util/fileUtil.js\";\n\nimport { Style } from \"./types.js\";\n\nconst FONT_SIZE = 16;\nconst PIXELS_PER_POINT = 0.75;\n\ntype Options = ExporterOptions & {\n /**\n *\n * @default uses the remote emoji source hosted on cloudflare (https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/)\n */\n emojiSource: false | ReturnType<typeof Font.getEmojiSource>;\n};\n\n/**\n * Exports a BlockNote document to a .pdf file using the react-pdf library.\n */\nexport class PDFExporter<\n B extends BlockSchema,\n S extends StyleSchema,\n I extends InlineContentSchema,\n> extends Exporter<\n B,\n I,\n S,\n React.ReactElement<Text>,\n React.ReactElement<Link> | React.ReactElement<Text>,\n TextProps[\"style\"],\n React.ReactElement<Text>\n> {\n private fontsRegistered = false;\n\n public styles = StyleSheet.create({\n page: {\n paddingTop: 35,\n paddingBottom: 65,\n paddingHorizontal: 35,\n fontFamily: \"Inter\",\n fontSize: FONT_SIZE * PIXELS_PER_POINT, // pixels\n lineHeight: 1.5,\n },\n block: {},\n blockChildren: {},\n header: {},\n footer: {\n position: \"absolute\",\n },\n });\n\n public readonly options: Options;\n\n public constructor(\n /**\n * The schema of your editor. The mappings are automatically typed checked against this schema.\n */\n protected readonly schema: BlockNoteSchema<B, I, S>,\n /**\n * The mappings that map the BlockNote schema to the react-pdf content.\n *\n * Pass {@link pdfDefaultSchemaMappings} for the default schema.\n */\n mappings: Exporter<\n NoInfer<B>,\n NoInfer<I>,\n NoInfer<S>,\n React.ReactElement<Text>, // RB\n React.ReactElement<Link> | React.ReactElement<Text>, // RI\n TextProps[\"style\"], // RS\n React.ReactElement<Text> // TS\n >[\"mappings\"],\n options?: Partial<Options>,\n ) {\n const defaults = {\n emojiSource: {\n format: \"png\",\n url: \"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/\",\n },\n resolveFileUrl: corsProxyResolveFileUrl,\n colors: COLORS_DEFAULT,\n } satisfies Partial<Options>;\n\n const newOptions = {\n ...defaults,\n ...options,\n };\n super(schema, mappings, newOptions);\n this.options = newOptions;\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toReactPDFDocument` instead.\n */\n public transformStyledText(styledText: StyledText<S>) {\n const stylesArray = this.mapStyles(styledText.styles);\n const styles = Object.assign({}, ...stylesArray);\n return (\n <Text style={styles} key={styledText.text}>\n {styledText.text}\n </Text>\n );\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toReactPDFDocument` instead.\n */\n public async transformBlocks(\n blocks: Block<B, I, S>[], // Or BlockFromConfig<B[keyof B], I, S>?\n nestingLevel = 0,\n ): Promise<React.ReactElement<Text>[]> {\n const ret: React.ReactElement<Text>[] = [];\n let numberedListIndex = 0;\n\n for (const b of blocks) {\n if (b.type === \"numberedListItem\") {\n numberedListIndex++;\n } else {\n numberedListIndex = 0;\n }\n const children = await this.transformBlocks(b.children, nestingLevel + 1);\n const self = await this.mapBlock(\n b as any,\n nestingLevel,\n numberedListIndex,\n ); // TODO: any\n\n if (b.type === \"pageBreak\") {\n ret.push(self);\n continue;\n }\n\n const style = this.blocknoteDefaultPropsToReactPDFStyle(b.props as any);\n ret.push(\n <Fragment key={b.id}>\n <View\n style={{\n paddingVertical: 3 * PIXELS_PER_POINT,\n ...this.styles.block,\n ...style,\n }}\n >\n {self}\n </View>\n {children.length > 0 && (\n <View\n style={{\n marginLeft: FONT_SIZE * 1.5 * PIXELS_PER_POINT,\n ...this.styles.blockChildren,\n }}\n key={b.id + nestingLevel + \"children\"}\n >\n {children}\n </View>\n )}\n </Fragment>,\n );\n }\n\n return ret;\n }\n\n protected async registerFonts() {\n if (this.fontsRegistered) {\n return;\n }\n\n if (this.options.emojiSource) {\n Font.registerEmojiSource(this.options.emojiSource);\n }\n let font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Regular.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n src: font,\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Italic.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n fontStyle: \"italic\",\n src: font,\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Bold.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n src: font,\n fontWeight: \"bold\",\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-BoldItalic.ttf\"),\n );\n Font.register({\n family: \"Inter\",\n fontStyle: \"italic\",\n src: font,\n fontWeight: \"bold\",\n });\n\n font = await loadFontDataUrl(\n await import(\"@shared/assets/fonts/GeistMono-Regular.ttf\"),\n );\n Font.register({\n family: \"GeistMono\",\n src: font,\n });\n\n this.fontsRegistered = true;\n }\n\n /**\n * Convert a document (array of Blocks) to a react-pdf Document.\n */\n public async toReactPDFDocument(\n blocks: Block<B, I, S>[],\n options: {\n /**\n * Add a header to every page.\n * The React component passed must be a React-PDF component\n */\n header?: React.ReactElement;\n /**\n * Add a footer to every page.\n * The React component passed must be a React-PDF component\n */\n footer?: React.ReactElement;\n } = {},\n ) {\n await this.registerFonts();\n\n return (\n <Document>\n <Page dpi={100} size=\"A4\" style={this.styles.page}>\n {options.header && (\n <View fixed style={this.styles.header}>\n {options.header}\n </View>\n )}\n {await this.transformBlocks(blocks)}\n {options.footer && (\n <View\n fixed\n style={[\n {\n left: this.styles.page.paddingHorizontal || 0,\n bottom: (this.styles.page.paddingBottom || 0) / 2,\n right: this.styles.page.paddingHorizontal || 0,\n },\n this.styles.footer,\n ]}\n >\n {options.footer}\n </View>\n )}\n </Page>\n </Document>\n );\n }\n\n protected blocknoteDefaultPropsToReactPDFStyle(\n props: Partial<DefaultProps>,\n ): Style {\n return {\n textAlign: props.textAlignment,\n backgroundColor:\n props.backgroundColor === \"default\" || !props.backgroundColor\n ? undefined\n : this.options.colors[\n props.backgroundColor as keyof typeof this.options.colors\n ].background,\n color:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : this.options.colors[\n props.textColor as keyof typeof this.options.colors\n ].text,\n alignItems:\n props.textAlignment === \"right\"\n ? \"flex-end\"\n : props.textAlignment === \"center\"\n ? \"center\"\n : undefined,\n };\n }\n}\n"],"names":["PIXELS_PER_POINT","styles","StyleSheet","BULLET_MARKER","CHEVRON_MARKER","jsx","Svg","Path","CHECK_MARKER_UNCHECKED","CHECK_MARKER_CHECKED","ListItem","listMarker","children","style","jsxs","View","Text","Table","props","headerRows","headerCols","row","rowIndex","colIndex","cell","mapTableCell","isHeaderRow","isHeaderCol","FONT_SIZE","pdfBlockMappingForDefaultSchema","block","exporter","_nestingLevel","numberedListIndex","levelFontSizeEM","lines","_a","line","index","indent","Fragment","file","caption","t","Image","defaultText","icon","_exporter","Link","pdfInlineContentMappingForDefaultSchema","ic","content","pdfStyleMappingForDefaultSchema","val","pdfDefaultSchemaMappings","corsProxyResolveFileUrl","url","loadFileDataUrl","requireUrl","mimeType","loadFontDataUrl","PDFExporter","Exporter","schema","mappings","options","newOptions","COLORS_DEFAULT","__publicField","styledText","stylesArray","blocks","nestingLevel","ret","b","self","Font","font","Document","Page"],"mappings":"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"}
@@ -1 +1 @@
1
- {"builtAt":1750242539621,"assets":[{"name":"blocknote-xl-pdf-exporter.cjs","size":9696},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs","size":457096},{"name":"Inter_18pt-Italic-B-14jOMa.cjs","size":462163},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs","size":459057},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs","size":464431},{"name":"GeistMono-Regular--NrcstcO.cjs","size":155187},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"GeistMono-Regular--NrcstcO.cjs.map","size":155239},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs.map","size":464497},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs.map","size":459111},{"name":"Inter_18pt-Italic-B-14jOMa.cjs.map","size":462221},{"name":"blocknote-xl-pdf-exporter.cjs.map","size":36148}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-pdf-exporter.cjs"],"names":["blocknote-xl-pdf-exporter"]},{"id":"b6f14fb","entry":false,"initial":false,"files":["Inter_18pt-Regular-CCMUw8TC.cjs"],"names":["Inter_18pt-Regular"]},{"id":"73c6ce6","entry":false,"initial":false,"files":["Inter_18pt-Italic-B-14jOMa.cjs"],"names":["Inter_18pt-Italic"]},{"id":"7793085","entry":false,"initial":false,"files":["Inter_18pt-Bold-yKiK3cOU.cjs"],"names":["Inter_18pt-Bold"]},{"id":"097c571","entry":false,"initial":false,"files":["Inter_18pt-BoldItalic-TUYlzxLL.cjs"],"names":["Inter_18pt-BoldItalic"]},{"id":"642be88","entry":false,"initial":false,"files":["GeistMono-Regular--NrcstcO.cjs"],"names":["GeistMono-Regular"]}],"modules":[{"name":"./src/pdf/util/listItem.tsx","size":1726,"chunks":["a1ee98a"]},{"name":"./src/pdf/util/table/Table.tsx","size":2365,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/blocks.tsx","size":6791,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/inlinecontent.tsx","size":317,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/styles.tsx","size":973,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/index.ts","size":199,"chunks":["a1ee98a"]},{"name":"../../shared/api/corsProxy.ts","size":139,"chunks":["a1ee98a"]},{"name":"../../shared/util/fileUtil.ts","size":180,"chunks":["a1ee98a"]},{"name":"./src/pdf/pdfExporter.tsx","size":5601,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Regular.ttf","size":456958,"chunks":["b6f14fb"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Italic.ttf","size":462025,"chunks":["73c6ce6"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Bold.ttf","size":458919,"chunks":["7793085"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-BoldItalic.ttf","size":464293,"chunks":["097c571"]},{"name":"../../shared/assets/fonts/GeistMono-Regular.ttf","size":155049,"chunks":["642be88"]}]}
1
+ {"builtAt":1750769791214,"assets":[{"name":"blocknote-xl-pdf-exporter.cjs","size":10402},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs","size":457096},{"name":"Inter_18pt-Italic-B-14jOMa.cjs","size":462163},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs","size":459057},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs","size":464431},{"name":"GeistMono-Regular--NrcstcO.cjs","size":155187},{"name":"GeistMono-Regular--NrcstcO.cjs.map","size":155239},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs.map","size":459111},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs.map","size":464497},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"Inter_18pt-Italic-B-14jOMa.cjs.map","size":462221},{"name":"blocknote-xl-pdf-exporter.cjs.map","size":38412}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-pdf-exporter.cjs"],"names":["blocknote-xl-pdf-exporter"]},{"id":"b6f14fb","entry":false,"initial":false,"files":["Inter_18pt-Regular-CCMUw8TC.cjs"],"names":["Inter_18pt-Regular"]},{"id":"73c6ce6","entry":false,"initial":false,"files":["Inter_18pt-Italic-B-14jOMa.cjs"],"names":["Inter_18pt-Italic"]},{"id":"7793085","entry":false,"initial":false,"files":["Inter_18pt-Bold-yKiK3cOU.cjs"],"names":["Inter_18pt-Bold"]},{"id":"097c571","entry":false,"initial":false,"files":["Inter_18pt-BoldItalic-TUYlzxLL.cjs"],"names":["Inter_18pt-BoldItalic"]},{"id":"642be88","entry":false,"initial":false,"files":["GeistMono-Regular--NrcstcO.cjs"],"names":["GeistMono-Regular"]}],"modules":[{"name":"./src/pdf/util/listItem.tsx","size":2146,"chunks":["a1ee98a"]},{"name":"./src/pdf/util/table/Table.tsx","size":2365,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/blocks.tsx","size":7515,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/inlinecontent.tsx","size":335,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/styles.tsx","size":973,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/index.ts","size":199,"chunks":["a1ee98a"]},{"name":"../../shared/api/corsProxy.ts","size":139,"chunks":["a1ee98a"]},{"name":"../../shared/util/fileUtil.ts","size":180,"chunks":["a1ee98a"]},{"name":"./src/pdf/pdfExporter.tsx","size":5665,"chunks":["a1ee98a"]},{"name":"./src/index.ts","size":0,"chunks":["a1ee98a"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Regular.ttf","size":456958,"chunks":["b6f14fb"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Italic.ttf","size":462025,"chunks":["73c6ce6"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-Bold.ttf","size":458919,"chunks":["7793085"]},{"name":"../../shared/assets/fonts/inter/Inter_18pt-BoldItalic.ttf","size":464293,"chunks":["097c571"]},{"name":"../../shared/assets/fonts/GeistMono-Regular.ttf","size":155049,"chunks":["642be88"]}]}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "directory": "packages/xl-pdf-exporter"
10
10
  },
11
11
  "license": "AGPL-3.0 OR PROPRIETARY",
12
- "version": "0.31.3",
12
+ "version": "0.32.0",
13
13
  "files": [
14
14
  "dist",
15
15
  "types",
@@ -48,8 +48,8 @@
48
48
  }
49
49
  },
50
50
  "dependencies": {
51
- "@blocknote/core": "0.31.3",
52
- "@blocknote/react": "0.31.3",
51
+ "@blocknote/core": "0.32.0",
52
+ "@blocknote/react": "0.32.0",
53
53
  "@react-pdf/renderer": "^4.3.0",
54
54
  "buffer": "^6.0.3",
55
55
  "docx": "^9.0.2"
@@ -11,7 +11,7 @@
11
11
  paddingTop: 35
12
12
  }}
13
13
  >
14
- <React.Fragment key=".1:0">
14
+ <React.Fragment key=".1:$">
15
15
  <VIEW
16
16
  style={{
17
17
  alignItems: undefined,
@@ -44,7 +44,7 @@
44
44
  marginLeft: 18
45
45
  }}
46
46
  >
47
- <React.Fragment key=".0">
47
+ <React.Fragment key=".$">
48
48
  <VIEW
49
49
  style={{
50
50
  alignItems: undefined,
@@ -65,7 +65,7 @@
65
65
  marginLeft: 18
66
66
  }}
67
67
  >
68
- <React.Fragment key=".0">
68
+ <React.Fragment key=".$">
69
69
  <VIEW
70
70
  style={{
71
71
  alignItems: undefined,
@@ -86,7 +86,7 @@
86
86
  </React.Fragment>
87
87
  </VIEW>
88
88
  </React.Fragment>
89
- <React.Fragment key=".1:1">
89
+ <React.Fragment key=".1:$">
90
90
  <VIEW
91
91
  style={{
92
92
  alignItems: undefined,
@@ -107,7 +107,7 @@
107
107
  </TEXT>
108
108
  </VIEW>
109
109
  </React.Fragment>
110
- <React.Fragment key=".1:2">
110
+ <React.Fragment key=".1:$">
111
111
  <VIEW
112
112
  style={{
113
113
  alignItems: undefined,
@@ -124,7 +124,7 @@
124
124
  </TEXT>
125
125
  </VIEW>
126
126
  </React.Fragment>
127
- <React.Fragment key=".1:3">
127
+ <React.Fragment key=".1:$">
128
128
  <VIEW
129
129
  style={{
130
130
  alignItems: undefined,
@@ -146,7 +146,7 @@
146
146
  </TEXT>
147
147
  </VIEW>
148
148
  </React.Fragment>
149
- <React.Fragment key=".1:4">
149
+ <React.Fragment key=".1:$">
150
150
  <VIEW
151
151
  style={{
152
152
  alignItems: 'flex-end',
@@ -168,7 +168,7 @@
168
168
  </TEXT>
169
169
  </VIEW>
170
170
  </React.Fragment>
171
- <React.Fragment key=".1:5">
171
+ <React.Fragment key=".1:$">
172
172
  <VIEW
173
173
  style={{
174
174
  alignItems: undefined,
@@ -186,7 +186,7 @@
186
186
  </VIEW>
187
187
  </React.Fragment>
188
188
  <VIEW break />
189
- <React.Fragment key=".1:7">
189
+ <React.Fragment key=".1:$">
190
190
  <VIEW
191
191
  style={{
192
192
  alignItems: undefined,
@@ -209,7 +209,7 @@
209
209
  marginLeft: 18
210
210
  }}
211
211
  >
212
- <React.Fragment key=".0">
212
+ <React.Fragment key=".$">
213
213
  <VIEW
214
214
  style={{
215
215
  alignItems: undefined,
@@ -228,7 +228,7 @@
228
228
  </ListItem>
229
229
  </VIEW>
230
230
  </React.Fragment>
231
- <React.Fragment key=".1">
231
+ <React.Fragment key=".$">
232
232
  <VIEW
233
233
  style={{
234
234
  alignItems: 'flex-end',
@@ -247,7 +247,7 @@
247
247
  </ListItem>
248
248
  </VIEW>
249
249
  </React.Fragment>
250
- <React.Fragment key=".2">
250
+ <React.Fragment key=".$">
251
251
  <VIEW
252
252
  style={{
253
253
  alignItems: undefined,
@@ -266,7 +266,7 @@
266
266
  </ListItem>
267
267
  </VIEW>
268
268
  </React.Fragment>
269
- <React.Fragment key=".3">
269
+ <React.Fragment key=".$">
270
270
  <VIEW
271
271
  style={{
272
272
  alignItems: undefined,
@@ -289,7 +289,7 @@
289
289
  marginLeft: 18
290
290
  }}
291
291
  >
292
- <React.Fragment key=".0">
292
+ <React.Fragment key=".$">
293
293
  <VIEW
294
294
  style={{
295
295
  alignItems: undefined,
@@ -308,7 +308,7 @@
308
308
  </ListItem>
309
309
  </VIEW>
310
310
  </React.Fragment>
311
- <React.Fragment key=".1">
311
+ <React.Fragment key=".$">
312
312
  <VIEW
313
313
  style={{
314
314
  alignItems: undefined,
@@ -327,7 +327,7 @@
327
327
  </ListItem>
328
328
  </VIEW>
329
329
  </React.Fragment>
330
- <React.Fragment key=".2">
330
+ <React.Fragment key=".$">
331
331
  <VIEW
332
332
  style={{
333
333
  alignItems: 'flex-end',
@@ -346,7 +346,7 @@
346
346
  </ListItem>
347
347
  </VIEW>
348
348
  </React.Fragment>
349
- <React.Fragment key=".3">
349
+ <React.Fragment key=".$">
350
350
  <VIEW
351
351
  style={{
352
352
  alignItems: 'center',
@@ -369,7 +369,7 @@
369
369
  </React.Fragment>
370
370
  </VIEW>
371
371
  </React.Fragment>
372
- <React.Fragment key=".1:8">
372
+ <React.Fragment key=".1:$">
373
373
  <VIEW
374
374
  style={{
375
375
  alignItems: undefined,
@@ -388,7 +388,7 @@
388
388
  </ListItem>
389
389
  </VIEW>
390
390
  </React.Fragment>
391
- <React.Fragment key=".1:9">
391
+ <React.Fragment key=".1:$">
392
392
  <VIEW
393
393
  style={{
394
394
  alignItems: undefined,
@@ -407,7 +407,7 @@
407
407
  </ListItem>
408
408
  </VIEW>
409
409
  </React.Fragment>
410
- <React.Fragment key=".1:a">
410
+ <React.Fragment key=".1:$">
411
411
  <VIEW
412
412
  style={{
413
413
  alignItems: undefined,
@@ -599,7 +599,7 @@
599
599
  />
600
600
  </VIEW>
601
601
  </React.Fragment>
602
- <React.Fragment key=".1:b">
602
+ <React.Fragment key=".1:$">
603
603
  <VIEW
604
604
  style={{
605
605
  alignItems: undefined,
@@ -634,7 +634,7 @@
634
634
  </VIEW>
635
635
  </VIEW>
636
636
  </React.Fragment>
637
- <React.Fragment key=".1:c">
637
+ <React.Fragment key=".1:$">
638
638
  <VIEW
639
639
  style={{
640
640
  alignItems: undefined,
@@ -662,7 +662,7 @@
662
662
  </VIEW>
663
663
  </VIEW>
664
664
  </React.Fragment>
665
- <React.Fragment key=".1:d">
665
+ <React.Fragment key=".1:$">
666
666
  <VIEW
667
667
  style={{
668
668
  alignItems: 'flex-end',
@@ -682,7 +682,7 @@
682
682
  </VIEW>
683
683
  </VIEW>
684
684
  </React.Fragment>
685
- <React.Fragment key=".1:e">
685
+ <React.Fragment key=".1:$">
686
686
  <VIEW
687
687
  style={{
688
688
  alignItems: undefined,
@@ -725,7 +725,7 @@
725
725
  </VIEW>
726
726
  </VIEW>
727
727
  </React.Fragment>
728
- <React.Fragment key=".1:f">
728
+ <React.Fragment key=".1:$">
729
729
  <VIEW
730
730
  style={{
731
731
  alignItems: undefined,
@@ -768,7 +768,7 @@
768
768
  </VIEW>
769
769
  </VIEW>
770
770
  </React.Fragment>
771
- <React.Fragment key=".1:g">
771
+ <React.Fragment key=".1:$">
772
772
  <VIEW
773
773
  style={{
774
774
  alignItems: undefined,
@@ -781,7 +781,7 @@
781
781
  <TEXT />
782
782
  </VIEW>
783
783
  </React.Fragment>
784
- <React.Fragment key=".1:h">
784
+ <React.Fragment key=".1:$">
785
785
  <VIEW
786
786
  style={{
787
787
  alignItems: undefined,
@@ -824,7 +824,7 @@
824
824
  </VIEW>
825
825
  </VIEW>
826
826
  </React.Fragment>
827
- <React.Fragment key=".1:i">
827
+ <React.Fragment key=".1:$">
828
828
  <VIEW
829
829
  style={{
830
830
  alignItems: undefined,
@@ -845,7 +845,7 @@
845
845
  </TEXT>
846
846
  </VIEW>
847
847
  </React.Fragment>
848
- <React.Fragment key=".1:j">
848
+ <React.Fragment key=".1:$">
849
849
  <VIEW
850
850
  style={{
851
851
  alignItems: undefined,
@@ -877,7 +877,7 @@
877
877
  </TEXT>
878
878
  </VIEW>
879
879
  </React.Fragment>
880
- <React.Fragment key=".1:k">
880
+ <React.Fragment key=".1:$">
881
881
  <VIEW
882
882
  style={{
883
883
  alignItems: undefined,
@@ -1071,7 +1071,7 @@
1071
1071
  />
1072
1072
  </VIEW>
1073
1073
  </React.Fragment>
1074
- <React.Fragment key=".1:l">
1074
+ <React.Fragment key=".1:$">
1075
1075
  <VIEW
1076
1076
  style={{
1077
1077
  alignItems: undefined,