@blocknote/xl-docx-exporter 0.42.0 → 0.42.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- "use strict";var A=Object.create;var x=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var I=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of v(t))!L.call(e,i)&&i!==n&&x(e,i,{get:()=>t[i],enumerable:!(o=B(t,i))||o.enumerable});return e};var b=(e,t,n)=>(n=e!=null?A(D(e)):{},I(t||!e||!e.__esModule?x(n,"default",{value:e,enumerable:!0}):n,e));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@blocknote/core"),r=require("docx");async function S(e){if(typeof window<"u"){const t=await createImageBitmap(e),{width:n,height:o}=t;return t.close(),{width:n,height:o}}else{const t=(await import("image-meta")).imageMeta,n=new Uint8Array(await e.arrayBuffer()),o=t(n);if(!o.width||!o.height)throw new Error("Image dimensions not found");return{width:o.width,height:o.height}}}const P=(e,t)=>{const o=new Array(e.headerRows??0).fill(!0),i=new Array(e.headerCols??0).fill(!0);return new r.Table({layout:"autofit",columnWidths:e.columnWidths.map(a=>(a??120)*.75*20),rows:e.rows.map((a,s)=>{const u=o[s];return new r.TableRow({tableHeader:u,children:a.cells.map((p,m)=>{var y;const w=(y=e.columnWidths)==null?void 0:y[m],l=d.mapTableCell(p),T=i[m];return new r.TableCell({width:w?{size:`${w*.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:r.ShadingType.SOLID,color:t.options.colors[l.props.backgroundColor].background.slice(1)},children:[new r.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 d.UnreachableCaseError(l.props.textAlignment)})(),run:{bold:u||T,color:l.props.textColor==="default"||!l.props.textColor?void 0:t.options.colors[l.props.textColor].text.slice(1)}})]})})})})})};function c(e,t){return{shading:e.backgroundColor==="default"||!e.backgroundColor?void 0:{type:r.ShadingType.SOLID,color:t[e.backgroundColor].background.slice(1)},run:e.textColor==="default"||!e.textColor?void 0:{color:t[e.textColor].text.slice(1)},alignment:!e.textAlignment||e.textAlignment==="left"?void 0:e.textAlignment==="center"?"center":e.textAlignment==="right"?"right":e.textAlignment==="justify"?"distribute":(()=>{throw new d.UnreachableCaseError(e.textAlignment)})()}}const O={paragraph:(e,t)=>new r.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),style:"Normal",run:{font:"Inter"}}),toggleListItem:(e,t)=>new r.Paragraph({...c(e.props,t.options.colors),children:[new r.TextRun({children:["> "]}),...t.transformInlineContent(e.content)]}),numberedListItem:(e,t,n)=>new r.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-numbered-list",level:n}}),bulletListItem:(e,t,n)=>new r.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),numbering:{reference:"blocknote-bullet-list",level:n}}),checkListItem:(e,t)=>new r.Paragraph({...c(e.props,t.options.colors),children:[new r.CheckBox({checked:e.props.checked}),new r.TextRun({children:[" "]}),...t.transformInlineContent(e.content)]}),heading:(e,t)=>new r.Paragraph({...c(e.props,t.options.colors),children:t.transformInlineContent(e.content),heading:`Heading${e.props.level}`}),quote:(e,t)=>new r.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)=>[g(e.props,"Open audio",t),...f(e.props,t)],video:(e,t)=>[g(e.props,"Open video",t),...f(e.props,t)],file:(e,t)=>[g(e.props,"Open file",t),...f(e.props,t)],codeBlock:e=>{var n;const t=((n=e.content[0])==null?void 0:n.text)||"";return new r.Paragraph({style:"Codeblock",shading:{type:r.ShadingType.SOLID,fill:"161616",color:"161616"},children:[...t.split(`
2
- `).map((o,i)=>new r.TextRun({text:o,break:i>0?1:0}))]})},pageBreak:()=>new r.Paragraph({children:[new r.PageBreak]}),divider:()=>new r.Paragraph({border:{top:{color:"auto",space:1,style:"single",size:1}}}),column:(e,t,n,o,i)=>new r.TableCell({width:{size:`${e.props.width*100}%`,type:"pct"},children:(i||[]).flatMap(a=>Array.isArray(a)?a:[a])}),columnList:(e,t,n,o,i)=>new r.Table({layout:"autofit",borders:{bottom:{style:"nil"},top:{style:"nil"},left:{style:"nil"},right:{style:"nil"},insideHorizontal:{style:"nil"},insideVertical:{style:"nil"}},rows:[new r.TableRow({children:i.map((a,s,u)=>{var p;return new r.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:o,height:i}=await S(n);return[new r.Paragraph({...c(e.props,t.options.colors),children:[new r.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||o,height:(e.props.previewWidth||o)/o*i}})]}),...f(e.props,t)]},table:(e,t)=>P(e.content,t)};function g(e,t,n){return new r.Paragraph({...c(e,n.options.colors),children:[new r.ExternalHyperlink({children:[new r.TextRun({text:e.name||t,style:"Hyperlink"})],link:e.url})]})}function f(e,t){return e.caption?[new r.Paragraph({...c(e,t.options.colors),children:[new r.TextRun({text:e.caption})],style:"Caption"})]:[]}const k={link:(e,t)=>new r.ExternalHyperlink({children:e.content.map(n=>t.transformStyledText(n,!0)),link:e.href}),text:(e,t)=>t.transformStyledText(e)},F={bold:e=>e?{bold:e}:{},italic:e=>e?{italics:e}:{},underline:e=>e?{underline:{type:"single"}}:{},strike:e=>e?{strike:e}:{},backgroundColor:(e,t)=>e?{shading:{fill:t.options.colors[e].background.slice(1)}}:{},textColor:(e,t)=>e?{color:t.options.colors[e].text.slice(1)}:{},code:e=>e?{font:"GeistMono"}:{}},M={blockMapping:O,inlineContentMapping:k,styleMapping:F};async function R(e){return"https://corsproxy.api.blocknotejs.org/corsproxy/?url="+encodeURIComponent(e)}async function C(e){{const t=e.default;return await(await fetch(t)).arrayBuffer()}}const h=16*.75*1.5*20;class _ extends d.Exporter{constructor(t,n,o){const a={...{colors:d.COLORS_DEFAULT,resolveFileUrl:R},...o};super(t,n,a),this.schema=t,this.mappings=n}transformStyledText(t,n){const o=this.mapStyles(t.styles),i=Object.assign({},...o);return new r.TextRun({...i,style:n?"Hyperlink":void 0,text:t.text})}async transformBlocks(t,n=0){const o=[];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 r.Paragraph&&!u.properties.numberingReferences.length&&u.addRunToFront(new r.TextRun({children:[new r.Tab]})),u)));const s=await this.mapBlock(i,n,0,a);["columnList","column"].includes(i.type)?o.push(s):Array.isArray(s)?o.push(...s,...a):o.push(s,...a)}return o}async getFonts(){let t=await C(await Promise.resolve().then(()=>require("./Inter_18pt-Regular-CCMUw8TC.cjs"))),n=await C(await Promise.resolve().then(()=>require("./GeistMono-Regular--NrcstcO.cjs")));if(t instanceof ArrayBuffer||n instanceof ArrayBuffer){const o=(await Promise.resolve().then(()=>require("./index-B-FmPo2r.cjs")).then(i=>i.index)).Buffer;t instanceof ArrayBuffer&&(t=o.from(t)),n instanceof ArrayBuffer&&(n=o.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 o=t&&t.trim()||"en-US";n=n.replace(/(<w:lang\b[^>]*\bw:val=")([^"]+)("[^>]*\/>)/g,`$1${o}$3`);const i=["•"];return{numbering:{config:[{reference:"blocknote-numbered-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:r.LevelFormat.DECIMAL,text:`%${s+1}.`,alignment:r.AlignmentType.LEFT,style:{paragraph:{indent:{left:h*(s+1),hanging:h}}}}))},{reference:"blocknote-bullet-list",levels:Array.from({length:9},(a,s)=>({start:1,level:s,format:r.LevelFormat.BULLET,text:i[s%i.length],alignment:r.AlignmentType.LEFT,style:{paragraph:{indent:{left:h*(s+1),hanging:h}}}}))}]},fonts:await this.getFonts(),defaultTabStop:200,externalStyles:n}}async toBlob(t,n={sectionOptions:{},documentOptions:{}}){const o=await this.toDocxJsDocument(t,n),i=globalThis.Buffer;try{return globalThis.Buffer||(globalThis.Buffer=(await import("buffer")).default.Buffer),r.Packer.toBlob(o)}finally{globalThis.Buffer=i}}async toDocxJsDocument(t,n={sectionOptions:{},documentOptions:{}}){return new r.Document({...await this.createDefaultDocumentOptions(n.locale),...n.documentOptions,sections:[{children:await this.transformBlocks(t),...n.sectionOptions}]})}}exports.DOCXExporter=_;exports.docxDefaultSchemaMappings=M;
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=_;
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 t.options.colors[\n cell.props\n .backgroundColor as keyof typeof t.options.colors\n ].background.slice(1),\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 : t.options.colors[\n cell.props.textColor as keyof typeof t.options.colors\n ].text.slice(1),\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 colors[\n props.backgroundColor as keyof typeof colors\n ].background.slice(1),\n },\n run:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : {\n color: colors[props.textColor as keyof typeof colors].text.slice(1),\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 return {\n shading: {\n fill: exporter.options.colors[\n val as keyof typeof exporter.options.colors\n ].background.slice(1),\n },\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color:\n exporter.options.colors[\n val as keyof typeof exporter.options.colors\n ].text.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","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 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,6 +1,6 @@
1
- import { mapTableCell as O, UnreachableCaseError as T, Exporter as k, COLORS_DEFAULT as F } from "@blocknote/core";
2
- import { Table as D, TableRow as I, TableCell as g, Paragraph as a, ShadingType as w, ImageRun as S, PageBreak as _, TextRun as p, CheckBox as M, ExternalHyperlink as L, Tab as U, AlignmentType as C, LevelFormat as A, Packer as E, Document as R } from "docx";
3
- async function H(e) {
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) {
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,9 +11,9 @@ async function H(e) {
11
11
  return { width: r.width, height: r.height };
12
12
  }
13
13
  }
14
- const $ = (e, t) => {
14
+ const W = (e, t) => {
15
15
  const r = new Array(e.headerRows ?? 0).fill(!0), o = new Array(e.headerCols ?? 0).fill(!0);
16
- return new D({
16
+ return new I({
17
17
  layout: "autofit",
18
18
  columnWidths: e.columnWidths.map(
19
19
  (i) => (i ?? 120) * /* to points */
@@ -22,36 +22,46 @@ const $ = (e, t) => {
22
22
  ),
23
23
  rows: e.rows.map((i, s) => {
24
24
  const u = r[s];
25
- return new I({
25
+ return new L({
26
26
  tableHeader: u,
27
- children: i.cells.map((d, y) => {
28
- var x;
29
- const b = (x = e.columnWidths) == null ? void 0 : x[y], l = O(d), v = o[y];
30
- return new g({
31
- width: b ? {
32
- size: `${b * 0.75}pt`,
27
+ children: i.cells.map((d, x) => {
28
+ var A;
29
+ const C = (A = e.columnWidths) == null ? void 0 : A[x], l = F(d), k = o[x];
30
+ return new y({
31
+ width: C ? {
32
+ size: `${C * 0.75}pt`,
33
33
  type: "dxa"
34
34
  } : void 0,
35
35
  columnSpan: l.props.colspan,
36
36
  rowSpan: l.props.rowspan,
37
37
  shading: l.props.backgroundColor === "default" || !l.props.backgroundColor ? void 0 : {
38
- type: w.SOLID,
39
- color: t.options.colors[l.props.backgroundColor].background.slice(1)
38
+ type: b.SOLID,
39
+ color: (() => {
40
+ var m;
41
+ const f = (m = t.options.colors[l.props.backgroundColor]) == null ? void 0 : m.background;
42
+ if (f)
43
+ return f.slice(1);
44
+ })()
40
45
  },
41
46
  children: [
42
47
  new a({
43
48
  children: t.transformInlineContent(l.content),
44
49
  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" : (() => {
45
- throw new T(
50
+ throw new D(
46
51
  l.props.textAlignment
47
52
  );
48
53
  })(),
49
54
  run: {
50
55
  // TODO add support for table headers exporting, bolding seems to not be working at the moment
51
- bold: u || v,
56
+ bold: u || k,
52
57
  // TODO table paragraph color seems to not be working at the moment
53
58
  // Probably because the runs are setting their own color
54
- color: l.props.textColor === "default" || !l.props.textColor ? void 0 : t.options.colors[l.props.textColor].text.slice(1)
59
+ color: l.props.textColor === "default" || !l.props.textColor ? void 0 : (() => {
60
+ var m;
61
+ const f = (m = t.options.colors[l.props.textColor]) == null ? void 0 : m.text;
62
+ if (f)
63
+ return f.slice(1);
64
+ })()
55
65
  }
56
66
  })
57
67
  ]
@@ -64,18 +74,28 @@ const $ = (e, t) => {
64
74
  function c(e, t) {
65
75
  return {
66
76
  shading: e.backgroundColor === "default" || !e.backgroundColor ? void 0 : {
67
- type: w.SOLID,
68
- color: t[e.backgroundColor].background.slice(1)
77
+ type: b.SOLID,
78
+ color: (() => {
79
+ var r;
80
+ const n = (r = t[e.backgroundColor]) == null ? void 0 : r.background;
81
+ if (n)
82
+ return n.slice(1);
83
+ })()
69
84
  },
70
85
  run: e.textColor === "default" || !e.textColor ? void 0 : {
71
- color: t[e.textColor].text.slice(1)
86
+ color: (() => {
87
+ var r;
88
+ const n = (r = t[e.textColor]) == null ? void 0 : r.text;
89
+ if (n)
90
+ return n.slice(1);
91
+ })()
72
92
  },
73
93
  alignment: !e.textAlignment || e.textAlignment === "left" ? void 0 : e.textAlignment === "center" ? "center" : e.textAlignment === "right" ? "right" : e.textAlignment === "justify" ? "distribute" : (() => {
74
- throw new T(e.textAlignment);
94
+ throw new D(e.textAlignment);
75
95
  })()
76
96
  };
77
97
  }
78
- const z = {
98
+ const P = {
79
99
  paragraph: (e, t) => new a({
80
100
  ...c(e.props, t.options.colors),
81
101
  children: t.transformInlineContent(e.content),
@@ -112,7 +132,7 @@ const z = {
112
132
  checkListItem: (e, t) => new a({
113
133
  ...c(e.props, t.options.colors),
114
134
  children: [
115
- new M({ checked: e.props.checked }),
135
+ new E({ checked: e.props.checked }),
116
136
  new p({
117
137
  children: [" "]
118
138
  }),
@@ -140,16 +160,16 @@ const z = {
140
160
  children: t.transformInlineContent(e.content)
141
161
  }),
142
162
  audio: (e, t) => [
143
- h(e.props, "Open audio", t),
144
- ...f(e.props, t)
163
+ w(e.props, "Open audio", t),
164
+ ...h(e.props, t)
145
165
  ],
146
166
  video: (e, t) => [
147
- h(e.props, "Open video", t),
148
- ...f(e.props, t)
167
+ w(e.props, "Open video", t),
168
+ ...h(e.props, t)
149
169
  ],
150
170
  file: (e, t) => [
151
- h(e.props, "Open file", t),
152
- ...f(e.props, t)
171
+ w(e.props, "Open file", t),
172
+ ...h(e.props, t)
153
173
  ],
154
174
  codeBlock: (e) => {
155
175
  var n;
@@ -157,7 +177,7 @@ const z = {
157
177
  return new a({
158
178
  style: "Codeblock",
159
179
  shading: {
160
- type: w.SOLID,
180
+ type: b.SOLID,
161
181
  fill: "161616",
162
182
  color: "161616"
163
183
  },
@@ -171,7 +191,7 @@ const z = {
171
191
  });
172
192
  },
173
193
  pageBreak: () => new a({
174
- children: [new _()]
194
+ children: [new U()]
175
195
  }),
176
196
  divider: () => new a({
177
197
  border: {
@@ -183,14 +203,14 @@ const z = {
183
203
  }
184
204
  }
185
205
  }),
186
- column: (e, t, n, r, o) => new g({
206
+ column: (e, t, n, r, o) => new y({
187
207
  width: {
188
208
  size: `${e.props.width * 100}%`,
189
209
  type: "pct"
190
210
  },
191
211
  children: (o || []).flatMap((i) => Array.isArray(i) ? i : [i])
192
212
  }),
193
- columnList: (e, t, n, r, o) => new D({
213
+ columnList: (e, t, n, r, o) => new I({
194
214
  layout: "autofit",
195
215
  borders: {
196
216
  bottom: { style: "nil" },
@@ -201,11 +221,11 @@ const z = {
201
221
  insideVertical: { style: "nil" }
202
222
  },
203
223
  rows: [
204
- new I({
224
+ new L({
205
225
  children: o.map(
206
226
  (i, s, u) => {
207
227
  var d;
208
- return new g({
228
+ return new y({
209
229
  width: {
210
230
  size: `${parseFloat(`${((d = i.options.width) == null ? void 0 : d.size) || "100%"}`) / (u.length * 100) * 100}%`,
211
231
  type: "pct"
@@ -218,12 +238,12 @@ const z = {
218
238
  ]
219
239
  }),
220
240
  image: async (e, t) => {
221
- const n = await t.resolveFile(e.props.url), { width: r, height: o } = await H(n);
241
+ const n = await t.resolveFile(e.props.url), { width: r, height: o } = await z(n);
222
242
  return [
223
243
  new a({
224
244
  ...c(e.props, t.options.colors),
225
245
  children: [
226
- new S({
246
+ new M({
227
247
  data: await n.arrayBuffer(),
228
248
  // it would be nicer to set the actual data type here, but then we'd need to use a mime type / image type
229
249
  // detector. atm passing gif does not seem to be causing issues as the "type" is mainly used by docxjs internally
@@ -241,16 +261,16 @@ const z = {
241
261
  })
242
262
  ]
243
263
  }),
244
- ...f(e.props, t)
264
+ ...h(e.props, t)
245
265
  ];
246
266
  },
247
- table: (e, t) => $(e.content, t)
267
+ table: (e, t) => W(e.content, t)
248
268
  };
249
- function h(e, t, n) {
269
+ function w(e, t, n) {
250
270
  return new a({
251
271
  ...c(e, n.options.colors),
252
272
  children: [
253
- new L({
273
+ new O({
254
274
  children: [
255
275
  new p({
256
276
  text: e.name || t,
@@ -262,7 +282,7 @@ function h(e, t, n) {
262
282
  ]
263
283
  });
264
284
  }
265
- function f(e, t) {
285
+ function h(e, t) {
266
286
  return e.caption ? [
267
287
  new a({
268
288
  ...c(e, t.options.colors),
@@ -275,8 +295,8 @@ function f(e, t) {
275
295
  })
276
296
  ] : [];
277
297
  }
278
- const W = {
279
- link: (e, t) => new L({
298
+ const j = {
299
+ link: (e, t) => new O({
280
300
  children: e.content.map((n) => t.transformStyledText(
281
301
  n,
282
302
  !0
@@ -284,7 +304,7 @@ const W = {
284
304
  link: e.href
285
305
  }),
286
306
  text: (e, t) => t.transformStyledText(e)
287
- }, P = {
307
+ }, N = {
288
308
  bold: (e) => e ? {
289
309
  bold: e
290
310
  } : {},
@@ -299,44 +319,56 @@ const W = {
299
319
  strike: (e) => e ? {
300
320
  strike: e
301
321
  } : {},
302
- backgroundColor: (e, t) => e ? {
303
- shading: {
304
- fill: t.options.colors[e].background.slice(1)
305
- }
306
- } : {},
307
- textColor: (e, t) => e ? {
308
- color: t.options.colors[e].text.slice(1)
309
- } : {},
322
+ backgroundColor: (e, t) => {
323
+ var r;
324
+ if (!e)
325
+ return {};
326
+ const n = (r = t.options.colors[e]) == null ? void 0 : r.background;
327
+ return n ? {
328
+ shading: {
329
+ fill: n.slice(1)
330
+ }
331
+ } : {};
332
+ },
333
+ textColor: (e, t) => {
334
+ var r;
335
+ if (!e)
336
+ return {};
337
+ const n = (r = t.options.colors[e]) == null ? void 0 : r.text;
338
+ return n ? {
339
+ color: n.slice(1)
340
+ } : {};
341
+ },
310
342
  code: (e) => e ? {
311
343
  font: "GeistMono"
312
344
  } : {}
313
- }, J = {
314
- blockMapping: z,
315
- inlineContentMapping: W,
316
- styleMapping: P
345
+ }, V = {
346
+ blockMapping: P,
347
+ inlineContentMapping: j,
348
+ styleMapping: N
317
349
  };
318
- async function j(e) {
350
+ async function G(e) {
319
351
  return "https://corsproxy.api.blocknotejs.org/corsproxy/?url=" + encodeURIComponent(e);
320
352
  }
321
- async function B(e) {
353
+ async function v(e) {
322
354
  {
323
355
  const t = e.default;
324
356
  return await (await fetch(t)).arrayBuffer();
325
357
  }
326
358
  }
327
- const m = (
359
+ const g = (
328
360
  /* default font size */
329
361
  16 * /* 1 pixel is 0.75 points */
330
362
  0.75 * /* 1.5em*/
331
363
  1.5 * /* 1 point is 20 twips */
332
364
  20
333
365
  );
334
- class q extends k {
366
+ class X extends S {
335
367
  constructor(t, n, r) {
336
368
  const i = {
337
369
  ...{
338
- colors: F,
339
- resolveFileUrl: j
370
+ colors: _,
371
+ resolveFileUrl: G
340
372
  },
341
373
  ...r
342
374
  };
@@ -365,7 +397,7 @@ class q extends k {
365
397
  let i = await this.transformBlocks(o.children, n + 1);
366
398
  ["columnList", "column"].includes(o.type) || (i = i.map((u, d) => (u instanceof a && !u.properties.numberingReferences.length && u.addRunToFront(
367
399
  new p({
368
- children: [new U()]
400
+ children: [new R()]
369
401
  })
370
402
  ), u)));
371
403
  const s = await this.mapBlock(
@@ -379,9 +411,9 @@ class q extends k {
379
411
  return r;
380
412
  }
381
413
  async getFonts() {
382
- let t = await B(
414
+ let t = await v(
383
415
  await import("./Inter_18pt-Regular-byxnNS-8.js")
384
- ), n = await B(
416
+ ), n = await v(
385
417
  await import("./GeistMono-Regular-D4rKXxwr.js")
386
418
  );
387
419
  if (t instanceof ArrayBuffer || n instanceof ArrayBuffer) {
@@ -412,14 +444,14 @@ class q extends k {
412
444
  levels: Array.from({ length: 9 }, (i, s) => ({
413
445
  start: 1,
414
446
  level: s,
415
- format: A.DECIMAL,
447
+ format: T.DECIMAL,
416
448
  text: `%${s + 1}.`,
417
- alignment: C.LEFT,
449
+ alignment: B.LEFT,
418
450
  style: {
419
451
  paragraph: {
420
452
  indent: {
421
- left: m * (s + 1),
422
- hanging: m
453
+ left: g * (s + 1),
454
+ hanging: g
423
455
  }
424
456
  }
425
457
  }
@@ -430,14 +462,14 @@ class q extends k {
430
462
  levels: Array.from({ length: 9 }, (i, s) => ({
431
463
  start: 1,
432
464
  level: s,
433
- format: A.BULLET,
465
+ format: T.BULLET,
434
466
  text: o[s % o.length],
435
- alignment: C.LEFT,
467
+ alignment: B.LEFT,
436
468
  style: {
437
469
  paragraph: {
438
470
  indent: {
439
- left: m * (s + 1),
440
- hanging: m
471
+ left: g * (s + 1),
472
+ hanging: g
441
473
  }
442
474
  }
443
475
  }
@@ -459,7 +491,7 @@ class q extends k {
459
491
  }) {
460
492
  const r = await this.toDocxJsDocument(t, n), o = globalThis.Buffer;
461
493
  try {
462
- return globalThis.Buffer || (globalThis.Buffer = (await import("buffer")).default.Buffer), E.toBlob(r);
494
+ return globalThis.Buffer || (globalThis.Buffer = (await import("buffer")).default.Buffer), H.toBlob(r);
463
495
  } finally {
464
496
  globalThis.Buffer = o;
465
497
  }
@@ -471,7 +503,7 @@ class q extends k {
471
503
  sectionOptions: {},
472
504
  documentOptions: {}
473
505
  }) {
474
- return new R({
506
+ return new $({
475
507
  ...await this.createDefaultDocumentOptions(n.locale),
476
508
  ...n.documentOptions,
477
509
  sections: [
@@ -484,7 +516,7 @@ class q extends k {
484
516
  }
485
517
  }
486
518
  export {
487
- q as DOCXExporter,
488
- J as docxDefaultSchemaMappings
519
+ X as DOCXExporter,
520
+ V as docxDefaultSchemaMappings
489
521
  };
490
522
  //# sourceMappingURL=blocknote-xl-docx-exporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"blocknote-xl-docx-exporter.js","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 t.options.colors[\n cell.props\n .backgroundColor as keyof typeof t.options.colors\n ].background.slice(1),\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 : t.options.colors[\n cell.props.textColor as keyof typeof t.options.colors\n ].text.slice(1),\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 colors[\n props.backgroundColor as keyof typeof colors\n ].background.slice(1),\n },\n run:\n props.textColor === \"default\" || !props.textColor\n ? undefined\n : {\n color: colors[props.textColor as keyof typeof colors].text.slice(1),\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 return {\n shading: {\n fill: exporter.options.colors[\n val as keyof typeof exporter.options.colors\n ].background.slice(1),\n },\n };\n },\n textColor: (val, exporter) => {\n if (!val) {\n return {};\n }\n return {\n color:\n exporter.options.colors[\n val as keyof typeof exporter.options.colors\n ].text.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","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.js","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 +1 @@
1
- {"builtAt":1762873671707,"assets":[{"name":"blocknote-xl-docx-exporter.cjs","size":9013},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs","size":457096},{"name":"GeistMono-Regular--NrcstcO.cjs","size":155187},{"name":"index-B-FmPo2r.cjs","size":28104},{"name":"styles-C7c5RlKz.cjs","size":55568},{"name":"styles-C7c5RlKz.cjs.map","size":72356},{"name":"GeistMono-Regular--NrcstcO.cjs.map","size":155239},{"name":"index-B-FmPo2r.cjs.map","size":110509},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"blocknote-xl-docx-exporter.cjs.map","size":38988}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-docx-exporter.cjs"],"names":["blocknote-xl-docx-exporter"]},{"id":"b6f14fb","entry":false,"initial":false,"files":["Inter_18pt-Regular-CCMUw8TC.cjs"],"names":["Inter_18pt-Regular"]},{"id":"642be88","entry":false,"initial":false,"files":["GeistMono-Regular--NrcstcO.cjs"],"names":["GeistMono-Regular"]},{"id":"d3d6f02","entry":false,"initial":false,"files":["index-B-FmPo2r.cjs"],"names":["index"]},{"id":"714dba6","entry":false,"initial":false,"files":["styles-C7c5RlKz.cjs"],"names":["styles"]}],"modules":[{"name":"../../shared/util/imageUtil.ts","size":592,"chunks":["a1ee98a"]},{"name":"./src/docx/util/Table.tsx","size":2384,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/blocks.ts","size":7349,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/inlinecontent.ts","size":363,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/styles.ts","size":941,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/index.ts","size":203,"chunks":["a1ee98a"]},{"name":"../../shared/api/corsProxy.ts","size":139,"chunks":["a1ee98a"]},{"name":"../../shared/util/fileUtil.ts","size":214,"chunks":["a1ee98a"]},{"name":"./src/docx/docxExporter.ts","size":5471,"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/GeistMono-Regular.ttf","size":155049,"chunks":["642be88"]},{"name":"../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js?commonjs-exports","size":16,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js?commonjs-exports","size":18,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","size":3969,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js?commonjs-exports","size":17,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","size":2201,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","size":60535,"chunks":["d3d6f02"]},{"name":"./src/docx/template/word/styles.xml?raw","size":59368,"chunks":["714dba6"]}]}
1
+ {"builtAt":1763552660973,"assets":[{"name":"blocknote-xl-docx-exporter.cjs","size":9359},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs","size":457096},{"name":"GeistMono-Regular--NrcstcO.cjs","size":155187},{"name":"index-B-FmPo2r.cjs","size":28104},{"name":"styles-C7c5RlKz.cjs","size":55568},{"name":"styles-C7c5RlKz.cjs.map","size":72356},{"name":"GeistMono-Regular--NrcstcO.cjs.map","size":155239},{"name":"index-B-FmPo2r.cjs.map","size":110509},{"name":"Inter_18pt-Regular-CCMUw8TC.cjs.map","size":457156},{"name":"blocknote-xl-docx-exporter.cjs.map","size":40022}],"chunks":[{"id":"a1ee98a","entry":true,"initial":true,"files":["blocknote-xl-docx-exporter.cjs"],"names":["blocknote-xl-docx-exporter"]},{"id":"b6f14fb","entry":false,"initial":false,"files":["Inter_18pt-Regular-CCMUw8TC.cjs"],"names":["Inter_18pt-Regular"]},{"id":"642be88","entry":false,"initial":false,"files":["GeistMono-Regular--NrcstcO.cjs"],"names":["GeistMono-Regular"]},{"id":"d3d6f02","entry":false,"initial":false,"files":["index-B-FmPo2r.cjs"],"names":["index"]},{"id":"714dba6","entry":false,"initial":false,"files":["styles-C7c5RlKz.cjs"],"names":["styles"]}],"modules":[{"name":"../../shared/util/imageUtil.ts","size":592,"chunks":["a1ee98a"]},{"name":"./src/docx/util/Table.tsx","size":2750,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/blocks.ts","size":7595,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/inlinecontent.ts","size":363,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/styles.ts","size":1075,"chunks":["a1ee98a"]},{"name":"./src/docx/defaultSchema/index.ts","size":203,"chunks":["a1ee98a"]},{"name":"../../shared/api/corsProxy.ts","size":139,"chunks":["a1ee98a"]},{"name":"../../shared/util/fileUtil.ts","size":214,"chunks":["a1ee98a"]},{"name":"./src/docx/docxExporter.ts","size":5471,"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/GeistMono-Regular.ttf","size":155049,"chunks":["642be88"]},{"name":"../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js?commonjs-exports","size":16,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js?commonjs-exports","size":18,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","size":3969,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js?commonjs-exports","size":17,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js","size":2201,"chunks":["d3d6f02"]},{"name":"../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js","size":60535,"chunks":["d3d6f02"]},{"name":"./src/docx/template/word/styles.xml?raw","size":59368,"chunks":["714dba6"]}]}
package/package.json CHANGED
@@ -9,7 +9,7 @@
9
9
  "directory": "packages/xl-docx-exporter"
10
10
  },
11
11
  "license": "GPL-3.0 OR PROPRIETARY",
12
- "version": "0.42.0",
12
+ "version": "0.42.2",
13
13
  "files": [
14
14
  "dist",
15
15
  "types",
@@ -49,8 +49,8 @@
49
49
  }
50
50
  },
51
51
  "dependencies": {
52
- "@blocknote/core": "0.42.0",
53
- "@blocknote/xl-multi-column": "0.42.0",
52
+ "@blocknote/core": "0.42.2",
53
+ "@blocknote/xl-multi-column": "0.42.2",
54
54
  "buffer": "^6.0.3",
55
55
  "docx": "^9.5.1",
56
56
  "image-meta": "^0.2.2"
@@ -35,16 +35,25 @@ function blockPropsToStyles(
35
35
  ? undefined
36
36
  : {
37
37
  type: ShadingType.SOLID,
38
- color:
39
- colors[
40
- props.backgroundColor as keyof typeof colors
41
- ].background.slice(1),
38
+ color: (() => {
39
+ const color = colors[props.backgroundColor]?.background;
40
+ if (!color) {
41
+ return undefined;
42
+ }
43
+ return color.slice(1);
44
+ })(),
42
45
  },
43
46
  run:
44
47
  props.textColor === "default" || !props.textColor
45
48
  ? undefined
46
49
  : {
47
- color: colors[props.textColor as keyof typeof colors].text.slice(1),
50
+ color: (() => {
51
+ const color = colors[props.textColor]?.text;
52
+ if (!color) {
53
+ return undefined;
54
+ }
55
+ return color.slice(1);
56
+ })(),
48
57
  },
49
58
  alignment:
50
59
  !props.textAlignment || props.textAlignment === "left"
@@ -43,11 +43,13 @@ export const docxStyleMappingForDefaultSchema: StyleMapping<
43
43
  if (!val) {
44
44
  return {};
45
45
  }
46
+ const color = exporter.options.colors[val]?.background;
47
+ if (!color) {
48
+ return {};
49
+ }
46
50
  return {
47
51
  shading: {
48
- fill: exporter.options.colors[
49
- val as keyof typeof exporter.options.colors
50
- ].background.slice(1),
52
+ fill: color.slice(1),
51
53
  },
52
54
  };
53
55
  },
@@ -55,11 +57,12 @@ export const docxStyleMappingForDefaultSchema: StyleMapping<
55
57
  if (!val) {
56
58
  return {};
57
59
  }
60
+ const color = exporter.options.colors[val]?.text;
61
+ if (!color) {
62
+ return {};
63
+ }
58
64
  return {
59
- color:
60
- exporter.options.colors[
61
- val as keyof typeof exporter.options.colors
62
- ].text.slice(1),
65
+ color: color.slice(1),
63
66
  };
64
67
  },
65
68
  code: (val) => {
@@ -55,11 +55,15 @@ export const Table = (
55
55
  ? undefined
56
56
  : {
57
57
  type: ShadingType.SOLID,
58
- color:
59
- t.options.colors[
60
- cell.props
61
- .backgroundColor as keyof typeof t.options.colors
62
- ].background.slice(1),
58
+ color: (() => {
59
+ const color =
60
+ t.options.colors[cell.props.backgroundColor]
61
+ ?.background;
62
+ if (!color) {
63
+ return undefined;
64
+ }
65
+ return color.slice(1);
66
+ })(),
63
67
  },
64
68
  children: [
65
69
  new Paragraph({
@@ -88,9 +92,14 @@ export const Table = (
88
92
  color:
89
93
  cell.props.textColor === "default" || !cell.props.textColor
90
94
  ? undefined
91
- : t.options.colors[
92
- cell.props.textColor as keyof typeof t.options.colors
93
- ].text.slice(1),
95
+ : (() => {
96
+ const color =
97
+ t.options.colors[cell.props.textColor]?.text;
98
+ if (!color) {
99
+ return undefined;
100
+ }
101
+ return color.slice(1);
102
+ })(),
94
103
  },
95
104
  }),
96
105
  ],