@silurus/ooxml 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ function e(e,t,n,r,i,a){for(let o of t){let t=0,s=0;for(let c of o)switch(c.cmd){case`moveTo`:e.moveTo(n+c.x*i,r+c.y*a),t=c.x,s=c.y;break;case`lineTo`:e.lineTo(n+c.x*i,r+c.y*a),t=c.x,s=c.y;break;case`cubicBezTo`:e.bezierCurveTo(n+c.x1*i,r+c.y1*a,n+c.x2*i,r+c.y2*a,n+c.x*i,r+c.y*a),t=c.x,s=c.y;break;case`arcTo`:{let o=c.wr*i,l=c.hr*a;if(o<=0||l<=0)break;let u=c.stAng*Math.PI/180,d=c.swAng*Math.PI/180,f=n+t*i,p=r+s*a,m=f-o*Math.cos(u),h=p-l*Math.sin(u),g=u+d;e.ellipse(m,h,o,l,0,u,g,d<0),t=(m+o*Math.cos(g)-n)/i,s=(h+l*Math.sin(g)-r)/a;break}case`close`:e.closePath();break}}}var t={pct5:[0,16,0,0,0,1,0,0],pct10:[136,0,34,0,136,0,34,0],pct20:[136,34,136,34,136,34,136,34],pct25:[136,85,34,85,136,85,34,85],pct30:[170,85,170,85,170,85,170,85],pct40:[170,119,170,221,170,119,170,221],pct50:[170,85,170,85,170,85,170,85],pct60:[221,85,119,85,221,85,119,85],pct70:[238,85,187,85,238,85,187,85],pct75:[238,170,187,170,238,170,187,170],pct80:[254,239,251,191,254,239,251,191],pct90:[255,239,255,251,255,239,255,251],horz:[255,0,0,0,255,0,0,0],vert:[136,136,136,136,136,136,136,136],ltHorz:[0,255,0,0,0,0,0,0],ltVert:[32,32,32,32,32,32,32,32],dkHorz:[255,255,0,0,255,255,0,0],dkVert:[204,204,204,204,204,204,204,204],narHorz:[255,0,255,0,255,0,255,0],narVert:[170,170,170,170,170,170,170,170],cross:[255,136,136,136,255,136,136,136],lgGrid:[255,128,128,128,128,128,128,128],smGrid:[255,136,136,136,255,136,136,136],dotGrid:[136,0,0,0,136,0,0,0],dnDiag:[128,64,32,16,8,4,2,1],upDiag:[1,2,4,8,16,32,64,128],ltDnDiag:[136,68,34,17,136,68,34,17],ltUpDiag:[17,34,68,136,17,34,68,136],dkDnDiag:[195,129,0,129,195,129,0,129],dkUpDiag:[195,129,0,129,195,129,0,129],wdDnDiag:[128,64,32,16,8,4,2,129],wdUpDiag:[1,2,4,8,16,32,64,129],diagCross:[129,66,36,24,24,36,66,129],horzBrick:[255,16,16,16,255,1,1,1],diagBrick:[129,66,36,24,36,66,129,0],lgCheck:[240,240,240,240,15,15,15,15],smCheck:[204,204,51,51,204,204,51,51],trellis:[165,90,165,90,165,90,165,90]};function n(e,n,a){let o=t[e];if(!o)return null;let s=r(8,8);if(!s)return null;let c=s.getContext(`2d`);if(!c)return null;c.fillStyle=i(a),c.fillRect(0,0,8,8),c.fillStyle=i(n);for(let e=0;e<8;e++){let t=o[e];for(let n=0;n<8;n++)t&1<<7-n&&c.fillRect(n,e,1,1)}return s}function r(e,t){if(typeof OffscreenCanvas<`u`)return new OffscreenCanvas(e,t);if(typeof document<`u`){let n=document.createElement(`canvas`);return n.width=e,n.height=t,n}return null}function i(e){return`rgba(${parseInt(e.slice(0,2),16)},${parseInt(e.slice(2,4),16)},${parseInt(e.slice(4,6),16)},${e.length>=8?parseInt(e.slice(6,8),16)/255:1})`}function a(e,t=1){return`rgba(${parseInt(e.slice(0,2),16)},${parseInt(e.slice(2,4),16)},${parseInt(e.slice(4,6),16)},${e.length>=8?parseInt(e.slice(6,8),16)/255:t})`}function o(e,t,n,r,i,o){if(!e||e.fillType===`none`)return null;if(e.fillType===`solid`)return a(e.color);if(e.fillType===`pattern`)return c(e,t);if(e.fillType===`gradient`){let s=e.stops;if(s.length===0)return null;if(s.length===1)return a(s[0].color);let c;if(e.gradType===`radial`){let e=n+i/2,a=r+o/2,s=Math.sqrt(i*i+o*o)/2;c=t.createRadialGradient(e,a,0,e,a,s)}else{let a=e.angle*Math.PI/180,s=n+i/2,l=r+o/2,u=(Math.abs(Math.cos(a))*i+Math.abs(Math.sin(a))*o)/2;c=t.createLinearGradient(s-Math.cos(a)*u,l-Math.sin(a)*u,s+Math.cos(a)*u,l+Math.sin(a)*u)}for(let e of s)c.addColorStop(Math.min(1,Math.max(0,e.position)),a(e.color));return c}return null}var s=new WeakMap;function c(e,t){let r=`${e.preset}|${e.fg}|${e.bg}`,i=s.get(t);i||(i=new Map,s.set(t,i));let o=i.get(r);if(o)return o;let c=n(e.preset,e.fg,e.bg);if(!c)return a(e.fg);let l=t.createPattern(c,`repeat`);return l?(i.set(r,l),l):a(e.fg)}var l={dash:[6,3],dot:[1.5,3],dashDot:[6,3,1.5,3],lgDash:[10,4],lgDashDot:[10,4,1.5,4],lgDashDotDot:[10,4,1.5,4,1.5,4],sysDash:[4,2],sysDot:[1,2],sysDashDot:[4,2,1,2]};function u(e,t,n){if(!t){e.strokeStyle=`transparent`,e.lineWidth=0,e.setLineDash([]);return}e.strokeStyle=a(t.color);let r=Math.max(.5,t.width*n);e.lineWidth=r;let i=t.dashStyle?l[t.dashStyle]:null;e.setLineDash(i?i.map(e=>e*r):[])}function d(e,t,n,r,i,a,o,s=-Math.PI/2){let c=a*2;for(let l=0;l<c;l++){let c=s+l*Math.PI/a,u=l%2==0?1:o,d=t+r*u*Math.cos(c),f=n+i*u*Math.sin(c);l===0?e.moveTo(d,f):e.lineTo(d,f)}e.closePath()}function f(e,t,n,r,i,a,o=-Math.PI/2){for(let s=0;s<a;s++){let c=o+s*2*Math.PI/a,l=t+r*Math.cos(c),u=n+i*Math.sin(c);s===0?e.moveTo(l,u):e.lineTo(l,u)}e.closePath()}function p(e,t,n,r,i,a,o){let s=e=>Math.atan2(r*Math.sin(e),i*Math.cos(e)),c=s(a),l=s(a+o),u=t-r*Math.cos(c),d=n-i*Math.sin(c);return e.ellipse(u,d,Math.abs(r),Math.abs(i),0,c,l,o<0),{x:u+r*Math.cos(l),y:d+i*Math.sin(l)}}function m(e,t,n,r,i,a,o=null,s=null,c=null,l=null){let u=n+i/2,m=r+a/2;switch(t){case`ellipse`:case`oval`:e.ellipse(u,m,i/2,a/2,0,0,Math.PI*2);break;case`rtriangle`:e.moveTo(n,r+a),e.lineTo(n+i,r+a),e.lineTo(n,r),e.closePath();break;case`triangle`:{let t=n+(o??5e4)/1e5*i;e.moveTo(t,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break}case`diamond`:e.moveTo(u,r),e.lineTo(n+i,m),e.lineTo(u,r+a),e.lineTo(n,m),e.closePath();break;case`parallelogram`:{let t=i*Math.min(.5,(o??25e3)/1e5);e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i-t,r+a),e.lineTo(n,r+a),e.closePath();break}case`trapezoid`:{let t=Math.min(i,a),s=Math.min(i/2,(o??25e3)/1e5*t);e.moveTo(n+s,r),e.lineTo(n+i-s,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break}case`roundrect`:case`roundrectangle`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.roundRect(n,r,i,a,t);break}case`pentagon`:f(e,u,m,i/2,a/2,5);break;case`hexagon`:f(e,u,m,i/2,a/2,6,0);break;case`heptagon`:f(e,u,m,i/2,a/2,7);break;case`octagon`:f(e,u,m,i/2,a/2,8,-Math.PI/8);break;case`decagon`:f(e,u,m,i/2,a/2,10);break;case`dodecagon`:f(e,u,m,i/2,a/2,12);break;case`star4`:d(e,u,m,i/2,a/2,4,(o??12500)/5e4);break;case`star5`:case`star`:d(e,u,m,i/2,a/2,5,(o??19098)/5e4);break;case`star6`:d(e,u,m,i/2,a/2,6,(o??28868)/5e4,0);break;case`star7`:d(e,u,m,i/2,a/2,7,(o??34142)/5e4);break;case`star8`:d(e,u,m,i/2,a/2,8,(o??37500)/5e4,-Math.PI/2);break;case`star10`:d(e,u,m,i/2,a/2,10,(o??41421)/5e4);break;case`star12`:d(e,u,m,i/2,a/2,12,(o??37500)/5e4,0);break;case`star16`:d(e,u,m,i/2,a/2,16,(o??37500)/5e4,-Math.PI/2);break;case`star24`:d(e,u,m,i/2,a/2,24,(o??37500)/5e4,0);break;case`star32`:d(e,u,m,i/2,a/2,32,(o??37500)/5e4,-Math.PI/2);break;case`rightarrow`:{let t=a*Math.min(1,(o??5e4)/1e5),c=i*Math.min(1,(s??5e4)/1e5),l=r+(a-t)/2;e.moveTo(n,l),e.lineTo(n+i-c,l),e.lineTo(n+i-c,r),e.lineTo(n+i,m),e.lineTo(n+i-c,r+a),e.lineTo(n+i-c,l+t),e.lineTo(n,l+t),e.closePath();break}case`leftarrow`:{let t=a*Math.min(1,(o??5e4)/1e5),c=i*Math.min(1,(s??5e4)/1e5),l=r+(a-t)/2;e.moveTo(n+i,l),e.lineTo(n+c,l),e.lineTo(n+c,r),e.lineTo(n,m),e.lineTo(n+c,r+a),e.lineTo(n+c,l+t),e.lineTo(n+i,l+t),e.closePath();break}case`uparrow`:{let t=i*Math.min(1,(o??5e4)/1e5),c=a*Math.min(1,(s??5e4)/1e5),l=n+(i-t)/2;e.moveTo(u,r),e.lineTo(n+i,r+c),e.lineTo(l+t,r+c),e.lineTo(l+t,r+a),e.lineTo(l,r+a),e.lineTo(l,r+c),e.lineTo(n,r+c),e.closePath();break}case`downarrow`:{let t=i*Math.min(1,(o??5e4)/1e5),c=a*Math.min(1,(s??5e4)/1e5),l=n+(i-t)/2;e.moveTo(u,r+a),e.lineTo(n+i,r+a-c),e.lineTo(l+t,r+a-c),e.lineTo(l+t,r),e.lineTo(l,r),e.lineTo(l,r+a-c),e.lineTo(n,r+a-c),e.closePath();break}case`leftrightarrow`:{let t=a*Math.min(1,(o??5e4)/1e5),c=i*Math.min(.5,(s??25e3)/1e5),l=r+(a-t)/2;e.moveTo(n,m),e.lineTo(n+c,r),e.lineTo(n+c,l),e.lineTo(n+i-c,l),e.lineTo(n+i-c,r),e.lineTo(n+i,m),e.lineTo(n+i-c,r+a),e.lineTo(n+i-c,l+t),e.lineTo(n+c,l+t),e.lineTo(n+c,r+a),e.closePath();break}case`updownarrow`:{let t=i*Math.min(1,(o??5e4)/1e5),c=a*Math.min(.5,(s??25e3)/1e5),l=n+(i-t)/2;e.moveTo(u,r),e.lineTo(n+i,r+c),e.lineTo(l+t,r+c),e.lineTo(l+t,r+a-c),e.lineTo(n+i,r+a-c),e.lineTo(u,r+a),e.lineTo(n,r+a-c),e.lineTo(l,r+a-c),e.lineTo(l,r+c),e.lineTo(n,r+c),e.closePath();break}case`notchedrightarrow`:{let t=a*Math.min(1,(o??5e4)/1e5),c=i*Math.min(1,(s??35e3)/1e5),l=r+(a-t)/2,u=c*.43;e.moveTo(n,l),e.lineTo(n+i-c,l),e.lineTo(n+i-c,r),e.lineTo(n+i,m),e.lineTo(n+i-c,r+a),e.lineTo(n+i-c,l+t),e.lineTo(n,l+t),e.lineTo(n+u,m),e.closePath();break}case`chevron`:{let t=i*Math.min(1,Math.max(0,(o??5e4)/1e5));e.moveTo(n,r),e.lineTo(n+t,r),e.lineTo(n+i,m),e.lineTo(n+t,r+a),e.lineTo(n,r+a),t>0&&e.lineTo(n+t,m),e.closePath();break}case`homeplate`:{let t=a*.4;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.lineTo(u,r+a),e.lineTo(n,r+a-t),e.closePath();break}case`leftbracket`:{let t=Math.min(a*Math.min(5e4,Math.max(0,o??8333))/1e5,a/2);e.moveTo(n+i,r),e.quadraticCurveTo(n,r,n,r+t),a-2*t>.5&&e.lineTo(n,r+a-t),e.quadraticCurveTo(n,r+a,n+i,r+a);break}case`rightbracket`:{let t=Math.min(a*Math.min(5e4,Math.max(0,o??8333))/1e5,a/2);e.moveTo(n,r),e.quadraticCurveTo(n+i,r,n+i,r+t),a-2*t>.5&&e.lineTo(n+i,r+a-t),e.quadraticCurveTo(n+i,r+a,n,r+a);break}case`leftbrace`:{let t=m,o=i*.45;e.moveTo(n+i,r),e.bezierCurveTo(n+i-o,r,n+i-o,t-a*.08,n,t),e.bezierCurveTo(n+i-o,t+a*.08,n+i-o,r+a,n+i,r+a);break}case`rightbrace`:{let t=m,o=i*.45;e.moveTo(n,r),e.bezierCurveTo(n+o,r,n+o,t-a*.08,n+i,t),e.bezierCurveTo(n+o,t+a*.08,n+o,r+a,n,r+a);break}case`callout1`:case`callout2`:case`callout3`:case`bordercallout1`:case`bordercallout2`:case`bordercallout3`:case`accentcallout1`:case`accentcallout2`:case`accentcallout3`:case`accentbordercallout1`:case`accentbordercallout2`:case`accentbordercallout3`:{let u=(o===null?44150:o)/1e5,d=(s===null?98050:s)/1e5,f=(c===null?5e4:c)/1e5,p=(l===null?115e3:l)/1e5,m=n+Math.max(0,Math.min(1,u))*i,h=r+Math.max(0,Math.min(1,d))*a,g=n+f*i,_=r+p*a;if(e.rect(n,r,i,a),t.startsWith(`accent`)){let t=n+i*.08;e.moveTo(t,r),e.lineTo(t,r+a)}e.moveTo(m,h),e.lineTo(g,_);break}case`wedgerectcallout`:{e.rect(n,r,i,a*.8);let t=n+i*.2,o=r+a;e.moveTo(n+i*.1,r+a*.8),e.lineTo(t,o),e.lineTo(n+i*.3,r+a*.8),e.closePath();break}case`wedgeellipsecallout`:{let t=(o??-2e4)/1e5*i,n=(s??12e4)/1e5*a,r=u+t,c=m+n;e.ellipse(u,m,i/2,a/2,0,0,Math.PI*2);let l=Math.atan2(n,t),d=Math.PI/10,f=i/2,p=a/2,h=u+f*Math.cos(l-d),g=m+p*Math.sin(l-d),_=u+f*Math.cos(l+d),v=m+p*Math.sin(l+d);e.moveTo(h,g),e.lineTo(r,c),e.lineTo(_,v),e.closePath();break}case`cloudcallout`:{let t=Math.min(i,a)*.22,n=[[u-i*.25,r+a*.35],[u-i*.1,r+a*.15],[u+i*.1,r+a*.1],[u+i*.28,r+a*.2],[u+i*.35,r+a*.4]];e.moveTo(n[0][0]-t,n[0][1]);for(let[r,i]of n)e.arc(r,i,t,Math.PI,0);e.arc(u,r+a*.65,i*.45,0,Math.PI),e.closePath();let c=u+(o??-2e4)/1e5*i,l=m+(s??12e4)/1e5*a;e.moveTo(u+i*.05,r+a*.8),e.arc(c,l,Math.min(i,a)*.07,0,Math.PI*2);break}case`line`:case`straightconnector1`:case`bentconnector2`:case`bentconnector3`:case`bentconnector4`:case`bentconnector5`:case`curvedconnector2`:case`curvedconnector3`:case`curvedconnector4`:case`curvedconnector5`:e.moveTo(n,r),e.lineTo(n+i,r+a);break;case`heart`:e.moveTo(u,r+a*.32),e.bezierCurveTo(u,r,n+i*.05,r,n,r+a*.3),e.bezierCurveTo(n,r+a*.68,u-i*.05,r+a*.78,u,r+a),e.bezierCurveTo(u+i*.05,r+a*.78,n+i,r+a*.68,n+i,r+a*.3),e.bezierCurveTo(n+i-i*.05,r,u,r,u,r+a*.32);break;case`donut`:{let t=i/2,n=a/2,r=Math.min(t,n)*(o??25e3)/1e5,s=t-r,c=n-r;e.ellipse(u,m,t,n,0,0,Math.PI*2,!1),e.moveTo(u+s,m),e.ellipse(u,m,s,c,0,0,Math.PI*2,!0);break}case`nosmoking`:case`nosmokingsign`:{let t=(o??18750)/1e5,n=i/2,r=a/2,s=n*(1-2*t),c=r*(1-2*t);e.ellipse(u,m,n,r,0,0,Math.PI*2,!1),e.moveTo(u+s,m),e.ellipse(u,m,s,c,0,0,Math.PI*2,!0),e.moveTo(u+s,m),e.ellipse(u,m,s,c,0,0,Math.PI/2,!1),e.lineTo(u-s,m),e.ellipse(u,m,s,c,0,Math.PI,3*Math.PI/2,!1),e.closePath();break}case`pie`:case`pieWedge`:{let t=(o??0)/216e5*Math.PI*2,n=(s??162e5)/216e5*Math.PI*2;e.moveTo(u,m),e.arc(u,m,Math.min(i,a)/2,t,n),e.closePath();break}case`cloud`:{let t=a*.28;e.arc(n+i*.25,r+a*.55,t,Math.PI,Math.PI*1.8),e.arc(n+i*.45,r+a*.35,t*1.1,Math.PI*1.3,Math.PI*1.9),e.arc(n+i*.65,r+a*.4,t,Math.PI*1.5,Math.PI*2),e.arc(n+i*.8,r+a*.6,t*.9,Math.PI*1.6,Math.PI*.1),e.arc(n+i*.55,r+a*.75,t,0,Math.PI*.7),e.arc(n+i*.25,r+a*.7,t*.9,0,Math.PI),e.closePath();break}case`funnel`:e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(u+i*.15,r+a),e.lineTo(u-i*.15,r+a),e.closePath();break;case`smileyface`:{e.ellipse(u,m,i/2,a/2,0,0,Math.PI*2),e.closePath();let t=i*.05,n=a*.05,r=m-a*.12;e.moveTo(u-i*.2+t,r),e.ellipse(u-i*.2,r,t,n,0,0,Math.PI*2),e.moveTo(u+i*.2+t,r),e.ellipse(u+i*.2,r,t,n,0,0,Math.PI*2),e.moveTo(u-i*.25,m+a*.05),e.quadraticCurveTo(u,m+a*.3,u+i*.25,m+a*.05);break}case`document`:case`foldedcorner`:{let t=Math.min(i,a)*.15;e.moveTo(n,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+t),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath(),e.moveTo(n+i-t,r),e.lineTo(n+i-t,r+t),e.lineTo(n+i,r+t);break}case`snip1rect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+t),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break}case`snip2samerect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+t),e.lineTo(n+i,r+a),e.lineTo(n+t,r+a),e.lineTo(n,r+a-t),e.closePath();break}case`snip2diagrect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+t),e.lineTo(n+i,r+a-t),e.lineTo(n+i-t,r+a),e.lineTo(n+t,r+a),e.lineTo(n,r+a-t),e.lineTo(n,r+t),e.closePath();break}case`snipRoundRect`:case`sniproundrect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+t),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.quadraticCurveTo(n,r,n+t,r),e.closePath();break}case`round1rect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.lineTo(n,r+t),e.quadraticCurveTo(n,r,n+t,r),e.closePath();break}case`round2samerect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.quadraticCurveTo(n+i,r,n+i,r+t),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.lineTo(n,r+t),e.quadraticCurveTo(n,r,n+t,r),e.closePath();break}case`round2diagrect`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.quadraticCurveTo(n+i,r+a,n+i-t,r+a),e.lineTo(n,r+a),e.lineTo(n,r+t),e.quadraticCurveTo(n,r,n+t,r),e.closePath();break}case`plaque`:{let t=Math.min(i,a)*.25;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.quadraticCurveTo(n+i,r,n+i,r+t),e.lineTo(n+i,r+a-t),e.quadraticCurveTo(n+i,r+a,n+i-t,r+a),e.lineTo(n+t,r+a),e.quadraticCurveTo(n,r+a,n,r+a-t),e.lineTo(n,r+t),e.quadraticCurveTo(n,r,n+t,r),e.closePath();break}case`can`:{let t=a*.1;e.ellipse(u,r+t,i/2,t,0,0,Math.PI*2),e.moveTo(n,r+t),e.lineTo(n,r+a-t),e.ellipse(u,r+a-t,i/2,t,0,Math.PI,2*Math.PI),e.lineTo(n+i,r+t);break}case`cube`:{let t=Math.min(i,a)*.2;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.lineTo(n+i-t,r+a),e.lineTo(n,r+a),e.lineTo(n,r+t),e.closePath(),e.moveTo(n+t,r),e.lineTo(n+t,r+t),e.lineTo(n+i-t,r+t),e.moveTo(n+t,r+t),e.lineTo(n,r+t);break}case`bevel`:{let t=Math.min(i,a)*.1;e.rect(n,r,i,a),e.moveTo(n,r),e.lineTo(n+t,r+t),e.lineTo(n+i-t,r+t),e.lineTo(n+i,r),e.moveTo(n+i-t,r+t),e.lineTo(n+i-t,r+a-t),e.lineTo(n+i,r+a),e.moveTo(n+i-t,r+a-t),e.lineTo(n+t,r+a-t),e.lineTo(n,r+a),e.moveTo(n+t,r+a-t),e.lineTo(n+t,r+t);break}case`halfframe`:{let t=Math.min(i,a)*.25;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+t),e.lineTo(n+t,r+t),e.lineTo(n+t,r+a),e.lineTo(n,r+a),e.closePath();break}case`corner`:{let t=Math.min(i,a)*.25;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+t),e.lineTo(n+t,r+t),e.lineTo(n+t,r+a),e.lineTo(n,r+a),e.closePath();break}case`irregularSeal1`:case`irregularseal1`:[[10800,5800],[14522,0],[14155,5325],[18380,4457],[16702,7315],[21097,8137],[17607,10475],[21600,13290],[16837,12942],[18145,18095],[14020,14457],[13247,19737],[10532,14935],[8485,21600],[7715,15627],[4762,17617],[5667,13937],[135,14587],[3722,11775],[0,8615],[4627,7617],[370,2295],[7312,6320],[8352,2295]].forEach(([t,o],s)=>{let c=n+i*t/21600,l=r+a*o/21600;s===0?e.moveTo(c,l):e.lineTo(c,l)}),e.closePath();break;case`irregularSeal2`:case`irregularseal2`:[[11462,4342],[14790,0],[14525,5777],[18007,3172],[16380,6532],[21600,6645],[16985,9402],[18270,11290],[16380,12310],[18877,15632],[14640,14350],[14942,17370],[12180,15935],[11612,18842],[9872,17370],[8700,19712],[7527,18125],[4917,21600],[4805,18240],[1285,17825],[3330,15370],[0,12877],[3935,11592],[1172,8270],[5372,7817],[4502,3625],[8550,6382],[9722,1887]].forEach(([t,o],s)=>{let c=n+i*t/21600,l=r+a*o/21600;s===0?e.moveTo(c,l):e.lineTo(c,l)}),e.closePath();break;case`flowchartalternateprocess`:case`flowchartprocess`:{let t=Math.min(i,a)*Math.min(5e4,Math.max(0,o??16667))/1e5;e.roundRect(n,r,i,a,[{x:t,y:t}]);break}case`flowchartdecision`:e.moveTo(u,r),e.lineTo(n+i,m),e.lineTo(u,r+a),e.lineTo(n,m),e.closePath();break;case`flowchartterminator`:{let t=Math.min(i,a)/2;e.roundRect(n,r,i,a,[{x:t,y:t}]);break}case`flowchartdocument`:{let t=a*.1;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.bezierCurveTo(n+i*.75,r+a,n+i*.25,r+a-t*2,n,r+a-t),e.closePath();break}case`flowchartpredefinedprocess`:{let t=i*.1;e.rect(n,r,i,a),e.moveTo(n+t,r),e.lineTo(n+t,r+a),e.moveTo(n+i-t,r),e.lineTo(n+i-t,r+a);break}case`flowchartsort`:e.moveTo(u,r),e.lineTo(n+i,m),e.lineTo(u,r+a),e.lineTo(n,m),e.closePath(),e.moveTo(n,m),e.lineTo(n+i,m);break;case`flowchartmanualinput`:{let t=a*.2;e.moveTo(n,r+t),e.lineTo(n+i,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break}case`moon`:e.arc(u,m,Math.min(i,a)/2,-Math.PI/2,Math.PI/2),e.arc(u-i*.2,m,Math.min(i,a)/2,Math.PI/2,-Math.PI/2,!0),e.closePath();break;case`arc`:{let t=216e5,n=(o??162e5)/t*Math.PI*2,r=(s??54e5)/t*Math.PI*2;e.ellipse(u,m,i/2,a/2,0,n,n+r,r<0);break}case`mathequal`:{let t=Math.min(36745,Math.max(0,o??23520)),n=1e5-2*t,r=Math.min(n,Math.max(0,s??11760)),c=a*t/1e5,l=a*r/2e5,d=i*73490/2e5,f=u-d,p=u+d,h=m-l,g=m+l,_=h-c,v=g+c;e.rect(f,_,p-f,h-_),e.rect(f,g,p-f,v-g);break}case`mathmultiply`:{let t=Math.min(i,a)*Math.min(51965,Math.max(0,o??23520))/1e5,s=Math.atan2(a,i),c=Math.sin(s),l=Math.cos(s),u=t/2*c,d=t/2*l;e.moveTo(n+u,r-d),e.lineTo(n-u,r+d),e.lineTo(n+i-u,r+a+d),e.lineTo(n+i+u,r+a-d),e.closePath(),e.moveTo(n+i-u,r-d),e.lineTo(n+i+u,r+d),e.lineTo(n+u,r+a+d),e.lineTo(n-u,r+a-d),e.closePath();break}case`mathplus`:{let t=Math.min(73490,Math.max(0,o??23520)),n=i*73490/2e5,r=a*73490/2e5,s=Math.min(i,a)*t/2e5,c=u-n,l=u+n,d=m-r,f=m+r,p=u-s,h=u+s,g=m-s,_=m+s;e.moveTo(c,g),e.lineTo(p,g),e.lineTo(p,d),e.lineTo(h,d),e.lineTo(h,g),e.lineTo(l,g),e.lineTo(l,_),e.lineTo(h,_),e.lineTo(h,f),e.lineTo(p,f),e.lineTo(p,_),e.lineTo(c,_),e.closePath();break}case`mathminus`:{let t=Math.min(1e5,Math.max(0,o??23520)),n=i*73490/2e5,r=a*t/2e5,s=u-n,c=u+n,l=m-r,d=m+r;e.rect(s,l,c-s,d-l);break}case`mathdivide`:{let t=Math.min(36745,Math.max(1e3,o??23520)),n=(73490+-t)/4,l=36745*i/a,d=Math.min(Math.min(n,l),Math.max(1e3,c??11760)),f=73490+4*d-t,p=Math.min(f,Math.max(0,s??5880)),h=a*t/2e5,g=a*p/1e5,_=a*d/1e5,v=i*73490/2e5,y=m-h,b=m+h,x=y-(g+_)-_,S=r+a-x,C=u-v,w=u+v;e.rect(C,y,w-C,b-y),e.moveTo(u+_,x+_),e.arc(u,x+_,_,0,Math.PI*2),e.moveTo(u+_,S-_),e.arc(u,S-_,_,0,Math.PI*2);break}case`quadarrow`:{let t=i*(o??23e3)/1e5,c=i*(s??3e4)/1e5,l=n+(i-t)/2,d=r+(a-t)/2;e.moveTo(u,r),e.lineTo(n+i-c,r+c),e.lineTo(n+i-c,d),e.lineTo(l+t,d),e.lineTo(l+t,r+c),e.lineTo(n+c,r+c),e.lineTo(n+i,m),e.lineTo(n+i-c,r+a-c),e.lineTo(l+t,r+a-c),e.lineTo(l+t,d+t),e.lineTo(n+i-c,d+t),e.lineTo(n+i-c,r+a-c),e.lineTo(u,r+a),e.lineTo(n+c,r+a-c),e.lineTo(n+c,d+t),e.lineTo(l,d+t),e.lineTo(l,r+a-c),e.lineTo(n,m),e.lineTo(n+c,r+c),e.lineTo(l,r+c),e.lineTo(l,d),e.lineTo(n+c,d),e.closePath();break}case`quadarrowcallout`:{let t=Math.min(i,a),d=Math.min(5e4,Math.max(0,s??18515)),f=d*2,p=Math.min(f,Math.max(0,o??18515)),h=5e4-d,g=Math.min(h,Math.max(0,c??18515)),_=1e5-2*g,v=Math.min(_,Math.max(p,l??48123)),y=t*d/1e5,b=t*p/2e5,x=t*g/1e5,S=i*v/2e5,C=a*v/2e5,w=u-S,T=u+S,E=u-y,D=u+y,O=u-b,k=u+b,A=n+i-x,j=m-C,M=m+C,N=m-y,P=m+y,F=m-b,I=m+b,L=r+a-x;e.moveTo(n,m),e.lineTo(n+x,N),e.lineTo(n+x,F),e.lineTo(w,F),e.lineTo(w,j),e.lineTo(O,j),e.lineTo(O,r+x),e.lineTo(E,r+x),e.lineTo(u,r),e.lineTo(D,r+x),e.lineTo(k,r+x),e.lineTo(k,j),e.lineTo(T,j),e.lineTo(T,F),e.lineTo(A,F),e.lineTo(A,N),e.lineTo(n+i,m),e.lineTo(A,P),e.lineTo(A,I),e.lineTo(T,I),e.lineTo(T,M),e.lineTo(k,M),e.lineTo(k,L),e.lineTo(D,L),e.lineTo(u,r+a),e.lineTo(E,L),e.lineTo(O,L),e.lineTo(O,M),e.lineTo(w,M),e.lineTo(w,I),e.lineTo(n+x,I),e.lineTo(n+x,P),e.closePath();break}case`wave`:{let t=a*(o??12500)/1e5,s=r+t,c=r+a-t;e.moveTo(n,s),e.bezierCurveTo(n+i*.25,r,n+i*.25,r+t*2,n+i*.5,s),e.bezierCurveTo(n+i*.75,r+t*2,n+i*.75,r,n+i,s),e.lineTo(n+i,c),e.bezierCurveTo(n+i*.75,r+a,n+i*.75,r+a-t*2,n+i*.5,c),e.bezierCurveTo(n+i*.25,r+a-t*2,n+i*.25,r+a,n,c),e.closePath();break}case`doublewave`:{let t=a*(o??6250)/1e5,s=r+t,c=r+a-t;e.moveTo(n,s),e.bezierCurveTo(n+i*.25,r,n+i*.25,r+t*2,n+i*.5,s),e.bezierCurveTo(n+i*.75,r+t*2,n+i*.75,r,n+i,s),e.lineTo(n+i,c),e.bezierCurveTo(n+i*.75,r+a,n+i*.75,r+a-t*2,n+i*.5,c),e.bezierCurveTo(n+i*.25,r+a-t*2,n+i*.25,r+a,n,c),e.closePath();break}case`sun`:{let t=Math.min(i,a)/2,n=t*((o??25e3)/1e5+.5),r=Math.min(n,t*.9),s=Math.PI/16;for(let n=0;n<8;n++){let i=n/8*Math.PI*2;e.moveTo(u+r*Math.cos(i-s),m+r*Math.sin(i-s)),e.lineTo(u+t*Math.cos(i),m+t*Math.sin(i)),e.lineTo(u+r*Math.cos(i+s),m+r*Math.sin(i+s)),e.closePath()}e.moveTo(u+r,m),e.arc(u,m,r,0,Math.PI*2);break}case`lightningbolt`:e.moveTo(u+i*.1,r),e.lineTo(n,m-a*.05),e.lineTo(u+i*.05,m-a*.05),e.lineTo(u-i*.1,r+a),e.lineTo(n+i,m+a*.05),e.lineTo(u-i*.05,m+a*.05),e.closePath();break;case`frame`:{let t=Math.min(i,a)*(o??12500)/1e5;e.rect(n,r,i,a),e.rect(n+t,r+t,i-2*t,a-2*t);break}case`bracketpair`:{let t=a*Math.min(5e4,Math.max(0,o??8333))/1e5;e.moveTo(n+i*.4,r),e.quadraticCurveTo(n,r,n,r+t),a-2*t>0&&e.lineTo(n,r+a-t),e.quadraticCurveTo(n,r+a,n+i*.4,r+a),e.moveTo(n+i*.6,r),e.quadraticCurveTo(n+i,r,n+i,r+t),a-2*t>0&&e.lineTo(n+i,r+a-t),e.quadraticCurveTo(n+i,r+a,n+i*.6,r+a);break}case`bracepair`:{let t=i*.2;e.moveTo(n+i*.4,r),e.bezierCurveTo(n+i*.4-t,r,n+i*.4-t,m-a*.08,n,m),e.bezierCurveTo(n+i*.4-t,m+a*.08,n+i*.4-t,r+a,n+i*.4,r+a),e.moveTo(n+i*.6,r),e.bezierCurveTo(n+i*.6+t,r,n+i*.6+t,m-a*.08,n+i,m),e.bezierCurveTo(n+i*.6+t,m+a*.08,n+i*.6+t,r+a,n+i*.6,r+a);break}case`chord`:{let t=(o??27e5)/216e5*Math.PI*2,n=(s??162e5)/216e5*Math.PI*2;e.ellipse(u,m,i/2,a/2,0,t,n),e.closePath();break}case`blockarc`:{let t=Math.min(i,a)/2,n=o??108e5,r=s??0,l=t*(1-(c??25e3)/1e5),d=n/216e5*Math.PI*2,f=r/216e5*Math.PI*2;e.arc(u,m,t,d,f,!1),e.arc(u,m,l,f,d,!0),e.closePath();break}case`teardrop`:{let t=Math.min(i,a)*.4,o=n+t,s=r+a-t;e.arc(o,s,t,0,Math.PI*2*.75),e.bezierCurveTo(o-t*.1,s-t,n+i-t,r+t,n+i,r),e.bezierCurveTo(n+i-t*.2,r+t*.5,o+t,s-t*1.1,o+t,s),e.closePath();break}case`diagstripe`:{let t=a*(o??5e4)/1e5*i/a;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i-t,r+a),e.lineTo(n,r+a),e.closePath();break}case`wedgeroundrectcallout`:{let t=Math.min(i,a)*.1;e.roundRect(n,r,i,a*.85,t),e.moveTo(n+i*.1,r+a*.85),e.lineTo(n+i*.2,r+a),e.lineTo(n+i*.3,r+a*.85),e.closePath();break}case`rightarrowcallout`:{let t=a*(o??5e4)/1e5,c=i*(s??5e4)/1e5,l=r+(a-t)/2;e.rect(n,l,c,t),e.moveTo(n+c,r),e.lineTo(n+i,m),e.lineTo(n+c,r+a),e.closePath();break}case`leftarrowcallout`:{let t=a*(o??5e4)/1e5,c=i*(s??5e4)/1e5,l=r+(a-t)/2;e.rect(n+i-c,l,c,t),e.moveTo(n+i-c,r),e.lineTo(n,m),e.lineTo(n+i-c,r+a),e.closePath();break}case`uparrowcallout`:{let t=i*(o??5e4)/1e5,c=a*(s??5e4)/1e5,l=n+(i-t)/2;e.rect(l,r+c,t,a-c),e.moveTo(n,r+c),e.lineTo(u,r),e.lineTo(n+i,r+c),e.closePath();break}case`downarrowcallout`:{let t=i*(o??5e4)/1e5,c=a*(s??5e4)/1e5,l=n+(i-t)/2;e.rect(l,r,t,a-c),e.moveTo(n,r+a-c),e.lineTo(u,r+a),e.lineTo(n+i,r+a-c),e.closePath();break}case`leftrightarrowcallout`:{let t=a*(o??5e4)/1e5,c=i*(s??25e3)/1e5,l=r+(a-t)/2;e.rect(n+c,l,i-2*c,t),e.moveTo(n+c,r),e.lineTo(n,m),e.lineTo(n+c,r+a),e.closePath(),e.moveTo(n+i-c,r),e.lineTo(n+i,m),e.lineTo(n+i-c,r+a),e.closePath();break}case`leftrightuparrow`:{let t=i*(o??25e3)/1e5,c=a*(s??3e4)/1e5,l=n+(i-t)/2;e.moveTo(u,r),e.lineTo(n+i,r+c),e.lineTo(l+t,r+c),e.lineTo(l+t,r+a),e.lineTo(l,r+a),e.lineTo(l,r+c),e.lineTo(n,r+c),e.closePath();break}case`leftuparrow`:{let t=Math.min(i,a),l=Math.min(5e4,Math.max(0,s??25e3)),u=l*2,d=Math.min(u,Math.max(0,o??25e3)),f=1e5-u,p=t*Math.min(f,Math.max(0,c??25e3))/1e5,m=t*l/5e4,h=i-m,g=a-m,_=t*l/1e5,v=i-_,y=a-_,b=t*d/2e5,x=v-b,S=v+b,C=y-b,w=y+b;e.moveTo(n,r+y),e.lineTo(n+p,r+g),e.lineTo(n+p,r+C),e.lineTo(n+x,r+C),e.lineTo(n+x,r+p),e.lineTo(n+h,r+p),e.lineTo(n+v,r),e.lineTo(n+i,r+p),e.lineTo(n+S,r+p),e.lineTo(n+S,r+w),e.lineTo(n+p,r+w),e.lineTo(n+p,r+a),e.closePath();break}case`uturnarrow`:{let t=i*(o??25e3)/1e5,s=(i-t)/2,c=Math.max(0,s-t),l=n+t+s,u=r+t+s,d=t*2,f=r+a-t*2.5;e.moveTo(n,r+a),e.lineTo(n,u),e.arc(l,u,s,Math.PI,0),e.lineTo(n+i,f),e.lineTo(n+i+(d-t)/2,f),e.lineTo(l+t/2,r+a),e.lineTo(n+i-(d-t)/2-t,f),e.lineTo(n+i-t,f),e.lineTo(n+i-t,u),e.arc(l,u,c,0,Math.PI,!0),e.lineTo(n+t,r+a),e.closePath();break}case`bentarrow`:case`bentuparrow`:{let t=Math.min(i,a)*.25;e.moveTo(n,m-t/2),e.lineTo(n+i-t*2,m-t/2),e.lineTo(n+i-t*2,r+t),e.lineTo(n+i,m),e.lineTo(n+i-t*2,r+a-t),e.lineTo(n+i-t*2,m+t/2),e.lineTo(n,m+t/2),e.closePath();break}case`plus`:{let t=Math.min(i,a)*(o??25e3)/1e5;e.rect(u-t,r,2*t,a),e.rect(n,m-t,i,2*t);break}case`mathnotequal`:{let t=Math.min(5e4,Math.max(0,o??23520)),n=Math.min(66e5,Math.max(42e5,s??66e5)),l=Math.min(1e5-2*t,Math.max(0,c??11760)),d=a*t/1e5,f=a*l/2e5,p=i*73490/2e5,h=a/2,g=(n/6e4-90)*Math.PI/180,_=h*Math.tan(g),v=Math.hypot(_,h)*d/h;e.rect(u-p,m-f-d,2*p,d),e.rect(u-p,m+f,2*p,d),e.moveTo(u+_-v/2,r),e.lineTo(u+_+v/2,r),e.lineTo(u-_+v/2,r+a),e.lineTo(u-_-v/2,r+a),e.closePath();break}case`flowchartconnector`:e.ellipse(u,m,i/2,a/2,0,0,Math.PI*2);break;case`flowchartdelay`:{let t=a/2;e.moveTo(n,r),e.lineTo(n+i-t,r),e.arc(n+i-t,m,t,-Math.PI/2,Math.PI/2),e.lineTo(n,r+a),e.closePath();break}case`flowchartdisplay`:{let t=i*.2,o=i*.15;e.moveTo(n+t,r),e.lineTo(n+i-o,r),e.arc(n+i-o,m,a/2,-Math.PI/2,Math.PI/2),e.lineTo(n+t,r+a),e.lineTo(n,m),e.closePath();break}case`flowchartinputoutput`:case`flowchartpunchedcard`:{let t=i*.2;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i-t,r+a),e.lineTo(n,r+a),e.closePath();break}case`flowchartmerge`:e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(u,r+a),e.closePath();break;case`flowchartextract`:e.moveTo(u,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break;case`flowchartoffpageconnector`:{let t=a*.3;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.lineTo(u,r+a),e.lineTo(n,r+a-t),e.closePath();break}case`flowchartonlinestorage`:case`flowchartmanuallabel`:case`flowchartpuncheddisk`:e.rect(n,r,i,a);break;case`horizontalscroll`:{let t=Math.min(i,a)*.15;e.roundRect(n+t,r,i-t,a,t),e.moveTo(n+t,r+t*2),e.arc(n+t,r+t,t,Math.PI/2,Math.PI*2.5);break}case`verticalscroll`:{let t=Math.min(i,a)*.15;e.roundRect(n,r+t,i,a-t,t),e.moveTo(n+t*2,r+t),e.arc(n+t,r+t,t,0,Math.PI*2);break}case`ribbon`:{let t=Math.min(33333,Math.max(0,o??16667)),c=i*Math.min(75e3,Math.max(25e3,s??5e4))/2e5,l=i/8,u=i/32,d=i/2-c,f=i/2+c,p=d+u,m=f-u,h=d+l,g=f-l,_=h-u,v=g+u,y=i-l,b=a*t/2e5,x=a*t/1e5,S=a-x,C=S/2;e.moveTo(n,r),e.lineTo(n+_,r),e.lineTo(n+p,r+b),e.lineTo(n+m,r+x),e.lineTo(n+v,r+b),e.lineTo(n+i,r),e.lineTo(n+y,r+C),e.lineTo(n+i,r+S),e.lineTo(n+f,r+S),e.lineTo(n+f,r+a),e.lineTo(n+p,r+a),e.lineTo(n+d,r+S),e.lineTo(n,r+S),e.lineTo(n+l,r+C),e.closePath();break}case`ribbon2`:{let t=Math.min(33333,Math.max(0,o??16667)),c=i*Math.min(75e3,Math.max(25e3,s??5e4))/2e5,l=i/8,u=i/32,d=i/2-c,f=i/2+c,p=d+u,m=f-u,h=d+l,g=f-l,_=h-u,v=g+u,y=i-l,b=a*t/2e5,x=a*t/1e5,S=a-b,C=a-x,w=x,T=(w+a)/2;e.moveTo(n,r+a),e.lineTo(n+_,r+a),e.lineTo(n+p,r+S),e.lineTo(n+m,r+C),e.lineTo(n+v,r+S),e.lineTo(n+i,r+a),e.lineTo(n+y,r+T),e.lineTo(n+i,r+w),e.lineTo(n+f,r+w),e.lineTo(n+f,r),e.lineTo(n+p,r),e.lineTo(n+d,r+w),e.lineTo(n,r+w),e.lineTo(n+l,r+T),e.closePath();break}case`ellipseribbon`:{let t=Math.min(1e5,Math.max(0,o??25e3)),l=Math.min(75e3,Math.max(25e3,s??5e4)),u=Math.max(0,t-(1e5-t)/2),d=Math.min(t,Math.max(u,c??12500)),f=i/8,p=i*l/2e5,m=i/2-p,h=m+f,g=i-h,_=i-m,v=i-f,y=a*d/1e5,b=4*y/i,x=b*(h-h*h/i),S=h/2,C=b*S,w=i-S,T=a*t/1e5,E=T-y,D=b*(m-m*m/i),O=D+E,k=y+E-O+y+E,A=a-T,j=(y*14/16+A)/2,M=D+A,N=O+A,P=m/2,F=b*P+A,I=i-P,L=k+A;e.moveTo(n,r),e.quadraticCurveTo(n+S,r+C,n+h,r+x),e.lineTo(n+m,r+O),e.quadraticCurveTo(n+i/2,r+k,n+_,r+O),e.lineTo(n+g,r+x),e.quadraticCurveTo(n+w,r+C,n+i,r),e.lineTo(n+v,r+j),e.lineTo(n+i,r+A),e.quadraticCurveTo(n+I,r+F,n+_,r+M),e.lineTo(n+_,r+N),e.quadraticCurveTo(n+i/2,r+L,n+m,r+N),e.lineTo(n+m,r+M),e.quadraticCurveTo(n+P,r+F,n,r+A),e.lineTo(n+f,r+j),e.closePath();break}case`ellipseribbon2`:{let t=Math.min(1e5,Math.max(0,o??25e3)),l=Math.min(75e3,Math.max(25e3,s??5e4)),u=Math.max(0,t-(1e5-t)/2),d=Math.min(t,Math.max(u,c??12500)),f=i/8,p=i*l/2e5,m=i/2-p,h=m+f,g=i-h,_=i-m,v=i-f,y=a*d/1e5,b=4*y/i,x=a-b*(h-h*h/i),S=h/2,C=a-b*S,w=i-S,T=a*t/1e5,E=T-y,D=b*(m-m*m/i),O=D+E,k=a-O,A=y+E-O+y+E,j=a-A,M=a-T,N=a-(y*14/16+M)/2,P=a-(D+M),F=a-(O+M),I=m/2,L=a-(b*I+M),R=i-I,z=a-(A+M);e.moveTo(n,r+a),e.quadraticCurveTo(n+S,r+C,n+h,r+x),e.lineTo(n+m,r+k),e.quadraticCurveTo(n+i/2,r+j,n+_,r+k),e.lineTo(n+g,r+x),e.quadraticCurveTo(n+w,r+C,n+i,r+a),e.lineTo(n+v,r+N),e.lineTo(n+i,r+T),e.quadraticCurveTo(n+R,r+L,n+_,r+P),e.lineTo(n+_,r+F),e.quadraticCurveTo(n+i/2,r+z,n+m,r+F),e.lineTo(n+m,r+P),e.quadraticCurveTo(n+I,r+L,n,r+T),e.lineTo(n+f,r+N),e.closePath();break}case`circulararrow`:{let t=(s??0)/6e4*Math.PI/180,n=(o??162e5)/6e4*Math.PI/180,r=(c??5e4)/1e5,l=Math.min(i,a)/2,d=l*(1-r),f=(l+d)/2,p=l-d,h=t+n;e.arc(u,m,l,t,h,!1),e.arc(u,m,d,h,t,!0),e.closePath();let g=Math.sin(h),_=-Math.cos(h),v=p*1.5,y=u+f*Math.cos(h)+v*g,b=m+f*Math.sin(h)+v*_;e.moveTo(y,b),e.lineTo(u+l*Math.cos(h),m+l*Math.sin(h)),e.lineTo(u+d*Math.cos(h),m+d*Math.sin(h)),e.closePath();break}case`curvedrightarrow`:{let t=Math.min(i,a),l=a/2,u=5e4*a/t,d=Math.min(u,Math.max(0,s??5e4)),f=t*Math.min(d,Math.max(0,o??25e3))/1e5,m=t*d/1e5,h=l-(f+m)/4,g=(2*h)**2-f**2,_=1e5*(Math.sqrt(Math.max(0,g))*i/(2*h))/t,v=t*Math.min(_,Math.max(0,c??25e3))/1e5,y=Math.sqrt(Math.max(0,i*i-v*v))*h/i,b=h+f,x=h+y,S=b+y,C=(m-f)/2,w=x-C,T=S+C,E=a-m/2,D=i-v,O=Math.atan2(v,y),k=-O,A=Math.PI-O;e.moveTo(n,r+h),p(e,n,r+h,i,h,Math.PI,k),e.lineTo(n+D,r+w),e.lineTo(n+i,r+E),e.lineTo(n+D,r+T),e.lineTo(n+D,r+S),p(e,n+D,r+S,i,h,A,O),e.closePath();break}case`curvedleftarrow`:{let t=Math.min(i,a),l=a/2,u=5e4*a/t,d=Math.min(u,Math.max(0,s??5e4)),f=t*Math.min(d,Math.max(0,o??25e3))/1e5,m=t*d/1e5,h=l-(f+m)/4,g=(2*h)**2-f**2,_=Math.sqrt(Math.max(0,g))*i/(2*h),v=1e5*_/t,y=t*Math.min(v,Math.max(0,c??25e3))/1e5,b=Math.sqrt(Math.max(0,i*i-y*y))*h/i,x=h+f,S=h+b,C=x+b,w=(m-f)/2,T=S-w,E=C+w,D=a-m/2,O=y,k=Math.atan2(y,b),A=f/2,j=Math.atan2(A,_),M=j-k,N=k-j,P=-j;e.moveTo(n,r+D),e.lineTo(n+O,r+T),e.lineTo(n+O,r+S);let F=p(e,n+O,r+S,i,h,k,M);p(e,F.x,F.y,i,h,P,N),e.lineTo(n+O,r+E),e.closePath();break}case`curveduparrow`:{let t=Math.min(i,a),l=i/2,u=5e4*i/t,d=Math.min(u,Math.max(0,s??5e4)),f=t*Math.min(1e5,Math.max(0,o??25e3))/1e5,m=t*d/1e5,h=l-(f+m)/4,g=(2*h)**2-f**2,_=Math.sqrt(Math.max(0,g))*a/(2*h),v=1e5*_/t,y=t*Math.min(v,Math.max(0,c??25e3))/1e5,b=Math.sqrt(Math.max(0,a*a-y*y))*h/a,x=h+f,S=h+b,C=x+b,w=(m-f)/2,T=S-w,E=C+w,D=i-m/2,O=y,k=Math.atan2(y,b),A=f/2,j=Math.atan2(A,_),M=j-k,N=k-j,P=Math.PI/2-k,F=Math.PI/2-j;e.moveTo(n+D,r),e.lineTo(n+E,r+O),e.lineTo(n+C,r+O);let I=p(e,n+C,r+O,h,a,P,N);p(e,I.x,I.y,h,a,F,M),e.lineTo(n+T,r+O),e.closePath();break}case`curveddownarrow`:{let t=Math.min(i,a),l=i/2,u=5e4*i/t,d=Math.min(u,Math.max(0,s??5e4)),f=t*Math.min(1e5,Math.max(0,o??25e3))/1e5,m=t*d/1e5,h=l-(f+m)/4,g=(2*h)**2-f**2,_=Math.sqrt(Math.max(0,g))*a/(2*h),v=1e5*_/t,y=t*Math.min(v,Math.max(0,c??25e3))/1e5,b=Math.sqrt(Math.max(0,a*a-y*y))*h/a,x=h+f,S=h+b,C=x+b,w=(m-f)/2,T=S-w,E=C+w,D=i-m/2,O=a-y,k=Math.atan2(y,b),A=f/2,j=Math.atan2(A,_),M=3*Math.PI/2+k;3*Math.PI/2-j,j-Math.PI/2,Math.PI/2-j,e.moveTo(n+D,r+a),e.lineTo(n+T,r+O),e.lineTo(n+S,r+O),p(e,n+S,r+O,h,a,M,-k),e.lineTo(n+x,r),p(e,n+x,r,h,a,3*Math.PI/2,k),e.lineTo(n+E,r+O),e.closePath();break}case`stripedrightarrow`:{let t=Math.min(i,a),c=t/32,l=t/16,u=t/8,d=t*(o??5e4)/1e5,f=i*(s??5e4)/1e5,p=m-d/2,h=m+d/2,g=n+i-f;e.rect(n,p,c,d),e.rect(n+l,p,l,d),e.rect(n+u,p,u,d),e.moveTo(g,p),e.lineTo(g,r),e.lineTo(n+i,m),e.lineTo(g,r+a),e.lineTo(g,h),e.lineTo(n+u*2,h),e.lineTo(n+u*2,p),e.closePath();break}case`flowchartpreparation`:{let t=i*.2;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.lineTo(n+i,m),e.lineTo(n+i-t,r+a),e.lineTo(n+t,r+a),e.lineTo(n,m),e.closePath();break}case`flowchartcollate`:e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n,r+a),e.lineTo(n+i,r+a),e.closePath();break;case`flowchartmagneticdisk`:{let t=a*.15;e.moveTo(n,r+t),e.ellipse(u,r+t,i/2,t,0,Math.PI,0),e.lineTo(n+i,r+a-t),e.ellipse(u,r+a-t,i/2,t,0,0,Math.PI),e.lineTo(n,r+t),e.closePath(),e.moveTo(n+i,r+t),e.ellipse(u,r+t,i/2,t,0,0,Math.PI);break}case`flowchartinternalstorage`:{e.rect(n,r,i,a);let t=i*.15,o=a*.15;e.moveTo(n+t,r),e.lineTo(n+t,r+a),e.moveTo(n,r+o),e.lineTo(n+i,r+o);break}case`flowchartmagneticdrum`:{let t=i*.15;e.moveTo(n+t,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a),e.lineTo(n+t,r+a),e.ellipse(n+t,m,t,a/2,0,Math.PI/2,-Math.PI/2,!0),e.closePath(),e.moveTo(n+i,r),e.ellipse(n+i,m,t,a/2,0,-Math.PI/2,Math.PI/2);break}case`flowchartsumingjunction`:case`flowchartsummingjunction`:{e.ellipse(u,m,i/2,a/2,0,0,Math.PI*2);let t=Math.min(i,a)/2*.65;e.moveTo(u-t,m-t),e.lineTo(u+t,m+t),e.moveTo(u+t,m-t),e.lineTo(u-t,m+t);break}case`flowchartmagnetictape`:{let t=Math.min(i,a)/2,n=u+t*.5;e.moveTo(u,r+a),e.arc(u,m,t,Math.PI/2,Math.PI/2+Math.PI*2*.875),e.lineTo(n,m+t*.5),e.lineTo(n,r+a),e.closePath();break}case`flowchartpunchedtape`:{let t=a*.12;e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.bezierCurveTo(n+i*.75,r+a,n+i*.25,r+a-t*2,n,r+a-t),e.closePath(),e.moveTo(n,r+t),e.bezierCurveTo(n+i*.25,r,n+i*.75,r+t*2,n+i,r+t);break}case`flowchartmanualoperation`:{let t=i*.15;e.moveTo(n+t,r),e.lineTo(n+i-t,r),e.lineTo(n+i,r+a),e.lineTo(n,r+a),e.closePath();break}case`flowchartmultidocument`:{let t=a*.1,o=i*.04;e.rect(n+o*2,r-a*.08,i-o*2,a*.1),e.rect(n+o,r-a*.04,i-o,a*.06),e.moveTo(n,r),e.lineTo(n+i,r),e.lineTo(n+i,r+a-t),e.bezierCurveTo(n+i*.75,r+a,n+i*.25,r+a-t*2,n,r+a-t),e.closePath();break}case`rttriangle`:e.moveTo(n,r),e.lineTo(n,r+a),e.lineTo(n+i,r+a),e.closePath();break;default:e.rect(n,r,i,a);break}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return m}});
@@ -29,6 +29,7 @@ declare type BodyElement = {
29
29
  type: 'table';
30
30
  } & DocTable | {
31
31
  type: 'pageBreak';
32
+ parity?: 'odd' | 'even';
32
33
  };
33
34
 
34
35
  declare interface BorderSpec {
@@ -44,6 +45,13 @@ declare interface CellBorders {
44
45
  right: BorderSpec | null;
45
46
  }
46
47
 
48
+ /** ECMA-376 §17.4.7: a table cell may contain paragraphs AND nested tables. */
49
+ declare type CellElement = {
50
+ type: 'paragraph';
51
+ } & DocParagraph | {
52
+ type: 'table';
53
+ } & DocTable;
54
+
47
55
  export declare interface DocParagraph {
48
56
  /**
49
57
  * ECMA-376 §17.18.44 ST_Jc. Renderer honors left, start, center, right, end,
@@ -104,7 +112,7 @@ declare interface DocTable {
104
112
  }
105
113
 
106
114
  declare interface DocTableCell {
107
- content: DocParagraph[];
115
+ content: CellElement[];
108
116
  colSpan: number;
109
117
  vMerge: boolean | null;
110
118
  borders: CellBorders;
@@ -116,6 +124,9 @@ declare interface DocTableCell {
116
124
  declare interface DocTableRow {
117
125
  cells: DocTableCell[];
118
126
  rowHeight: number | null;
127
+ /** ECMA-376 §17.4.80 hRule. "auto" (default) = informational; "atLeast" =
128
+ * lower bound; "exact" = fixed clip. */
129
+ rowHeightRule: 'auto' | 'atLeast' | 'exact' | string;
119
130
  isHeader: boolean;
120
131
  }
121
132
 
@@ -128,6 +139,15 @@ declare interface Document_2 {
128
139
  majorFont?: string;
129
140
  /** Theme `<a:fontScheme><a:minorFont><a:latin@typeface>` (body face). */
130
141
  minorFont?: string;
142
+ /**
143
+ * ECMA-376 §17.8.3.10 — font family classification from `word/fontTable.xml`.
144
+ * Maps font name to `<w:family @w:val>`: "roman" | "swiss" | "modern" |
145
+ * "script" | "decorative" | "auto". The renderer uses this as the primary
146
+ * source for serif/sans-serif decisions (roman→serif, swiss→sans-serif,
147
+ * modern→monospace), falling back to name-pattern matching only when the
148
+ * entry is absent or classified as "auto".
149
+ */
150
+ fontFamilyClasses?: Record<string, string>;
131
151
  }
132
152
  export { Document_2 as Document }
133
153
 
@@ -375,6 +395,12 @@ export declare interface RenderPageOptions {
375
395
  }) => void;
376
396
  }
377
397
 
398
+ declare interface RubyAnnotation {
399
+ text: string;
400
+ /** Annotation font size in pt. Word stores this as half-points in `<w:hps>`. */
401
+ fontSizePt: number;
402
+ }
403
+
378
404
  export declare interface SectionProps {
379
405
  pageWidth: number;
380
406
  pageHeight: number;
@@ -413,17 +439,72 @@ declare interface ShapeRun {
413
439
  anchorYPt: number;
414
440
  anchorXFromMargin: boolean;
415
441
  anchorYFromPara: boolean;
442
+ /** ECMA-376 §20.4.3.1 wp:align horizontal: "left" | "center" | "right" |
443
+ * "inside" | "outside". When set the renderer aligns the shape inside the
444
+ * container indicated by `anchorXFromMargin` and ignores `anchorXPt`. */
445
+ anchorXAlign?: string | null;
446
+ /** Vertical equivalent of anchorXAlign: "top" | "center" | "bottom". */
447
+ anchorYAlign?: string | null;
448
+ /** ECMA-376 §20.4.2.7 wp14:pctPosHOffset / pctPosVOffset normalised to a
449
+ * fraction in `[0, 1]`. When set the renderer multiplies it by the
450
+ * relativeFrom container's width / height and uses that as the
451
+ * shape's offset within the container, ignoring anchorXPt / anchorYPt. */
452
+ pctPosH?: number | null;
453
+ pctPosV?: number | null;
454
+ /** Raw `relativeFrom` value from `<wp:positionH>` / `<wp:positionV>` —
455
+ * e.g. "page", "margin", "topMargin", "rightMargin",
456
+ * "insideMargin", "paragraph", "line". Drives container selection
457
+ * for both pctPos* and anchor*Align positioning. */
458
+ anchorXRelativeFrom?: string | null;
459
+ anchorYRelativeFrom?: string | null;
460
+ /** ECMA-376 §20.4.2.18 wp14:sizeRelH/sizeRelV — width/height as a
461
+ * fraction of the relativeFrom container. When set, the renderer uses
462
+ * this in place of `widthPt` / `heightPt` for layout. `pct == 0` from
463
+ * the source is dropped at parse time (treated as "use extent"). */
464
+ widthPct?: number | null;
465
+ heightPct?: number | null;
466
+ widthRelativeFrom?: string | null;
467
+ heightRelativeFrom?: string | null;
468
+ /** Parent wgp group dimensions (pt) — set only when this shape is a child
469
+ * of a `<wpg:wgp>`. Used by `resolveAnchor*` so align/pctPos resolve the
470
+ * GROUP's origin, then `anchor[XY]Pt` adds the within-group offset. */
471
+ groupWidthPt?: number | null;
472
+ groupHeightPt?: number | null;
416
473
  /** Draw behind text when true (wp:anchor behindDoc="1"). */
417
474
  behindDoc?: boolean;
418
475
  /** Document-order index within a group; lower values render first. */
419
476
  zOrder: number;
420
- /** Normalized [0,1] custom-geometry sub-paths */
477
+ /** Normalized [0,1] custom-geometry sub-paths. Empty when `presetGeometry`
478
+ * is set; the renderer chooses between buildCustomPath and buildShapePath. */
421
479
  subpaths: PathCmd[][];
480
+ /** OOXML <a:prstGeom prst> name (e.g. "rect", "ellipse", "rtTriangle").
481
+ * When set the renderer calls core's buildShapePath with `adjValues`. */
482
+ presetGeometry?: string | null;
483
+ /** Up to four <a:gd name="adj{n}"> values from prstGeom/avLst (0–100000). */
484
+ adjValues?: number[];
422
485
  fill: ShapeFill | null;
423
486
  stroke: string | null;
424
487
  strokeWidth?: number;
425
488
  rotation?: number;
426
489
  wrapMode?: string | null;
490
+ /** Text rendered INSIDE the shape's bounding box (`<wps:txbx><w:txbxContent>`). */
491
+ textBlocks?: ShapeText[];
492
+ /** "t" | "ctr" | "b" — vertical anchor for the shape's text body (`<wps:bodyPr @anchor>`). */
493
+ textAnchor?: string | null;
494
+ textInsetL?: number;
495
+ textInsetT?: number;
496
+ textInsetR?: number;
497
+ textInsetB?: number;
498
+ }
499
+
500
+ declare interface ShapeText {
501
+ text: string;
502
+ fontSizePt: number;
503
+ color?: string | null;
504
+ fontFamily?: string | null;
505
+ bold?: boolean;
506
+ italic?: boolean;
507
+ alignment: string;
427
508
  }
428
509
 
429
510
  declare interface TableBorders {
@@ -460,6 +541,9 @@ export declare interface TextRun {
460
541
  smallCaps?: boolean;
461
542
  doubleStrikethrough?: boolean;
462
543
  highlight?: string | null;
544
+ /** ECMA-376 §17.3.3.25 ruby annotation (furigana). Renders above the
545
+ * base text in a smaller font; line height is expanded to fit it. */
546
+ ruby?: RubyAnnotation;
463
547
  }
464
548
 
465
549
  export { }
@@ -38,6 +38,7 @@ declare type BodyElement = {
38
38
  type: 'table';
39
39
  } & DocTable | {
40
40
  type: 'pageBreak';
41
+ parity?: 'odd' | 'even';
41
42
  };
42
43
 
43
44
  declare interface Border {
@@ -107,6 +108,13 @@ declare interface CellBorders {
107
108
  right: BorderSpec | null;
108
109
  }
109
110
 
111
+ /** ECMA-376 §17.4.7: a table cell may contain paragraphs AND nested tables. */
112
+ declare type CellElement = {
113
+ type: 'paragraph';
114
+ } & DocParagraph | {
115
+ type: 'table';
116
+ } & DocTable;
117
+
110
118
  declare interface CellRange {
111
119
  top: number;
112
120
  left: number;
@@ -599,7 +607,7 @@ declare interface DocTable {
599
607
  }
600
608
 
601
609
  declare interface DocTableCell {
602
- content: DocParagraph[];
610
+ content: CellElement[];
603
611
  colSpan: number;
604
612
  vMerge: boolean | null;
605
613
  borders: CellBorders;
@@ -611,6 +619,9 @@ declare interface DocTableCell {
611
619
  declare interface DocTableRow {
612
620
  cells: DocTableCell[];
613
621
  rowHeight: number | null;
622
+ /** ECMA-376 §17.4.80 hRule. "auto" (default) = informational; "atLeast" =
623
+ * lower bound; "exact" = fixed clip. */
624
+ rowHeightRule: 'auto' | 'atLeast' | 'exact' | string;
614
625
  isHeader: boolean;
615
626
  }
616
627
 
@@ -623,6 +634,15 @@ declare interface Document_2 {
623
634
  majorFont?: string;
624
635
  /** Theme `<a:fontScheme><a:minorFont><a:latin@typeface>` (body face). */
625
636
  minorFont?: string;
637
+ /**
638
+ * ECMA-376 §17.8.3.10 — font family classification from `word/fontTable.xml`.
639
+ * Maps font name to `<w:family @w:val>`: "roman" | "swiss" | "modern" |
640
+ * "script" | "decorative" | "auto". The renderer uses this as the primary
641
+ * source for serif/sans-serif decisions (roman→serif, swiss→sans-serif,
642
+ * modern→monospace), falling back to name-pattern matching only when the
643
+ * entry is absent or classified as "auto".
644
+ */
645
+ fontFamilyClasses?: Record<string, string>;
626
646
  }
627
647
 
628
648
  export declare namespace docx {
@@ -747,7 +767,7 @@ declare interface FieldRun {
747
767
  highlight?: string | null;
748
768
  }
749
769
 
750
- declare type Fill = SolidFill | NoFill | GradientFill;
770
+ declare type Fill = SolidFill | NoFill | GradientFill | PatternFill;
751
771
 
752
772
  declare interface Fill_2 {
753
773
  patternType: string;
@@ -765,6 +785,18 @@ declare interface Font {
765
785
  size: number;
766
786
  color: string | null;
767
787
  name: string | null;
788
+ /** ECMA-376 §18.4.13 ST_UnderlineValues — see RunFont.underlineStyle. */
789
+ underlineStyle?: string;
790
+ /** ECMA-376 §18.4.6 ST_VerticalAlignRun on a cell-level <font>. */
791
+ vertAlign?: 'superscript' | 'subscript';
792
+ }
793
+
794
+ /** ECMA-376 §20.1.8.17 (CT_GlowEffect) — coloured halo with blur radius. */
795
+ declare interface Glow {
796
+ color: string;
797
+ alpha: number;
798
+ /** Blur radius in EMU. */
799
+ radius: number;
768
800
  }
769
801
 
770
802
  declare interface GradientFill {
@@ -1132,6 +1164,20 @@ declare interface PathInfo {
1132
1164
  commands: PathCmd_2[];
1133
1165
  }
1134
1166
 
1167
+ /**
1168
+ * Preset pattern fill — ECMA-376 §20.1.8.40 (CT_PatternFillProperties)
1169
+ * with `preset` drawn from §20.1.10.59 (ST_PresetPatternVal).
1170
+ */
1171
+ declare interface PatternFill {
1172
+ fillType: 'pattern';
1173
+ /** Foreground hex colour — used for the "1" pixels of the preset bitmap. */
1174
+ fg: string;
1175
+ /** Background hex colour — used for the "0" pixels. */
1176
+ bg: string;
1177
+ /** Preset name, e.g. "pct25", "horz", "diagCross", "lgGrid". */
1178
+ preset: string;
1179
+ }
1180
+
1135
1181
  declare interface PictureElement {
1136
1182
  type: 'picture';
1137
1183
  x: number;
@@ -1313,6 +1359,10 @@ declare interface Presentation {
1313
1359
  majorFont: string | null;
1314
1360
  /** Theme minor (body) font family name (e.g. "Aptos", "Nunito Sans"). Null if not set. */
1315
1361
  minorFont: string | null;
1362
+ /** Theme hyperlink colour (hex 6 chars). Used to colour hyperlink runs that have no explicit colour. */
1363
+ hlinkColor?: string;
1364
+ /** Theme followed-hyperlink colour. Reserved for future visited-link styling. */
1365
+ folHlinkColor?: string;
1316
1366
  }
1317
1367
 
1318
1368
  declare interface PresentationHandle {
@@ -1321,12 +1371,36 @@ declare interface PresentationHandle {
1321
1371
  dispose(): void;
1322
1372
  }
1323
1373
 
1374
+ /** ECMA-376 §20.1.8.27 (CT_ReflectionEffect) — mirrored copy below the
1375
+ * shape with a linear alpha gradient. Carries the spec attributes whose
1376
+ * defaults the renderer needs to interpret correctly. */
1377
+ declare interface Reflection {
1378
+ blur: number;
1379
+ dist: number;
1380
+ /** Direction in degrees, clockwise from East. */
1381
+ dir: number;
1382
+ /** Start alpha (0–1). Default 1.0. */
1383
+ stA: number;
1384
+ /** Start position along the gradient (0–1). Default 0. */
1385
+ stPos: number;
1386
+ /** End alpha. Default 0. */
1387
+ endA: number;
1388
+ /** End position. Default 1.0. */
1389
+ endPos: number;
1390
+ /** Horizontal scale (1.0 = same width). */
1391
+ sx: number;
1392
+ /** Vertical scale (-1.0 = full mirror). */
1393
+ sy: number;
1394
+ }
1395
+
1324
1396
  declare interface RenderOptions {
1325
1397
  width?: number;
1326
1398
  defaultTextColor?: string | null;
1327
1399
  dpr?: number;
1328
1400
  majorFont?: string | null;
1329
1401
  minorFont?: string | null;
1402
+ /** Theme hyperlink colour (hex 6 chars). Used to colour hyperlink runs without an explicit colour. */
1403
+ hlinkColor?: string | null;
1330
1404
  /**
1331
1405
  * Lazily resolve an archive-internal asset (by zip path) to a Blob. The
1332
1406
  * renderer uses this to fetch posters and other large embedded assets on
@@ -1405,6 +1479,12 @@ declare interface Row {
1405
1479
  cells: Cell[];
1406
1480
  }
1407
1481
 
1482
+ declare interface RubyAnnotation {
1483
+ text: string;
1484
+ /** Annotation font size in pt. Word stores this as half-points in `<w:hps>`. */
1485
+ fontSizePt: number;
1486
+ }
1487
+
1408
1488
  declare interface Run {
1409
1489
  text: string;
1410
1490
  font?: RunFont;
@@ -1418,6 +1498,17 @@ declare interface RunFont {
1418
1498
  size?: number;
1419
1499
  color?: string | null;
1420
1500
  name?: string | null;
1501
+ /**
1502
+ * Underline style when not the default single line. ECMA-376 §18.4.13
1503
+ * (`ST_UnderlineValues`): "double" | "singleAccounting" | "doubleAccounting".
1504
+ * Absent means single (when `underline` is true) or no underline.
1505
+ */
1506
+ underlineStyle?: string;
1507
+ /**
1508
+ * ECMA-376 §18.4.6 (`ST_VerticalAlignRun`): "superscript" | "subscript".
1509
+ * Absent leaves the run on the baseline.
1510
+ */
1511
+ vertAlign?: 'superscript' | 'subscript';
1421
1512
  }
1422
1513
 
1423
1514
  declare interface SectionProps {
@@ -1511,6 +1602,14 @@ declare interface ShapeElement {
1511
1602
  adj8: number | null;
1512
1603
  /** Drop shadow from effectLst > outerShdw (null if not present). */
1513
1604
  shadow: Shadow | null;
1605
+ /** Inner (inset) shadow from effectLst > innerShdw. ECMA-376 §20.1.8.21. */
1606
+ innerShadow?: Shadow;
1607
+ /** Coloured glow halo from effectLst > glow. ECMA-376 §20.1.8.17. */
1608
+ glow?: Glow;
1609
+ /** Soft (feathered) edge — ECMA-376 §20.1.8.31. */
1610
+ softEdge?: SoftEdge;
1611
+ /** Mirrored reflection — ECMA-376 §20.1.8.27. */
1612
+ reflection?: Reflection;
1514
1613
  }
1515
1614
 
1516
1615
  declare type ShapeFill = {
@@ -1571,17 +1670,62 @@ declare interface ShapeRun {
1571
1670
  anchorYPt: number;
1572
1671
  anchorXFromMargin: boolean;
1573
1672
  anchorYFromPara: boolean;
1673
+ /** ECMA-376 §20.4.3.1 wp:align horizontal: "left" | "center" | "right" |
1674
+ * "inside" | "outside". When set the renderer aligns the shape inside the
1675
+ * container indicated by `anchorXFromMargin` and ignores `anchorXPt`. */
1676
+ anchorXAlign?: string | null;
1677
+ /** Vertical equivalent of anchorXAlign: "top" | "center" | "bottom". */
1678
+ anchorYAlign?: string | null;
1679
+ /** ECMA-376 §20.4.2.7 wp14:pctPosHOffset / pctPosVOffset normalised to a
1680
+ * fraction in `[0, 1]`. When set the renderer multiplies it by the
1681
+ * relativeFrom container's width / height and uses that as the
1682
+ * shape's offset within the container, ignoring anchorXPt / anchorYPt. */
1683
+ pctPosH?: number | null;
1684
+ pctPosV?: number | null;
1685
+ /** Raw `relativeFrom` value from `<wp:positionH>` / `<wp:positionV>` —
1686
+ * e.g. "page", "margin", "topMargin", "rightMargin",
1687
+ * "insideMargin", "paragraph", "line". Drives container selection
1688
+ * for both pctPos* and anchor*Align positioning. */
1689
+ anchorXRelativeFrom?: string | null;
1690
+ anchorYRelativeFrom?: string | null;
1691
+ /** ECMA-376 §20.4.2.18 wp14:sizeRelH/sizeRelV — width/height as a
1692
+ * fraction of the relativeFrom container. When set, the renderer uses
1693
+ * this in place of `widthPt` / `heightPt` for layout. `pct == 0` from
1694
+ * the source is dropped at parse time (treated as "use extent"). */
1695
+ widthPct?: number | null;
1696
+ heightPct?: number | null;
1697
+ widthRelativeFrom?: string | null;
1698
+ heightRelativeFrom?: string | null;
1699
+ /** Parent wgp group dimensions (pt) — set only when this shape is a child
1700
+ * of a `<wpg:wgp>`. Used by `resolveAnchor*` so align/pctPos resolve the
1701
+ * GROUP's origin, then `anchor[XY]Pt` adds the within-group offset. */
1702
+ groupWidthPt?: number | null;
1703
+ groupHeightPt?: number | null;
1574
1704
  /** Draw behind text when true (wp:anchor behindDoc="1"). */
1575
1705
  behindDoc?: boolean;
1576
1706
  /** Document-order index within a group; lower values render first. */
1577
1707
  zOrder: number;
1578
- /** Normalized [0,1] custom-geometry sub-paths */
1708
+ /** Normalized [0,1] custom-geometry sub-paths. Empty when `presetGeometry`
1709
+ * is set; the renderer chooses between buildCustomPath and buildShapePath. */
1579
1710
  subpaths: PathCmd_3[][];
1711
+ /** OOXML <a:prstGeom prst> name (e.g. "rect", "ellipse", "rtTriangle").
1712
+ * When set the renderer calls core's buildShapePath with `adjValues`. */
1713
+ presetGeometry?: string | null;
1714
+ /** Up to four <a:gd name="adj{n}"> values from prstGeom/avLst (0–100000). */
1715
+ adjValues?: number[];
1580
1716
  fill: ShapeFill | null;
1581
1717
  stroke: string | null;
1582
1718
  strokeWidth?: number;
1583
1719
  rotation?: number;
1584
1720
  wrapMode?: string | null;
1721
+ /** Text rendered INSIDE the shape's bounding box (`<wps:txbx><w:txbxContent>`). */
1722
+ textBlocks?: ShapeText_2[];
1723
+ /** "t" | "ctr" | "b" — vertical anchor for the shape's text body (`<wps:bodyPr @anchor>`). */
1724
+ textAnchor?: string | null;
1725
+ textInsetL?: number;
1726
+ textInsetT?: number;
1727
+ textInsetR?: number;
1728
+ textInsetB?: number;
1585
1729
  }
1586
1730
 
1587
1731
  declare interface ShapeText {
@@ -1593,6 +1737,16 @@ declare interface ShapeText {
1593
1737
  paragraphs: ShapeParagraph[];
1594
1738
  }
1595
1739
 
1740
+ declare interface ShapeText_2 {
1741
+ text: string;
1742
+ fontSizePt: number;
1743
+ color?: string | null;
1744
+ fontFamily?: string | null;
1745
+ bold?: boolean;
1746
+ italic?: boolean;
1747
+ alignment: string;
1748
+ }
1749
+
1596
1750
  declare interface ShapeTextRun {
1597
1751
  text: string;
1598
1752
  bold: boolean;
@@ -1643,6 +1797,11 @@ declare interface Slide {
1643
1797
 
1644
1798
  declare type SlideElement = ShapeElement | PictureElement | TableElement | ChartElement | MediaElement;
1645
1799
 
1800
+ /** ECMA-376 §20.1.8.31 (CT_SoftEdgesEffect) — feather radius in EMU. */
1801
+ declare interface SoftEdge {
1802
+ radius: number;
1803
+ }
1804
+
1646
1805
  declare interface SolidFill {
1647
1806
  fillType: 'solid';
1648
1807
  color: string;
@@ -1708,6 +1867,11 @@ declare interface Stroke {
1708
1867
  headEnd?: ArrowEnd;
1709
1868
  /** Arrow head at the end of the line */
1710
1869
  tailEnd?: ArrowEnd;
1870
+ /**
1871
+ * ECMA-376 §20.1.8.42 ST_CompoundLine. "sng" (default) | "dbl" |
1872
+ * "thinThick" | "thickThin" | "tri". Absent means single line.
1873
+ */
1874
+ cmpd?: string;
1711
1875
  }
1712
1876
 
1713
1877
  declare interface Styles {
@@ -1861,6 +2025,9 @@ declare interface TextRun_2 {
1861
2025
  smallCaps?: boolean;
1862
2026
  doubleStrikethrough?: boolean;
1863
2027
  highlight?: string | null;
2028
+ /** ECMA-376 §17.3.3.25 ruby annotation (furigana). Renders above the
2029
+ * base text in a smaller font; line height is expanded to fit it. */
2030
+ ruby?: RubyAnnotation;
1864
2031
  }
1865
2032
 
1866
2033
  declare type TextRunCallback = (run: TextRunInfo) => void;
@@ -1873,16 +2040,58 @@ declare interface TextRunData {
1873
2040
  /** null = not set, inherit from paragraph/body defaults */
1874
2041
  italic: boolean | null;
1875
2042
  underline: boolean;
1876
- /** true when rPr strike = "sngStrike" or "dblStrike" */
2043
+ /**
2044
+ * Specific underline style when not the default single line. Values come
2045
+ * from ECMA-376 §21.1.2.3.16 (ST_TextUnderlineType): "dbl", "heavy",
2046
+ * "dotted", "dottedHeavy", "dash", "dashHeavy", "dashLong",
2047
+ * "dashLongHeavy", "dotDash", "dotDashHeavy", "dotDotDash",
2048
+ * "dotDotDashHeavy", "wavy", "wavyHeavy", "wavyDbl". Absent means either
2049
+ * no underline (when `underline` is false) or the default single line.
2050
+ */
2051
+ underlineStyle?: string;
2052
+ /**
2053
+ * Underline-only colour from rPr > uFill (ECMA-376 §21.1.2.3.20). Absent
2054
+ * means the underline follows the text colour (uFillTx default).
2055
+ */
2056
+ underlineColor?: string;
2057
+ /** True when rPr strike is sngStrike or dblStrike. */
1877
2058
  strikethrough: boolean;
2059
+ /**
2060
+ * True only when rPr strike = "dblStrike". Lets the renderer draw two parallel
2061
+ * lines instead of one. ECMA-376 §21.1.2.3.10 (ST_TextStrikeType).
2062
+ */
2063
+ strikeDouble?: boolean;
1878
2064
  /** Font size in points */
1879
2065
  fontSize: number | null;
1880
2066
  color: string | null;
1881
2067
  fontFamily: string | null;
2068
+ /**
2069
+ * East Asian font family from rPr > a:ea (ECMA-376 §21.1.2.3.7),
2070
+ * resolved through the theme. Renderer uses this for CJK glyphs when
2071
+ * present; absent means CJK falls back to fontFamily.
2072
+ */
2073
+ fontFamilyEa?: string;
1882
2074
  /** Baseline shift in thousandths of a point. Positive = superscript, negative = subscript. */
1883
2075
  baseline?: number;
2076
+ /**
2077
+ * Capitalisation transform — ECMA-376 §21.1.2.3.13 (ST_TextCapsType).
2078
+ * 'all' renders text in upper case; 'small' uses small caps (rendered as
2079
+ * upper case at ~80% size when no smcp font feature is available).
2080
+ * 'none' or omitted leaves the text unchanged.
2081
+ */
2082
+ caps?: 'none' | 'small' | 'all';
2083
+ /**
2084
+ * Inter-character spacing in 100ths of a point — ECMA-376 §21.1.2.3.5
2085
+ * (rPr @spc). Positive values add space, negative values tighten.
2086
+ */
2087
+ letterSpacing?: number;
1884
2088
  /** Set for OOXML field runs (e.g. "slidenum"). When set, renderer replaces text with field value. */
1885
2089
  fieldType?: string;
2090
+ /**
2091
+ * Hyperlink target URL resolved from rPr > a:hlinkClick @r:id via the slide's _rels.
2092
+ * Undefined for runs without a hyperlink. ECMA-376 §21.1.2.3.5 (CT_Hyperlink).
2093
+ */
2094
+ hyperlink?: string;
1886
2095
  }
1887
2096
 
1888
2097
  /** Information about a rendered text segment for building a transparent selection overlay. */
@@ -2098,7 +2307,12 @@ declare class XlsxViewer {
2098
2307
  showSheet(index: number): Promise<void>;
2099
2308
  /** Returns the cell at canvas-client coordinates, or null if outside the cell grid. */
2100
2309
  getCellAt(clientX: number, clientY: number): CellAddress | null;
2101
- /** Returns the CSS-pixel rect of a cell within canvasArea, or null if not computable. */
2310
+ /** Returns the CSS-pixel rect of a cell within canvasArea, or null if not
2311
+ * computable. Mirrors the renderer's per-cell rounding (Math.round(px * cs))
2312
+ * so the selection overlay sits exactly on the canvas's drawn cell borders;
2313
+ * multiplying logical accumulators by `cs` once at the end (the previous
2314
+ * approach) drifted by up to 1 px per cell at non-integer scales.
2315
+ */
2102
2316
  private getCellRect;
2103
2317
  /** Returns the current selection, including mode. */
2104
2318
  get selection(): CellRange_2 | null;