@undp/data-viz 2.1.6 → 2.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./index-CHPV5EwG-CTPQjnHt.cjs"),O=require("react"),ot=require("./Typography-DX7PlgQU.cjs"),xt=require("./index-Cno4Q0YE.cjs"),mt=require("./Source-DYMJRrsq.cjs"),pt=require("./index-DQA8q5sC.cjs"),dt=require("./Tooltip-uUdw6wJL.cjs"),W=require("./Colors.cjs"),ct=require("./numberFormattingFunction-02t-wJta.cjs"),gt=require("./DetailsModal-BN0HDFlV.cjs"),z=require("./array-DMyR1sql.cjs"),ht=require("./use-in-view-QcfiW0w3.cjs"),ft=require("./index-DG2bgAva.cjs"),rt=require("./proxy-BxvUI_9l.cjs"),yt=require("./GraphFooter.cjs"),jt=require("./GraphHeader.cjs"),vt=require("./EmptyState-gLDRXBHm.cjs"),it=require("./GraphContainer-d8A46BK2.cjs"),bt=Math.PI,st=2*bt;function Et(l,t){return t<l?-1:t>l?1:t>=l?0:NaN}function Ct(l){return l}function Rt(){var l=Ct,t=Et,n=null,c=z.constant(0),r=z.constant(st),p=z.constant(0);function s(e){var a,f=(e=z.array(e)).length,d,w,x=0,g=new Array(f),v=new Array(f),y=+c.apply(this,arguments),A=Math.min(st,Math.max(-st,r.apply(this,arguments)-y)),m,P=Math.min(Math.abs(A)/f,p.apply(this,arguments)),F=P*(A<0?-1:1),h;for(a=0;a<f;++a)(h=v[g[a]=a]=+l(e[a],a,e))>0&&(x+=h);for(t!=null?g.sort(function(R,S){return t(v[R],v[S])}):n!=null&&g.sort(function(R,S){return n(e[R],e[S])}),a=0,w=x?(A-f*F)/x:0;a<f;++a,y=m)d=g[a],h=v[d],m=y+(h>0?h*w:0)+F,v[d]={data:e[d],index:a,value:h,startAngle:y,endAngle:m,padAngle:P};return v}return s.value=function(e){return arguments.length?(l=typeof e=="function"?e:z.constant(+e),s):l},s.sortValues=function(e){return arguments.length?(t=e,n=null,s):t},s.sort=function(e){return arguments.length?(n=e,t=null,s):n},s.startAngle=function(e){return arguments.length?(c=typeof e=="function"?e:z.constant(+e),s):c},s.endAngle=function(e){return arguments.length?(r=typeof e=="function"?e:z.constant(+e),s):r},s.padAngle=function(e){return arguments.length?(p=typeof e=="function"?e:z.constant(+e),s):p},s}const at=(l,t,n,c)=>({x:l+n*Math.cos(c),y:t+n*Math.sin(c)});function lt(l,t,n,c,r){const p=at(l,t,n,c),s=at(l,t,n,r===2*Math.PI?1.9999999999*Math.PI:r),e=r-c<=Math.PI?"0":"1";return["M",p.x,p.y,"A",n,n,0,e,1,s.x,s.y].join(" ")}function Mt(l){const t=o.compilerRuntimeExports.c(59),{mainText:n,data:c,radius:r,colors:p,subNote:s,strokeWidth:e,tooltip:a,onSeriesMouseOver:f,onSeriesMouseClick:d,colorDomain:w,resetSelectionOnDoubleClick:x,detailsOnClick:g,styles:v,classNames:y,precision:A,animate:m,trackColor:P}=l,F=O.useRef(null);let h;t[0]!==m.amount||t[1]!==m.once?(h={once:m.once,amount:m.amount},t[0]=m.amount,t[1]=m.once,t[2]=h):h=t[2];const R=ht.useInView(F,h),S=Rt().sort(null).startAngle(0).value(Dt),[j,X]=O.useState(void 0),[b,E]=O.useState(void 0),[G,Y]=O.useState(void 0),[T,J]=O.useState(void 0),K=rt.motion,Q=`${r*2}px`,U=`${r*2}px`,M=`0 0 ${r*2} ${r*2}`,I="ltr",et="mx-auto",$=rt.motion,Z=`translate(${r} ${r})`;let q;t[3]!==c||t[4]!==n||t[5]!==A||t[6]!==r||t[7]!==e||t[8]!==s?(q=n||s?o.jsxRuntimeExports.jsx("foreignObject",{y:0-(r-e),x:0-(r-e),width:2*(r-e),height:2*(r-e),children:o.jsxRuntimeExports.jsxs("div",{className:"flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4",children:[n?o.jsxRuntimeExports.jsx(ot.v,{marginBottom:"none",className:"donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center",children:typeof n=="string"?n:c.findIndex(u=>u.label===n.label)!==-1?ct.numberFormattingFunction(c[c.findIndex(u=>u.label===n.label)].size,"NA",A,n.prefix,n.suffix):"NA"}):null,s?o.jsxRuntimeExports.jsx(ot.j,{marginBottom:"none",size:"base",leading:"none",className:"donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold",children:s}):typeof n=="string"||!n?null:o.jsxRuntimeExports.jsx(ot.j,{size:"base",marginBottom:"none",leading:"none",className:"donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold",children:n.label})]})}):null,t[3]=c,t[4]=n,t[5]=A,t[6]=r,t[7]=e,t[8]=s,t[9]=q):q=t[9];const _=r-e/2;let D;t[10]!==e||t[11]!==_||t[12]!==P?(D=o.jsxRuntimeExports.jsx("circle",{cx:0,cy:0,r:_,fill:"none",stroke:P,strokeWidth:e}),t[10]=e,t[11]=_,t[12]=P,t[13]=D):D=t[13];const V=ft.AnimatePresence;let N;t[14]!==m.duration||t[15]!==w||t[16]!==p||t[17]!==g||t[18]!==R||t[19]!==b||t[20]!==j||t[21]!==d||t[22]!==f||t[23]!==r||t[24]!==x||t[25]!==E||t[26]!==e?(N=(u,ut)=>o.jsxRuntimeExports.jsx(rt.motion.path,{variants:{initial:{pathLength:0,d:lt(0,0,r-e/2,u.startAngle-Math.PI/2,u.endAngle-Math.PI/2),opacity:j?j.label===u.data.label?1:.3:1},whileInView:{pathLength:1,d:lt(0,0,r-e/2,u.startAngle-Math.PI/2,u.endAngle-Math.PI/2),opacity:j?j.label===u.data.label?1:.3:1,transition:{duration:m.duration}}},initial:"initial",animate:R?"whileInView":"initial",exit:{opacity:0,transition:{duration:m.duration}},style:{stroke:w.indexOf(u.data.label)!==-1?p[w.indexOf(u.data.label)%p.length]:W.Colors.gray,strokeWidth:e,fill:"none"},onMouseEnter:tt=>{X(u.data),J(tt.clientY),Y(tt.clientX),f?.(u)},onClick:()=>{(d||g)&&(pt.isEqual(b,u.data)&&x?(E(void 0),d?.(void 0)):(E(u.data),d&&d(u.data)))},onMouseMove:tt=>{X(u.data),J(tt.clientY),Y(tt.clientX)},onMouseLeave:()=>{X(void 0),Y(void 0),J(void 0),f?.(void 0)}},ut),t[14]=m.duration,t[15]=w,t[16]=p,t[17]=g,t[18]=R,t[19]=b,t[20]=j,t[21]=d,t[22]=f,t[23]=r,t[24]=x,t[25]=E,t[26]=e,t[27]=N):N=t[27];const i=S(c).map(N);let C;t[28]!==V||t[29]!==i?(C=o.jsxRuntimeExports.jsx(V,{children:i}),t[28]=V,t[29]=i,t[30]=C):C=t[30];let k;t[31]!==D||t[32]!==C||t[33]!==$.g||t[34]!==Z||t[35]!==q?(k=o.jsxRuntimeExports.jsxs($.g,{transform:Z,children:[q,D,C]}),t[31]=D,t[32]=C,t[33]=$.g,t[34]=Z,t[35]=q,t[36]=k):k=t[36];let B;t[37]!==K.svg||t[38]!==k||t[39]!==Q||t[40]!==U||t[41]!==M?(B=o.jsxRuntimeExports.jsx(K.svg,{ref:F,width:Q,height:U,viewBox:M,direction:I,className:et,children:k}),t[37]=K.svg,t[38]=k,t[39]=Q,t[40]=U,t[41]=M,t[42]=B):B=t[42];let H;t[43]!==y?.tooltip||t[44]!==G||t[45]!==T||t[46]!==j||t[47]!==v?.tooltip||t[48]!==a?(H=j&&a&&G&&T?o.jsxRuntimeExports.jsx(dt.Tooltip,{data:j,body:a,xPos:G,yPos:T,backgroundStyle:v?.tooltip,className:y?.tooltip}):null,t[43]=y?.tooltip,t[44]=G,t[45]=T,t[46]=j,t[47]=v?.tooltip,t[48]=a,t[49]=H):H=t[49];let L;t[50]!==y?.modal||t[51]!==g||t[52]!==b||t[53]!==E?(L=g&&b!==void 0?o.jsxRuntimeExports.jsx(gt.DetailsModal,{body:g,data:b,setData:E,className:y?.modal}):null,t[50]=y?.modal,t[51]=g,t[52]=b,t[53]=E,t[54]=L):L=t[54];let nt;return t[55]!==B||t[56]!==H||t[57]!==L?(nt=o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[B,H,L]}),t[55]=B,t[56]=H,t[57]=L,t[58]=nt):nt=t[58],nt}function Dt(l){return l.size}function Nt(l){const{mainText:t,graphTitle:n,colors:c=W.Colors.light.categoricalColors.colors,suffix:r="",sources:p,prefix:s="",strokeWidth:e=50,graphDescription:a,subNote:f,footNote:d,radius:w,data:x,showColorScale:g=!0,padding:v,backgroundColor:y=!1,tooltip:A,onSeriesMouseOver:m,graphID:P,onSeriesMouseClick:F,graphDownload:h=!1,dataDownload:R=!1,colorDomain:S,sortData:j,language:X="en",theme:b="light",width:E,height:G,minHeight:Y=0,relativeHeight:T,ariaLabel:J,resetSelectionOnDoubleClick:K=!0,colorScaleMaxWidth:Q,detailsOnClick:U,styles:M,classNames:I,precision:et=2,animate:$=!1,trackColor:Z=W.Colors.light.grays["gray-200"]}=l,[q,_]=O.useState(0),D=O.useRef(null),V=O.useRef(null);O.useEffect(()=>{const i=new ResizeObserver(C=>{_((Math.min(C[0].target.clientWidth||620,C[0].target.clientHeight||480)||420)/2)});return D.current&&i.observe(D.current),()=>i.disconnect()},[]);const N=j?xt.orderBy(x,["size"],[j]):x;return o.jsxRuntimeExports.jsxs(it.GraphContainer,{className:I?.graphContainer,style:M?.graphContainer,id:P,ref:V,"aria-label":J,backgroundColor:y,theme:b,language:X,minHeight:Y,width:E,height:G,relativeHeight:T,padding:v,children:[n||a||h||R?o.jsxRuntimeExports.jsx(jt.GraphHeader,{styles:{title:M?.title,description:M?.description},classNames:{title:I?.title,description:I?.description},graphTitle:n,graphDescription:a,width:E,graphDownload:h?V:void 0,dataDownload:R?x.map(i=>i.data).filter(i=>i!==void 0).length>0?x.map(i=>i.data).filter(i=>i!==void 0):x.filter(i=>i!==void 0):null}):null,g&&x.length>0?o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("div",{className:o.mo("leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap",I?.colorLegend),style:{maxWidth:Q},"aria-label":"Color legend",children:N.map((i,C)=>o.jsxRuntimeExports.jsxs("div",{className:"flex gap-2 items-center pb-3",children:[o.jsxRuntimeExports.jsx("div",{className:"w-3 h-3 rounded-full",style:{backgroundColor:(S||N.map(k=>k.label)).indexOf(i.label)!==-1?(c||W.Colors[b].categoricalColors.colors)[(S||N.map(k=>k.label)).indexOf(i.label)%(c||W.Colors[b].categoricalColors.colors).length]:W.Colors.gray}}),o.jsxRuntimeExports.jsxs(ot.j,{marginBottom:"none",size:"sm",className:"text-primary-gray-700 dark:text-primary-gray-100",children:[i.label,":"," ",o.jsxRuntimeExports.jsx("span",{className:"font-bold",style:{fontSize:"inherit"},children:ct.numberFormattingFunction(i.size,"NA",et,s,r)})]})]},C))}),o.jsxRuntimeExports.jsx(mt.n,{size:"lg"})]}):null,o.jsxRuntimeExports.jsxs(it.GraphArea,{ref:D,children:[x.length===0&&o.jsxRuntimeExports.jsx(vt.EmptyState,{}),q&&x.length>0?o.jsxRuntimeExports.jsx(Mt,{mainText:t,data:N,colors:c,radius:w||q,subNote:f,strokeWidth:e,tooltip:A,colorDomain:S||N.map(i=>i.label),onSeriesMouseOver:m,onSeriesMouseClick:F,resetSelectionOnDoubleClick:K,styles:M,detailsOnClick:U,precision:et,animate:$===!0?{duration:.5,once:!0,amount:.5}:$||{duration:0,once:!0,amount:0},trackColor:Z}):null]}),p||d?o.jsxRuntimeExports.jsx(yt.GraphFooter,{styles:{footnote:M?.footnote,source:M?.source},classNames:{footnote:I?.footnote,source:I?.source},sources:p,footNote:d,width:E}):null]})}exports.DonutChart=Nt;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./index-CHPV5EwG-CTPQjnHt.cjs"),M=require("react"),ot=require("./Typography-DX7PlgQU.cjs"),mt=require("./index-Cno4Q0YE.cjs"),xt=require("./Source-DYMJRrsq.cjs"),pt=require("./index-DQA8q5sC.cjs"),dt=require("./Tooltip-uUdw6wJL.cjs"),W=require("./Colors.cjs"),ct=require("./numberFormattingFunction-02t-wJta.cjs"),gt=require("./DetailsModal-BN0HDFlV.cjs"),F=require("./array-DMyR1sql.cjs"),ht=require("./use-in-view-QcfiW0w3.cjs"),ft=require("./index-DG2bgAva.cjs"),rt=require("./proxy-BxvUI_9l.cjs"),yt=require("./GraphFooter.cjs"),jt=require("./GraphHeader.cjs"),vt=require("./EmptyState-gLDRXBHm.cjs"),it=require("./GraphContainer-d8A46BK2.cjs"),bt=Math.PI,st=2*bt;function Et(c,t){return t<c?-1:t>c?1:t>=c?0:NaN}function Ct(c){return c}function Mt(){var c=Ct,t=Et,n=null,a=F.constant(0),r=F.constant(st),p=F.constant(0);function s(e){var l,f=(e=F.array(e)).length,d,S,m=0,g=new Array(f),v=new Array(f),y=+a.apply(this,arguments),q=Math.min(st,Math.max(-st,r.apply(this,arguments)-y)),x,P=Math.min(Math.abs(q)/f,p.apply(this,arguments)),G=P*(q<0?-1:1),h;for(l=0;l<f;++l)(h=v[g[l]=l]=+c(e[l],l,e))>0&&(m+=h);for(t!=null?g.sort(function(R,A){return t(v[R],v[A])}):n!=null&&g.sort(function(R,A){return n(e[R],e[A])}),l=0,S=m?(q-f*G)/m:0;l<f;++l,y=x)d=g[l],h=v[d],x=y+(h>0?h*S:0)+G,v[d]={data:e[d],index:l,value:h,startAngle:y,endAngle:x,padAngle:P};return v}return s.value=function(e){return arguments.length?(c=typeof e=="function"?e:F.constant(+e),s):c},s.sortValues=function(e){return arguments.length?(t=e,n=null,s):t},s.sort=function(e){return arguments.length?(n=e,t=null,s):n},s.startAngle=function(e){return arguments.length?(a=typeof e=="function"?e:F.constant(+e),s):a},s.endAngle=function(e){return arguments.length?(r=typeof e=="function"?e:F.constant(+e),s):r},s.padAngle=function(e){return arguments.length?(p=typeof e=="function"?e:F.constant(+e),s):p},s}const at=(c,t,n,a)=>({x:c+n*Math.cos(a),y:t+n*Math.sin(a)});function lt(c,t,n,a,r){const p=at(c,t,n,a),s=at(c,t,n,Math.abs(r-a)===2*Math.PI?.999999*r:r),e=r-a<=Math.PI?"0":"1";return["M",p.x,p.y,"A",n,n,0,e,1,s.x,s.y].join(" ")}function Rt(c){const t=o.compilerRuntimeExports.c(59),{mainText:n,data:a,radius:r,colors:p,subNote:s,strokeWidth:e,tooltip:l,onSeriesMouseOver:f,onSeriesMouseClick:d,colorDomain:S,resetSelectionOnDoubleClick:m,detailsOnClick:g,styles:v,classNames:y,precision:q,animate:x,trackColor:P}=c,G=M.useRef(null);let h;t[0]!==x.amount||t[1]!==x.once?(h={once:x.once,amount:x.amount},t[0]=x.amount,t[1]=x.once,t[2]=h):h=t[2];const R=ht.useInView(G,h),A=Mt().sort(null).startAngle(0).value(Dt),[j,X]=M.useState(void 0),[b,E]=M.useState(void 0),[V,Y]=M.useState(void 0),[I,J]=M.useState(void 0),K=rt.motion,Q=`${r*2}px`,U=`${r*2}px`,D=`0 0 ${r*2} ${r*2}`,z="ltr",et="mx-auto",T=rt.motion,Z=`translate(${r} ${r})`;let O;t[3]!==a||t[4]!==n||t[5]!==q||t[6]!==r||t[7]!==e||t[8]!==s?(O=n||s?o.jsxRuntimeExports.jsx("foreignObject",{y:0-(r-e),x:0-(r-e),width:2*(r-e),height:2*(r-e),children:o.jsxRuntimeExports.jsxs("div",{className:"flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4",children:[n?M.isValidElement(n)?n:o.jsxRuntimeExports.jsx(ot.v,{marginBottom:"none",className:"donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center",children:typeof n=="string"?n:a.findIndex(u=>u.label===n.label)!==-1?ct.numberFormattingFunction(a[a.findIndex(u=>u.label===n.label)].size,"NA",q,n.prefix,n.suffix):"NA"}):null,s?o.jsxRuntimeExports.jsx(ot.j,{marginBottom:"none",size:"base",leading:"none",className:"donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold",children:s}):typeof n=="string"||!n||M.isValidElement(n)?null:o.jsxRuntimeExports.jsx(ot.j,{size:"base",marginBottom:"none",leading:"none",className:"donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold",children:n.label})]})}):null,t[3]=a,t[4]=n,t[5]=q,t[6]=r,t[7]=e,t[8]=s,t[9]=O):O=t[9];const _=r-e/2;let N;t[10]!==e||t[11]!==_||t[12]!==P?(N=o.jsxRuntimeExports.jsx("circle",{cx:0,cy:0,r:_,fill:"none",stroke:P,strokeWidth:e}),t[10]=e,t[11]=_,t[12]=P,t[13]=N):N=t[13];const $=ft.AnimatePresence;let k;t[14]!==x.duration||t[15]!==S||t[16]!==p||t[17]!==g||t[18]!==R||t[19]!==b||t[20]!==j||t[21]!==d||t[22]!==f||t[23]!==r||t[24]!==m||t[25]!==E||t[26]!==e?(k=(u,ut)=>o.jsxRuntimeExports.jsx(rt.motion.path,{variants:{initial:{pathLength:0,d:lt(0,0,r-e/2,u.startAngle-Math.PI/2,u.endAngle-Math.PI/2),opacity:j?j.label===u.data.label?1:.3:1},whileInView:{pathLength:1,d:lt(0,0,r-e/2,u.startAngle-Math.PI/2,u.endAngle-Math.PI/2),opacity:j?j.label===u.data.label?1:.3:1,transition:{duration:x.duration}}},initial:"initial",animate:R?"whileInView":"initial",exit:{opacity:0,transition:{duration:x.duration}},style:{stroke:S.indexOf(u.data.label)!==-1?p[S.indexOf(u.data.label)%p.length]:W.Colors.gray,strokeWidth:e,fill:"none"},onMouseEnter:tt=>{X(u.data),J(tt.clientY),Y(tt.clientX),f?.(u)},onClick:()=>{(d||g)&&(pt.isEqual(b,u.data)&&m?(E(void 0),d?.(void 0)):(E(u.data),d&&d(u.data)))},onMouseMove:tt=>{X(u.data),J(tt.clientY),Y(tt.clientX)},onMouseLeave:()=>{X(void 0),Y(void 0),J(void 0),f?.(void 0)}},ut),t[14]=x.duration,t[15]=S,t[16]=p,t[17]=g,t[18]=R,t[19]=b,t[20]=j,t[21]=d,t[22]=f,t[23]=r,t[24]=m,t[25]=E,t[26]=e,t[27]=k):k=t[27];const i=A(a).map(k);let C;t[28]!==$||t[29]!==i?(C=o.jsxRuntimeExports.jsx($,{children:i}),t[28]=$,t[29]=i,t[30]=C):C=t[30];let w;t[31]!==N||t[32]!==C||t[33]!==T.g||t[34]!==Z||t[35]!==O?(w=o.jsxRuntimeExports.jsxs(T.g,{transform:Z,children:[O,N,C]}),t[31]=N,t[32]=C,t[33]=T.g,t[34]=Z,t[35]=O,t[36]=w):w=t[36];let B;t[37]!==K.svg||t[38]!==w||t[39]!==Q||t[40]!==U||t[41]!==D?(B=o.jsxRuntimeExports.jsx(K.svg,{ref:G,width:Q,height:U,viewBox:D,direction:z,className:et,children:w}),t[37]=K.svg,t[38]=w,t[39]=Q,t[40]=U,t[41]=D,t[42]=B):B=t[42];let H;t[43]!==y?.tooltip||t[44]!==V||t[45]!==I||t[46]!==j||t[47]!==v?.tooltip||t[48]!==l?(H=j&&l&&V&&I?o.jsxRuntimeExports.jsx(dt.Tooltip,{data:j,body:l,xPos:V,yPos:I,backgroundStyle:v?.tooltip,className:y?.tooltip}):null,t[43]=y?.tooltip,t[44]=V,t[45]=I,t[46]=j,t[47]=v?.tooltip,t[48]=l,t[49]=H):H=t[49];let L;t[50]!==y?.modal||t[51]!==g||t[52]!==b||t[53]!==E?(L=g&&b!==void 0?o.jsxRuntimeExports.jsx(gt.DetailsModal,{body:g,data:b,setData:E,className:y?.modal}):null,t[50]=y?.modal,t[51]=g,t[52]=b,t[53]=E,t[54]=L):L=t[54];let nt;return t[55]!==B||t[56]!==H||t[57]!==L?(nt=o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[B,H,L]}),t[55]=B,t[56]=H,t[57]=L,t[58]=nt):nt=t[58],nt}function Dt(c){return c.size}function Nt(c){const{mainText:t,graphTitle:n,colors:a=W.Colors.light.categoricalColors.colors,suffix:r="",sources:p,prefix:s="",strokeWidth:e=50,graphDescription:l,subNote:f,footNote:d,radius:S,data:m,showColorScale:g=!0,padding:v,backgroundColor:y=!1,tooltip:q,onSeriesMouseOver:x,graphID:P,onSeriesMouseClick:G,graphDownload:h=!1,dataDownload:R=!1,colorDomain:A,sortData:j,language:X="en",theme:b="light",width:E,height:V,minHeight:Y=0,relativeHeight:I,ariaLabel:J,resetSelectionOnDoubleClick:K=!0,colorScaleMaxWidth:Q,detailsOnClick:U,styles:D,classNames:z,precision:et=2,animate:T=!1,trackColor:Z=W.Colors.light.grays["gray-200"]}=c,[O,_]=M.useState(0),N=M.useRef(null),$=M.useRef(null);M.useEffect(()=>{const i=new ResizeObserver(C=>{_((Math.min(C[0].target.clientWidth||620,C[0].target.clientHeight||480)||420)/2)});return N.current&&i.observe(N.current),()=>i.disconnect()},[]);const k=j?mt.orderBy(m,["size"],[j]):m;return o.jsxRuntimeExports.jsxs(it.GraphContainer,{className:z?.graphContainer,style:D?.graphContainer,id:P,ref:$,"aria-label":J,backgroundColor:y,theme:b,language:X,minHeight:Y,width:E,height:V,relativeHeight:I,padding:v,children:[n||l||h||R?o.jsxRuntimeExports.jsx(jt.GraphHeader,{styles:{title:D?.title,description:D?.description},classNames:{title:z?.title,description:z?.description},graphTitle:n,graphDescription:l,width:E,graphDownload:h?$:void 0,dataDownload:R?m.map(i=>i.data).filter(i=>i!==void 0).length>0?m.map(i=>i.data).filter(i=>i!==void 0):m.filter(i=>i!==void 0):null}):null,g&&m.length>0?o.jsxRuntimeExports.jsxs(o.jsxRuntimeExports.Fragment,{children:[o.jsxRuntimeExports.jsx("div",{className:o.mo("leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap",z?.colorLegend),style:{maxWidth:Q},"aria-label":"Color legend",children:k.map((i,C)=>o.jsxRuntimeExports.jsxs("div",{className:"flex gap-2 items-center pb-3",children:[o.jsxRuntimeExports.jsx("div",{className:"w-3 h-3 rounded-full",style:{backgroundColor:(A||k.map(w=>w.label)).indexOf(i.label)!==-1?(a||W.Colors[b].categoricalColors.colors)[(A||k.map(w=>w.label)).indexOf(i.label)%(a||W.Colors[b].categoricalColors.colors).length]:W.Colors.gray}}),o.jsxRuntimeExports.jsxs(ot.j,{marginBottom:"none",size:"sm",className:"text-primary-gray-700 dark:text-primary-gray-100",children:[i.label,":"," ",o.jsxRuntimeExports.jsx("span",{className:"font-bold",style:{fontSize:"inherit"},children:ct.numberFormattingFunction(i.size,"NA",et,s,r)})]})]},C))}),o.jsxRuntimeExports.jsx(xt.n,{size:"lg"})]}):null,o.jsxRuntimeExports.jsxs(it.GraphArea,{ref:N,children:[m.length===0&&o.jsxRuntimeExports.jsx(vt.EmptyState,{}),O&&m.length>0?o.jsxRuntimeExports.jsx(Rt,{mainText:t,data:k,colors:a,radius:S||O,subNote:f,strokeWidth:e,tooltip:q,colorDomain:A||k.map(i=>i.label),onSeriesMouseOver:x,onSeriesMouseClick:G,resetSelectionOnDoubleClick:K,styles:D,detailsOnClick:U,precision:et,animate:T===!0?{duration:.5,once:!0,amount:.5}:T||{duration:0,once:!0,amount:0},trackColor:Z}):null]}),p||d?o.jsxRuntimeExports.jsx(yt.GraphFooter,{styles:{footnote:D?.footnote,source:D?.source},classNames:{footnote:z?.footnote,source:z?.source},sources:p,footNote:d,width:E}):null]})}exports.DonutChart=Nt;
2
2
  //# sourceMappingURL=DonutChart.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"DonutChart.cjs","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Utils/getArc.ts","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","const polarToCartesian = (\r\n centerX: number,\r\n centerY: number,\r\n radius: number,\r\n angleInRadians: number,\r\n) => {\r\n return {\r\n x: centerX + radius * Math.cos(angleInRadians),\r\n y: centerY + radius * Math.sin(angleInRadians),\r\n };\r\n};\r\n\r\nexport function getArc(\r\n x: number,\r\n y: number,\r\n radius: number,\r\n startAngleInRadians: number,\r\n endAngleInRadians: number,\r\n) {\r\n const start = polarToCartesian(x, y, radius, startAngleInRadians);\r\n const end = polarToCartesian(\r\n x,\r\n y,\r\n radius,\r\n endAngleInRadians === 2 * Math.PI ? 1.9999999999 * Math.PI : endAngleInRadians,\r\n );\r\n const largeArcFlag = endAngleInRadians - startAngleInRadians <= Math.PI ? '0' : '1';\r\n const d = ['M', start.x, start.y, 'A', radius, radius, 0, largeArcFlag, 1, end.x, end.y].join(\r\n ' ',\r\n );\r\n return d;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie } from 'd3-shape';\r\nimport { useRef, useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { AnimateDataType, ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getArc } from '@/Utils/getArc';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n onSeriesMouseOver?: (_d: any) => void;\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n animate: AnimateDataType;\r\n trackColor: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n animate,\r\n trackColor,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n className='mx-auto'\r\n >\r\n <motion.g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n <circle\r\n cx={0}\r\n cy={0}\r\n r={radius - strokeWidth / 2}\r\n fill='none'\r\n stroke={trackColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n <AnimatePresence>\r\n {pieData(data as any).map((d, i) => (\r\n <motion.path\r\n key={i}\r\n variants={{\r\n initial: {\r\n pathLength: 0,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n },\r\n whileInView: {\r\n pathLength: 1,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n style={{\r\n stroke:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n strokeWidth,\r\n fill: 'none',\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n </motion.g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <DetailsModal\r\n body={detailsOnClick}\r\n data={mouseClickData}\r\n setData={setMouseClickData}\r\n className={classNames?.modal}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport orderBy from 'lodash.orderby';\r\nimport { Spacer } from '@undp/design-system-react/Spacer';\r\nimport { cn } from '@undp/design-system-react/cn';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Radius of the donut chart */\r\n radius?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Track color (i.e. the color of the donut chart's background) of the donut chart */\r\n trackColor?: string;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n animate = false,\r\n trackColor = Colors.light.grays['gray-200'],\r\n } = props;\r\n\r\n const [graphRadius, setGraphRadius] = useState(0);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setGraphRadius(\r\n (Math.min(\r\n ...[entries[0].target.clientWidth || 620, entries[0].target.clientHeight || 480],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n const sortedData = sortData ? orderBy(data, ['size'], [sortData]) : data;\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {showColorScale && data.length > 0 ? (\r\n <>\r\n <div\r\n className={cn(\r\n 'leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap',\r\n classNames?.colorLegend,\r\n )}\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n aria-label='Color legend'\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center pb-3' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n <Spacer size='lg' />\r\n </>\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.length === 0 && <EmptyState />}\r\n {graphRadius && data.length > 0 ? (\r\n <Graph\r\n mainText={mainText}\r\n data={sortedData}\r\n colors={colors}\r\n radius={radius || graphRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n trackColor={trackColor}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["pi","tau","descending","a","b","identity","d","pie","value","sortValues","sort","startAngle","constant","endAngle","padAngle","data","i","n","array","j","k","sum","index","arcs","a0","da","a1","p","pa","v","_","polarToCartesian","centerX","centerY","radius","angleInRadians","x","Math","cos","y","sin","getArc","startAngleInRadians","endAngleInRadians","start","end","PI","largeArcFlag","join","Graph","props","$","_c","mainText","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","animate","trackColor","svgRef","useRef","t0","amount","once","isInView","useInView","pieData","_temp","mouseOverData","setMouseOverData","useState","undefined","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","t1","motion","t2","t3","t4","t5","t6","t7","t8","t9","jsx","jsxs","H2","findIndex","d_1","label","numberFormattingFunction","d_0","size","prefix","suffix","P","t10","t11","T0","AnimatePresence","t12","duration","d_2","initial","pathLength","opacity","whileInView","transition","stroke","indexOf","length","Colors","gray","fill","event","clientY","clientX","isEqual","event_0","t13","map","t14","t15","g","t16","svg","t17","Tooltip","t18","modal","DetailsModal","t19","Fragment","DonutChart","graphTitle","light","categoricalColors","sources","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","grays","graphRadius","setGraphRadius","graphDiv","graphParentDiv","useEffect","resizeObserver","ResizeObserver","entries","min","target","clientWidth","clientHeight","current","observe","disconnect","sortedData","orderBy","GraphContainer","graphContainer","GraphHeader","title","description","filter","cn","colorLegend","maxWidth","el","fontSize","Spacer","GraphArea","EmptyState","GraphFooter","footnote","source"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"DonutChart.cjs","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Utils/getArc.ts","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","const polarToCartesian = (\r\n centerX: number,\r\n centerY: number,\r\n radius: number,\r\n angleInRadians: number,\r\n) => {\r\n return {\r\n x: centerX + radius * Math.cos(angleInRadians),\r\n y: centerY + radius * Math.sin(angleInRadians),\r\n };\r\n};\r\n\r\nexport function getArc(\r\n x: number,\r\n y: number,\r\n radius: number,\r\n startAngleInRadians: number,\r\n endAngleInRadians: number,\r\n) {\r\n const start = polarToCartesian(x, y, radius, startAngleInRadians);\r\n const end = polarToCartesian(\r\n x,\r\n y,\r\n radius,\r\n Math.abs(endAngleInRadians - startAngleInRadians) === 2 * Math.PI\r\n ? 0.999999 * endAngleInRadians\r\n : endAngleInRadians,\r\n );\r\n const largeArcFlag = endAngleInRadians - startAngleInRadians <= Math.PI ? '0' : '1';\r\n const d = ['M', start.x, start.y, 'A', radius, radius, 0, largeArcFlag, 1, end.x, end.y].join(\r\n ' ',\r\n );\r\n return d;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie } from 'd3-shape';\r\nimport { isValidElement, ReactElement, useRef, useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { AnimateDataType, ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getArc } from '@/Utils/getArc';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string } | ReactElement;\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n onSeriesMouseOver?: (_d: any) => void;\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n animate: AnimateDataType;\r\n trackColor: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n animate,\r\n trackColor,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n className='mx-auto'\r\n >\r\n <motion.g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n isValidElement(mainText) ? (\r\n mainText\r\n ) : (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n )\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText || isValidElement(mainText) ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n <circle\r\n cx={0}\r\n cy={0}\r\n r={radius - strokeWidth / 2}\r\n fill='none'\r\n stroke={trackColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n <AnimatePresence>\r\n {pieData(data as any).map((d, i) => (\r\n <motion.path\r\n key={i}\r\n variants={{\r\n initial: {\r\n pathLength: 0,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n },\r\n whileInView: {\r\n pathLength: 1,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n style={{\r\n stroke:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n strokeWidth,\r\n fill: 'none',\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n </motion.g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <DetailsModal\r\n body={detailsOnClick}\r\n data={mouseClickData}\r\n setData={setMouseClickData}\r\n className={classNames?.modal}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { ReactElement, useEffect, useRef, useState } from 'react';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport orderBy from 'lodash.orderby';\r\nimport { Spacer } from '@undp/design-system-react/Spacer';\r\nimport { cn } from '@undp/design-system-react/cn';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Radius of the donut chart */\r\n radius?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string } | ReactElement;\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Track color (i.e. the color of the donut chart's background) of the donut chart */\r\n trackColor?: string;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n animate = false,\r\n trackColor = Colors.light.grays['gray-200'],\r\n } = props;\r\n\r\n const [graphRadius, setGraphRadius] = useState(0);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setGraphRadius(\r\n (Math.min(\r\n ...[entries[0].target.clientWidth || 620, entries[0].target.clientHeight || 480],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n const sortedData = sortData ? orderBy(data, ['size'], [sortData]) : data;\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {showColorScale && data.length > 0 ? (\r\n <>\r\n <div\r\n className={cn(\r\n 'leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap',\r\n classNames?.colorLegend,\r\n )}\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n aria-label='Color legend'\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center pb-3' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n <Spacer size='lg' />\r\n </>\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.length === 0 && <EmptyState />}\r\n {graphRadius && data.length > 0 ? (\r\n <Graph\r\n mainText={mainText}\r\n data={sortedData}\r\n colors={colors}\r\n radius={radius || graphRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n trackColor={trackColor}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["pi","tau","descending","a","b","identity","d","pie","value","sortValues","sort","startAngle","constant","endAngle","padAngle","data","i","n","array","j","k","sum","index","arcs","a0","da","a1","p","pa","v","_","polarToCartesian","centerX","centerY","radius","angleInRadians","x","Math","cos","y","sin","getArc","startAngleInRadians","endAngleInRadians","start","end","abs","PI","largeArcFlag","join","Graph","props","$","_c","mainText","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","animate","trackColor","svgRef","useRef","t0","amount","once","isInView","useInView","pieData","_temp","mouseOverData","setMouseOverData","useState","undefined","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","t1","motion","t2","t3","t4","t5","t6","t7","t8","t9","jsx","jsxs","isValidElement","H2","findIndex","d_1","label","numberFormattingFunction","size","prefix","suffix","P","t10","t11","T0","AnimatePresence","t12","duration","d_2","initial","pathLength","opacity","whileInView","transition","stroke","indexOf","length","Colors","gray","fill","event","clientY","clientX","isEqual","event_0","t13","map","t14","t15","g","t16","svg","t17","Tooltip","t18","modal","DetailsModal","t19","Fragment","DonutChart","graphTitle","light","categoricalColors","sources","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","grays","graphRadius","setGraphRadius","graphDiv","graphParentDiv","useEffect","resizeObserver","ResizeObserver","entries","min","target","clientWidth","clientHeight","current","observe","disconnect","sortedData","orderBy","GraphContainer","graphContainer","GraphHeader","title","description","filter","cn","colorLegend","maxWidth","el","fontSize","Spacer","GraphArea","EmptyState","GraphFooter","footnote","source"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1,4 +1,5 @@
1
1
  import { JSX } from 'react/jsx-runtime';
2
+ import { ReactElement } from 'react';
2
3
 
3
4
  declare interface AnimateDataType {
4
5
  duration: number;
@@ -103,7 +104,7 @@ declare interface Props {
103
104
  label: string;
104
105
  suffix?: string;
105
106
  prefix?: string;
106
- };
107
+ } | ReactElement;
107
108
  /** Small text at the center of the donut chart */
108
109
  subNote?: string;
109
110
  /** Specifies the number of decimal places to display in the value. */
@@ -1,80 +1,80 @@
1
- import { c as mt, j as n, m as dt } from "./index-CHPV5EwG-Curnpaqc.js";
2
- import { useRef as rt, useState as tt, useEffect as pt } from "react";
3
- import { v as ft, j as it } from "./Typography-PxtFcnJb.js";
4
- import { o as gt } from "./index-BZQYSqar.js";
5
- import { n as ht } from "./Source-DwTHB8fn.js";
6
- import { i as xt } from "./index-Bwrro8-q.js";
7
- import { T as yt } from "./Tooltip-Dj5eVppQ.js";
1
+ import { c as dt, j as a, m as pt } from "./index-CHPV5EwG-Curnpaqc.js";
2
+ import { useRef as rt, useState as tt, isValidElement as lt, useEffect as ft } from "react";
3
+ import { v as gt, j as it } from "./Typography-PxtFcnJb.js";
4
+ import { o as ht } from "./index-BZQYSqar.js";
5
+ import { n as xt } from "./Source-DwTHB8fn.js";
6
+ import { i as yt } from "./index-Bwrro8-q.js";
7
+ import { T as vt } from "./Tooltip-Dj5eVppQ.js";
8
8
  import { Colors as X } from "./Colors.js";
9
- import { n as ct } from "./numberFormattingFunction-14YCbkN2.js";
10
- import { D as vt } from "./DetailsModal-0Ry5nXiC.js";
11
- import { c as T, a as bt } from "./array-USo-Szhp.js";
12
- import { u as jt } from "./use-in-view-Cxa7y1TH.js";
13
- import { A as Mt } from "./index-BqfRwk1n.js";
9
+ import { n as ut } from "./numberFormattingFunction-14YCbkN2.js";
10
+ import { D as bt } from "./DetailsModal-0Ry5nXiC.js";
11
+ import { c as T, a as jt } from "./array-USo-Szhp.js";
12
+ import { u as Mt } from "./use-in-view-Cxa7y1TH.js";
13
+ import { A as Nt } from "./index-BqfRwk1n.js";
14
14
  import { m as nt } from "./proxy-BxkFHwUw.js";
15
- import { GraphFooter as Nt } from "./GraphFooter.js";
16
- import { GraphHeader as Ct } from "./GraphHeader.js";
17
- import { E as Dt } from "./EmptyState-C7ZXkZWd.js";
18
- import { G as kt, a as At } from "./GraphContainer-CRqzdKu2.js";
19
- const wt = Math.PI, at = 2 * wt;
20
- function Ot(s, t) {
21
- return t < s ? -1 : t > s ? 1 : t >= s ? 0 : NaN;
15
+ import { GraphFooter as Ct } from "./GraphFooter.js";
16
+ import { GraphHeader as Dt } from "./GraphHeader.js";
17
+ import { E as kt } from "./EmptyState-C7ZXkZWd.js";
18
+ import { G as wt, a as At } from "./GraphContainer-CRqzdKu2.js";
19
+ const Ot = Math.PI, at = 2 * Ot;
20
+ function St(c, t) {
21
+ return t < c ? -1 : t > c ? 1 : t >= c ? 0 : NaN;
22
22
  }
23
- function Pt(s) {
24
- return s;
23
+ function zt(c) {
24
+ return c;
25
25
  }
26
- function St() {
27
- var s = Pt, t = Ot, o = null, c = T(0), a = T(at), p = T(0);
26
+ function Pt() {
27
+ var c = zt, t = St, o = null, l = T(0), n = T(at), p = T(0);
28
28
  function r(e) {
29
- var l, x = (e = bt(e)).length, f, O, m = 0, g = new Array(x), b = new Array(x), y = +c.apply(this, arguments), P = Math.min(at, Math.max(-at, a.apply(this, arguments) - y)), d, I = Math.min(Math.abs(P) / x, p.apply(this, arguments)), G = I * (P < 0 ? -1 : 1), h;
30
- for (l = 0; l < x; ++l)
31
- (h = b[g[l] = l] = +s(e[l], l, e)) > 0 && (m += h);
32
- for (t != null ? g.sort(function(C, S) {
33
- return t(b[C], b[S]);
34
- }) : o != null && g.sort(function(C, S) {
35
- return o(e[C], e[S]);
36
- }), l = 0, O = m ? (P - x * G) / m : 0; l < x; ++l, y = d)
37
- f = g[l], h = b[f], d = y + (h > 0 ? h * O : 0) + G, b[f] = {
29
+ var s, x = (e = jt(e)).length, f, O, m = 0, g = new Array(x), b = new Array(x), y = +l.apply(this, arguments), S = Math.min(at, Math.max(-at, n.apply(this, arguments) - y)), d, E = Math.min(Math.abs(S) / x, p.apply(this, arguments)), G = E * (S < 0 ? -1 : 1), h;
30
+ for (s = 0; s < x; ++s)
31
+ (h = b[g[s] = s] = +c(e[s], s, e)) > 0 && (m += h);
32
+ for (t != null ? g.sort(function(C, z) {
33
+ return t(b[C], b[z]);
34
+ }) : o != null && g.sort(function(C, z) {
35
+ return o(e[C], e[z]);
36
+ }), s = 0, O = m ? (S - x * G) / m : 0; s < x; ++s, y = d)
37
+ f = g[s], h = b[f], d = y + (h > 0 ? h * O : 0) + G, b[f] = {
38
38
  data: e[f],
39
- index: l,
39
+ index: s,
40
40
  value: h,
41
41
  startAngle: y,
42
42
  endAngle: d,
43
- padAngle: I
43
+ padAngle: E
44
44
  };
45
45
  return b;
46
46
  }
47
47
  return r.value = function(e) {
48
- return arguments.length ? (s = typeof e == "function" ? e : T(+e), r) : s;
48
+ return arguments.length ? (c = typeof e == "function" ? e : T(+e), r) : c;
49
49
  }, r.sortValues = function(e) {
50
50
  return arguments.length ? (t = e, o = null, r) : t;
51
51
  }, r.sort = function(e) {
52
52
  return arguments.length ? (o = e, t = null, r) : o;
53
53
  }, r.startAngle = function(e) {
54
- return arguments.length ? (c = typeof e == "function" ? e : T(+e), r) : c;
54
+ return arguments.length ? (l = typeof e == "function" ? e : T(+e), r) : l;
55
55
  }, r.endAngle = function(e) {
56
- return arguments.length ? (a = typeof e == "function" ? e : T(+e), r) : a;
56
+ return arguments.length ? (n = typeof e == "function" ? e : T(+e), r) : n;
57
57
  }, r.padAngle = function(e) {
58
58
  return arguments.length ? (p = typeof e == "function" ? e : T(+e), r) : p;
59
59
  }, r;
60
60
  }
61
- const lt = (s, t, o, c) => ({
62
- x: s + o * Math.cos(c),
63
- y: t + o * Math.sin(c)
61
+ const st = (c, t, o, l) => ({
62
+ x: c + o * Math.cos(l),
63
+ y: t + o * Math.sin(l)
64
64
  });
65
- function st(s, t, o, c, a) {
66
- const p = lt(s, t, o, c), r = lt(s, t, o, a === 2 * Math.PI ? 1.9999999999 * Math.PI : a), e = a - c <= Math.PI ? "0" : "1";
65
+ function ct(c, t, o, l, n) {
66
+ const p = st(c, t, o, l), r = st(c, t, o, Math.abs(n - l) === 2 * Math.PI ? 0.999999 * n : n), e = n - l <= Math.PI ? "0" : "1";
67
67
  return ["M", p.x, p.y, "A", o, o, 0, e, 1, r.x, r.y].join(" ");
68
68
  }
69
- function zt(s) {
70
- const t = mt.c(59), {
69
+ function Et(c) {
70
+ const t = dt.c(59), {
71
71
  mainText: o,
72
- data: c,
73
- radius: a,
72
+ data: l,
73
+ radius: n,
74
74
  colors: p,
75
75
  subNote: r,
76
76
  strokeWidth: e,
77
- tooltip: l,
77
+ tooltip: s,
78
78
  onSeriesMouseOver: x,
79
79
  onSeriesMouseClick: f,
80
80
  colorDomain: O,
@@ -82,35 +82,35 @@ function zt(s) {
82
82
  detailsOnClick: g,
83
83
  styles: b,
84
84
  classNames: y,
85
- precision: P,
85
+ precision: S,
86
86
  animate: d,
87
- trackColor: I
88
- } = s, G = rt(null);
87
+ trackColor: E
88
+ } = c, G = rt(null);
89
89
  let h;
90
90
  t[0] !== d.amount || t[1] !== d.once ? (h = {
91
91
  once: d.once,
92
92
  amount: d.amount
93
93
  }, t[0] = d.amount, t[1] = d.once, t[2] = h) : h = t[2];
94
- const C = jt(G, h), S = St().sort(null).startAngle(0).value(It), [v, Y] = tt(void 0), [j, M] = tt(void 0), [$, R] = tt(void 0), [B, q] = tt(void 0), J = nt, K = `${a * 2}px`, Q = `${a * 2}px`, D = `0 0 ${a * 2} ${a * 2}`, E = "ltr", et = "mx-auto", F = nt, U = `translate(${a} ${a})`;
95
- let z;
96
- t[3] !== c || t[4] !== o || t[5] !== P || t[6] !== a || t[7] !== e || t[8] !== r ? (z = o || r ? /* @__PURE__ */ n.jsx("foreignObject", { y: 0 - (a - e), x: 0 - (a - e), width: 2 * (a - e), height: 2 * (a - e), children: /* @__PURE__ */ n.jsxs("div", { className: "flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4", children: [
97
- o ? /* @__PURE__ */ n.jsx(ft, { marginBottom: "none", className: "donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center", children: typeof o == "string" ? o : c.findIndex((u) => u.label === o.label) !== -1 ? ct(c[c.findIndex((u) => u.label === o.label)].size, "NA", P, o.prefix, o.suffix) : "NA" }) : null,
98
- r ? /* @__PURE__ */ n.jsx(it, { marginBottom: "none", size: "base", leading: "none", className: "donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold", children: r }) : typeof o == "string" || !o ? null : /* @__PURE__ */ n.jsx(it, { size: "base", marginBottom: "none", leading: "none", className: "donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold", children: o.label })
99
- ] }) }) : null, t[3] = c, t[4] = o, t[5] = P, t[6] = a, t[7] = e, t[8] = r, t[9] = z) : z = t[9];
100
- const Z = a - e / 2;
94
+ const C = Mt(G, h), z = Pt().sort(null).startAngle(0).value(It), [v, Y] = tt(void 0), [j, M] = tt(void 0), [V, q] = tt(void 0), [$, R] = tt(void 0), J = nt, K = `${n * 2}px`, Q = `${n * 2}px`, D = `0 0 ${n * 2} ${n * 2}`, I = "ltr", et = "mx-auto", B = nt, U = `translate(${n} ${n})`;
95
+ let P;
96
+ t[3] !== l || t[4] !== o || t[5] !== S || t[6] !== n || t[7] !== e || t[8] !== r ? (P = o || r ? /* @__PURE__ */ a.jsx("foreignObject", { y: 0 - (n - e), x: 0 - (n - e), width: 2 * (n - e), height: 2 * (n - e), children: /* @__PURE__ */ a.jsxs("div", { className: "flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4", children: [
97
+ o ? lt(o) ? o : /* @__PURE__ */ a.jsx(gt, { marginBottom: "none", className: "donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center", children: typeof o == "string" ? o : l.findIndex((u) => u.label === o.label) !== -1 ? ut(l[l.findIndex((u) => u.label === o.label)].size, "NA", S, o.prefix, o.suffix) : "NA" }) : null,
98
+ r ? /* @__PURE__ */ a.jsx(it, { marginBottom: "none", size: "base", leading: "none", className: "donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold", children: r }) : typeof o == "string" || !o || lt(o) ? null : /* @__PURE__ */ a.jsx(it, { size: "base", marginBottom: "none", leading: "none", className: "donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold", children: o.label })
99
+ ] }) }) : null, t[3] = l, t[4] = o, t[5] = S, t[6] = n, t[7] = e, t[8] = r, t[9] = P) : P = t[9];
100
+ const Z = n - e / 2;
101
101
  let k;
102
- t[10] !== e || t[11] !== Z || t[12] !== I ? (k = /* @__PURE__ */ n.jsx("circle", { cx: 0, cy: 0, r: Z, fill: "none", stroke: I, strokeWidth: e }), t[10] = e, t[11] = Z, t[12] = I, t[13] = k) : k = t[13];
103
- const V = Mt;
104
- let A;
105
- t[14] !== d.duration || t[15] !== O || t[16] !== p || t[17] !== g || t[18] !== C || t[19] !== j || t[20] !== v || t[21] !== f || t[22] !== x || t[23] !== a || t[24] !== m || t[25] !== M || t[26] !== e ? (A = (u, ut) => /* @__PURE__ */ n.jsx(nt.path, { variants: {
102
+ t[10] !== e || t[11] !== Z || t[12] !== E ? (k = /* @__PURE__ */ a.jsx("circle", { cx: 0, cy: 0, r: Z, fill: "none", stroke: E, strokeWidth: e }), t[10] = e, t[11] = Z, t[12] = E, t[13] = k) : k = t[13];
103
+ const F = Nt;
104
+ let w;
105
+ t[14] !== d.duration || t[15] !== O || t[16] !== p || t[17] !== g || t[18] !== C || t[19] !== j || t[20] !== v || t[21] !== f || t[22] !== x || t[23] !== n || t[24] !== m || t[25] !== M || t[26] !== e ? (w = (u, mt) => /* @__PURE__ */ a.jsx(nt.path, { variants: {
106
106
  initial: {
107
107
  pathLength: 0,
108
- d: st(0, 0, a - e / 2, u.startAngle - Math.PI / 2, u.endAngle - Math.PI / 2),
108
+ d: ct(0, 0, n - e / 2, u.startAngle - Math.PI / 2, u.endAngle - Math.PI / 2),
109
109
  opacity: v ? v.label === u.data.label ? 1 : 0.3 : 1
110
110
  },
111
111
  whileInView: {
112
112
  pathLength: 1,
113
- d: st(0, 0, a - e / 2, u.startAngle - Math.PI / 2, u.endAngle - Math.PI / 2),
113
+ d: ct(0, 0, n - e / 2, u.startAngle - Math.PI / 2, u.endAngle - Math.PI / 2),
114
114
  opacity: v ? v.label === u.data.label ? 1 : 0.3 : 1,
115
115
  transition: {
116
116
  duration: d.duration
@@ -126,49 +126,49 @@ function zt(s) {
126
126
  strokeWidth: e,
127
127
  fill: "none"
128
128
  }, onMouseEnter: (_) => {
129
- Y(u.data), q(_.clientY), R(_.clientX), x?.(u);
129
+ Y(u.data), R(_.clientY), q(_.clientX), x?.(u);
130
130
  }, onClick: () => {
131
- (f || g) && (xt(j, u.data) && m ? (M(void 0), f?.(void 0)) : (M(u.data), f && f(u.data)));
131
+ (f || g) && (yt(j, u.data) && m ? (M(void 0), f?.(void 0)) : (M(u.data), f && f(u.data)));
132
132
  }, onMouseMove: (_) => {
133
- Y(u.data), q(_.clientY), R(_.clientX);
133
+ Y(u.data), R(_.clientY), q(_.clientX);
134
134
  }, onMouseLeave: () => {
135
- Y(void 0), R(void 0), q(void 0), x?.(void 0);
136
- } }, ut), t[14] = d.duration, t[15] = O, t[16] = p, t[17] = g, t[18] = C, t[19] = j, t[20] = v, t[21] = f, t[22] = x, t[23] = a, t[24] = m, t[25] = M, t[26] = e, t[27] = A) : A = t[27];
137
- const i = S(c).map(A);
135
+ Y(void 0), q(void 0), R(void 0), x?.(void 0);
136
+ } }, mt), t[14] = d.duration, t[15] = O, t[16] = p, t[17] = g, t[18] = C, t[19] = j, t[20] = v, t[21] = f, t[22] = x, t[23] = n, t[24] = m, t[25] = M, t[26] = e, t[27] = w) : w = t[27];
137
+ const i = z(l).map(w);
138
138
  let N;
139
- t[28] !== V || t[29] !== i ? (N = /* @__PURE__ */ n.jsx(V, { children: i }), t[28] = V, t[29] = i, t[30] = N) : N = t[30];
140
- let w;
141
- t[31] !== k || t[32] !== N || t[33] !== F.g || t[34] !== U || t[35] !== z ? (w = /* @__PURE__ */ n.jsxs(F.g, { transform: U, children: [
142
- z,
139
+ t[28] !== F || t[29] !== i ? (N = /* @__PURE__ */ a.jsx(F, { children: i }), t[28] = F, t[29] = i, t[30] = N) : N = t[30];
140
+ let A;
141
+ t[31] !== k || t[32] !== N || t[33] !== B.g || t[34] !== U || t[35] !== P ? (A = /* @__PURE__ */ a.jsxs(B.g, { transform: U, children: [
142
+ P,
143
143
  k,
144
144
  N
145
- ] }), t[31] = k, t[32] = N, t[33] = F.g, t[34] = U, t[35] = z, t[36] = w) : w = t[36];
145
+ ] }), t[31] = k, t[32] = N, t[33] = B.g, t[34] = U, t[35] = P, t[36] = A) : A = t[36];
146
146
  let L;
147
- t[37] !== J.svg || t[38] !== w || t[39] !== K || t[40] !== Q || t[41] !== D ? (L = /* @__PURE__ */ n.jsx(J.svg, { ref: G, width: K, height: Q, viewBox: D, direction: E, className: et, children: w }), t[37] = J.svg, t[38] = w, t[39] = K, t[40] = Q, t[41] = D, t[42] = L) : L = t[42];
147
+ t[37] !== J.svg || t[38] !== A || t[39] !== K || t[40] !== Q || t[41] !== D ? (L = /* @__PURE__ */ a.jsx(J.svg, { ref: G, width: K, height: Q, viewBox: D, direction: I, className: et, children: A }), t[37] = J.svg, t[38] = A, t[39] = K, t[40] = Q, t[41] = D, t[42] = L) : L = t[42];
148
148
  let W;
149
- t[43] !== y?.tooltip || t[44] !== $ || t[45] !== B || t[46] !== v || t[47] !== b?.tooltip || t[48] !== l ? (W = v && l && $ && B ? /* @__PURE__ */ n.jsx(yt, { data: v, body: l, xPos: $, yPos: B, backgroundStyle: b?.tooltip, className: y?.tooltip }) : null, t[43] = y?.tooltip, t[44] = $, t[45] = B, t[46] = v, t[47] = b?.tooltip, t[48] = l, t[49] = W) : W = t[49];
149
+ t[43] !== y?.tooltip || t[44] !== V || t[45] !== $ || t[46] !== v || t[47] !== b?.tooltip || t[48] !== s ? (W = v && s && V && $ ? /* @__PURE__ */ a.jsx(vt, { data: v, body: s, xPos: V, yPos: $, backgroundStyle: b?.tooltip, className: y?.tooltip }) : null, t[43] = y?.tooltip, t[44] = V, t[45] = $, t[46] = v, t[47] = b?.tooltip, t[48] = s, t[49] = W) : W = t[49];
150
150
  let H;
151
- t[50] !== y?.modal || t[51] !== g || t[52] !== j || t[53] !== M ? (H = g && j !== void 0 ? /* @__PURE__ */ n.jsx(vt, { body: g, data: j, setData: M, className: y?.modal }) : null, t[50] = y?.modal, t[51] = g, t[52] = j, t[53] = M, t[54] = H) : H = t[54];
151
+ t[50] !== y?.modal || t[51] !== g || t[52] !== j || t[53] !== M ? (H = g && j !== void 0 ? /* @__PURE__ */ a.jsx(bt, { body: g, data: j, setData: M, className: y?.modal }) : null, t[50] = y?.modal, t[51] = g, t[52] = j, t[53] = M, t[54] = H) : H = t[54];
152
152
  let ot;
153
- return t[55] !== L || t[56] !== W || t[57] !== H ? (ot = /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
153
+ return t[55] !== L || t[56] !== W || t[57] !== H ? (ot = /* @__PURE__ */ a.jsxs(a.Fragment, { children: [
154
154
  L,
155
155
  W,
156
156
  H
157
157
  ] }), t[55] = L, t[56] = W, t[57] = H, t[58] = ot) : ot = t[58], ot;
158
158
  }
159
- function It(s) {
160
- return s.size;
159
+ function It(c) {
160
+ return c.size;
161
161
  }
162
- function Zt(s) {
162
+ function _t(c) {
163
163
  const {
164
164
  mainText: t,
165
165
  graphTitle: o,
166
- colors: c = X.light.categoricalColors.colors,
167
- suffix: a = "",
166
+ colors: l = X.light.categoricalColors.colors,
167
+ suffix: n = "",
168
168
  sources: p,
169
169
  prefix: r = "",
170
170
  strokeWidth: e = 50,
171
- graphDescription: l,
171
+ graphDescription: s,
172
172
  subNote: x,
173
173
  footNote: f,
174
174
  radius: O,
@@ -176,85 +176,85 @@ function Zt(s) {
176
176
  showColorScale: g = !0,
177
177
  padding: b,
178
178
  backgroundColor: y = !1,
179
- tooltip: P,
179
+ tooltip: S,
180
180
  onSeriesMouseOver: d,
181
- graphID: I,
181
+ graphID: E,
182
182
  onSeriesMouseClick: G,
183
183
  graphDownload: h = !1,
184
184
  dataDownload: C = !1,
185
- colorDomain: S,
185
+ colorDomain: z,
186
186
  sortData: v,
187
187
  language: Y = "en",
188
188
  theme: j = "light",
189
189
  width: M,
190
- height: $,
191
- minHeight: R = 0,
192
- relativeHeight: B,
193
- ariaLabel: q,
190
+ height: V,
191
+ minHeight: q = 0,
192
+ relativeHeight: $,
193
+ ariaLabel: R,
194
194
  resetSelectionOnDoubleClick: J = !0,
195
195
  colorScaleMaxWidth: K,
196
196
  detailsOnClick: Q,
197
197
  styles: D,
198
- classNames: E,
198
+ classNames: I,
199
199
  precision: et = 2,
200
- animate: F = !1,
200
+ animate: B = !1,
201
201
  trackColor: U = X.light.grays["gray-200"]
202
- } = s, [z, Z] = tt(0), k = rt(null), V = rt(null);
203
- pt(() => {
202
+ } = c, [P, Z] = tt(0), k = rt(null), F = rt(null);
203
+ ft(() => {
204
204
  const i = new ResizeObserver((N) => {
205
205
  Z((Math.min(N[0].target.clientWidth || 620, N[0].target.clientHeight || 480) || 420) / 2);
206
206
  });
207
207
  return k.current && i.observe(k.current), () => i.disconnect();
208
208
  }, []);
209
- const A = v ? gt(m, ["size"], [v]) : m;
210
- return /* @__PURE__ */ n.jsxs(kt, { className: E?.graphContainer, style: D?.graphContainer, id: I, ref: V, "aria-label": q, backgroundColor: y, theme: j, language: Y, minHeight: R, width: M, height: $, relativeHeight: B, padding: b, children: [
211
- o || l || h || C ? /* @__PURE__ */ n.jsx(Ct, { styles: {
209
+ const w = v ? ht(m, ["size"], [v]) : m;
210
+ return /* @__PURE__ */ a.jsxs(wt, { className: I?.graphContainer, style: D?.graphContainer, id: E, ref: F, "aria-label": R, backgroundColor: y, theme: j, language: Y, minHeight: q, width: M, height: V, relativeHeight: $, padding: b, children: [
211
+ o || s || h || C ? /* @__PURE__ */ a.jsx(Dt, { styles: {
212
212
  title: D?.title,
213
213
  description: D?.description
214
214
  }, classNames: {
215
- title: E?.title,
216
- description: E?.description
217
- }, graphTitle: o, graphDescription: l, width: M, graphDownload: h ? V : void 0, dataDownload: C ? m.map((i) => i.data).filter((i) => i !== void 0).length > 0 ? m.map((i) => i.data).filter((i) => i !== void 0) : m.filter((i) => i !== void 0) : null }) : null,
218
- g && m.length > 0 ? /* @__PURE__ */ n.jsxs(n.Fragment, { children: [
219
- /* @__PURE__ */ n.jsx("div", { className: dt("leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap", E?.colorLegend), style: {
215
+ title: I?.title,
216
+ description: I?.description
217
+ }, graphTitle: o, graphDescription: s, width: M, graphDownload: h ? F : void 0, dataDownload: C ? m.map((i) => i.data).filter((i) => i !== void 0).length > 0 ? m.map((i) => i.data).filter((i) => i !== void 0) : m.filter((i) => i !== void 0) : null }) : null,
218
+ g && m.length > 0 ? /* @__PURE__ */ a.jsxs(a.Fragment, { children: [
219
+ /* @__PURE__ */ a.jsx("div", { className: pt("leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap", I?.colorLegend), style: {
220
220
  maxWidth: K
221
- }, "aria-label": "Color legend", children: A.map((i, N) => /* @__PURE__ */ n.jsxs("div", { className: "flex gap-2 items-center pb-3", children: [
222
- /* @__PURE__ */ n.jsx("div", { className: "w-3 h-3 rounded-full", style: {
223
- backgroundColor: (S || A.map((w) => w.label)).indexOf(i.label) !== -1 ? (c || X[j].categoricalColors.colors)[(S || A.map((w) => w.label)).indexOf(i.label) % (c || X[j].categoricalColors.colors).length] : X.gray
221
+ }, "aria-label": "Color legend", children: w.map((i, N) => /* @__PURE__ */ a.jsxs("div", { className: "flex gap-2 items-center pb-3", children: [
222
+ /* @__PURE__ */ a.jsx("div", { className: "w-3 h-3 rounded-full", style: {
223
+ backgroundColor: (z || w.map((A) => A.label)).indexOf(i.label) !== -1 ? (l || X[j].categoricalColors.colors)[(z || w.map((A) => A.label)).indexOf(i.label) % (l || X[j].categoricalColors.colors).length] : X.gray
224
224
  } }),
225
- /* @__PURE__ */ n.jsxs(it, { marginBottom: "none", size: "sm", className: "text-primary-gray-700 dark:text-primary-gray-100", children: [
225
+ /* @__PURE__ */ a.jsxs(it, { marginBottom: "none", size: "sm", className: "text-primary-gray-700 dark:text-primary-gray-100", children: [
226
226
  i.label,
227
227
  ":",
228
228
  " ",
229
- /* @__PURE__ */ n.jsx("span", { className: "font-bold", style: {
229
+ /* @__PURE__ */ a.jsx("span", { className: "font-bold", style: {
230
230
  fontSize: "inherit"
231
- }, children: ct(i.size, "NA", et, r, a) })
231
+ }, children: ut(i.size, "NA", et, r, n) })
232
232
  ] })
233
233
  ] }, N)) }),
234
- /* @__PURE__ */ n.jsx(ht, { size: "lg" })
234
+ /* @__PURE__ */ a.jsx(xt, { size: "lg" })
235
235
  ] }) : null,
236
- /* @__PURE__ */ n.jsxs(At, { ref: k, children: [
237
- m.length === 0 && /* @__PURE__ */ n.jsx(Dt, {}),
238
- z && m.length > 0 ? /* @__PURE__ */ n.jsx(zt, { mainText: t, data: A, colors: c, radius: O || z, subNote: x, strokeWidth: e, tooltip: P, colorDomain: S || A.map((i) => i.label), onSeriesMouseOver: d, onSeriesMouseClick: G, resetSelectionOnDoubleClick: J, styles: D, detailsOnClick: Q, precision: et, animate: F === !0 ? {
236
+ /* @__PURE__ */ a.jsxs(At, { ref: k, children: [
237
+ m.length === 0 && /* @__PURE__ */ a.jsx(kt, {}),
238
+ P && m.length > 0 ? /* @__PURE__ */ a.jsx(Et, { mainText: t, data: w, colors: l, radius: O || P, subNote: x, strokeWidth: e, tooltip: S, colorDomain: z || w.map((i) => i.label), onSeriesMouseOver: d, onSeriesMouseClick: G, resetSelectionOnDoubleClick: J, styles: D, detailsOnClick: Q, precision: et, animate: B === !0 ? {
239
239
  duration: 0.5,
240
240
  once: !0,
241
241
  amount: 0.5
242
- } : F || {
242
+ } : B || {
243
243
  duration: 0,
244
244
  once: !0,
245
245
  amount: 0
246
246
  }, trackColor: U }) : null
247
247
  ] }),
248
- p || f ? /* @__PURE__ */ n.jsx(Nt, { styles: {
248
+ p || f ? /* @__PURE__ */ a.jsx(Ct, { styles: {
249
249
  footnote: D?.footnote,
250
250
  source: D?.source
251
251
  }, classNames: {
252
- footnote: E?.footnote,
253
- source: E?.source
252
+ footnote: I?.footnote,
253
+ source: I?.source
254
254
  }, sources: p, footNote: f, width: M }) : null
255
255
  ] });
256
256
  }
257
257
  export {
258
- Zt as DonutChart
258
+ _t as DonutChart
259
259
  };
260
260
  //# sourceMappingURL=DonutChart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DonutChart.js","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Utils/getArc.ts","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","const polarToCartesian = (\r\n centerX: number,\r\n centerY: number,\r\n radius: number,\r\n angleInRadians: number,\r\n) => {\r\n return {\r\n x: centerX + radius * Math.cos(angleInRadians),\r\n y: centerY + radius * Math.sin(angleInRadians),\r\n };\r\n};\r\n\r\nexport function getArc(\r\n x: number,\r\n y: number,\r\n radius: number,\r\n startAngleInRadians: number,\r\n endAngleInRadians: number,\r\n) {\r\n const start = polarToCartesian(x, y, radius, startAngleInRadians);\r\n const end = polarToCartesian(\r\n x,\r\n y,\r\n radius,\r\n endAngleInRadians === 2 * Math.PI ? 1.9999999999 * Math.PI : endAngleInRadians,\r\n );\r\n const largeArcFlag = endAngleInRadians - startAngleInRadians <= Math.PI ? '0' : '1';\r\n const d = ['M', start.x, start.y, 'A', radius, radius, 0, largeArcFlag, 1, end.x, end.y].join(\r\n ' ',\r\n );\r\n return d;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie } from 'd3-shape';\r\nimport { useRef, useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { AnimateDataType, ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getArc } from '@/Utils/getArc';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n onSeriesMouseOver?: (_d: any) => void;\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n animate: AnimateDataType;\r\n trackColor: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n animate,\r\n trackColor,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n className='mx-auto'\r\n >\r\n <motion.g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n <circle\r\n cx={0}\r\n cy={0}\r\n r={radius - strokeWidth / 2}\r\n fill='none'\r\n stroke={trackColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n <AnimatePresence>\r\n {pieData(data as any).map((d, i) => (\r\n <motion.path\r\n key={i}\r\n variants={{\r\n initial: {\r\n pathLength: 0,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n },\r\n whileInView: {\r\n pathLength: 1,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n style={{\r\n stroke:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n strokeWidth,\r\n fill: 'none',\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n </motion.g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <DetailsModal\r\n body={detailsOnClick}\r\n data={mouseClickData}\r\n setData={setMouseClickData}\r\n className={classNames?.modal}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { useEffect, useRef, useState } from 'react';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport orderBy from 'lodash.orderby';\r\nimport { Spacer } from '@undp/design-system-react/Spacer';\r\nimport { cn } from '@undp/design-system-react/cn';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Radius of the donut chart */\r\n radius?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string };\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Track color (i.e. the color of the donut chart's background) of the donut chart */\r\n trackColor?: string;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n animate = false,\r\n trackColor = Colors.light.grays['gray-200'],\r\n } = props;\r\n\r\n const [graphRadius, setGraphRadius] = useState(0);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setGraphRadius(\r\n (Math.min(\r\n ...[entries[0].target.clientWidth || 620, entries[0].target.clientHeight || 480],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n const sortedData = sortData ? orderBy(data, ['size'], [sortData]) : data;\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {showColorScale && data.length > 0 ? (\r\n <>\r\n <div\r\n className={cn(\r\n 'leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap',\r\n classNames?.colorLegend,\r\n )}\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n aria-label='Color legend'\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center pb-3' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n <Spacer size='lg' />\r\n </>\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.length === 0 && <EmptyState />}\r\n {graphRadius && data.length > 0 ? (\r\n <Graph\r\n mainText={mainText}\r\n data={sortedData}\r\n colors={colors}\r\n radius={radius || graphRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n trackColor={trackColor}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["pi","tau","descending","a","b","identity","d","pie","value","sortValues","sort","startAngle","constant","endAngle","padAngle","data","i","n","array","j","k","sum","index","arcs","a0","da","a1","p","pa","v","_","polarToCartesian","centerX","centerY","radius","angleInRadians","x","Math","cos","y","sin","getArc","startAngleInRadians","endAngleInRadians","start","end","PI","largeArcFlag","join","Graph","props","$","_c","mainText","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","animate","trackColor","svgRef","useRef","t0","amount","once","isInView","useInView","pieData","_temp","mouseOverData","setMouseOverData","useState","undefined","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","t1","motion","t2","t3","t4","t5","t6","t7","t8","t9","jsx","jsxs","H2","findIndex","d_1","label","numberFormattingFunction","d_0","size","prefix","suffix","P","t10","t11","T0","AnimatePresence","t12","duration","d_2","initial","pathLength","opacity","whileInView","transition","stroke","indexOf","length","Colors","gray","fill","event","clientY","clientX","isEqual","event_0","t13","map","t14","t15","g","t16","svg","t17","Tooltip","t18","modal","DetailsModal","t19","Fragment","DonutChart","graphTitle","light","categoricalColors","sources","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","grays","graphRadius","setGraphRadius","graphDiv","graphParentDiv","useEffect","resizeObserver","ResizeObserver","entries","min","target","clientWidth","clientHeight","current","observe","disconnect","sortedData","orderBy","GraphContainer","graphContainer","GraphHeader","title","description","filter","cn","colorLegend","maxWidth","el","fontSize","Spacer","GraphArea","EmptyState","GraphFooter","footnote","source"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"DonutChart.js","sources":["../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/descending.js","../node_modules/d3-shape/src/identity.js","../node_modules/d3-shape/src/pie.js","../src/Utils/getArc.ts","../src/Components/Graphs/DonutChart/Graph.tsx","../src/Components/Graphs/DonutChart/index.tsx"],"sourcesContent":["export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","export default function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n return d;\n}\n","import array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = (data = array(data)).length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","const polarToCartesian = (\r\n centerX: number,\r\n centerY: number,\r\n radius: number,\r\n angleInRadians: number,\r\n) => {\r\n return {\r\n x: centerX + radius * Math.cos(angleInRadians),\r\n y: centerY + radius * Math.sin(angleInRadians),\r\n };\r\n};\r\n\r\nexport function getArc(\r\n x: number,\r\n y: number,\r\n radius: number,\r\n startAngleInRadians: number,\r\n endAngleInRadians: number,\r\n) {\r\n const start = polarToCartesian(x, y, radius, startAngleInRadians);\r\n const end = polarToCartesian(\r\n x,\r\n y,\r\n radius,\r\n Math.abs(endAngleInRadians - startAngleInRadians) === 2 * Math.PI\r\n ? 0.999999 * endAngleInRadians\r\n : endAngleInRadians,\r\n );\r\n const largeArcFlag = endAngleInRadians - startAngleInRadians <= Math.PI ? '0' : '1';\r\n const d = ['M', start.x, start.y, 'A', radius, radius, 0, largeArcFlag, 1, end.x, end.y].join(\r\n ' ',\r\n );\r\n return d;\r\n}\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport isEqual from 'fast-deep-equal';\r\nimport { pie } from 'd3-shape';\r\nimport { isValidElement, ReactElement, useRef, useState } from 'react';\r\nimport { H2, P } from '@undp/design-system-react/Typography';\r\nimport { AnimatePresence, motion, useInView } from 'motion/react';\r\n\r\nimport { AnimateDataType, ClassNameObject, DonutChartDataType, StyleObject } from '@/Types';\r\nimport { Tooltip } from '@/Components/Elements/Tooltip';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { DetailsModal } from '@/Components/Elements/DetailsModal';\r\nimport { getArc } from '@/Utils/getArc';\r\n\r\ninterface Props {\r\n mainText?: string | { label: string; suffix?: string; prefix?: string } | ReactElement;\r\n radius: number;\r\n colors: string[];\r\n subNote?: string;\r\n strokeWidth: number;\r\n data: DonutChartDataType[];\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n onSeriesMouseOver?: (_d: any) => void;\r\n onSeriesMouseClick?: (_d: any) => void;\r\n colorDomain: string[];\r\n resetSelectionOnDoubleClick: boolean;\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n styles?: StyleObject;\r\n classNames?: ClassNameObject;\r\n precision: number;\r\n animate: AnimateDataType;\r\n trackColor: string;\r\n}\r\n\r\nexport function Graph(props: Props) {\r\n const {\r\n mainText,\r\n data,\r\n radius,\r\n colors,\r\n subNote,\r\n strokeWidth,\r\n tooltip,\r\n onSeriesMouseOver,\r\n onSeriesMouseClick,\r\n colorDomain,\r\n resetSelectionOnDoubleClick,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision,\r\n animate,\r\n trackColor,\r\n } = props;\r\n const svgRef = useRef(null);\r\n const isInView = useInView(svgRef, {\r\n once: animate.once,\r\n amount: animate.amount,\r\n });\r\n const pieData = pie()\r\n .sort(null)\r\n .startAngle(0)\r\n .value((d: any) => d.size);\r\n\r\n const [mouseOverData, setMouseOverData] = useState<any>(undefined);\r\n\r\n const [mouseClickData, setMouseClickData] = useState<any>(undefined);\r\n const [eventX, setEventX] = useState<number | undefined>(undefined);\r\n const [eventY, setEventY] = useState<number | undefined>(undefined);\r\n return (\r\n <>\r\n <motion.svg\r\n ref={svgRef}\r\n width={`${radius * 2}px`}\r\n height={`${radius * 2}px`}\r\n viewBox={`0 0 ${radius * 2} ${radius * 2}`}\r\n direction='ltr'\r\n className='mx-auto'\r\n >\r\n <motion.g transform={`translate(${radius} ${radius})`}>\r\n {mainText || subNote ? (\r\n <foreignObject\r\n y={0 - (radius - strokeWidth)}\r\n x={0 - (radius - strokeWidth)}\r\n width={2 * (radius - strokeWidth)}\r\n height={2 * (radius - strokeWidth)}\r\n >\r\n <div className='flex flex-col gap-0.5 justify-center items-center h-inherit py-0 px-4'>\r\n {mainText ? (\r\n isValidElement(mainText) ? (\r\n mainText\r\n ) : (\r\n <H2\r\n marginBottom='none'\r\n className='donut-main-text text-primary-gray-700 dark:text-primary-gray-100 leading-none text-center'\r\n >\r\n {typeof mainText === 'string'\r\n ? mainText\r\n : data.findIndex(d => d.label === mainText.label) !== -1\r\n ? numberFormattingFunction(\r\n data[data.findIndex(d => d.label === mainText.label)].size,\r\n 'NA',\r\n precision,\r\n mainText.prefix,\r\n mainText.suffix,\r\n )\r\n : 'NA'}\r\n </H2>\r\n )\r\n ) : null}\r\n {subNote ? (\r\n <P\r\n marginBottom='none'\r\n size='base'\r\n leading='none'\r\n className='donut-sub-note text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {subNote}\r\n </P>\r\n ) : typeof mainText === 'string' || !mainText || isValidElement(mainText) ? null : (\r\n <P\r\n size='base'\r\n marginBottom='none'\r\n leading='none'\r\n className='donut-label text-primary-gray-700 dark:text-primary-gray-100 text-center font-bold'\r\n >\r\n {mainText.label}\r\n </P>\r\n )}\r\n </div>\r\n </foreignObject>\r\n ) : null}\r\n <circle\r\n cx={0}\r\n cy={0}\r\n r={radius - strokeWidth / 2}\r\n fill='none'\r\n stroke={trackColor}\r\n strokeWidth={strokeWidth}\r\n />\r\n <AnimatePresence>\r\n {pieData(data as any).map((d, i) => (\r\n <motion.path\r\n key={i}\r\n variants={{\r\n initial: {\r\n pathLength: 0,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n },\r\n whileInView: {\r\n pathLength: 1,\r\n d: getArc(\r\n 0,\r\n 0,\r\n radius - strokeWidth / 2,\r\n d.startAngle - Math.PI / 2,\r\n d.endAngle - Math.PI / 2,\r\n ),\r\n opacity: mouseOverData\r\n ? mouseOverData.label === (d.data as any).label\r\n ? 1\r\n : 0.3\r\n : 1,\r\n transition: { duration: animate.duration },\r\n },\r\n }}\r\n initial='initial'\r\n animate={isInView ? 'whileInView' : 'initial'}\r\n exit={{ opacity: 0, transition: { duration: animate.duration } }}\r\n style={{\r\n stroke:\r\n colorDomain.indexOf((d.data as any).label) !== -1\r\n ? colors[colorDomain.indexOf((d.data as any).label) % colors.length]\r\n : Colors.gray,\r\n strokeWidth,\r\n fill: 'none',\r\n }}\r\n onMouseEnter={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n onSeriesMouseOver?.(d);\r\n }}\r\n onClick={() => {\r\n if (onSeriesMouseClick || detailsOnClick) {\r\n if (isEqual(mouseClickData, d.data) && resetSelectionOnDoubleClick) {\r\n setMouseClickData(undefined);\r\n onSeriesMouseClick?.(undefined);\r\n } else {\r\n setMouseClickData(d.data);\r\n if (onSeriesMouseClick) onSeriesMouseClick(d.data);\r\n }\r\n }\r\n }}\r\n onMouseMove={event => {\r\n setMouseOverData(d.data);\r\n setEventY(event.clientY);\r\n setEventX(event.clientX);\r\n }}\r\n onMouseLeave={() => {\r\n setMouseOverData(undefined);\r\n setEventX(undefined);\r\n setEventY(undefined);\r\n onSeriesMouseOver?.(undefined);\r\n }}\r\n />\r\n ))}\r\n </AnimatePresence>\r\n </motion.g>\r\n </motion.svg>\r\n {mouseOverData && tooltip && eventX && eventY ? (\r\n <Tooltip\r\n data={mouseOverData}\r\n body={tooltip}\r\n xPos={eventX}\r\n yPos={eventY}\r\n backgroundStyle={styles?.tooltip}\r\n className={classNames?.tooltip}\r\n />\r\n ) : null}\r\n {detailsOnClick && mouseClickData !== undefined ? (\r\n <DetailsModal\r\n body={detailsOnClick}\r\n data={mouseClickData}\r\n setData={setMouseClickData}\r\n className={classNames?.modal}\r\n />\r\n ) : null}\r\n </>\r\n );\r\n}\r\n","import { ReactElement, useEffect, useRef, useState } from 'react';\r\nimport { P } from '@undp/design-system-react/Typography';\r\nimport orderBy from 'lodash.orderby';\r\nimport { Spacer } from '@undp/design-system-react/Spacer';\r\nimport { cn } from '@undp/design-system-react/cn';\r\n\r\nimport { Graph } from './Graph';\r\n\r\nimport {\r\n DonutChartDataType,\r\n Languages,\r\n SourcesDataType,\r\n StyleObject,\r\n ClassNameObject,\r\n AnimateDataType,\r\n} from '@/Types';\r\nimport { numberFormattingFunction } from '@/Utils/numberFormattingFunction';\r\nimport { GraphFooter } from '@/Components/Elements/GraphFooter';\r\nimport { GraphHeader } from '@/Components/Elements/GraphHeader';\r\nimport { Colors } from '@/Components/ColorPalette';\r\nimport { EmptyState } from '@/Components/Elements/EmptyState';\r\nimport { GraphArea, GraphContainer } from '@/Components/Elements/GraphContainer';\r\n\r\ninterface Props {\r\n // Data\r\n /** Array of data objects */\r\n data: DonutChartDataType[];\r\n\r\n // Titles, Labels, and Sources\r\n /** Title of the graph */\r\n graphTitle?: string | React.ReactNode;\r\n /** Description of the graph */\r\n graphDescription?: string | React.ReactNode;\r\n /** Footnote for the graph */\r\n footNote?: string | React.ReactNode;\r\n /** Source data for the graph */\r\n sources?: SourcesDataType[];\r\n /** Accessibility label */\r\n ariaLabel?: string;\r\n\r\n // Colors and Styling\r\n /** Array of colors for each segment */\r\n colors?: string[];\r\n /** Domain of colors for the graph */\r\n colorDomain?: string[];\r\n /** Background color of the graph */\r\n backgroundColor?: string | boolean;\r\n /** Custom styles for the graph. Each object should be a valid React CSS style object. */\r\n styles?: StyleObject;\r\n /** Custom class names */\r\n classNames?: ClassNameObject;\r\n\r\n // Size and Spacing\r\n /** Width of the graph */\r\n width?: number;\r\n /** Height of the graph */\r\n height?: number;\r\n /** Minimum height of the graph */\r\n minHeight?: number;\r\n /** Relative height scaling factor. This overwrites the height props */\r\n relativeHeight?: number;\r\n /** Padding around the graph. Defaults to 0 if no backgroundColor is mentioned else defaults to 1rem */\r\n padding?: string;\r\n /** Radius of the donut chart */\r\n radius?: number;\r\n\r\n // Values and Ticks\r\n /** Prefix for values */\r\n prefix?: string;\r\n /** Suffix for values */\r\n suffix?: string;\r\n\r\n // Graph Parameters\r\n /** Toggle visibility of color scale. This is only applicable if the data props hae color parameter */\r\n showColorScale?: boolean;\r\n /** Max width of the color scale as a css property */\r\n colorScaleMaxWidth?: string;\r\n /** Stroke width of the arcs and circle of the donut */\r\n strokeWidth?: number;\r\n /** Sorting order for data. This is overwritten by labelOrder prop */\r\n sortData?: 'asc' | 'desc';\r\n /** Toggles if the graph animates in when loaded. */\r\n animate?: boolean | AnimateDataType;\r\n /** Large text at the center of the donut chart. If the type is an object then the text is the value in the data for the label mentioned in the object */\r\n mainText?: string | { label: string; suffix?: string; prefix?: string } | ReactElement;\r\n /** Small text at the center of the donut chart */\r\n subNote?: string;\r\n /** Specifies the number of decimal places to display in the value. */\r\n precision?: number;\r\n /** Track color (i.e. the color of the donut chart's background) of the donut chart */\r\n trackColor?: string;\r\n /** Enable graph download option as png */\r\n graphDownload?: boolean;\r\n /** Enable data download option as a csv */\r\n dataDownload?: boolean;\r\n /** Reset selection on double-click. Only applicable when used in a dashboard context with filters. */\r\n resetSelectionOnDoubleClick?: boolean;\r\n\r\n // Interactions and Callbacks\r\n /** Tooltip content. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n tooltip?: string | ((_d: any) => React.ReactNode);\r\n /** Details displayed on the modal when user clicks of a data point. If the type is string then this uses the [handlebar](../?path=/docs/misc-handlebars-templates-and-custom-helpers--docs) template to display the data */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n detailsOnClick?: string | ((_d: any) => React.ReactNode);\r\n /** Callback for mouse over event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseOver?: (_d: any) => void;\r\n /** Callback for mouse click event */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n onSeriesMouseClick?: (_d: any) => void;\r\n\r\n // Configuration and Options\r\n /** Language setting */\r\n language?: Languages;\r\n /** Color theme */\r\n theme?: 'light' | 'dark';\r\n /** Unique ID for the graph */\r\n graphID?: string;\r\n}\r\n\r\nexport function DonutChart(props: Props) {\r\n const {\r\n mainText,\r\n graphTitle,\r\n colors = Colors.light.categoricalColors.colors,\r\n suffix = '',\r\n sources,\r\n prefix = '',\r\n strokeWidth = 50,\r\n graphDescription,\r\n subNote,\r\n footNote,\r\n radius,\r\n data,\r\n showColorScale = true,\r\n padding,\r\n backgroundColor = false,\r\n tooltip,\r\n onSeriesMouseOver,\r\n graphID,\r\n onSeriesMouseClick,\r\n graphDownload = false,\r\n dataDownload = false,\r\n colorDomain,\r\n sortData,\r\n language = 'en',\r\n theme = 'light',\r\n width,\r\n height,\r\n minHeight = 0,\r\n relativeHeight,\r\n ariaLabel,\r\n resetSelectionOnDoubleClick = true,\r\n colorScaleMaxWidth,\r\n detailsOnClick,\r\n styles,\r\n classNames,\r\n precision = 2,\r\n animate = false,\r\n trackColor = Colors.light.grays['gray-200'],\r\n } = props;\r\n\r\n const [graphRadius, setGraphRadius] = useState(0);\r\n\r\n const graphDiv = useRef<HTMLDivElement>(null);\r\n const graphParentDiv = useRef<HTMLDivElement>(null);\r\n\r\n useEffect(() => {\r\n const resizeObserver = new ResizeObserver(entries => {\r\n setGraphRadius(\r\n (Math.min(\r\n ...[entries[0].target.clientWidth || 620, entries[0].target.clientHeight || 480],\r\n ) || 420) / 2,\r\n );\r\n });\r\n if (graphDiv.current) {\r\n resizeObserver.observe(graphDiv.current);\r\n }\r\n return () => resizeObserver.disconnect();\r\n }, []);\r\n\r\n const sortedData = sortData ? orderBy(data, ['size'], [sortData]) : data;\r\n\r\n return (\r\n <GraphContainer\r\n className={classNames?.graphContainer}\r\n style={styles?.graphContainer}\r\n id={graphID}\r\n ref={graphParentDiv}\r\n aria-label={ariaLabel}\r\n backgroundColor={backgroundColor}\r\n theme={theme}\r\n language={language}\r\n minHeight={minHeight}\r\n width={width}\r\n height={height}\r\n relativeHeight={relativeHeight}\r\n padding={padding}\r\n >\r\n {graphTitle || graphDescription || graphDownload || dataDownload ? (\r\n <GraphHeader\r\n styles={{\r\n title: styles?.title,\r\n description: styles?.description,\r\n }}\r\n classNames={{\r\n title: classNames?.title,\r\n description: classNames?.description,\r\n }}\r\n graphTitle={graphTitle}\r\n graphDescription={graphDescription}\r\n width={width}\r\n graphDownload={graphDownload ? graphParentDiv : undefined}\r\n dataDownload={\r\n dataDownload\r\n ? data.map(d => d.data).filter(d => d !== undefined).length > 0\r\n ? data.map(d => d.data).filter(d => d !== undefined)\r\n : data.filter(d => d !== undefined)\r\n : null\r\n }\r\n />\r\n ) : null}\r\n {showColorScale && data.length > 0 ? (\r\n <>\r\n <div\r\n className={cn(\r\n 'leading-0 flex mb-0 ml-auto mr-auto justify-center gap-x-3 gap-y-0 flex-wrap',\r\n classNames?.colorLegend,\r\n )}\r\n style={{ maxWidth: colorScaleMaxWidth }}\r\n aria-label='Color legend'\r\n >\r\n {sortedData.map((d, i) => (\r\n <div className='flex gap-2 items-center pb-3' key={i}>\r\n <div\r\n className='w-3 h-3 rounded-full'\r\n style={{\r\n backgroundColor:\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) !== -1\r\n ? (colors || Colors[theme].categoricalColors.colors)[\r\n (colorDomain || sortedData.map(el => el.label)).indexOf(d.label) %\r\n (colors || Colors[theme].categoricalColors.colors).length\r\n ]\r\n : Colors.gray,\r\n }}\r\n />\r\n <P\r\n marginBottom='none'\r\n size='sm'\r\n className='text-primary-gray-700 dark:text-primary-gray-100'\r\n >\r\n {d.label}:{' '}\r\n <span className='font-bold' style={{ fontSize: 'inherit' }}>\r\n {numberFormattingFunction(d.size, 'NA', precision, prefix, suffix)}\r\n </span>\r\n </P>\r\n </div>\r\n ))}\r\n </div>\r\n <Spacer size='lg' />\r\n </>\r\n ) : null}\r\n <GraphArea ref={graphDiv}>\r\n {data.length === 0 && <EmptyState />}\r\n {graphRadius && data.length > 0 ? (\r\n <Graph\r\n mainText={mainText}\r\n data={sortedData}\r\n colors={colors}\r\n radius={radius || graphRadius}\r\n subNote={subNote}\r\n strokeWidth={strokeWidth}\r\n tooltip={tooltip}\r\n colorDomain={colorDomain || sortedData.map(d => d.label)}\r\n onSeriesMouseOver={onSeriesMouseOver}\r\n onSeriesMouseClick={onSeriesMouseClick}\r\n resetSelectionOnDoubleClick={resetSelectionOnDoubleClick}\r\n styles={styles}\r\n detailsOnClick={detailsOnClick}\r\n precision={precision}\r\n animate={\r\n animate === true\r\n ? { duration: 0.5, once: true, amount: 0.5 }\r\n : animate || { duration: 0, once: true, amount: 0 }\r\n }\r\n trackColor={trackColor}\r\n />\r\n ) : null}\r\n </GraphArea>\r\n {sources || footNote ? (\r\n <GraphFooter\r\n styles={{ footnote: styles?.footnote, source: styles?.source }}\r\n classNames={{\r\n footnote: classNames?.footnote,\r\n source: classNames?.source,\r\n }}\r\n sources={sources}\r\n footNote={footNote}\r\n width={width}\r\n />\r\n ) : null}\r\n </GraphContainer>\r\n );\r\n}\r\n"],"names":["pi","tau","descending","a","b","identity","d","pie","value","sortValues","sort","startAngle","constant","endAngle","padAngle","data","i","n","array","j","k","sum","index","arcs","a0","da","a1","p","pa","v","_","polarToCartesian","centerX","centerY","radius","angleInRadians","x","Math","cos","y","sin","getArc","startAngleInRadians","endAngleInRadians","start","end","abs","PI","largeArcFlag","join","Graph","props","$","_c","mainText","colors","subNote","strokeWidth","tooltip","onSeriesMouseOver","onSeriesMouseClick","colorDomain","resetSelectionOnDoubleClick","detailsOnClick","styles","classNames","precision","animate","trackColor","svgRef","useRef","t0","amount","once","isInView","useInView","pieData","_temp","mouseOverData","setMouseOverData","useState","undefined","mouseClickData","setMouseClickData","eventX","setEventX","eventY","setEventY","t1","motion","t2","t3","t4","t5","t6","t7","t8","t9","jsx","jsxs","isValidElement","H2","findIndex","d_1","label","numberFormattingFunction","d_0","size","prefix","suffix","P","t10","t11","T0","AnimatePresence","t12","duration","d_2","initial","pathLength","opacity","whileInView","transition","stroke","indexOf","length","Colors","gray","fill","event","clientY","clientX","isEqual","event_0","t13","map","t14","t15","g","t16","svg","t17","Tooltip","t18","modal","DetailsModal","t19","Fragment","DonutChart","graphTitle","light","categoricalColors","sources","graphDescription","footNote","showColorScale","padding","backgroundColor","graphID","graphDownload","dataDownload","sortData","language","theme","width","height","minHeight","relativeHeight","ariaLabel","colorScaleMaxWidth","grays","graphRadius","setGraphRadius","graphDiv","graphParentDiv","useEffect","resizeObserver","ResizeObserver","entries","min","target","clientWidth","clientHeight","current","observe","disconnect","sortedData","orderBy","GraphContainer","graphContainer","GraphHeader","title","description","filter","cn","colorLegend","maxWidth","el","fontSize","Spacer","GraphArea","EmptyState","GraphFooter","footnote","source"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ import { JSX as JSX_2 } from 'react';
6
6
  import { MultiPolygon } from 'geojson';
7
7
  import { Polygon } from 'geojson';
8
8
  import { Position as Position_2 } from 'geojson';
9
+ import { ReactElement } from 'react';
9
10
  import { RefObject } from 'react';
10
11
  import * as THREE from 'three';
11
12
 
@@ -6662,7 +6663,7 @@ declare interface Props_3 {
6662
6663
  label: string;
6663
6664
  suffix?: string;
6664
6665
  prefix?: string;
6665
- };
6666
+ } | ReactElement;
6666
6667
  /** Small text at the center of the donut chart */
6667
6668
  subNote?: string;
6668
6669
  /** Specifies the number of decimal places to display in the value. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undp/data-viz",
3
- "version": "2.1.6",
3
+ "version": "2.1.7",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "browser": "./dist/index.umd.js",