@blocknote/xl-docx-exporter 0.42.2 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- "use strict";var B=Object.create;var C=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var P=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of L(t))!S.call(e,i)&&i!==n&&C(e,i,{get:()=>t[i],enumerable:!(r=D(t,i))||r.enumerable});return e};var T=(e,t,n)=>(n=e!=null?B(I(e)):{},P(t||!e||!e.__esModule?C(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("@blocknote/core"),o=require("docx");async function O(e){if(typeof window<"u"){const t=await createImageBitmap(e),{width:n,height:r}=t;return t.close(),{width:n,height:r}}else{const t=(await import("image-meta")).imageMeta,n=new Uint8Array(await e.arrayBuffer()),r=t(n);if(!r.width||!r.height)throw new Error("Image dimensions not found");return{width:r.width,height:r.height}}}const k=(e,t)=>{const r=new Array(e.headerRows??0).fill(!0),i=new Array(e.headerCols??0).fill(!0);return new o.Table({layout:"autofit",columnWidths:e.columnWidths.map(a=>(a??120)*.75*20),rows:e.rows.map((a,s)=>{const u=r[s];return new o.TableRow({tableHeader:u,children:a.cells.map((p,y)=>{var b;const x=(b=e.columnWidths)==null?void 0:b[y],l=h.mapTableCell(p),v=i[y];return new o.TableCell({width:x?{size:`${x*.75}pt`,type:"dxa"}:void 0,columnSpan:l.props.colspan,rowSpan:l.props.rowspan,shading:l.props.backgroundColor==="default"||!l.props.backgroundColor?void 0:{type:o.ShadingType.SOLID,color:(()=>{var f;const d=(f=t.options.colors[l.props.backgroundColor])==null?void 0:f.background;if(d)return d.slice(1)})()},children:[new o.Paragraph({children:t.transformInlineContent(l.content),alignment:!l.props.textAlignment||l.props.textAlignment==="left"?void 0:l.props.textAlignment==="center"?"center":l.props.textAlignment==="right"?"right":l.props.textAlignment==="justify"?"distribute":(()=>{throw new h.UnreachableCaseError(l.props.textAlignment)})(),run:{bold:u||v,color:l.props.textColor==="default"||!l.props.textColor?void 0:(()=>{var f;const d=(f=t.options.colors[l.props.textColor])==null?void 0:f.text;if(d)return d.slice(1)})()}})]})})})})})};function c(e,t){return{shading:e.backgroundColor==="default"||!e.backgroundColor?void 0:{type:o.ShadingType.SOLID,color:(()=>{var r;const n=(r=t[e.backgroundColor])==null?void 0:r.background;if(n)return n.slice(1)})()},run:e.textColor==="default"||!e.textColor?void 0:{color:(()=>{var r;const n=(r=t[e.textColor])==null?void 0:r.text;if(n)return n.slice(1)})()},alignment:!e.textAlignment||e.textAlignment==="left"?void 0:e.textAlignment==="center"?"center":e.textAlignment==="right"?"right":e.textAlignment==="justify"?"distribute":(()=>{throw new h.UnreachableCaseError(e.textAlignment)})()}}const F={paragraph:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),style:"Normal",run:{font:"Inter"}}),toggleListItem:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:[new o.TextRun({children:["> "]}),...t.transformInlineContent(e.content)]}),numberedListItem:(e,t,n)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-numbered-list",level:n}}),bulletListItem:(e,t,n)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-bullet-list",level:n}}),checkListItem:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:[new o.CheckBox({checked:e.props.checked}),new o.TextRun({children:[" "]}),...t.transformInlineContent(e.content)]}),heading:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),heading:`Heading${e.props.level}`}),quote:(e,t)=>new o.Paragraph({shading:{color:"#7D797A"},border:{left:{color:"#7D797A",space:100,style:"single",size:8}},...c(e.props,t.options.colors),children:t.transformInlineContent(e.content)}),audio:(e,t)=>[w(e.props,"Open audio",t),...g(e.props,t)],video:(e,t)=>[w(e.props,"Open video",t),...g(e.props,t)],file:(e,t)=>[w(e.props,"Open file",t),...g(e.props,t)],codeBlock:e=>{var n;const t=((n=e.content[0])==null?void 0:n.text)||"";return new o.Paragraph({style:"Codeblock",shading:{type:o.ShadingType.SOLID,fill:"161616",color:"161616"},children:[...t.split(`
2
- `).map((r,i)=>new o.TextRun({text:r,break:i>0?1:0}))]})},pageBreak:()=>new o.Paragraph({children:[new o.PageBreak]}),divider:()=>new o.Paragraph({border:{top:{color:"auto",space:1,style:"single",size:1}}}),column:(e,t,n,r,i)=>new o.TableCell({width:{size:`${e.props.width*100}%`,type:"pct"},children:(i||[]).flatMap(a=>Array.isArray(a)?a:[a])}),columnList:(e,t,n,r,i)=>new o.Table({layout:"autofit",borders:{bottom:{style:"nil"},top:{style:"nil"},left:{style:"nil"},right:{style:"nil"},insideHorizontal:{style:"nil"},insideVertical:{style:"nil"}},rows:[new o.TableRow({children:i.map((a,s,u)=>{var p;return new o.TableCell({width:{size:`${parseFloat(`${((p=a.options.width)==null?void 0:p.size)||"100%"}`)/(u.length*100)*100}%`,type:"pct"},children:a.options.children})})})]}),image:async(e,t)=>{const n=await t.resolveFile(e.props.url),{width:r,height:i}=await O(n);return[new o.Paragraph({...c(e.props,t.options.colors),children:[new o.ImageRun({data:await n.arrayBuffer(),type:"gif",altText:e.props.caption?{description:e.props.caption,name:e.props.caption,title:e.props.caption}:void 0,transformation:{width:e.props.previewWidth||r,height:(e.props.previewWidth||r)/r*i}})]}),...g(e.props,t)]},table:(e,t)=>k(e.content,t)};function w(e,t,n){return new o.Paragraph({...c(e,n.options.colors),children:[new o.ExternalHyperlink({children:[new o.TextRun({text:e.name||t,style:"Hyperlink"})],link:e.url})]})}function g(e,t){return e.caption?[new o.Paragraph({...c(e,t.options.colors),children:[new o.TextRun({text:e.caption})],style:"Caption"})]:[]}const M={link:(e,t)=>new o.ExternalHyperlink({children:e.content.map(n=>t.transformStyledText(n,!0)),link:e.href}),text:(e,t)=>t.transformStyledText(e)},R={bold:e=>e?{bold:e}:{},italic:e=>e?{italics:e}:{},underline:e=>e?{underline:{type:"single"}}:{},strike:e=>e?{strike:e}:{},backgroundColor:(e,t)=>{var r;if(!e)return{};const n=(r=t.options.colors[e])==null?void 0:r.background;return n?{shading:{fill:n.slice(1)}}:{}},textColor:(e,t)=>{var r;if(!e)return{};const n=(r=t.options.colors[e])==null?void 0:r.text;return n?{color:n.slice(1)}:{}},code:e=>e?{font:"GeistMono"}:{}},_={blockMapping:F,inlineContentMapping:M,styleMapping:R};async function E(e){return"https://corsproxy.api.blocknotejs.org/corsproxy/?url="+encodeURIComponent(e)}async function A(e){{const t=e.default;return await(await fetch(t)).arrayBuffer()}}const m=16*.75*1.5*20;class U extends h.Exporter{constructor(t,n,r){const a={...{colors:h.COLORS_DEFAULT,resolveFileUrl:E},...r};super(t,n,a),this.schema=t,this.mappings=n}transformStyledText(t,n){const r=this.mapStyles(t.styles),i=Object.assign({},...r);return new o.TextRun({...i,style:n?"Hyperlink":void 0,text:t.text})}async transformBlocks(t,n=0){const r=[];for(const i of t){let a=await this.transformBlocks(i.children,n+1);["columnList","column"].includes(i.type)||(a=a.map((u,p)=>(u instanceof o.Paragraph&&!u.properties.numberingReferences.length&&u.addRunToFront(new o.TextRun({children:[new o.Tab]})),u)));const s=await this.mapBlock(i,n,0,a);["columnList","column"].includes(i.type)?r.push(s):Array.isArray(s)?r.push(...s,...a):r.push(s,...a)}return r}async getFonts(){let t=await A(await Promise.resolve().then(()=>require("./Inter_18pt-Regular-CCMUw8TC.cjs"))),n=await A(await Promise.resolve().then(()=>require("./GeistMono-Regular--NrcstcO.cjs")));if(t instanceof ArrayBuffer||n instanceof ArrayBuffer){const r=(await Promise.resolve().then(()=>require("./index-B-FmPo2r.cjs")).then(i=>i.index)).Buffer;t instanceof ArrayBuffer&&(t=r.from(t)),n instanceof ArrayBuffer&&(n=r.from(n))}return[{name:"Inter",data:t},{name:"GeistMono",data:n}]}async createDefaultDocumentOptions(t){let n=(await Promise.resolve().then(()=>require("./styles-C7c5RlKz.cjs"))).default;const r=t&&t.trim()||"en-US";n=n.replace(/(<w:lang\b[^>]*\bw:val=")([^"]+)("[^>]*\/>)/g,`$1${r}$3`);const i=["•"];return{numbering:{config:[{reference:"blocknote-numbered-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:o.LevelFormat.DECIMAL,text:`%${s+1}.`,alignment:o.AlignmentType.LEFT,style:{paragraph:{indent:{left:m*(s+1),hanging:m}}}}))},{reference:"blocknote-bullet-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:o.LevelFormat.BULLET,text:i[s%i.length],alignment:o.AlignmentType.LEFT,style:{paragraph:{indent:{left:m*(s+1),hanging:m}}}}))}]},fonts:await this.getFonts(),defaultTabStop:200,externalStyles:n}}async toBlob(t,n={sectionOptions:{},documentOptions:{}}){const r=await this.toDocxJsDocument(t,n),i=globalThis.Buffer;try{return globalThis.Buffer||(globalThis.Buffer=(await import("buffer")).default.Buffer),o.Packer.toBlob(r)}finally{globalThis.Buffer=i}}async toDocxJsDocument(t,n={sectionOptions:{},documentOptions:{}}){return new o.Document({...await this.createDefaultDocumentOptions(n.locale),...n.documentOptions,sections:[{children:await this.transformBlocks(t),...n.sectionOptions}]})}}exports.DOCXExporter=U;exports.docxDefaultSchemaMappings=_;
1
+ "use strict";var B=Object.create;var C=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,S=Object.prototype.hasOwnProperty;var I=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of D(t))!S.call(e,i)&&i!==n&&C(e,i,{get:()=>t[i],enumerable:!(r=L(t,i))||r.enumerable});return e};var T=(e,t,n)=>(n=e!=null?B(P(e)):{},I(t||!e||!e.__esModule?C(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("@blocknote/core"),o=require("docx");async function k(e){if(typeof window<"u"){const t=await createImageBitmap(e),{width:n,height:r}=t;return t.close(),{width:n,height:r}}else{const t=(await import("image-meta")).imageMeta,n=new Uint8Array(await e.arrayBuffer()),r=t(n);if(!r.width||!r.height)throw new Error("Image dimensions not found");return{width:r.width,height:r.height}}}const F=(e,t)=>{const r=new Array(e.headerRows??0).fill(!0),i=new Array(e.headerCols??0).fill(!0);return new o.Table({layout:"autofit",columnWidths:e.columnWidths.map(a=>(a??120)*.75*20),rows:e.rows.map((a,s)=>{const u=r[s];return new o.TableRow({tableHeader:u,children:a.cells.map((p,y)=>{var b;const x=(b=e.columnWidths)==null?void 0:b[y],l=h.mapTableCell(p),v=i[y];return new o.TableCell({width:x?{size:x*.75*20,type:"dxa"}:void 0,columnSpan:l.props.colspan,rowSpan:l.props.rowspan,shading:l.props.backgroundColor==="default"||!l.props.backgroundColor?void 0:{type:o.ShadingType.SOLID,color:(()=>{var f;const d=(f=t.options.colors[l.props.backgroundColor])==null?void 0:f.background;if(d)return d.slice(1)})()},children:[new o.Paragraph({children:t.transformInlineContent(l.content),alignment:!l.props.textAlignment||l.props.textAlignment==="left"?void 0:l.props.textAlignment==="center"?"center":l.props.textAlignment==="right"?"right":l.props.textAlignment==="justify"?"distribute":(()=>{throw new h.UnreachableCaseError(l.props.textAlignment)})(),run:{bold:u||v,color:l.props.textColor==="default"||!l.props.textColor?void 0:(()=>{var f;const d=(f=t.options.colors[l.props.textColor])==null?void 0:f.text;if(d)return d.slice(1)})()}})]})})})})})};function c(e,t){return{shading:e.backgroundColor==="default"||!e.backgroundColor?void 0:{type:o.ShadingType.CLEAR,fill:(()=>{var r;const n=(r=t[e.backgroundColor])==null?void 0:r.background;if(n)return n.slice(1)})()},run:e.textColor==="default"||!e.textColor?void 0:{color:(()=>{var r;const n=(r=t[e.textColor])==null?void 0:r.text;if(n)return n.slice(1)})()},alignment:!e.textAlignment||e.textAlignment==="left"?void 0:e.textAlignment==="center"?"center":e.textAlignment==="right"?"right":e.textAlignment==="justify"?"distribute":(()=>{throw new h.UnreachableCaseError(e.textAlignment)})()}}const O={paragraph:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content)}),toggleListItem:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:[new o.TextRun({children:["> "]}),...t.transformInlineContent(e.content)]}),numberedListItem:(e,t,n)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-numbered-list",level:n}}),bulletListItem:(e,t,n)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-bullet-list",level:n}}),checkListItem:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:[new o.CheckBox({checked:e.props.checked}),new o.TextRun({children:[" "]}),...t.transformInlineContent(e.content)]}),heading:(e,t)=>new o.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),heading:`Heading${e.props.level}`}),quote:(e,t)=>new o.Paragraph({style:"BlockQuote",...c(e.props,t.options.colors),children:t.transformInlineContent(e.content)}),audio:(e,t)=>[w(e.props,"Open audio",t),...g(e.props,t)],video:(e,t)=>[w(e.props,"Open video",t),...g(e.props,t)],file:(e,t)=>[w(e.props,"Open file",t),...g(e.props,t)],codeBlock:e=>{var n;const t=((n=e.content[0])==null?void 0:n.text)||"";return new o.Paragraph({style:"SourceCode",children:[...t.split(`
2
+ `).map((r,i)=>new o.TextRun({text:r,break:i>0?1:0}))]})},pageBreak:()=>new o.Paragraph({children:[new o.PageBreak]}),divider:()=>new o.Paragraph({border:{top:{color:"auto",space:1,style:"single",size:1}}}),column:(e,t,n,r,i)=>new o.TableCell({width:{size:`${e.props.width*100}%`,type:"pct"},children:(i||[]).flatMap(a=>Array.isArray(a)?a:[a])}),columnList:(e,t,n,r,i)=>new o.Table({layout:"autofit",borders:{bottom:{style:"nil"},top:{style:"nil"},left:{style:"nil"},right:{style:"nil"},insideHorizontal:{style:"nil"},insideVertical:{style:"nil"}},rows:[new o.TableRow({children:i.map((a,s,u)=>{var p;return new o.TableCell({width:{size:`${parseFloat(`${((p=a.options.width)==null?void 0:p.size)||"100%"}`)/(u.length*100)*100}%`,type:"pct"},children:a.options.children})})})]}),image:async(e,t)=>{const n=await t.resolveFile(e.props.url),{width:r,height:i}=await k(n);return[new o.Paragraph({...c(e.props,t.options.colors),children:[new o.ImageRun({data:await n.arrayBuffer(),type:"gif",altText:e.props.caption?{description:e.props.caption,name:e.props.caption,title:e.props.caption}:void 0,transformation:{width:e.props.previewWidth||r,height:(e.props.previewWidth||r)/r*i}})]}),...g(e.props,t)]},table:(e,t)=>F(e.content,t)};function w(e,t,n){return new o.Paragraph({...c(e,n.options.colors),children:[new o.ExternalHyperlink({children:[new o.TextRun({text:e.name||t,style:"Hyperlink"})],link:e.url})]})}function g(e,t){return e.caption?[new o.Paragraph({...c(e,t.options.colors),children:[new o.TextRun({text:e.caption})],style:"Caption"})]:[]}const R={link:(e,t)=>new o.ExternalHyperlink({children:e.content.map(n=>t.transformStyledText(n,!0)),link:e.href}),text:(e,t)=>t.transformStyledText(e)},E={bold:e=>e?{bold:e}:{},italic:e=>e?{italics:e}:{},underline:e=>e?{underline:{type:"single"}}:{},strike:e=>e?{strike:e}:{},backgroundColor:(e,t)=>{var r;if(!e)return{};const n=(r=t.options.colors[e])==null?void 0:r.background;return n?{shading:{type:o.ShadingType.CLEAR,fill:n.slice(1)}}:{}},textColor:(e,t)=>{var r;if(!e)return{};const n=(r=t.options.colors[e])==null?void 0:r.text;return n?{color:n.slice(1)}:{}},code:e=>e?{style:"VerbatimChar"}:{}},_={blockMapping:O,inlineContentMapping:R,styleMapping:E};async function M(e){return"https://corsproxy.api.blocknotejs.org/corsproxy/?url="+encodeURIComponent(e)}async function A(e){{const t=e.default;return await(await fetch(t)).arrayBuffer()}}const m=16*.75*1.5*20;class U extends h.Exporter{constructor(t,n,r){const a={...{colors:h.COLORS_DEFAULT,resolveFileUrl:M},...r};super(t,n,a),this.schema=t,this.mappings=n}transformStyledText(t,n){const r=this.mapStyles(t.styles),i=Object.assign({},...r);return new o.TextRun({...i,style:n?"Hyperlink":i.style,text:t.text})}async transformBlocks(t,n=0){const r=[];for(const i of t){let a=await this.transformBlocks(i.children,n+1);["columnList","column"].includes(i.type)||(a=a.map((u,p)=>(u instanceof o.Paragraph&&!u.properties.numberingReferences.length&&u.addRunToFront(new o.TextRun({children:[new o.Tab]})),u)));const s=await this.mapBlock(i,n,0,a);["columnList","column"].includes(i.type)?r.push(s):Array.isArray(s)?r.push(...s,...a):r.push(s,...a)}return r}async getFonts(){let t=await A(await Promise.resolve().then(()=>require("./Inter_18pt-Regular-CCMUw8TC.cjs"))),n=await A(await Promise.resolve().then(()=>require("./GeistMono-Regular--NrcstcO.cjs")));if(t instanceof ArrayBuffer||n instanceof ArrayBuffer){const r=(await Promise.resolve().then(()=>require("./index-B-FmPo2r.cjs")).then(i=>i.index)).Buffer;t instanceof ArrayBuffer&&(t=r.from(t)),n instanceof ArrayBuffer&&(n=r.from(n))}return[{name:"Inter",data:t},{name:"GeistMono",data:n}]}async createDefaultDocumentOptions(t){let n=(await Promise.resolve().then(()=>require("./styles-BRTtNJM0.cjs"))).default;const r=t&&t.trim()||"en-US";n=n.replace(/(<w:lang\b[^>]*\bw:val=")([^"]+)("[^>]*\/>)/g,`$1${r}$3`);const i=["•"];return{numbering:{config:[{reference:"blocknote-numbered-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:o.LevelFormat.DECIMAL,text:`%${s+1}.`,alignment:o.AlignmentType.LEFT,style:{paragraph:{indent:{left:m*(s+1),hanging:m}}}}))},{reference:"blocknote-bullet-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:o.LevelFormat.BULLET,text:i[s%i.length],alignment:o.AlignmentType.LEFT,style:{paragraph:{indent:{left:m*(s+1),hanging:m}}}}))}]},fonts:await this.getFonts(),defaultTabStop:200,externalStyles:n}}async toBlob(t,n={sectionOptions:{},documentOptions:{}}){const r=await this.toDocxJsDocument(t,n),i=globalThis.Buffer;try{return globalThis.Buffer||(globalThis.Buffer=(await import("buffer")).default.Buffer),o.Packer.toBlob(r)}finally{globalThis.Buffer=i}}async toDocxJsDocument(t,n={sectionOptions:{},documentOptions:{}}){return new o.Document({...await this.createDefaultDocumentOptions(n.locale),...n.documentOptions,sections:[{children:await this.transformBlocks(t),...n.sectionOptions}]})}}exports.DOCXExporter=U;exports.docxDefaultSchemaMappings=_;
3
3
  //# sourceMappingURL=blocknote-xl-docx-exporter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocknote-xl-docx-exporter.cjs","sources":["../../../shared/util/imageUtil.ts","../src/docx/util/Table.tsx","../src/docx/defaultSchema/blocks.ts","../src/docx/defaultSchema/inlinecontent.ts","../src/docx/defaultSchema/styles.ts","../src/docx/defaultSchema/index.ts","../../../shared/api/corsProxy.ts","../../../shared/util/fileUtil.ts","../src/docx/docxExporter.ts"],"sourcesContent":["export async function getImageDimensions(blob: Blob) {\n if (typeof window !== \"undefined\" && import.meta.env.NODE_ENV !== \"test\") {\n const bmp = await createImageBitmap(blob);\n const { width, height } = bmp;\n bmp.close(); // free memory\n return { width, height };\n } else {\n // node or vitest\n const imageMetaFunc = (await import(\"image-meta\")).imageMeta;\n const bytes = new Uint8Array(await blob.arrayBuffer());\n const meta = imageMetaFunc(bytes);\n if (!meta.width || !meta.height) {\n throw new Error(\"Image dimensions not found\");\n }\n return { width: meta.width, height: meta.height };\n }\n}\n","import {\n Exporter,\n InlineContentSchema,\n mapTableCell,\n TableContent,\n UnreachableCaseError,\n} from \"@blocknote/core\";\nimport {\n Table as DocxTable,\n Paragraph,\n ParagraphChild,\n ShadingType,\n TableCell,\n TableRow,\n} from \"docx\";\n\nexport const Table = (\n data: TableContent<InlineContentSchema>,\n t: Exporter<any, any, any, any, ParagraphChild, any, any>,\n) => {\n const DEFAULT_COLUMN_WIDTH = 120;\n\n // If headerRows is 1, then the first row is a header row\n const headerRows = new Array(data.headerRows ?? 0).fill(true);\n // If headerCols is 1, then the first column is a header column\n const headerCols = new Array(data.headerCols ?? 0).fill(true);\n\n return new DocxTable({\n layout: \"autofit\",\n columnWidths: data.columnWidths.map(\n (w) =>\n (w ?? DEFAULT_COLUMN_WIDTH) * /* to points */ 0.75 * /* to twips */ 20,\n ),\n rows: data.rows.map((row, rowIndex) => {\n const isHeaderRow = headerRows[rowIndex];\n return new TableRow({\n tableHeader: isHeaderRow,\n children: row.cells.map((c, colIndex) => {\n const width = data.columnWidths?.[colIndex];\n const cell = mapTableCell(c);\n const isHeaderColumn = headerCols[colIndex];\n\n return new TableCell({\n width: width\n ? {\n size: `${width * 0.75}pt`,\n type: \"dxa\",\n }\n : undefined,\n columnSpan: cell.props.colspan,\n rowSpan: cell.props.rowspan,\n shading:\n cell.props.backgroundColor === \"default\" ||\n !cell.props.backgroundColor\n ? undefined\n : {\n type: ShadingType.SOLID,\n color: (() => {\n const color =\n t.options.colors[cell.props.backgroundColor]\n ?.background;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n children: [\n new Paragraph({\n children: t.transformInlineContent(cell.content),\n\n alignment:\n !cell.props.textAlignment ||\n cell.props.textAlignment === \"left\"\n ? undefined\n : cell.props.textAlignment === \"center\"\n ? \"center\"\n : cell.props.textAlignment === \"right\"\n ? \"right\"\n : cell.props.textAlignment === \"justify\"\n ? \"distribute\"\n : (() => {\n throw new UnreachableCaseError(\n cell.props.textAlignment,\n );\n })(),\n run: {\n // TODO add support for table headers exporting, bolding seems to not be working at the moment\n bold: isHeaderRow || isHeaderColumn,\n // TODO table paragraph color seems to not be working at the moment\n // Probably because the runs are setting their own color\n color:\n cell.props.textColor === \"default\" || !cell.props.textColor\n ? undefined\n : (() => {\n const color =\n t.options.colors[cell.props.textColor]?.text;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n }),\n ],\n });\n }),\n });\n }),\n });\n};\n","import {\n BlockMapping,\n COLORS_DEFAULT,\n createPageBreakBlockConfig,\n DefaultBlockSchema,\n DefaultProps,\n StyledText,\n UnreachableCaseError,\n} from \"@blocknote/core\";\nimport { getImageDimensions } from \"@shared/util/imageUtil.js\";\nimport {\n CheckBox,\n Table as DocxTable,\n ExternalHyperlink,\n ImageRun,\n IParagraphOptions,\n PageBreak,\n Paragraph,\n ParagraphChild,\n ShadingType,\n TableCell,\n TableRow,\n TextRun,\n} from \"docx\";\nimport { Table } from \"../util/Table.js\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\n\nfunction blockPropsToStyles(\n props: Partial<DefaultProps>,\n colors: typeof COLORS_DEFAULT,\n): IParagraphOptions {\n return {\n shading:\n props.backgroundColor === \"default\" || !props.backgroundColor\n ? undefined\n : {\n type: ShadingType.SOLID,\n color: (() => {\n const color = colors[props.backgroundColor]?.background;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n run:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : {\n color: (() => {\n const color = colors[props.textColor]?.text;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n alignment:\n !props.textAlignment || props.textAlignment === \"left\"\n ? undefined\n : props.textAlignment === \"center\"\n ? \"center\"\n : props.textAlignment === \"right\"\n ? \"right\"\n : props.textAlignment === \"justify\"\n ? \"distribute\"\n : (() => {\n throw new UnreachableCaseError(props.textAlignment);\n })(),\n };\n}\nexport const docxBlockMappingForDefaultSchema: BlockMapping<\n DefaultBlockSchema & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.blockSchema,\n any,\n any,\n | Promise<Paragraph[] | Paragraph | DocxTable>\n | Paragraph[]\n | Paragraph\n | DocxTable,\n ParagraphChild\n> = {\n paragraph: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n style: \"Normal\",\n run: {\n font: \"Inter\",\n },\n });\n },\n toggleListItem: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new TextRun({\n children: [\"> \"],\n }),\n ...exporter.transformInlineContent(block.content),\n ],\n });\n },\n numberedListItem: (block, exporter, nestingLevel) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n numbering: {\n reference: \"blocknote-numbered-list\",\n level: nestingLevel,\n },\n });\n },\n bulletListItem: (block, exporter, nestingLevel) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n numbering: {\n reference: \"blocknote-bullet-list\",\n level: nestingLevel,\n },\n });\n },\n checkListItem: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new CheckBox({ checked: block.props.checked }),\n new TextRun({\n children: [\" \"],\n }),\n ...exporter.transformInlineContent(block.content),\n ],\n });\n },\n heading: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n heading: `Heading${block.props.level as 1 | 2 | 3 | 4 | 5 | 6}`,\n });\n },\n quote: (block, exporter) => {\n return new Paragraph({\n shading: {\n color: \"#7D797A\",\n },\n border: {\n left: {\n color: \"#7D797A\",\n space: 100,\n style: \"single\",\n size: 8,\n },\n },\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n });\n },\n audio: (block, exporter) => {\n return [\n file(block.props, \"Open audio\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n video: (block, exporter) => {\n return [\n file(block.props, \"Open video\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n file: (block, exporter) => {\n return [\n file(block.props, \"Open file\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n codeBlock: (block) => {\n const textContent = (block.content as StyledText<any>[])[0]?.text || \"\";\n\n return new Paragraph({\n style: \"Codeblock\",\n shading: {\n type: ShadingType.SOLID,\n fill: \"161616\",\n color: \"161616\",\n },\n children: [\n ...textContent.split(\"\\n\").map((line, index) => {\n return new TextRun({\n text: line,\n break: index > 0 ? 1 : 0,\n });\n }),\n ],\n });\n },\n pageBreak: () => {\n return new Paragraph({\n children: [new PageBreak()],\n });\n },\n divider: () => {\n return new Paragraph({\n border: {\n top: {\n color: \"auto\",\n space: 1,\n style: \"single\",\n size: 1,\n },\n },\n });\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return new TableCell({\n width: {\n size: `${block.props.width * 100}%`,\n type: \"pct\",\n },\n children: (children || []).flatMap((child) => {\n if (Array.isArray(child)) {\n return child;\n }\n\n return [child];\n }),\n }) as any;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return new DocxTable({\n layout: \"autofit\",\n borders: {\n bottom: { style: \"nil\" },\n top: { style: \"nil\" },\n left: { style: \"nil\" },\n right: { style: \"nil\" },\n insideHorizontal: { style: \"nil\" },\n insideVertical: { style: \"nil\" },\n },\n rows: [\n new TableRow({\n children: (children as unknown as TableCell[]).map(\n (cell, _index, children) => {\n return new TableCell({\n width: {\n size: `${(parseFloat(`${cell.options.width?.size || \"100%\"}`) / (children.length * 100)) * 100}%`,\n type: \"pct\",\n },\n children: cell.options.children,\n });\n },\n ),\n }),\n ],\n });\n },\n image: async (block, exporter) => {\n const blob = await exporter.resolveFile(block.props.url);\n const { width, height } = await getImageDimensions(blob);\n\n return [\n new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new ImageRun({\n data: await blob.arrayBuffer(),\n // it would be nicer to set the actual data type here, but then we'd need to use a mime type / image type\n // detector. atm passing gif does not seem to be causing issues as the \"type\" is mainly used by docxjs internally\n // (i.e.: to make sure it's not svg)\n type: \"gif\",\n altText: block.props.caption\n ? {\n description: block.props.caption,\n name: block.props.caption,\n title: block.props.caption,\n }\n : undefined,\n transformation: {\n width: block.props.previewWidth || width,\n height: ((block.props.previewWidth || width) / width) * height,\n },\n }),\n ],\n }),\n ...caption(block.props, exporter),\n ];\n },\n table: (block, exporter) => {\n return Table(block.content, exporter);\n },\n};\n\nfunction file(\n props: Partial<DefaultProps & { name: string; url: string }>,\n defaultText: string,\n exporter: any,\n) {\n return new Paragraph({\n ...blockPropsToStyles(props, exporter.options.colors),\n children: [\n new ExternalHyperlink({\n children: [\n new TextRun({\n text: props.name || defaultText,\n style: \"Hyperlink\",\n }),\n ],\n link: props.url!,\n }),\n ],\n });\n}\n\nfunction caption(\n props: Partial<DefaultProps & { caption: string }>,\n exporter: any,\n) {\n if (!props.caption) {\n return [];\n }\n return [\n new Paragraph({\n ...blockPropsToStyles(props, exporter.options.colors),\n children: [\n new TextRun({\n text: props.caption,\n }),\n ],\n style: \"Caption\",\n }),\n ];\n}\n","import {\n DefaultInlineContentSchema,\n DefaultStyleSchema,\n InlineContentMapping,\n} from \"@blocknote/core\";\nimport { ExternalHyperlink, ParagraphChild, TextRun } from \"docx\";\nimport type { DOCXExporter } from \"../docxExporter.js\";\n\nexport const docxInlineContentMappingForDefaultSchema: InlineContentMapping<\n DefaultInlineContentSchema,\n DefaultStyleSchema,\n ParagraphChild,\n TextRun\n> = {\n link: (ic, exporter) => {\n return new ExternalHyperlink({\n children: ic.content.map((content) => {\n return (exporter as DOCXExporter<any, any, any>).transformStyledText(\n content,\n true,\n );\n }),\n link: ic.href,\n });\n },\n text: (ic, t) => {\n return t.transformStyledText(ic);\n },\n};\n","import { DefaultStyleSchema, StyleMapping } from \"@blocknote/core\";\nimport { IRunPropertiesOptions } from \"docx\";\n\nexport const docxStyleMappingForDefaultSchema: StyleMapping<\n DefaultStyleSchema,\n IRunPropertiesOptions\n> = {\n bold: (val) => {\n if (!val) {\n return {};\n }\n return {\n bold: val,\n };\n },\n italic: (val) => {\n if (!val) {\n return {};\n }\n return {\n italics: val,\n };\n },\n underline: (val) => {\n if (!val) {\n return {};\n }\n return {\n underline: {\n type: \"single\",\n },\n };\n },\n strike: (val) => {\n if (!val) {\n return {};\n }\n return {\n strike: val,\n };\n },\n backgroundColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n const color = exporter.options.colors[val]?.background;\n if (!color) {\n return {};\n }\n return {\n shading: {\n fill: color.slice(1),\n },\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n const color = exporter.options.colors[val]?.text;\n if (!color) {\n return {};\n }\n return {\n color: color.slice(1),\n };\n },\n code: (val) => {\n if (!val) {\n return {};\n }\n return {\n font: \"GeistMono\",\n };\n },\n};\n","import { docxBlockMappingForDefaultSchema } from \"./blocks.js\";\nimport { docxInlineContentMappingForDefaultSchema } from \"./inlinecontent.js\";\nimport { docxStyleMappingForDefaultSchema } from \"./styles.js\";\n\nexport const docxDefaultSchemaMappings = {\n blockMapping: docxBlockMappingForDefaultSchema,\n inlineContentMapping: docxInlineContentMappingForDefaultSchema,\n styleMapping: docxStyleMappingForDefaultSchema,\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 InlineContentSchema,\n StyleSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport {\n AlignmentType,\n Document,\n IRunPropertiesOptions,\n ISectionOptions,\n LevelFormat,\n Packer,\n Paragraph,\n ParagraphChild,\n Tab,\n Table,\n TextRun,\n} from \"docx\";\n\nimport { Exporter, ExporterOptions } from \"@blocknote/core\";\nimport { corsProxyResolveFileUrl } from \"@shared/api/corsProxy.js\";\nimport { loadFileBuffer } from \"@shared/util/fileUtil.js\";\n\n// get constructor arg type from Document\ntype DocumentOptions = Partial<ConstructorParameters<typeof Document>[0]>;\n\nconst DEFAULT_TAB_STOP =\n /* default font size */ 16 *\n /* 1 pixel is 0.75 points */ 0.75 *\n /* 1.5em*/ 1.5 *\n /* 1 point is 20 twips */ 20;\n\n/**\n * Exports a BlockNote document to a .docx file using the docxjs library.\n */\nexport class DOCXExporter<\n B extends BlockSchema,\n S extends StyleSchema,\n I extends InlineContentSchema,\n> extends Exporter<\n B,\n I,\n S,\n Promise<Paragraph[] | Paragraph | Table> | Paragraph[] | Paragraph | Table,\n ParagraphChild,\n IRunPropertiesOptions,\n TextRun\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 docxjs content.\n * Pass {@link docxDefaultSchemaMappings} for the default schema.\n */\n protected readonly mappings: Exporter<\n NoInfer<B>,\n NoInfer<I>,\n NoInfer<S>,\n | Promise<Paragraph[] | Paragraph | Table>\n | Paragraph[]\n | Paragraph\n | Table,\n ParagraphChild,\n IRunPropertiesOptions,\n TextRun\n >[\"mappings\"],\n options?: Partial<ExporterOptions>,\n ) {\n const defaults = {\n colors: COLORS_DEFAULT,\n resolveFileUrl: corsProxyResolveFileUrl,\n } satisfies Partial<ExporterOptions>;\n\n const newOptions = {\n ...defaults,\n ...options,\n };\n super(schema, mappings, newOptions);\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toDocxJsDocument` instead.\n */\n public transformStyledText(styledText: StyledText<S>, hyperlink?: boolean) {\n const stylesArray = this.mapStyles(styledText.styles);\n\n const styles: IRunPropertiesOptions = Object.assign(\n {} as IRunPropertiesOptions,\n ...stylesArray,\n );\n\n return new TextRun({\n ...styles,\n style: hyperlink ? \"Hyperlink\" : undefined,\n text: styledText.text,\n });\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toDocxJsDocument` instead.\n */\n public async transformBlocks(\n blocks: Block<B, I, S>[],\n nestingLevel = 0,\n ): Promise<Array<Paragraph | Table>> {\n const ret: Array<Paragraph | Table> = [];\n\n for (const b of blocks) {\n let children = await this.transformBlocks(b.children, nestingLevel + 1);\n\n if (![\"columnList\", \"column\"].includes(b.type)) {\n children = children.map((c, _i) => {\n // NOTE: nested tables not supported (we can't insert the new Tab before a table)\n if (\n c instanceof Paragraph &&\n !(c as any).properties.numberingReferences.length\n ) {\n c.addRunToFront(\n new TextRun({\n children: [new Tab()],\n }),\n );\n }\n return c;\n });\n }\n\n const self = await this.mapBlock(\n b as any,\n nestingLevel,\n 0 /*unused*/,\n children,\n ); // TODO: any\n if ([\"columnList\", \"column\"].includes(b.type)) {\n ret.push(self as Table);\n } else if (Array.isArray(self)) {\n ret.push(...self, ...children);\n } else {\n ret.push(self, ...children);\n }\n }\n return ret;\n }\n\n protected async getFonts(): Promise<DocumentOptions[\"fonts\"]> {\n // Unfortunately, loading the variable font doesn't work\n // \"./src/fonts/Inter-VariableFont_opsz,wght.ttf\",\n\n let interFont = await loadFileBuffer(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Regular.ttf\"),\n );\n let geistMonoFont = await loadFileBuffer(\n await import(\"@shared/assets/fonts/GeistMono-Regular.ttf\"),\n );\n\n if (\n interFont instanceof ArrayBuffer ||\n geistMonoFont instanceof ArrayBuffer\n ) {\n // conversion with Polyfill needed because docxjs requires Buffer\n // NOTE: the buffer/ import is intentional and as documented in\n // the `buffer` package usage instructions\n // https://github.com/feross/buffer?tab=readme-ov-file#usage\n const Buffer = (await import(\"buffer/\")).Buffer;\n\n if (interFont instanceof ArrayBuffer) {\n interFont = Buffer.from(interFont) as unknown as Buffer;\n }\n if (geistMonoFont instanceof ArrayBuffer) {\n geistMonoFont = Buffer.from(geistMonoFont) as unknown as Buffer;\n }\n }\n\n return [\n { name: \"Inter\", data: interFont },\n {\n name: \"GeistMono\",\n data: geistMonoFont,\n },\n ];\n }\n\n protected async createDefaultDocumentOptions(\n locale?: string,\n ): Promise<DocumentOptions> {\n let externalStyles = (await import(\"./template/word/styles.xml?raw\"))\n .default;\n\n // Replace the default language in styles.xml with the provided locale.\n // If not provided, default to en-US.\n const resolvedLocale = (locale && locale.trim()) || \"en-US\";\n\n externalStyles = externalStyles.replace(\n /(<w:lang\\b[^>]*\\bw:val=\")([^\"]+)(\"[^>]*\\/>)/g,\n `$1${resolvedLocale}$3`,\n );\n\n const bullets = [\"•\"]; //, \"◦\", \"▪\"]; (these don't look great, just use solid bullet for now)\n return {\n numbering: {\n config: [\n {\n reference: \"blocknote-numbered-list\",\n levels: Array.from({ length: 9 }, (_, i) => ({\n start: 1,\n level: i,\n format: LevelFormat.DECIMAL,\n text: `%${i + 1}.`,\n alignment: AlignmentType.LEFT,\n style: {\n paragraph: {\n indent: {\n left: DEFAULT_TAB_STOP * (i + 1),\n hanging: DEFAULT_TAB_STOP,\n },\n },\n },\n })),\n },\n {\n reference: \"blocknote-bullet-list\",\n levels: Array.from({ length: 9 }, (_, i) => ({\n start: 1,\n level: i,\n format: LevelFormat.BULLET,\n text: bullets[i % bullets.length],\n alignment: AlignmentType.LEFT,\n style: {\n paragraph: {\n indent: {\n left: DEFAULT_TAB_STOP * (i + 1),\n hanging: DEFAULT_TAB_STOP,\n },\n },\n },\n })),\n },\n ],\n },\n fonts: await this.getFonts(),\n defaultTabStop: 200,\n externalStyles,\n };\n }\n\n /**\n * Convert a document (array of Blocks to a Blob representing a .docx file)\n */\n public async toBlob(\n blocks: Block<B, I, S>[],\n options: {\n sectionOptions: Omit<ISectionOptions, \"children\">;\n documentOptions: DocumentOptions;\n /**\n * The document locale in OOXML format (e.g. en-US, fr-FR, de-DE).\n * If omitted, defaults to en-US.\n */\n locale?: string;\n } = {\n sectionOptions: {},\n documentOptions: {},\n },\n ) {\n const doc = await this.toDocxJsDocument(blocks, options);\n type GlobalThis = typeof globalThis & { Buffer?: any };\n const prevBuffer = (globalThis as GlobalThis).Buffer;\n try {\n if (!(globalThis as GlobalThis).Buffer) {\n // load Buffer polyfill because docxjs requires this\n (globalThis as GlobalThis).Buffer = (\n await import(\"buffer\")\n ).default.Buffer;\n }\n return Packer.toBlob(doc);\n } finally {\n (globalThis as GlobalThis).Buffer = prevBuffer;\n }\n }\n\n /**\n * Convert a document (array of Blocks to a docxjs Document)\n */\n public async toDocxJsDocument(\n blocks: Block<B, I, S>[],\n options: {\n sectionOptions: Omit<ISectionOptions, \"children\">;\n documentOptions: DocumentOptions;\n /**\n * The document locale in OOXML format (e.g. en-US, fr-FR, de-DE).\n * If omitted, defaults to en-US.\n */\n locale?: string;\n } = {\n sectionOptions: {},\n documentOptions: {},\n },\n ) {\n const doc = new Document({\n ...(await this.createDefaultDocumentOptions(options.locale)),\n ...options.documentOptions,\n sections: [\n {\n children: await this.transformBlocks(blocks),\n ...options.sectionOptions,\n },\n ],\n });\n\n return doc;\n }\n}\n"],"names":["getImageDimensions","blob","bmp","width","height","imageMetaFunc","bytes","meta","Table","data","headerRows","headerCols","DocxTable","w","row","rowIndex","isHeaderRow","TableRow","c","colIndex","_a","cell","mapTableCell","isHeaderColumn","TableCell","ShadingType","color","Paragraph","UnreachableCaseError","blockPropsToStyles","props","colors","docxBlockMappingForDefaultSchema","block","exporter","TextRun","nestingLevel","CheckBox","file","caption","textContent","line","index","PageBreak","_exporter","_nestingLevel","_numberedListIndex","children","child","_block","_index","ImageRun","defaultText","ExternalHyperlink","docxInlineContentMappingForDefaultSchema","ic","content","docxStyleMappingForDefaultSchema","val","docxDefaultSchemaMappings","corsProxyResolveFileUrl","url","loadFileBuffer","requireUrl","dataUrl","DEFAULT_TAB_STOP","DOCXExporter","Exporter","schema","mappings","options","newOptions","COLORS_DEFAULT","styledText","hyperlink","stylesArray","styles","blocks","ret","b","_i","Tab","self","interFont","geistMonoFont","Buffer","n","locale","externalStyles","resolvedLocale","bullets","_","i","LevelFormat","AlignmentType","doc","prevBuffer","Packer","Document"],"mappings":"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"}
1
+ {"version":3,"file":"blocknote-xl-docx-exporter.cjs","sources":["../../../shared/util/imageUtil.ts","../src/docx/util/Table.tsx","../src/docx/defaultSchema/blocks.ts","../src/docx/defaultSchema/inlinecontent.ts","../src/docx/defaultSchema/styles.ts","../src/docx/defaultSchema/index.ts","../../../shared/api/corsProxy.ts","../../../shared/util/fileUtil.ts","../src/docx/docxExporter.ts"],"sourcesContent":["export async function getImageDimensions(blob: Blob) {\n if (typeof window !== \"undefined\" && import.meta.env.NODE_ENV !== \"test\") {\n const bmp = await createImageBitmap(blob);\n const { width, height } = bmp;\n bmp.close(); // free memory\n return { width, height };\n } else {\n // node or vitest\n const imageMetaFunc = (await import(\"image-meta\")).imageMeta;\n const bytes = new Uint8Array(await blob.arrayBuffer());\n const meta = imageMetaFunc(bytes);\n if (!meta.width || !meta.height) {\n throw new Error(\"Image dimensions not found\");\n }\n return { width: meta.width, height: meta.height };\n }\n}\n","import {\n Exporter,\n InlineContentSchema,\n mapTableCell,\n TableContent,\n UnreachableCaseError,\n} from \"@blocknote/core\";\nimport {\n Table as DocxTable,\n Paragraph,\n ParagraphChild,\n ShadingType,\n TableCell,\n TableRow,\n} from \"docx\";\n\nexport const Table = (\n data: TableContent<InlineContentSchema>,\n t: Exporter<any, any, any, any, ParagraphChild, any, any>,\n) => {\n const DEFAULT_COLUMN_WIDTH = 120;\n\n // If headerRows is 1, then the first row is a header row\n const headerRows = new Array(data.headerRows ?? 0).fill(true);\n // If headerCols is 1, then the first column is a header column\n const headerCols = new Array(data.headerCols ?? 0).fill(true);\n\n return new DocxTable({\n layout: \"autofit\",\n columnWidths: data.columnWidths.map(\n (w) =>\n (w ?? DEFAULT_COLUMN_WIDTH) * /* to points */ 0.75 * /* to twips */ 20,\n ),\n rows: data.rows.map((row, rowIndex) => {\n const isHeaderRow = headerRows[rowIndex];\n return new TableRow({\n tableHeader: isHeaderRow,\n children: row.cells.map((c, colIndex) => {\n const width = data.columnWidths?.[colIndex];\n const cell = mapTableCell(c);\n const isHeaderColumn = headerCols[colIndex];\n\n return new TableCell({\n width: width\n ? {\n // The type is twentieths of a point (dxa)\n size: width * 0.75 * 20,\n type: \"dxa\",\n }\n : undefined,\n columnSpan: cell.props.colspan,\n rowSpan: cell.props.rowspan,\n shading:\n cell.props.backgroundColor === \"default\" ||\n !cell.props.backgroundColor\n ? undefined\n : {\n type: ShadingType.SOLID,\n color: (() => {\n const color =\n t.options.colors[cell.props.backgroundColor]\n ?.background;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n children: [\n new Paragraph({\n children: t.transformInlineContent(cell.content),\n\n alignment:\n !cell.props.textAlignment ||\n cell.props.textAlignment === \"left\"\n ? undefined\n : cell.props.textAlignment === \"center\"\n ? \"center\"\n : cell.props.textAlignment === \"right\"\n ? \"right\"\n : cell.props.textAlignment === \"justify\"\n ? \"distribute\"\n : (() => {\n throw new UnreachableCaseError(\n cell.props.textAlignment,\n );\n })(),\n run: {\n // TODO add support for table headers exporting, bolding seems to not be working at the moment\n bold: isHeaderRow || isHeaderColumn,\n // TODO table paragraph color seems to not be working at the moment\n // Probably because the runs are setting their own color\n color:\n cell.props.textColor === \"default\" || !cell.props.textColor\n ? undefined\n : (() => {\n const color =\n t.options.colors[cell.props.textColor]?.text;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n }),\n ],\n });\n }),\n });\n }),\n });\n};\n","import {\n BlockMapping,\n COLORS_DEFAULT,\n createPageBreakBlockConfig,\n DefaultBlockSchema,\n DefaultProps,\n StyledText,\n UnreachableCaseError,\n} from \"@blocknote/core\";\nimport { getImageDimensions } from \"@shared/util/imageUtil.js\";\nimport {\n CheckBox,\n Table as DocxTable,\n ExternalHyperlink,\n ImageRun,\n IParagraphOptions,\n PageBreak,\n Paragraph,\n ParagraphChild,\n ShadingType,\n TableCell,\n TableRow,\n TextRun,\n} from \"docx\";\nimport { Table } from \"../util/Table.js\";\nimport { multiColumnSchema } from \"@blocknote/xl-multi-column\";\n\nfunction blockPropsToStyles(\n props: Partial<DefaultProps>,\n colors: typeof COLORS_DEFAULT,\n): IParagraphOptions {\n return {\n shading:\n props.backgroundColor === \"default\" || !props.backgroundColor\n ? undefined\n : {\n type: ShadingType.CLEAR,\n fill: (() => {\n const color = colors[props.backgroundColor]?.background;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n run:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : {\n color: (() => {\n const color = colors[props.textColor]?.text;\n if (!color) {\n return undefined;\n }\n return color.slice(1);\n })(),\n },\n alignment:\n !props.textAlignment || props.textAlignment === \"left\"\n ? undefined\n : props.textAlignment === \"center\"\n ? \"center\"\n : props.textAlignment === \"right\"\n ? \"right\"\n : props.textAlignment === \"justify\"\n ? \"distribute\"\n : (() => {\n throw new UnreachableCaseError(props.textAlignment);\n })(),\n };\n}\nexport const docxBlockMappingForDefaultSchema: BlockMapping<\n DefaultBlockSchema & {\n pageBreak: ReturnType<typeof createPageBreakBlockConfig>;\n } & typeof multiColumnSchema.blockSchema,\n any,\n any,\n | Promise<Paragraph[] | Paragraph | DocxTable>\n | Paragraph[]\n | Paragraph\n | DocxTable,\n ParagraphChild\n> = {\n paragraph: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content)\n });\n },\n toggleListItem: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new TextRun({\n children: [\"> \"],\n }),\n ...exporter.transformInlineContent(block.content),\n ],\n });\n },\n numberedListItem: (block, exporter, nestingLevel) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n numbering: {\n reference: \"blocknote-numbered-list\",\n level: nestingLevel,\n },\n });\n },\n bulletListItem: (block, exporter, nestingLevel) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n numbering: {\n reference: \"blocknote-bullet-list\",\n level: nestingLevel,\n },\n });\n },\n checkListItem: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new CheckBox({ checked: block.props.checked }),\n new TextRun({\n children: [\" \"],\n }),\n ...exporter.transformInlineContent(block.content),\n ],\n });\n },\n heading: (block, exporter) => {\n return new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n heading: `Heading${block.props.level as 1 | 2 | 3 | 4 | 5 | 6}`,\n });\n },\n quote: (block, exporter) => {\n return new Paragraph({\n style: \"BlockQuote\",\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: exporter.transformInlineContent(block.content),\n });\n },\n audio: (block, exporter) => {\n return [\n file(block.props, \"Open audio\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n video: (block, exporter) => {\n return [\n file(block.props, \"Open video\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n file: (block, exporter) => {\n return [\n file(block.props, \"Open file\", exporter),\n ...caption(block.props, exporter),\n ];\n },\n codeBlock: (block) => {\n const textContent = (block.content as StyledText<any>[])[0]?.text || \"\";\n\n return new Paragraph({\n style: \"SourceCode\",\n children: [\n ...textContent.split(\"\\n\").map((line, index) => {\n return new TextRun({\n text: line,\n break: index > 0 ? 1 : 0,\n });\n }),\n ],\n });\n },\n pageBreak: () => {\n return new Paragraph({\n children: [new PageBreak()],\n });\n },\n divider: () => {\n return new Paragraph({\n border: {\n top: {\n color: \"auto\",\n space: 1,\n style: \"single\",\n size: 1,\n },\n },\n });\n },\n column: (block, _exporter, _nestingLevel, _numberedListIndex, children) => {\n return new TableCell({\n width: {\n size: `${block.props.width * 100}%`,\n type: \"pct\",\n },\n children: (children || []).flatMap((child) => {\n if (Array.isArray(child)) {\n return child;\n }\n\n return [child];\n }),\n }) as any;\n },\n columnList: (\n _block,\n _exporter,\n _nestingLevel,\n _numberedListIndex,\n children,\n ) => {\n return new DocxTable({\n layout: \"autofit\",\n borders: {\n bottom: { style: \"nil\" },\n top: { style: \"nil\" },\n left: { style: \"nil\" },\n right: { style: \"nil\" },\n insideHorizontal: { style: \"nil\" },\n insideVertical: { style: \"nil\" },\n },\n rows: [\n new TableRow({\n children: (children as unknown as TableCell[]).map(\n (cell, _index, children) => {\n return new TableCell({\n width: {\n size: `${(parseFloat(`${cell.options.width?.size || \"100%\"}`) / (children.length * 100)) * 100}%`,\n type: \"pct\",\n },\n children: cell.options.children,\n });\n },\n ),\n }),\n ],\n });\n },\n image: async (block, exporter) => {\n const blob = await exporter.resolveFile(block.props.url);\n const { width, height } = await getImageDimensions(blob);\n\n return [\n new Paragraph({\n ...blockPropsToStyles(block.props, exporter.options.colors),\n children: [\n new ImageRun({\n data: await blob.arrayBuffer(),\n // it would be nicer to set the actual data type here, but then we'd need to use a mime type / image type\n // detector. atm passing gif does not seem to be causing issues as the \"type\" is mainly used by docxjs internally\n // (i.e.: to make sure it's not svg)\n type: \"gif\",\n altText: block.props.caption\n ? {\n description: block.props.caption,\n name: block.props.caption,\n title: block.props.caption,\n }\n : undefined,\n transformation: {\n width: block.props.previewWidth || width,\n height: ((block.props.previewWidth || width) / width) * height,\n },\n }),\n ],\n }),\n ...caption(block.props, exporter),\n ];\n },\n table: (block, exporter) => {\n return Table(block.content, exporter);\n },\n};\n\nfunction file(\n props: Partial<DefaultProps & { name: string; url: string }>,\n defaultText: string,\n exporter: any,\n) {\n return new Paragraph({\n ...blockPropsToStyles(props, exporter.options.colors),\n children: [\n new ExternalHyperlink({\n children: [\n new TextRun({\n text: props.name || defaultText,\n style: \"Hyperlink\",\n }),\n ],\n link: props.url!,\n }),\n ],\n });\n}\n\nfunction caption(\n props: Partial<DefaultProps & { caption: string }>,\n exporter: any,\n) {\n if (!props.caption) {\n return [];\n }\n return [\n new Paragraph({\n ...blockPropsToStyles(props, exporter.options.colors),\n children: [\n new TextRun({\n text: props.caption,\n }),\n ],\n style: \"Caption\",\n }),\n ];\n}\n","import {\n DefaultInlineContentSchema,\n DefaultStyleSchema,\n InlineContentMapping,\n} from \"@blocknote/core\";\nimport { ExternalHyperlink, ParagraphChild, TextRun } from \"docx\";\nimport type { DOCXExporter } from \"../docxExporter.js\";\n\nexport const docxInlineContentMappingForDefaultSchema: InlineContentMapping<\n DefaultInlineContentSchema,\n DefaultStyleSchema,\n ParagraphChild,\n TextRun\n> = {\n link: (ic, exporter) => {\n return new ExternalHyperlink({\n children: ic.content.map((content) => {\n return (exporter as DOCXExporter<any, any, any>).transformStyledText(\n content,\n true,\n );\n }),\n link: ic.href,\n });\n },\n text: (ic, t) => {\n return t.transformStyledText(ic);\n },\n};\n","import { DefaultStyleSchema, StyleMapping } from \"@blocknote/core\";\nimport { IRunPropertiesOptions, ShadingType } from \"docx\";\n\nexport const docxStyleMappingForDefaultSchema: StyleMapping<\n DefaultStyleSchema,\n IRunPropertiesOptions\n> = {\n bold: (val) => {\n if (!val) {\n return {};\n }\n return {\n bold: val,\n };\n },\n italic: (val) => {\n if (!val) {\n return {};\n }\n return {\n italics: val,\n };\n },\n underline: (val) => {\n if (!val) {\n return {};\n }\n return {\n underline: {\n type: \"single\",\n },\n };\n },\n strike: (val) => {\n if (!val) {\n return {};\n }\n return {\n strike: val,\n };\n },\n backgroundColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n const color = exporter.options.colors[val]?.background;\n if (!color) {\n return {};\n }\n return {\n shading: {\n type: ShadingType.CLEAR,\n fill: color.slice(1),\n },\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n const color = exporter.options.colors[val]?.text;\n if (!color) {\n return {};\n }\n return {\n color: color.slice(1),\n };\n },\n code: (val) => {\n if (!val) {\n return {};\n }\n return {\n style: \"VerbatimChar\"\n };\n },\n};\n","import { docxBlockMappingForDefaultSchema } from \"./blocks.js\";\nimport { docxInlineContentMappingForDefaultSchema } from \"./inlinecontent.js\";\nimport { docxStyleMappingForDefaultSchema } from \"./styles.js\";\n\nexport const docxDefaultSchemaMappings = {\n blockMapping: docxBlockMappingForDefaultSchema,\n inlineContentMapping: docxInlineContentMappingForDefaultSchema,\n styleMapping: docxStyleMappingForDefaultSchema,\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 InlineContentSchema,\n StyleSchema,\n StyledText,\n} from \"@blocknote/core\";\nimport {\n AlignmentType,\n Document,\n IRunPropertiesOptions,\n ISectionOptions,\n LevelFormat,\n Packer,\n Paragraph,\n ParagraphChild,\n Tab,\n Table,\n TextRun,\n} from \"docx\";\n\nimport { Exporter, ExporterOptions } from \"@blocknote/core\";\nimport { corsProxyResolveFileUrl } from \"@shared/api/corsProxy.js\";\nimport { loadFileBuffer } from \"@shared/util/fileUtil.js\";\n\n// get constructor arg type from Document\ntype DocumentOptions = Partial<ConstructorParameters<typeof Document>[0]>;\n\nconst DEFAULT_TAB_STOP =\n /* default font size */ 16 *\n /* 1 pixel is 0.75 points */ 0.75 *\n /* 1.5em*/ 1.5 *\n /* 1 point is 20 twips */ 20;\n\n/**\n * Exports a BlockNote document to a .docx file using the docxjs library.\n */\nexport class DOCXExporter<\n B extends BlockSchema,\n S extends StyleSchema,\n I extends InlineContentSchema,\n> extends Exporter<\n B,\n I,\n S,\n Promise<Paragraph[] | Paragraph | Table> | Paragraph[] | Paragraph | Table,\n ParagraphChild,\n IRunPropertiesOptions,\n TextRun\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 docxjs content.\n * Pass {@link docxDefaultSchemaMappings} for the default schema.\n */\n protected readonly mappings: Exporter<\n NoInfer<B>,\n NoInfer<I>,\n NoInfer<S>,\n | Promise<Paragraph[] | Paragraph | Table>\n | Paragraph[]\n | Paragraph\n | Table,\n ParagraphChild,\n IRunPropertiesOptions,\n TextRun\n >[\"mappings\"],\n options?: Partial<ExporterOptions>,\n ) {\n const defaults = {\n colors: COLORS_DEFAULT,\n resolveFileUrl: corsProxyResolveFileUrl,\n } satisfies Partial<ExporterOptions>;\n\n const newOptions = {\n ...defaults,\n ...options,\n };\n super(schema, mappings, newOptions);\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toDocxJsDocument` instead.\n */\n public transformStyledText(styledText: StyledText<S>, hyperlink?: boolean) {\n const stylesArray = this.mapStyles(styledText.styles);\n\n const styles: IRunPropertiesOptions = Object.assign(\n {} as IRunPropertiesOptions,\n ...stylesArray,\n );\n\n return new TextRun({\n ...styles,\n style: hyperlink ? \"Hyperlink\" : styles.style,\n text: styledText.text,\n });\n }\n\n /**\n * Mostly for internal use, you probably want to use `toBlob` or `toDocxJsDocument` instead.\n */\n public async transformBlocks(\n blocks: Block<B, I, S>[],\n nestingLevel = 0,\n ): Promise<Array<Paragraph | Table>> {\n const ret: Array<Paragraph | Table> = [];\n\n for (const b of blocks) {\n let children = await this.transformBlocks(b.children, nestingLevel + 1);\n\n if (![\"columnList\", \"column\"].includes(b.type)) {\n children = children.map((c, _i) => {\n // NOTE: nested tables not supported (we can't insert the new Tab before a table)\n if (\n c instanceof Paragraph &&\n !(c as any).properties.numberingReferences.length\n ) {\n c.addRunToFront(\n new TextRun({\n children: [new Tab()],\n }),\n );\n }\n return c;\n });\n }\n\n const self = await this.mapBlock(\n b as any,\n nestingLevel,\n 0 /*unused*/,\n children,\n ); // TODO: any\n if ([\"columnList\", \"column\"].includes(b.type)) {\n ret.push(self as Table);\n } else if (Array.isArray(self)) {\n ret.push(...self, ...children);\n } else {\n ret.push(self, ...children);\n }\n }\n return ret;\n }\n\n protected async getFonts(): Promise<DocumentOptions[\"fonts\"]> {\n // Unfortunately, loading the variable font doesn't work\n // \"./src/fonts/Inter-VariableFont_opsz,wght.ttf\",\n\n let interFont = await loadFileBuffer(\n await import(\"@shared/assets/fonts/inter/Inter_18pt-Regular.ttf\"),\n );\n let geistMonoFont = await loadFileBuffer(\n await import(\"@shared/assets/fonts/GeistMono-Regular.ttf\"),\n );\n\n if (\n interFont instanceof ArrayBuffer ||\n geistMonoFont instanceof ArrayBuffer\n ) {\n // conversion with Polyfill needed because docxjs requires Buffer\n // NOTE: the buffer/ import is intentional and as documented in\n // the `buffer` package usage instructions\n // https://github.com/feross/buffer?tab=readme-ov-file#usage\n const Buffer = (await import(\"buffer/\")).Buffer;\n\n if (interFont instanceof ArrayBuffer) {\n interFont = Buffer.from(interFont) as unknown as Buffer;\n }\n if (geistMonoFont instanceof ArrayBuffer) {\n geistMonoFont = Buffer.from(geistMonoFont) as unknown as Buffer;\n }\n }\n\n return [\n { name: \"Inter\", data: interFont },\n {\n name: \"GeistMono\",\n data: geistMonoFont,\n },\n ];\n }\n\n protected async createDefaultDocumentOptions(\n locale?: string,\n ): Promise<DocumentOptions> {\n let externalStyles = (await import(\"./template/word/styles.xml?raw\"))\n .default;\n\n // Replace the default language in styles.xml with the provided locale.\n // If not provided, default to en-US.\n const resolvedLocale = (locale && locale.trim()) || \"en-US\";\n\n externalStyles = externalStyles.replace(\n /(<w:lang\\b[^>]*\\bw:val=\")([^\"]+)(\"[^>]*\\/>)/g,\n `$1${resolvedLocale}$3`,\n );\n\n const bullets = [\"•\"]; //, \"◦\", \"▪\"]; (these don't look great, just use solid bullet for now)\n return {\n numbering: {\n config: [\n {\n reference: \"blocknote-numbered-list\",\n levels: Array.from({ length: 9 }, (_, i) => ({\n start: 1,\n level: i,\n format: LevelFormat.DECIMAL,\n text: `%${i + 1}.`,\n alignment: AlignmentType.LEFT,\n style: {\n paragraph: {\n indent: {\n left: DEFAULT_TAB_STOP * (i + 1),\n hanging: DEFAULT_TAB_STOP,\n },\n },\n },\n })),\n },\n {\n reference: \"blocknote-bullet-list\",\n levels: Array.from({ length: 9 }, (_, i) => ({\n start: 1,\n level: i,\n format: LevelFormat.BULLET,\n text: bullets[i % bullets.length],\n alignment: AlignmentType.LEFT,\n style: {\n paragraph: {\n indent: {\n left: DEFAULT_TAB_STOP * (i + 1),\n hanging: DEFAULT_TAB_STOP,\n },\n },\n },\n })),\n },\n ],\n },\n fonts: await this.getFonts(),\n defaultTabStop: 200,\n externalStyles,\n };\n }\n\n /**\n * Convert a document (array of Blocks to a Blob representing a .docx file)\n */\n public async toBlob(\n blocks: Block<B, I, S>[],\n options: {\n sectionOptions: Omit<ISectionOptions, \"children\">;\n documentOptions: DocumentOptions;\n /**\n * The document locale in OOXML format (e.g. en-US, fr-FR, de-DE).\n * If omitted, defaults to en-US.\n */\n locale?: string;\n } = {\n sectionOptions: {},\n documentOptions: {},\n },\n ) {\n const doc = await this.toDocxJsDocument(blocks, options);\n type GlobalThis = typeof globalThis & { Buffer?: any };\n const prevBuffer = (globalThis as GlobalThis).Buffer;\n try {\n if (!(globalThis as GlobalThis).Buffer) {\n // load Buffer polyfill because docxjs requires this\n (globalThis as GlobalThis).Buffer = (\n await import(\"buffer\")\n ).default.Buffer;\n }\n return Packer.toBlob(doc);\n } finally {\n (globalThis as GlobalThis).Buffer = prevBuffer;\n }\n }\n\n /**\n * Convert a document (array of Blocks to a docxjs Document)\n */\n public async toDocxJsDocument(\n blocks: Block<B, I, S>[],\n options: {\n sectionOptions: Omit<ISectionOptions, \"children\">;\n documentOptions: DocumentOptions;\n /**\n * The document locale in OOXML format (e.g. en-US, fr-FR, de-DE).\n * If omitted, defaults to en-US.\n */\n locale?: string;\n } = {\n sectionOptions: {},\n documentOptions: {},\n },\n ) {\n const doc = new Document({\n ...(await this.createDefaultDocumentOptions(options.locale)),\n ...options.documentOptions,\n sections: [\n {\n children: await this.transformBlocks(blocks),\n ...options.sectionOptions,\n },\n ],\n });\n\n return doc;\n }\n}\n"],"names":["getImageDimensions","blob","bmp","width","height","imageMetaFunc","bytes","meta","Table","data","headerRows","headerCols","DocxTable","w","row","rowIndex","isHeaderRow","TableRow","c","colIndex","_a","cell","mapTableCell","isHeaderColumn","TableCell","ShadingType","color","Paragraph","UnreachableCaseError","blockPropsToStyles","props","colors","docxBlockMappingForDefaultSchema","block","exporter","TextRun","nestingLevel","CheckBox","file","caption","textContent","line","index","PageBreak","_exporter","_nestingLevel","_numberedListIndex","children","child","_block","_index","ImageRun","defaultText","ExternalHyperlink","docxInlineContentMappingForDefaultSchema","ic","content","docxStyleMappingForDefaultSchema","val","docxDefaultSchemaMappings","corsProxyResolveFileUrl","url","loadFileBuffer","requireUrl","dataUrl","DEFAULT_TAB_STOP","DOCXExporter","Exporter","schema","mappings","options","newOptions","COLORS_DEFAULT","styledText","hyperlink","stylesArray","styles","blocks","ret","b","_i","Tab","self","interFont","geistMonoFont","Buffer","n","locale","externalStyles","resolvedLocale","bullets","_","i","LevelFormat","AlignmentType","doc","prevBuffer","Packer","Document"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { mapTableCell as F, UnreachableCaseError as D, Exporter as S, COLORS_DEFAULT as _ } from "@blocknote/core";
2
- import { Table as I, TableRow as L, TableCell as y, Paragraph as a, ShadingType as b, ImageRun as M, PageBreak as U, TextRun as p, CheckBox as E, ExternalHyperlink as O, Tab as R, AlignmentType as B, LevelFormat as T, Packer as H, Document as $ } from "docx";
3
- async function z(e) {
1
+ import { mapTableCell as O, UnreachableCaseError as L, Exporter as S, COLORS_DEFAULT as _ } from "@blocknote/core";
2
+ import { Table as I, TableRow as D, TableCell as y, Paragraph as a, ShadingType as x, ImageRun as E, PageBreak as M, TextRun as p, CheckBox as U, ExternalHyperlink as k, Tab as R, AlignmentType as B, LevelFormat as T, Packer as H, Document as $ } from "docx";
3
+ async function W(e) {
4
4
  if (typeof window < "u") {
5
5
  const t = await createImageBitmap(e), { width: n, height: r } = t;
6
6
  return t.close(), { width: n, height: r };
@@ -11,7 +11,7 @@ async function z(e) {
11
11
  return { width: r.width, height: r.height };
12
12
  }
13
13
  }
14
- const W = (e, t) => {
14
+ const z = (e, t) => {
15
15
  const r = new Array(e.headerRows ?? 0).fill(!0), o = new Array(e.headerCols ?? 0).fill(!0);
16
16
  return new I({
17
17
  layout: "autofit",
@@ -22,20 +22,21 @@ const W = (e, t) => {
22
22
  ),
23
23
  rows: e.rows.map((i, s) => {
24
24
  const u = r[s];
25
- return new L({
25
+ return new D({
26
26
  tableHeader: u,
27
- children: i.cells.map((d, x) => {
27
+ children: i.cells.map((d, b) => {
28
28
  var A;
29
- const C = (A = e.columnWidths) == null ? void 0 : A[x], l = F(d), k = o[x];
29
+ const C = (A = e.columnWidths) == null ? void 0 : A[b], l = O(d), F = o[b];
30
30
  return new y({
31
31
  width: C ? {
32
- size: `${C * 0.75}pt`,
32
+ // The type is twentieths of a point (dxa)
33
+ size: C * 0.75 * 20,
33
34
  type: "dxa"
34
35
  } : void 0,
35
36
  columnSpan: l.props.colspan,
36
37
  rowSpan: l.props.rowspan,
37
38
  shading: l.props.backgroundColor === "default" || !l.props.backgroundColor ? void 0 : {
38
- type: b.SOLID,
39
+ type: x.SOLID,
39
40
  color: (() => {
40
41
  var m;
41
42
  const f = (m = t.options.colors[l.props.backgroundColor]) == null ? void 0 : m.background;
@@ -47,13 +48,13 @@ const W = (e, t) => {
47
48
  new a({
48
49
  children: t.transformInlineContent(l.content),
49
50
  alignment: !l.props.textAlignment || l.props.textAlignment === "left" ? void 0 : l.props.textAlignment === "center" ? "center" : l.props.textAlignment === "right" ? "right" : l.props.textAlignment === "justify" ? "distribute" : (() => {
50
- throw new D(
51
+ throw new L(
51
52
  l.props.textAlignment
52
53
  );
53
54
  })(),
54
55
  run: {
55
56
  // TODO add support for table headers exporting, bolding seems to not be working at the moment
56
- bold: u || k,
57
+ bold: u || F,
57
58
  // TODO table paragraph color seems to not be working at the moment
58
59
  // Probably because the runs are setting their own color
59
60
  color: l.props.textColor === "default" || !l.props.textColor ? void 0 : (() => {
@@ -74,8 +75,8 @@ const W = (e, t) => {
74
75
  function c(e, t) {
75
76
  return {
76
77
  shading: e.backgroundColor === "default" || !e.backgroundColor ? void 0 : {
77
- type: b.SOLID,
78
- color: (() => {
78
+ type: x.CLEAR,
79
+ fill: (() => {
79
80
  var r;
80
81
  const n = (r = t[e.backgroundColor]) == null ? void 0 : r.background;
81
82
  if (n)
@@ -91,18 +92,14 @@ function c(e, t) {
91
92
  })()
92
93
  },
93
94
  alignment: !e.textAlignment || e.textAlignment === "left" ? void 0 : e.textAlignment === "center" ? "center" : e.textAlignment === "right" ? "right" : e.textAlignment === "justify" ? "distribute" : (() => {
94
- throw new D(e.textAlignment);
95
+ throw new L(e.textAlignment);
95
96
  })()
96
97
  };
97
98
  }
98
99
  const P = {
99
100
  paragraph: (e, t) => new a({
100
101
  ...c(e.props, t.options.colors),
101
- children: t.transformInlineContent(e.content),
102
- style: "Normal",
103
- run: {
104
- font: "Inter"
105
- }
102
+ children: t.transformInlineContent(e.content)
106
103
  }),
107
104
  toggleListItem: (e, t) => new a({
108
105
  ...c(e.props, t.options.colors),
@@ -132,7 +129,7 @@ const P = {
132
129
  checkListItem: (e, t) => new a({
133
130
  ...c(e.props, t.options.colors),
134
131
  children: [
135
- new E({ checked: e.props.checked }),
132
+ new U({ checked: e.props.checked }),
136
133
  new p({
137
134
  children: [" "]
138
135
  }),
@@ -145,17 +142,7 @@ const P = {
145
142
  heading: `Heading${e.props.level}`
146
143
  }),
147
144
  quote: (e, t) => new a({
148
- shading: {
149
- color: "#7D797A"
150
- },
151
- border: {
152
- left: {
153
- color: "#7D797A",
154
- space: 100,
155
- style: "single",
156
- size: 8
157
- }
158
- },
145
+ style: "BlockQuote",
159
146
  ...c(e.props, t.options.colors),
160
147
  children: t.transformInlineContent(e.content)
161
148
  }),
@@ -175,12 +162,7 @@ const P = {
175
162
  var n;
176
163
  const t = ((n = e.content[0]) == null ? void 0 : n.text) || "";
177
164
  return new a({
178
- style: "Codeblock",
179
- shading: {
180
- type: b.SOLID,
181
- fill: "161616",
182
- color: "161616"
183
- },
165
+ style: "SourceCode",
184
166
  children: [
185
167
  ...t.split(`
186
168
  `).map((r, o) => new p({
@@ -191,7 +173,7 @@ const P = {
191
173
  });
192
174
  },
193
175
  pageBreak: () => new a({
194
- children: [new U()]
176
+ children: [new M()]
195
177
  }),
196
178
  divider: () => new a({
197
179
  border: {
@@ -221,7 +203,7 @@ const P = {
221
203
  insideVertical: { style: "nil" }
222
204
  },
223
205
  rows: [
224
- new L({
206
+ new D({
225
207
  children: o.map(
226
208
  (i, s, u) => {
227
209
  var d;
@@ -238,12 +220,12 @@ const P = {
238
220
  ]
239
221
  }),
240
222
  image: async (e, t) => {
241
- const n = await t.resolveFile(e.props.url), { width: r, height: o } = await z(n);
223
+ const n = await t.resolveFile(e.props.url), { width: r, height: o } = await W(n);
242
224
  return [
243
225
  new a({
244
226
  ...c(e.props, t.options.colors),
245
227
  children: [
246
- new M({
228
+ new E({
247
229
  data: await n.arrayBuffer(),
248
230
  // it would be nicer to set the actual data type here, but then we'd need to use a mime type / image type
249
231
  // detector. atm passing gif does not seem to be causing issues as the "type" is mainly used by docxjs internally
@@ -264,13 +246,13 @@ const P = {
264
246
  ...h(e.props, t)
265
247
  ];
266
248
  },
267
- table: (e, t) => W(e.content, t)
249
+ table: (e, t) => z(e.content, t)
268
250
  };
269
251
  function w(e, t, n) {
270
252
  return new a({
271
253
  ...c(e, n.options.colors),
272
254
  children: [
273
- new O({
255
+ new k({
274
256
  children: [
275
257
  new p({
276
258
  text: e.name || t,
@@ -296,7 +278,7 @@ function h(e, t) {
296
278
  ] : [];
297
279
  }
298
280
  const j = {
299
- link: (e, t) => new O({
281
+ link: (e, t) => new k({
300
282
  children: e.content.map((n) => t.transformStyledText(
301
283
  n,
302
284
  !0
@@ -304,7 +286,7 @@ const j = {
304
286
  link: e.href
305
287
  }),
306
288
  text: (e, t) => t.transformStyledText(e)
307
- }, N = {
289
+ }, J = {
308
290
  bold: (e) => e ? {
309
291
  bold: e
310
292
  } : {},
@@ -326,6 +308,7 @@ const j = {
326
308
  const n = (r = t.options.colors[e]) == null ? void 0 : r.background;
327
309
  return n ? {
328
310
  shading: {
311
+ type: x.CLEAR,
329
312
  fill: n.slice(1)
330
313
  }
331
314
  } : {};
@@ -340,14 +323,14 @@ const j = {
340
323
  } : {};
341
324
  },
342
325
  code: (e) => e ? {
343
- font: "GeistMono"
326
+ style: "VerbatimChar"
344
327
  } : {}
345
- }, V = {
328
+ }, G = {
346
329
  blockMapping: P,
347
330
  inlineContentMapping: j,
348
- styleMapping: N
331
+ styleMapping: J
349
332
  };
350
- async function G(e) {
333
+ async function N(e) {
351
334
  return "https://corsproxy.api.blocknotejs.org/corsproxy/?url=" + encodeURIComponent(e);
352
335
  }
353
336
  async function v(e) {
@@ -363,12 +346,12 @@ const g = (
363
346
  1.5 * /* 1 point is 20 twips */
364
347
  20
365
348
  );
366
- class X extends S {
349
+ class Q extends S {
367
350
  constructor(t, n, r) {
368
351
  const i = {
369
352
  ...{
370
353
  colors: _,
371
- resolveFileUrl: G
354
+ resolveFileUrl: N
372
355
  },
373
356
  ...r
374
357
  };
@@ -384,7 +367,7 @@ class X extends S {
384
367
  );
385
368
  return new p({
386
369
  ...o,
387
- style: n ? "Hyperlink" : void 0,
370
+ style: n ? "Hyperlink" : o.style,
388
371
  text: t.text
389
372
  });
390
373
  }
@@ -429,7 +412,7 @@ class X extends S {
429
412
  ];
430
413
  }
431
414
  async createDefaultDocumentOptions(t) {
432
- let n = (await import("./styles-CujW8HHo.js")).default;
415
+ let n = (await import("./styles-Bw_Yt1z6.js")).default;
433
416
  const r = t && t.trim() || "en-US";
434
417
  n = n.replace(
435
418
  /(<w:lang\b[^>]*\bw:val=")([^"]+)("[^>]*\/>)/g,
@@ -516,7 +499,7 @@ class X extends S {
516
499
  }
517
500
  }
518
501
  export {
519
- X as DOCXExporter,
520
- V as docxDefaultSchemaMappings
502
+ Q as DOCXExporter,
503
+ G as docxDefaultSchemaMappings
521
504
  };
522
505
  //# sourceMappingURL=blocknote-xl-docx-exporter.js.map