UNPKG

@mdast2docx/image

Version:

MDAST to DOCX plugin for resolving and embedding images. Supports base64, URLs, and custom resolvers for seamless DOCX image integration.

2 lines (1 loc) 2.91 kB
"use strict";var y=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var T=(t,e)=>{for(var i in e)y(t,i,{get:e[i],enumerable:!0})},D=(t,e,i,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(e))!E.call(t,r)&&r!==i&&y(t,r,{get:()=>e[r],enumerable:!(n=S(e,r))||n.enumerable});return t};var P=t=>D(y({},"__esModule",{value:!0}),t);var O={};T(O,{fixGeneratedSvg:()=>$,handleSvg:()=>A});module.exports=P(O);var v=null,I=!1,x=async t=>(!v&&t.placeholder&&!I?(I=!0,v=await t.imageResolver(t.placeholder,t)):v={type:"gif",data:"",transformation:{width:200,height:200}},v);var C=t=>new Promise((e,i)=>{let n=new Blob([t],{type:"image/svg+xml"}),r=new FileReader;r.onloadend=()=>e(r.result),r.onerror=i,r.readAsDataURL(n)}),M=(t,e)=>new Promise((i,n)=>{let r=document.createElement("div");r.innerHTML=t,r.style="width:100%;height:100%;position:absolute;",e.appendChild(r);let a=r.querySelector("svg");if(!a||a.nodeType!==1)return n(new Error("No or invalid <svg> found"));requestAnimationFrame(()=>{try{let o=a.getBBox(),c=parseFloat(getComputedStyle(a).width)||0,p=parseFloat(getComputedStyle(a).height)||0,s=4,g=o.x-s,m=o.y-s,l=o.width+s*2,d=o.height+s*2,f=c>0?Math.min(l,c):l,w=p>0?Math.min(d,p):d,u=a.cloneNode(!0);u.setAttribute("viewBox",`${g} ${m} ${l} ${d}`),u.setAttribute("width",`${f}`),u.setAttribute("height",`${w}`),u.removeAttribute("style");let F=new XMLSerializer().serializeToString(u);r.remove(),i({svg:F,scale:Math.min(l/c,d/p,1)})}catch(o){r.remove(),n(o)}})}),h,H=t=>(h||(h=document.createElement("div"),h.style=`height:${t.maxH}in;width:${t.maxW}in;position:absolute;left:-2500vw;`,document.body.appendChild(h),t.dpi=parseFloat(getComputedStyle(h).width)/t.maxW),h),$=(t,e)=>e.diagramType==="pie"?t.replace(".pieTitleText{text-anchor:middle;",".pieTitleText{").replace(/<text[^>]*class="pieTitleText"[^>]*>(.*?)<\/text>/,(i,n)=>i.replace(n,n.replace(/^"|"$/g,"")).replace(/ x=".*?"/,' x="-20%"')):t,A=async(t,e)=>{let i=t.value,n,r=!1;if(typeof i=="string")n=i;else{let a=await i;if(!a)return x(e);n=a.svg,r=a.diagramType==="gantt",n=e.fixGeneratedSvg(n,a)}try{let a=new Image,o=H(e);o.appendChild(a);let c=r||!n?{svg:n,scale:1}:await M(n,o),p=await C(c.svg);a.src=p,await new Promise(w=>a.onload=w),r&&(e.scale=Math.max(e.scale,Math.floor(Math.min(innerWidth/a.width,innerHeight/a.height))));let s=a.width*e.scale,g=a.height*e.scale,m=document.createElement("canvas"),l=m.getContext("2d");if(!l)throw new Error("Canvas context not available");m.width=s,m.height=g,l.drawImage(a,0,0,s,g);let d=m.toDataURL(`image/${e.fallbackImageType}`);a.remove();let f=Math.min(e.maxW*e.dpi/s,e.maxH*e.dpi/g,1)*c.scale;return{type:e.fallbackImageType,data:d,transformation:{width:s*f,height:g*f}}}catch(a){return console.error("Error resolving SVG image: ",a),x(e)}};0&&(module.exports={fixGeneratedSvg,handleSvg});