@blocknote/xl-pdf-exporter 0.42.0 → 0.42.1

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,3 +1,3 @@
1
- "use strict";var H=Object.defineProperty;var T=(e,i,n)=>i in e?H(e,i,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[i]=n;var x=(e,i,n)=>T(e,typeof i!="symbol"?i+"":i,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react/jsx-runtime"),t=require("@react-pdf/renderer"),C=require("@blocknote/core"),L=require("react"),b=.75,S=t.StyleSheet.create({listItem:{display:"flex",flexDirection:"row",gap:8*b,paddingRight:10},bullet:{}}),I="•",P=r.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:r.jsx(t.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"})}),M=r.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:r.jsx(t.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"})}),E=r.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:r.jsx(t.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"})}),p=({listMarker:e,children:i,style:n})=>r.jsxs(t.View,{style:[S.listItem,n||{}],children:[r.jsx(t.View,{style:S.bullet,children:typeof e=="string"?r.jsx(t.Text,{children:e}):e}),i]}),V=.75,h=t.StyleSheet.create({tableContainer:{},row:{flexDirection:"row",flexWrap:"wrap",display:"flex"},cell:{paddingHorizontal:5*V,paddingTop:3*V,borderLeft:"1px solid #ddd",borderTop:"1px solid #ddd",wordWrap:"break-word",whiteSpace:"pre-wrap"},headerCell:{fontWeight:"bold"},bottomCell:{borderBottom:"1px solid #ddd"},rightCell:{borderRight:"1px solid #ddd"}}),_=e=>{const i=new Array(e.data.headerRows??0).fill(!0),n=new Array(e.data.headerCols??0).fill(!0);return r.jsx(t.View,{style:h.tableContainer,wrap:!1,children:e.data.rows.map((o,s)=>r.jsx(t.View,{style:[h.row,s===e.data.rows.length-1?h.bottomCell:{}],children:o.cells.map((c,l)=>{const a=C.mapTableCell(c),f=i[s],m=n[l];return r.jsx(t.View,{style:[h.cell,f||m?h.headerCell:{},l===o.cells.length-1?h.rightCell:{},e.data.columnWidths[l]?{width:e.data.columnWidths[l]}:{flex:1},{color:a.props.textColor==="default"?void 0:e.transformer.options.colors[a.props.textColor].text,backgroundColor:a.props.backgroundColor==="default"?void 0:e.transformer.options.colors[a.props.backgroundColor].background,textAlign:a.props.textAlignment}],children:e.transformer.transformInlineContent(a.content)},l)})},s))})},d=.75,j=16,F={paragraph:(e,i)=>r.jsx(t.Text,{children:i.transformInlineContent(e.content)},"paragraph"+e.id),toggleListItem:(e,i)=>r.jsx(p,{listMarker:P,children:r.jsx(t.Text,{children:i.transformInlineContent(e.content)})}),bulletListItem:(e,i)=>r.jsx(p,{listMarker:I,children:r.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"bulletListItem"+e.id),numberedListItem:(e,i,n,o)=>r.jsx(p,{listMarker:`${o}.`,children:r.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"numberedListItem"+e.id),checkListItem:(e,i)=>r.jsx(p,{listMarker:e.props.checked?E:M,children:r.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"checkListItem"+e.id),heading:(e,i)=>{const n={1:2,2:1.5,3:1.17,4:1,5:.83,6:.67}[e.props.level];return r.jsx(t.Text,{style:{fontSize:n*j*d,lineHeight:1.25,fontWeight:700},children:i.transformInlineContent(e.content)},"heading"+e.id)},quote:(e,i)=>r.jsx(t.Text,{style:{borderLeft:"#7D797A",color:"#7D797A",paddingLeft:9.5*d},children:i.transformInlineContent(e.content)},"quote"+e.id),codeBlock:e=>{var o;const n=(((o=e.content[0])==null?void 0:o.text)||"").split(`
2
- `).map((s,c)=>{var a;const l=((a=s.match(/^\s*/))==null?void 0:a[0].length)||0;return r.jsx(t.Text,{style:{marginLeft:l*9.5*d},children:s.trimStart()||r.jsx(r.Fragment,{children:" "})},`line_${c}`+e.id)});return r.jsx(t.View,{wrap:!1,style:{padding:24*d,backgroundColor:"#161616",color:"#ffffff",lineHeight:1.25,fontSize:j*d,fontFamily:"GeistMono"},children:n},"codeBlock"+e.id)},pageBreak:()=>r.jsx(t.View,{break:!0},"pageBreak"),divider:()=>r.jsx(t.View,{style:{borderTop:"1px solid #ccc",marginTop:11.5*d,marginBottom:11.5*d}}),column:(e,i,n,o,s)=>r.jsx(t.View,{style:{flex:e.props.width},children:s}),columnList:(e,i,n,o,s)=>r.jsx(t.View,{style:{display:"flex",gap:8*d,flexDirection:"row"},children:s}),audio:(e,i)=>r.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open audio file",r.jsx(t.Svg,{height:14,width:14,viewBox:"0 0 24 24",fill:"currentColor",children:r.jsx(t.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"})})),g(e.props)]},"audio"+e.id),video:(e,i)=>r.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open video file",r.jsx(t.Svg,{height:14,width:14,viewBox:"0 0 24 24",fill:"currentColor",children:r.jsx(t.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"})})),g(e.props)]},"video"+e.id),file:(e,i)=>r.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open file",r.jsx(t.Svg,{height:16,width:16,viewBox:"0 0 24 24",fill:"currentColor",children:r.jsx(t.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"})})),g(e.props)]},"file"+e.id),image:async(e,i)=>r.jsxs(t.View,{wrap:!1,children:[r.jsx(t.Image,{src:await i.resolveFile(e.props.url),style:{width:e.props.previewWidth?e.props.previewWidth*d:void 0}}),g(e.props)]},"image"+e.id),table:(e,i)=>r.jsx(_,{data:e.content,transformer:i},"table"+e.id)};function y(e,i,n,o){return r.jsx(t.Link,{src:e.url,children:r.jsxs(t.View,{style:{display:"flex",gap:8*.75,flexDirection:"row"},children:[n,r.jsx(t.Text,{children:e.name||i})]})},"file"+e.url)}function g(e,i){if(e.caption)return r.jsx(t.Text,{style:{width:e.previewWidth?e.previewWidth*d:void 0,fontSize:j*.8*d},children:e.caption},"caption"+e.caption)}const R={link:(e,i)=>r.jsx(t.Link,{href:e.href,children:e.content.map(n=>i.transformStyledText(n))},"link"+e.href),text:(e,i)=>i.transformStyledText(e)},D={bold:e=>e?{fontWeight:"bold"}:{},italic:e=>e?{fontStyle:"italic"}:{},underline:e=>e?{textDecoration:"underline"}:{},strike:e=>e?{textDecoration:"line-through"}:{},backgroundColor:(e,i)=>e?{backgroundColor:i.options.colors[e].background}:{},textColor:(e,i)=>e?{color:i.options.colors[e].text}:{},code:e=>e?{fontFamily:"GeistMono"}:{}},q={blockMapping:F,inlineContentMapping:R,styleMapping:D};async function Z(e){return"https://corsproxy.api.blocknotejs.org/corsproxy/?url="+encodeURIComponent(e)}async function k(e,i){return e.default}async function u(e){return k(e)}const v=16,w=.75;class B extends C.Exporter{constructor(n,o,s){const l={...{emojiSource:{format:"png",url:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/"},resolveFileUrl:Z,colors:C.COLORS_DEFAULT},...s};super(n,o,l);x(this,"fontsRegistered",!1);x(this,"styles",t.StyleSheet.create({page:{paddingTop:35,paddingBottom:65,paddingHorizontal:35,fontFamily:"Inter",fontSize:v*w,lineHeight:1.5},block:{},blockChildren:{},header:{},footer:{position:"absolute"}}));x(this,"options");this.schema=n,this.options=l}transformStyledText(n){const o=this.mapStyles(n.styles),s=Object.assign({},...o);return r.jsx(t.Text,{style:s,children:n.text},n.text)}async transformBlocks(n,o=0){const s=[];let c=0;for(const l of n){l.type==="numberedListItem"?c++:c=0;const a=await this.transformBlocks(l.children,o+1),f=await this.mapBlock(l,o,c,a);if(["pageBreak","columnList","column"].includes(l.type)){s.push(f);continue}const m=this.blocknoteDefaultPropsToReactPDFStyle(l.props);s.push(r.jsxs(L.Fragment,{children:[r.jsx(t.View,{style:{paddingVertical:3*w,...this.styles.block,...m},children:f}),a.length>0&&r.jsx(t.View,{style:{marginLeft:v*1.5*w,...this.styles.blockChildren},children:a},l.id+o+"children")]},l.id))}return s}async registerFonts(){if(this.fontsRegistered)return;this.options.emojiSource&&t.Font.registerEmojiSource(this.options.emojiSource);let n=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Regular-CCMUw8TC.cjs")));t.Font.register({family:"Inter",src:n}),n=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Italic-B-14jOMa.cjs"))),t.Font.register({family:"Inter",fontStyle:"italic",src:n}),n=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Bold-yKiK3cOU.cjs"))),t.Font.register({family:"Inter",src:n,fontWeight:"bold"}),n=await u(await Promise.resolve().then(()=>require("./Inter_18pt-BoldItalic-TUYlzxLL.cjs"))),t.Font.register({family:"Inter",fontStyle:"italic",src:n,fontWeight:"bold"}),n=await u(await Promise.resolve().then(()=>require("./GeistMono-Regular--NrcstcO.cjs"))),t.Font.register({family:"GeistMono",src:n}),this.fontsRegistered=!0}async toReactPDFDocument(n,o={}){return await this.registerFonts(),r.jsx(t.Document,{children:r.jsxs(t.Page,{dpi:100,size:"A4",style:this.styles.page,children:[o.header&&r.jsx(t.View,{fixed:!0,style:this.styles.header,children:o.header}),await this.transformBlocks(n),o.footer&&r.jsx(t.View,{fixed:!0,style:[{left:this.styles.page.paddingHorizontal||0,bottom:(this.styles.page.paddingBottom||0)/2,right:this.styles.page.paddingHorizontal||0},this.styles.footer],children:o.footer})]})})}blocknoteDefaultPropsToReactPDFStyle(n){return{textAlign:n.textAlignment,backgroundColor:n.backgroundColor==="default"||!n.backgroundColor?void 0:this.options.colors[n.backgroundColor].background,color:n.textColor==="default"||!n.textColor?void 0:this.options.colors[n.textColor].text,alignItems:n.textAlignment==="right"?"flex-end":n.textAlignment==="center"?"center":void 0}}}exports.PDFExporter=B;exports.pdfDefaultSchemaMappings=q;
1
+ "use strict";var L=Object.defineProperty;var b=(e,i,r)=>i in e?L(e,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[i]=r;var x=(e,i,r)=>b(e,typeof i!="symbol"?i+"":i,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),t=require("@react-pdf/renderer"),C=require("@blocknote/core"),I=require("react"),P=.75,v=t.StyleSheet.create({listItem:{display:"flex",flexDirection:"row",gap:8*P,paddingRight:10},bullet:{}}),M="•",E=n.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:n.jsx(t.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.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:n.jsx(t.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"})}),F=n.jsx(t.Svg,{style:{marginTop:2},height:"12",viewBox:"0 -960 960 960",width:"12",fill:"undefined",children:n.jsx(t.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"})}),p=({listMarker:e,children:i,style:r})=>n.jsxs(t.View,{style:[v.listItem,r||{}],children:[n.jsx(t.View,{style:v.bullet,children:typeof e=="string"?n.jsx(t.Text,{children:e}):e}),i]}),H=.75,h=t.StyleSheet.create({tableContainer:{},row:{flexDirection:"row",flexWrap:"wrap",display:"flex"},cell:{paddingHorizontal:5*H,paddingTop:3*H,borderLeft:"1px solid #ddd",borderTop:"1px solid #ddd",wordWrap:"break-word",whiteSpace:"pre-wrap"},headerCell:{fontWeight:"bold"},bottomCell:{borderBottom:"1px solid #ddd"},rightCell:{borderRight:"1px solid #ddd"}}),R=e=>{const i=new Array(e.data.headerRows??0).fill(!0),r=new Array(e.data.headerCols??0).fill(!0);return n.jsx(t.View,{style:h.tableContainer,wrap:!1,children:e.data.rows.map((o,s)=>n.jsx(t.View,{style:[h.row,s===e.data.rows.length-1?h.bottomCell:{}],children:o.cells.map((c,l)=>{var S,V;const a=C.mapTableCell(c),f=i[s],m=r[l];return n.jsx(t.View,{style:[h.cell,f||m?h.headerCell:{},l===o.cells.length-1?h.rightCell:{},e.data.columnWidths[l]?{width:e.data.columnWidths[l]}:{flex:1},{color:a.props.textColor==="default"||(S=e.transformer.options.colors[a.props.textColor])==null?void 0:S.text,backgroundColor:a.props.backgroundColor==="default"||(V=e.transformer.options.colors[a.props.backgroundColor])==null?void 0:V.background,textAlign:a.props.textAlignment}],children:e.transformer.transformInlineContent(a.content)},l)})},s))})},d=.75,j=16,D={paragraph:(e,i)=>n.jsx(t.Text,{children:i.transformInlineContent(e.content)},"paragraph"+e.id),toggleListItem:(e,i)=>n.jsx(p,{listMarker:E,children:n.jsx(t.Text,{children:i.transformInlineContent(e.content)})}),bulletListItem:(e,i)=>n.jsx(p,{listMarker:M,children:n.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"bulletListItem"+e.id),numberedListItem:(e,i,r,o)=>n.jsx(p,{listMarker:`${o}.`,children:n.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"numberedListItem"+e.id),checkListItem:(e,i)=>n.jsx(p,{listMarker:e.props.checked?F:_,children:n.jsx(t.Text,{children:i.transformInlineContent(e.content)})},"checkListItem"+e.id),heading:(e,i)=>{const r={1:2,2:1.5,3:1.17,4:1,5:.83,6:.67}[e.props.level];return n.jsx(t.Text,{style:{fontSize:r*j*d,lineHeight:1.25,fontWeight:700},children:i.transformInlineContent(e.content)},"heading"+e.id)},quote:(e,i)=>n.jsx(t.Text,{style:{borderLeft:"#7D797A",color:"#7D797A",paddingLeft:9.5*d},children:i.transformInlineContent(e.content)},"quote"+e.id),codeBlock:e=>{var o;const r=(((o=e.content[0])==null?void 0:o.text)||"").split(`
2
+ `).map((s,c)=>{var a;const l=((a=s.match(/^\s*/))==null?void 0:a[0].length)||0;return n.jsx(t.Text,{style:{marginLeft:l*9.5*d},children:s.trimStart()||n.jsx(n.Fragment,{children:" "})},`line_${c}`+e.id)});return n.jsx(t.View,{wrap:!1,style:{padding:24*d,backgroundColor:"#161616",color:"#ffffff",lineHeight:1.25,fontSize:j*d,fontFamily:"GeistMono"},children:r},"codeBlock"+e.id)},pageBreak:()=>n.jsx(t.View,{break:!0},"pageBreak"),divider:()=>n.jsx(t.View,{style:{borderTop:"1px solid #ccc",marginTop:11.5*d,marginBottom:11.5*d}}),column:(e,i,r,o,s)=>n.jsx(t.View,{style:{flex:e.props.width},children:s}),columnList:(e,i,r,o,s)=>n.jsx(t.View,{style:{display:"flex",gap:8*d,flexDirection:"row"},children:s}),audio:(e,i)=>n.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open audio file",n.jsx(t.Svg,{height:14,width:14,viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx(t.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"})})),g(e.props)]},"audio"+e.id),video:(e,i)=>n.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open video file",n.jsx(t.Svg,{height:14,width:14,viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx(t.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"})})),g(e.props)]},"video"+e.id),file:(e,i)=>n.jsxs(t.View,{wrap:!1,children:[y(e.props,"Open file",n.jsx(t.Svg,{height:16,width:16,viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx(t.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"})})),g(e.props)]},"file"+e.id),image:async(e,i)=>n.jsxs(t.View,{wrap:!1,children:[n.jsx(t.Image,{src:await i.resolveFile(e.props.url),style:{width:e.props.previewWidth?e.props.previewWidth*d:void 0}}),g(e.props)]},"image"+e.id),table:(e,i)=>n.jsx(R,{data:e.content,transformer:i},"table"+e.id)};function y(e,i,r,o){return n.jsx(t.Link,{src:e.url,children:n.jsxs(t.View,{style:{display:"flex",gap:8*.75,flexDirection:"row"},children:[r,n.jsx(t.Text,{children:e.name||i})]})},"file"+e.url)}function g(e,i){if(e.caption)return n.jsx(t.Text,{style:{width:e.previewWidth?e.previewWidth*d:void 0,fontSize:j*.8*d},children:e.caption},"caption"+e.caption)}const q={link:(e,i)=>n.jsx(t.Link,{href:e.href,children:e.content.map(r=>i.transformStyledText(r))},"link"+e.href),text:(e,i)=>i.transformStyledText(e)},Z={bold:e=>e?{fontWeight:"bold"}:{},italic:e=>e?{fontStyle:"italic"}:{},underline:e=>e?{textDecoration:"underline"}:{},strike:e=>e?{textDecoration:"line-through"}:{},backgroundColor:(e,i)=>{var r;return e?{backgroundColor:(r=i.options.colors[e])==null?void 0:r.background}:{}},textColor:(e,i)=>{var r;return e?{color:(r=i.options.colors[e])==null?void 0:r.text}:{}},code:e=>e?{fontFamily:"GeistMono"}:{}},k={blockMapping:D,inlineContentMapping:q,styleMapping:Z};async function B(e){return"https://corsproxy.api.blocknotejs.org/corsproxy/?url="+encodeURIComponent(e)}async function A(e,i){return e.default}async function u(e){return A(e)}const T=16,w=.75;class O extends C.Exporter{constructor(r,o,s){const l={...{emojiSource:{format:"png",url:"https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/"},resolveFileUrl:B,colors:C.COLORS_DEFAULT},...s};super(r,o,l);x(this,"fontsRegistered",!1);x(this,"styles",t.StyleSheet.create({page:{paddingTop:35,paddingBottom:65,paddingHorizontal:35,fontFamily:"Inter",fontSize:T*w,lineHeight:1.5},block:{},blockChildren:{},header:{},footer:{position:"absolute"}}));x(this,"options");this.schema=r,this.options=l}transformStyledText(r){const o=this.mapStyles(r.styles),s=Object.assign({},...o);return n.jsx(t.Text,{style:s,children:r.text},r.text)}async transformBlocks(r,o=0){const s=[];let c=0;for(const l of r){l.type==="numberedListItem"?c++:c=0;const a=await this.transformBlocks(l.children,o+1),f=await this.mapBlock(l,o,c,a);if(["pageBreak","columnList","column"].includes(l.type)){s.push(f);continue}const m=this.blocknoteDefaultPropsToReactPDFStyle(l.props);s.push(n.jsxs(I.Fragment,{children:[n.jsx(t.View,{style:{paddingVertical:3*w,...this.styles.block,...m},children:f}),a.length>0&&n.jsx(t.View,{style:{marginLeft:T*1.5*w,...this.styles.blockChildren},children:a},l.id+o+"children")]},l.id))}return s}async registerFonts(){if(this.fontsRegistered)return;this.options.emojiSource&&t.Font.registerEmojiSource(this.options.emojiSource);let r=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Regular-CCMUw8TC.cjs")));t.Font.register({family:"Inter",src:r}),r=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Italic-B-14jOMa.cjs"))),t.Font.register({family:"Inter",fontStyle:"italic",src:r}),r=await u(await Promise.resolve().then(()=>require("./Inter_18pt-Bold-yKiK3cOU.cjs"))),t.Font.register({family:"Inter",src:r,fontWeight:"bold"}),r=await u(await Promise.resolve().then(()=>require("./Inter_18pt-BoldItalic-TUYlzxLL.cjs"))),t.Font.register({family:"Inter",fontStyle:"italic",src:r,fontWeight:"bold"}),r=await u(await Promise.resolve().then(()=>require("./GeistMono-Regular--NrcstcO.cjs"))),t.Font.register({family:"GeistMono",src:r}),this.fontsRegistered=!0}async toReactPDFDocument(r,o={}){return await this.registerFonts(),n.jsx(t.Document,{children:n.jsxs(t.Page,{dpi:100,size:"A4",style:this.styles.page,children:[o.header&&n.jsx(t.View,{fixed:!0,style:this.styles.header,children:o.header}),await this.transformBlocks(r),o.footer&&n.jsx(t.View,{fixed:!0,style:[{left:this.styles.page.paddingHorizontal||0,bottom:(this.styles.page.paddingBottom||0)/2,right:this.styles.page.paddingHorizontal||0},this.styles.footer],children:o.footer})]})})}blocknoteDefaultPropsToReactPDFStyle(r){var o,s;return{textAlign:r.textAlignment,backgroundColor:r.backgroundColor==="default"||!r.backgroundColor||(o=this.options.colors[r.backgroundColor])==null?void 0:o.background,color:r.textColor==="default"||!r.textColor||(s=this.options.colors[r.textColor])==null?void 0:s.text,alignItems:r.textAlignment==="right"?"flex-end":r.textAlignment==="center"?"center":void 0}}}exports.PDFExporter=O;exports.pdfDefaultSchemaMappings=k;
3
3
  //# sourceMappingURL=blocknote-xl-pdf-exporter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocknote-xl-pdf-exporter.cjs","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 createPageBreakBlockConfig,\n StyledText,\n} from \"@blocknote/core\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\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 & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.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 as 1 | 2 | 3 | 4 | 5 | 6];\n return (\n <Text\n key={\"heading\" + block.id}\n style={{\n fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n lineHeight: 1.25,\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 divider: () => {\n return (\n <View\n style={{\n borderTop: \"1px solid #ccc\",\n marginTop: 11.5 * PIXELS_PER_POINT,\n marginBottom: 11.5 * PIXELS_PER_POINT,\n }}\n />\n );\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return <View style={{ flex: block.props.width }}>{children}</View>;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return (\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {children}\n </View>\n );\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 // On Windows, vite/vitest may yield paths like \"/C:/...\" after removing /@fs\n // Node on Windows treats paths starting with \"/\" as relative to current drive,\n // which would produce \"C:\\C:\\...\". Strip leading slash when followed by a drive letter.\n if (/^\\/[A-Za-z]:/.test(url)) {\n url = url.slice(1);\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 { Fragment } from \"react\";\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 children,\n ); // TODO: any\n\n if ([\"pageBreak\", \"columnList\", \"column\"].includes(b.type)) {\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","_exporter","_numberedListIndex","_block","file","caption","t","Image","defaultText","icon","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.cjs","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[cell.props.textColor]\n ?.text,\n backgroundColor:\n cell.props.backgroundColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props.backgroundColor\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 createPageBreakBlockConfig,\n StyledText,\n} from \"@blocknote/core\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\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 & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.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 as 1 | 2 | 3 | 4 | 5 | 6];\n return (\n <Text\n key={\"heading\" + block.id}\n style={{\n fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n lineHeight: 1.25,\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 divider: () => {\n return (\n <View\n style={{\n borderTop: \"1px solid #ccc\",\n marginTop: 11.5 * PIXELS_PER_POINT,\n marginBottom: 11.5 * PIXELS_PER_POINT,\n }}\n />\n );\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return <View style={{ flex: block.props.width }}>{children}</View>;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return (\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {children}\n </View>\n );\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: exporter.options.colors[val]?.background,\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color: exporter.options.colors[val]?.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 // On Windows, vite/vitest may yield paths like \"/C:/...\" after removing /@fs\n // Node on Windows treats paths starting with \"/\" as relative to current drive,\n // which would produce \"C:\\C:\\...\". Strip leading slash when followed by a drive letter.\n if (/^\\/[A-Za-z]:/.test(url)) {\n url = url.slice(1);\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 { Fragment } from \"react\";\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 children,\n ); // TODO: any\n\n if ([\"pageBreak\", \"columnList\", \"column\"].includes(b.type)) {\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[props.backgroundColor]?.background,\n color:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : this.options.colors[props.textColor]?.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","_a","_b","FONT_SIZE","pdfBlockMappingForDefaultSchema","block","exporter","_nestingLevel","numberedListIndex","levelFontSizeEM","lines","line","index","indent","Fragment","_exporter","_numberedListIndex","_block","file","caption","t","Image","defaultText","icon","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,22 +1,22 @@
1
- var V = Object.defineProperty;
2
- var R = (e, r, t) => r in e ? V(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
- var x = (e, r, t) => R(e, typeof r != "symbol" ? r + "" : r, t);
4
- import { jsx as n, jsxs as f, Fragment as P } from "react/jsx-runtime";
5
- import { View as l, StyleSheet as v, Text as d, Svg as m, Path as g, Image as D, Link as E, Font as u, Document as F, Page as Z } from "@react-pdf/renderer";
6
- import { mapTableCell as k, Exporter as B, COLORS_DEFAULT as A } from "@blocknote/core";
7
- import { Fragment as q } from "react";
8
- const O = 0.75, M = v.create({
1
+ var P = Object.defineProperty;
2
+ var D = (e, r, t) => r in e ? P(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
3
+ var x = (e, r, t) => D(e, typeof r != "symbol" ? r + "" : r, t);
4
+ import { jsx as n, jsxs as f, Fragment as F } from "react/jsx-runtime";
5
+ import { View as l, StyleSheet as v, Text as d, Svg as m, Path as g, Image as Z, Link as R, Font as u, Document as k, Page as B } from "@react-pdf/renderer";
6
+ import { mapTableCell as A, Exporter as q, COLORS_DEFAULT as O } from "@blocknote/core";
7
+ import { Fragment as W } from "react";
8
+ const j = 0.75, _ = v.create({
9
9
  listItem: {
10
10
  display: "flex",
11
11
  flexDirection: "row",
12
- gap: 8 * O,
12
+ gap: 8 * j,
13
13
  paddingRight: 10
14
14
  // otherwise text overflows, seems like a react-pdf / yoga bug
15
15
  },
16
16
  bullet: {
17
17
  // fontFamily: "", // we could add symbol font if we don't want to use inter (default font) here
18
18
  }
19
- }), W = "•", j = /* @__PURE__ */ n(
19
+ }), z = "•", N = /* @__PURE__ */ n(
20
20
  m,
21
21
  {
22
22
  style: { marginTop: 2 },
@@ -26,7 +26,7 @@ const O = 0.75, M = v.create({
26
26
  fill: "undefined",
27
27
  children: /* @__PURE__ */ n(g, { 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" })
28
28
  }
29
- ), z = /* @__PURE__ */ n(
29
+ ), K = /* @__PURE__ */ n(
30
30
  m,
31
31
  {
32
32
  style: { marginTop: 2 },
@@ -36,7 +36,7 @@ const O = 0.75, M = v.create({
36
36
  fill: "undefined",
37
37
  children: /* @__PURE__ */ n(g, { 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" })
38
38
  }
39
- ), N = /* @__PURE__ */ n(
39
+ ), U = /* @__PURE__ */ n(
40
40
  m,
41
41
  {
42
42
  style: { marginTop: 2 },
@@ -50,10 +50,10 @@ const O = 0.75, M = v.create({
50
50
  listMarker: e,
51
51
  children: r,
52
52
  style: t
53
- }) => /* @__PURE__ */ f(l, { style: [M.listItem, t || {}], children: [
54
- /* @__PURE__ */ n(l, { style: M.bullet, children: typeof e == "string" ? /* @__PURE__ */ n(d, { children: e }) : e }),
53
+ }) => /* @__PURE__ */ f(l, { style: [_.listItem, t || {}], children: [
54
+ /* @__PURE__ */ n(l, { style: _.bullet, children: typeof e == "string" ? /* @__PURE__ */ n(d, { children: e }) : e }),
55
55
  r
56
- ] }), T = 0.75, p = v.create({
56
+ ] }), E = 0.75, p = v.create({
57
57
  tableContainer: {
58
58
  // width: "100%",
59
59
  },
@@ -65,8 +65,8 @@ const O = 0.75, M = v.create({
65
65
  display: "flex"
66
66
  },
67
67
  cell: {
68
- paddingHorizontal: 5 * T,
69
- paddingTop: 3 * T,
68
+ paddingHorizontal: 5 * E,
69
+ paddingTop: 3 * E,
70
70
  // paddingBottom: 1 * PIXELS_PER_POINT, should be 3px but looks odd, better with no padding Bottom
71
71
  borderLeft: "1px solid #ddd",
72
72
  borderTop: "1px solid #ddd",
@@ -82,7 +82,7 @@ const O = 0.75, M = v.create({
82
82
  rightCell: {
83
83
  borderRight: "1px solid #ddd"
84
84
  }
85
- }), K = (e) => {
85
+ }), $ = (e) => {
86
86
  const r = new Array(e.data.headerRows ?? 0).fill(!0), t = new Array(e.data.headerCols ?? 0).fill(!0);
87
87
  return /* @__PURE__ */ n(l, { style: p.tableContainer, wrap: !1, children: e.data.rows.map((i, o) => /* @__PURE__ */ n(
88
88
  l,
@@ -92,7 +92,8 @@ const O = 0.75, M = v.create({
92
92
  o === e.data.rows.length - 1 ? p.bottomCell : {}
93
93
  ],
94
94
  children: i.cells.map((h, s) => {
95
- const a = k(h), C = r[o], I = t[s];
95
+ var M, T;
96
+ const a = A(h), C = r[o], I = t[s];
96
97
  return /* @__PURE__ */ n(
97
98
  l,
98
99
  {
@@ -102,8 +103,8 @@ const O = 0.75, M = v.create({
102
103
  s === i.cells.length - 1 ? p.rightCell : {},
103
104
  e.data.columnWidths[s] ? { width: e.data.columnWidths[s] } : { flex: 1 },
104
105
  {
105
- color: a.props.textColor === "default" ? void 0 : e.transformer.options.colors[a.props.textColor].text,
106
- backgroundColor: a.props.backgroundColor === "default" ? void 0 : e.transformer.options.colors[a.props.backgroundColor].background,
106
+ color: a.props.textColor === "default" || (M = e.transformer.options.colors[a.props.textColor]) == null ? void 0 : M.text,
107
+ backgroundColor: a.props.backgroundColor === "default" || (T = e.transformer.options.colors[a.props.backgroundColor]) == null ? void 0 : T.background,
107
108
  textAlign: a.props.textAlignment
108
109
  }
109
110
  ],
@@ -115,10 +116,10 @@ const O = 0.75, M = v.create({
115
116
  },
116
117
  o
117
118
  )) });
118
- }, c = 0.75, S = 16, U = {
119
+ }, c = 0.75, S = 16, X = {
119
120
  paragraph: (e, r) => /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) }, "paragraph" + e.id),
120
- toggleListItem: (e, r) => /* @__PURE__ */ n(w, { listMarker: j, children: /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) }) }),
121
- bulletListItem: (e, r) => /* @__PURE__ */ n(w, { listMarker: W, children: /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) }) }, "bulletListItem" + e.id),
121
+ toggleListItem: (e, r) => /* @__PURE__ */ n(w, { listMarker: N, children: /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) }) }),
122
+ bulletListItem: (e, r) => /* @__PURE__ */ n(w, { listMarker: z, children: /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) }) }, "bulletListItem" + e.id),
122
123
  numberedListItem: (e, r, t, i) => /* @__PURE__ */ n(
123
124
  w,
124
125
  {
@@ -132,7 +133,7 @@ const O = 0.75, M = v.create({
132
133
  checkListItem: (e, r) => /* @__PURE__ */ n(
133
134
  w,
134
135
  {
135
- listMarker: e.props.checked ? N : z,
136
+ listMarker: e.props.checked ? U : K,
136
137
  children: /* @__PURE__ */ n(d, { children: r.transformInlineContent(e.content) })
137
138
  },
138
139
  "checkListItem" + e.id
@@ -183,7 +184,7 @@ const O = 0.75, M = v.create({
183
184
  style: {
184
185
  marginLeft: s * 9.5 * c
185
186
  },
186
- children: o.trimStart() || /* @__PURE__ */ n(P, { children: " " })
187
+ children: o.trimStart() || /* @__PURE__ */ n(F, { children: " " })
187
188
  },
188
189
  `line_${h}` + e.id
189
190
  );
@@ -254,7 +255,7 @@ const O = 0.75, M = v.create({
254
255
  ] }, "file" + e.id),
255
256
  image: async (e, r) => /* @__PURE__ */ f(l, { wrap: !1, children: [
256
257
  /* @__PURE__ */ n(
257
- D,
258
+ Z,
258
259
  {
259
260
  src: await r.resolveFile(e.props.url),
260
261
  style: {
@@ -264,10 +265,10 @@ const O = 0.75, M = v.create({
264
265
  ),
265
266
  H(e.props)
266
267
  ] }, "image" + e.id),
267
- table: (e, r) => /* @__PURE__ */ n(K, { data: e.content, transformer: r }, "table" + e.id)
268
+ table: (e, r) => /* @__PURE__ */ n($, { data: e.content, transformer: r }, "table" + e.id)
268
269
  };
269
270
  function L(e, r, t, i) {
270
- return /* @__PURE__ */ n(E, { src: e.url, children: /* @__PURE__ */ f(
271
+ return /* @__PURE__ */ n(R, { src: e.url, children: /* @__PURE__ */ f(
271
272
  l,
272
273
  {
273
274
  style: {
@@ -296,10 +297,10 @@ function H(e, r) {
296
297
  "caption" + e.caption
297
298
  );
298
299
  }
299
- const $ = {
300
- link: (e, r) => /* @__PURE__ */ n(E, { href: e.href, children: e.content.map((t) => r.transformStyledText(t)) }, "link" + e.href),
300
+ const G = {
301
+ link: (e, r) => /* @__PURE__ */ n(R, { href: e.href, children: e.content.map((t) => r.transformStyledText(t)) }, "link" + e.href),
301
302
  text: (e, r) => r.transformStyledText(e)
302
- }, X = {
303
+ }, J = {
303
304
  bold: (e) => e ? {
304
305
  fontWeight: "bold"
305
306
  } : {},
@@ -313,31 +314,37 @@ const $ = {
313
314
  strike: (e) => e ? {
314
315
  textDecoration: "line-through"
315
316
  } : {},
316
- backgroundColor: (e, r) => e ? {
317
- backgroundColor: r.options.colors[e].background
318
- } : {},
319
- textColor: (e, r) => e ? {
320
- color: r.options.colors[e].text
321
- } : {},
317
+ backgroundColor: (e, r) => {
318
+ var t;
319
+ return e ? {
320
+ backgroundColor: (t = r.options.colors[e]) == null ? void 0 : t.background
321
+ } : {};
322
+ },
323
+ textColor: (e, r) => {
324
+ var t;
325
+ return e ? {
326
+ color: (t = r.options.colors[e]) == null ? void 0 : t.text
327
+ } : {};
328
+ },
322
329
  code: (e) => e ? {
323
330
  fontFamily: "GeistMono"
324
331
  } : {}
325
- }, ne = {
326
- blockMapping: U,
327
- inlineContentMapping: $,
328
- styleMapping: X
332
+ }, oe = {
333
+ blockMapping: X,
334
+ inlineContentMapping: G,
335
+ styleMapping: J
329
336
  };
330
- async function G(e) {
337
+ async function Q(e) {
331
338
  return "https://corsproxy.api.blocknotejs.org/corsproxy/?url=" + encodeURIComponent(e);
332
339
  }
333
- async function J(e, r) {
340
+ async function Y(e, r) {
334
341
  return e.default;
335
342
  }
336
343
  async function y(e) {
337
- return J(e);
344
+ return Y(e);
338
345
  }
339
- const _ = 16, b = 0.75;
340
- class ie extends B {
346
+ const V = 16, b = 0.75;
347
+ class le extends q {
341
348
  constructor(t, i, o) {
342
349
  const s = {
343
350
  ...{
@@ -345,8 +352,8 @@ class ie extends B {
345
352
  format: "png",
346
353
  url: "https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/72x72/"
347
354
  },
348
- resolveFileUrl: G,
349
- colors: A
355
+ resolveFileUrl: Q,
356
+ colors: O
350
357
  },
351
358
  ...o
352
359
  };
@@ -358,7 +365,7 @@ class ie extends B {
358
365
  paddingBottom: 65,
359
366
  paddingHorizontal: 35,
360
367
  fontFamily: "Inter",
361
- fontSize: _ * b,
368
+ fontSize: V * b,
362
369
  // pixels
363
370
  lineHeight: 1.5
364
371
  },
@@ -399,7 +406,7 @@ class ie extends B {
399
406
  }
400
407
  const I = this.blocknoteDefaultPropsToReactPDFStyle(s.props);
401
408
  o.push(
402
- /* @__PURE__ */ f(q, { children: [
409
+ /* @__PURE__ */ f(W, { children: [
403
410
  /* @__PURE__ */ n(
404
411
  l,
405
412
  {
@@ -415,7 +422,7 @@ class ie extends B {
415
422
  l,
416
423
  {
417
424
  style: {
418
- marginLeft: _ * 1.5 * b,
425
+ marginLeft: V * 1.5 * b,
419
426
  ...this.styles.blockChildren
420
427
  },
421
428
  children: a
@@ -467,7 +474,7 @@ class ie extends B {
467
474
  * Convert a document (array of Blocks) to a react-pdf Document.
468
475
  */
469
476
  async toReactPDFDocument(t, i = {}) {
470
- return await this.registerFonts(), /* @__PURE__ */ n(F, { children: /* @__PURE__ */ f(Z, { dpi: 100, size: "A4", style: this.styles.page, children: [
477
+ return await this.registerFonts(), /* @__PURE__ */ n(k, { children: /* @__PURE__ */ f(B, { dpi: 100, size: "A4", style: this.styles.page, children: [
471
478
  i.header && /* @__PURE__ */ n(l, { fixed: !0, style: this.styles.header, children: i.header }),
472
479
  await this.transformBlocks(t),
473
480
  i.footer && /* @__PURE__ */ n(
@@ -488,16 +495,17 @@ class ie extends B {
488
495
  ] }) });
489
496
  }
490
497
  blocknoteDefaultPropsToReactPDFStyle(t) {
498
+ var i, o;
491
499
  return {
492
500
  textAlign: t.textAlignment,
493
- backgroundColor: t.backgroundColor === "default" || !t.backgroundColor ? void 0 : this.options.colors[t.backgroundColor].background,
494
- color: t.textColor === "default" || !t.textColor ? void 0 : this.options.colors[t.textColor].text,
501
+ backgroundColor: t.backgroundColor === "default" || !t.backgroundColor || (i = this.options.colors[t.backgroundColor]) == null ? void 0 : i.background,
502
+ color: t.textColor === "default" || !t.textColor || (o = this.options.colors[t.textColor]) == null ? void 0 : o.text,
495
503
  alignItems: t.textAlignment === "right" ? "flex-end" : t.textAlignment === "center" ? "center" : void 0
496
504
  };
497
505
  }
498
506
  }
499
507
  export {
500
- ie as PDFExporter,
501
- ne as pdfDefaultSchemaMappings
508
+ le as PDFExporter,
509
+ oe as pdfDefaultSchemaMappings
502
510
  };
503
511
  //# sourceMappingURL=blocknote-xl-pdf-exporter.js.map
@@ -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+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 createPageBreakBlockConfig,\n StyledText,\n} from \"@blocknote/core\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\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 & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.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 as 1 | 2 | 3 | 4 | 5 | 6];\n return (\n <Text\n key={\"heading\" + block.id}\n style={{\n fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n lineHeight: 1.25,\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 divider: () => {\n return (\n <View\n style={{\n borderTop: \"1px solid #ccc\",\n marginTop: 11.5 * PIXELS_PER_POINT,\n marginBottom: 11.5 * PIXELS_PER_POINT,\n }}\n />\n );\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return <View style={{ flex: block.props.width }}>{children}</View>;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return (\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {children}\n </View>\n );\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 // On Windows, vite/vitest may yield paths like \"/C:/...\" after removing /@fs\n // Node on Windows treats paths starting with \"/\" as relative to current drive,\n // which would produce \"C:\\C:\\...\". Strip leading slash when followed by a drive letter.\n if (/^\\/[A-Za-z]:/.test(url)) {\n url = url.slice(1);\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 { Fragment } from \"react\";\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 children,\n ); // TODO: any\n\n if ([\"pageBreak\", \"columnList\", \"column\"].includes(b.type)) {\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","c","colIndex","cell","mapTableCell","isHeaderRow","isHeaderCol","FONT_SIZE","pdfBlockMappingForDefaultSchema","block","exporter","_nestingLevel","numberedListIndex","levelFontSizeEM","lines","_a","line","index","indent","Fragment","_exporter","_numberedListIndex","_block","file","caption","t","Image","defaultText","icon","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[cell.props.textColor]\n ?.text,\n backgroundColor:\n cell.props.backgroundColor === \"default\"\n ? undefined\n : props.transformer.options.colors[\n cell.props.backgroundColor\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 createPageBreakBlockConfig,\n StyledText,\n} from \"@blocknote/core\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\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 & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.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 as 1 | 2 | 3 | 4 | 5 | 6];\n return (\n <Text\n key={\"heading\" + block.id}\n style={{\n fontSize: levelFontSizeEM * FONT_SIZE * PIXELS_PER_POINT,\n lineHeight: 1.25,\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 divider: () => {\n return (\n <View\n style={{\n borderTop: \"1px solid #ccc\",\n marginTop: 11.5 * PIXELS_PER_POINT,\n marginBottom: 11.5 * PIXELS_PER_POINT,\n }}\n />\n );\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return <View style={{ flex: block.props.width }}>{children}</View>;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return (\n <View\n style={{\n display: \"flex\",\n gap: 8 * PIXELS_PER_POINT,\n flexDirection: \"row\",\n }}\n >\n {children}\n </View>\n );\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: exporter.options.colors[val]?.background,\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color: exporter.options.colors[val]?.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 // On Windows, vite/vitest may yield paths like \"/C:/...\" after removing /@fs\n // Node on Windows treats paths starting with \"/\" as relative to current drive,\n // which would produce \"C:\\C:\\...\". Strip leading slash when followed by a drive letter.\n if (/^\\/[A-Za-z]:/.test(url)) {\n url = url.slice(1);\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 { Fragment } from \"react\";\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 children,\n ); // TODO: any\n\n if ([\"pageBreak\", \"columnList\", \"column\"].includes(b.type)) {\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[props.backgroundColor]?.background,\n color:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : this.options.colors[props.textColor]?.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","c","colIndex","cell","mapTableCell","isHeaderRow","isHeaderCol","_a","_b","FONT_SIZE","pdfBlockMappingForDefaultSchema","block","exporter","_nestingLevel","numberedListIndex","levelFontSizeEM","lines","line","index","indent","Fragment","_exporter","_numberedListIndex","_block","file","caption","t","Image","defaultText","icon","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":1762873672565,"assets":[{"name":"blocknote-xl-pdf-exporter.cjs","size":10728},{"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-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs.map","size":459111},{"name":"Inter_18pt-Italic-B-14jOMa.cjs.map","size":462221},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs.map","size":464497},{"name":"blocknote-xl-pdf-exporter.cjs.map","size":40265}],"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":8328,"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":5715,"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":1763459680678,"assets":[{"name":"blocknote-xl-pdf-exporter.cjs","size":10864},{"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-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"Inter_18pt-Bold-yKiK3cOU.cjs.map","size":459111},{"name":"Inter_18pt-Italic-B-14jOMa.cjs.map","size":462221},{"name":"Inter_18pt-BoldItalic-TUYlzxLL.cjs.map","size":464497},{"name":"blocknote-xl-pdf-exporter.cjs.map","size":39979}],"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":2367,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/blocks.tsx","size":8328,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/inlinecontent.tsx","size":335,"chunks":["a1ee98a"]},{"name":"./src/pdf/defaultSchema/styles.tsx","size":975,"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":5717,"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": "GPL-3.0 OR PROPRIETARY",
12
- "version": "0.42.0",
12
+ "version": "0.42.1",
13
13
  "files": [
14
14
  "dist",
15
15
  "types",
@@ -48,9 +48,9 @@
48
48
  }
49
49
  },
50
50
  "dependencies": {
51
- "@blocknote/core": "0.42.0",
52
- "@blocknote/react": "0.42.0",
53
- "@blocknote/xl-multi-column": "0.42.0",
51
+ "@blocknote/core": "0.42.1",
52
+ "@blocknote/react": "0.42.1",
53
+ "@blocknote/xl-multi-column": "0.42.1",
54
54
  "@react-pdf/renderer": "^4.3.0",
55
55
  "buffer": "^6.0.3",
56
56
  "docx": "^9.5.1"
@@ -42,9 +42,7 @@ export const pdfStyleMappingForDefaultSchema: StyleMapping<
42
42
  return {};
43
43
  }
44
44
  return {
45
- backgroundColor:
46
- exporter.options.colors[val as keyof typeof exporter.options.colors]
47
- .background,
45
+ backgroundColor: exporter.options.colors[val]?.background,
48
46
  };
49
47
  },
50
48
  textColor: (val, exporter) => {
@@ -52,9 +50,7 @@ export const pdfStyleMappingForDefaultSchema: StyleMapping<
52
50
  return {};
53
51
  }
54
52
  return {
55
- color:
56
- exporter.options.colors[val as keyof typeof exporter.options.colors]
57
- .text,
53
+ color: exporter.options.colors[val]?.text,
58
54
  };
59
55
  },
60
56
  code: (val) => {
@@ -296,15 +296,11 @@ export class PDFExporter<
296
296
  backgroundColor:
297
297
  props.backgroundColor === "default" || !props.backgroundColor
298
298
  ? undefined
299
- : this.options.colors[
300
- props.backgroundColor as keyof typeof this.options.colors
301
- ].background,
299
+ : this.options.colors[props.backgroundColor]?.background,
302
300
  color:
303
301
  props.textColor === "default" || !props.textColor
304
302
  ? undefined
305
- : this.options.colors[
306
- props.textColor as keyof typeof this.options.colors
307
- ].text,
303
+ : this.options.colors[props.textColor]?.text,
308
304
  alignItems:
309
305
  props.textAlignment === "right"
310
306
  ? "flex-end"
@@ -88,17 +88,14 @@ export const Table = (props: {
88
88
  color:
89
89
  cell.props.textColor === "default"
90
90
  ? undefined
91
- : props.transformer.options.colors[
92
- cell.props
93
- .textColor as keyof typeof props.transformer.options.colors
94
- ].text,
91
+ : props.transformer.options.colors[cell.props.textColor]
92
+ ?.text,
95
93
  backgroundColor:
96
94
  cell.props.backgroundColor === "default"
97
95
  ? undefined
98
96
  : props.transformer.options.colors[
99
- cell.props
100
- .backgroundColor as keyof typeof props.transformer.options.colors
101
- ].background,
97
+ cell.props.backgroundColor
98
+ ]?.background,
102
99
  textAlign: cell.props.textAlignment,
103
100
  },
104
101
  ]}