@silurus/ooxml 0.1.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.
- package/LICENSE +21 -0
- package/README.md +499 -0
- package/dist/chunk-BwIEoMh7.cjs +1 -0
- package/dist/chunk-DmhlhrBa.js +11 -0
- package/dist/docx-Bpx5ZIHv.js +721 -0
- package/dist/docx-CVRWUA32.cjs +1 -0
- package/dist/docx.cjs +1 -0
- package/dist/docx.mjs +2 -0
- package/dist/index.cjs +1 -0
- package/dist/index.mjs +4 -0
- package/dist/pptx-D3vSvVQ6.js +1475 -0
- package/dist/pptx-DrZBtOP1.cjs +1 -0
- package/dist/pptx.cjs +1 -0
- package/dist/pptx.mjs +2 -0
- package/dist/renderer-B5mmiYKF.cjs +1 -0
- package/dist/renderer-BlgQO3S_.js +473 -0
- package/dist/types/docx.d.ts +286 -0
- package/dist/types/index.d.ts +1172 -0
- package/dist/types/pptx.d.ts +450 -0
- package/dist/types/xlsx.d.ts +375 -0
- package/dist/xlsx-B-yZ85zA.js +1068 -0
- package/dist/xlsx-BhLRc4om.cjs +4 -0
- package/dist/xlsx.cjs +1 -0
- package/dist/xlsx.mjs +2 -0
- package/package.json +78 -0
package/dist/pptx.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./pptx-DrZBtOP1.cjs`);exports.PptxPresentation=e.r,exports.PptxViewer=e.n,exports.renderSlide=e.i;
|
package/dist/pptx.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=[`4472C4`,`ED7D31`,`A9D18E`,`FF0000`,`70AD47`,`4BACC6`,`FFC000`,`9E480E`,`843C0C`,`636363`,`255E91`,`967300`];function t(t,n){return n?.color?`#${n.color}`:`#${e[t%e.length]}`}function n(t,n){let r=n.dataPointColors?.[t];return r?`#${r}`:`#${e[t%e.length]}`}function r(e,t){let n=e.startsWith(`#`)?e.slice(1):e;return`rgba(${parseInt(n.slice(0,2),16)},${parseInt(n.slice(2,4),16)},${parseInt(n.slice(4,6),16)},${t})`}function i(e,t=5){if(e===0)return 1;let n=e/t,r=10**Math.floor(Math.log10(n)),i=n/r;return(i<1.5?1:i<3.5?2:i<7.5?5:10)*r}function a(e,t){if(e<=0)return t;let n=Math.ceil(e/t)*t;return Math.abs(n-e)<t*1e-9?n+t:n}function o(e,t){if(e>=0)return 0;let n=Math.floor(e/t)*t;return Math.abs(n-e)<t*1e-9?n-t:n}function s(e){return Math.abs(e)>=1e6?`${(e/1e6).toFixed(1)}M`:Math.abs(e)>=1e3?`${(e/1e3).toFixed(1)}k`:Number.isInteger(e)?String(e):e.toFixed(2).replace(/\.?0+$/,``)}function c(e,t,n,r,i,a,o,s){e.save(),e.font=`${s}px sans-serif`,e.fillStyle=`#555`,o===`cat`?(e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(t.slice(0,30),n+i/2,r+a+s+2)):(e.translate(n-s-4,r+a/2),e.rotate(-Math.PI/2),e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(t.slice(0,30),0,0)),e.restore()}function l(e,n,r,i,a,o){let s=Math.max(9,Math.min(12,o/(n.length+1)));e.font=`${s}px sans-serif`,e.textBaseline=`middle`;let c=s+4,l=i+(o-c*n.length)/2;for(let i=0;i<n.length;i++){e.fillStyle=t(i,n[i]),e.fillRect(r,l,10,s),e.fillStyle=`#333`,e.textAlign=`left`;let a=n[i].name||`Series ${i+1}`;e.fillText(a.slice(0,20),r+10+4,l+s/2),l+=c}}function u(e,t,n,r,i,a){t&&(e.font=`bold ${a}px sans-serif`,e.fillStyle=`#333`,e.textAlign=`center`,e.textBaseline=`top`,e.fillText(t,n+i/2,r))}function d(e){return e.categories.length>0?e.categories:e.series[0]?.categories??[]}function f(e,n,r){let{x:o,y:f,w:p,h:m}=r,h=n.chartType===`clusteredBarH`||n.chartType===`stackedBarH`||n.chartType===`stackedBarHPct`,g=n.chartType.startsWith(`stacked`),_=n.chartType===`stackedBarPct`||n.chartType===`stackedBarHPct`,v=n.series.filter(e=>e.seriesType!==`line`),y=n.series.filter(e=>e.seriesType===`line`),b=d(n),x=b.length;if(x===0)return;let S=n.title?Math.max(14,m*.06):0,C=n.series.length>=1?Math.max(80,p*.22):0,w=Math.max(8,Math.min(10,m*.045)),T=n.catAxisTitle?w+4:0,E=n.valAxisTitle?w+4:0,D={t:S+m*.04,r:C+p*.03,b:m*.14+T,l:p*.12+E};h&&(D.l=p*.22+E,D.b=m*.08+T),u(e,n.title,o,f+2,p,Math.max(11,S*.7));let O=o+D.l,k=f+D.t,A=p-D.l-D.r,j=m-D.t-D.b;if(A<=0||j<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(O,k,A,j));let M=0;for(let e=0;e<x;e++){let t=0;for(let n of v){let r=n.values[e]??0;g?t+=Math.abs(r):M=Math.max(M,Math.abs(r))}g&&(M=Math.max(M,t))}_&&(M=100),n.valMax!=null&&(M=n.valMax),M===0&&(M=1);let N=i(M),P=n.valMax??a(M,N),F=`#e0e0e0`,I=Math.round(P/N);if(e.textBaseline=`middle`,e.font=`${Math.max(8,Math.min(11,j/20))}px sans-serif`,e.fillStyle=`#555`,!n.valAxisHidden)for(let t=0;t<=I;t++){let n=t*N,r=_?`${Math.round(n)}%`:n>=1e3?`${(n/1e3).toFixed(1)}k`:String(n);if(h){let i=O+n/P*A;e.strokeStyle=t===0?`#aaa`:F,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(i,k),e.lineTo(i,k+j),e.stroke(),e.textAlign=`center`,e.fillText(r,i,k+j+10)}else{let i=k+j-n/P*j;e.strokeStyle=t===0?`#aaa`:F,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(O,i),e.lineTo(O+A,i),e.stroke(),e.textAlign=`right`,e.fillText(r,O-4,i)}}e.strokeStyle=`#aaa`,e.lineWidth=1,h?(e.beginPath(),e.moveTo(O,k),e.lineTo(O,k+j),e.stroke()):(e.beginPath(),e.moveTo(O,k+j),e.lineTo(O+A,k+j),e.stroke());let L=h?j/x:A/x,R=L*(g?.6:.6/Math.max(1,v.length)),z=g?0:L*.6/Math.max(1,v.length),B=L*.2;for(let r=0;r<x;r++){let i=0,a=0;if(_){for(let e of v)a+=Math.abs(e.values[r]??0);a===0&&(a=1)}for(let o=0;o<v.length;o++){let c=v[o],l=c.values[r]??0,u=_?Math.abs(l)/a*100:Math.abs(l),d=t(o,c);if(h){let t=g?k+(x-1-r)*L+B:k+(x-1-r)*L+B+o*z,a=u/P*A,c=g?O+i/P*A:O;e.fillStyle=d,e.fillRect(c,t,a,R),n.showDataLabels&&u>0&&(e.font=`bold ${Math.max(7,Math.min(10,R*.7))}px sans-serif`,e.fillStyle=`#333`,e.textAlign=`left`,e.textBaseline=`middle`,e.fillText(_?`${Math.round(u)}%`:s(u),c+a+2,t+R/2))}else{let t=g?O+r*L+B:O+r*L+B+o*z,a=u/P*j,c=k+j-(g?i+u:u)/P*j;e.fillStyle=d,e.fillRect(t,c,R,a),n.showDataLabels&&u>0&&(e.font=`bold ${Math.max(7,Math.min(10,R*.7))}px sans-serif`,e.fillStyle=`#333`,e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(_?`${Math.round(u)}%`:s(u),t+R/2,c-1))}g&&(i+=u)}}if(!n.catAxisHidden){e.fillStyle=`#555`,e.font=`${Math.max(8,Math.min(11,L*.5))}px sans-serif`;for(let t=0;t<x;t++){let n=(b[t]??``).toString().slice(0,12);if(h){let r=k+(x-1-t)*L+L/2;e.textAlign=`right`,e.textBaseline=`middle`,e.fillText(n,O-4,r)}else{let r=O+t*L+L/2;e.textAlign=`center`,e.textBaseline=`top`,e.fillText(n,r,k+j+3)}}}if(y.length>0&&!h)for(let n=0;n<y.length;n++){let r=y[n],i=t(v.length+n,r);e.strokeStyle=i,e.lineWidth=2,e.setLineDash([]),e.beginPath();let a=!1;for(let t=0;t<x;t++){let n=r.values[t];if(n==null){a=!1;continue}let i=O+t*L+L/2,o=k+j-n/P*j;a?e.lineTo(i,o):(e.moveTo(i,o),a=!0)}e.stroke();for(let t=0;t<x;t++){let n=r.values[t];if(n==null)continue;let a=O+t*L+L/2,o=k+j-n/P*j;e.fillStyle=i,e.beginPath(),e.arc(a,o,3,0,Math.PI*2),e.fill()}}C>0&&l(e,n.series,o+p-C+4,k,C-8,j),n.catAxisTitle&&c(e,n.catAxisTitle,O,k,A,j,`cat`,w),n.valAxisTitle&&c(e,n.valAxisTitle,O,k,A,j,`val`,w)}function p(e,n,r){let{x:f,y:p,w:m,h}=r,g=d(n),_=g.length;if(_===0)return;let v=n.title?Math.max(14,h*.06):0,y=n.series.length>=1?Math.max(80,m*.22):0,b=Math.max(8,Math.min(10,h*.045)),x=n.catAxisTitle?b+4:0,S=n.valAxisTitle?b+4:0,C={t:v+h*.04,r:y+m*.05,b:h*.14+x,l:m*.12+S};u(e,n.title,f,p+2,m,Math.max(11,v*.7));let w=f+C.l,T=p+C.t,E=m-C.l-C.r,D=h-C.t-C.b;if(E<=0||D<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(w,T,E,D));let O=1/0,k=-1/0;for(let e of n.series)for(let t of e.values)t!=null&&(O=Math.min(O,t),k=Math.max(k,t));isFinite(O)||(O=0,k=1),n.valMin==null?O>0&&(O=0):O=n.valMin,n.valMax==null?k<0&&(k=0):k=n.valMax,k===O&&(k=O+1);let A=i(k-O),j=n.valMin??o(O,A),M=n.valMax??a(k,A),N=M-j;if(N===0)return;let P=e=>T+D-(e-j)/N*D,F=e=>w+(_===1?E/2:e/(_-1)*E);if(!n.valAxisHidden){let t=Math.round((M-j)/A);e.font=`${Math.max(8,Math.min(11,D/20))}px sans-serif`,e.textBaseline=`middle`;for(let n=0;n<=t;n++){let t=j+n*A,r=P(t);e.strokeStyle=t===0?`#aaa`:`#e0e0e0`,e.lineWidth=t===0?1:.5,e.beginPath(),e.moveTo(w,r),e.lineTo(w+E,r),e.stroke(),e.fillStyle=`#555`,e.textAlign=`right`,e.fillText(s(t),w-4,r)}}e.strokeStyle=`#aaa`,e.lineWidth=1,e.beginPath(),e.moveTo(w,T+D),e.lineTo(w+E,T+D),e.stroke();let I=Math.max(3,D*.015);for(let r=0;r<n.series.length;r++){let i=n.series[r],a=t(r,i);e.strokeStyle=a,e.lineWidth=2,e.setLineDash([]),e.beginPath();let o=!1;for(let t=0;t<_;t++){let n=i.values[t];if(n==null){o=!1;continue}let r=F(t),a=P(n);o?e.lineTo(r,a):(e.moveTo(r,a),o=!0)}e.stroke(),e.fillStyle=a;for(let t=0;t<_;t++){let r=i.values[t];r!=null&&(e.beginPath(),e.arc(F(t),P(r),I,0,Math.PI*2),e.fill(),n.showDataLabels&&(e.font=`${Math.max(7,Math.round(I*1.5))}px sans-serif`,e.fillStyle=`#333`,e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(s(r),F(t),P(r)-I-1),e.fillStyle=a))}}if(!n.catAxisHidden){let t=Math.max(1,Math.ceil(_/8));e.fillStyle=`#555`,e.textAlign=`center`,e.textBaseline=`top`,e.font=`${Math.max(8,Math.min(11,E/_*.8))}px sans-serif`;for(let n=0;n<_;n+=t)e.fillText((g[n]??``).toString().slice(0,10),F(n),T+D+3)}y>0&&l(e,n.series,f+m-y+4,T,y-8,D),n.catAxisTitle&&c(e,n.catAxisTitle,w,T,E,D,`cat`,b),n.valAxisTitle&&c(e,n.valAxisTitle,w,T,E,D,`val`,b)}function m(e,n,o){let{x:f,y:p,w:m,h}=o,g=d(n),_=g.length;if(_===0)return;let v=n.chartType===`stackedArea`||n.chartType===`stackedAreaPct`,y=n.title?Math.max(14,h*.06):0,b=n.series.length>=1?Math.max(80,m*.22):0,x=Math.max(8,Math.min(10,h*.045)),S=n.catAxisTitle?x+4:0,C=n.valAxisTitle?x+4:0,w={t:y+h*.04,r:b+m*.05,b:h*.14+S,l:m*.12+C};u(e,n.title,f,p+2,m,Math.max(11,y*.7));let T=f+w.l,E=p+w.t,D=m-w.l-w.r,O=h-w.t-w.b;if(D<=0||O<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(T,E,D,O));let k=0;for(let e=0;e<_;e++)if(v){let t=0;for(let r of n.series)t+=r.values[e]??0;k=Math.max(k,t)}else for(let t of n.series)k=Math.max(k,t.values[e]??0);n.valMax!=null&&(k=n.valMax),k===0&&(k=1);let A=i(k),j=n.valMax??a(k,A),M=e=>T+(_===1?D/2:e/(_-1)*D),N=e=>E+O-e/j*O;if(!n.valAxisHidden){e.font=`${Math.max(8,Math.min(11,O/20))}px sans-serif`,e.textBaseline=`middle`;let t=Math.round(j/A);for(let n=0;n<=t;n++){let t=n*A,r=N(t);e.strokeStyle=n===0?`#aaa`:`#e0e0e0`,e.lineWidth=n===0?1:.5,e.beginPath(),e.moveTo(T,r),e.lineTo(T+D,r),e.stroke(),e.fillStyle=`#555`,e.textAlign=`right`,e.fillText(s(t),T-4,r)}}e.strokeStyle=`#aaa`,e.lineWidth=1,e.beginPath(),e.moveTo(T,E+O),e.lineTo(T+D,E+O),e.stroke();let P=v?Array(_).fill(0):null;for(let i=n.series.length-1;i>=0;i--){let a=n.series[i],o=t(i,a),s=E+O;if(e.beginPath(),v&&P){for(let t=0;t<_;t++){let n=(a.values[t]??0)+P[t],r=M(t),i=N(n);t===0?e.moveTo(r,i):e.lineTo(r,i)}for(let t=_-1;t>=0;t--)e.lineTo(M(t),N(P[t]));for(let e=0;e<_;e++)P[e]+=a.values[e]??0}else{e.moveTo(M(0),s);for(let t=0;t<_;t++)e.lineTo(M(t),N(a.values[t]??0));e.lineTo(M(_-1),s)}e.closePath(),e.fillStyle=r(o,.6),e.fill(),e.strokeStyle=o,e.lineWidth=1.5,e.setLineDash([]),e.stroke()}if(!n.catAxisHidden){let t=Math.max(1,Math.ceil(_/8));e.fillStyle=`#555`,e.textAlign=`center`,e.textBaseline=`top`,e.font=`${Math.max(8,Math.min(11,D/_*.8))}px sans-serif`;for(let n=0;n<_;n+=t)e.fillText((g[n]??``).toString().slice(0,10),M(n),E+O+3)}b>0&&l(e,n.series,f+m-b+4,E,b-8,O),n.catAxisTitle&&c(e,n.catAxisTitle,T,E,D,O,`cat`,x),n.valAxisTitle&&c(e,n.valAxisTitle,T,E,D,O,`val`,x)}function h(e,t,r,i){let{x:a,y:o,w:s,h:c}=r,l=t.series[0];if(!l)return;let d=l.categories&&l.categories.length>0?l.categories:t.categories,f=l.values.map(e=>Math.abs(e??0)),p=f.reduce((e,t)=>e+t,0);if(p===0)return;let m=t.title?Math.max(14,c*.06):0;u(e,t.title,a,o+2,s,Math.max(11,m*.7));let h=s-Math.max(80,s*.28),g=c-m-c*.04,_=a+h/2,v=o+m+c*.04+g/2,y=Math.min(h,g)*.42,b=i?y*.5:0,x=-Math.PI/2;for(let r=0;r<f.length;r++){let a=f[r]/p*Math.PI*2,o=n(r,l);if(e.beginPath(),e.moveTo(_,v),e.arc(_,v,y,x,x+a),e.closePath(),e.fillStyle=o,e.fill(),e.strokeStyle=`#fff`,e.lineWidth=1,e.stroke(),t.showDataLabels&&a>.15){let t=x+a/2,n=y*(i?.75:.6),o=_+Math.cos(t)*n,s=v+Math.sin(t)*n,c=Math.round(f[r]/p*100);e.font=`bold ${Math.max(8,y*.1)}px sans-serif`,e.fillStyle=`#fff`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`${c}%`,o,s)}x+=a}i&&(e.beginPath(),e.arc(_,v,b,0,Math.PI*2),e.fillStyle=`#fff`,e.fill());let S=a+h+4,C=Math.max(9,Math.min(12,c/(f.length+2)));e.font=`${C}px sans-serif`,e.textBaseline=`middle`;let w=C+4,T=o+(c-w*f.length)/2;for(let t=0;t<f.length;t++)e.fillStyle=n(t,l),e.fillRect(S,T,10,C),e.fillStyle=`#333`,e.textAlign=`left`,e.fillText((d[t]??`Item ${t+1}`).toString().slice(0,18),S+14,T+C/2),T+=w}function g(e,n,o){let{x:s,y:c,w:f,h:p}=o,m=d(n),h=m.length;if(h<3)return;let g=n.title?Math.max(14,p*.06):0,_=n.series.length>1?Math.max(70,f*.2):0;u(e,n.title,s,c+2,f,Math.max(11,g*.7));let v=f-_,y=p-g-p*.04,b=s+v/2,x=c+g+p*.04+y/2,S=Math.min(v,y)*.38,C=0;for(let e of n.series)for(let t of e.values)C=Math.max(C,t??0);n.valMax!=null&&(C=n.valMax),C===0&&(C=1);let w=i(C),T=n.valMax??a(C,w),E=-Math.PI/2,D=e=>E+e/h*Math.PI*2,O=Math.round(T/w);e.strokeStyle=`#ddd`,e.lineWidth=.5;for(let t=1;t<=O;t++){let n=t/O*S;e.beginPath();for(let t=0;t<h;t++){let r=D(t),i=b+Math.cos(r)*n,a=x+Math.sin(r)*n;t===0?e.moveTo(i,a):e.lineTo(i,a)}e.closePath(),e.stroke()}e.strokeStyle=`#bbb`,e.lineWidth=.5;for(let t=0;t<h;t++){let n=D(t);e.beginPath(),e.moveTo(b,x),e.lineTo(b+Math.cos(n)*S,x+Math.sin(n)*S),e.stroke()}e.font=`${Math.max(8,Math.min(11,S*.2))}px sans-serif`,e.fillStyle=`#444`,e.textBaseline=`middle`;for(let t=0;t<h;t++){let n=D(t),r=b+Math.cos(n)*(S+12),i=x+Math.sin(n)*(S+12);e.textAlign=Math.cos(n)<-.1?`right`:Math.cos(n)>.1?`left`:`center`,e.fillText((m[t]??``).toString().slice(0,12),r,i)}for(let i=0;i<n.series.length;i++){let a=n.series[i],o=t(i,a);e.beginPath();for(let t=0;t<h;t++){let n=(a.values[t]??0)/T,r=D(t),i=b+Math.cos(r)*S*n,o=x+Math.sin(r)*S*n;t===0?e.moveTo(i,o):e.lineTo(i,o)}e.closePath(),e.fillStyle=r(o,.25),e.fill(),e.strokeStyle=o,e.lineWidth=2,e.stroke()}_>0&&l(e,n.series,s+f-_+4,c+g+p*.04,_-8,y)}function _(e,n,r){let{x:a,y:o,w:d,h:f}=r,p=n.title?Math.max(14,f*.06):0,m=n.series.length>=1?Math.max(80,d*.22):0,h=Math.max(8,Math.min(10,f*.045)),g=n.catAxisTitle?h+4:0,_=n.valAxisTitle?h+4:0,v={t:p+f*.06,r:m+d*.05,b:f*.12+g,l:d*.12+_};u(e,n.title,a,o+2,d,Math.max(11,p*.7));let y=a+v.l,b=o+v.t,x=d-v.l-v.r,S=f-v.t-v.b;if(x<=0||S<=0)return;n.plotAreaBg&&(e.fillStyle=`#${n.plotAreaBg}`,e.fillRect(y,b,x,S));let C=[],w=[];for(let e of n.series){let t=e.categories??[];for(let e of t){let t=parseFloat(e);isNaN(t)||C.push(t)}for(let t of e.values)t!=null&&w.push(t)}let T=C.length===0;if(T){let e=Math.max(...n.series.map(e=>e.values.length));for(let t=0;t<e;t++)C.push(t)}let E=Math.min(...C),D=Math.max(...C),O=Math.min(...w),k=Math.max(...w);E===D&&(--E,D+=1),O===k&&(--O,k+=1),n.valMin==null?O>0&&(O=0):O=n.valMin,n.valMax!=null&&(k=n.valMax);let A=e=>y+(e-E)/(D-E)*x,j=e=>b+S-(e-O)/(k-O)*S;if(!n.valAxisHidden){e.font=`${Math.max(8,Math.min(11,S/20))}px sans-serif`;let t=i(k-O),n=Math.round((k-O)/t)+1;for(let r=0;r<n;r++){let n=O+r*t;if(n>k+t*.01)break;let i=j(n);e.strokeStyle=`#e0e0e0`,e.lineWidth=.5,e.beginPath(),e.moveTo(y,i),e.lineTo(y+x,i),e.stroke(),e.fillStyle=`#555`,e.textAlign=`right`,e.textBaseline=`middle`,e.fillText(s(n),y-4,i)}}e.strokeStyle=`#aaa`,e.lineWidth=1,e.beginPath(),e.moveTo(y,b+S),e.lineTo(y+x,b+S),e.stroke(),e.beginPath(),e.moveTo(y,b),e.lineTo(y,b+S),e.stroke();let M=Math.max(3,S*.015);for(let r=0;r<n.series.length;r++){let i=n.series[r];e.fillStyle=t(r,i);let a=i.categories??[];for(let t=0;t<i.values.length;t++){let n=i.values[t];if(n==null)continue;let r=T?t:parseFloat(a[t]??`0`);isNaN(r)||(e.beginPath(),e.arc(A(r),j(n),M,0,Math.PI*2),e.fill())}}m>0&&l(e,n.series,a+d-m+4,b,m-8,S),n.catAxisTitle&&c(e,n.catAxisTitle,y,b,x,S,`cat`,h),n.valAxisTitle&&c(e,n.valAxisTitle,y,b,x,S,`val`,h)}function v(e,t,n){let{x:r,y:a,w:o,h:s}=n,c=o*.11,l=o*.04,u=s*.08,d=s*.18,f=r+c,p=a+u,m=o-c-l,h=s-u-d,g=t.series[0]?.values??[],_=t.categories,v=_.length;if(v===0)return;let y=new Set(t.subtotalIndices),b=0,x=[];for(let e=0;e<v;e++){let t=g[e]??0;if(e===0||y.has(e))x.push({start:0,end:t,isSub:!0,isPos:!0}),b=t;else{let e=t>=0?b:b+t,n=t>=0?b+t:b;x.push({start:e,end:n,isSub:!1,isPos:t>=0}),b+=t}}let S=x.map(e=>e.end),C=x.map(e=>e.start),w=Math.max(...S,...C),T=Math.min(...C,0),E=w-T;if(E<=0)return;let D=E*1.1,O=T-E*.05,k=O+D,A=i(D);e.save();let j=Math.round(s*.042);e.font=`${j}px sans-serif`,e.strokeStyle=`#e8e8e8`,e.lineWidth=.7,e.fillStyle=`#666`,e.textAlign=`right`,e.textBaseline=`middle`;for(let t=Math.ceil(O/A)*A;t<=k;t+=A){let n=p+h*(1-(t-O)/D);e.beginPath(),e.moveTo(f,n),e.lineTo(f+m,n),e.stroke(),e.fillText(t.toLocaleString(),f-4,n)}e.strokeStyle=`#bbb`,e.lineWidth=1,e.beginPath(),e.moveTo(f,p),e.lineTo(f,p+h),e.lineTo(f+m,p+h),e.stroke();let M=m/v*.55,N=m/v;x.forEach((t,n)=>{let r=f+N*n+(N-M)/2,i=p+h*(1-(t.end-O)/D),a=p+h*(1-(t.start-O)/D),o=Math.max(1,a-i);if(t.isSub?(e.fillStyle=`#196ECA`,e.fillRect(r,i,M,o)):(e.strokeStyle=t.isPos?`#5BA4E6`:`#E46970`,e.lineWidth=1.5,e.strokeRect(r+.75,i+.75,M-1.5,o-1.5)),n<v-1){let o=f+N*(n+1)+(N-M)/2,s=t.isPos?i:a;e.strokeStyle=`#ccc`,e.lineWidth=.8,e.setLineDash([3,3]),e.beginPath(),e.moveTo(r+M,s),e.lineTo(o,s),e.stroke(),e.setLineDash([])}let c=g[n]??0,l=c<0?`△ ${Math.abs(c).toLocaleString()}`:c.toLocaleString();e.fillStyle=`#595959`,e.font=`bold ${Math.round(s*.044)}px sans-serif`,e.textAlign=`center`,e.textBaseline=`bottom`,e.fillText(l,r+M/2,i-3)}),e.textAlign=`center`,e.textBaseline=`top`,e.fillStyle=`#666`,e.font=`${Math.round(s*.038)}px sans-serif`;let P=p+h+4;for(let t=0;t<v;t++){let n=f+N*t+N/2;_[t].split(/\s+/).forEach((t,r)=>e.fillText(t,n,P+r*(j+2)))}e.restore()}function y(e,t,n){let{x:r,y:i,w:a,h:o}=n;if(e.fillStyle=`#ffffff`,e.fillRect(r,i,a,o),e.strokeStyle=`#d0d0d0`,e.lineWidth=1,e.strokeRect(r+.5,i+.5,a-1,o-1),t.series.length===0){e.fillStyle=`#888`,e.font=`12px sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`(no data)`,r+a/2,i+o/2);return}switch(t.chartType){case`clusteredBar`:case`clusteredBarH`:case`stackedBar`:case`stackedBarH`:case`stackedBarPct`:case`stackedBarHPct`:f(e,t,n);break;case`line`:case`stackedLine`:case`stackedLinePct`:p(e,t,n);break;case`area`:case`stackedArea`:case`stackedAreaPct`:m(e,t,n);break;case`pie`:h(e,t,n,!1);break;case`doughnut`:h(e,t,n,!0);break;case`radar`:g(e,t,n);break;case`scatter`:case`bubble`:_(e,t,n);break;case`waterfall`:v(e,t,n);break;default:e.fillStyle=`#888`,e.font=`11px sans-serif`,e.textAlign=`center`,e.textBaseline=`middle`,e.fillText(`Chart: ${t.chartType}`,r+a/2,i+o/2)}}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return y}});
|
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
//#region packages/core/src/chart/renderer.ts
|
|
2
|
+
var e = [
|
|
3
|
+
"4472C4",
|
|
4
|
+
"ED7D31",
|
|
5
|
+
"A9D18E",
|
|
6
|
+
"FF0000",
|
|
7
|
+
"70AD47",
|
|
8
|
+
"4BACC6",
|
|
9
|
+
"FFC000",
|
|
10
|
+
"9E480E",
|
|
11
|
+
"843C0C",
|
|
12
|
+
"636363",
|
|
13
|
+
"255E91",
|
|
14
|
+
"967300"
|
|
15
|
+
];
|
|
16
|
+
function t(t, n) {
|
|
17
|
+
return n?.color ? `#${n.color}` : `#${e[t % e.length]}`;
|
|
18
|
+
}
|
|
19
|
+
function n(t, n) {
|
|
20
|
+
let r = n.dataPointColors?.[t];
|
|
21
|
+
return r ? `#${r}` : `#${e[t % e.length]}`;
|
|
22
|
+
}
|
|
23
|
+
function r(e, t) {
|
|
24
|
+
let n = e.startsWith("#") ? e.slice(1) : e;
|
|
25
|
+
return `rgba(${parseInt(n.slice(0, 2), 16)},${parseInt(n.slice(2, 4), 16)},${parseInt(n.slice(4, 6), 16)},${t})`;
|
|
26
|
+
}
|
|
27
|
+
function i(e, t = 5) {
|
|
28
|
+
if (e === 0) return 1;
|
|
29
|
+
let n = e / t, r = 10 ** Math.floor(Math.log10(n)), i = n / r;
|
|
30
|
+
return (i < 1.5 ? 1 : i < 3.5 ? 2 : i < 7.5 ? 5 : 10) * r;
|
|
31
|
+
}
|
|
32
|
+
function a(e, t) {
|
|
33
|
+
if (e <= 0) return t;
|
|
34
|
+
let n = Math.ceil(e / t) * t;
|
|
35
|
+
return Math.abs(n - e) < t * 1e-9 ? n + t : n;
|
|
36
|
+
}
|
|
37
|
+
function o(e, t) {
|
|
38
|
+
if (e >= 0) return 0;
|
|
39
|
+
let n = Math.floor(e / t) * t;
|
|
40
|
+
return Math.abs(n - e) < t * 1e-9 ? n - t : n;
|
|
41
|
+
}
|
|
42
|
+
function s(e) {
|
|
43
|
+
return Math.abs(e) >= 1e6 ? `${(e / 1e6).toFixed(1)}M` : Math.abs(e) >= 1e3 ? `${(e / 1e3).toFixed(1)}k` : Number.isInteger(e) ? String(e) : e.toFixed(2).replace(/\.?0+$/, "");
|
|
44
|
+
}
|
|
45
|
+
function c(e, t, n, r, i, a, o, s) {
|
|
46
|
+
e.save(), e.font = `${s}px sans-serif`, e.fillStyle = "#555", o === "cat" ? (e.textAlign = "center", e.textBaseline = "bottom", e.fillText(t.slice(0, 30), n + i / 2, r + a + s + 2)) : (e.translate(n - s - 4, r + a / 2), e.rotate(-Math.PI / 2), e.textAlign = "center", e.textBaseline = "middle", e.fillText(t.slice(0, 30), 0, 0)), e.restore();
|
|
47
|
+
}
|
|
48
|
+
function l(e, n, r, i, a, o) {
|
|
49
|
+
let s = Math.max(9, Math.min(12, o / (n.length + 1)));
|
|
50
|
+
e.font = `${s}px sans-serif`, e.textBaseline = "middle";
|
|
51
|
+
let c = s + 4, l = i + (o - c * n.length) / 2;
|
|
52
|
+
for (let i = 0; i < n.length; i++) {
|
|
53
|
+
e.fillStyle = t(i, n[i]), e.fillRect(r, l, 10, s), e.fillStyle = "#333", e.textAlign = "left";
|
|
54
|
+
let a = n[i].name || `Series ${i + 1}`;
|
|
55
|
+
e.fillText(a.slice(0, 20), r + 10 + 4, l + s / 2), l += c;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function u(e, t, n, r, i, a) {
|
|
59
|
+
t && (e.font = `bold ${a}px sans-serif`, e.fillStyle = "#333", e.textAlign = "center", e.textBaseline = "top", e.fillText(t, n + i / 2, r));
|
|
60
|
+
}
|
|
61
|
+
function d(e) {
|
|
62
|
+
return e.categories.length > 0 ? e.categories : e.series[0]?.categories ?? [];
|
|
63
|
+
}
|
|
64
|
+
function f(e, n, r) {
|
|
65
|
+
let { x: o, y: f, w: p, h: m } = r, h = n.chartType === "clusteredBarH" || n.chartType === "stackedBarH" || n.chartType === "stackedBarHPct", g = n.chartType.startsWith("stacked"), _ = n.chartType === "stackedBarPct" || n.chartType === "stackedBarHPct", v = n.series.filter((e) => e.seriesType !== "line"), y = n.series.filter((e) => e.seriesType === "line"), b = d(n), x = b.length;
|
|
66
|
+
if (x === 0) return;
|
|
67
|
+
let S = n.title ? Math.max(14, m * .06) : 0, C = n.series.length >= 1 ? Math.max(80, p * .22) : 0, w = Math.max(8, Math.min(10, m * .045)), T = n.catAxisTitle ? w + 4 : 0, E = n.valAxisTitle ? w + 4 : 0, D = {
|
|
68
|
+
t: S + m * .04,
|
|
69
|
+
r: C + p * .03,
|
|
70
|
+
b: m * .14 + T,
|
|
71
|
+
l: p * .12 + E
|
|
72
|
+
};
|
|
73
|
+
h && (D.l = p * .22 + E, D.b = m * .08 + T), u(e, n.title, o, f + 2, p, Math.max(11, S * .7));
|
|
74
|
+
let O = o + D.l, k = f + D.t, A = p - D.l - D.r, j = m - D.t - D.b;
|
|
75
|
+
if (A <= 0 || j <= 0) return;
|
|
76
|
+
n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(O, k, A, j));
|
|
77
|
+
let M = 0;
|
|
78
|
+
for (let e = 0; e < x; e++) {
|
|
79
|
+
let t = 0;
|
|
80
|
+
for (let n of v) {
|
|
81
|
+
let r = n.values[e] ?? 0;
|
|
82
|
+
g ? t += Math.abs(r) : M = Math.max(M, Math.abs(r));
|
|
83
|
+
}
|
|
84
|
+
g && (M = Math.max(M, t));
|
|
85
|
+
}
|
|
86
|
+
_ && (M = 100), n.valMax != null && (M = n.valMax), M === 0 && (M = 1);
|
|
87
|
+
let N = i(M), P = n.valMax ?? a(M, N), F = "#e0e0e0", I = Math.round(P / N);
|
|
88
|
+
if (e.textBaseline = "middle", e.font = `${Math.max(8, Math.min(11, j / 20))}px sans-serif`, e.fillStyle = "#555", !n.valAxisHidden) for (let t = 0; t <= I; t++) {
|
|
89
|
+
let n = t * N, r = _ ? `${Math.round(n)}%` : n >= 1e3 ? `${(n / 1e3).toFixed(1)}k` : String(n);
|
|
90
|
+
if (h) {
|
|
91
|
+
let i = O + n / P * A;
|
|
92
|
+
e.strokeStyle = t === 0 ? "#aaa" : F, e.lineWidth = t === 0 ? 1 : .5, e.beginPath(), e.moveTo(i, k), e.lineTo(i, k + j), e.stroke(), e.textAlign = "center", e.fillText(r, i, k + j + 10);
|
|
93
|
+
} else {
|
|
94
|
+
let i = k + j - n / P * j;
|
|
95
|
+
e.strokeStyle = t === 0 ? "#aaa" : F, e.lineWidth = t === 0 ? 1 : .5, e.beginPath(), e.moveTo(O, i), e.lineTo(O + A, i), e.stroke(), e.textAlign = "right", e.fillText(r, O - 4, i);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
e.strokeStyle = "#aaa", e.lineWidth = 1, h ? (e.beginPath(), e.moveTo(O, k), e.lineTo(O, k + j), e.stroke()) : (e.beginPath(), e.moveTo(O, k + j), e.lineTo(O + A, k + j), e.stroke());
|
|
99
|
+
let L = h ? j / x : A / x, R = L * (g ? .6 : .6 / Math.max(1, v.length)), z = g ? 0 : L * .6 / Math.max(1, v.length), B = L * .2;
|
|
100
|
+
for (let r = 0; r < x; r++) {
|
|
101
|
+
let i = 0, a = 0;
|
|
102
|
+
if (_) {
|
|
103
|
+
for (let e of v) a += Math.abs(e.values[r] ?? 0);
|
|
104
|
+
a === 0 && (a = 1);
|
|
105
|
+
}
|
|
106
|
+
for (let o = 0; o < v.length; o++) {
|
|
107
|
+
let c = v[o], l = c.values[r] ?? 0, u = _ ? Math.abs(l) / a * 100 : Math.abs(l), d = t(o, c);
|
|
108
|
+
if (h) {
|
|
109
|
+
let t = g ? k + (x - 1 - r) * L + B : k + (x - 1 - r) * L + B + o * z, a = u / P * A, c = g ? O + i / P * A : O;
|
|
110
|
+
e.fillStyle = d, e.fillRect(c, t, a, R), n.showDataLabels && u > 0 && (e.font = `bold ${Math.max(7, Math.min(10, R * .7))}px sans-serif`, e.fillStyle = "#333", e.textAlign = "left", e.textBaseline = "middle", e.fillText(_ ? `${Math.round(u)}%` : s(u), c + a + 2, t + R / 2));
|
|
111
|
+
} else {
|
|
112
|
+
let t = g ? O + r * L + B : O + r * L + B + o * z, a = u / P * j, c = k + j - (g ? i + u : u) / P * j;
|
|
113
|
+
e.fillStyle = d, e.fillRect(t, c, R, a), n.showDataLabels && u > 0 && (e.font = `bold ${Math.max(7, Math.min(10, R * .7))}px sans-serif`, e.fillStyle = "#333", e.textAlign = "center", e.textBaseline = "bottom", e.fillText(_ ? `${Math.round(u)}%` : s(u), t + R / 2, c - 1));
|
|
114
|
+
}
|
|
115
|
+
g && (i += u);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (!n.catAxisHidden) {
|
|
119
|
+
e.fillStyle = "#555", e.font = `${Math.max(8, Math.min(11, L * .5))}px sans-serif`;
|
|
120
|
+
for (let t = 0; t < x; t++) {
|
|
121
|
+
let n = (b[t] ?? "").toString().slice(0, 12);
|
|
122
|
+
if (h) {
|
|
123
|
+
let r = k + (x - 1 - t) * L + L / 2;
|
|
124
|
+
e.textAlign = "right", e.textBaseline = "middle", e.fillText(n, O - 4, r);
|
|
125
|
+
} else {
|
|
126
|
+
let r = O + t * L + L / 2;
|
|
127
|
+
e.textAlign = "center", e.textBaseline = "top", e.fillText(n, r, k + j + 3);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (y.length > 0 && !h) for (let n = 0; n < y.length; n++) {
|
|
132
|
+
let r = y[n], i = t(v.length + n, r);
|
|
133
|
+
e.strokeStyle = i, e.lineWidth = 2, e.setLineDash([]), e.beginPath();
|
|
134
|
+
let a = !1;
|
|
135
|
+
for (let t = 0; t < x; t++) {
|
|
136
|
+
let n = r.values[t];
|
|
137
|
+
if (n == null) {
|
|
138
|
+
a = !1;
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
let i = O + t * L + L / 2, o = k + j - n / P * j;
|
|
142
|
+
a ? e.lineTo(i, o) : (e.moveTo(i, o), a = !0);
|
|
143
|
+
}
|
|
144
|
+
e.stroke();
|
|
145
|
+
for (let t = 0; t < x; t++) {
|
|
146
|
+
let n = r.values[t];
|
|
147
|
+
if (n == null) continue;
|
|
148
|
+
let a = O + t * L + L / 2, o = k + j - n / P * j;
|
|
149
|
+
e.fillStyle = i, e.beginPath(), e.arc(a, o, 3, 0, Math.PI * 2), e.fill();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
C > 0 && l(e, n.series, o + p - C + 4, k, C - 8, j), n.catAxisTitle && c(e, n.catAxisTitle, O, k, A, j, "cat", w), n.valAxisTitle && c(e, n.valAxisTitle, O, k, A, j, "val", w);
|
|
153
|
+
}
|
|
154
|
+
function p(e, n, r) {
|
|
155
|
+
let { x: f, y: p, w: m, h } = r, g = d(n), _ = g.length;
|
|
156
|
+
if (_ === 0) return;
|
|
157
|
+
let v = n.title ? Math.max(14, h * .06) : 0, y = n.series.length >= 1 ? Math.max(80, m * .22) : 0, b = Math.max(8, Math.min(10, h * .045)), x = n.catAxisTitle ? b + 4 : 0, S = n.valAxisTitle ? b + 4 : 0, C = {
|
|
158
|
+
t: v + h * .04,
|
|
159
|
+
r: y + m * .05,
|
|
160
|
+
b: h * .14 + x,
|
|
161
|
+
l: m * .12 + S
|
|
162
|
+
};
|
|
163
|
+
u(e, n.title, f, p + 2, m, Math.max(11, v * .7));
|
|
164
|
+
let w = f + C.l, T = p + C.t, E = m - C.l - C.r, D = h - C.t - C.b;
|
|
165
|
+
if (E <= 0 || D <= 0) return;
|
|
166
|
+
n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(w, T, E, D));
|
|
167
|
+
let O = Infinity, k = -Infinity;
|
|
168
|
+
for (let e of n.series) for (let t of e.values) t != null && (O = Math.min(O, t), k = Math.max(k, t));
|
|
169
|
+
isFinite(O) || (O = 0, k = 1), n.valMin == null ? O > 0 && (O = 0) : O = n.valMin, n.valMax == null ? k < 0 && (k = 0) : k = n.valMax, k === O && (k = O + 1);
|
|
170
|
+
let A = i(k - O), j = n.valMin ?? o(O, A), M = n.valMax ?? a(k, A), N = M - j;
|
|
171
|
+
if (N === 0) return;
|
|
172
|
+
let P = (e) => T + D - (e - j) / N * D, F = (e) => w + (_ === 1 ? E / 2 : e / (_ - 1) * E);
|
|
173
|
+
if (!n.valAxisHidden) {
|
|
174
|
+
let t = Math.round((M - j) / A);
|
|
175
|
+
e.font = `${Math.max(8, Math.min(11, D / 20))}px sans-serif`, e.textBaseline = "middle";
|
|
176
|
+
for (let n = 0; n <= t; n++) {
|
|
177
|
+
let t = j + n * A, r = P(t);
|
|
178
|
+
e.strokeStyle = t === 0 ? "#aaa" : "#e0e0e0", e.lineWidth = t === 0 ? 1 : .5, e.beginPath(), e.moveTo(w, r), e.lineTo(w + E, r), e.stroke(), e.fillStyle = "#555", e.textAlign = "right", e.fillText(s(t), w - 4, r);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
e.strokeStyle = "#aaa", e.lineWidth = 1, e.beginPath(), e.moveTo(w, T + D), e.lineTo(w + E, T + D), e.stroke();
|
|
182
|
+
let I = Math.max(3, D * .015);
|
|
183
|
+
for (let r = 0; r < n.series.length; r++) {
|
|
184
|
+
let i = n.series[r], a = t(r, i);
|
|
185
|
+
e.strokeStyle = a, e.lineWidth = 2, e.setLineDash([]), e.beginPath();
|
|
186
|
+
let o = !1;
|
|
187
|
+
for (let t = 0; t < _; t++) {
|
|
188
|
+
let n = i.values[t];
|
|
189
|
+
if (n == null) {
|
|
190
|
+
o = !1;
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
let r = F(t), a = P(n);
|
|
194
|
+
o ? e.lineTo(r, a) : (e.moveTo(r, a), o = !0);
|
|
195
|
+
}
|
|
196
|
+
e.stroke(), e.fillStyle = a;
|
|
197
|
+
for (let t = 0; t < _; t++) {
|
|
198
|
+
let r = i.values[t];
|
|
199
|
+
r != null && (e.beginPath(), e.arc(F(t), P(r), I, 0, Math.PI * 2), e.fill(), n.showDataLabels && (e.font = `${Math.max(7, Math.round(I * 1.5))}px sans-serif`, e.fillStyle = "#333", e.textAlign = "center", e.textBaseline = "bottom", e.fillText(s(r), F(t), P(r) - I - 1), e.fillStyle = a));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (!n.catAxisHidden) {
|
|
203
|
+
let t = Math.max(1, Math.ceil(_ / 8));
|
|
204
|
+
e.fillStyle = "#555", e.textAlign = "center", e.textBaseline = "top", e.font = `${Math.max(8, Math.min(11, E / _ * .8))}px sans-serif`;
|
|
205
|
+
for (let n = 0; n < _; n += t) e.fillText((g[n] ?? "").toString().slice(0, 10), F(n), T + D + 3);
|
|
206
|
+
}
|
|
207
|
+
y > 0 && l(e, n.series, f + m - y + 4, T, y - 8, D), n.catAxisTitle && c(e, n.catAxisTitle, w, T, E, D, "cat", b), n.valAxisTitle && c(e, n.valAxisTitle, w, T, E, D, "val", b);
|
|
208
|
+
}
|
|
209
|
+
function m(e, n, o) {
|
|
210
|
+
let { x: f, y: p, w: m, h } = o, g = d(n), _ = g.length;
|
|
211
|
+
if (_ === 0) return;
|
|
212
|
+
let v = n.chartType === "stackedArea" || n.chartType === "stackedAreaPct", y = n.title ? Math.max(14, h * .06) : 0, b = n.series.length >= 1 ? Math.max(80, m * .22) : 0, x = Math.max(8, Math.min(10, h * .045)), S = n.catAxisTitle ? x + 4 : 0, C = n.valAxisTitle ? x + 4 : 0, w = {
|
|
213
|
+
t: y + h * .04,
|
|
214
|
+
r: b + m * .05,
|
|
215
|
+
b: h * .14 + S,
|
|
216
|
+
l: m * .12 + C
|
|
217
|
+
};
|
|
218
|
+
u(e, n.title, f, p + 2, m, Math.max(11, y * .7));
|
|
219
|
+
let T = f + w.l, E = p + w.t, D = m - w.l - w.r, O = h - w.t - w.b;
|
|
220
|
+
if (D <= 0 || O <= 0) return;
|
|
221
|
+
n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(T, E, D, O));
|
|
222
|
+
let k = 0;
|
|
223
|
+
for (let e = 0; e < _; e++) if (v) {
|
|
224
|
+
let t = 0;
|
|
225
|
+
for (let r of n.series) t += r.values[e] ?? 0;
|
|
226
|
+
k = Math.max(k, t);
|
|
227
|
+
} else for (let t of n.series) k = Math.max(k, t.values[e] ?? 0);
|
|
228
|
+
n.valMax != null && (k = n.valMax), k === 0 && (k = 1);
|
|
229
|
+
let A = i(k), j = n.valMax ?? a(k, A), M = (e) => T + (_ === 1 ? D / 2 : e / (_ - 1) * D), N = (e) => E + O - e / j * O;
|
|
230
|
+
if (!n.valAxisHidden) {
|
|
231
|
+
e.font = `${Math.max(8, Math.min(11, O / 20))}px sans-serif`, e.textBaseline = "middle";
|
|
232
|
+
let t = Math.round(j / A);
|
|
233
|
+
for (let n = 0; n <= t; n++) {
|
|
234
|
+
let t = n * A, r = N(t);
|
|
235
|
+
e.strokeStyle = n === 0 ? "#aaa" : "#e0e0e0", e.lineWidth = n === 0 ? 1 : .5, e.beginPath(), e.moveTo(T, r), e.lineTo(T + D, r), e.stroke(), e.fillStyle = "#555", e.textAlign = "right", e.fillText(s(t), T - 4, r);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
e.strokeStyle = "#aaa", e.lineWidth = 1, e.beginPath(), e.moveTo(T, E + O), e.lineTo(T + D, E + O), e.stroke();
|
|
239
|
+
let P = v ? Array(_).fill(0) : null;
|
|
240
|
+
for (let i = n.series.length - 1; i >= 0; i--) {
|
|
241
|
+
let a = n.series[i], o = t(i, a), s = E + O;
|
|
242
|
+
if (e.beginPath(), v && P) {
|
|
243
|
+
for (let t = 0; t < _; t++) {
|
|
244
|
+
let n = (a.values[t] ?? 0) + P[t], r = M(t), i = N(n);
|
|
245
|
+
t === 0 ? e.moveTo(r, i) : e.lineTo(r, i);
|
|
246
|
+
}
|
|
247
|
+
for (let t = _ - 1; t >= 0; t--) e.lineTo(M(t), N(P[t]));
|
|
248
|
+
for (let e = 0; e < _; e++) P[e] += a.values[e] ?? 0;
|
|
249
|
+
} else {
|
|
250
|
+
e.moveTo(M(0), s);
|
|
251
|
+
for (let t = 0; t < _; t++) e.lineTo(M(t), N(a.values[t] ?? 0));
|
|
252
|
+
e.lineTo(M(_ - 1), s);
|
|
253
|
+
}
|
|
254
|
+
e.closePath(), e.fillStyle = r(o, .6), e.fill(), e.strokeStyle = o, e.lineWidth = 1.5, e.setLineDash([]), e.stroke();
|
|
255
|
+
}
|
|
256
|
+
if (!n.catAxisHidden) {
|
|
257
|
+
let t = Math.max(1, Math.ceil(_ / 8));
|
|
258
|
+
e.fillStyle = "#555", e.textAlign = "center", e.textBaseline = "top", e.font = `${Math.max(8, Math.min(11, D / _ * .8))}px sans-serif`;
|
|
259
|
+
for (let n = 0; n < _; n += t) e.fillText((g[n] ?? "").toString().slice(0, 10), M(n), E + O + 3);
|
|
260
|
+
}
|
|
261
|
+
b > 0 && l(e, n.series, f + m - b + 4, E, b - 8, O), n.catAxisTitle && c(e, n.catAxisTitle, T, E, D, O, "cat", x), n.valAxisTitle && c(e, n.valAxisTitle, T, E, D, O, "val", x);
|
|
262
|
+
}
|
|
263
|
+
function h(e, t, r, i) {
|
|
264
|
+
let { x: a, y: o, w: s, h: c } = r, l = t.series[0];
|
|
265
|
+
if (!l) return;
|
|
266
|
+
let d = l.categories && l.categories.length > 0 ? l.categories : t.categories, f = l.values.map((e) => Math.abs(e ?? 0)), p = f.reduce((e, t) => e + t, 0);
|
|
267
|
+
if (p === 0) return;
|
|
268
|
+
let m = t.title ? Math.max(14, c * .06) : 0;
|
|
269
|
+
u(e, t.title, a, o + 2, s, Math.max(11, m * .7));
|
|
270
|
+
let h = s - Math.max(80, s * .28), g = c - m - c * .04, _ = a + h / 2, v = o + m + c * .04 + g / 2, y = Math.min(h, g) * .42, b = i ? y * .5 : 0, x = -Math.PI / 2;
|
|
271
|
+
for (let r = 0; r < f.length; r++) {
|
|
272
|
+
let a = f[r] / p * Math.PI * 2, o = n(r, l);
|
|
273
|
+
if (e.beginPath(), e.moveTo(_, v), e.arc(_, v, y, x, x + a), e.closePath(), e.fillStyle = o, e.fill(), e.strokeStyle = "#fff", e.lineWidth = 1, e.stroke(), t.showDataLabels && a > .15) {
|
|
274
|
+
let t = x + a / 2, n = y * (i ? .75 : .6), o = _ + Math.cos(t) * n, s = v + Math.sin(t) * n, c = Math.round(f[r] / p * 100);
|
|
275
|
+
e.font = `bold ${Math.max(8, y * .1)}px sans-serif`, e.fillStyle = "#fff", e.textAlign = "center", e.textBaseline = "middle", e.fillText(`${c}%`, o, s);
|
|
276
|
+
}
|
|
277
|
+
x += a;
|
|
278
|
+
}
|
|
279
|
+
i && (e.beginPath(), e.arc(_, v, b, 0, Math.PI * 2), e.fillStyle = "#fff", e.fill());
|
|
280
|
+
let S = a + h + 4, C = Math.max(9, Math.min(12, c / (f.length + 2)));
|
|
281
|
+
e.font = `${C}px sans-serif`, e.textBaseline = "middle";
|
|
282
|
+
let w = C + 4, T = o + (c - w * f.length) / 2;
|
|
283
|
+
for (let t = 0; t < f.length; t++) e.fillStyle = n(t, l), e.fillRect(S, T, 10, C), e.fillStyle = "#333", e.textAlign = "left", e.fillText((d[t] ?? `Item ${t + 1}`).toString().slice(0, 18), S + 14, T + C / 2), T += w;
|
|
284
|
+
}
|
|
285
|
+
function g(e, n, o) {
|
|
286
|
+
let { x: s, y: c, w: f, h: p } = o, m = d(n), h = m.length;
|
|
287
|
+
if (h < 3) return;
|
|
288
|
+
let g = n.title ? Math.max(14, p * .06) : 0, _ = n.series.length > 1 ? Math.max(70, f * .2) : 0;
|
|
289
|
+
u(e, n.title, s, c + 2, f, Math.max(11, g * .7));
|
|
290
|
+
let v = f - _, y = p - g - p * .04, b = s + v / 2, x = c + g + p * .04 + y / 2, S = Math.min(v, y) * .38, C = 0;
|
|
291
|
+
for (let e of n.series) for (let t of e.values) C = Math.max(C, t ?? 0);
|
|
292
|
+
n.valMax != null && (C = n.valMax), C === 0 && (C = 1);
|
|
293
|
+
let w = i(C), T = n.valMax ?? a(C, w), E = -Math.PI / 2, D = (e) => E + e / h * Math.PI * 2, O = Math.round(T / w);
|
|
294
|
+
e.strokeStyle = "#ddd", e.lineWidth = .5;
|
|
295
|
+
for (let t = 1; t <= O; t++) {
|
|
296
|
+
let n = t / O * S;
|
|
297
|
+
e.beginPath();
|
|
298
|
+
for (let t = 0; t < h; t++) {
|
|
299
|
+
let r = D(t), i = b + Math.cos(r) * n, a = x + Math.sin(r) * n;
|
|
300
|
+
t === 0 ? e.moveTo(i, a) : e.lineTo(i, a);
|
|
301
|
+
}
|
|
302
|
+
e.closePath(), e.stroke();
|
|
303
|
+
}
|
|
304
|
+
e.strokeStyle = "#bbb", e.lineWidth = .5;
|
|
305
|
+
for (let t = 0; t < h; t++) {
|
|
306
|
+
let n = D(t);
|
|
307
|
+
e.beginPath(), e.moveTo(b, x), e.lineTo(b + Math.cos(n) * S, x + Math.sin(n) * S), e.stroke();
|
|
308
|
+
}
|
|
309
|
+
e.font = `${Math.max(8, Math.min(11, S * .2))}px sans-serif`, e.fillStyle = "#444", e.textBaseline = "middle";
|
|
310
|
+
for (let t = 0; t < h; t++) {
|
|
311
|
+
let n = D(t), r = b + Math.cos(n) * (S + 12), i = x + Math.sin(n) * (S + 12);
|
|
312
|
+
e.textAlign = Math.cos(n) < -.1 ? "right" : Math.cos(n) > .1 ? "left" : "center", e.fillText((m[t] ?? "").toString().slice(0, 12), r, i);
|
|
313
|
+
}
|
|
314
|
+
for (let i = 0; i < n.series.length; i++) {
|
|
315
|
+
let a = n.series[i], o = t(i, a);
|
|
316
|
+
e.beginPath();
|
|
317
|
+
for (let t = 0; t < h; t++) {
|
|
318
|
+
let n = (a.values[t] ?? 0) / T, r = D(t), i = b + Math.cos(r) * S * n, o = x + Math.sin(r) * S * n;
|
|
319
|
+
t === 0 ? e.moveTo(i, o) : e.lineTo(i, o);
|
|
320
|
+
}
|
|
321
|
+
e.closePath(), e.fillStyle = r(o, .25), e.fill(), e.strokeStyle = o, e.lineWidth = 2, e.stroke();
|
|
322
|
+
}
|
|
323
|
+
_ > 0 && l(e, n.series, s + f - _ + 4, c + g + p * .04, _ - 8, y);
|
|
324
|
+
}
|
|
325
|
+
function _(e, n, r) {
|
|
326
|
+
let { x: a, y: o, w: d, h: f } = r, p = n.title ? Math.max(14, f * .06) : 0, m = n.series.length >= 1 ? Math.max(80, d * .22) : 0, h = Math.max(8, Math.min(10, f * .045)), g = n.catAxisTitle ? h + 4 : 0, _ = n.valAxisTitle ? h + 4 : 0, v = {
|
|
327
|
+
t: p + f * .06,
|
|
328
|
+
r: m + d * .05,
|
|
329
|
+
b: f * .12 + g,
|
|
330
|
+
l: d * .12 + _
|
|
331
|
+
};
|
|
332
|
+
u(e, n.title, a, o + 2, d, Math.max(11, p * .7));
|
|
333
|
+
let y = a + v.l, b = o + v.t, x = d - v.l - v.r, S = f - v.t - v.b;
|
|
334
|
+
if (x <= 0 || S <= 0) return;
|
|
335
|
+
n.plotAreaBg && (e.fillStyle = `#${n.plotAreaBg}`, e.fillRect(y, b, x, S));
|
|
336
|
+
let C = [], w = [];
|
|
337
|
+
for (let e of n.series) {
|
|
338
|
+
let t = e.categories ?? [];
|
|
339
|
+
for (let e of t) {
|
|
340
|
+
let t = parseFloat(e);
|
|
341
|
+
isNaN(t) || C.push(t);
|
|
342
|
+
}
|
|
343
|
+
for (let t of e.values) t != null && w.push(t);
|
|
344
|
+
}
|
|
345
|
+
let T = C.length === 0;
|
|
346
|
+
if (T) {
|
|
347
|
+
let e = Math.max(...n.series.map((e) => e.values.length));
|
|
348
|
+
for (let t = 0; t < e; t++) C.push(t);
|
|
349
|
+
}
|
|
350
|
+
let E = Math.min(...C), D = Math.max(...C), O = Math.min(...w), k = Math.max(...w);
|
|
351
|
+
E === D && (--E, D += 1), O === k && (--O, k += 1), n.valMin == null ? O > 0 && (O = 0) : O = n.valMin, n.valMax != null && (k = n.valMax);
|
|
352
|
+
let A = (e) => y + (e - E) / (D - E) * x, j = (e) => b + S - (e - O) / (k - O) * S;
|
|
353
|
+
if (!n.valAxisHidden) {
|
|
354
|
+
e.font = `${Math.max(8, Math.min(11, S / 20))}px sans-serif`;
|
|
355
|
+
let t = i(k - O), n = Math.round((k - O) / t) + 1;
|
|
356
|
+
for (let r = 0; r < n; r++) {
|
|
357
|
+
let n = O + r * t;
|
|
358
|
+
if (n > k + t * .01) break;
|
|
359
|
+
let i = j(n);
|
|
360
|
+
e.strokeStyle = "#e0e0e0", e.lineWidth = .5, e.beginPath(), e.moveTo(y, i), e.lineTo(y + x, i), e.stroke(), e.fillStyle = "#555", e.textAlign = "right", e.textBaseline = "middle", e.fillText(s(n), y - 4, i);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
e.strokeStyle = "#aaa", e.lineWidth = 1, e.beginPath(), e.moveTo(y, b + S), e.lineTo(y + x, b + S), e.stroke(), e.beginPath(), e.moveTo(y, b), e.lineTo(y, b + S), e.stroke();
|
|
364
|
+
let M = Math.max(3, S * .015);
|
|
365
|
+
for (let r = 0; r < n.series.length; r++) {
|
|
366
|
+
let i = n.series[r];
|
|
367
|
+
e.fillStyle = t(r, i);
|
|
368
|
+
let a = i.categories ?? [];
|
|
369
|
+
for (let t = 0; t < i.values.length; t++) {
|
|
370
|
+
let n = i.values[t];
|
|
371
|
+
if (n == null) continue;
|
|
372
|
+
let r = T ? t : parseFloat(a[t] ?? "0");
|
|
373
|
+
isNaN(r) || (e.beginPath(), e.arc(A(r), j(n), M, 0, Math.PI * 2), e.fill());
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
m > 0 && l(e, n.series, a + d - m + 4, b, m - 8, S), n.catAxisTitle && c(e, n.catAxisTitle, y, b, x, S, "cat", h), n.valAxisTitle && c(e, n.valAxisTitle, y, b, x, S, "val", h);
|
|
377
|
+
}
|
|
378
|
+
function v(e, t, n) {
|
|
379
|
+
let { x: r, y: a, w: o, h: s } = n, c = o * .11, l = o * .04, u = s * .08, d = s * .18, f = r + c, p = a + u, m = o - c - l, h = s - u - d, g = t.series[0]?.values ?? [], _ = t.categories, v = _.length;
|
|
380
|
+
if (v === 0) return;
|
|
381
|
+
let y = new Set(t.subtotalIndices), b = 0, x = [];
|
|
382
|
+
for (let e = 0; e < v; e++) {
|
|
383
|
+
let t = g[e] ?? 0;
|
|
384
|
+
if (e === 0 || y.has(e)) x.push({
|
|
385
|
+
start: 0,
|
|
386
|
+
end: t,
|
|
387
|
+
isSub: !0,
|
|
388
|
+
isPos: !0
|
|
389
|
+
}), b = t;
|
|
390
|
+
else {
|
|
391
|
+
let e = t >= 0 ? b : b + t, n = t >= 0 ? b + t : b;
|
|
392
|
+
x.push({
|
|
393
|
+
start: e,
|
|
394
|
+
end: n,
|
|
395
|
+
isSub: !1,
|
|
396
|
+
isPos: t >= 0
|
|
397
|
+
}), b += t;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
let S = x.map((e) => e.end), C = x.map((e) => e.start), w = Math.max(...S, ...C), T = Math.min(...C, 0), E = w - T;
|
|
401
|
+
if (E <= 0) return;
|
|
402
|
+
let D = E * 1.1, O = T - E * .05, k = O + D, A = i(D);
|
|
403
|
+
e.save();
|
|
404
|
+
let j = Math.round(s * .042);
|
|
405
|
+
e.font = `${j}px sans-serif`, e.strokeStyle = "#e8e8e8", e.lineWidth = .7, e.fillStyle = "#666", e.textAlign = "right", e.textBaseline = "middle";
|
|
406
|
+
for (let t = Math.ceil(O / A) * A; t <= k; t += A) {
|
|
407
|
+
let n = p + h * (1 - (t - O) / D);
|
|
408
|
+
e.beginPath(), e.moveTo(f, n), e.lineTo(f + m, n), e.stroke(), e.fillText(t.toLocaleString(), f - 4, n);
|
|
409
|
+
}
|
|
410
|
+
e.strokeStyle = "#bbb", e.lineWidth = 1, e.beginPath(), e.moveTo(f, p), e.lineTo(f, p + h), e.lineTo(f + m, p + h), e.stroke();
|
|
411
|
+
let M = m / v * .55, N = m / v;
|
|
412
|
+
x.forEach((t, n) => {
|
|
413
|
+
let r = f + N * n + (N - M) / 2, i = p + h * (1 - (t.end - O) / D), a = p + h * (1 - (t.start - O) / D), o = Math.max(1, a - i);
|
|
414
|
+
if (t.isSub ? (e.fillStyle = "#196ECA", e.fillRect(r, i, M, o)) : (e.strokeStyle = t.isPos ? "#5BA4E6" : "#E46970", e.lineWidth = 1.5, e.strokeRect(r + .75, i + .75, M - 1.5, o - 1.5)), n < v - 1) {
|
|
415
|
+
let o = f + N * (n + 1) + (N - M) / 2, s = t.isPos ? i : a;
|
|
416
|
+
e.strokeStyle = "#ccc", e.lineWidth = .8, e.setLineDash([3, 3]), e.beginPath(), e.moveTo(r + M, s), e.lineTo(o, s), e.stroke(), e.setLineDash([]);
|
|
417
|
+
}
|
|
418
|
+
let c = g[n] ?? 0, l = c < 0 ? `△ ${Math.abs(c).toLocaleString()}` : c.toLocaleString();
|
|
419
|
+
e.fillStyle = "#595959", e.font = `bold ${Math.round(s * .044)}px sans-serif`, e.textAlign = "center", e.textBaseline = "bottom", e.fillText(l, r + M / 2, i - 3);
|
|
420
|
+
}), e.textAlign = "center", e.textBaseline = "top", e.fillStyle = "#666", e.font = `${Math.round(s * .038)}px sans-serif`;
|
|
421
|
+
let P = p + h + 4;
|
|
422
|
+
for (let t = 0; t < v; t++) {
|
|
423
|
+
let n = f + N * t + N / 2;
|
|
424
|
+
_[t].split(/\s+/).forEach((t, r) => e.fillText(t, n, P + r * (j + 2)));
|
|
425
|
+
}
|
|
426
|
+
e.restore();
|
|
427
|
+
}
|
|
428
|
+
function y(e, t, n) {
|
|
429
|
+
let { x: r, y: i, w: a, h: o } = n;
|
|
430
|
+
if (e.fillStyle = "#ffffff", e.fillRect(r, i, a, o), e.strokeStyle = "#d0d0d0", e.lineWidth = 1, e.strokeRect(r + .5, i + .5, a - 1, o - 1), t.series.length === 0) {
|
|
431
|
+
e.fillStyle = "#888", e.font = "12px sans-serif", e.textAlign = "center", e.textBaseline = "middle", e.fillText("(no data)", r + a / 2, i + o / 2);
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
switch (t.chartType) {
|
|
435
|
+
case "clusteredBar":
|
|
436
|
+
case "clusteredBarH":
|
|
437
|
+
case "stackedBar":
|
|
438
|
+
case "stackedBarH":
|
|
439
|
+
case "stackedBarPct":
|
|
440
|
+
case "stackedBarHPct":
|
|
441
|
+
f(e, t, n);
|
|
442
|
+
break;
|
|
443
|
+
case "line":
|
|
444
|
+
case "stackedLine":
|
|
445
|
+
case "stackedLinePct":
|
|
446
|
+
p(e, t, n);
|
|
447
|
+
break;
|
|
448
|
+
case "area":
|
|
449
|
+
case "stackedArea":
|
|
450
|
+
case "stackedAreaPct":
|
|
451
|
+
m(e, t, n);
|
|
452
|
+
break;
|
|
453
|
+
case "pie":
|
|
454
|
+
h(e, t, n, !1);
|
|
455
|
+
break;
|
|
456
|
+
case "doughnut":
|
|
457
|
+
h(e, t, n, !0);
|
|
458
|
+
break;
|
|
459
|
+
case "radar":
|
|
460
|
+
g(e, t, n);
|
|
461
|
+
break;
|
|
462
|
+
case "scatter":
|
|
463
|
+
case "bubble":
|
|
464
|
+
_(e, t, n);
|
|
465
|
+
break;
|
|
466
|
+
case "waterfall":
|
|
467
|
+
v(e, t, n);
|
|
468
|
+
break;
|
|
469
|
+
default: e.fillStyle = "#888", e.font = "11px sans-serif", e.textAlign = "center", e.textBaseline = "middle", e.fillText(`Chart: ${t.chartType}`, r + a / 2, i + o / 2);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
//#endregion
|
|
473
|
+
export { y as t };
|