cc-viewer 1.6.183 → 1.6.192

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.
Files changed (135) hide show
  1. package/dist/assets/App-DuGHwadX.js +31 -0
  2. package/dist/assets/{AppHeader-Dc7WvorH.css → AppHeader-D8MCV07q.css} +3 -3
  3. package/dist/assets/AppHeader.module-CozRDKfP.js +573 -0
  4. package/dist/assets/Mobile-Bab634xx.js +10 -0
  5. package/dist/assets/_baseUniq-DJPPdHyT.js +1 -0
  6. package/dist/assets/arc-DZ3Bjq-l.js +1 -0
  7. package/dist/assets/architectureDiagram-Q4EWVU46-xy0J2lr0.js +36 -0
  8. package/dist/assets/blockDiagram-DXYQGD6D-CoUm8UC5.js +132 -0
  9. package/dist/assets/c4Diagram-AHTNJAMY-CFHX4Dfx.js +10 -0
  10. package/dist/assets/channel-G3S1FOvm.js +1 -0
  11. package/dist/assets/chunk-4BX2VUAB-CiktxOyY.js +1 -0
  12. package/dist/assets/chunk-4TB4RGXK-DHl7ZlQV.js +206 -0
  13. package/dist/assets/chunk-55IACEB6-DcgWxDD5.js +1 -0
  14. package/dist/assets/chunk-EDXVE4YY-DeUzWpQx.js +1 -0
  15. package/dist/assets/{chunk-FMBD7UC4-Bb0LARSp.js → chunk-FMBD7UC4-BCaKpugk.js} +2 -2
  16. package/dist/assets/chunk-OYMX7WX6-DKMEMbG9.js +231 -0
  17. package/dist/assets/chunk-QZHKN3VN-BREApeQ-.js +1 -0
  18. package/dist/assets/chunk-YZCP3GAM-BYW1PNda.js +1 -0
  19. package/dist/assets/classDiagram-6PBFFD2Q-B0-7EUsz.js +1 -0
  20. package/dist/assets/classDiagram-v2-HSJHXN6E-B0-7EUsz.js +1 -0
  21. package/dist/assets/clone-CX_D5SrR.js +1 -0
  22. package/dist/assets/cose-bilkent-S5V4N54A-DpwiMCiq.js +1 -0
  23. package/dist/assets/cytoscape.esm-BMgRe88L.js +331 -0
  24. package/dist/assets/dagre-KV5264BT-Dc7qbya2.js +4 -0
  25. package/dist/assets/defaultLocale-CcTwRAjA.js +1 -0
  26. package/dist/assets/diagram-5BDNPKRD-v7FsHeLQ.js +10 -0
  27. package/dist/assets/diagram-G4DWMVQ6-BhKNBlcE.js +24 -0
  28. package/dist/assets/diagram-MMDJMWI5-C-3cRdzG.js +43 -0
  29. package/dist/assets/diagram-TYMM5635-HfNcJIfT.js +24 -0
  30. package/dist/assets/erDiagram-SMLLAGMA-Ckj0dkk7.js +85 -0
  31. package/dist/assets/flowDiagram-DWJPFMVM-yf315tJr.js +162 -0
  32. package/dist/assets/ganttDiagram-T4ZO3ILL-Ch2bINVC.js +292 -0
  33. package/dist/assets/gitGraphDiagram-UUTBAWPF-CesdgsJi.js +106 -0
  34. package/dist/assets/graph-CRpmapJV.js +1 -0
  35. package/dist/assets/html2canvas.esm-B8c0f9Wq.js +22 -0
  36. package/dist/assets/index-DJ0iGKLy.js +2 -0
  37. package/dist/assets/infoDiagram-42DDH7IO-CuD16P9Y.js +2 -0
  38. package/dist/assets/init-C7FSzFHJ.js +1 -0
  39. package/dist/assets/ishikawaDiagram-UXIWVN3A-4y8aG54G.js +70 -0
  40. package/dist/assets/journeyDiagram-VCZTEJTY-B6TtR2Zk.js +139 -0
  41. package/dist/assets/kanban-definition-6JOO6SKY-DTcNHYUS.js +89 -0
  42. package/dist/assets/katex-CJRKSY_b.js +257 -0
  43. package/dist/assets/layout-CX5hpkD2.js +1 -0
  44. package/dist/assets/linear-tWlC-NXc.js +1 -0
  45. package/dist/assets/mermaid.core-DNvsWVDx.js +308 -0
  46. package/dist/assets/min-CDExe3RN.js +1 -0
  47. package/dist/assets/mindmap-definition-QFDTVHPH-CW0yNQcb.js +96 -0
  48. package/dist/assets/ordinal-aRyHI6gl.js +1 -0
  49. package/dist/assets/pieDiagram-DEJITSTG-DNrnOqmz.js +30 -0
  50. package/dist/assets/quadrantDiagram-34T5L4WZ-Cl176vnh.js +7 -0
  51. package/dist/assets/requirementDiagram-MS252O5E-DKp3A5f_.js +84 -0
  52. package/dist/assets/sankeyDiagram-XADWPNL6-BMV0lAz8.js +10 -0
  53. package/dist/assets/sequenceDiagram-FGHM5R23-CQ4preep.js +157 -0
  54. package/dist/assets/stateDiagram-FHFEXIEX-BKqYYN8H.js +1 -0
  55. package/dist/assets/stateDiagram-v2-QKLJ7IA2-C1W1ECmZ.js +1 -0
  56. package/dist/assets/timeline-definition-GMOUNBTQ-4kgeuumv.js +120 -0
  57. package/dist/assets/vendor-antd-Dk5s46Ag.js +406 -0
  58. package/dist/assets/vendor-codemirror-DxvDOrio.js +46 -0
  59. package/dist/assets/vendor-highlight-DVwgAdJY.js +3 -0
  60. package/dist/assets/vendor-markdown-DO-Ppp4f.js +60 -0
  61. package/dist/assets/vendor-qrcode-hI5wlAgK.js +9 -0
  62. package/dist/assets/vendor-virtuoso-HW77kTCh.js +1 -0
  63. package/dist/assets/vendor-xterm-D2cUrYEx.js +140 -0
  64. package/dist/assets/vennDiagram-DHZGUBPP-CqBcUIdK.js +34 -0
  65. package/dist/assets/wardley-RL74JXVD-CbEnkKx8.js +162 -0
  66. package/dist/assets/wardleyDiagram-NUSXRM2D-BJrjkZMg.js +20 -0
  67. package/dist/assets/xychartDiagram-5P7HB3ND-D8aBEz8e.js +7 -0
  68. package/dist/index.html +3 -3
  69. package/package.json +1 -1
  70. package/server.js +13 -4
  71. package/dist/assets/App-BHfyP8-J.js +0 -31
  72. package/dist/assets/AppHeader.module-W_78JZt9.js +0 -573
  73. package/dist/assets/Mobile-ca5EOMpN.js +0 -10
  74. package/dist/assets/_baseUniq-DYSZB4Xx.js +0 -1
  75. package/dist/assets/arc-BChSP8hM.js +0 -1
  76. package/dist/assets/architectureDiagram-Q4EWVU46-vlr5Q6DQ.js +0 -36
  77. package/dist/assets/blockDiagram-DXYQGD6D-4C3Amh2i.js +0 -132
  78. package/dist/assets/c4Diagram-AHTNJAMY-wI0efLSs.js +0 -10
  79. package/dist/assets/channel-d8DITadq.js +0 -1
  80. package/dist/assets/chunk-4BX2VUAB-BX9brpDB.js +0 -1
  81. package/dist/assets/chunk-4TB4RGXK-DvFQ-X9V.js +0 -206
  82. package/dist/assets/chunk-55IACEB6-BNmYjPNf.js +0 -1
  83. package/dist/assets/chunk-EDXVE4YY-BNvDPqBE.js +0 -1
  84. package/dist/assets/chunk-OYMX7WX6-BwlvIpeD.js +0 -231
  85. package/dist/assets/chunk-QZHKN3VN-BS6RK8_X.js +0 -1
  86. package/dist/assets/chunk-YZCP3GAM-oOqmydQz.js +0 -1
  87. package/dist/assets/classDiagram-6PBFFD2Q-B1oRrMCc.js +0 -1
  88. package/dist/assets/classDiagram-v2-HSJHXN6E-B1oRrMCc.js +0 -1
  89. package/dist/assets/clone-BrNOd7Lq.js +0 -1
  90. package/dist/assets/cose-bilkent-S5V4N54A-CamsIqkY.js +0 -1
  91. package/dist/assets/cytoscape.esm-DxGcaOPV.js +0 -331
  92. package/dist/assets/dagre-KV5264BT-CPAWWiBh.js +0 -4
  93. package/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
  94. package/dist/assets/diagram-5BDNPKRD-D6TmzGhl.js +0 -10
  95. package/dist/assets/diagram-G4DWMVQ6-DDuJnMCL.js +0 -24
  96. package/dist/assets/diagram-MMDJMWI5-CQWhvrpz.js +0 -43
  97. package/dist/assets/diagram-TYMM5635-CEDj3w_h.js +0 -24
  98. package/dist/assets/erDiagram-SMLLAGMA-B_eQqha6.js +0 -85
  99. package/dist/assets/flowDiagram-DWJPFMVM-B985i3uQ.js +0 -162
  100. package/dist/assets/ganttDiagram-T4ZO3ILL-DKp62vr3.js +0 -292
  101. package/dist/assets/gitGraphDiagram-UUTBAWPF-Cc1gyz1Q.js +0 -106
  102. package/dist/assets/graph-C-1-3bsA.js +0 -1
  103. package/dist/assets/html2canvas.esm-QH1iLAAe.js +0 -22
  104. package/dist/assets/index-LH2WLu05.js +0 -2
  105. package/dist/assets/infoDiagram-42DDH7IO-DqXaAHZz.js +0 -2
  106. package/dist/assets/init-Gi6I4Gst.js +0 -1
  107. package/dist/assets/ishikawaDiagram-UXIWVN3A-zdUdDJX2.js +0 -70
  108. package/dist/assets/journeyDiagram-VCZTEJTY-ip5SzODy.js +0 -139
  109. package/dist/assets/kanban-definition-6JOO6SKY-D5EYh6AP.js +0 -89
  110. package/dist/assets/katex-DkKDou_j.js +0 -257
  111. package/dist/assets/layout-Cjq8AL8G.js +0 -1
  112. package/dist/assets/linear-U0KsEJ2u.js +0 -1
  113. package/dist/assets/mermaid.core-CT-5crLN.js +0 -308
  114. package/dist/assets/min-C7G6pq26.js +0 -1
  115. package/dist/assets/mindmap-definition-QFDTVHPH-CIzhFOw1.js +0 -96
  116. package/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  117. package/dist/assets/pieDiagram-DEJITSTG-Cp1Zd1MQ.js +0 -30
  118. package/dist/assets/quadrantDiagram-34T5L4WZ-Cp31xM90.js +0 -7
  119. package/dist/assets/requirementDiagram-MS252O5E-Dbg_eQqB.js +0 -84
  120. package/dist/assets/sankeyDiagram-XADWPNL6-CMrzwpwC.js +0 -10
  121. package/dist/assets/sequenceDiagram-FGHM5R23-KJegoBnN.js +0 -157
  122. package/dist/assets/stateDiagram-FHFEXIEX-BDWprYzE.js +0 -1
  123. package/dist/assets/stateDiagram-v2-QKLJ7IA2-CCUmB0qI.js +0 -1
  124. package/dist/assets/timeline-definition-GMOUNBTQ-BOWeG5LY.js +0 -120
  125. package/dist/assets/vendor-antd-CtdKd5xs.js +0 -406
  126. package/dist/assets/vendor-codemirror-CdXaVX4e.js +0 -46
  127. package/dist/assets/vendor-highlight-D4ATuRwX.js +0 -3
  128. package/dist/assets/vendor-markdown-CO-jRjTB.js +0 -60
  129. package/dist/assets/vendor-qrcode-D05RfzwB.js +0 -9
  130. package/dist/assets/vendor-virtuoso-BhnFrbmh.js +0 -1
  131. package/dist/assets/vendor-xterm-DWMOrwSy.js +0 -140
  132. package/dist/assets/vennDiagram-DHZGUBPP-B6mLodPk.js +0 -34
  133. package/dist/assets/wardley-RL74JXVD-CovHs24Z.js +0 -162
  134. package/dist/assets/wardleyDiagram-NUSXRM2D-CBg_VXF7.js +0 -20
  135. package/dist/assets/xychartDiagram-5P7HB3ND-BRxgk_oX.js +0 -7
@@ -0,0 +1,34 @@
1
+ import{aC as adjustChannel,s as setAccDescription,g as getAccDescription,q as getDiagramTitle,p as setDiagramTitle,a as getAccTitle,b as setAccTitle,_ as __name,C as getConfig,H as selectSvgElement,d as select,ar as at,U as isDark,V as lighten,W as darken,e as configureSvgSize,y as clear,E as cleanAndMerge,F as defaultConfig_default}from"./mermaid.core-DNvsWVDx.js";import"./index-DJ0iGKLy.js";import"./vendor-codemirror-DxvDOrio.js";import"./vendor-antd-Dk5s46Ag.js";import"./vendor-markdown-DO-Ppp4f.js";const transparentize=(color,amount)=>adjustChannel(color,"a",-amount),SMALL$1=1e-10;function intersectionArea(circles,stats){const intersectionPoints=getIntersectionPoints(circles),innerPoints=intersectionPoints.filter(p=>containedInCircles(p,circles));let arcArea=0,polygonArea=0;const arcs=[];if(innerPoints.length>1){const center=getCenter(innerPoints);for(let i=0;i<innerPoints.length;++i){const p=innerPoints[i];p.angle=Math.atan2(p.x-center.x,p.y-center.y)}innerPoints.sort((a,b)=>b.angle-a.angle);let p2=innerPoints[innerPoints.length-1];for(let i=0;i<innerPoints.length;++i){const p1=innerPoints[i];polygonArea+=(p2.x+p1.x)*(p1.y-p2.y);const midPoint={x:(p1.x+p2.x)/2,y:(p1.y+p2.y)/2};let arc=null;for(let j=0;j<p1.parentIndex.length;++j)if(p2.parentIndex.includes(p1.parentIndex[j])){const circle=circles[p1.parentIndex[j]],a1=Math.atan2(p1.x-circle.x,p1.y-circle.y),a2=Math.atan2(p2.x-circle.x,p2.y-circle.y);let angleDiff=a2-a1;angleDiff<0&&(angleDiff+=2*Math.PI);const a=a2-angleDiff/2;let width=distance(midPoint,{x:circle.x+circle.radius*Math.sin(a),y:circle.y+circle.radius*Math.cos(a)});width>circle.radius*2&&(width=circle.radius*2),(arc==null||arc.width>width)&&(arc={circle,width,p1,p2,large:width>circle.radius,sweep:!0})}arc!=null&&(arcs.push(arc),arcArea+=circleArea(arc.circle.radius,arc.width),p2=p1)}}else{let smallest=circles[0];for(let i=1;i<circles.length;++i)circles[i].radius<smallest.radius&&(smallest=circles[i]);let disjoint=!1;for(let i=0;i<circles.length;++i)if(distance(circles[i],smallest)>Math.abs(smallest.radius-circles[i].radius)){disjoint=!0;break}disjoint?arcArea=polygonArea=0:(arcArea=smallest.radius*smallest.radius*Math.PI,arcs.push({circle:smallest,p1:{x:smallest.x,y:smallest.y+smallest.radius},p2:{x:smallest.x-SMALL$1,y:smallest.y+smallest.radius},width:smallest.radius*2,large:!0,sweep:!0}))}return polygonArea/=2,stats&&(stats.area=arcArea+polygonArea,stats.arcArea=arcArea,stats.polygonArea=polygonArea,stats.arcs=arcs,stats.innerPoints=innerPoints,stats.intersectionPoints=intersectionPoints),arcArea+polygonArea}function containedInCircles(point,circles){return circles.every(circle=>distance(point,circle)<circle.radius+SMALL$1)}function getIntersectionPoints(circles){const ret=[];for(let i=0;i<circles.length;++i)for(let j=i+1;j<circles.length;++j){const intersect=circleCircleIntersection(circles[i],circles[j]);for(const p of intersect)p.parentIndex=[i,j],ret.push(p)}return ret}function circleArea(r,width){return r*r*Math.acos(1-width/r)-(r-width)*Math.sqrt(width*(2*r-width))}function distance(p1,p2){return Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))}function circleOverlap(r1,r2,d){if(d>=r1+r2)return 0;if(d<=Math.abs(r1-r2))return Math.PI*Math.min(r1,r2)*Math.min(r1,r2);const w1=r1-(d*d-r2*r2+r1*r1)/(2*d),w2=r2-(d*d-r1*r1+r2*r2)/(2*d);return circleArea(r1,w1)+circleArea(r2,w2)}function circleCircleIntersection(p1,p2){const d=distance(p1,p2),r1=p1.radius,r2=p2.radius;if(d>=r1+r2||d<=Math.abs(r1-r2))return[];const a=(r1*r1-r2*r2+d*d)/(2*d),h=Math.sqrt(r1*r1-a*a),x0=p1.x+a*(p2.x-p1.x)/d,y0=p1.y+a*(p2.y-p1.y)/d,rx=-(p2.y-p1.y)*(h/d),ry=-(p2.x-p1.x)*(h/d);return[{x:x0+rx,y:y0-ry},{x:x0-rx,y:y0+ry}]}function getCenter(points){const center={x:0,y:0};for(const point of points)center.x+=point.x,center.y+=point.y;return center.x/=points.length,center.y/=points.length,center}function bisect(f,a,b,parameters){parameters=parameters||{};const maxIterations=parameters.maxIterations||100,tolerance=parameters.tolerance||1e-10,fA=f(a),fB=f(b);let delta=b-a;if(fA*fB>0)throw"Initial bisect points must have opposite signs";if(fA===0)return a;if(fB===0)return b;for(let i=0;i<maxIterations;++i){delta/=2;const mid=a+delta,fMid=f(mid);if(fMid*fA>=0&&(a=mid),Math.abs(delta)<tolerance||fMid===0)return mid}return a+delta}function zeros(x){const r=new Array(x);for(let i=0;i<x;++i)r[i]=0;return r}function zerosM(x,y){return zeros(x).map(()=>zeros(y))}function dot(a,b){let ret=0;for(let i=0;i<a.length;++i)ret+=a[i]*b[i];return ret}function norm2(a){return Math.sqrt(dot(a,a))}function scale(ret,value,c){for(let i=0;i<value.length;++i)ret[i]=value[i]*c}function weightedSum(ret,w1,v1,w2,v2){for(let j=0;j<ret.length;++j)ret[j]=w1*v1[j]+w2*v2[j]}function nelderMead(f,x0,parameters){parameters=parameters||{};const maxIterations=parameters.maxIterations||x0.length*200,nonZeroDelta=parameters.nonZeroDelta||1.05,zeroDelta=parameters.zeroDelta||.001,minErrorDelta=parameters.minErrorDelta||1e-6,minTolerance=parameters.minErrorDelta||1e-5,rho=parameters.rho!==void 0?parameters.rho:1,chi=parameters.chi!==void 0?parameters.chi:2,psi=parameters.psi!==void 0?parameters.psi:-.5,sigma=parameters.sigma!==void 0?parameters.sigma:.5;let maxDiff;const N=x0.length,simplex=new Array(N+1);simplex[0]=x0,simplex[0].fx=f(x0),simplex[0].id=0;for(let i=0;i<N;++i){const point=x0.slice();point[i]=point[i]?point[i]*nonZeroDelta:zeroDelta,simplex[i+1]=point,simplex[i+1].fx=f(point),simplex[i+1].id=i+1}function updateSimplex(value){for(let i=0;i<value.length;i++)simplex[N][i]=value[i];simplex[N].fx=value.fx}const sortOrder=(a,b)=>a.fx-b.fx,centroid=x0.slice(),reflected=x0.slice(),contracted=x0.slice(),expanded=x0.slice();for(let iteration=0;iteration<maxIterations;++iteration){if(simplex.sort(sortOrder),parameters.history){const sortedSimplex=simplex.map(x=>{const state=x.slice();return state.fx=x.fx,state.id=x.id,state});sortedSimplex.sort((a,b)=>a.id-b.id),parameters.history.push({x:simplex[0].slice(),fx:simplex[0].fx,simplex:sortedSimplex})}maxDiff=0;for(let i=0;i<N;++i)maxDiff=Math.max(maxDiff,Math.abs(simplex[0][i]-simplex[1][i]));if(Math.abs(simplex[0].fx-simplex[N].fx)<minErrorDelta&&maxDiff<minTolerance)break;for(let i=0;i<N;++i){centroid[i]=0;for(let j=0;j<N;++j)centroid[i]+=simplex[j][i];centroid[i]/=N}const worst=simplex[N];if(weightedSum(reflected,1+rho,centroid,-rho,worst),reflected.fx=f(reflected),reflected.fx<simplex[0].fx)weightedSum(expanded,1+chi,centroid,-chi,worst),expanded.fx=f(expanded),expanded.fx<reflected.fx?updateSimplex(expanded):updateSimplex(reflected);else if(reflected.fx>=simplex[N-1].fx){let shouldReduce=!1;if(reflected.fx>worst.fx?(weightedSum(contracted,1+psi,centroid,-psi,worst),contracted.fx=f(contracted),contracted.fx<worst.fx?updateSimplex(contracted):shouldReduce=!0):(weightedSum(contracted,1-psi*rho,centroid,psi*rho,worst),contracted.fx=f(contracted),contracted.fx<reflected.fx?updateSimplex(contracted):shouldReduce=!0),shouldReduce){if(sigma>=1)break;for(let i=1;i<simplex.length;++i)weightedSum(simplex[i],1-sigma,simplex[0],sigma,simplex[i]),simplex[i].fx=f(simplex[i])}}else updateSimplex(reflected)}return simplex.sort(sortOrder),{fx:simplex[0].fx,x:simplex[0]}}function wolfeLineSearch(f,pk,current,next,a,c1,c2){const phi0=current.fx,phiPrime0=dot(current.fxprime,pk);let phi=phi0,phi_old=phi0,phiPrime=phiPrime0,a0=0;a=a||1,c1=c1||1e-6,c2=c2||.1;function zoom(a_lo,a_high,phi_lo){for(let iteration=0;iteration<16;++iteration)if(a=(a_lo+a_high)/2,weightedSum(next.x,1,current.x,a,pk),phi=next.fx=f(next.x,next.fxprime),phiPrime=dot(next.fxprime,pk),phi>phi0+c1*a*phiPrime0||phi>=phi_lo)a_high=a;else{if(Math.abs(phiPrime)<=-c2*phiPrime0)return a;phiPrime*(a_high-a_lo)>=0&&(a_high=a_lo),a_lo=a,phi_lo=phi}return 0}for(let iteration=0;iteration<10;++iteration){if(weightedSum(next.x,1,current.x,a,pk),phi=next.fx=f(next.x,next.fxprime),phiPrime=dot(next.fxprime,pk),phi>phi0+c1*a*phiPrime0||iteration&&phi>=phi_old)return zoom(a0,a,phi_old);if(Math.abs(phiPrime)<=-c2*phiPrime0)return a;if(phiPrime>=0)return zoom(a,a0,phi);phi_old=phi,a0=a,a*=2}return a}function conjugateGradient(f,initial,params){let current={x:initial.slice(),fx:0,fxprime:initial.slice()},next={x:initial.slice(),fx:0,fxprime:initial.slice()};const yk=initial.slice();let pk,temp,a=1,maxIterations;params=params||{},maxIterations=params.maxIterations||initial.length*20,current.fx=f(current.x,current.fxprime),pk=current.fxprime.slice(),scale(pk,current.fxprime,-1);for(let i=0;i<maxIterations;++i){if(a=wolfeLineSearch(f,pk,current,next,a),params.history&&params.history.push({x:current.x.slice(),fx:current.fx,fxprime:current.fxprime.slice(),alpha:a}),!a)scale(pk,current.fxprime,-1);else{weightedSum(yk,1,next.fxprime,-1,current.fxprime);const delta_k=dot(current.fxprime,current.fxprime),beta_k=Math.max(0,dot(yk,next.fxprime)/delta_k);weightedSum(pk,beta_k,pk,-1,next.fxprime),temp=current,current=next,next=temp}if(norm2(current.fxprime)<=1e-5)break}return params.history&&params.history.push({x:current.x.slice(),fx:current.fx,fxprime:current.fxprime.slice(),alpha:a}),current}function venn(sets,parameters={}){parameters.maxIterations=parameters.maxIterations||500;const initialLayout=parameters.initialLayout||bestInitialLayout,loss=parameters.lossFunction||lossFunction,areas=addMissingAreas(sets,parameters),circles=initialLayout(areas,parameters),setids=Object.keys(circles),initial=[];for(const setid of setids)initial.push(circles[setid].x),initial.push(circles[setid].y);const positions=nelderMead(values=>{const current={};for(let i=0;i<setids.length;++i){const setid=setids[i];current[setid]={x:values[2*i],y:values[2*i+1],radius:circles[setid].radius}}return loss(current,areas)},initial,parameters).x;for(let i=0;i<setids.length;++i){const setid=setids[i];circles[setid].x=positions[2*i],circles[setid].y=positions[2*i+1]}return circles}const SMALL=1e-10;function distanceFromIntersectArea(r1,r2,overlap){return Math.min(r1,r2)*Math.min(r1,r2)*Math.PI<=overlap+SMALL?Math.abs(r1-r2):bisect(distance2=>circleOverlap(r1,r2,distance2)-overlap,0,r1+r2)}function addMissingAreas(areas,parameters={}){const distinct=parameters.distinct,r=areas.map(s=>Object.assign({},s));function toKey(arr){return arr.join(";")}if(distinct){const count=new Map;for(const area of r)for(let i=0;i<area.sets.length;i++){const si=String(area.sets[i]);count.set(si,area.size+(count.get(si)||0));for(let j=i+1;j<area.sets.length;j++){const sj=String(area.sets[j]),k1=`${si};${sj}`,k2=`${sj};${si}`;count.set(k1,area.size+(count.get(k1)||0)),count.set(k2,area.size+(count.get(k2)||0))}}for(const area of r)area.sets.length<3&&(area.size=count.get(toKey(area.sets)))}const ids=[],pairs=new Set;for(const area of r)if(area.sets.length===1)ids.push(area.sets[0]);else if(area.sets.length===2){const a=area.sets[0],b=area.sets[1];pairs.add(toKey(area.sets)),pairs.add(toKey([b,a]))}ids.sort((a,b)=>a===b?0:a<b?-1:1);for(let i=0;i<ids.length;++i){const a=ids[i];for(let j=i+1;j<ids.length;++j){const b=ids[j];pairs.has(toKey([a,b]))||r.push({sets:[a,b],size:0})}}return r}function getDistanceMatrices(areas,sets,setids){const distances=zerosM(sets.length,sets.length),constraints=zerosM(sets.length,sets.length);return areas.filter(x=>x.sets.length===2).forEach(current=>{const left=setids[current.sets[0]],right=setids[current.sets[1]],r1=Math.sqrt(sets[left].size/Math.PI),r2=Math.sqrt(sets[right].size/Math.PI),distance2=distanceFromIntersectArea(r1,r2,current.size);distances[left][right]=distances[right][left]=distance2;let c=0;current.size+1e-10>=Math.min(sets[left].size,sets[right].size)?c=1:current.size<=1e-10&&(c=-1),constraints[left][right]=constraints[right][left]=c}),{distances,constraints}}function constrainedMDSGradient(x,fxprime,distances,constraints){for(let i=0;i<fxprime.length;++i)fxprime[i]=0;let loss=0;for(let i=0;i<distances.length;++i){const xi=x[2*i],yi=x[2*i+1];for(let j=i+1;j<distances.length;++j){const xj=x[2*j],yj=x[2*j+1],dij=distances[i][j],constraint=constraints[i][j],squaredDistance=(xj-xi)*(xj-xi)+(yj-yi)*(yj-yi),distance2=Math.sqrt(squaredDistance),delta=squaredDistance-dij*dij;constraint>0&&distance2<=dij||constraint<0&&distance2>=dij||(loss+=2*delta*delta,fxprime[2*i]+=4*delta*(xi-xj),fxprime[2*i+1]+=4*delta*(yi-yj),fxprime[2*j]+=4*delta*(xj-xi),fxprime[2*j+1]+=4*delta*(yj-yi))}}return loss}function bestInitialLayout(areas,params={}){let initial=greedyLayout(areas,params);const loss=params.lossFunction||lossFunction;if(areas.length>=8){const constrained=constrainedMDSLayout(areas,params),constrainedLoss=loss(constrained,areas),greedyLoss=loss(initial,areas);constrainedLoss+1e-8<greedyLoss&&(initial=constrained)}return initial}function constrainedMDSLayout(areas,params={}){const restarts=params.restarts||10,sets=[],setids={};for(const area of areas)area.sets.length===1&&(setids[area.sets[0]]=sets.length,sets.push(area));let{distances,constraints}=getDistanceMatrices(areas,sets,setids);const norm=norm2(distances.map(norm2))/distances.length;distances=distances.map(row=>row.map(value=>value/norm));const obj=(x,fxprime)=>constrainedMDSGradient(x,fxprime,distances,constraints);let best=null;for(let i=0;i<restarts;++i){const initial=zeros(distances.length*2).map(Math.random),current=conjugateGradient(obj,initial,params);(!best||current.fx<best.fx)&&(best=current)}const positions=best.x,circles={};for(let i=0;i<sets.length;++i){const set=sets[i];circles[set.sets[0]]={x:positions[2*i]*norm,y:positions[2*i+1]*norm,radius:Math.sqrt(set.size/Math.PI)}}if(params.history)for(const h of params.history)scale(h.x,norm);return circles}function greedyLayout(areas,params){const loss=params&&params.lossFunction?params.lossFunction:lossFunction,circles={},setOverlaps={};for(const area of areas)if(area.sets.length===1){const set=area.sets[0];circles[set]={x:1e10,y:1e10,rowid:circles.length,size:area.size,radius:Math.sqrt(area.size/Math.PI)},setOverlaps[set]=[]}areas=areas.filter(a=>a.sets.length===2);for(const current of areas){let weight=current.weight!=null?current.weight:1;const left=current.sets[0],right=current.sets[1];current.size+SMALL>=Math.min(circles[left].size,circles[right].size)&&(weight=0),setOverlaps[left].push({set:right,size:current.size,weight}),setOverlaps[right].push({set:left,size:current.size,weight})}const mostOverlapped=[];Object.keys(setOverlaps).forEach(set=>{let size=0;for(let i=0;i<setOverlaps[set].length;++i)size+=setOverlaps[set][i].size*setOverlaps[set][i].weight;mostOverlapped.push({set,size})});function sortOrder(a,b){return b.size-a.size}mostOverlapped.sort(sortOrder);const positioned={};function isPositioned(element){return element.set in positioned}function positionSet(point,index){circles[index].x=point.x,circles[index].y=point.y,positioned[index]=!0}positionSet({x:0,y:0},mostOverlapped[0].set);for(let i=1;i<mostOverlapped.length;++i){const setIndex=mostOverlapped[i].set,overlap=setOverlaps[setIndex].filter(isPositioned),set=circles[setIndex];if(overlap.sort(sortOrder),overlap.length===0)throw"ERROR: missing pairwise overlap information";const points=[];for(var j=0;j<overlap.length;++j){const p1=circles[overlap[j].set],d1=distanceFromIntersectArea(set.radius,p1.radius,overlap[j].size);points.push({x:p1.x+d1,y:p1.y}),points.push({x:p1.x-d1,y:p1.y}),points.push({y:p1.y+d1,x:p1.x}),points.push({y:p1.y-d1,x:p1.x});for(let k=j+1;k<overlap.length;++k){const p2=circles[overlap[k].set],d2=distanceFromIntersectArea(set.radius,p2.radius,overlap[k].size),extraPoints=circleCircleIntersection({x:p1.x,y:p1.y,radius:d1},{x:p2.x,y:p2.y,radius:d2});points.push(...extraPoints)}}let bestLoss=1e50,bestPoint=points[0];for(const point of points){circles[setIndex].x=point.x,circles[setIndex].y=point.y;const localLoss=loss(circles,areas);localLoss<bestLoss&&(bestLoss=localLoss,bestPoint=point)}positionSet(bestPoint,setIndex)}return circles}function lossFunction(circles,overlaps){let output=0;for(const area of overlaps){if(area.sets.length===1)continue;let overlap;if(area.sets.length===2){const left=circles[area.sets[0]],right=circles[area.sets[1]];overlap=circleOverlap(left.radius,right.radius,distance(left,right))}else overlap=intersectionArea(area.sets.map(d=>circles[d]));const weight=area.weight!=null?area.weight:1;output+=weight*(overlap-area.size)*(overlap-area.size)}return output}function logRatioLossFunction(circles,overlaps){let output=0;for(const area of overlaps){if(area.sets.length===1)continue;let overlap;if(area.sets.length===2){const left=circles[area.sets[0]],right=circles[area.sets[1]];overlap=circleOverlap(left.radius,right.radius,distance(left,right))}else overlap=intersectionArea(area.sets.map(d=>circles[d]));const weight=area.weight!=null?area.weight:1,differenceFromIdeal=Math.log((overlap+1)/(area.size+1));output+=weight*differenceFromIdeal*differenceFromIdeal}return output}function orientateCircles(circles,orientation,orientationOrder){if(orientationOrder==null?circles.sort((a,b)=>b.radius-a.radius):circles.sort(orientationOrder),circles.length>0){const largestX=circles[0].x,largestY=circles[0].y;for(const circle of circles)circle.x-=largestX,circle.y-=largestY}if(circles.length===2&&distance(circles[0],circles[1])<Math.abs(circles[1].radius-circles[0].radius)&&(circles[1].x=circles[0].x+circles[0].radius-circles[1].radius-1e-10,circles[1].y=circles[0].y),circles.length>1){const rotation=Math.atan2(circles[1].x,circles[1].y)-orientation,c=Math.cos(rotation),s=Math.sin(rotation);for(const circle of circles){const x=circle.x,y=circle.y;circle.x=c*x-s*y,circle.y=s*x+c*y}}if(circles.length>2){let angle=Math.atan2(circles[2].x,circles[2].y)-orientation;for(;angle<0;)angle+=2*Math.PI;for(;angle>2*Math.PI;)angle-=2*Math.PI;if(angle>Math.PI){const slope=circles[1].y/(1e-10+circles[1].x);for(const circle of circles){var d=(circle.x+slope*circle.y)/(1+slope*slope);circle.x=2*d-circle.x,circle.y=2*d*slope-circle.y}}}}function disjointCluster(circles){circles.forEach(circle=>{circle.parent=circle});function find(circle){return circle.parent!==circle&&(circle.parent=find(circle.parent)),circle.parent}function union(x,y){const xRoot=find(x),yRoot=find(y);xRoot.parent=yRoot}for(let i=0;i<circles.length;++i)for(let j=i+1;j<circles.length;++j){const maxDistance=circles[i].radius+circles[j].radius;distance(circles[i],circles[j])+1e-10<maxDistance&&union(circles[j],circles[i])}const disjointClusters=new Map;for(let i=0;i<circles.length;++i){const setid=find(circles[i]).parent.setid;disjointClusters.has(setid)||disjointClusters.set(setid,[]),disjointClusters.get(setid).push(circles[i])}return circles.forEach(circle=>{delete circle.parent}),Array.from(disjointClusters.values())}function getBoundingBox(circles){const minMax=d=>{const hi=circles.reduce((acc,c)=>Math.max(acc,c[d]+c.radius),Number.NEGATIVE_INFINITY),lo=circles.reduce((acc,c)=>Math.min(acc,c[d]-c.radius),Number.POSITIVE_INFINITY);return{max:hi,min:lo}};return{xRange:minMax("x"),yRange:minMax("y")}}function normalizeSolution(solution,orientation,orientationOrder){orientation==null&&(orientation=Math.PI/2);let circles=fromObjectNotation(solution).map(d=>Object.assign({},d));const clusters=disjointCluster(circles);for(const cluster of clusters){orientateCircles(cluster,orientation,orientationOrder);const bounds=getBoundingBox(cluster);cluster.size=(bounds.xRange.max-bounds.xRange.min)*(bounds.yRange.max-bounds.yRange.min),cluster.bounds=bounds}clusters.sort((a,b)=>b.size-a.size),circles=clusters[0];let returnBounds=circles.bounds;const spacing=(returnBounds.xRange.max-returnBounds.xRange.min)/50;function addCluster(cluster,right,bottom){if(!cluster)return;const bounds=cluster.bounds;let xOffset,yOffset;if(right)xOffset=returnBounds.xRange.max-bounds.xRange.min+spacing;else{xOffset=returnBounds.xRange.max-bounds.xRange.max;const centreing=(bounds.xRange.max-bounds.xRange.min)/2-(returnBounds.xRange.max-returnBounds.xRange.min)/2;centreing<0&&(xOffset+=centreing)}if(bottom)yOffset=returnBounds.yRange.max-bounds.yRange.min+spacing;else{yOffset=returnBounds.yRange.max-bounds.yRange.max;const centreing=(bounds.yRange.max-bounds.yRange.min)/2-(returnBounds.yRange.max-returnBounds.yRange.min)/2;centreing<0&&(yOffset+=centreing)}for(const c of cluster)c.x+=xOffset,c.y+=yOffset,circles.push(c)}let index=1;for(;index<clusters.length;)addCluster(clusters[index],!0,!1),addCluster(clusters[index+1],!1,!0),addCluster(clusters[index+2],!0,!0),index+=3,returnBounds=getBoundingBox(circles);return toObjectNotation(circles)}function scaleSolution(solution,width,height,padding,scaleToFit){const circles=fromObjectNotation(solution);width-=2*padding,height-=2*padding;const{xRange,yRange}=getBoundingBox(circles);if(xRange.max===xRange.min||yRange.max===yRange.min)return console.log("not scaling solution: zero size detected"),solution;let xScaling,yScaling;if(scaleToFit){const toScaleDiameter=Math.sqrt(scaleToFit/Math.PI)*2;xScaling=width/toScaleDiameter,yScaling=height/toScaleDiameter}else xScaling=width/(xRange.max-xRange.min),yScaling=height/(yRange.max-yRange.min);const scaling=Math.min(yScaling,xScaling),xOffset=(width-(xRange.max-xRange.min)*scaling)/2,yOffset=(height-(yRange.max-yRange.min)*scaling)/2;return toObjectNotation(circles.map(circle=>({radius:scaling*circle.radius,x:padding+xOffset+(circle.x-xRange.min)*scaling,y:padding+yOffset+(circle.y-yRange.min)*scaling,setid:circle.setid})))}function toObjectNotation(circles){const r={};for(const circle of circles)r[circle.setid]=circle;return r}function fromObjectNotation(solution){return Object.keys(solution).map(id=>Object.assign(solution[id],{setid:id}))}function VennDiagram(options={}){let useViewBox=!1,width=600,height=350,padding=15,duration=1e3,orientation=Math.PI/2,normalize=!0,scaleToFit=null,wrap=!0,styled=!0,fontSize=null,orientationOrder=null,distinct=!1,round=null,symmetricalTextCentre=options&&options.symmetricalTextCentre?options.symmetricalTextCentre:!1,colourMap={},colourScheme=options&&options.colourScheme?options.colourScheme:options&&options.colorScheme?options.colorScheme:["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],colourIndex=0,colours=function(key){if(key in colourMap)return colourMap[key];var ret=colourMap[key]=colourScheme[colourIndex];return colourIndex+=1,colourIndex>=colourScheme.length&&(colourIndex=0),ret},layoutFunction=venn,loss=lossFunction;function chart(selection){let data=selection.datum();const toRemove=new Set;data.forEach(datum=>{datum.size==0&&datum.sets.length==1&&toRemove.add(datum.sets[0])}),data=data.filter(datum=>!datum.sets.some(set=>toRemove.has(set)));let circles={},textCentres={};if(data.length>0){let solution=layoutFunction(data,{lossFunction:loss,distinct});normalize&&(solution=normalizeSolution(solution,orientation,orientationOrder)),circles=scaleSolution(solution,width,height,padding,scaleToFit),textCentres=computeTextCentres(circles,data,symmetricalTextCentre)}const labels={};data.forEach(datum=>{datum.label&&(labels[datum.sets]=datum.label)});function label(d){if(d.sets in labels)return labels[d.sets];if(d.sets.length==1)return""+d.sets[0]}selection.selectAll("svg").data([circles]).enter().append("svg");const svg=selection.select("svg");useViewBox?svg.attr("viewBox",`0 0 ${width} ${height}`):svg.attr("width",width).attr("height",height);const previous={};let hasPrevious=!1;svg.selectAll(".venn-area path").each(function(d){const path=this.getAttribute("d");d.sets.length==1&&path&&!distinct&&(hasPrevious=!0,previous[d.sets[0]]=circleFromPath(path))});function pathTween(d){return t=>{const c=d.sets.map(set=>{let start=previous[set],end=circles[set];return start||(start={x:width/2,y:height/2,radius:1}),end||(end={x:width/2,y:height/2,radius:1}),{x:start.x*(1-t)+end.x*t,y:start.y*(1-t)+end.y*t,radius:start.radius*(1-t)+end.radius*t}});return intersectionAreaPath(c,round)}}const nodes=svg.selectAll(".venn-area").data(data,d=>d.sets),enter=nodes.enter().append("g").attr("class",d=>`venn-area venn-${d.sets.length==1?"circle":"intersection"}${d.colour||d.color?" venn-coloured":""}`).attr("data-venn-sets",d=>d.sets.join("_")),enterPath=enter.append("path"),enterText=enter.append("text").attr("class","label").text(d=>label(d)).attr("text-anchor","middle").attr("dy",".35em").attr("x",width/2).attr("y",height/2);styled&&(enterPath.style("fill-opacity","0").filter(d=>d.sets.length==1).style("fill",d=>d.colour?d.colour:d.color?d.color:colours(d.sets)).style("fill-opacity",".25"),enterText.style("fill",d=>d.colour||d.color?"#FFF":options.textFill?options.textFill:d.sets.length==1?colours(d.sets):"#444"));function asTransition(s){return typeof s.transition=="function"?s.transition("venn").duration(duration):s}let update=selection;hasPrevious&&typeof update.transition=="function"?(update=asTransition(selection),update.selectAll("path").attrTween("d",pathTween)):update.selectAll("path").attr("d",d=>intersectionAreaPath(d.sets.map(set=>circles[set])),round);const updateText=update.selectAll("text").filter(d=>d.sets in textCentres).text(d=>label(d)).attr("x",d=>Math.floor(textCentres[d.sets].x)).attr("y",d=>Math.floor(textCentres[d.sets].y));wrap&&(hasPrevious?"on"in updateText?updateText.on("end",wrapText(circles,label)):updateText.each("end",wrapText(circles,label)):updateText.each(wrapText(circles,label)));const exit=asTransition(nodes.exit()).remove();typeof nodes.transition=="function"&&exit.selectAll("path").attrTween("d",pathTween);const exitText=exit.selectAll("text").attr("x",width/2).attr("y",height/2);return fontSize!==null&&(enterText.style("font-size","0px"),updateText.style("font-size",fontSize),exitText.style("font-size","0px")),{circles,textCentres,nodes,enter,update,exit}}return chart.wrap=function(_){return arguments.length?(wrap=_,chart):wrap},chart.useViewBox=function(){return useViewBox=!0,chart},chart.width=function(_){return arguments.length?(width=_,chart):width},chart.height=function(_){return arguments.length?(height=_,chart):height},chart.padding=function(_){return arguments.length?(padding=_,chart):padding},chart.distinct=function(_){return arguments.length?(distinct=_,chart):distinct},chart.colours=function(_){return arguments.length?(colours=_,chart):colours},chart.colors=function(_){return arguments.length?(colours=_,chart):colours},chart.fontSize=function(_){return arguments.length?(fontSize=_,chart):fontSize},chart.round=function(_){return arguments.length?(round=_,chart):round},chart.duration=function(_){return arguments.length?(duration=_,chart):duration},chart.layoutFunction=function(_){return arguments.length?(layoutFunction=_,chart):layoutFunction},chart.normalize=function(_){return arguments.length?(normalize=_,chart):normalize},chart.scaleToFit=function(_){return arguments.length?(scaleToFit=_,chart):scaleToFit},chart.styled=function(_){return arguments.length?(styled=_,chart):styled},chart.orientation=function(_){return arguments.length?(orientation=_,chart):orientation},chart.orientationOrder=function(_){return arguments.length?(orientationOrder=_,chart):orientationOrder},chart.lossFunction=function(_){return arguments.length?(loss=_==="default"?lossFunction:_==="logRatio"?logRatioLossFunction:_,chart):loss},chart}function wrapText(circles,labeller){return function(data){const text=this,width=circles[data.sets[0]].radius||50,label=labeller(data)||"",words=label.split(/\s+/).reverse(),minChars=(label.length+words.length)/3;let word=words.pop(),line=[word],lineNumber=0;const lineHeight=1.1;text.textContent=null;const tspans=[];function append(word2){const tspan2=text.ownerDocument.createElementNS(text.namespaceURI,"tspan");return tspan2.textContent=word2,tspans.push(tspan2),text.append(tspan2),tspan2}let tspan=append(word);for(;word=words.pop(),!!word;){line.push(word);const joined=line.join(" ");tspan.textContent=joined,joined.length>minChars&&tspan.getComputedTextLength()>width&&(line.pop(),tspan.textContent=line.join(" "),line=[word],tspan=append(word),lineNumber++)}const initial=.35-lineNumber*lineHeight/2,x=text.getAttribute("x"),y=text.getAttribute("y");tspans.forEach((t,i)=>{t.setAttribute("x",x),t.setAttribute("y",y),t.setAttribute("dy",`${initial+i*lineHeight}em`)})}}function circleMargin(current,interior,exterior){let margin=interior[0].radius-distance(interior[0],current);for(let i=1;i<interior.length;++i){const m=interior[i].radius-distance(interior[i],current);m<=margin&&(margin=m)}for(let i=0;i<exterior.length;++i){const m=distance(exterior[i],current)-exterior[i].radius;m<=margin&&(margin=m)}return margin}function computeTextCentre(interior,exterior,symmetricalTextCentre){const points=[];for(const c of interior)points.push({x:c.x,y:c.y}),points.push({x:c.x+c.radius/2,y:c.y}),points.push({x:c.x-c.radius/2,y:c.y}),points.push({x:c.x,y:c.y+c.radius/2}),points.push({x:c.x,y:c.y-c.radius/2});let initial=points[0],margin=circleMargin(points[0],interior,exterior);for(let i=1;i<points.length;++i){const m=circleMargin(points[i],interior,exterior);m>=margin&&(initial=points[i],margin=m)}const solution=nelderMead(p=>-1*circleMargin({x:p[0],y:p[1]},interior,exterior),[initial.x,initial.y],{maxIterations:500,minErrorDelta:1e-10}).x,ret={x:symmetricalTextCentre?0:solution[0],y:solution[1]};let valid=!0;for(const i of interior)if(distance(ret,i)>i.radius){valid=!1;break}for(const e of exterior)if(distance(ret,e)<e.radius){valid=!1;break}if(valid)return ret;if(interior.length==1)return{x:interior[0].x,y:interior[0].y};const areaStats={};return intersectionArea(interior,areaStats),areaStats.arcs.length===0?{x:0,y:-1e3,disjoint:!0}:areaStats.arcs.length==1?{x:areaStats.arcs[0].circle.x,y:areaStats.arcs[0].circle.y}:exterior.length?computeTextCentre(interior,[]):getCenter(areaStats.arcs.map(a=>a.p1))}function getOverlappingCircles(circles){const ret={},circleids=Object.keys(circles);for(const circleid of circleids)ret[circleid]=[];for(let i=0;i<circleids.length;i++){const ci=circleids[i],a=circles[ci];for(let j=i+1;j<circleids.length;++j){const cj=circleids[j],b=circles[cj],d=distance(a,b);d+b.radius<=a.radius+1e-10?ret[cj].push(ci):d+a.radius<=b.radius+1e-10&&ret[ci].push(cj)}}return ret}function computeTextCentres(circles,areas,symmetricalTextCentre){const ret={},overlapped=getOverlappingCircles(circles);for(let i=0;i<areas.length;++i){const area=areas[i].sets,areaids={},exclude={};for(let j=0;j<area.length;++j){areaids[area[j]]=!0;const overlaps=overlapped[area[j]];for(let k=0;k<overlaps.length;++k)exclude[overlaps[k]]=!0}const interior=[],exterior=[];for(let setid in circles)setid in areaids?interior.push(circles[setid]):setid in exclude||exterior.push(circles[setid]);const centre=computeTextCentre(interior,exterior,symmetricalTextCentre);ret[area]=centre,centre.disjoint&&areas[i].size>0&&console.log("WARNING: area "+area+" not represented on screen")}return ret}function circlePath(x,y,r){const ret=[];return ret.push(`
2
+ M`,x,y),ret.push(`
3
+ m`,-r,0),ret.push(`
4
+ a`,r,r,0,1,0,r*2,0),ret.push(`
5
+ a`,r,r,0,1,0,-r*2,0),ret.join(" ")}function circleFromPath(path){const tokens=path.split(" ");return{x:Number.parseFloat(tokens[1]),y:Number.parseFloat(tokens[2]),radius:-Number.parseFloat(tokens[4])}}function intersectionAreaArcs(circles){if(circles.length===0)return[];const stats={};return intersectionArea(circles,stats),stats.arcs}function arcsToPath(arcs,round){if(arcs.length===0)return"M 0 0";const rFactor=Math.pow(10,round||0),r=round!=null?v=>Math.round(v*rFactor)/rFactor:v=>v;if(arcs.length==1){const circle=arcs[0].circle;return circlePath(r(circle.x),r(circle.y),r(circle.radius))}const ret=[`
6
+ M`,r(arcs[0].p2.x),r(arcs[0].p2.y)];for(const arc of arcs){const radius=r(arc.circle.radius);ret.push(`
7
+ A`,radius,radius,0,arc.large?1:0,arc.sweep?1:0,r(arc.p1.x),r(arc.p1.y))}return ret.join(" ")}function intersectionAreaPath(circles,round){return arcsToPath(intersectionAreaArcs(circles),round)}function layout(data,options={}){const{lossFunction:loss,layoutFunction:layout2=venn,normalize=!0,orientation=Math.PI/2,orientationOrder,width=600,height=350,padding=15,scaleToFit=!1,symmetricalTextCentre=!1,distinct,round=2}=options;let solution=layout2(data,{lossFunction:loss==="default"||!loss?lossFunction:loss==="logRatio"?logRatioLossFunction:loss,distinct});normalize&&(solution=normalizeSolution(solution,orientation,orientationOrder));const circles=scaleSolution(solution,width,height,padding,scaleToFit),textCentres=computeTextCentres(circles,data,symmetricalTextCentre),circleLookup=new Map(Object.keys(circles).map(set=>[set,{set,x:circles[set].x,y:circles[set].y,radius:circles[set].radius}])),helpers=data.map(area=>{const circles2=area.sets.map(s=>circleLookup.get(s)),arcs=intersectionAreaArcs(circles2),path=arcsToPath(arcs,round);return{circles:circles2,arcs,path,area,has:new Set(area.sets)}});function genDistinctPath(sets){let r="";for(const e of helpers)e.has.size>sets.length&&sets.every(s=>e.has.has(s))&&(r+=" "+e.path);return r}return helpers.map(({circles:circles2,arcs,path,area})=>({data:area,text:textCentres[area.sets],circles:circles2,arcs,path,distinctPath:path+genDistinctPath(area.sets)}))}var parser=(function(){var o=__name(function(k,v,o2,l){for(o2=o2||{},l=k.length;l--;o2[k[l]]=v);return o2},"o"),$V0=[5,8],$V1=[7,8,11,12,17,19,22,24],$V2=[1,17],$V3=[1,18],$V4=[7,8,11,12,14,15,16,17,19,20,21,22,24,27],$V5=[1,31],$V6=[1,39],$V7=[7,8,11,12,17,19,22,24,27],$V8=[1,57],$V9=[1,56],$Va=[1,58],$Vb=[1,59],$Vc=[1,60],$Vd=[7,8,11,12,16,17,19,20,22,24,27,31,32,33],parser2={trace:__name(function(){},"trace"),yy:{},symbols_:{error:2,start:3,optNewlines:4,VENN:5,document:6,EOF:7,NEWLINE:8,line:9,statement:10,TITLE:11,SET:12,identifier:13,BRACKET_LABEL:14,COLON:15,NUMERIC:16,UNION:17,identifierList:18,TEXT:19,IDENTIFIER:20,STRING:21,INDENT_TEXT:22,indentedTextTail:23,STYLE:24,stylesOpt:25,styleField:26,COMMA:27,styleValue:28,valueTokens:29,valueToken:30,HEXCOLOR:31,RGBCOLOR:32,RGBACOLOR:33,$accept:0,$end:1},terminals_:{2:"error",5:"VENN",7:"EOF",8:"NEWLINE",11:"TITLE",12:"SET",14:"BRACKET_LABEL",15:"COLON",16:"NUMERIC",17:"UNION",19:"TEXT",20:"IDENTIFIER",21:"STRING",22:"INDENT_TEXT",24:"STYLE",27:"COMMA",31:"HEXCOLOR",32:"RGBCOLOR",33:"RGBACOLOR"},productions_:[0,[3,4],[4,0],[4,2],[6,0],[6,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,5],[10,2],[10,3],[10,4],[10,5],[10,3],[10,3],[10,3],[10,4],[10,4],[10,2],[10,3],[23,1],[23,1],[23,1],[23,2],[23,2],[25,1],[25,3],[26,3],[28,1],[28,1],[29,1],[29,2],[30,1],[30,1],[30,1],[30,1],[30,1],[18,1],[18,3],[13,1],[13,1]],performAction:__name(function(yytext,yyleng,yylineno,yy,yystate,$$,_$){var $0=$$.length-1;switch(yystate){case 1:return $$[$0-1];case 2:case 3:case 4:this.$=[];break;case 5:$$[$0-1].push($$[$0]),this.$=$$[$0-1];break;case 6:this.$=[];break;case 7:case 22:case 32:case 36:case 37:case 38:case 39:case 40:this.$=$$[$0];break;case 8:yy.setDiagramTitle($$[$0].substr(6)),this.$=$$[$0].substr(6);break;case 9:yy.addSubsetData([$$[$0]],void 0,void 0),yy.setIndentMode&&yy.setIndentMode(!0);break;case 10:yy.addSubsetData([$$[$0-1]],$$[$0],void 0),yy.setIndentMode&&yy.setIndentMode(!0);break;case 11:yy.addSubsetData([$$[$0-2]],void 0,parseFloat($$[$0])),yy.setIndentMode&&yy.setIndentMode(!0);break;case 12:yy.addSubsetData([$$[$0-3]],$$[$0-2],parseFloat($$[$0])),yy.setIndentMode&&yy.setIndentMode(!0);break;case 13:if($$[$0].length<2)throw new Error("union requires multiple identifiers");yy.validateUnionIdentifiers&&yy.validateUnionIdentifiers($$[$0]),yy.addSubsetData($$[$0],void 0,void 0),yy.setIndentMode&&yy.setIndentMode(!0);break;case 14:if($$[$0-1].length<2)throw new Error("union requires multiple identifiers");yy.validateUnionIdentifiers&&yy.validateUnionIdentifiers($$[$0-1]),yy.addSubsetData($$[$0-1],$$[$0],void 0),yy.setIndentMode&&yy.setIndentMode(!0);break;case 15:if($$[$0-2].length<2)throw new Error("union requires multiple identifiers");yy.validateUnionIdentifiers&&yy.validateUnionIdentifiers($$[$0-2]),yy.addSubsetData($$[$0-2],void 0,parseFloat($$[$0])),yy.setIndentMode&&yy.setIndentMode(!0);break;case 16:if($$[$0-3].length<2)throw new Error("union requires multiple identifiers");yy.validateUnionIdentifiers&&yy.validateUnionIdentifiers($$[$0-3]),yy.addSubsetData($$[$0-3],$$[$0-2],parseFloat($$[$0])),yy.setIndentMode&&yy.setIndentMode(!0);break;case 17:case 18:case 19:yy.addTextData($$[$0-1],$$[$0],void 0);break;case 20:case 21:yy.addTextData($$[$0-2],$$[$0-1],$$[$0]);break;case 23:yy.addStyleData($$[$0-1],$$[$0]);break;case 24:case 25:case 26:var cs=yy.getCurrentSets();if(!cs)throw new Error("text requires set");yy.addTextData(cs,$$[$0],void 0);break;case 27:case 28:var cs=yy.getCurrentSets();if(!cs)throw new Error("text requires set");yy.addTextData(cs,$$[$0-1],$$[$0]);break;case 29:case 41:this.$=[$$[$0]];break;case 30:case 42:this.$=[...$$[$0-2],$$[$0]];break;case 31:this.$=[$$[$0-2],$$[$0]];break;case 33:this.$=$$[$0].join(" ");break;case 34:this.$=[$$[$0]];break;case 35:$$[$0-1].push($$[$0]),this.$=$$[$0-1];break;case 43:case 44:this.$=$$[$0];break}},"anonymous"),table:[o($V0,[2,2],{3:1,4:2}),{1:[3]},{5:[1,3],8:[1,4]},o($V1,[2,4],{6:5}),o($V0,[2,3]),{7:[1,6],8:[1,8],9:7,10:9,11:[1,10],12:[1,11],17:[1,12],19:[1,13],22:[1,14],24:[1,15]},{1:[2,1]},o($V1,[2,5]),o($V1,[2,6]),o($V1,[2,7]),o($V1,[2,8]),{13:16,20:$V2,21:$V3},{13:20,18:19,20:$V2,21:$V3},{13:20,18:21,20:$V2,21:$V3},{16:[1,25],20:[1,23],21:[1,24],23:22},{13:20,18:26,20:$V2,21:$V3},o($V1,[2,9],{14:[1,27],15:[1,28]}),o($V4,[2,43]),o($V4,[2,44]),o($V1,[2,13],{14:[1,29],15:[1,30],27:$V5}),o($V4,[2,41]),{16:[1,34],20:[1,32],21:[1,33],27:$V5},o($V1,[2,22]),o($V1,[2,24],{14:[1,35]}),o($V1,[2,25],{14:[1,36]}),o($V1,[2,26]),{20:$V6,25:37,26:38,27:$V5},o($V1,[2,10],{15:[1,40]}),{16:[1,41]},o($V1,[2,14],{15:[1,42]}),{16:[1,43]},{13:44,20:$V2,21:$V3},o($V1,[2,17],{14:[1,45]}),o($V1,[2,18],{14:[1,46]}),o($V1,[2,19]),o($V1,[2,27]),o($V1,[2,28]),o($V1,[2,23],{27:[1,47]}),o($V7,[2,29]),{15:[1,48]},{16:[1,49]},o($V1,[2,11]),{16:[1,50]},o($V1,[2,15]),o($V4,[2,42]),o($V1,[2,20]),o($V1,[2,21]),{20:$V6,26:51},{16:$V8,20:$V9,21:[1,53],28:52,29:54,30:55,31:$Va,32:$Vb,33:$Vc},o($V1,[2,12]),o($V1,[2,16]),o($V7,[2,30]),o($V7,[2,31]),o($V7,[2,32]),o($V7,[2,33],{30:61,16:$V8,20:$V9,31:$Va,32:$Vb,33:$Vc}),o($Vd,[2,34]),o($Vd,[2,36]),o($Vd,[2,37]),o($Vd,[2,38]),o($Vd,[2,39]),o($Vd,[2,40]),o($Vd,[2,35])],defaultActions:{6:[2,1]},parseError:__name(function(str,hash){if(hash.recoverable)this.trace(str);else{var error=new Error(str);throw error.hash=hash,error}},"parseError"),parse:__name(function(input){var self=this,stack=[0],tstack=[],vstack=[null],lstack=[],table=this.table,yytext="",yylineno=0,yyleng=0,TERROR=2,EOF=1,args=lstack.slice.call(arguments,1),lexer2=Object.create(this.lexer),sharedState={yy:{}};for(var k in this.yy)Object.prototype.hasOwnProperty.call(this.yy,k)&&(sharedState.yy[k]=this.yy[k]);lexer2.setInput(input,sharedState.yy),sharedState.yy.lexer=lexer2,sharedState.yy.parser=this,typeof lexer2.yylloc>"u"&&(lexer2.yylloc={});var yyloc=lexer2.yylloc;lstack.push(yyloc);var ranges=lexer2.options&&lexer2.options.ranges;typeof sharedState.yy.parseError=="function"?this.parseError=sharedState.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function popStack(n){stack.length=stack.length-2*n,vstack.length=vstack.length-n,lstack.length=lstack.length-n}__name(popStack,"popStack");function lex(){var token;return token=tstack.pop()||lexer2.lex()||EOF,typeof token!="number"&&(token instanceof Array&&(tstack=token,token=tstack.pop()),token=self.symbols_[token]||token),token}__name(lex,"lex");for(var symbol,state,action,r,yyval={},p,len,newState,expected;;){if(state=stack[stack.length-1],this.defaultActions[state]?action=this.defaultActions[state]:((symbol===null||typeof symbol>"u")&&(symbol=lex()),action=table[state]&&table[state][symbol]),typeof action>"u"||!action.length||!action[0]){var errStr="";expected=[];for(p in table[state])this.terminals_[p]&&p>TERROR&&expected.push("'"+this.terminals_[p]+"'");lexer2.showPosition?errStr="Parse error on line "+(yylineno+1)+`:
8
+ `+lexer2.showPosition()+`
9
+ Expecting `+expected.join(", ")+", got '"+(this.terminals_[symbol]||symbol)+"'":errStr="Parse error on line "+(yylineno+1)+": Unexpected "+(symbol==EOF?"end of input":"'"+(this.terminals_[symbol]||symbol)+"'"),this.parseError(errStr,{text:lexer2.match,token:this.terminals_[symbol]||symbol,line:lexer2.yylineno,loc:yyloc,expected})}if(action[0]instanceof Array&&action.length>1)throw new Error("Parse Error: multiple actions possible at state: "+state+", token: "+symbol);switch(action[0]){case 1:stack.push(symbol),vstack.push(lexer2.yytext),lstack.push(lexer2.yylloc),stack.push(action[1]),symbol=null,yyleng=lexer2.yyleng,yytext=lexer2.yytext,yylineno=lexer2.yylineno,yyloc=lexer2.yylloc;break;case 2:if(len=this.productions_[action[1]][1],yyval.$=vstack[vstack.length-len],yyval._$={first_line:lstack[lstack.length-(len||1)].first_line,last_line:lstack[lstack.length-1].last_line,first_column:lstack[lstack.length-(len||1)].first_column,last_column:lstack[lstack.length-1].last_column},ranges&&(yyval._$.range=[lstack[lstack.length-(len||1)].range[0],lstack[lstack.length-1].range[1]]),r=this.performAction.apply(yyval,[yytext,yyleng,yylineno,sharedState.yy,action[1],vstack,lstack].concat(args)),typeof r<"u")return r;len&&(stack=stack.slice(0,-1*len*2),vstack=vstack.slice(0,-1*len),lstack=lstack.slice(0,-1*len)),stack.push(this.productions_[action[1]][0]),vstack.push(yyval.$),lstack.push(yyval._$),newState=table[stack[stack.length-2]][stack[stack.length-1]],stack.push(newState);break;case 3:return!0}}return!0},"parse")},lexer=(function(){var lexer2={EOF:1,parseError:__name(function(str,hash){if(this.yy.parser)this.yy.parser.parseError(str,hash);else throw new Error(str)},"parseError"),setInput:__name(function(input,yy){return this.yy=yy||this.yy||{},this._input=input,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:__name(function(){var ch=this._input[0];this.yytext+=ch,this.yyleng++,this.offset++,this.match+=ch,this.matched+=ch;var lines=ch.match(/(?:\r\n?|\n).*/g);return lines?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),ch},"input"),unput:__name(function(ch){var len=ch.length,lines=ch.split(/(?:\r\n?|\n)/g);this._input=ch+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-len),this.offset-=len;var oldLines=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),lines.length-1&&(this.yylineno-=lines.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:lines?(lines.length===oldLines.length?this.yylloc.first_column:0)+oldLines[oldLines.length-lines.length].length-lines[0].length:this.yylloc.first_column-len},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-len]),this.yyleng=this.yytext.length,this},"unput"),more:__name(function(){return this._more=!0,this},"more"),reject:__name(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
10
+ `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:__name(function(n){this.unput(this.match.slice(n))},"less"),pastInput:__name(function(){var past=this.matched.substr(0,this.matched.length-this.match.length);return(past.length>20?"...":"")+past.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:__name(function(){var next=this.match;return next.length<20&&(next+=this._input.substr(0,20-next.length)),(next.substr(0,20)+(next.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:__name(function(){var pre=this.pastInput(),c=new Array(pre.length+1).join("-");return pre+this.upcomingInput()+`
11
+ `+c+"^"},"showPosition"),test_match:__name(function(match,indexed_rule){var token,lines,backup;if(this.options.backtrack_lexer&&(backup={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(backup.yylloc.range=this.yylloc.range.slice(0))),lines=match[0].match(/(?:\r\n?|\n).*/g),lines&&(this.yylineno+=lines.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lines?lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+match[0].length},this.yytext+=match[0],this.match+=match[0],this.matches=match,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(match[0].length),this.matched+=match[0],token=this.performAction.call(this,this.yy,this,indexed_rule,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),token)return token;if(this._backtrack){for(var k in backup)this[k]=backup[k];return!1}return!1},"test_match"),next:__name(function(){if(this.done)return this.EOF;this._input||(this.done=!0);var token,match,tempMatch,index;this._more||(this.yytext="",this.match="");for(var rules=this._currentRules(),i=0;i<rules.length;i++)if(tempMatch=this._input.match(this.rules[rules[i]]),tempMatch&&(!match||tempMatch[0].length>match[0].length)){if(match=tempMatch,index=i,this.options.backtrack_lexer){if(token=this.test_match(tempMatch,rules[i]),token!==!1)return token;if(this._backtrack){match=!1;continue}else return!1}else if(!this.options.flex)break}return match?(token=this.test_match(match,rules[index]),token!==!1?token:!1):this._input===""?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+`. Unrecognized text.
12
+ `+this.showPosition(),{text:"",token:null,line:this.yylineno})},"next"),lex:__name(function(){var r=this.next();return r||this.lex()},"lex"),begin:__name(function(condition){this.conditionStack.push(condition)},"begin"),popState:__name(function(){var n=this.conditionStack.length-1;return n>0?this.conditionStack.pop():this.conditionStack[0]},"popState"),_currentRules:__name(function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},"_currentRules"),topState:__name(function(n){return n=this.conditionStack.length-1-Math.abs(n||0),n>=0?this.conditionStack[n]:"INITIAL"},"topState"),pushState:__name(function(condition){this.begin(condition)},"pushState"),stateStackSize:__name(function(){return this.conditionStack.length},"stateStackSize"),options:{"case-insensitive":!0},performAction:__name(function(yy,yy_,$avoiding_name_collisions,YY_START){switch($avoiding_name_collisions){case 0:break;case 1:break;case 2:break;case 3:if(yy.getIndentMode&&yy.getIndentMode())return yy.consumeIndentText=!0,this.begin("INITIAL"),22;break;case 4:break;case 5:yy.setIndentMode&&yy.setIndentMode(!1),this.begin("INITIAL"),this.unput(yy_.yytext);break;case 6:return this.begin("bol"),8;case 7:break;case 8:break;case 9:return 7;case 10:return 11;case 11:return 5;case 12:return 12;case 13:return 17;case 14:if(yy.consumeIndentText)yy.consumeIndentText=!1;else return 19;break;case 15:return 24;case 16:return yy_.yytext=yy_.yytext.slice(2,-2),14;case 17:return yy_.yytext=yy_.yytext.slice(1,-1).trim(),14;case 18:return 16;case 19:return 31;case 20:return 33;case 21:return 32;case 22:return 20;case 23:return 21;case 24:return 27;case 25:return 15}},"anonymous"),rules:[/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[ \t]+(?=[\n\r]))/i,/^(?:[ \t]+(?=text\b))/i,/^(?:[ \t]+)/i,/^(?:[^ \t\n\r])/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[ \t]+)/i,/^(?:$)/i,/^(?:title\s[^#\n;]+)/i,/^(?:venn-beta\b)/i,/^(?:set\b)/i,/^(?:union\b)/i,/^(?:text\b)/i,/^(?:style\b)/i,/^(?:\["[^\"]*"\])/i,/^(?:\[[^\]\"]+\])/i,/^(?:[+-]?(\d+(\.\d+)?|\.\d+))/i,/^(?:#[0-9a-fA-F]{3,8})/i,/^(?:rgba\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:rgb\(\s*[0-9.]+\s*[,]\s*[0-9.]+\s*[,]\s*[0-9.]+\s*\))/i,/^(?:[A-Za-z_][A-Za-z0-9\-_]*)/i,/^(?:"[^\"]*")/i,/^(?:,)/i,/^(?::)/i],conditions:{bol:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0},INITIAL:{rules:[0,1,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],inclusive:!0}}};return lexer2})();parser2.lexer=lexer;function Parser(){this.yy={}}return __name(Parser,"Parser"),Parser.prototype=parser2,parser2.Parser=Parser,new Parser})();parser.parser=parser;var venn_default=parser,subsets=[],textNodes=[],styleEntries=[],knownSets=new Set,currentSets,indentMode=!1,addSubsetData=__name((identifierList,label,size)=>{const sets=normalizeIdentifierList(identifierList).sort(),resolvedSize=size??10/Math.pow(identifierList.length,2);currentSets=sets,sets.length===1&&knownSets.add(sets[0]),subsets.push({sets,size:resolvedSize,label:label?normalizeText(label):void 0})},"addSubsetData"),getSubsetData=__name(()=>subsets,"getSubsetData"),normalizeText=__name(text=>{const trimmed=text.trim();return trimmed.length>=2&&trimmed.startsWith('"')&&trimmed.endsWith('"')?trimmed.slice(1,-1):trimmed},"normalizeText"),normalizeStyleValue=__name(value=>value&&normalizeText(value),"normalizeStyleValue"),addTextData=__name((identifierList,id,label)=>{const normalizedId=normalizeText(id);textNodes.push({sets:normalizeIdentifierList(identifierList).sort(),id:normalizedId,label:label?normalizeText(label):void 0})},"addTextData"),addStyleData=__name((identifierList,data)=>{const targets=normalizeIdentifierList(identifierList).sort(),styles={};for(const[key,value]of data)styles[key]=normalizeStyleValue(value)??value;styleEntries.push({targets,styles})},"addStyleData"),getStyleData=__name(()=>styleEntries,"getStyleData"),normalizeIdentifierList=__name(identifierList=>identifierList.map(identifier=>normalizeText(identifier)),"normalizeIdentifierList"),validateUnionIdentifiers=__name(identifierList=>{const unknown=normalizeIdentifierList(identifierList).filter(identifier=>!knownSets.has(identifier));if(unknown.length>0)throw new Error(`unknown set identifier: ${unknown.join(", ")}`)},"validateUnionIdentifiers"),getTextData=__name(()=>textNodes,"getTextData"),getCurrentSets=__name(()=>currentSets,"getCurrentSets"),getIndentMode=__name(()=>indentMode,"getIndentMode"),setIndentMode=__name(enabled=>{indentMode=enabled},"setIndentMode"),DEFAULT_VENN_CONFIG=defaultConfig_default.venn;function getConfig2(){return cleanAndMerge(DEFAULT_VENN_CONFIG,getConfig().venn)}__name(getConfig2,"getConfig");var customClear=__name(()=>{clear(),subsets.length=0,textNodes.length=0,styleEntries.length=0,knownSets.clear(),currentSets=void 0,indentMode=!1},"customClear"),db={getConfig:getConfig2,clear:customClear,setAccTitle,getAccTitle,setDiagramTitle,getDiagramTitle,getAccDescription,setAccDescription,addSubsetData,getSubsetData,addTextData,addStyleData,validateUnionIdentifiers,getTextData,getStyleData,getCurrentSets,getIndentMode,setIndentMode},getStyles=__name(options=>`
13
+ .venn-title {
14
+ font-size: 32px;
15
+ fill: ${options.vennTitleTextColor};
16
+ font-family: ${options.fontFamily};
17
+ }
18
+
19
+ .venn-circle text {
20
+ font-size: 48px;
21
+ font-family: ${options.fontFamily};
22
+ }
23
+
24
+ .venn-intersection text {
25
+ font-size: 48px;
26
+ fill: ${options.vennSetTextColor};
27
+ font-family: ${options.fontFamily};
28
+ }
29
+
30
+ .venn-text-node {
31
+ font-family: ${options.fontFamily};
32
+ color: ${options.vennSetTextColor};
33
+ }
34
+ `,"getStyles"),styles_default=getStyles;function buildStyleByKey(styleData){const map=new Map;for(const entry of styleData){const key=entry.targets.join("|"),existing=map.get(key);existing?Object.assign(existing,entry.styles):map.set(key,{...entry.styles})}return map}__name(buildStyleByKey,"buildStyleByKey");var draw=__name((_text,id,_version,diagObj)=>{var _a,_b,_c;const db2=diagObj.db,config=(_a=db2.getConfig)==null?void 0:_a.call(db2),{themeVariables,look,handDrawnSeed}=getConfig(),isHandDrawn=look==="handDrawn",themeColors=[themeVariables.venn1,themeVariables.venn2,themeVariables.venn3,themeVariables.venn4,themeVariables.venn5,themeVariables.venn6,themeVariables.venn7,themeVariables.venn8].filter(Boolean),title=(_b=db2.getDiagramTitle)==null?void 0:_b.call(db2),sets=db2.getSubsetData(),textNodes2=db2.getTextData(),styleByKey=buildStyleByKey(db2.getStyleData()),svgWidth=(config==null?void 0:config.width)??800,svgHeight=(config==null?void 0:config.height)??450,scale2=svgWidth/1600,titleHeight=title?48*scale2:0,defaultTextColor=themeVariables.primaryTextColor??themeVariables.textColor,svg=selectSvgElement(id);svg.attr("viewBox",`0 0 ${svgWidth} ${svgHeight}`),title&&svg.append("text").text(title).attr("class","venn-title").attr("font-size",`${32*scale2}px`).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("x","50%").attr("y",32*scale2).style("fill",themeVariables.vennTitleTextColor||themeVariables.titleColor);const dummyD3root=select(document.createElement("div")),vennDiagram=VennDiagram().width(svgWidth).height(svgHeight-titleHeight);dummyD3root.datum(sets).call(vennDiagram);const roughSvg=isHandDrawn?at.svg(dummyD3root.select("svg").node()):void 0,layoutAreas=layout(sets,{width:svgWidth,height:svgHeight-titleHeight,padding:(config==null?void 0:config.padding)??15}),layoutByKey=new Map;for(const area of layoutAreas){const key=stableSetsKey([...area.data.sets].sort());layoutByKey.set(key,area)}textNodes2.length>0&&renderTextNodes(config,layoutByKey,dummyD3root,textNodes2,scale2,styleByKey);const themeDark=isDark(themeVariables.background||"#f4f4f4");dummyD3root.selectAll(".venn-circle").each(function(d,i){var _a2;const group=select(this),setsKey=stableSetsKey([...d.sets].sort()),customStyle=styleByKey.get(setsKey),baseColor=(customStyle==null?void 0:customStyle.fill)||themeColors[i%themeColors.length]||themeVariables.primaryColor;group.classed(`venn-set-${i%8}`,!0);const fillOpacity=(customStyle==null?void 0:customStyle["fill-opacity"])??.1,strokeColor=(customStyle==null?void 0:customStyle.stroke)||baseColor,strokeWidthVal=(customStyle==null?void 0:customStyle["stroke-width"])||`${5*scale2}`;if(isHandDrawn&&roughSvg){const layoutArea=layoutByKey.get(setsKey);if(layoutArea&&layoutArea.circles.length>0){const c=layoutArea.circles[0],roughNode=roughSvg.circle(c.x,c.y,c.radius*2,{roughness:.7,seed:handDrawnSeed,fill:transparentize(baseColor,.7),fillStyle:"hachure",fillWeight:2,hachureGap:8,hachureAngle:-41+i*60,stroke:strokeColor,strokeWidth:parseFloat(String(strokeWidthVal))});group.select("path").remove(),(_a2=group.node())==null||_a2.insertBefore(roughNode,group.select("text").node())}}else group.select("path").style("fill",baseColor).style("fill-opacity",fillOpacity).style("stroke",strokeColor).style("stroke-width",strokeWidthVal).style("stroke-opacity",.95);const textColor=(customStyle==null?void 0:customStyle.color)||(themeDark?lighten(baseColor,30):darken(baseColor,30));group.select("text").style("font-size",`${48*scale2}px`).style("fill",textColor)}),isHandDrawn&&roughSvg?dummyD3root.selectAll(".venn-intersection").each(function(d){var _a2;const group=select(this),setsKey=stableSetsKey([...d.sets].sort()),customStyle=styleByKey.get(setsKey),customFill=customStyle==null?void 0:customStyle.fill;if(customFill){const pathEl=group.select("path"),pathD=pathEl.attr("d");if(pathD){const roughNode=roughSvg.path(pathD,{roughness:.7,seed:handDrawnSeed,fill:transparentize(customFill,.3),fillStyle:"cross-hatch",fillWeight:2,hachureGap:6,hachureAngle:60,stroke:"none"}),existingPath=pathEl.node();(_a2=existingPath==null?void 0:existingPath.parentNode)==null||_a2.insertBefore(roughNode,existingPath),pathEl.remove()}}else group.select("path").style("fill-opacity",0);group.select("text").style("font-size",`${48*scale2}px`).style("fill",(customStyle==null?void 0:customStyle.color)??themeVariables.vennSetTextColor??defaultTextColor)}):(dummyD3root.selectAll(".venn-intersection text").style("font-size",`${48*scale2}px`).style("fill",e=>{var _a2;const setsKey=stableSetsKey([...e.sets].sort());return((_a2=styleByKey.get(setsKey))==null?void 0:_a2.color)??themeVariables.vennSetTextColor??defaultTextColor}),dummyD3root.selectAll(".venn-intersection path").style("fill-opacity",e=>{var _a2;const setsKey=stableSetsKey([...e.sets].sort());return(_a2=styleByKey.get(setsKey))!=null&&_a2.fill?1:0}).style("fill",e=>{var _a2;const setsKey=stableSetsKey([...e.sets].sort());return((_a2=styleByKey.get(setsKey))==null?void 0:_a2.fill)??"transparent"}));const vennGroup=svg.append("g").attr("transform",`translate(0, ${titleHeight})`),dummySvg=dummyD3root.select("svg").node();if(dummySvg&&"childNodes"in dummySvg)for(const child of[...dummySvg.childNodes])(_c=vennGroup.node())==null||_c.appendChild(child);configureSvgSize(svg,svgHeight,svgWidth,(config==null?void 0:config.useMaxWidth)??!0)},"draw");function stableSetsKey(setIds){return setIds.join("|")}__name(stableSetsKey,"stableSetsKey");function renderTextNodes(config,layoutByKey,dummyD3root,textNodes2,scale2,styleByKey){var _a;const useDebugLayout=(config==null?void 0:config.useDebugLayout)??!1,textGroup=dummyD3root.select("svg").append("g").attr("class","venn-text-nodes"),nodesByArea=new Map;for(const node of textNodes2){const key=stableSetsKey(node.sets),existing=nodesByArea.get(key);existing?existing.push(node):nodesByArea.set(key,[node])}for(const[key,nodes]of nodesByArea.entries()){const area=layoutByKey.get(key);if(!(area!=null&&area.text))continue;const centerX=area.text.x,centerY=area.text.y,minCircleRadius=Math.min(...area.circles.map(c=>c.radius)),innerRadiusRaw=Math.min(...area.circles.map(c=>c.radius-Math.hypot(centerX-c.x,centerY-c.y)));let innerRadius=Number.isFinite(innerRadiusRaw)?Math.max(0,innerRadiusRaw):0;innerRadius===0&&Number.isFinite(minCircleRadius)&&(innerRadius=minCircleRadius*.6);const areaGroup=textGroup.append("g").attr("class","venn-text-area").attr("font-size",`${40*scale2}px`);useDebugLayout&&areaGroup.append("circle").attr("class","venn-text-debug-circle").attr("cx",centerX).attr("cy",centerY).attr("r",innerRadius).attr("fill","none").attr("stroke","purple").attr("stroke-width",1.5*scale2).attr("stroke-dasharray",`${6*scale2} ${4*scale2}`);const innerWidth=Math.max(80*scale2,innerRadius*2*.95),innerHeight=Math.max(60*scale2,innerRadius*2*.95),labelOffset=(area.data.label&&area.data.label.length>0?Math.min(32*scale2,innerRadius*.25):0)+(nodes.length<=2?30*scale2:0),startX=centerX-innerWidth/2,startY=centerY-innerHeight/2+labelOffset,cols=Math.max(1,Math.ceil(Math.sqrt(nodes.length))),rows=Math.max(1,Math.ceil(nodes.length/cols)),cellWidth=innerWidth/cols,cellHeight=innerHeight/rows;for(const[i,node]of nodes.entries()){const col=i%cols,row=Math.floor(i/cols),x=startX+cellWidth*(col+.5),y=startY+cellHeight*(row+.5);useDebugLayout&&areaGroup.append("rect").attr("class","venn-text-debug-cell").attr("x",startX+cellWidth*col).attr("y",startY+cellHeight*row).attr("width",cellWidth).attr("height",cellHeight).attr("fill","none").attr("stroke","teal").attr("stroke-width",1*scale2).attr("stroke-dasharray",`${4*scale2} ${3*scale2}`);const boxWidth=cellWidth*.9,boxHeight=cellHeight*.9,container=areaGroup.append("foreignObject").attr("class","venn-text-node-fo").attr("width",boxWidth).attr("height",boxHeight).attr("x",x-boxWidth/2).attr("y",y-boxHeight/2).attr("overflow","visible"),textColor=(_a=styleByKey.get(node.id))==null?void 0:_a.color,text=container.append("xhtml:span").attr("class","venn-text-node").style("display","flex").style("width","100%").style("height","100%").style("white-space","normal").style("align-items","center").style("justify-content","center").style("text-align","center").style("overflow-wrap","normal").style("word-break","normal").text(node.label??node.id);textColor&&text.style("color",textColor)}}}__name(renderTextNodes,"renderTextNodes");var renderer={draw},diagram={parser:venn_default,db,renderer,styles:styles_default};export{diagram};