@sjcrh/proteinpaint-client 2.63.0 → 2.63.2

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 (207) hide show
  1. package/README.md +9 -7
  2. package/dist/{2dmaf-70c0b6bb.js → 2dmaf-0cabb4a4.js} +1 -1
  3. package/dist/{ColorScale-b44d51ef.js → ColorScale-9800a609.js} +1 -1
  4. package/dist/{DEanalysis-b86d0874.js → DEanalysis-567989ff.js} +1 -1
  5. package/dist/{Disco-16cd51c0.js → Disco-5d1404ce.js} +1 -1
  6. package/dist/{Disco.UI-a38a12e6.js → Disco.UI-54228bb6.js} +1 -1
  7. package/dist/{DragControls-0c173a20.js → DragControls-a05737c2.js} +1 -1
  8. package/dist/{DziViewer-5c2d68e7.js → DziViewer-3f466d90.js} +2 -2
  9. package/dist/{FilterRxComp-0e75dd8d.js → FilterRxComp-fc769f34.js} +1 -1
  10. package/dist/{FilterStateless-ad3df967.js → FilterStateless-8f30f856.js} +1 -1
  11. package/dist/{HicApp-bcf8330c.js → HicApp-aac413df.js} +1 -1
  12. package/dist/{OrbitControls-c33cf781.js → OrbitControls-8b7f91ca.js} +1 -1
  13. package/dist/app-59194db0.js +1 -0
  14. package/dist/{app-f91922b4.js → app-71453429.js} +1 -1
  15. package/dist/{app-bfce9bf5.js → app-fb676934.js} +1 -1
  16. package/dist/app.js +1 -1
  17. package/dist/{bam-95f36008.js → bam-e7f6baea.js} +1 -1
  18. package/dist/{barchart-e2af00a8.js → barchart-ef4874c8.js} +1 -1
  19. package/dist/{barchart.events-272fd122.js → barchart.events-e24facf7.js} +1 -1
  20. package/dist/{bars.renderer-f0e5af5a.js → bars.renderer-c46d3f44.js} +1 -1
  21. package/dist/{block-ec76524e.js → block-4f585abe.js} +1 -1
  22. package/dist/block.lazyload-6f83d057.js +1 -0
  23. package/dist/{block.legend-f8cad7e4.js → block.legend-cec87c6f.js} +1 -1
  24. package/dist/{block.mds-20655637.js → block.mds-f5a11c42.js} +1 -1
  25. package/dist/{block.mds.cnv-5feb86a0.js → block.mds.cnv-25423c1e.js} +1 -1
  26. package/dist/{block.mds.expressionrank-c7043f35.js → block.mds.expressionrank-fc1996d5.js} +1 -1
  27. package/dist/{block.mds.expressionstat-4bf457f3.js → block.mds.expressionstat-45b6bf47.js} +1 -1
  28. package/dist/{block.mds.geneboxplot-132e5fe6.js → block.mds.geneboxplot-037df46d.js} +1 -1
  29. package/dist/{block.mds.junction-1f9810df.js → block.mds.junction-00161de6.js} +1 -1
  30. package/dist/{block.mds.svcnv-094c416f.js → block.mds.svcnv-0c257af4.js} +1 -1
  31. package/dist/{block.mds.svcnv.share-bb976e02.js → block.mds.svcnv.share-c0b9dfad.js} +1 -1
  32. package/dist/{block.mds2-7045e32c.js → block.mds2-9009f8d8.js} +1 -1
  33. package/dist/{block.svg-d8d76ba7.js → block.svg-86bbfcb0.js} +1 -1
  34. package/dist/{block.tk.aicheck-317d04bd.js → block.tk.aicheck-a5697794.js} +1 -1
  35. package/dist/{block.tk.ase-d1577ec1.js → block.tk.ase-ad1be47c.js} +1 -1
  36. package/dist/{block.tk.bam-3cdc13a0.js → block.tk.bam-14339d16.js} +1 -1
  37. package/dist/{block.tk.bedgraphdot-5304e06c.js → block.tk.bedgraphdot-efe19e56.js} +1 -1
  38. package/dist/{block.tk.bigwig.ui-0c96dce5.js → block.tk.bigwig.ui-a92f286b.js} +1 -1
  39. package/dist/{block.tk.hicstraw-39d89269.js → block.tk.hicstraw-57fbbe61.js} +1 -1
  40. package/dist/{block.tk.junction-b45b3a95.js → block.tk.junction-64c39cd5.js} +1 -1
  41. package/dist/{block.tk.junction.textmatrixui-6ec019e1.js → block.tk.junction.textmatrixui-09e5e02f.js} +1 -1
  42. package/dist/{block.tk.ld-5c54e58b.js → block.tk.ld-f681d099.js} +1 -1
  43. package/dist/{block.tk.menu-30a2c3a5.js → block.tk.menu-2563364c.js} +1 -1
  44. package/dist/{block.tk.pgv-7ff2dfaf.js → block.tk.pgv-9dfc00c0.js} +1 -1
  45. package/dist/{boxplot-7de25274.js → boxplot-a2e1ace0.js} +1 -1
  46. package/dist/brainImaging-21701238.js +1 -0
  47. package/dist/{brush-db0ed33a.js → brush-bb4566a3.js} +1 -1
  48. package/dist/{categorical-bc309399.js → categorical-a00f4ffc.js} +1 -1
  49. package/dist/{condition-f0eb2343.js → condition-2034db37.js} +1 -1
  50. package/dist/{controls-8d4972c8.js → controls-0467d2ec.js} +1 -1
  51. package/dist/{controls.btns-bad9e4cf.js → controls.btns-ad7b28a2.js} +1 -1
  52. package/dist/{controls.config-e0f394cb.js → controls.config-6cf816fb.js} +1 -1
  53. package/dist/{controls.divide-d8ac5a9b.js → controls.divide-3c0d52d7.js} +1 -1
  54. package/dist/{controls.overlay-3ac8773d.js → controls.overlay-3a55c2ec.js} +1 -1
  55. package/dist/{controls.term1-008f4be4.js → controls.term1-59f4cd60.js} +1 -1
  56. package/dist/cuminc-8d21132b.js +1 -0
  57. package/dist/{customdata.inputui-58cd9b32.js → customdata.inputui-40ba6d7f.js} +1 -1
  58. package/dist/{dataDownload-91da6dd6.js → dataDownload-bfa92dad.js} +1 -1
  59. package/dist/{databrowser.ui-c50862e4.js → databrowser.ui-4799f04d.js} +1 -1
  60. package/dist/{density-7c3f91eb.js → density-4c2b53f6.js} +1 -1
  61. package/dist/{dictionary-48a38837.js → dictionary-89e860ee.js} +1 -1
  62. package/dist/{drag-c354e2c6.js → drag-88d451b4.js} +1 -1
  63. package/dist/{e2pca-3bba91fa.js → e2pca-8a3f2566.js} +1 -1
  64. package/dist/{ep-144d8973.js → ep-5399c5cc.js} +1 -1
  65. package/dist/{fusion.parse-ae1253f4.js → fusion.parse-fc25e5bd.js} +1 -1
  66. package/dist/{geneExpClustering-96d09008.js → geneExpClustering-a916ebda.js} +1 -1
  67. package/dist/{geneExpression-d6494fd3.js → geneExpression-501e95c0.js} +1 -1
  68. package/dist/{geneExpression-9ca2da4f.js → geneExpression-9047481a.js} +1 -1
  69. package/dist/{geneExpression-be9b5da2.js → geneExpression-da4b50f0.js} +1 -1
  70. package/dist/{geneORA-85850143.js → geneORA-ffb2497e.js} +1 -1
  71. package/dist/{geneVariant-3df05e0c.js → geneVariant-7ab521d6.js} +1 -1
  72. package/dist/{geneVariant-3d674865.js → geneVariant-d79431a2.js} +1 -1
  73. package/dist/{genefusion.ui-3e2a3a73.js → genefusion.ui-3ce190c7.js} +1 -1
  74. package/dist/{geneset-3b761b2c.js → geneset-3522bcda.js} +1 -1
  75. package/dist/{genomeBrowser-2105a98f.js → genomeBrowser-9b72eb22.js} +1 -1
  76. package/dist/{genomeBrowser.controls-f9b9bf42.js → genomeBrowser.controls-bef8bf99.js} +1 -1
  77. package/dist/{groupsetting-4901d033.js → groupsetting-574ad150.js} +1 -1
  78. package/dist/{hierCluster-a7ff7f5a.js → hierCluster-3b14b2b3.js} +1 -1
  79. package/dist/{hierCluster.config-3d124abf.js → hierCluster.config-f8686a30.js} +1 -1
  80. package/dist/{hierCluster.interactivity-3463cc0b.js → hierCluster.interactivity-3b5f1e81.js} +1 -1
  81. package/dist/{hierCluster.renderers-668d0075.js → hierCluster.renderers-9f9a7cad.js} +1 -1
  82. package/dist/{html.legend-3e428f9e.js → html.legend-ef8066dd.js} +1 -1
  83. package/dist/{imagePlot-6d89200c.js → imagePlot-095b9a92.js} +1 -1
  84. package/dist/{lasso-393c1570.js → lasso-ef63631b.js} +1 -1
  85. package/dist/{launch.adhoc-9c59874e.js → launch.adhoc-1b356f97.js} +1 -1
  86. package/dist/{legacyDataset-26ead9cc.js → legacyDataset-056e9d4c.js} +1 -1
  87. package/dist/{log-4d74231e.js → log-ca1e2a74.js} +1 -1
  88. package/dist/{lollipop-59f65024.js → lollipop-6ad9ec3c.js} +1 -1
  89. package/dist/{maf-72e5b7da.js → maf-dfada1c8.js} +1 -1
  90. package/dist/{maftimeline-ed8aaae8.js → maftimeline-1b715a01.js} +1 -1
  91. package/dist/{matrix-3d09a31f.js → matrix-3fae58f8.js} +1 -1
  92. package/dist/matrix.cells-3620eb3a.js +1 -0
  93. package/dist/{matrix.cluster-acdfc6a7.js → matrix.cluster-15b8a865.js} +1 -1
  94. package/dist/{matrix.config-cd01ebbd.js → matrix.config-8247bea5.js} +1 -1
  95. package/dist/{matrix.controls-86eb8d5c.js → matrix.controls-dea65894.js} +1 -1
  96. package/dist/{matrix.data-e2d7ac16.js → matrix.data-121a1a8c.js} +1 -1
  97. package/dist/{matrix.dom-e5f91cc0.js → matrix.dom-83c5fa39.js} +1 -1
  98. package/dist/{matrix.groups-f1969b5c.js → matrix.groups-2e1202ef.js} +1 -1
  99. package/dist/{matrix.interactivity-92bc8332.js → matrix.interactivity-2b076155.js} +1 -1
  100. package/dist/{matrix.layout-29a8f334.js → matrix.layout-8dc54c05.js} +1 -1
  101. package/dist/{matrix.legend-8c28039e.js → matrix.legend-e0078739.js} +1 -1
  102. package/dist/matrix.renderers-0c8eddc9.js +1 -0
  103. package/dist/{matrix.serieses-e079f04a.js → matrix.serieses-2898da6b.js} +1 -1
  104. package/dist/{matrix.sort-e1f83454.js → matrix.sort-249d4a35.js} +1 -1
  105. package/dist/{matrix.sorterUi-2025f39d.js → matrix.sorterUi-d26208c8.js} +1 -1
  106. package/dist/{mavb-37fffd68.js → mavb-9a6fa2e9.js} +1 -1
  107. package/dist/{mds.fimo-68f0eaf5.js → mds.fimo-ce97371c.js} +1 -1
  108. package/dist/{mds.samplescatterplot-362f3591.js → mds.samplescatterplot-a54b9e93.js} +1 -1
  109. package/dist/{mds.survivalplot-f5bda05a.js → mds.survivalplot-c5093f73.js} +1 -1
  110. package/dist/{mdsjsonform-7f0b6cc7.js → mdsjsonform-09b4e1cb.js} +1 -1
  111. package/dist/metaboliteIntensity-eeb5ad12.js +1 -0
  112. package/dist/niceNumLabels-ddb76164.js +1 -0
  113. package/dist/{nodrag-777a34a5.js → nodrag-bed2488c.js} +1 -1
  114. package/dist/{numeric-2eb8c25b.js → numeric-d5536b1c.js} +1 -1
  115. package/dist/numeric.binary-d67da945.js +1 -0
  116. package/dist/numeric.continuous-9a0c88bc.js +1 -0
  117. package/dist/numeric.discrete-921f7097.js +1 -0
  118. package/dist/numeric.spline-649308d5.js +1 -0
  119. package/dist/{numeric.toggle-5316211b.js → numeric.toggle-52789fd2.js} +1 -1
  120. package/dist/{oncomatrix-cd9fa01b.js → oncomatrix-6950c48c.js} +1 -1
  121. package/dist/{parseData-1bfa9946.js → parseData-480d1ff3.js} +1 -1
  122. package/dist/{plot.2dvaf-1ed153c1.js → plot.2dvaf-1ecc4bbc.js} +1 -1
  123. package/dist/plot.app-c841507a.js +1 -0
  124. package/dist/{plot.barplot-61742e94.js → plot.barplot-24140b0f.js} +1 -1
  125. package/dist/{plot.boxplot-fe966ac3.js → plot.boxplot-87fe8ab2.js} +1 -1
  126. package/dist/{plot.brainImaging-d2c23bb7.js → plot.brainImaging-325ebded.js} +1 -1
  127. package/dist/{plot.disco-70d493f4.js → plot.disco-621d1b8e.js} +1 -1
  128. package/dist/{plot.dzi-14e6fdc4.js → plot.dzi-3a7e478e.js} +1 -1
  129. package/dist/{plot.ssgq-9d364d41.js → plot.ssgq-1949c207.js} +1 -1
  130. package/dist/{plot.vaf2cov-4d28015b.js → plot.vaf2cov-d03c6409.js} +1 -1
  131. package/dist/{profileBarchart-c104f8e2.js → profileBarchart-11755d7c.js} +1 -1
  132. package/dist/{profileHome-a555583d.js → profileHome-9c5e266b.js} +1 -1
  133. package/dist/{profilePlot-5ce5b6a0.js → profilePlot-8ee3034a.js} +1 -1
  134. package/dist/{profilePolar-610213d4.js → profilePolar-9fe70c32.js} +1 -1
  135. package/dist/{profileRadar-fddb18f7.js → profileRadar-0e744181.js} +1 -1
  136. package/dist/{profileRadarFacility-2c2db1dd.js → profileRadarFacility-102544c5.js} +1 -1
  137. package/dist/{recover-a08c8d01.js → recover-b1ec4fed.js} +1 -1
  138. package/dist/{regression.inputs-5718cf72.js → regression.inputs-ad548745.js} +1 -1
  139. package/dist/{regression.inputs.values.table-d587c1cf.js → regression.inputs.values.table-1618447a.js} +1 -1
  140. package/dist/{regression.results-748024be.js → regression.results-25008028.js} +1 -1
  141. package/dist/{renderPvalueTable-c435aefd.js → renderPvalueTable-46056189.js} +1 -1
  142. package/dist/sampleScatter-47dd82cb.js +1 -0
  143. package/dist/{sampleScatter.interactivity-e9c30652.js → sampleScatter.interactivity-cfa3451d.js} +1 -1
  144. package/dist/{sampleScatter.rendererThree-3e6c032e.js → sampleScatter.rendererThree-c5321d24.js} +2 -2
  145. package/dist/{sampleView-d6a91293.js → sampleView-30b97c7d.js} +1 -1
  146. package/dist/{samplelst-821ec148.js → samplelst-2bdc1b9d.js} +1 -1
  147. package/dist/{samplematrix-7aa0a780.js → samplematrix-4f0ec523.js} +1 -1
  148. package/dist/{scatter-2e2c76f4.js → scatter-8a337eeb.js} +1 -1
  149. package/dist/{selectGenomeWithTklst-51cd21a4.js → selectGenomeWithTklst-895106fb.js} +1 -1
  150. package/dist/{singleCellPlot-c7347a27.js → singleCellPlot-360eaec6.js} +1 -1
  151. package/dist/{singlecell-a668bb17.js → singlecell-29c1cbb1.js} +1 -1
  152. package/dist/{singlecell-7c851ef8.js → singlecell-75f8af89.js} +1 -1
  153. package/dist/{snplocus-fe6f4ba1.js → snplocus-0cafa73c.js} +1 -1
  154. package/dist/{snplst-751cea95.js → snplst-2284d5ce.js} +1 -1
  155. package/dist/{spliceevent.a53ss.diagram-b157f95d.js → spliceevent.a53ss.diagram-44ccabf9.js} +1 -1
  156. package/dist/{spliceevent.exonskip.diagram-071a3467.js → spliceevent.exonskip.diagram-c8d1bdf0.js} +1 -1
  157. package/dist/spliceevent.exonskip.getdefault-9fe16119.js +1 -0
  158. package/dist/{spliceevent.noeventdiagram-1c731f35.js → spliceevent.noeventdiagram-5e244090.js} +1 -1
  159. package/dist/{spliceevent.phrase-7a3bfb00.js → spliceevent.phrase-186eb050.js} +1 -1
  160. package/dist/{stattable-a7713026.js → stattable-886f7dad.js} +1 -1
  161. package/dist/{style.gdc-40ec2784.js → style.gdc-4ac9b96b.js} +1 -1
  162. package/dist/{summary-592d8f81.js → summary-ee2045a5.js} +1 -1
  163. package/dist/{sunburst-452df940.js → sunburst-bbff8818.js} +1 -1
  164. package/dist/survival-04e279f8.js +1 -0
  165. package/dist/{survival-450b6df4.js → survival-d7bd3c6b.js} +1 -1
  166. package/dist/{svg.download-56529955.js → svg.download-54c99186.js} +1 -1
  167. package/dist/{svg.legend-c82b153f.js → svg.legend-28652faa.js} +1 -1
  168. package/dist/{svgraph-3c5cd8d2.js → svgraph-a12d89da.js} +1 -1
  169. package/dist/{svmr-3dd531ef.js → svmr-248055c8.js} +1 -1
  170. package/dist/{table-d6c411fd.js → table-1dae543a.js} +1 -1
  171. package/dist/{table-bf604c50.js → table-b4a61573.js} +1 -1
  172. package/dist/{termInfo-96285f4a.js → termInfo-4c759483.js} +1 -1
  173. package/dist/{termsetting-9a7511e6.js → termsetting-636d2271.js} +1 -1
  174. package/dist/{tk-6a8e5bb0.js → tk-741d4674.js} +1 -1
  175. package/dist/{tp.ui-221efed6.js → tp.ui-23151bb1.js} +1 -1
  176. package/dist/{tvs.density-9fdae0cc.js → tvs.density-9fe0c7fd.js} +1 -1
  177. package/dist/{tvs.geneVariant-149e25b7.js → tvs.geneVariant-1b179327.js} +1 -1
  178. package/dist/tvs.numeric-b4cfc975.js +1 -0
  179. package/dist/{tvs.samplelst-a38e9c2b.js → tvs.samplelst-681358bc.js} +1 -1
  180. package/dist/{uiUtils-a6de7f14.js → uiUtils-74700a01.js} +1 -1
  181. package/dist/{variantBrowser-05375469.js → variantBrowser-910b4bcd.js} +1 -1
  182. package/dist/{vcf-58904308.js → vcf-16ba1e06.js} +1 -1
  183. package/dist/{violin-c1b78717.js → violin-a41b2e2b.js} +1 -1
  184. package/dist/{violin.interactivity-534d6993.js → violin.interactivity-bcf0ccc2.js} +1 -1
  185. package/dist/{violin.renderer-16540fb8.js → violin.renderer-149310eb.js} +1 -1
  186. package/dist/{violinRenderer-688abcb2.js → violinRenderer-71c9f3ab.js} +1 -1
  187. package/dist/{viridis-d3cf2713.js → viridis-81de7bcd.js} +1 -1
  188. package/dist/{y-2d48b9e4.js → y-76c7da8c.js} +1 -1
  189. package/dist/{zoom-2d4ede33.js → zoom-a40839cf.js} +1 -1
  190. package/package.json +7 -7
  191. package/dist/app-de19f41c.js +0 -1
  192. package/dist/block.lazyload-ebd949e4.js +0 -1
  193. package/dist/brainImaging-007edaa3.js +0 -1
  194. package/dist/cuminc-72257faf.js +0 -1
  195. package/dist/matrix.cells-a5157233.js +0 -1
  196. package/dist/matrix.renderers-3b8dfd04.js +0 -1
  197. package/dist/metaboliteIntensity-512257f3.js +0 -1
  198. package/dist/niceNumLabels-8fdc6507.js +0 -1
  199. package/dist/numeric.binary-0a3b17d2.js +0 -1
  200. package/dist/numeric.continuous-f77038de.js +0 -1
  201. package/dist/numeric.discrete-b977e88f.js +0 -1
  202. package/dist/numeric.spline-d64b1abe.js +0 -1
  203. package/dist/plot.app-91a1d78d.js +0 -1
  204. package/dist/sampleScatter-031f47de.js +0 -1
  205. package/dist/spliceevent.exonskip.getdefault-93feb627.js +0 -1
  206. package/dist/survival-6a4c4f12.js +0 -1
  207. package/dist/tvs.numeric-f9ce58bc.js +0 -1
@@ -1 +1 @@
1
- import{am as t,an as a,z as e,x as r,W as n,q as i}from"./app-f91922b4.js";import{p as o}from"./partition-db811f6b.js";import{d as s}from"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";const l=500;const c=250;function f(f){const{occurrence:p,boxyoff:u,boxheight:m,boxwidth:g,svgheight:y,g:x,pica:b,cx:v,cy:w,nodes:M,chartlabel:A,click_ring:k,click_listbutton:z}=f;x.attr("transform","translate("+v+","+w+")");const _=t(a);const j=x.append("g");const F=x.append("g");const E={g:x,eye:j,ring:F,pica:b,busy:false,boxyoff:u,svgheight:y,cx:v,cy:w};const I=Math.max(m*.2,Math.min(m*.42,Math.log(p)*24));if(v<I){E.cx=I}else if(v+I>g){E.cx=g-I}if(w<I){E.cy=I}else if(w+I>m){E.cy=m-I}x.transition().delay(l+c).attr("transform","translate("+E.cx+","+E.cy+")");const P=e()(M);P.sum((t=>t.value));P.sort(((t,a)=>a.value-t.value));o().size([1,Math.pow(I,2)])(P);j.append("circle").attr("r",I).attr("fill","white").attr("fill-opacity",0);let q;const B=s().startAngle((t=>Math.PI*2*t.x0)).endAngle((t=>Math.PI*2*t.x1)).innerRadius((t=>{if(!t.parent){q=Math.sqrt(t.y1)-I/15;return q}return Math.sqrt(t.y0)})).outerRadius((t=>{t.outradius=Math.sqrt(t.y1);return t.outradius}));F.selectAll().data(P.descendants()).enter().append("path").attr("d",B).attr("stroke","white").attr("fill",(t=>{if(!t.parent){return"white"}let a;if(t.children){a=t.id}else{if(!t.parent.parent){a=t.id}else{a=t.parent.id}}const e=_(a);t._color=e;return e})).on("mouseover",((t,a)=>{if(!a.parent)return;if(E.busy)return;t.target.setAttribute("fill",r(a._color).darker(.5).toString());h(a,E)})).on("mouseout",((t,a)=>{b.g.selectAll("*").remove();if(!a.parent)return;t.target.setAttribute("fill",a._color)})).on("click",(async(t,a)=>{if(!k)return;if(E.busy)return;E.busy=true;await k(t,a);E.busy=false}));const X=q*2;F.attr("transform","scale(.3,.3)").attr("fill-opacity",0).transition().duration(l).attr("transform","scale(1,1)").attr("fill-opacity",1).on("end",(()=>{j.shutter=j.append("rect").attr("x",-q).attr("y",-q).attr("width",q*2).attr("height",0).attr("fill","#ededed").on("click",(()=>d(E)));j.shutter.transition().duration(c).attr("height",q*2).on("end",(()=>{j.fore=j.append("g");const t=Math.min(X/(A.length*n),q*.6);j.fore.append("text").text(A).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","#858585").attr("font-weight","bold").attr("font-family","Arial").attr("font-size",t);const a=Math.min(18,Math.min(q*.7/(p.toString().length*n),(q-t/2)*.7));j.fore.append("text").text(p).attr("text-anchor","middle").attr("fill","#858585").attr("y",-t/2-2).attr("font-family","Arial").attr("font-size",a);j.append("rect").attr("x",-q).attr("y",-q).attr("width",q*2).attr("height",q*2).attr("fill","black").attr("fill-opacity",0).on("click",(()=>{if(E.busy)return;d(E)})).on("mousedown",(t=>{t.preventDefault();t.stopPropagation();const a=t.clientX,e=t.clientY,r=i(document.body);let n=E.cx,o=E.cy;r.on("mousemove",(t=>{E.busy=true;E.cx=n+t.clientX-a;E.cy=o+t.clientY-e;x.attr("transform","translate("+E.cx+","+E.cy+")")})).on("mouseup",(()=>{setTimeout((()=>E.busy=false),10);r.on("mousemove",null).on("mouseup",null)}))}));if(z){E.listbutt=j.append("g").attr("transform","translate(0,"+t/2+")");const e=E.listbutt.append("rect").attr("x",-X/2).attr("width",X).attr("height",q-t/2).attr("fill","#d9d9d9");const r=E.listbutt.append("text").text("Info").attr("y",(q-t/2)/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-family","Arial").attr("fill","#858585").attr("font-size",Math.min(18,a));E.listbutt.append("rect").classed("sja_info_click",true).attr("x",-X/2).attr("width",X).attr("height",q-t/2).attr("fill-opacity",0).on("mouseover",(()=>{e.attr("fill","#bababa");r.attr("fill","white")})).on("mouseout",(()=>{e.attr("fill","#d9d9d9");r.attr("fill","#858585")})).on("click",(t=>{d(E);const a=t.clientX-I,e=t.clientY-I;setTimeout((()=>z(a,e)),l)}))}}))}))}function d(t){t.busy=true;if(t.eye.fore){t.eye.fore.remove()}if(t.listbutt){t.listbutt.remove()}if(t.eye.shutter){t.eye.shutter.transition().attr("height",0).on("end",(()=>{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}))}else{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}t.pica.g.selectAll("*").remove()}function h(t,a){const e=13;const r=10;const n=1;let i=(t.x0+t.x1)/2;if(i>=.375&&i<=.625){const e=a.boxyoff+a.cy+t.outradius;if(e>=a.svgheight-30){if(i<=.5){i=Math.max(.25,t.x0)}else{i=Math.min(.75,t.x1)}}}a.pica.g.selectAll("*").remove();const o=a.cx+(t.outradius+5)*Math.sin(Math.PI*2*i);const s=a.cy-(t.outradius+5)*Math.cos(Math.PI*2*i);a.pica.g.attr("transform","translate("+o+","+s+")");const l=60;let c=null;const f=t.data.cohortsize;if(Number.isFinite(f)){c=a.pica.g.append("g");c.append("rect").attr("width",l+4).attr("height",r+4).attr("fill","white").attr("shape-rendering","crispEdges");c.append("rect").attr("x",2).attr("y",2).attr("width",l).attr("height",r).attr("fill","#ECE5FF").attr("shape-rendering","crispEdges");c.append("rect").attr("x",2).attr("y",2).attr("width",l*t.value/f).attr("height",r).attr("fill","#9F80FF").attr("shape-rendering","crispEdges")}const d=a.pica.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",e).attr("font-family","Arial");const h=a.pica.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",e).attr("font-family","Arial");t.data.name+", "+t.value+" sample"+(t.value>1?"s":"");d.text(t.data.name);h.text(t.data.name);const p=a.pica.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",e).attr("font-family","Arial");const u=a.pica.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",e).attr("font-family","Arial");const m=t.value+" sample"+(t.value>1?"s":"")+(c?" ("+f+" total)":"");p.text(m);u.text(m);Math.max(h.node().getBBox().width,u.node().getBBox().width);if(i<.25){p.attr("y",c?-3-r-n:0);u.attr("y",c?-3-r-n:0);d.attr("y",(c?-3-r-n:0)-e-n);h.attr("y",(c?-3-r-n:0)-e-n);if(c){c.attr("transform","translate(0,-"+r+")")}}else if(i<.5){d.attr("dominant-baseline","hanging").attr("y",0);h.attr("dominant-baseline","hanging").attr("y",0);p.attr("dominant-baseline","hanging").attr("y",n+e);u.attr("dominant-baseline","hanging").attr("y",n+e);if(c){c.attr("transform","translate(0,"+(e+n)*2+")")}}else if(i<.75){d.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);h.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);p.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",n+e);u.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",n+e);if(c){c.attr("transform","translate(-"+l+","+(e+n)*2+")")}}else{p.attr("text-anchor","end").attr("y",c?-3-r-n:0);u.attr("text-anchor","end").attr("y",c?-3-r-n:0);d.attr("text-anchor","end").attr("y",(c?-3-r-n:0)-e-n);h.attr("text-anchor","end").attr("y",(c?-3-r-n:0)-e-n);if(c){c.attr("transform","translate(-"+l+",-"+r+")")}}}export{f as default};
1
+ import{am as t,an as a,z as e,x as r,W as n,q as i}from"./app-71453429.js";import{p as o}from"./partition-db811f6b.js";import{d as s}from"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";const l=500;const c=250;function f(f){const{occurrence:p,boxyoff:u,boxheight:m,boxwidth:g,svgheight:y,g:x,pica:b,cx:v,cy:w,nodes:M,chartlabel:A,click_ring:k,click_listbutton:z}=f;x.attr("transform","translate("+v+","+w+")");const _=t(a);const j=x.append("g");const F=x.append("g");const E={g:x,eye:j,ring:F,pica:b,busy:false,boxyoff:u,svgheight:y,cx:v,cy:w};const I=Math.max(m*.2,Math.min(m*.42,Math.log(p)*24));if(v<I){E.cx=I}else if(v+I>g){E.cx=g-I}if(w<I){E.cy=I}else if(w+I>m){E.cy=m-I}x.transition().delay(l+c).attr("transform","translate("+E.cx+","+E.cy+")");const P=e()(M);P.sum((t=>t.value));P.sort(((t,a)=>a.value-t.value));o().size([1,Math.pow(I,2)])(P);j.append("circle").attr("r",I).attr("fill","white").attr("fill-opacity",0);let q;const B=s().startAngle((t=>Math.PI*2*t.x0)).endAngle((t=>Math.PI*2*t.x1)).innerRadius((t=>{if(!t.parent){q=Math.sqrt(t.y1)-I/15;return q}return Math.sqrt(t.y0)})).outerRadius((t=>{t.outradius=Math.sqrt(t.y1);return t.outradius}));F.selectAll().data(P.descendants()).enter().append("path").attr("d",B).attr("stroke","white").attr("fill",(t=>{if(!t.parent){return"white"}let a;if(t.children){a=t.id}else{if(!t.parent.parent){a=t.id}else{a=t.parent.id}}const e=_(a);t._color=e;return e})).on("mouseover",((t,a)=>{if(!a.parent)return;if(E.busy)return;t.target.setAttribute("fill",r(a._color).darker(.5).toString());h(a,E)})).on("mouseout",((t,a)=>{b.g.selectAll("*").remove();if(!a.parent)return;t.target.setAttribute("fill",a._color)})).on("click",(async(t,a)=>{if(!k)return;if(E.busy)return;E.busy=true;await k(t,a);E.busy=false}));const X=q*2;F.attr("transform","scale(.3,.3)").attr("fill-opacity",0).transition().duration(l).attr("transform","scale(1,1)").attr("fill-opacity",1).on("end",(()=>{j.shutter=j.append("rect").attr("x",-q).attr("y",-q).attr("width",q*2).attr("height",0).attr("fill","#ededed").on("click",(()=>d(E)));j.shutter.transition().duration(c).attr("height",q*2).on("end",(()=>{j.fore=j.append("g");const t=Math.min(X/(A.length*n),q*.6);j.fore.append("text").text(A).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","#858585").attr("font-weight","bold").attr("font-family","Arial").attr("font-size",t);const a=Math.min(18,Math.min(q*.7/(p.toString().length*n),(q-t/2)*.7));j.fore.append("text").text(p).attr("text-anchor","middle").attr("fill","#858585").attr("y",-t/2-2).attr("font-family","Arial").attr("font-size",a);j.append("rect").attr("x",-q).attr("y",-q).attr("width",q*2).attr("height",q*2).attr("fill","black").attr("fill-opacity",0).on("click",(()=>{if(E.busy)return;d(E)})).on("mousedown",(t=>{t.preventDefault();t.stopPropagation();const a=t.clientX,e=t.clientY,r=i(document.body);let n=E.cx,o=E.cy;r.on("mousemove",(t=>{E.busy=true;E.cx=n+t.clientX-a;E.cy=o+t.clientY-e;x.attr("transform","translate("+E.cx+","+E.cy+")")})).on("mouseup",(()=>{setTimeout((()=>E.busy=false),10);r.on("mousemove",null).on("mouseup",null)}))}));if(z){E.listbutt=j.append("g").attr("transform","translate(0,"+t/2+")");const e=E.listbutt.append("rect").attr("x",-X/2).attr("width",X).attr("height",q-t/2).attr("fill","#d9d9d9");const r=E.listbutt.append("text").text("Info").attr("y",(q-t/2)/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-family","Arial").attr("fill","#858585").attr("font-size",Math.min(18,a));E.listbutt.append("rect").classed("sja_info_click",true).attr("x",-X/2).attr("width",X).attr("height",q-t/2).attr("fill-opacity",0).on("mouseover",(()=>{e.attr("fill","#bababa");r.attr("fill","white")})).on("mouseout",(()=>{e.attr("fill","#d9d9d9");r.attr("fill","#858585")})).on("click",(t=>{d(E);const a=t.clientX-I,e=t.clientY-I;setTimeout((()=>z(a,e)),l)}))}}))}))}function d(t){t.busy=true;if(t.eye.fore){t.eye.fore.remove()}if(t.listbutt){t.listbutt.remove()}if(t.eye.shutter){t.eye.shutter.transition().attr("height",0).on("end",(()=>{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}))}else{t.ring.transition().attr("transform","scale(.5,.5)").attr("fill-opacity",0).on("end",(()=>{t.g.remove();t.pica.g.selectAll("*").remove()}))}t.pica.g.selectAll("*").remove()}function h(t,a){const e=13;const r=10;const n=1;let i=(t.x0+t.x1)/2;if(i>=.375&&i<=.625){const e=a.boxyoff+a.cy+t.outradius;if(e>=a.svgheight-30){if(i<=.5){i=Math.max(.25,t.x0)}else{i=Math.min(.75,t.x1)}}}a.pica.g.selectAll("*").remove();const o=a.cx+(t.outradius+5)*Math.sin(Math.PI*2*i);const s=a.cy-(t.outradius+5)*Math.cos(Math.PI*2*i);a.pica.g.attr("transform","translate("+o+","+s+")");const l=60;let c=null;const f=t.data.cohortsize;if(Number.isFinite(f)){c=a.pica.g.append("g");c.append("rect").attr("width",l+4).attr("height",r+4).attr("fill","white").attr("shape-rendering","crispEdges");c.append("rect").attr("x",2).attr("y",2).attr("width",l).attr("height",r).attr("fill","#ECE5FF").attr("shape-rendering","crispEdges");c.append("rect").attr("x",2).attr("y",2).attr("width",l*t.value/f).attr("height",r).attr("fill","#9F80FF").attr("shape-rendering","crispEdges")}const d=a.pica.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",e).attr("font-family","Arial");const h=a.pica.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",e).attr("font-family","Arial");t.data.name+", "+t.value+" sample"+(t.value>1?"s":"");d.text(t.data.name);h.text(t.data.name);const p=a.pica.g.append("text").attr("stroke","white").attr("stroke-width",3).attr("font-size",e).attr("font-family","Arial");const u=a.pica.g.append("text").attr("fill","black").attr("fill-opacity",1).attr("font-size",e).attr("font-family","Arial");const m=t.value+" sample"+(t.value>1?"s":"")+(c?" ("+f+" total)":"");p.text(m);u.text(m);Math.max(h.node().getBBox().width,u.node().getBBox().width);if(i<.25){p.attr("y",c?-3-r-n:0);u.attr("y",c?-3-r-n:0);d.attr("y",(c?-3-r-n:0)-e-n);h.attr("y",(c?-3-r-n:0)-e-n);if(c){c.attr("transform","translate(0,-"+r+")")}}else if(i<.5){d.attr("dominant-baseline","hanging").attr("y",0);h.attr("dominant-baseline","hanging").attr("y",0);p.attr("dominant-baseline","hanging").attr("y",n+e);u.attr("dominant-baseline","hanging").attr("y",n+e);if(c){c.attr("transform","translate(0,"+(e+n)*2+")")}}else if(i<.75){d.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);h.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",0);p.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",n+e);u.attr("dominant-baseline","hanging").attr("text-anchor","end").attr("y",n+e);if(c){c.attr("transform","translate(-"+l+","+(e+n)*2+")")}}else{p.attr("text-anchor","end").attr("y",c?-3-r-n:0);u.attr("text-anchor","end").attr("y",c?-3-r-n:0);d.attr("text-anchor","end").attr("y",(c?-3-r-n:0)-e-n);h.attr("text-anchor","end").attr("y",(c?-3-r-n:0)-e-n);if(c){c.attr("transform","translate(-"+l+",-"+r+")")}}}export{f as default};
@@ -0,0 +1 @@
1
+ import{aD as t}from"./app-71453429.js";import{b as i}from"./termsetting-636d2271.js";import{getHandler as e}from"./numeric.toggle-52789fd2.js";import"path";import"./FilterRxComp-fc769f34.js";import"./table-1dae543a.js";function o(o){return{showEditMenu(i){return t(this,void 0,void 0,(function*(){const t=yield e(o);yield t.showEditMenu(i)}))},getPillStatus(){},getPillName(t){return i(o,t)}}}function r(t,i){}export{r as fillTW,o as getHandler};
@@ -1 +1 @@
1
- import{az as e,aS as t,M as s,am as i,an as r,x as a,r as n,q as l,l as o}from"./app-f91922b4.js";import{controlsInit as d}from"./controls-8d4972c8.js";import{s as c}from"./legacy-d3-polyfill-bdb2d792.js";import{h as p}from"./html.legend-3e428f9e.js";import{o as h}from"./FilterRxComp-0e75dd8d.js";import{f as u}from"./termsetting-9a7511e6.js";import{s as v,r as m,a as g,g as f}from"./renderPvalueTable-c435aefd.js";import{a as y}from"./svg.download-56529955.js";import{l as b}from"./line-264f8f9e.js";import{a as x}from"./area-f56e50f9.js";import{c as I,b as k}from"./axis-6cb4f314.js";import"./controls.btns-bad9e4cf.js";import"./controls.config-e0f394cb.js";import"./controls.overlay-3ac8773d.js";import"path";import"./table-d6c411fd.js";import"./controls.term1-008f4be4.js";import"./controls.divide-d8ac5a9b.js";import"./pointer-c7475677.js";import"./constant-426a1483.js";class j{constructor(e){this.type="survival"}async init(){const e=this.opts;const t=this.opts.controls?null:e.holder.append("div");const i=e.controls?e.holder:e.holder.append("div");this.dom={loadingDiv:i.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:e.header,controls:t,holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px 5px 15px 5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px"),tip:new s({padding:"5px"}),legendTip:new s({padding:"5px"})};this.dom.tip.onHide=()=>{this.activeMenu=false};if(this.dom.header)this.dom.header.html("Survival Plot");this.settings=Object.assign({},e.settings);this.pj=O(this);this.lineFxn=b().curve(v).x((e=>e.scaledX)).y((e=>e.scaledY));T(this);S(this);this.legendRenderer=p(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=p(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});await this.setControls()}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.survival",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"overlay",usecase:{target:"survival",detail:"term2"},numericEditMenuVersion:["discrete"]},{type:"divideBy",usecase:{target:"survival",detail:"term0"}},{label:"Chart width",type:"number",chartType:"survival",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"survival",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"95% CI",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"ciVisible"},{label:"Censored Symbol",type:"radio",chartType:"survival",settingsKey:"symbol",options:[{label:"X",value:"x"},{label:"Tick",value:"vtick"}]},{label:"Time Factor",type:"math",chartType:"survival",settingsKey:"timeFactor",title:"Rescale the time scale by multiplying this factor. Enter a number or an expression like 1/365."},{label:"Time Unit",type:"text",chartType:"survival",settingsKey:"timeUnit",title:`The unit to display in the x-axis title, like 'years'`},{label:"X-axis ticks",type:"text",chartType:"survival",settingsKey:"xTickValues",title:`Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"Default color",type:"color",chartType:"survival",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.survival",this.download)}}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{isVisible:t.term.term.type=="survival"||t.term2&&t.term2.term.type=="survival",genome:this.app.vocabApi.vocab.genome,dslabel:this.app.vocabApi.vocab.dslabel,activeCohort:e.activeCohort,termfilter:e.termfilter,config:{term:JSON.parse(JSON.stringify(t.term)),term0:t.term0?JSON.parse(JSON.stringify(t.term0)):null,term2:t.term2?JSON.parse(JSON.stringify(t.term2)):null,settings:t.settings.survival},termdbConfig:e.termdbConfig}}async main(){try{if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+` plot`);this.toggleLoadingDiv();Object.assign(this.settings,this.state.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel=this.getXtitleLabel();const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);this.toggleLoadingDiv("none");this.serverData=t;this.app.vocabApi.syncTermData(this.state.config,t);this.currData=this.processData(t);this.refs=t.refs;this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.symbol=this.getSymbol(7);this.render()}catch(e){throw e}}getDataRequestOpts(){const e=this.state.config;const t={chartType:"survival",term:e.term,filter:this.state.termfilter.filter};if(e.term2)t.term2=e.term2;if(e.term0)t.term0=e.term0;if(this.state.ssid)t.ssid=this.state.ssid;return t}getDefaultHidden(){const e=[];const t=this.state.config.term2;if(!t)return e;const s=t.q.hiddenValues;if(s&&Object.keys(s).length){for(const i in s){e.push(t.term.values[i].label)}}return e}getXtitleLabel(){const e=this.state.config.term.term.type=="survival"?"term":"term2";const t=this.settings.timeUnit?this.settings.timeUnit:this.state.config[e].term.unit;const s=`Time to Event (${t})`;return s}processData(e){this.uniqueSeriesIds=new Set;const t=[];const s=["survival","lower","upper"];for(const i of e.case){const r={};e.keys.forEach(((e,t)=>{r[e]=s.includes(e)?Number(i[t]):i[t]}));r.time=r.time*this.settings.timeFactor;t.push(r);this.uniqueSeriesIds.add(r.seriesId)}this.tests={};if(e.tests){for(const t in e.tests){const s=e.tests[t];this.tests[t]=[];for(const e of s){if(this.settings.hidden.includes(e.series1)||this.settings.hidden.includes(e.series2))continue;this.tests[t].push({pvalue:{id:"pvalue",text:e.pvalue},series1:{id:e.series1},series2:{id:e.series2}})}if(!this.tests[t].length)delete this.tests[t]}}return t}setTerm2Color(e){if(!e)return;const s=this.state.config;const l=t({},s.term2?.term?.values||{},s.term2?.values||{});const o=this.refs.bins[2]&&[this.refs.bins[2]]||Object.values(l);this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?i(r):i(c);const d=[];for(const t of e){for(const e of t.serieses){const t=o.find((t=>t.seriesId===e.seriesId||t.key===e.seriesId||t.name===e.seriesId||t.label===e.seriesId));const s={orig:t?.color||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=a(s.orig);s.adjusted=s.rgb.toString();s.hex=n(s.adjusted);this.term2toColor[e.seriesId]=s;if(!d.find((t=>t.seriesId==e.seriesId))){d.push({key:e.seriesId,seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.refs.orderedKeys){const e=this.refs.orderedKeys.series;d.sort(((t,s)=>e.indexOf(t.seriesId)-e.indexOf(s.seriesId)))}this.legendValues={};d.forEach(((e,t)=>{this.legendValues[e.seriesId]={seriesId:e.seriesId,order:"order"in e?e.order:t,color:this.term2toColor[e.seriesId].orig}}));const p=this.state.config.term2?.values;if(p){d.sort(((e,t)=>{const s=p[e.seriesId];const i=p[t.seriesId];if(s&&i){if("order"in s&&"order"in i)return s.order-i.order;if(s.order)return s.order;if(i.order)return i.order;return 0}if(s)return s.order||0;if(i)return i.order||0;return e.order-t.order}));d.forEach(((e,t)=>{this.legendValues[e.seriesId].order=t}))}if((!s.term.term.type=="survival"||s.term2)&&d.length){const e=s.term.term.type=="survival"?"term2":"term";this.legendData=[{name:s[e].term.name,items:d.filter((e=>!e.isHidden))}];this.hiddenData=[{name:`<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,items:d.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const t=this.tests[e];for(const e of t){for(const t in e){if(t=="pvalue"){e[t].color="#000"}else{const s=d.find((s=>s.seriesId==e[t].id));e[t].color=s.color;e[t].text=s.text}}}}}toggleLoadingDiv(e=""){if(e!="none"){this.dom.loadingDiv.style("opacity",0).style("display",e).transition().duration("loadingWait"in this?this.loadingWait:0).style("opacity",1)}else{this.dom.loadingDiv.style("display",e)}this.loadingWait=1e3}}const w=e(j);const C=w;function S(e){e.render=function(){const t=e.pj.tree.charts||[{chartId:"No survival data"}];const s=e.dom.chartsDiv.selectAll(".pp-survival-chart").data(t,(e=>e.chartId));s.exit().remove();s.each(e.updateCharts);s.enter().each(e.addCharts);e.dom.holder.style("display","inline-block");e.dom.chartsDiv.on("mouseover",e.mouseover).on("mouseout",e.mouseout);e.legendRenderer(e.settings.atRiskVisible?[]:e.legendData);if(!e.hiddenData?.[0]?.items.length)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};const t=t=>{e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{hiddenPvalues:t}}}})};const s=t=>e.activeMenu=t;e.addCharts=function(a){const n=e.settings;i(a,n);const o=l(this).append("div").attr("class","pp-survival-chart").style("opacity",a.serieses?0:1).style("width","fit-content").style("display","inline-block").style("margin",n.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","left").style("vertical-align","top");const d=o.append("div").style("width",n.svgw+50+"px").style("height",n.chartTitleDivHt+"px").style("text-align","center").style("font-weight","600").style("margin","5px").append("div").attr("class","sjpp-survival-title").style("display","inline-block").style("width","fit-content").datum(a).html((e=>e.chartId)).style("cursor","pointer").on("mouseover",(()=>d.style("text-decoration","underline"))).on("mouseout",(()=>d.style("text-decoration",""))).on("click",e.showMenuForSelectedChart);if(a.serieses){const i=o.append("svg").attr("class","pp-survival-svg");r(i,a,n,0);o.transition().duration(n.duration).style("opacity",1);o.append("div").attr("class","pp-survival-chartLegends").style("vertical-align","top").style("margin","10px 10px 10px 30px").style("display","none");if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}}};function i(e,t){e.visibleSerieses=e.serieses?.filter((e=>!t.hidden.includes(e.seriesId)))||[];const s=e.visibleSerieses.reduce(((e,t)=>t.seriesLabel&&t.seriesLabel.length>e?t.seriesLabel.length:e),0);e.atRiskLabelWidth=t.atRiskVisible?s*(t.axisTitleFontSize-2)*.4+t.atRiskLabelOffset:0}e.updateCharts=function(a){if(!a.serieses)return;const n=e.settings;i(a,n);const o=l(this);o.transition().duration(n.duration).style("width","fit-content");o.select(".sjpp-survival-title").style("width",n.svgw+50).style("height",n.chartTitleDivHt+"px").datum(a.chartId).html(a.chartId);o.selectAll(".sjpp-lock-icon").style("display",n.scale=="byChart"?"block":"none");o.selectAll(".sjpp-unlock-icon").style("display",n.scale=="byChart"?"none":"block");r(o.select("svg"),a,n,n.duration);o.select(".pp-survival-chartLegends").selectAll("*").remove();if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}};function r(t,s,i,r){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*(i.axisTitleFontSize+4):0;t.transition().duration(r).attr("width",i.svgw+s.atRiskLabelWidth).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[d,p,h,u,v,m,f,y,b]=a(t);const x=s.atRiskLabelWidth+i.svgPadding.left;d.attr("transform","translate("+x+","+i.svgPadding.top+")");const I=p.selectAll(".sjpp-survival-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));I.exit().remove();I.each((function(e,t){n(l(this),s,e,t,i,i.duration)}));I.enter().append("g").attr("class","sjpp-survival-series").each((function(e,t){n(l(this),s,e,t,i)}));c(u,m,v,f,i,s);g({g:y,s:i,chart:s,term2values:e.state.config.term2?.values,term2toColor:e.term2toColor,onSerieClick:e.legendClick});b.attr("x",0).attr("width",i.svgw-i.svgPadding.left-i.svgPadding.right).attr("y",0).attr("height",i.svgh-i.svgPadding.top-i.svgPadding.bottom+i.xAxisOffset);t.seriesTip.update({xScale:s.xScale,xTitleLabel:i.xTitleLabel,decimals:i.seriesTipDecimals,serieses:s.visibleSerieses.map((t=>{const s=`${t.seriesLabel||"Probability"}:`;const i=e.term2toColor[t.seriesId].adjusted||"#000";return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${(100*e.y).toFixed(2)}% (${(100*e.lower).toFixed(2)} - ${(100*e.upper).toFixed(2)})`+`</span>`})))}}))})}function a(t,s){let i,r,a,n,l,o,d,c,p,h;if(!t.select(".sjpp-survival-mainG").size()){i=t.append("g").attr("class","sjpp-survival-mainG");r=i.append("g").attr("class","sjpcb-survival-seriesesG");a=i.append("g").attr("class","sjpp-survival-axis");n=a.append("g").attr("class","sjpp-survival-x-axis");l=a.append("g").attr("class","sjpp-survival-y-axis");o=a.append("g").attr("class","sjpp-survival-x-title");d=a.append("g").attr("class","sjpp-survival-y-title");c=i.append("g").attr("class","sjpp-survival-atrisk");h=i.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","1px");p=i.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select(".sjpp-survival-mainG");r=i.select(".sjpcb-survival-seriesesG");a=i.select(".sjpp-survival-axis");n=a.select(".sjpp-survival-x-axis");l=a.select(".sjpp-survival-y-axis");o=a.select(".sjpp-survival-x-title");d=a.select(".sjpp-survival-y-title");c=i.select(".sjpp-survival-atrisk");p=i.select(".sjpcb-plot-tip-rect");h=i.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=f(h,p,e.app?.tip)}return[i,r,a,n,l,o,d,c,p]}function n(t,s,i,r,a,n){t.selectAll("path").remove();t.append("path").attr("d",x().curve(v).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(i.data)).style("display",a.ciVisible?"":"none").style("fill",e.term2toColor[i.seriesId].adjusted).style("opacity","0.15").style("stroke","none");d(a,t,i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.y,scaledX:e.scaledX,scaledY:e.scaledY[0],seriesName:"survival",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:e.ncensor,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.lower,scaledX:e.scaledX,scaledY:e.scaledY[1],seriesName:"lower",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.upper,scaledX:e.scaledX,scaledY:e.scaledY[2],seriesName:"upper",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))))}function d(t,s,i){s.selectAll("g").remove();const r=i.filter(((e,t)=>t===0||e.nevent||t===i.length-1));const a=i.filter((e=>e.ncensor));s.append("g");const n=i[0].seriesName;const l=e.term2toColor[i[0].seriesId].adjusted;if(n=="survival"){s.append("path").attr("d",e.lineFxn(r)).style("fill","none").style("stroke",l).style("opacity",1).style("stroke-opacity",1)}const o=s.append("g").attr("class","sjpp-survival-censored");const d=o.selectAll(".sjpp-survival-censored-x").data(a,(e=>e.x));d.exit().remove();d.attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).style("stroke",l).style("display","");d.enter().append("path").attr("class","sjpp-survival-censored-x").attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).attr("d",e.symbol).style("fill","transparent").style("fill-opacity",t.fillOpacity).style("stroke",l).style("display","")}function c(e,t,s,i,r,a){let n;if(r.xTickValues?.length){a.xTickValues=r.xTickValues.filter((e=>e===0||e>=a.xMin&&e<=a.xMax));n=I(a.xScale).tickValues(a.xTickValues)}else{a.xTickValues=[];n=I(a.xScale).ticks(4).tickFormat((e=>{a.xTickValues.push(e);return e}))}const l=-.5;e.attr("transform",`translate(${l}, ${r.svgh-r.svgPadding.top-r.svgPadding.bottom+r.xAxisOffset+l})`).call(n);s.attr("transform",`translate(${r.yAxisOffset+l}, ${l})`).call(k(o().domain(a.yScale.domain()).range(a.yScale.range())).ticks(5));t.select("text, title").remove();t.attr("transform","translate("+(r.svgw-r.svgPadding.left-r.svgPadding.right)/2+","+(r.svgh-r.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(r.xTitleLabel);const d="Probability of Survival";i.select("text, title").remove();i.attr("transform","translate("+(-r.svgPadding.left/2-r.axisTitleFontSize)+","+(r.svgh-r.svgPadding.top-r.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(d)}e.getSymbol=function(t){const s=t,i=s/2;switch(e.settings.symbol){case"x":return`M -${i},-${i} l ${s},${s} M ${i},-${i} l -${s},${s}`;case"vtick":return`M 0,-${i} L 0,${i}`;default:throw`Unrecognized survival plot symbol='${e.settings.symbol}'`}}}function T(e){e.download=function(){if(!e.state)return;y(e.dom.chartsDiv.selectAll(".sjpp-survival-mainG"),"Survival_Plot",e.dom.chartsDiv.select(".pp-survival-chart").node())};e.mouseover=function(e){e.target.__data__};e.mouseout=function(){if(e.activeMenu)return;e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const r=e.settings.hidden.slice();const a=r.indexOf(t.seriesId);if(a==-1){r.push(t.seriesId);e.showLegendItemMenu(t,r,s,i)}else{r.splice(a,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:r}}}})}};e.showLegendItemMenu=function(t,s,i,r){const a=e.state.config.term2?.term||null;const n=a?.values?.[t.seriesId]?.label||t.seriesId;const o=`<div style='padding-bottom:8px'><b>${n}</b></div>`;const d=t.seriesId||t.seriesId===0?t:{seriesId:t.id,dataId:t.dataId};if(!d.seriesId&&!d.dataId){if(!a){const s=e.dom.legendTip.clear().d.append("div").html("Edit color: ");const a=s.append("input").attr("type","color").attr("value",e.settings.defaultColor).on("change",(()=>e.adjustColor(a.property("value"),t)));e.dom.legendTip.show(i,r)}return}const c=[];c.push({label:"Hide",callback:()=>{p.hide();e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:s}}}})}});if(e.legendData[0]?.items.length>1){c.push({label:"Move&nbsp;",setInput:s=>{const i=e.legendValues[t.seriesId].order;if(i!=0)s.append("button").html("up").on("click",(()=>{p.hide();e.adjustValueOrder(t,-1)}));if(i<e.legendData[0]?.items.length-1)s.append("button").html("down").on("click",(()=>{p.hide();e.adjustValueOrder(t,1)}))}})}c.push({setInput:s=>{const i=s.append("div");i.html("Edit color: ");const r=i.append("input").attr("type","color").attr("value",e.term2toColor[t.seriesId].hex).on("change",(()=>e.adjustColor(r.property("value"),t)))}});if(!c.length)return;const p=e.dom.legendTip.clear();p.d.append("div").html(o);p.d.append("div").selectAll("div").data(c).enter().append("div").attr("class",(e=>e.label=="Hide"?"sja_menuoption":"sja_menuoption_not_interactive")).on("click",((s,i)=>{if(i.setInput)return;e.app.tip.hide();i.callback(t)})).each((function(e){const t=l(this);if(e.label)t.append("div").style("display","inline-block").html(e.label);if(e.setInput)e.setInput(t.append("div").style("display","inline-block"))}));p.show(event.clientX,event.clientY)};e.adjustValueOrder=(t,s)=>{const i=JSON.parse(JSON.stringify(e.state.config.term2?.values||e.legendValues));if(!i[t.seriesId]){i[t.seriesId]=Object.assign({},e.state.config.term2?.term?.values||{})}for(const t in i){if(!("order"in i[t]))i[t].order=e.legendValues[t].order}const r=i[t.seriesId];r.order+=s;for(const e in i){if(e==t.seriesId)continue;if("order"in i[e]&&i[e].order===r.order){i[e].order+=-1*s;break}}const a=JSON.parse(JSON.stringify(e.state.config.term2));a.values=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}});e.app.tip.hide()};e.adjustColor=(t,s)=>{const i=a(t).formatHex();const r=e.state.config.term2;if(!r){e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{defaultColor:i}}}})}else{const t=structuredClone(r?.term.values||e.legendValues);const a=structuredClone(r);a.term.values=t;if(!t)a.term.values={[s.seriesId]:{}};a.term.values[s.seriesId].color=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}})}e.app.tip.hide()};e.showMenuForSelectedChart=function(){e.dom.tip.clear();e.activeMenu=true;e.dom.tip.showunder(this).d.append("button").html("Download SVG").on("click",(()=>{if(!e.state)return;const t=l(this.closest(".pp-survival-chart"));y(t.select(".sjpp-survival-mainG"),"Survival_Plot",t.node())}))}}async function D(e,s){if(!e.term)throw"survival getPlotConfig: opts.term{} missing";try{await u(e.term,s.vocabApi);if(e.term2)await u(e.term2,s.vocabApi);if(e.term0)await u(e.term0,s.vocabApi)}catch(e){throw`${e} [survival getPlotConfig()]`}const i={id:e.term.term.id,settings:{controls:{term2:null,term0:null},survival:{radius:5,ciVisible:false,fill:"#fff",stroke:"#000",symbol:"vtick",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,timeFactor:1,timeUnit:"",atRiskVisible:true,atRiskLabelOffset:-20,xTickValues:[],seriesTipDecimals:1,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,hiddenPvalues:[],defaultColor:"#2077b4"}}};return t(i,e)}function O(e){const t=new h({template:{yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",rawChartId:"$chartId",xMin:">$time",xMax:"<$time","__:xScale":"=xScale()","__:yScale":"=yScale()",yMin:">=yMin()",yMax:"<=yMax()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key","__:seriesLabel":"=seriesLabel()",data:[{"__:seriesId":"@parent.@parent.seriesId",x:"$time",y:"$survival",lower:"$lower",upper:"$upper","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nevent:"$nevent",ncensor:"$ncensor",nrisk:"$nrisk"},"=timeCensored()"]},"$seriesId"],"@done()":"=sortSerieses()"},"=chartTitle()"],"@done()":"=sortCharts()"},"=":{chartTitle(t){e.settings;if(!t.chartId||t.chartId=="-"){const t=e.state.config.term.term.type=="survival"?"term":"term2";return e.state.config[t].term.name}const s=e.state.config.term0;if(!s||!s.term.values)return t.chartId;if(s.q&&s.q.groupsetting&&s.q.groupsetting.inuse){return t.chartId}const i=e.state.config.term0.term.values[t.chartId];return i&&i.label?i.label:t.chartId},seriesLabel(t,s){const i=e.state.config.term2;if(!i)return;const r=s.self.seriesId;if(i&&i.q&&i.q.groupsetting&&i.q.groupsetting.inuse)return r;if(i&&i.term.values&&r in i.term.values)return i.term.values[r].label;return r},timeCensored(e){return e.time+"-"+e.ncensor},y(e,t){const s=t.context.parent.seriesId;return s=="CI"?[e.lower,e.upper]:e[s]},yMin(e){return e.lower},yMax(e){return e.upper},xScale(t,s){const i=e.settings;i.method==2?0:s.self.xMin;return o().domain([0,s.self.xMax]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){return t.context.context.context.parent.xScale(t.self.x)},scaledY(e,t){const s=t.context.context.context.parent.yScale;const i=t.self;return[s(i.y),s(i.lower),s(i.upper)]},yScale(t,s){const i=e.settings;i.scale=="byChart"?s.self.yMax:s.root.yMax;const r=[1.05,0];return o().domain(r).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},sortSerieses(t){for(const e of t.serieses){e.data.sort(((e,t)=>e.x<t.x?-1:1))}if(e.refs.orderedKeys){const s=e.refs.orderedKeys.series;t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}if(e.refs.bins){const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}},sortCharts(t){if(!e.refs.orderedKeys)return;const s=e.refs.orderedKeys.chart;t.charts.sort(((e,t)=>s.indexOf(e.chartId)-s.indexOf(t.chartId)))}}});return t}export{C as componentInit,D as getPlotConfig,w as survivalInit};
1
+ import{az as e,aS as t,M as s,am as i,an as r,x as a,r as n,q as l,l as o}from"./app-71453429.js";import{controlsInit as d}from"./controls-0467d2ec.js";import{s as c}from"./legacy-d3-polyfill-bdb2d792.js";import{h as p}from"./html.legend-ef8066dd.js";import{o as h}from"./FilterRxComp-fc769f34.js";import{f as u}from"./termsetting-636d2271.js";import{s as v,r as m,a as g,g as f}from"./renderPvalueTable-46056189.js";import{a as y}from"./svg.download-54c99186.js";import{l as b}from"./line-264f8f9e.js";import{a as x}from"./area-f56e50f9.js";import{c as I,b as k}from"./axis-6cb4f314.js";import"./controls.btns-ad7b28a2.js";import"./controls.config-6cf816fb.js";import"./controls.overlay-3a55c2ec.js";import"path";import"./table-1dae543a.js";import"./controls.term1-59f4cd60.js";import"./controls.divide-3c0d52d7.js";import"./pointer-c7475677.js";import"./constant-426a1483.js";class j{constructor(e){this.type="survival"}async init(){const e=this.opts;const t=this.opts.controls?null:e.holder.append("div");const i=e.controls?e.holder:e.holder.append("div");this.dom={loadingDiv:i.append("div").style("position","absolute").style("display","none").style("padding","20px").html("Loading ..."),header:e.header,controls:t,holder:i,chartsDiv:i.append("div").style("margin","10px"),legendDiv:i.append("div").style("margin","5px 5px 15px 5px"),hiddenDiv:i.append("div").style("margin","5px 5px 15px 5px"),tip:new s({padding:"5px"}),legendTip:new s({padding:"5px"})};this.dom.tip.onHide=()=>{this.activeMenu=false};if(this.dom.header)this.dom.header.html("Survival Plot");this.settings=Object.assign({},e.settings);this.pj=O(this);this.lineFxn=b().curve(v).x((e=>e.scaledX)).y((e=>e.scaledY));T(this);S(this);this.legendRenderer=p(this.dom.legendDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});this.hiddenRenderer=p(this.dom.hiddenDiv,{settings:{legendOrientation:"vertical"},handlers:{legend:{click:e=>this.legendClick(e.target.__data__,e.clientX,e.clientY)}}});await this.setControls()}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.survival",this.download)}else{this.dom.holder.attr("class","pp-termdb-plot-viz").style("display","inline-block").style("min-width","300px").style("margin-left","50px");this.components={controls:await d({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls").style("display","inline-block"),inputs:[{type:"overlay",usecase:{target:"survival",detail:"term2"},numericEditMenuVersion:["discrete"]},{type:"divideBy",usecase:{target:"survival",detail:"term0"}},{label:"Chart width",type:"number",chartType:"survival",settingsKey:"svgw",title:"The internal width of the chart plot"},{label:"Chart height",type:"number",chartType:"survival",settingsKey:"svgh",title:"The internal height of the chart plot"},{label:"95% CI",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"ciVisible"},{label:"Censored Symbol",type:"radio",chartType:"survival",settingsKey:"symbol",options:[{label:"X",value:"x"},{label:"Tick",value:"vtick"}]},{label:"Time Factor",type:"math",chartType:"survival",settingsKey:"timeFactor",title:"Rescale the time scale by multiplying this factor. Enter a number or an expression like 1/365."},{label:"Time Unit",type:"text",chartType:"survival",settingsKey:"timeUnit",title:`The unit to display in the x-axis title, like 'years'`},{label:"X-axis ticks",type:"text",chartType:"survival",settingsKey:"xTickValues",title:`Option to customize the x-axis tick values, enter as comma-separated values. Will be ignored if empty`,processInput:e=>e?e.split(",").map(Number):[]},{label:"At-risk counts",boxLabel:"Visible",type:"checkbox",chartType:"survival",settingsKey:"atRiskVisible",title:"Display the at-risk counts"},{label:"Default color",type:"color",chartType:"survival",settingsKey:"defaultColor"}]})};this.components.controls.on("downloadClick.survival",this.download)}}getState(e){const t=e.plots.find((e=>e.id===this.id));if(!t){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{isVisible:t.term.term.type=="survival"||t.term2&&t.term2.term.type=="survival",genome:this.app.vocabApi.vocab.genome,dslabel:this.app.vocabApi.vocab.dslabel,activeCohort:e.activeCohort,termfilter:e.termfilter,config:{term:JSON.parse(JSON.stringify(t.term)),term0:t.term0?JSON.parse(JSON.stringify(t.term0)):null,term2:t.term2?JSON.parse(JSON.stringify(t.term2)):null,settings:t.settings.survival},termdbConfig:e.termdbConfig}}async main(){try{if(!this.state.isVisible){this.dom.holder.style("display","none");return}if(this.dom.header)this.dom.header.html(this.state.config.term.term.name+` plot`);this.toggleLoadingDiv();Object.assign(this.settings,this.state.config.settings);this.settings.defaultHidden=this.getDefaultHidden();this.settings.hidden=this.settings.customHidden||this.settings.defaultHidden;this.settings.xTitleLabel=this.getXtitleLabel();const e=this.getDataRequestOpts();const t=await this.app.vocabApi.getNestedChartSeriesData(e);this.toggleLoadingDiv("none");this.serverData=t;this.app.vocabApi.syncTermData(this.state.config,t);this.currData=this.processData(t);this.refs=t.refs;this.pj.refresh({data:this.currData});this.setTerm2Color(this.pj.tree.charts);this.symbol=this.getSymbol(7);this.render()}catch(e){throw e}}getDataRequestOpts(){const e=this.state.config;const t={chartType:"survival",term:e.term,filter:this.state.termfilter.filter};if(e.term2)t.term2=e.term2;if(e.term0)t.term0=e.term0;if(this.state.ssid)t.ssid=this.state.ssid;return t}getDefaultHidden(){const e=[];const t=this.state.config.term2;if(!t)return e;const s=t.q.hiddenValues;if(s&&Object.keys(s).length){for(const i in s){e.push(t.term.values[i].label)}}return e}getXtitleLabel(){const e=this.state.config.term.term.type=="survival"?"term":"term2";const t=this.settings.timeUnit?this.settings.timeUnit:this.state.config[e].term.unit;const s=`Time to Event (${t})`;return s}processData(e){this.uniqueSeriesIds=new Set;const t=[];const s=["survival","lower","upper"];for(const i of e.case){const r={};e.keys.forEach(((e,t)=>{r[e]=s.includes(e)?Number(i[t]):i[t]}));r.time=r.time*this.settings.timeFactor;t.push(r);this.uniqueSeriesIds.add(r.seriesId)}this.tests={};if(e.tests){for(const t in e.tests){const s=e.tests[t];this.tests[t]=[];for(const e of s){if(this.settings.hidden.includes(e.series1)||this.settings.hidden.includes(e.series2))continue;this.tests[t].push({pvalue:{id:"pvalue",text:e.pvalue},series1:{id:e.series1},series2:{id:e.series2}})}if(!this.tests[t].length)delete this.tests[t]}}return t}setTerm2Color(e){if(!e)return;const s=this.state.config;const l=t({},s.term2?.term?.values||{},s.term2?.values||{});const o=this.refs.bins[2]&&[this.refs.bins[2]]||Object.values(l);this.term2toColor={};this.colorScale=this.uniqueSeriesIds.size<11?i(r):i(c);const d=[];for(const t of e){for(const e of t.serieses){const t=o.find((t=>t.seriesId===e.seriesId||t.key===e.seriesId||t.name===e.seriesId||t.label===e.seriesId));const s={orig:t?.color||(e.seriesId==""?this.settings.defaultColor:this.colorScale(e.seriesId))};s.rgb=a(s.orig);s.adjusted=s.rgb.toString();s.hex=n(s.adjusted);this.term2toColor[e.seriesId]=s;if(!d.find((t=>t.seriesId==e.seriesId))){d.push({key:e.seriesId,seriesId:e.seriesId,text:e.seriesLabel,color:this.term2toColor[e.seriesId].adjusted,isHidden:this.settings.hidden.includes(e.seriesId)})}}}if(this.refs.orderedKeys){const e=this.refs.orderedKeys.series;d.sort(((t,s)=>e.indexOf(t.seriesId)-e.indexOf(s.seriesId)))}this.legendValues={};d.forEach(((e,t)=>{this.legendValues[e.seriesId]={seriesId:e.seriesId,order:"order"in e?e.order:t,color:this.term2toColor[e.seriesId].orig}}));const p=this.state.config.term2?.values;if(p){d.sort(((e,t)=>{const s=p[e.seriesId];const i=p[t.seriesId];if(s&&i){if("order"in s&&"order"in i)return s.order-i.order;if(s.order)return s.order;if(i.order)return i.order;return 0}if(s)return s.order||0;if(i)return i.order||0;return e.order-t.order}));d.forEach(((e,t)=>{this.legendValues[e.seriesId].order=t}))}if((!s.term.term.type=="survival"||s.term2)&&d.length){const e=s.term.term.type=="survival"?"term2":"term";this.legendData=[{name:s[e].term.name,items:d.filter((e=>!e.isHidden))}];this.hiddenData=[{name:`<span style='color:#aaa; font-weight:400'><span>Hidden categories</span><span style='font-size:0.8rem'> CLICK TO SHOW</span></span>`,items:d.filter((e=>e.isHidden)).map((e=>Object.assign({},e,{isHidden:false})))}]}else{this.legendData=[]}for(const e in this.tests){const t=this.tests[e];for(const e of t){for(const t in e){if(t=="pvalue"){e[t].color="#000"}else{const s=d.find((s=>s.seriesId==e[t].id));e[t].color=s.color;e[t].text=s.text}}}}}toggleLoadingDiv(e=""){if(e!="none"){this.dom.loadingDiv.style("opacity",0).style("display",e).transition().duration("loadingWait"in this?this.loadingWait:0).style("opacity",1)}else{this.dom.loadingDiv.style("display",e)}this.loadingWait=1e3}}const w=e(j);const C=w;function S(e){e.render=function(){const t=e.pj.tree.charts||[{chartId:"No survival data"}];const s=e.dom.chartsDiv.selectAll(".pp-survival-chart").data(t,(e=>e.chartId));s.exit().remove();s.each(e.updateCharts);s.enter().each(e.addCharts);e.dom.holder.style("display","inline-block");e.dom.chartsDiv.on("mouseover",e.mouseover).on("mouseout",e.mouseout);e.legendRenderer(e.settings.atRiskVisible?[]:e.legendData);if(!e.hiddenData?.[0]?.items.length)e.dom.hiddenDiv.style("display","none");else{e.dom.hiddenDiv.style("display","");e.hiddenRenderer(e.hiddenData)}};const t=t=>{e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{hiddenPvalues:t}}}})};const s=t=>e.activeMenu=t;e.addCharts=function(a){const n=e.settings;i(a,n);const o=l(this).append("div").attr("class","pp-survival-chart").style("opacity",a.serieses?0:1).style("width","fit-content").style("display","inline-block").style("margin",n.chartMargin+"px").style("padding","10px").style("top",0).style("left",0).style("text-align","left").style("vertical-align","top");const d=o.append("div").style("width",n.svgw+50+"px").style("height",n.chartTitleDivHt+"px").style("text-align","center").style("font-weight","600").style("margin","5px").append("div").attr("class","sjpp-survival-title").style("display","inline-block").style("width","fit-content").datum(a).html((e=>e.chartId)).style("cursor","pointer").on("mouseover",(()=>d.style("text-decoration","underline"))).on("mouseout",(()=>d.style("text-decoration",""))).on("click",e.showMenuForSelectedChart);if(a.serieses){const i=o.append("svg").attr("class","pp-survival-svg");r(i,a,n,0);o.transition().duration(n.duration).style("opacity",1);o.append("div").attr("class","pp-survival-chartLegends").style("vertical-align","top").style("margin","10px 10px 10px 30px").style("display","none");if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}}};function i(e,t){e.visibleSerieses=e.serieses?.filter((e=>!t.hidden.includes(e.seriesId)))||[];const s=e.visibleSerieses.reduce(((e,t)=>t.seriesLabel&&t.seriesLabel.length>e?t.seriesLabel.length:e),0);e.atRiskLabelWidth=t.atRiskVisible?s*(t.axisTitleFontSize-2)*.4+t.atRiskLabelOffset:0}e.updateCharts=function(a){if(!a.serieses)return;const n=e.settings;i(a,n);const o=l(this);o.transition().duration(n.duration).style("width","fit-content");o.select(".sjpp-survival-title").style("width",n.svgw+50).style("height",n.chartTitleDivHt+"px").datum(a.chartId).html(a.chartId);o.selectAll(".sjpp-lock-icon").style("display",n.scale=="byChart"?"block":"none");o.selectAll(".sjpp-unlock-icon").style("display",n.scale=="byChart"?"none":"block");r(o.select("svg"),a,n,n.duration);o.select(".pp-survival-chartLegends").selectAll("*").remove();if(e.tests&&a.rawChartId in e.tests){const i=o.select(".pp-survival-chartLegends").style("display","inline-block").append("div");m({title:"Group comparisons (log-rank test)",holder:i,plot:"survival",tests:e.tests[a.rawChartId],s:n,bins:e.refs.bins,tip:e.app.tip,setActiveMenu:s,updateHiddenPvalues:t})}};function r(t,s,i,r){const o=i.atRiskVisible?i.axisTitleFontSize+4+s.visibleSerieses.length*2*(i.axisTitleFontSize+4):0;t.transition().duration(r).attr("width",i.svgw+s.atRiskLabelWidth).attr("height",i.svgh+o).style("overflow","visible").style("padding-left","20px");const[d,p,h,u,v,m,f,y,b]=a(t);const x=s.atRiskLabelWidth+i.svgPadding.left;d.attr("transform","translate("+x+","+i.svgPadding.top+")");const I=p.selectAll(".sjpp-survival-series").data(s.visibleSerieses,(e=>e&&e[0]?e[0].seriesId:""));I.exit().remove();I.each((function(e,t){n(l(this),s,e,t,i,i.duration)}));I.enter().append("g").attr("class","sjpp-survival-series").each((function(e,t){n(l(this),s,e,t,i)}));c(u,m,v,f,i,s);g({g:y,s:i,chart:s,term2values:e.state.config.term2?.values,term2toColor:e.term2toColor,onSerieClick:e.legendClick});b.attr("x",0).attr("width",i.svgw-i.svgPadding.left-i.svgPadding.right).attr("y",0).attr("height",i.svgh-i.svgPadding.top-i.svgPadding.bottom+i.xAxisOffset);t.seriesTip.update({xScale:s.xScale,xTitleLabel:i.xTitleLabel,decimals:i.seriesTipDecimals,serieses:s.visibleSerieses.map((t=>{const s=`${t.seriesLabel||"Probability"}:`;const i=e.term2toColor[t.seriesId].adjusted||"#000";return{data:t.data.map((e=>({x:e.x,html:`<span style='color: ${i}'>`+`${s} ${(100*e.y).toFixed(2)}% (${(100*e.lower).toFixed(2)} - ${(100*e.upper).toFixed(2)})`+`</span>`})))}}))})}function a(t,s){let i,r,a,n,l,o,d,c,p,h;if(!t.select(".sjpp-survival-mainG").size()){i=t.append("g").attr("class","sjpp-survival-mainG");r=i.append("g").attr("class","sjpcb-survival-seriesesG");a=i.append("g").attr("class","sjpp-survival-axis");n=a.append("g").attr("class","sjpp-survival-x-axis");l=a.append("g").attr("class","sjpp-survival-y-axis");o=a.append("g").attr("class","sjpp-survival-x-title");d=a.append("g").attr("class","sjpp-survival-y-title");c=i.append("g").attr("class","sjpp-survival-atrisk");h=i.append("line").attr("class","sjpcb-plot-tip-line").attr("stroke","#000").attr("stroke-width","1px");p=i.append("rect").attr("class","sjpcb-plot-tip-rect").style("fill","transparent")}else{i=t.select(".sjpp-survival-mainG");r=i.select(".sjpcb-survival-seriesesG");a=i.select(".sjpp-survival-axis");n=a.select(".sjpp-survival-x-axis");l=a.select(".sjpp-survival-y-axis");o=a.select(".sjpp-survival-x-title");d=a.select(".sjpp-survival-y-title");c=i.select(".sjpp-survival-atrisk");p=i.select(".sjpcb-plot-tip-rect");h=i.select(".sjpcb-plot-tip-line")}if(!t.seriesTip){t.seriesTip=f(h,p,e.app?.tip)}return[i,r,a,n,l,o,d,c,p]}function n(t,s,i,r,a,n){t.selectAll("path").remove();t.append("path").attr("d",x().curve(v).x((e=>e.scaledX)).y0((e=>e.scaledY[1])).y1((e=>e.scaledY[2]))(i.data)).style("display",a.ciVisible?"":"none").style("fill",e.term2toColor[i.seriesId].adjusted).style("opacity","0.15").style("stroke","none");d(a,t,i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.y,scaledX:e.scaledX,scaledY:e.scaledY[0],seriesName:"survival",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:e.ncensor,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.lower,scaledX:e.scaledX,scaledY:e.scaledY[1],seriesName:"lower",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))));d(a,t.append("g"),i.data.map((e=>({seriesId:e.seriesId,x:e.x,y:e.upper,scaledX:e.scaledX,scaledY:e.scaledY[2],seriesName:"upper",seriesLabel:i.seriesLabel,nevent:e.nevent,ncensor:0,nrisk:e.nrisk}))))}function d(t,s,i){s.selectAll("g").remove();const r=i.filter(((e,t)=>t===0||e.nevent||t===i.length-1));const a=i.filter((e=>e.ncensor));s.append("g");const n=i[0].seriesName;const l=e.term2toColor[i[0].seriesId].adjusted;if(n=="survival"){s.append("path").attr("d",e.lineFxn(r)).style("fill","none").style("stroke",l).style("opacity",1).style("stroke-opacity",1)}const o=s.append("g").attr("class","sjpp-survival-censored");const d=o.selectAll(".sjpp-survival-censored-x").data(a,(e=>e.x));d.exit().remove();d.attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).style("stroke",l).style("display","");d.enter().append("path").attr("class","sjpp-survival-censored-x").attr("transform",(e=>`translate(${e.scaledX},${e.scaledY})`)).attr("d",e.symbol).style("fill","transparent").style("fill-opacity",t.fillOpacity).style("stroke",l).style("display","")}function c(e,t,s,i,r,a){let n;if(r.xTickValues?.length){a.xTickValues=r.xTickValues.filter((e=>e===0||e>=a.xMin&&e<=a.xMax));n=I(a.xScale).tickValues(a.xTickValues)}else{a.xTickValues=[];n=I(a.xScale).ticks(4).tickFormat((e=>{a.xTickValues.push(e);return e}))}const l=-.5;e.attr("transform",`translate(${l}, ${r.svgh-r.svgPadding.top-r.svgPadding.bottom+r.xAxisOffset+l})`).call(n);s.attr("transform",`translate(${r.yAxisOffset+l}, ${l})`).call(k(o().domain(a.yScale.domain()).range(a.yScale.range())).ticks(5));t.select("text, title").remove();t.attr("transform","translate("+(r.svgw-r.svgPadding.left-r.svgPadding.right)/2+","+(r.svgh-r.axisTitleFontSize-4)+")").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(r.xTitleLabel);const d="Probability of Survival";i.select("text, title").remove();i.attr("transform","translate("+(-r.svgPadding.left/2-r.axisTitleFontSize)+","+(r.svgh-r.svgPadding.top-r.svgPadding.bottom)/2+")rotate(-90)").append("text").style("text-anchor","middle").style("font-size",r.axisTitleFontSize+"px").text(d)}e.getSymbol=function(t){const s=t,i=s/2;switch(e.settings.symbol){case"x":return`M -${i},-${i} l ${s},${s} M ${i},-${i} l -${s},${s}`;case"vtick":return`M 0,-${i} L 0,${i}`;default:throw`Unrecognized survival plot symbol='${e.settings.symbol}'`}}}function T(e){e.download=function(){if(!e.state)return;y(e.dom.chartsDiv.selectAll(".sjpp-survival-mainG"),"Survival_Plot",e.dom.chartsDiv.select(".pp-survival-chart").node())};e.mouseover=function(e){e.target.__data__};e.mouseout=function(){if(e.activeMenu)return;e.app.tip.hide()};e.legendClick=function(t,s,i){if(t===undefined)return;const r=e.settings.hidden.slice();const a=r.indexOf(t.seriesId);if(a==-1){r.push(t.seriesId);e.showLegendItemMenu(t,r,s,i)}else{r.splice(a,1);e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:r}}}})}};e.showLegendItemMenu=function(t,s,i,r){const a=e.state.config.term2?.term||null;const n=a?.values?.[t.seriesId]?.label||t.seriesId;const o=`<div style='padding-bottom:8px'><b>${n}</b></div>`;const d=t.seriesId||t.seriesId===0?t:{seriesId:t.id,dataId:t.dataId};if(!d.seriesId&&!d.dataId){if(!a){const s=e.dom.legendTip.clear().d.append("div").html("Edit color: ");const a=s.append("input").attr("type","color").attr("value",e.settings.defaultColor).on("change",(()=>e.adjustColor(a.property("value"),t)));e.dom.legendTip.show(i,r)}return}const c=[];c.push({label:"Hide",callback:()=>{p.hide();e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{customHidden:s}}}})}});if(e.legendData[0]?.items.length>1){c.push({label:"Move&nbsp;",setInput:s=>{const i=e.legendValues[t.seriesId].order;if(i!=0)s.append("button").html("up").on("click",(()=>{p.hide();e.adjustValueOrder(t,-1)}));if(i<e.legendData[0]?.items.length-1)s.append("button").html("down").on("click",(()=>{p.hide();e.adjustValueOrder(t,1)}))}})}c.push({setInput:s=>{const i=s.append("div");i.html("Edit color: ");const r=i.append("input").attr("type","color").attr("value",e.term2toColor[t.seriesId].hex).on("change",(()=>e.adjustColor(r.property("value"),t)))}});if(!c.length)return;const p=e.dom.legendTip.clear();p.d.append("div").html(o);p.d.append("div").selectAll("div").data(c).enter().append("div").attr("class",(e=>e.label=="Hide"?"sja_menuoption":"sja_menuoption_not_interactive")).on("click",((s,i)=>{if(i.setInput)return;e.app.tip.hide();i.callback(t)})).each((function(e){const t=l(this);if(e.label)t.append("div").style("display","inline-block").html(e.label);if(e.setInput)e.setInput(t.append("div").style("display","inline-block"))}));p.show(event.clientX,event.clientY)};e.adjustValueOrder=(t,s)=>{const i=JSON.parse(JSON.stringify(e.state.config.term2?.values||e.legendValues));if(!i[t.seriesId]){i[t.seriesId]=Object.assign({},e.state.config.term2?.term?.values||{})}for(const t in i){if(!("order"in i[t]))i[t].order=e.legendValues[t].order}const r=i[t.seriesId];r.order+=s;for(const e in i){if(e==t.seriesId)continue;if("order"in i[e]&&i[e].order===r.order){i[e].order+=-1*s;break}}const a=JSON.parse(JSON.stringify(e.state.config.term2));a.values=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}});e.app.tip.hide()};e.adjustColor=(t,s)=>{const i=a(t).formatHex();const r=e.state.config.term2;if(!r){e.app.dispatch({type:"plot_edit",id:e.id,config:{settings:{survival:{defaultColor:i}}}})}else{const t=structuredClone(r?.term.values||e.legendValues);const a=structuredClone(r);a.term.values=t;if(!t)a.term.values={[s.seriesId]:{}};a.term.values[s.seriesId].color=i;e.app.dispatch({type:"plot_edit",id:e.id,config:{term2:a}})}e.app.tip.hide()};e.showMenuForSelectedChart=function(){e.dom.tip.clear();e.activeMenu=true;e.dom.tip.showunder(this).d.append("button").html("Download SVG").on("click",(()=>{if(!e.state)return;const t=l(this.closest(".pp-survival-chart"));y(t.select(".sjpp-survival-mainG"),"Survival_Plot",t.node())}))}}async function D(e,s){if(!e.term)throw"survival getPlotConfig: opts.term{} missing";try{await u(e.term,s.vocabApi);if(e.term2)await u(e.term2,s.vocabApi);if(e.term0)await u(e.term0,s.vocabApi)}catch(e){throw`${e} [survival getPlotConfig()]`}const i={id:e.term.term.id,settings:{controls:{term2:null,term0:null},survival:{radius:5,ciVisible:false,fill:"#fff",stroke:"#000",symbol:"vtick",fillOpacity:0,chartMargin:10,svgw:400,svgh:300,timeFactor:1,timeUnit:"",atRiskVisible:true,atRiskLabelOffset:-20,xTickValues:[],seriesTipDecimals:1,svgPadding:{top:20,left:55,right:20,bottom:50},axisTitleFontSize:16,xAxisOffset:5,yAxisOffset:-5,hiddenPvalues:[],defaultColor:"#2077b4"}}};return t(i,e)}function O(e){const t=new h({template:{yMin:">=yMin()",yMax:"<=yMax()",charts:[{chartId:"@key",rawChartId:"$chartId",xMin:">$time",xMax:"<$time","__:xScale":"=xScale()","__:yScale":"=yScale()",yMin:">=yMin()",yMax:"<=yMax()",serieses:[{chartId:"@parent.@parent.@key",seriesId:"@key","__:seriesLabel":"=seriesLabel()",data:[{"__:seriesId":"@parent.@parent.seriesId",x:"$time",y:"$survival",lower:"$lower",upper:"$upper","_1:scaledX":"=scaledX()","_1:scaledY":"=scaledY()",nevent:"$nevent",ncensor:"$ncensor",nrisk:"$nrisk"},"=timeCensored()"]},"$seriesId"],"@done()":"=sortSerieses()"},"=chartTitle()"],"@done()":"=sortCharts()"},"=":{chartTitle(t){e.settings;if(!t.chartId||t.chartId=="-"){const t=e.state.config.term.term.type=="survival"?"term":"term2";return e.state.config[t].term.name}const s=e.state.config.term0;if(!s||!s.term.values)return t.chartId;if(s.q&&s.q.groupsetting&&s.q.groupsetting.inuse){return t.chartId}const i=e.state.config.term0.term.values[t.chartId];return i&&i.label?i.label:t.chartId},seriesLabel(t,s){const i=e.state.config.term2;if(!i)return;const r=s.self.seriesId;if(i&&i.q&&i.q.groupsetting&&i.q.groupsetting.inuse)return r;if(i&&i.term.values&&r in i.term.values)return i.term.values[r].label;return r},timeCensored(e){return e.time+"-"+e.ncensor},y(e,t){const s=t.context.parent.seriesId;return s=="CI"?[e.lower,e.upper]:e[s]},yMin(e){return e.lower},yMax(e){return e.upper},xScale(t,s){const i=e.settings;i.method==2?0:s.self.xMin;return o().domain([0,s.self.xMax]).range([0,i.svgw-i.svgPadding.left-i.svgPadding.right])},scaledX(e,t){return t.context.context.context.parent.xScale(t.self.x)},scaledY(e,t){const s=t.context.context.context.parent.yScale;const i=t.self;return[s(i.y),s(i.lower),s(i.upper)]},yScale(t,s){const i=e.settings;i.scale=="byChart"?s.self.yMax:s.root.yMax;const r=[1.05,0];return o().domain(r).range([0,i.svgh-i.svgPadding.top-i.svgPadding.bottom])},sortSerieses(t){for(const e of t.serieses){e.data.sort(((e,t)=>e.x<t.x?-1:1))}if(e.refs.orderedKeys){const s=e.refs.orderedKeys.series;t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}if(e.refs.bins){const s=e.refs.bins.map((e=>e.label));t.serieses.sort(((e,t)=>s.indexOf(e.seriesId)-s.indexOf(t.seriesId)))}},sortCharts(t){if(!e.refs.orderedKeys)return;const s=e.refs.orderedKeys.chart;t.charts.sort(((e,t)=>s.indexOf(e.chartId)-s.indexOf(t.chartId)))}}});return t}export{C as componentInit,D as getPlotConfig,w as survivalInit};
@@ -1 +1 @@
1
- import{q as t,aU as e}from"./app-f91922b4.js";function o(t,e,o){if(o){const e=window.getComputedStyle(o);for(const o of e){if(o.startsWith("font"))t.style(o,e.getPropertyValue(o))}}const n=document.createElement("a");n.setAttribute("download",e);document.body.appendChild(n);n.click();n.remove();const s=new XMLSerializer;const i=new Blob([s.serializeToString(t.node())],{type:"image/svg+xml"});n.href=URL.createObjectURL(i);n.click();n.remove()}function n(o,n,s=null){const i=[];const r={x:undefined,y:undefined};const a=[];let l=0,c=0,d=0;let f=0,h=0;o.each((function(){i.push(this);const e=this.getBBox();if(e.width>l)l=e.width;if(e.height>c)c=e.height;const o=Math.round(this.parentNode.parentNode.getBoundingClientRect().y);if(!h){f=o;h++}else if(Math.abs(o-f)<5){h++}const n=t(this).attr("transform").split("translate(")[1].split(")")[0].split(",").map((t=>+t.trim()));if(r.x===undefined||n[0]>r.x)r.x=+n[0];if(r.y===undefined||n[1]>r.y)r.y=+n[1];const s=this.parentNode.parentNode.firstChild;const p=s.getBoundingClientRect();if(p.width>l)l=p.width;if(p.height>d)d=p.height;a.push({text:s.innerText,styles:window.getComputedStyle(s),tbox:p})}));l+=80;c+=80;const p=document.createElementNS("http://www.w3.org/2000/svg","svg");const y=t(p).style("display","block").style("opacity",1).attr("width",h*l).attr("height",Math.floor(i.length/h)*c);if(s){const t=window.getComputedStyle(s);for(const e of t){if(e.startsWith("font"))y.style(e,t.getPropertyValue(e))}}i.forEach(((e,o)=>{const n=e.cloneNode(true);const s=o%h;const i=Math.floor(o/h);const f={x:s*l+r.x+80,y:i*c+r.y};const y=t(p).append("text").attr("transform","translate("+(f.x+a[o].tbox.width/2-100)+","+f.y+")").text(a[o].text);for(const t of a[o].styles){if(t.startsWith("font"))y.style(t,a[o].styles.getPropertyValue(t))}t(n).attr("transform","translate("+f.x+","+(f.y+d)+")");p.appendChild(n)}));e(p,n,{apply_dom_styles:true})}export{n as a,o as d};
1
+ import{q as t,aU as e}from"./app-71453429.js";function o(t,e,o){if(o){const e=window.getComputedStyle(o);for(const o of e){if(o.startsWith("font"))t.style(o,e.getPropertyValue(o))}}const n=document.createElement("a");n.setAttribute("download",e);document.body.appendChild(n);n.click();n.remove();const s=new XMLSerializer;const i=new Blob([s.serializeToString(t.node())],{type:"image/svg+xml"});n.href=URL.createObjectURL(i);n.click();n.remove()}function n(o,n,s=null){const i=[];const r={x:undefined,y:undefined};const a=[];let l=0,c=0,d=0;let f=0,h=0;o.each((function(){i.push(this);const e=this.getBBox();if(e.width>l)l=e.width;if(e.height>c)c=e.height;const o=Math.round(this.parentNode.parentNode.getBoundingClientRect().y);if(!h){f=o;h++}else if(Math.abs(o-f)<5){h++}const n=t(this).attr("transform").split("translate(")[1].split(")")[0].split(",").map((t=>+t.trim()));if(r.x===undefined||n[0]>r.x)r.x=+n[0];if(r.y===undefined||n[1]>r.y)r.y=+n[1];const s=this.parentNode.parentNode.firstChild;const p=s.getBoundingClientRect();if(p.width>l)l=p.width;if(p.height>d)d=p.height;a.push({text:s.innerText,styles:window.getComputedStyle(s),tbox:p})}));l+=80;c+=80;const p=document.createElementNS("http://www.w3.org/2000/svg","svg");const y=t(p).style("display","block").style("opacity",1).attr("width",h*l).attr("height",Math.floor(i.length/h)*c);if(s){const t=window.getComputedStyle(s);for(const e of t){if(e.startsWith("font"))y.style(e,t.getPropertyValue(e))}}i.forEach(((e,o)=>{const n=e.cloneNode(true);const s=o%h;const i=Math.floor(o/h);const f={x:s*l+r.x+80,y:i*c+r.y};const y=t(p).append("text").attr("transform","translate("+(f.x+a[o].tbox.width/2-100)+","+f.y+")").text(a[o].text);for(const t of a[o].styles){if(t.startsWith("font"))y.style(t,a[o].styles.getPropertyValue(t))}t(n).attr("transform","translate("+f.x+","+(f.y+d)+")");p.appendChild(n)}));e(p,n,{apply_dom_styles:true})}export{n as a,o as d};
@@ -1 +1 @@
1
- import{q as t}from"./app-f91922b4.js";function e(e){let a=0;let r=0;const i={ontop:false,lineh:25,padx:5,padleft:0,padright:20,padbtm:30,fontsize:12,iconh:10,iconw:10,hangleft:1,linesep:false,mutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"],itemOpacity:1};const s=Object.assign(i,e.settings||{});function o(t,n={}){Object.assign(s,n.settings||{});a=s.padleft;r=0;e.holder.selectAll("g").remove();e.holder.selectAll("text").remove();const i=s.dimensions;if(!e.holder.attr("transform")){e.holder.attr("transform",s.ontop?null:`translate(${i.xOffset},${s.svgh})`)}if(e.note){e.holder.append("text").style("font-size","0.8em").text(e.note).attr("transform",`translate(-135, 15)`).attr("font-style","italic")}const o=e.holder.selectAll("g").data(t);o.exit().remove();o.enter().append("g").each(l);return r+s.lineh+s.padbtm}function l(e,n){if(!e.items||!e.items.length)return;a=0;r+=s.lineh;let i=t(this).style("opacity",e.crossedOut?"0.6":1);const o=s.hangleft?s.padleft+s.hangleft-s.padx:s.padleft;const l=i.append("text").attr("transform","translate("+o+","+(r+s.iconh/2)+")").attr("text-anchor",s.hangleft?"end":"start").attr("font-weight",700).attr("font-size",s.fontsize).attr("dominant-baseline","central").text(e.name).style("text-decoration",e.crossedOut?"line-through":"");if(s.linesep){a=s.padleft;r+=s.lineh}else if(e.hasScale){a=o-2*s.padx+2}else if(s.hangleft){a=o+2*s.padx}else{a+=s.padleft+l.node().getBBox().width+2*s.padx}if(e.sorter)e.items.sort(e.sorter);if(e.d&&e.d.renderAs=="colorScale"){setColorBarLegend(i,e,n)}else{i.selectAll("g").data(e.items).enter().append("g").each(d)}const c=l.node().getBBox();if(Math.abs(c.y+c.height/2)>1){l.attr("y",c.height/4)}}function d(i,o){const l=t(this).attr("transform","translate("+a+","+r+")").style("opacity",s.itemOpacity).style("opacity",i.greyedOut?"0.6":1);const d=l.append("text").attr("transform","translate("+(s.iconw+s.padx/2)+","+s.iconh/2+")").attr("font-size",s.fontsize).attr("dominant-baseline","central").style("cursor","default").style("text-decoration",s.exclude&&s.exclude.classes&&s.exclude.classes.includes(i.class)||i.crossedOut?"line-through":"");d.each((function(e){const a=t(this);if(s.isExcludedAttr&&e[s.isExcludedAttr]){a.style("text-decoration","line-through").style("opacity",.5)}if(typeof e.text=="string"){a.text(e.text)}else if(Array.isArray(e.text)){a.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(a,n){if(n==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}if(e.onClickCallback){a.on("click",(()=>e.onClickCallback(e,a)));a.style("cursor","pointer")}}));const c=d.node().getBBox();const h=i.width||s.iconw;a+=c.width+h;if(s.linesep||a>s.svgw-s.padright){r+=s.lineh;const t=!s.hangleft?s.padleft:s.padleft+s.hangleft+s.padx;l.attr("transform","translate("+t+","+r+")");a=c.width+h+s.padleft;if(s.hangleft)a=s.iconw+c.width+t;else a=h+c.width+s.padleft}const f=s.fontsize-c.height+(c.height-s.iconh)/2;let p,x;if(i.domain){p=`sjpp-linear-gradient-${n()}`;l.append("linearGradient").attr("id",p).attr("x1","0%").attr("x2","100%").attr("y1","0%").attr("y2","0%").selectAll("stop").data(i.domain.length>2?i.domain:i.domain[0]<i.domain[1]?[0,1]:[1,0]).enter().append("stop").attr("offset",((t,e)=>`${t*100}%`)).attr("stop-color",(t=>i.scale?i.scale(t):"grey")).attr("stop-opacity",1);const t=l.append("text").text(i.minLabel||i.domain[0]).attr("x",c.width+25).attr("y",.82*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");x=t.node().getBBox();a+=x.width+5;l.append("rect").attr("height",s.iconh).attr("width",h).attr("x",c.width+x.width+30).attr("y",f).attr("fill",p?`url(#${p})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");const r=l.append("text").text(i.maxLabel||i.domain[1]).attr("x",c.width+x.width+135).attr("y",.8*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");a+=r.node().getBBox().width+2.5*s.padx+50}else{l.append("rect").attr("height",s.iconh).attr("width",h).attr("y",f).attr("fill",p?`url(#${p})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");a+=2.5*s.padx}if(Math.abs(c.y+c.height/2)>1){d.attr("y",c.height/4)}}return o}let a=0;function n(){return`${a++}-${Date.now().toString().slice(-6)}-${Math.random().toString().slice(-6)}`}export{e as s};
1
+ import{q as t}from"./app-71453429.js";function e(e){let a=0;let r=0;const i={ontop:false,lineh:25,padx:5,padleft:0,padright:20,padbtm:30,fontsize:12,iconh:10,iconw:10,hangleft:1,linesep:false,mutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"],itemOpacity:1};const s=Object.assign(i,e.settings||{});function o(t,n={}){Object.assign(s,n.settings||{});a=s.padleft;r=0;e.holder.selectAll("g").remove();e.holder.selectAll("text").remove();const i=s.dimensions;if(!e.holder.attr("transform")){e.holder.attr("transform",s.ontop?null:`translate(${i.xOffset},${s.svgh})`)}if(e.note){e.holder.append("text").style("font-size","0.8em").text(e.note).attr("transform",`translate(-135, 15)`).attr("font-style","italic")}const o=e.holder.selectAll("g").data(t);o.exit().remove();o.enter().append("g").each(l);return r+s.lineh+s.padbtm}function l(e,n){if(!e.items||!e.items.length)return;a=0;r+=s.lineh;let i=t(this).style("opacity",e.crossedOut?"0.6":1);const o=s.hangleft?s.padleft+s.hangleft-s.padx:s.padleft;const l=i.append("text").attr("transform","translate("+o+","+(r+s.iconh/2)+")").attr("text-anchor",s.hangleft?"end":"start").attr("font-weight",700).attr("font-size",s.fontsize).attr("dominant-baseline","central").text(e.name).style("text-decoration",e.crossedOut?"line-through":"");if(s.linesep){a=s.padleft;r+=s.lineh}else if(e.hasScale){a=o-2*s.padx+2}else if(s.hangleft){a=o+2*s.padx}else{a+=s.padleft+l.node().getBBox().width+2*s.padx}if(e.sorter)e.items.sort(e.sorter);if(e.d&&e.d.renderAs=="colorScale"){setColorBarLegend(i,e,n)}else{i.selectAll("g").data(e.items).enter().append("g").each(d)}const c=l.node().getBBox();if(Math.abs(c.y+c.height/2)>1){l.attr("y",c.height/4)}}function d(i,o){const l=t(this).attr("transform","translate("+a+","+r+")").style("opacity",s.itemOpacity).style("opacity",i.greyedOut?"0.6":1);const d=l.append("text").attr("transform","translate("+(s.iconw+s.padx/2)+","+s.iconh/2+")").attr("font-size",s.fontsize).attr("dominant-baseline","central").style("cursor","default").style("text-decoration",s.exclude&&s.exclude.classes&&s.exclude.classes.includes(i.class)||i.crossedOut?"line-through":"");d.each((function(e){const a=t(this);if(s.isExcludedAttr&&e[s.isExcludedAttr]){a.style("text-decoration","line-through").style("opacity",.5)}if(typeof e.text=="string"){a.text(e.text)}else if(Array.isArray(e.text)){a.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(a,n){if(n==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}if(e.onClickCallback){a.on("click",(()=>e.onClickCallback(e,a)));a.style("cursor","pointer")}}));const c=d.node().getBBox();const h=i.width||s.iconw;a+=c.width+h;if(s.linesep||a>s.svgw-s.padright){r+=s.lineh;const t=!s.hangleft?s.padleft:s.padleft+s.hangleft+s.padx;l.attr("transform","translate("+t+","+r+")");a=c.width+h+s.padleft;if(s.hangleft)a=s.iconw+c.width+t;else a=h+c.width+s.padleft}const p=s.fontsize-c.height+(c.height-s.iconh)/2;let f,x;if(i.domain){f=`sjpp-linear-gradient-${n()}`;l.append("linearGradient").attr("id",f).attr("x1","0%").attr("x2","100%").attr("y1","0%").attr("y2","0%").selectAll("stop").data(i.domain.length>2?i.domain:i.domain[0]<i.domain[1]?[0,1]:[1,0]).enter().append("stop").attr("offset",((t,e)=>`${t*100}%`)).attr("stop-color",(t=>i.scale?i.scale(t):"grey")).attr("stop-opacity",1);const t=l.append("text").text(i.minLabel||i.domain[0]).attr("x",c.width+25).attr("y",.82*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");x=t.node().getBBox();a+=x.width+5;l.append("rect").attr("height",s.iconh).attr("width",h).attr("x",c.width+x.width+30).attr("y",p).attr("fill",f?`url(#${f})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");const r=l.append("text").text(i.maxLabel||i.domain[1]).attr("x",c.width+x.width+135).attr("y",.8*s.fontsize).style("font-size",s.fontsize).attr("text-anchor","start");a+=r.node().getBBox().width+2.5*s.padx+50}else{l.append("rect").attr("height",s.iconh).attr("width",h).attr("y",p).attr("fill",f?`url(#${f})`:e.rectFillFxn).attr("stroke",e.iconStroke).attr("shape-rendering","crispEdges");a+=2.5*s.padx}if(Math.abs(c.y+c.height/2)>1){d.attr("y",c.height/4)}}return o}let a=0;function n(){return`${a++}-${Date.now().toString().slice(-6)}-${Math.random().toString().slice(-6)}`}export{e as s};
@@ -1 +1 @@
1
- import{q as t,M as e,S as n,t as a,am as r,bC as i,l as o,p as s,bD as l,x as f,u as d,k as p,g as c,h as m,aU as h,o as u,w as g}from"./app-f91922b4.js";import{p as x}from"./pointer-c7475677.js";import{c as b,j as w,s as y,x as k,y as v}from"./y-2d48b9e4.js";function M(t){return t.index}function A(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function _(t){var e=M,n=p,a,r=b(30),i,o,s,l,f,d=1;if(t==null)t=[];function p(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function c(e){for(var n=0,r=t.length;n<d;++n){for(var o=0,s,p,c,m,h,u,g;o<r;++o){s=t[o],p=s.source,c=s.target;m=c.x+c.vx-p.x-p.vx||w(f);h=c.y+c.vy-p.y-p.vy||w(f);u=Math.sqrt(m*m+h*h);u=(u-i[o])/u*e*a[o];m*=u,h*=u;c.vx-=m*(g=l[o]);c.vy-=h*g;p.vx+=m*(g=1-g);p.vy+=h*g}}}function m(){if(!o)return;var n,r=o.length,f=t.length,d=new Map(o.map(((t,n)=>[e(t,n,o),t]))),p;for(n=0,s=new Array(r);n<f;++n){p=t[n],p.index=n;if(typeof p.source!=="object")p.source=A(d,p.source);if(typeof p.target!=="object")p.target=A(d,p.target);s[p.source.index]=(s[p.source.index]||0)+1;s[p.target.index]=(s[p.target.index]||0)+1}for(n=0,l=new Array(f);n<f;++n){p=t[n],l[n]=s[p.source.index]/(s[p.source.index]+s[p.target.index])}a=new Array(f),h();i=new Array(f),u()}function h(){if(!o)return;for(var e=0,r=t.length;e<r;++e){a[e]=+n(t[e],e,t)}}function u(){if(!o)return;for(var e=0,n=t.length;e<n;++e){i[e]=+r(t[e],e,t)}}c.initialize=function(t,e){o=t;f=e;m()};c.links=function(e){return arguments.length?(t=e,m(),c):t};c.id=function(t){return arguments.length?(e=t,c):e};c.iterations=function(t){return arguments.length?(d=+t,c):d};c.strength=function(t){return arguments.length?(n=typeof t==="function"?t:b(+t),h(),c):n};c.distance=function(t){return arguments.length?(r=typeof t==="function"?t:b(+t),u(),c):r};return c}function z(e,n,a,r,i){let o=0;let s=0;let l;let f;p();function d(t){f=t;o=e.legendpadleft;s=0;t.selectAll("g").remove();t.attr("transform",e.legendontop?null:"translate(0,"+e.svgh+")").on("mouseover.tphm2",e.handlers.legend.mouseover);const n=t.selectAll("g").data(e.h.legend);n.exit().remove();n.enter().append("g").each(c);return s+e.legendlineh+e.legendpadbtm}function p(){l={legendontop:true,legendh:0,legendlineh:25,legendpadx:5,legendpadleft:150,legendpadright:20,legendpadbtm:30,legendfontsize:12,legendiconh:10,legendiconw:10,samplecount4legend:true,legendhangleft:1,legendlinesep:false,legendmutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"]};for(let t in l){if(!(t in e))e[t]=l[t]}}function c(n,a){if(!n.items||!n.items.length)return;o=0;s+=e.legendlineh;let r=t(this);const i=e.legendhangleft?e.legendpadleft+e.legendhangleft-e.legendpadx:e.legendpadleft;const l=r.append("text").attr("transform","translate("+i+","+(s+e.legendiconh/2)+")").attr("text-anchor",e.legendhangleft?"end":"start").attr("font-weight",700).attr("font-size",e.legendfontsize).attr("dominant-baseline","central").text(n.text+(e.samplecount4legend?" (sample count)":""));if(e.linesep){o=e.legendpadleft;s+=e.legendlineh}else if(e.legendhangleft){o=i+2*e.legendpadx}else{o+=e.legendpadleft+l.node().getBBox().width+2*e.legendpadx}if(n.sorter)n.items.sort(n.sorter);r.selectAll("g").data(n.items).enter().append("g").each(m)}function m(l,f){let d=t(this).attr("transform","translate("+o+","+s+")").style("opacity",i);const p=d.append("text").attr("transform","translate("+(e.legendiconw+e.legendpadx/2)+","+e.legendiconh/2+")").attr("font-size",e.legendfontsize).attr("dominant-baseline","central").each((function(e){const n=t(this);if(typeof e.text=="string"){n.text(a(e))}else if(Array.isArray(e.text)){n.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(n,a){if(a==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}}));const c=p.node().getBBox();o+=e.legendiconw+c.width+2.5*e.legendpadx;if(e.legendlinesep||o>e.svgw-e.legendpadright){s+=e.legendlineh;const t=!e.legendhangleft?e.legendpadleft:e.legendpadleft+e.legendhangleft+e.legendpadx;d.attr("transform","translate("+t+","+s+")");o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft;if(e.legendhangleft)o=e.legendiconw+c.width+2.5*e.legendpadx+t;else o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft}d.append("rect").attr("height",e.legendiconh).attr("width",e.legendiconw).attr("y",e.legendfontsize-c.height+(c.height-e.legendiconh)/2).attr("fill",n).attr("stroke",r).attr("shape-rendering","crispEdges")}d.defaults=l;d.finalizePos=function(t){f.transition().duration(e.duration).attr("transform",e.legendontop?null:"translate(0,"+(e.svgh+t)+")")};return d}function T(g){const b="#ddd";const w=g.pairlst;const M=g.genome;const A=g.holder.append("div");const T=g.holder.append("div");const S=g.holder.append("div").style("display","inline-block").style("border","solid 1px "+b);const E=S.append("div").style("margin","10px");const j=S.append("div").style("margin-top","5px").style("padding","10px 20px").style("background-color","#ededed");const N=S.append("div").style("margin","10px").style("display","none");const R=new e({padding:"10px"});function q(t){u(A,t)}const L=new Set;const C=[];for(const t of w){if(t.a.gm){const e=t.a.gm.isoform;if(M.isoformcache.has(e)){t.a.gm=M.isoformmatch(e,t.a.chr,t.a.position)}else{L.add(e);C.push(t.a)}}if(t.b.gm){const e=t.b.gm.isoform;if(M.isoformcache.has(e)){t.b.gm=M.isoformmatch(e,t.b.chr,t.b.position)}else{L.add(e);C.push(t.b)}}}if(L.size==0){F();return}const P=[];for(const t of L){P.push(t)}n("isoformlst",{method:"POST",body:JSON.stringify({genome:M.name,lst:P})}).then((t=>{if(t.error)throw{message:t.error};for(const e of t.lst){if(e[0]){M.isoformcache.set(e[0].isoform.toUpperCase(),e)}}const e=[];for(const t of C){const n=M.isoformmatch(t.gm.isoform,t.chr,t.position);if(!n){e.push(t.gm.isoform);delete t.gm}else{t.gm=n}}if(e.length){q("invalid isoform: "+e.join(","))}F()})).catch((t=>{q(t.message);if(t.stack)console.log(t.stack)}));async function F(){for(const t of w){if(t.a.strand==undefined){t.a.strand=t.a.gm.strand}if(t.b.strand==undefined){t.b.strand=t.b.gm.strand}}for(const t of w){let e=B(t.a);if(e){return q(e)}e=B(t.b);if(e){return q(e)}}for(let t=1;t<w.length;t++){const e=w[t].a;const n=w[t-1].b;if(e.chr!=n.chr)return q("Error: mismatched chromosome at multi-seg breakpoint "+t+": "+e.chr+" != "+n.chr);if(e.strand!=n.strand)return q("Error: mismatched strand at multi-seg breakpoint "+t);if(e.gm){if(n.gm){if(e.gm.isoform!=n.gm.isoform){return q("Error: mismatched gene in two breakpoints: "+n.gm.symbol+" "+n.gm.isoform+", "+e.gm.symbol+" "+e.gm.isoform)}}else{n.gm=e.gm;q("In multi-segment at "+t+", 5' breakpoint is joined to the same gene model of 3'");const r=a(n.position,e.gm,5);n.exonbp=r.rnapos;n.codon=r.aapos;n.atintron=r.atintron;n.exon=r.atexon;n.atutr3=r.atutr3;n.atutr5=r.atutr5;n.atupstream=r.atupstream;n.atdownstream=r.atdownstream}}else{if(n.gm){e.gm=n.gm;q("In multi-segment at "+t+", 3' breakpoint is joined to the same gene model of 5'");const r=a(e.position,n.gm,5);e.exonbp=r.rnapos;e.codon=r.aapos;e.atintron=r.atintron;e.exon=r.atexon;e.atutr3=r.atutr3;e.atutr5=r.atutr5;e.atupstream=r.atupstream;e.atdownstream=r.atdownstream}}}const t=new Set;for(const e of w){if(e.a.gm&&!e.a.gm.pdomains){t.add(e.a.gm.isoform)}if(e.b.gm&&!e.b.gm.pdomains){t.add(e.b.gm.isoform)}}if(t.size==0){new O;return}const e=[];for(const n of t){e.push(n)}T.style("margin","5px").text("Loading protein domains ...");const n=await D(e);for(const t of n){const e=r().range(i);for(const n of t.pdomains){if(!n.color){n.color=e(n.name+n.description)}}const n=t.name.toUpperCase();if(M.isoformcache.has(n)){for(const e of M.isoformcache.get(n)){e.pdomains=t.pdomains;e.domain_hidden={}}}}new O}async function D(t){const e=await n("pdomain",{method:"POST",body:JSON.stringify({genome:M.name,isoforms:t})});if(e.error)throw e.error;else T.remove();return e.lst}function O(){const e=[];let n=0;for(let t=0;t<w.length;t++){const a=w[t];let r;if(t>0){r=e[e.length-1]}if(a.a.gm){if(!r){r={gm:a.a.gm,strand:a.a.gm.strand,id:n++,name:a.a.name?a.a.name:a.a.gm.name};if(a.a.gm.coding){r.aalen=a.a.gm.cdslen/3}else{if(!a.a.gm.rnalen){q("no aacount or rnalen for "+a.a.gm.symbol+" "+a.a.gm.isoform);return}r.bplen=a.a.gm.rnalen}}if(a.a.atutr3){r.utr3bp=a.a.atutr3.total}if(a.a.atutr5){r.utr5bp=a.a.atutr5.total}if(a.a.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.a.atupstream.off)}if(a.a.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.a.atdownstream.off)}}else{if(!r){r={chr:a.a.chr,id:n++,start:a.a.position,stop:a.a.position,name:a.a.name?a.a.name:a.a.chr}}r.start=Math.min(r.start,a.a.position);r.stop=Math.max(r.stop,a.a.position)}a.a.scfid=r.id;if(t==0){e.push(r)}if(a.interstitial){r={nontemplate:true,id:n++};if(a.interstitial.aalen){r.aalen=a.interstitial.aalen;r.name=r.aalen+" AA insertion"}else if(a.interstitial.bplen){r.aalen=a.interstitial.bplen/3;r.name=r.bplen+" bp insertion"}e.push(r);a.interstitial.scfid=r.id}if(a.b.gm){r={gm:a.b.gm,strand:a.b.gm.strand,id:n++,name:a.b.name?a.b.name:a.b.gm.symbol};if(a.b.gm.coding){r.aalen=a.b.gm.cdslen/3}else{if(!a.b.gm.rnalen){q("no aacount or rnalen for "+a.b.gm.symbol+" "+a.b.gm.isoform);return}r.bplen=a.b.gm.rnalen}if(a.b.atutr3){r.utr3bp=a.b.atutr3.total}if(a.b.atutr5){r.utr5bp=a.b.atutr5.total}if(a.b.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.b.atupstream.off)}if(a.b.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.b.atdownstream.off)}}else{r={chr:a.b.chr,id:n++,start:a.b.position,stop:a.b.position,name:a.b.name?a.b.name:a.b.chr};r.start=Math.min(r.start,a.b.position);r.stop=Math.max(r.stop,a.b.position)}a.b.scfid=r.id;e.push(r)}for(const t of e){t.nodes=[];t.clipid0=Math.ceil(Math.random()*1e5);t.clipid="url(#"+t.clipid0+")"}for(const t of e){if(!t.gm)continue;const e={name:t.gm.name,isoform:t.gm.isoform,codingstart:t.gm.codingstart,codingstop:t.gm.codingstop,strand:t.gm.strand,aaseq:t.gm.aaseq,exon:t.gm.exon,utr3:t.gm.utr3,utr5:t.gm.utr5,cdslen:t.gm.cdslen,pdomains:[],domain_hidden:t.gm.domain_hidden};if(t.gm.pdomains){for(const n of t.gm.pdomains){const t={};for(const e in n){t[e]=n[e]}e.pdomains.push(t)}}t.gm=e}const a=90,r=5,i=3;for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}this.width=this.width0=400;const u=20,b=70,M=70,A=26,T=5,B=5,S=15,L=13,C=12,P=5,F=3,D=10;let O=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);let I=40,V=40;const H={nodes:[],links:[]};for(let t=0;t<w.length;t++){const n=w[t];const a=U(n.a,e,H);a.x=this.width/2;a.y=O/2;let r=null,i=null;if(n.interstitial){const t=e[n.interstitial.scfid];r={nontemplate:true,scfid:n.interstitial.scfid,softlink3:a,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:O/2};a.softlink5=r;H.nodes.push(r);t.nodes.push(r);i={nontemplate:true,scfid:n.interstitial.scfid,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:O/2};H.nodes.push(i);t.nodes.push(i);r.hardlink=i;i.hardlink=r}const o=U(n.b,e,H);o.x=this.width/2;o.y=O/2;if(i){i.softlink5=o;o.softlink3=i;H.links.push({source:H.nodes.length-4,target:H.nodes.length-3});H.links.push({source:H.nodes.length-2,target:H.nodes.length-1})}else{a.softlink5=o;o.softlink3=a;H.links.push({source:H.nodes.length-2,target:H.nodes.length-1})}if(t>0){const t=H.nodes[H.nodes.length-3-(n.interstitial?2:0)];a.hardlink=t;t.hardlink=a}}let J=0,X=0;for(const t of e){if(t.gm){t.aatotal=(t.aalen?t.aalen:t.bplen/3)+((t.utr3bp?t.utr3bp:0)+(t.utr5bp?t.utr5bp:0)+(t.upstream?t.upstream:0)+(t.downstream?t.downstream:0))/3;J=Math.max(J,t.aatotal)}else if(t.nontemplate){J=Math.max(J,t.aalen)}else{X=Math.max(X,t.stop-t.start)}}if(X==0){X=1e3}let G=0;for(const t of e){if(!t.gm&&!t.nontemplate){t.start-=X;t.stop+=X;G=Math.max(G,t.stop-t.start)}}let Q=this.width;let Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/J;t.scale=o().domain([0,t.aatotal]).range([0,t.pxwidth])}else if(t.nontemplate){t.pxwidth=Q*t.aalen/J;t.scale=o().domain([0,t.aalen]).range([0,t.pxwidth])}else{t.pxwidth=Y*(t.stop-t.start)/G;t.scale=o().domain([t.start,t.stop]).range([0,t.pxwidth])}if(t.nontemplate){t.nodes[0].xoff=0;t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}if(e.atupstream){e.aaoff=(t.upstream-e.atupstream.off)/3}else if(e.atutr5){e.aaoff=(t.upstream?t.upstream/3:0)+e.atutr5.off/3}else if(e.atutr3){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+e.atutr3.off/3}else if(e.atdownstream){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+e.atdownstream.off/3}else{e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(e.codon?e.codon:e.exonbp/3)}e.xoff=t.scale(e.aaoff)}t.nodes.sort(((e,n)=>{if(!t.gm)return e.position-n.position;if(e.atupstream){if(n.atupstream)return e.atupstream.off-n.atupstream.off;return-1}if(e.atutr5){if(n.atupstream)return 1;if(n.atutr5)return e.atutr5.off-n.atutr5.off;return-1}if(e.atutr3){if(n.atupstream||n.atutr5)return 1;if(n.atutr3)return e.atutr3.off-n.atutr3.off;if(n.atdownstream)return-1;return 1}if(e.atdownstream){if(n.atdownstream)return e.atdownstream.off-n.atdownstream.off;return 1}if(n.atupstream||n.atutr5)return 1;if(n.atdownstream||n.atutr3)return-1;if(e.exonbp)return e.exonbp-n.exonbp;return e.codon-n.codon}))}for(const t of e){if(t.gm&&t.gm.pdomains){t.gm.pdomains.forEach((function(e){e.__scf=t}))}}H.nodes[0].hardlink={};H.nodes[H.nodes.length-1].hardlink={};const Z=()=>{let t=H.nodes[0];let n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}else{if(t.strand=="+"){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}t=H.nodes[H.nodes.length-1];n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}else{if(t.strand=="+"){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}};Z();const K=E.append("svg");const W=K.append("g");const $=y(H.nodes).force("link",_().links(H.links));const tt=W.selectAll().data(e).enter().append("g");const et=W.selectAll().data(H.links).enter().append("line").attr("stroke","black").attr("stroke-dasharray","3,2");const nt=W.selectAll().data(H.nodes).enter().append("g");const at=nt.filter((t=>t.label)).append("text").text((t=>t.label)).attr("font-family",s).attr("font-size",L).attr("fill","black").each((function(t){t.labelwidth=this.getBBox().width}));const rt=nt.filter((t=>t.antisense)).append("text").text("antisense").attr("font-family",s).attr("font-size",L).attr("fill",l).each((function(t){t.labelwidth=Math.max(this.getBBox().width,t.labelwidth)}));for(const t of H.nodes){if(!t.labelwidth){continue}I=Math.max(I,t.labelwidth-t.xoff);V=Math.max(V,t.labelwidth-e[t.scfid].pxwidth+t.xoff)}const it=nt.append("rect").attr("height",i).attr("fill",(t=>t.antisense?l:"black"));const ot=tt.append("line").attr("y1",((t,e)=>e%2==0?-F:A)).attr("stroke","black").attr("stroke-opacity",0).attr("shape-rendering","crispEdges");const st=tt.filter((t=>t.nontemplate));st.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","black");const lt=tt.filter((t=>!t.gm&&!t.nontemplate));lt.append("rect").attr("fill","white").attr("clip-path",(t=>t.clipid));const ft=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const dt=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const pt=tt.filter((t=>t.gm));const ct=pt.filter((t=>t.upstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const mt=pt.filter((t=>t.utr5bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ht=pt.filter((t=>t.utr3bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ut=pt.filter((t=>t.downstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const gt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white");const xt=pt.filter((t=>t.gm.pdomains)).selectAll().data((t=>t.gm.pdomains)).enter().append("rect").attr("clip-path",(t=>t.__scf.clipid)).attr("fill",(t=>t.color));const bt=pt.filter((t=>t.gm.exon.length>1)).selectAll().data((t=>{let e=0;const n=[];let a=0;if(t.gm.utr5){for(const e of t.gm.utr5){a+=e[1]-e[0]}}const r=t.gm.cdslen||0;for(let i=0;i<t.gm.exon.length-1;i++){const o=t.gm.exon[i];e+=o[1]-o[0];const s={rnabp:e,scf:t};if(e<a){if(t.utr5bp){s.utr5=true}else{continue}}else if(e>a+r){if(t.utr3bp){s.utr3=true}else{continue}}if(!t.utr5bp){s.rnabp=e-a}n.push(s)}return n})).enter().append("line").attr("clip-path",(t=>t.scf.clipid)).attr("stroke","black").attr("stroke-dasharray","3,2").attr("shape-rendering","crispEdges").attr("y1",(t=>t.utr5||t.utr3?A/4:0)).attr("y2",(t=>t.utr5||t.utr3?A*3/4:A));const wt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("stroke-dasharray",(t=>t.bplen?"4,2":"none")).attr("fill","none").attr("stroke","black");const yt=tt.append("text").text((t=>t.name)).attr("font-family",s).attr("fill","black").attr("font-size",S).attr("dominant-baseline","central").each((function(t){t.chimericlabelw=t.labelwidth=this.getBBox().width}));for(const t of e){V=Math.max(V,B+t.labelwidth)}const kt=tt.filter((t=>!t.nontemplate)).append("text").attr("fill","#858585").attr("fill-opacity",0).attr("font-size",L).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).text((t=>{if(t.gm){if(t.nodes.length==1){const e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{n=e.codon?e.codon+" AA":e.exonbp+" bp"}if(e.softlink5)return"ends at "+n;return"starts at "+n}let e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{if(e.betweencodon){n=(e.codonsideN?e.codon+1:e.codon)+" AA"}else{n=e.exonbp?e.exonbp+" bp ":e.codon+" AA"}}e=t.nodes[1];let a;if(e.atupstream)a=e.atupstream.off+" bp upstream";else if(e.atdownstream)a=e.atdownstream.off+" bp downstream";else if(e.atutr3)a=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)a=e.atutr5.off+" bp in 5' UTR";else a=e.codon?e.codon+" AA":e.exonbp+" bp";return"from "+n+" to "+a}if(t.nodes.length==1){const e=t.nodes[0];if(e.softlink5)return"ends at "+e.position+" bp";return"starts at "+e.position+" bp"}return"from "+t.nodes[0].position+" bp to "+t.nodes[1].position+" bp"})).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const vt=tt.filter((t=>t.nodes[0].antisense)).append("text").text("antisense").attr("fill",l).attr("fill-opacity",0).attr("font-size",L).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const Mt=tt.append("defs").append("clipPath").attr("id",(t=>t.clipid0)).append("rect").attr("x",0).attr("y",0);const At=tt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white").attr("fill-opacity",0).on("mousemove",((t,e)=>{if(!e.gm){return}let n=e.scale.invert(x(t)[0]);let a=null;const r=[];if(e.upstream){if(n*3<e.upstream){a=Math.floor(n*3)+" bp upstream of "+e.name}else{n-=e.upstream/3}}if(!a){if(e.utr5bp){if(n*3<e.utr5bp){a=Math.floor(n*3)+" bp in 5' UTR of "+e.name}else{n-=e.utr5bp/3}}}if(!a){if(e.aalen){if(n<=e.aalen){const t=Math.floor(n);a=(e.gm.aaseq?e.gm.aaseq[t]:"amino acid ")+t+" of "+e.name;if(e.gm.pdomains){for(const t of e.gm.pdomains){if(t.start<=n&&t.stop>=n&&!(t.name+t.description in e.gm.domain_hidden)){r.push(t)}}}}else{n-=e.aalen}}else{if(n*3<e.bplen){a=Math.floor(n*3)+" bp in "+e.name}n-=e.bplen/3}}if(!a){if(e.utr3bp){if(n*3<e.utr3bp){a=Math.floor(n*3)+" bp in 3' UTR of "+e.name}else{n-=e.utr3bp/3}}}if(!a){a=Math.floor(n*3)+" bp downstream of "+e.name}_t.selectAll("*").remove();_t.append("text").text(a).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C);let i=5;for(let t=0;t<r.length;t++){const e=_t.append("g").attr("transform","translate(0,"+(C+i)*(t+1)+")");const n=r[t];const a=n.color;e.append("rect").attr("width",C).attr("height",C).attr("fill",a).attr("stroke",f(a).darker(2).toString());let o;e.append("text").text(n.name).attr("x",C+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","black").each((function(){o=this.getBBox().width}));e.append("text").text(n.description).attr("x",C+5+o+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","#858585")}K.attr("height",O-M+Math.max(M,D+(C+i)*(r.length+1)))})).on("mouseout",(()=>{_t.selectAll("*").remove();K.attr("height",O)}));const _t=K.append("g");const zt=K.append("text").text("drag to resize").attr("class","sja_svgtext").attr("fill","black").attr("font-size",12).attr("text-anchor","end").on("mousedown",(e=>{const n=t(document.body);const a=e.clientX;e.clientY;n.on("mousemove",(t=>{t.preventDefault();this.width=this.width0+t.clientX-a;Tt();if(St){Ut(false)}else{$.restart()}}));n.on("mouseup",(()=>{this.width0=this.width;n.on("mousemove",null).on("mouseup",null)}))}));const Tt=()=>{for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}O=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);$.force("x",k(this.width/2)).force("y",v(O/2));Q=this.width;Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/J}else if(t.nontemplate){t.pxwidth=Q*t.aalen/J}else{t.pxwidth=Y*(t.stop-t.start)/G}t.scale.range([0,t.pxwidth]);if(t.nontemplate){t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}e.xoff=t.scale(e.aaoff)}}Z();it.attr("x",(t=>Math.min(t.xoff,t.hardlink.xoff)-t.xoff)).attr("width",(t=>Math.abs(t.xoff-t.hardlink.xoff))).attr("y",(t=>{if(t.softlink5)return A+r;return-r-i}));ot.attr("y2",((t,e)=>e%2==0?0:A+F));st.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);lt.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);ft.attr("x2",(t=>t.pxwidth));dt.attr("x2",(t=>t.pxwidth)).attr("y1",A).attr("y2",A);ct.attr("x2",(t=>t.scale(t.upstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);ut.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+t.downstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);mt.attr("x1",(t=>t.upstream?t.scale(t.upstream/3):0)).attr("x2",(t=>t.scale(((t.upstream?t.upstream:0)+t.utr5bp)/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);ht.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);gt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);xt.attr("x",(t=>{const e=t.__scf;return e.scale((e.upstream?e.upstream/3:0)+(e.utr5bp?e.utr5bp/3:0)+t.start)})).attr("width",(t=>{const e=t.__scf;return e.scale(t.stop)-e.scale(t.start)})).attr("height",A);bt.attr("x1",(t=>{const e=t.scf;t.x=e.scale((e.upstream?e.upstream/3:0)+t.rnabp/3);return t.x})).attr("x2",(t=>t.x));wt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);yt.attr("x",(t=>t.pxwidth+B)).attr("y",A/2);kt.attr("y",(t=>t.id%2==0?-F*2-S-F:A+F*2+S+F));vt.attr("y",(t=>t.id%2==0?-F*2-S-F-L-F:A+F*2+S+F+L+F));Mt.attr("height",A).attr("width",(t=>t.pxwidth+B+t.labelwidth));At.attr("width",(t=>t.pxwidth)).attr("height",A);K.attr("width",this.width+I+V).attr("height",O);W.attr("transform","translate("+I+","+b+")");_t.attr("transform","translate("+I+","+(O-M+D)+")");zt.attr("x",I+this.width+V-5).attr("y",O-7)};Tt();$.on("tick",(()=>{const t=[];for(const n of e){let e=0;for(const t of n.nodes){e+=t.y}t[n.id]=e/n.nodes.length}for(const n of e){let e=t[n.id];let a=false;if(e>n.idealy){e-=Math.min(15,e-n.idealy);a=true}else if(e<n.idealy){e+=Math.min(15,n.idealy-e);a=true}if(a){t[n.id]=e;for(const t of n.nodes){t.y=e}}}for(const t of e){const e=t.nodes[0];if(e.x<e.xoff){e.x+=Math.min(10,e.xoff-e.x)}else if(e.x>this.width-t.pxwidth+e.xoff){e.x-=Math.min(10,e.x-(this.width-t.pxwidth+e.xoff))}for(let n=1;n<t.nodes.length;n++){t.nodes[n].x=e.x+(t.nodes[n].xoff-e.xoff)}}tt.attr("transform",(t=>"translate("+(t.nodes[0].x-t.nodes[0].xoff)+","+t.nodes[0].y+")"));nt.attr("transform",(t=>"translate("+t.x+","+t.y+")"));at.attr("text-anchor",(t=>{if(t.softlink3){return t.softlink3.x<t.x?"start":"end"}return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T;if(t.softlink5)return A+r+i+T})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));rt.attr("text-anchor",(t=>{if(t.softlink3)return t.softlink3.x<t.x?"start":"end";return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T-L-T/2;if(t.softlink5)return A+r+i+T+L+T/2})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));et.attr("x1",(t=>t.source.x)).attr("y1",(t=>t.source.y+A+r+i)).attr("x2",(t=>t.target.x)).attr("y2",(t=>{if(t.target.scfid==t.source.scfid){return t.source.y+A+r+i}return t.target.y-r-i}))})).restart();const Bt=500;const Ut=t=>{for(const t of e){const e=t.nodes[0];if(t.nodes.length==1){t.chimericwidth=Math.abs(e.xoff-e.hardlink.xoff)}else{let n=e.xoff,a=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff);a=Math.max(a,e.xoff)}t.chimericwidth=a-n}let n=e.xoff;if(t.nodes.length==1){n=Math.min(n,e.hardlink.xoff)}t.chimericmidx=n+t.chimericwidth/2}let n=0,a=0,r=0;const i=P*2;for(let t=0;t<e.length;t++){const o=e[t];let s=a+P*2+o.chimericwidth/2;if(t%2==0){s=Math.max(s,n+i+o.chimericlabelw/2);n=s+o.chimericlabelw/2}else{s=Math.max(s,r+i+o.chimericlabelw/2);r=s+o.chimericlabelw/2}o.chimericcenterx=s;a=s+o.chimericwidth/2;const l=o.nodes[0];let f=l.xoff;if(o.nodes.length==1){f=Math.min(l.xoff,l.hardlink.xoff)}o.chimericx=s-o.chimericwidth/2-f}Mt.transition().duration(t?Bt:0).attr("x",(t=>{const e=t.nodes[0];if(t.nodes.length==1){return Math.min(e.xoff,e.hardlink.xoff)}let n=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff)}return n})).attr("width",(t=>t.chimericwidth));yt.attr("text-anchor","middle").attr("x",(t=>t.chimericmidx)).attr("y",((t,e)=>e%2==0?-F*2:A+F*2)).attr("dominant-baseline",((t,e)=>e%2==0?"auto":"hanging"));at.attr("fill-opacity",0);rt.attr("fill-opacity",0);it.attr("fill-opacity",0);ot.attr("stroke-opacity",1).attr("x1",(t=>t.chimericmidx)).attr("x2",(t=>t.chimericmidx));kt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));vt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));const o=(O-b*2)/2-A/2;tt.transition().duration(t?Bt:0).attr("transform",(t=>{for(const e of t.nodes){e.x=t.chimericx+e.xoff;e.y=o}return"translate("+t.chimericx+","+o+")"}));nt.transition().duration(t?Bt:0).attr("transform",(t=>"translate("+t.x+","+t.y+")"));et.transition().duration(t?Bt:0).attr("x1",(t=>{const n=e[t.source.scfid];const a=e[t.target.scfid];t.chimericx=(n.chimericcenterx+n.chimericwidth/2+a.chimericcenterx-a.chimericwidth/2)/2;return t.chimericx})).attr("x2",(t=>t.chimericx)).attr("y1",o).attr("y2",o+A);const s=e[e.length-1];const l=s.chimericcenterx+Math.max(s.chimericlabelw/2,s.chimericwidth/2);K.transition().duration(t?Bt:0).attr("width",I+l+V);zt.transition().duration(t?Bt:0).attr("x",I+l+V-u)};let St=false;j.append("button").text("Toggle chimeric view").on("click",(()=>{St=!St;if(St){$.stop();Ut(true);return}Mt.transition().duration(Bt).attr("x",0).attr("width",(t=>t.pxwidth+B+t.labelwidth));yt.attr("text-anchor","start").attr("dominant-baseline","central").attr("x",(t=>t.pxwidth+B)).attr("y",A/2);at.attr("fill-opacity",1);rt.attr("fill-opacity",1);it.attr("fill-opacity",1);ot.attr("stroke-opacity",0);kt.attr("fill-opacity",0);vt.attr("fill-opacity",0);K.transition().duration(Bt).attr("width",I+this.width+V);zt.transition().duration(Bt).attr("x",I+this.width+V-u);$.alpha(.3).restart()}));const Et=[];for(const t of e){if(t.gm&&t.gm.pdomains){Et.push(t)}}if(Et.length){let t=false;j.append("button").text("Protein domains").on("click",(()=>{if(!t){t=true;for(const t of Et){const e=N.append("div").style("margin-bottom","10px").style("padding","10px");e.append("div").style("margin-bottom","10px").html(t.gm.name+" "+t.gm.isoform).append("div");const n=d(t.gm);for(const a of n){const n=e.append("div");const r=n.append("div").style("display","inline-block").style("padding","2px 3px").style("border","solid 1px "+a.stroke).style("font-family","Courier").style("margin-right","10px").style("background-color",a.fill).style("cursor","default").html("&nbsp;").on("click",(e=>{if(t.gm.domain_hidden[a.key]){delete t.gm.domain_hidden[a.key]}else{t.gm.domain_hidden[a.key]=1}xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("height",(()=>{if(a.key in t.gm.domain_hidden){e.target.innerHTML="&times;";return 0}e.target.innerHTML="&nbsp;";return A}))}));n.append("input").attr("type","color").style("display","none").property("value",a.fill);n.append("span").text(a.name).attr("class","sja_clbtext2").style("margin-right","5px").property("title","Click to edit color of this domain").on("click",(e=>{R.clear().showunder(e.target);const n=R.d.append("input").attr("type","text").property("value",a.fill).style("width","100px").on("keyup",(e=>{if(!p(e))return;const n=e.target.value.trim();if(!n)return;r.style("background",n);xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("fill",n);t.gm.pdomains.forEach((t=>{if(t.name+t.description==a.key){t.color=n}}))})).node();n.focus();n.select();R.d.append("div").style("margin-top","10px").style("opacity",.5).style("font-size",".8em").html("To change the color of this domain,<br>type in a new color and press ENTER.")}));n.append("span").text(a.description).style("font-size",".7em").style("color","#858585")}}}if(N.style("display")=="none"){c(N)}else{m(N)}}))}j.append("button").text("SVG").on("click",(()=>{const t=e.map((t=>t.name));const n=K.append("g").style("font-family","Arial");let a=[];if(Et.length){for(const t of Et){const e={text:t.gm.name+" "+t.gm.isoform,items:[]};const n=d(t.gm);for(const a of n){if(!(a.key in t.gm.domain_hidden)){const t=[a.name,a.description];if(t[1].length>80){t[1]=t[1].substr(0,77)+"..."}e.items.push({fill:a.fill,text:t})}}a.push(e)}}const r=K.node().getBBox();const i=z({legendontop:false,svgw:r.width,svgh:r.height,legendhangleft:false,titleline:true,legendpadleft:10,legendfontsize:12,legendlinesep:true,samplecount4legend:false,h:{legend:a},handlers:{legend:{mouseover:()=>{}}}},(t=>t.fill),(t=>t.text),(t=>"#aaa"));i(n);const o=+K.attr("width");const s=+K.attr("height");const l=n.node().getBBox();K.attr("width",o+l.width).attr("height",s+l.height+10);zt.style("display","none");h(K.node(),t.join("-"));zt.style("display","");n.remove();K.attr("width",o).attr("height",s)}));j.append("a").attr("href","https://docs.google.com/document/d/1LgcMk_p1qyPgFPQChy4sLlU9GDL6oahffP7jJfD8ZwE/edit?usp=sharing").attr("target","_blank").text("Help").style("padding-left","10px")}}function B(t){if(t.gm){if(!Number.isFinite(t.position)){if(!Number.isFinite(t.rnaposition)){if(!Number.isFinite(t.codon))return"no position provided genome/rna/codon";t.rnaposition=(t.gm.utr5?t.gm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0)+t.codon*3-1}if(!Number.isFinite(t.rnaposition))return"neither genomic or rna position given for node";t.position=g(t.rnaposition,t.gm);if(t.position==null)return"cannot map rnaposition "+t.rnaposition+" to "+t.gm.isoform}const e=a(t.position,t.gm,5);t.exonbp=e.rnapos;if(!Number.isFinite(t.codon))t.codon=e.aapos;t.atintron=e.atintron;t.exon=e.atexon;t.atutr3=e.atutr3;t.atutr5=e.atutr5;t.atupstream=e.atupstream;t.atdownstream=e.atdownstream}else{if(!t.chr||!t.position){return"missing genomic position for intergenic breakpoint"}}return false}function U(t,e,n){const a={};for(const e in t){a[e]=t[e]}if(!a.gm){a.label=a.chr+":"+a.position}else if(a.atupstream){a.label=a.atupstream.off+" bp upstream"}else if(a.atdownstream){a.label=a.atdownstream.off+" bp downstream"}else if(a.atutr3){if(a.atintron){a.label="intron "+a.atintron+", 3' UTR"}else{a.label="3' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atutr5){if(a.atintron){a.label="intron "+a.atintron+", 5' UTR"}else{a.label="5' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atintron){a.label="intron "+a.atintron+(a.codon?", "+a.codon+" AA":"")}else{a.label=(a.exon?"exon "+a.exon+", ":"")+(a.codon?a.codon+" AA":a.exonbp+" bp")}if(a.strand&&a.gm){if(a.strand!=a.gm.strand){a.antisense=true}}n.nodes.push(a);e[a.scfid].nodes.push(a);return a}export{T as default};
1
+ import{q as t,M as e,S as n,t as a,am as r,bC as i,l as o,p as s,bD as l,x as f,u as d,k as p,g as c,h as m,aU as h,o as u,w as g}from"./app-71453429.js";import{p as x}from"./pointer-c7475677.js";import{c as b,j as w,s as y,x as k,y as v}from"./y-76c7da8c.js";function M(t){return t.index}function A(t,e){var n=t.get(e);if(!n)throw new Error("node not found: "+e);return n}function _(t){var e=M,n=p,a,r=b(30),i,o,s,l,f,d=1;if(t==null)t=[];function p(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function c(e){for(var n=0,r=t.length;n<d;++n){for(var o=0,s,p,c,m,h,u,g;o<r;++o){s=t[o],p=s.source,c=s.target;m=c.x+c.vx-p.x-p.vx||w(f);h=c.y+c.vy-p.y-p.vy||w(f);u=Math.sqrt(m*m+h*h);u=(u-i[o])/u*e*a[o];m*=u,h*=u;c.vx-=m*(g=l[o]);c.vy-=h*g;p.vx+=m*(g=1-g);p.vy+=h*g}}}function m(){if(!o)return;var n,r=o.length,f=t.length,d=new Map(o.map(((t,n)=>[e(t,n,o),t]))),p;for(n=0,s=new Array(r);n<f;++n){p=t[n],p.index=n;if(typeof p.source!=="object")p.source=A(d,p.source);if(typeof p.target!=="object")p.target=A(d,p.target);s[p.source.index]=(s[p.source.index]||0)+1;s[p.target.index]=(s[p.target.index]||0)+1}for(n=0,l=new Array(f);n<f;++n){p=t[n],l[n]=s[p.source.index]/(s[p.source.index]+s[p.target.index])}a=new Array(f),h();i=new Array(f),u()}function h(){if(!o)return;for(var e=0,r=t.length;e<r;++e){a[e]=+n(t[e],e,t)}}function u(){if(!o)return;for(var e=0,n=t.length;e<n;++e){i[e]=+r(t[e],e,t)}}c.initialize=function(t,e){o=t;f=e;m()};c.links=function(e){return arguments.length?(t=e,m(),c):t};c.id=function(t){return arguments.length?(e=t,c):e};c.iterations=function(t){return arguments.length?(d=+t,c):d};c.strength=function(t){return arguments.length?(n=typeof t==="function"?t:b(+t),h(),c):n};c.distance=function(t){return arguments.length?(r=typeof t==="function"?t:b(+t),u(),c):r};return c}function z(e,n,a,r,i){let o=0;let s=0;let l;let f;p();function d(t){f=t;o=e.legendpadleft;s=0;t.selectAll("g").remove();t.attr("transform",e.legendontop?null:"translate(0,"+e.svgh+")").on("mouseover.tphm2",e.handlers.legend.mouseover);const n=t.selectAll("g").data(e.h.legend);n.exit().remove();n.enter().append("g").each(c);return s+e.legendlineh+e.legendpadbtm}function p(){l={legendontop:true,legendh:0,legendlineh:25,legendpadx:5,legendpadleft:150,legendpadright:20,legendpadbtm:30,legendfontsize:12,legendiconh:10,legendiconw:10,samplecount4legend:true,legendhangleft:1,legendlinesep:false,legendmutationorder:["M","E","F","N","S","D","I","P","L","Intron","ITD","DEL","NLOSS","CLOSS","Utr3","Utr5","X","noncoding","Fuserna","SV","CNV_amp","CNV_loss","snv","mnv"]};for(let t in l){if(!(t in e))e[t]=l[t]}}function c(n,a){if(!n.items||!n.items.length)return;o=0;s+=e.legendlineh;let r=t(this);const i=e.legendhangleft?e.legendpadleft+e.legendhangleft-e.legendpadx:e.legendpadleft;const l=r.append("text").attr("transform","translate("+i+","+(s+e.legendiconh/2)+")").attr("text-anchor",e.legendhangleft?"end":"start").attr("font-weight",700).attr("font-size",e.legendfontsize).attr("dominant-baseline","central").text(n.text+(e.samplecount4legend?" (sample count)":""));if(e.linesep){o=e.legendpadleft;s+=e.legendlineh}else if(e.legendhangleft){o=i+2*e.legendpadx}else{o+=e.legendpadleft+l.node().getBBox().width+2*e.legendpadx}if(n.sorter)n.items.sort(n.sorter);r.selectAll("g").data(n.items).enter().append("g").each(m)}function m(l,f){let d=t(this).attr("transform","translate("+o+","+s+")").style("opacity",i);const p=d.append("text").attr("transform","translate("+(e.legendiconw+e.legendpadx/2)+","+e.legendiconh/2+")").attr("font-size",e.legendfontsize).attr("dominant-baseline","central").each((function(e){const n=t(this);if(typeof e.text=="string"){n.text(a(e))}else if(Array.isArray(e.text)){n.selectAll("tspan").data(e.text).enter().append("tspan").text((t=>t)).attr("dominant-baseline","central").attr("x",(function(n,a){if(a==0){t(this).attr("font-weight",700);e.lastx=t(this).node().getComputedTextLength()+10;return 0}else if(e.lastx){return e.lastx}}))}}));const c=p.node().getBBox();o+=e.legendiconw+c.width+2.5*e.legendpadx;if(e.legendlinesep||o>e.svgw-e.legendpadright){s+=e.legendlineh;const t=!e.legendhangleft?e.legendpadleft:e.legendpadleft+e.legendhangleft+e.legendpadx;d.attr("transform","translate("+t+","+s+")");o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft;if(e.legendhangleft)o=e.legendiconw+c.width+2.5*e.legendpadx+t;else o=e.legendiconw+c.width+2.5*e.legendpadx+e.legendpadleft}d.append("rect").attr("height",e.legendiconh).attr("width",e.legendiconw).attr("y",e.legendfontsize-c.height+(c.height-e.legendiconh)/2).attr("fill",n).attr("stroke",r).attr("shape-rendering","crispEdges")}d.defaults=l;d.finalizePos=function(t){f.transition().duration(e.duration).attr("transform",e.legendontop?null:"translate(0,"+(e.svgh+t)+")")};return d}function T(g){const b="#ddd";const w=g.pairlst;const M=g.genome;const A=g.holder.append("div");const T=g.holder.append("div");const S=g.holder.append("div").style("display","inline-block").style("border","solid 1px "+b);const E=S.append("div").style("margin","10px");const j=S.append("div").style("margin-top","5px").style("padding","10px 20px").style("background-color","#ededed");const N=S.append("div").style("margin","10px").style("display","none");const R=new e({padding:"10px"});function q(t){u(A,t)}const L=new Set;const C=[];for(const t of w){if(t.a.gm){const e=t.a.gm.isoform;if(M.isoformcache.has(e)){t.a.gm=M.isoformmatch(e,t.a.chr,t.a.position)}else{L.add(e);C.push(t.a)}}if(t.b.gm){const e=t.b.gm.isoform;if(M.isoformcache.has(e)){t.b.gm=M.isoformmatch(e,t.b.chr,t.b.position)}else{L.add(e);C.push(t.b)}}}if(L.size==0){F();return}const P=[];for(const t of L){P.push(t)}n("isoformlst",{method:"POST",body:JSON.stringify({genome:M.name,lst:P})}).then((t=>{if(t.error)throw{message:t.error};for(const e of t.lst){if(e[0]){M.isoformcache.set(e[0].isoform.toUpperCase(),e)}}const e=[];for(const t of C){const n=M.isoformmatch(t.gm.isoform,t.chr,t.position);if(!n){e.push(t.gm.isoform);delete t.gm}else{t.gm=n}}if(e.length){q("invalid isoform: "+e.join(","))}F()})).catch((t=>{q(t.message);if(t.stack)console.log(t.stack)}));async function F(){for(const t of w){if(t.a.strand==undefined){t.a.strand=t.a.gm.strand}if(t.b.strand==undefined){t.b.strand=t.b.gm.strand}}for(const t of w){let e=B(t.a);if(e){return q(e)}e=B(t.b);if(e){return q(e)}}for(let t=1;t<w.length;t++){const e=w[t].a;const n=w[t-1].b;if(e.chr!=n.chr)return q("Error: mismatched chromosome at multi-seg breakpoint "+t+": "+e.chr+" != "+n.chr);if(e.strand!=n.strand)return q("Error: mismatched strand at multi-seg breakpoint "+t);if(e.gm){if(n.gm){if(e.gm.isoform!=n.gm.isoform){return q("Error: mismatched gene in two breakpoints: "+n.gm.symbol+" "+n.gm.isoform+", "+e.gm.symbol+" "+e.gm.isoform)}}else{n.gm=e.gm;q("In multi-segment at "+t+", 5' breakpoint is joined to the same gene model of 3'");const r=a(n.position,e.gm,5);n.exonbp=r.rnapos;n.codon=r.aapos;n.atintron=r.atintron;n.exon=r.atexon;n.atutr3=r.atutr3;n.atutr5=r.atutr5;n.atupstream=r.atupstream;n.atdownstream=r.atdownstream}}else{if(n.gm){e.gm=n.gm;q("In multi-segment at "+t+", 3' breakpoint is joined to the same gene model of 5'");const r=a(e.position,n.gm,5);e.exonbp=r.rnapos;e.codon=r.aapos;e.atintron=r.atintron;e.exon=r.atexon;e.atutr3=r.atutr3;e.atutr5=r.atutr5;e.atupstream=r.atupstream;e.atdownstream=r.atdownstream}}}const t=new Set;for(const e of w){if(e.a.gm&&!e.a.gm.pdomains){t.add(e.a.gm.isoform)}if(e.b.gm&&!e.b.gm.pdomains){t.add(e.b.gm.isoform)}}if(t.size==0){new O;return}const e=[];for(const n of t){e.push(n)}T.style("margin","5px").text("Loading protein domains ...");const n=await D(e);for(const t of n){const e=r().range(i);for(const n of t.pdomains){if(!n.color){n.color=e(n.name+n.description)}}const n=t.name.toUpperCase();if(M.isoformcache.has(n)){for(const e of M.isoformcache.get(n)){e.pdomains=t.pdomains;e.domain_hidden={}}}}new O}async function D(t){const e=await n("pdomain",{method:"POST",body:JSON.stringify({genome:M.name,isoforms:t})});if(e.error)throw e.error;else T.remove();return e.lst}function O(){const e=[];let n=0;for(let t=0;t<w.length;t++){const a=w[t];let r;if(t>0){r=e[e.length-1]}if(a.a.gm){if(!r){r={gm:a.a.gm,strand:a.a.gm.strand,id:n++,name:a.a.name?a.a.name:a.a.gm.name};if(a.a.gm.coding){r.aalen=a.a.gm.cdslen/3}else{if(!a.a.gm.rnalen){q("no aacount or rnalen for "+a.a.gm.symbol+" "+a.a.gm.isoform);return}r.bplen=a.a.gm.rnalen}}if(a.a.atutr3){r.utr3bp=a.a.atutr3.total}if(a.a.atutr5){r.utr5bp=a.a.atutr5.total}if(a.a.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.a.atupstream.off)}if(a.a.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.a.atdownstream.off)}}else{if(!r){r={chr:a.a.chr,id:n++,start:a.a.position,stop:a.a.position,name:a.a.name?a.a.name:a.a.chr}}r.start=Math.min(r.start,a.a.position);r.stop=Math.max(r.stop,a.a.position)}a.a.scfid=r.id;if(t==0){e.push(r)}if(a.interstitial){r={nontemplate:true,id:n++};if(a.interstitial.aalen){r.aalen=a.interstitial.aalen;r.name=r.aalen+" AA insertion"}else if(a.interstitial.bplen){r.aalen=a.interstitial.bplen/3;r.name=r.bplen+" bp insertion"}e.push(r);a.interstitial.scfid=r.id}if(a.b.gm){r={gm:a.b.gm,strand:a.b.gm.strand,id:n++,name:a.b.name?a.b.name:a.b.gm.symbol};if(a.b.gm.coding){r.aalen=a.b.gm.cdslen/3}else{if(!a.b.gm.rnalen){q("no aacount or rnalen for "+a.b.gm.symbol+" "+a.b.gm.isoform);return}r.bplen=a.b.gm.rnalen}if(a.b.atutr3){r.utr3bp=a.b.atutr3.total}if(a.b.atutr5){r.utr5bp=a.b.atutr5.total}if(a.b.atupstream){r.upstream=Math.max(r.upstream?r.upstream:0,a.b.atupstream.off)}if(a.b.atdownstream){r.downstream=Math.max(r.downstream?r.downstream:0,a.b.atdownstream.off)}}else{r={chr:a.b.chr,id:n++,start:a.b.position,stop:a.b.position,name:a.b.name?a.b.name:a.b.chr};r.start=Math.min(r.start,a.b.position);r.stop=Math.max(r.stop,a.b.position)}a.b.scfid=r.id;e.push(r)}for(const t of e){t.nodes=[];t.clipid0=Math.ceil(Math.random()*1e5);t.clipid="url(#"+t.clipid0+")"}for(const t of e){if(!t.gm)continue;const e={name:t.gm.name,isoform:t.gm.isoform,codingstart:t.gm.codingstart,codingstop:t.gm.codingstop,strand:t.gm.strand,aaseq:t.gm.aaseq,exon:t.gm.exon,utr3:t.gm.utr3,utr5:t.gm.utr5,cdslen:t.gm.cdslen,pdomains:[],domain_hidden:t.gm.domain_hidden};if(t.gm.pdomains){for(const n of t.gm.pdomains){const t={};for(const e in n){t[e]=n[e]}e.pdomains.push(t)}}t.gm=e}const a=90,r=5,i=3;for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}this.width=this.width0=400;const u=20,b=70,M=70,A=26,T=5,B=5,S=15,L=13,C=12,P=5,F=3,D=10;let O=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);let I=40,V=40;const H={nodes:[],links:[]};for(let t=0;t<w.length;t++){const n=w[t];const a=U(n.a,e,H);a.x=this.width/2;a.y=O/2;let r=null,i=null;if(n.interstitial){const t=e[n.interstitial.scfid];r={nontemplate:true,scfid:n.interstitial.scfid,softlink3:a,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:O/2};a.softlink5=r;H.nodes.push(r);t.nodes.push(r);i={nontemplate:true,scfid:n.interstitial.scfid,x:g.quiet?this.width/2:0,y:g.quiet?t.idealy:O/2};H.nodes.push(i);t.nodes.push(i);r.hardlink=i;i.hardlink=r}const o=U(n.b,e,H);o.x=this.width/2;o.y=O/2;if(i){i.softlink5=o;o.softlink3=i;H.links.push({source:H.nodes.length-4,target:H.nodes.length-3});H.links.push({source:H.nodes.length-2,target:H.nodes.length-1})}else{a.softlink5=o;o.softlink3=a;H.links.push({source:H.nodes.length-2,target:H.nodes.length-1})}if(t>0){const t=H.nodes[H.nodes.length-3-(n.interstitial?2:0)];a.hardlink=t;t.hardlink=a}}let J=0,X=0;for(const t of e){if(t.gm){t.aatotal=(t.aalen?t.aalen:t.bplen/3)+((t.utr3bp?t.utr3bp:0)+(t.utr5bp?t.utr5bp:0)+(t.upstream?t.upstream:0)+(t.downstream?t.downstream:0))/3;J=Math.max(J,t.aatotal)}else if(t.nontemplate){J=Math.max(J,t.aalen)}else{X=Math.max(X,t.stop-t.start)}}if(X==0){X=1e3}let G=0;for(const t of e){if(!t.gm&&!t.nontemplate){t.start-=X;t.stop+=X;G=Math.max(G,t.stop-t.start)}}let Q=this.width;let Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/J;t.scale=o().domain([0,t.aatotal]).range([0,t.pxwidth])}else if(t.nontemplate){t.pxwidth=Q*t.aalen/J;t.scale=o().domain([0,t.aalen]).range([0,t.pxwidth])}else{t.pxwidth=Y*(t.stop-t.start)/G;t.scale=o().domain([t.start,t.stop]).range([0,t.pxwidth])}if(t.nontemplate){t.nodes[0].xoff=0;t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}if(e.atupstream){e.aaoff=(t.upstream-e.atupstream.off)/3}else if(e.atutr5){e.aaoff=(t.upstream?t.upstream/3:0)+e.atutr5.off/3}else if(e.atutr3){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+e.atutr3.off/3}else if(e.atdownstream){e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+e.atdownstream.off/3}else{e.aaoff=(t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(e.codon?e.codon:e.exonbp/3)}e.xoff=t.scale(e.aaoff)}t.nodes.sort(((e,n)=>{if(!t.gm)return e.position-n.position;if(e.atupstream){if(n.atupstream)return e.atupstream.off-n.atupstream.off;return-1}if(e.atutr5){if(n.atupstream)return 1;if(n.atutr5)return e.atutr5.off-n.atutr5.off;return-1}if(e.atutr3){if(n.atupstream||n.atutr5)return 1;if(n.atutr3)return e.atutr3.off-n.atutr3.off;if(n.atdownstream)return-1;return 1}if(e.atdownstream){if(n.atdownstream)return e.atdownstream.off-n.atdownstream.off;return 1}if(n.atupstream||n.atutr5)return 1;if(n.atdownstream||n.atutr3)return-1;if(e.exonbp)return e.exonbp-n.exonbp;return e.codon-n.codon}))}for(const t of e){if(t.gm&&t.gm.pdomains){t.gm.pdomains.forEach((function(e){e.__scf=t}))}}H.nodes[0].hardlink={};H.nodes[H.nodes.length-1].hardlink={};const Z=()=>{let t=H.nodes[0];let n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}else{if(t.strand=="+"){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}t=H.nodes[H.nodes.length-1];n=e[t.scfid];if(n.gm){if(t.strand!=n.gm.strand){t.hardlink.xoff=0}else{t.hardlink.xoff=n.pxwidth}}else{if(t.strand=="+"){t.hardlink.xoff=n.pxwidth}else{t.hardlink.xoff=0}}};Z();const K=E.append("svg");const W=K.append("g");const $=y(H.nodes).force("link",_().links(H.links));const tt=W.selectAll().data(e).enter().append("g");const et=W.selectAll().data(H.links).enter().append("line").attr("stroke","black").attr("stroke-dasharray","3,2");const nt=W.selectAll().data(H.nodes).enter().append("g");const at=nt.filter((t=>t.label)).append("text").text((t=>t.label)).attr("font-family",s).attr("font-size",L).attr("fill","black").each((function(t){t.labelwidth=this.getBBox().width}));const rt=nt.filter((t=>t.antisense)).append("text").text("antisense").attr("font-family",s).attr("font-size",L).attr("fill",l).each((function(t){t.labelwidth=Math.max(this.getBBox().width,t.labelwidth)}));for(const t of H.nodes){if(!t.labelwidth){continue}I=Math.max(I,t.labelwidth-t.xoff);V=Math.max(V,t.labelwidth-e[t.scfid].pxwidth+t.xoff)}const it=nt.append("rect").attr("height",i).attr("fill",(t=>t.antisense?l:"black"));const ot=tt.append("line").attr("y1",((t,e)=>e%2==0?-F:A)).attr("stroke","black").attr("stroke-opacity",0).attr("shape-rendering","crispEdges");const st=tt.filter((t=>t.nontemplate));st.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","black");const lt=tt.filter((t=>!t.gm&&!t.nontemplate));lt.append("rect").attr("fill","white").attr("clip-path",(t=>t.clipid));const ft=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const dt=lt.append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","black");const pt=tt.filter((t=>t.gm));const ct=pt.filter((t=>t.upstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const mt=pt.filter((t=>t.utr5bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ht=pt.filter((t=>t.utr3bp)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#858585");const ut=pt.filter((t=>t.downstream)).append("line").attr("clip-path",(t=>t.clipid)).attr("stroke","#545454").attr("stroke-dasharray","2,1");const gt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white");const xt=pt.filter((t=>t.gm.pdomains)).selectAll().data((t=>t.gm.pdomains)).enter().append("rect").attr("clip-path",(t=>t.__scf.clipid)).attr("fill",(t=>t.color));const bt=pt.filter((t=>t.gm.exon.length>1)).selectAll().data((t=>{let e=0;const n=[];let a=0;if(t.gm.utr5){for(const e of t.gm.utr5){a+=e[1]-e[0]}}const r=t.gm.cdslen||0;for(let i=0;i<t.gm.exon.length-1;i++){const o=t.gm.exon[i];e+=o[1]-o[0];const s={rnabp:e,scf:t};if(e<a){if(t.utr5bp){s.utr5=true}else{continue}}else if(e>a+r){if(t.utr3bp){s.utr3=true}else{continue}}if(!t.utr5bp){s.rnabp=e-a}n.push(s)}return n})).enter().append("line").attr("clip-path",(t=>t.scf.clipid)).attr("stroke","black").attr("stroke-dasharray","3,2").attr("shape-rendering","crispEdges").attr("y1",(t=>t.utr5||t.utr3?A/4:0)).attr("y2",(t=>t.utr5||t.utr3?A*3/4:A));const wt=pt.append("rect").attr("clip-path",(t=>t.clipid)).attr("stroke-dasharray",(t=>t.bplen?"4,2":"none")).attr("fill","none").attr("stroke","black");const yt=tt.append("text").text((t=>t.name)).attr("font-family",s).attr("fill","black").attr("font-size",S).attr("dominant-baseline","central").each((function(t){t.chimericlabelw=t.labelwidth=this.getBBox().width}));for(const t of e){V=Math.max(V,B+t.labelwidth)}const kt=tt.filter((t=>!t.nontemplate)).append("text").attr("fill","#858585").attr("fill-opacity",0).attr("font-size",L).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).text((t=>{if(t.gm){if(t.nodes.length==1){const e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{n=e.codon?e.codon+" AA":e.exonbp+" bp"}if(e.softlink5)return"ends at "+n;return"starts at "+n}let e=t.nodes[0];let n;if(e.atupstream)n=e.atupstream.off+" bp upstream";else if(e.atdownstream)n=e.atdownstream.off+" bp downstream";else if(e.atutr3)n=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)n=e.atutr5.off+" bp in 5' UTR";else{if(e.betweencodon){n=(e.codonsideN?e.codon+1:e.codon)+" AA"}else{n=e.exonbp?e.exonbp+" bp ":e.codon+" AA"}}e=t.nodes[1];let a;if(e.atupstream)a=e.atupstream.off+" bp upstream";else if(e.atdownstream)a=e.atdownstream.off+" bp downstream";else if(e.atutr3)a=e.atutr3.off+" bp in 3' UTR";else if(e.atutr5)a=e.atutr5.off+" bp in 5' UTR";else a=e.codon?e.codon+" AA":e.exonbp+" bp";return"from "+n+" to "+a}if(t.nodes.length==1){const e=t.nodes[0];if(e.softlink5)return"ends at "+e.position+" bp";return"starts at "+e.position+" bp"}return"from "+t.nodes[0].position+" bp to "+t.nodes[1].position+" bp"})).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const vt=tt.filter((t=>t.nodes[0].antisense)).append("text").text("antisense").attr("fill",l).attr("fill-opacity",0).attr("font-size",L).attr("font-family",s).attr("text-anchor","middle").attr("dominant-baseline",(t=>t.id%2==0?"auto":"hanging")).each((function(t){t.chimericlabelw=Math.max(this.getBBox().width,t.chimericlabelw)}));const Mt=tt.append("defs").append("clipPath").attr("id",(t=>t.clipid0)).append("rect").attr("x",0).attr("y",0);const At=tt.append("rect").attr("clip-path",(t=>t.clipid)).attr("fill","white").attr("fill-opacity",0).on("mousemove",((t,e)=>{if(!e.gm){return}let n=e.scale.invert(x(t)[0]);let a=null;const r=[];if(e.upstream){if(n*3<e.upstream){a=Math.floor(n*3)+" bp upstream of "+e.name}else{n-=e.upstream/3}}if(!a){if(e.utr5bp){if(n*3<e.utr5bp){a=Math.floor(n*3)+" bp in 5' UTR of "+e.name}else{n-=e.utr5bp/3}}}if(!a){if(e.aalen){if(n<=e.aalen){const t=Math.floor(n);a=(e.gm.aaseq?e.gm.aaseq[t]:"amino acid ")+t+" of "+e.name;if(e.gm.pdomains){for(const t of e.gm.pdomains){if(t.start<=n&&t.stop>=n&&!(t.name+t.description in e.gm.domain_hidden)){r.push(t)}}}}else{n-=e.aalen}}else{if(n*3<e.bplen){a=Math.floor(n*3)+" bp in "+e.name}n-=e.bplen/3}}if(!a){if(e.utr3bp){if(n*3<e.utr3bp){a=Math.floor(n*3)+" bp in 3' UTR of "+e.name}else{n-=e.utr3bp/3}}}if(!a){a=Math.floor(n*3)+" bp downstream of "+e.name}_t.selectAll("*").remove();_t.append("text").text(a).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C);let i=5;for(let t=0;t<r.length;t++){const e=_t.append("g").attr("transform","translate(0,"+(C+i)*(t+1)+")");const n=r[t];const a=n.color;e.append("rect").attr("width",C).attr("height",C).attr("fill",a).attr("stroke",f(a).darker(2).toString());let o;e.append("text").text(n.name).attr("x",C+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","black").each((function(){o=this.getBBox().width}));e.append("text").text(n.description).attr("x",C+5+o+5).attr("dominant-baseline","hanging").attr("font-family",s).attr("font-size",C).attr("fill","#858585")}K.attr("height",O-M+Math.max(M,D+(C+i)*(r.length+1)))})).on("mouseout",(()=>{_t.selectAll("*").remove();K.attr("height",O)}));const _t=K.append("g");const zt=K.append("text").text("drag to resize").attr("class","sja_svgtext").attr("fill","black").attr("font-size",12).attr("text-anchor","end").on("mousedown",(e=>{const n=t(document.body);const a=e.clientX;e.clientY;n.on("mousemove",(t=>{t.preventDefault();this.width=this.width0+t.clientX-a;Tt();if(St){Ut(false)}else{$.restart()}}));n.on("mouseup",(()=>{this.width0=this.width;n.on("mousemove",null).on("mouseup",null)}))}));const Tt=()=>{for(const t of e){t.idealy=a*t.id+(r+i)*2*t.id}O=b+M+A*e.length+(r*2+i*2+a)*(e.length-1);$.force("x",k(this.width/2)).force("y",v(O/2));Q=this.width;Y=this.width*.7;for(const t of e){if(t.gm){t.pxwidth=Q*t.aatotal/J}else if(t.nontemplate){t.pxwidth=Q*t.aalen/J}else{t.pxwidth=Y*(t.stop-t.start)/G}t.scale.range([0,t.pxwidth]);if(t.nontemplate){t.nodes[1].xoff=t.pxwidth;continue}for(const e of t.nodes){if(!t.gm){e.xoff=t.scale(e.position);continue}e.xoff=t.scale(e.aaoff)}}Z();it.attr("x",(t=>Math.min(t.xoff,t.hardlink.xoff)-t.xoff)).attr("width",(t=>Math.abs(t.xoff-t.hardlink.xoff))).attr("y",(t=>{if(t.softlink5)return A+r;return-r-i}));ot.attr("y2",((t,e)=>e%2==0?0:A+F));st.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);lt.select("rect").attr("width",(t=>t.pxwidth)).attr("height",A);ft.attr("x2",(t=>t.pxwidth));dt.attr("x2",(t=>t.pxwidth)).attr("y1",A).attr("y2",A);ct.attr("x2",(t=>t.scale(t.upstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);ut.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)+t.downstream/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",A/5);mt.attr("x1",(t=>t.upstream?t.scale(t.upstream/3):0)).attr("x2",(t=>t.scale(((t.upstream?t.upstream:0)+t.utr5bp)/3))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);ht.attr("x1",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)))).attr("x2",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)+(t.aalen?t.aalen:t.bplen/3)+(t.utr3bp?t.utr3bp/3:0)))).attr("y1",A/2).attr("y2",A/2).attr("stroke-width",Math.floor(A/2)+.5);gt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);xt.attr("x",(t=>{const e=t.__scf;return e.scale((e.upstream?e.upstream/3:0)+(e.utr5bp?e.utr5bp/3:0)+t.start)})).attr("width",(t=>{const e=t.__scf;return e.scale(t.stop)-e.scale(t.start)})).attr("height",A);bt.attr("x1",(t=>{const e=t.scf;t.x=e.scale((e.upstream?e.upstream/3:0)+t.rnabp/3);return t.x})).attr("x2",(t=>t.x));wt.attr("x",(t=>t.scale((t.upstream?t.upstream/3:0)+(t.utr5bp?t.utr5bp/3:0)))).attr("width",(t=>t.scale(t.aalen?t.aalen:t.bplen/3)-t.scale(0))).attr("height",A);yt.attr("x",(t=>t.pxwidth+B)).attr("y",A/2);kt.attr("y",(t=>t.id%2==0?-F*2-S-F:A+F*2+S+F));vt.attr("y",(t=>t.id%2==0?-F*2-S-F-L-F:A+F*2+S+F+L+F));Mt.attr("height",A).attr("width",(t=>t.pxwidth+B+t.labelwidth));At.attr("width",(t=>t.pxwidth)).attr("height",A);K.attr("width",this.width+I+V).attr("height",O);W.attr("transform","translate("+I+","+b+")");_t.attr("transform","translate("+I+","+(O-M+D)+")");zt.attr("x",I+this.width+V-5).attr("y",O-7)};Tt();$.on("tick",(()=>{const t=[];for(const n of e){let e=0;for(const t of n.nodes){e+=t.y}t[n.id]=e/n.nodes.length}for(const n of e){let e=t[n.id];let a=false;if(e>n.idealy){e-=Math.min(15,e-n.idealy);a=true}else if(e<n.idealy){e+=Math.min(15,n.idealy-e);a=true}if(a){t[n.id]=e;for(const t of n.nodes){t.y=e}}}for(const t of e){const e=t.nodes[0];if(e.x<e.xoff){e.x+=Math.min(10,e.xoff-e.x)}else if(e.x>this.width-t.pxwidth+e.xoff){e.x-=Math.min(10,e.x-(this.width-t.pxwidth+e.xoff))}for(let n=1;n<t.nodes.length;n++){t.nodes[n].x=e.x+(t.nodes[n].xoff-e.xoff)}}tt.attr("transform",(t=>"translate("+(t.nodes[0].x-t.nodes[0].xoff)+","+t.nodes[0].y+")"));nt.attr("transform",(t=>"translate("+t.x+","+t.y+")"));at.attr("text-anchor",(t=>{if(t.softlink3){return t.softlink3.x<t.x?"start":"end"}return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T;if(t.softlink5)return A+r+i+T})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));rt.attr("text-anchor",(t=>{if(t.softlink3)return t.softlink3.x<t.x?"start":"end";return t.softlink5.x<t.x?"start":"end"})).attr("y",(t=>{if(t.softlink3)return-r-i-T-L-T/2;if(t.softlink5)return A+r+i+T+L+T/2})).attr("dominant-baseline",(t=>{if(t.softlink3)return"auto";if(t.softlink5)return"hanging"}));et.attr("x1",(t=>t.source.x)).attr("y1",(t=>t.source.y+A+r+i)).attr("x2",(t=>t.target.x)).attr("y2",(t=>{if(t.target.scfid==t.source.scfid){return t.source.y+A+r+i}return t.target.y-r-i}))})).restart();const Bt=500;const Ut=t=>{for(const t of e){const e=t.nodes[0];if(t.nodes.length==1){t.chimericwidth=Math.abs(e.xoff-e.hardlink.xoff)}else{let n=e.xoff,a=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff);a=Math.max(a,e.xoff)}t.chimericwidth=a-n}let n=e.xoff;if(t.nodes.length==1){n=Math.min(n,e.hardlink.xoff)}t.chimericmidx=n+t.chimericwidth/2}let n=0,a=0,r=0;const i=P*2;for(let t=0;t<e.length;t++){const o=e[t];let s=a+P*2+o.chimericwidth/2;if(t%2==0){s=Math.max(s,n+i+o.chimericlabelw/2);n=s+o.chimericlabelw/2}else{s=Math.max(s,r+i+o.chimericlabelw/2);r=s+o.chimericlabelw/2}o.chimericcenterx=s;a=s+o.chimericwidth/2;const l=o.nodes[0];let f=l.xoff;if(o.nodes.length==1){f=Math.min(l.xoff,l.hardlink.xoff)}o.chimericx=s-o.chimericwidth/2-f}Mt.transition().duration(t?Bt:0).attr("x",(t=>{const e=t.nodes[0];if(t.nodes.length==1){return Math.min(e.xoff,e.hardlink.xoff)}let n=e.xoff;for(const e of t.nodes){n=Math.min(n,e.xoff)}return n})).attr("width",(t=>t.chimericwidth));yt.attr("text-anchor","middle").attr("x",(t=>t.chimericmidx)).attr("y",((t,e)=>e%2==0?-F*2:A+F*2)).attr("dominant-baseline",((t,e)=>e%2==0?"auto":"hanging"));at.attr("fill-opacity",0);rt.attr("fill-opacity",0);it.attr("fill-opacity",0);ot.attr("stroke-opacity",1).attr("x1",(t=>t.chimericmidx)).attr("x2",(t=>t.chimericmidx));kt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));vt.attr("fill-opacity",1).attr("x",(t=>t.chimericmidx));const o=(O-b*2)/2-A/2;tt.transition().duration(t?Bt:0).attr("transform",(t=>{for(const e of t.nodes){e.x=t.chimericx+e.xoff;e.y=o}return"translate("+t.chimericx+","+o+")"}));nt.transition().duration(t?Bt:0).attr("transform",(t=>"translate("+t.x+","+t.y+")"));et.transition().duration(t?Bt:0).attr("x1",(t=>{const n=e[t.source.scfid];const a=e[t.target.scfid];t.chimericx=(n.chimericcenterx+n.chimericwidth/2+a.chimericcenterx-a.chimericwidth/2)/2;return t.chimericx})).attr("x2",(t=>t.chimericx)).attr("y1",o).attr("y2",o+A);const s=e[e.length-1];const l=s.chimericcenterx+Math.max(s.chimericlabelw/2,s.chimericwidth/2);K.transition().duration(t?Bt:0).attr("width",I+l+V);zt.transition().duration(t?Bt:0).attr("x",I+l+V-u)};let St=false;j.append("button").text("Toggle chimeric view").on("click",(()=>{St=!St;if(St){$.stop();Ut(true);return}Mt.transition().duration(Bt).attr("x",0).attr("width",(t=>t.pxwidth+B+t.labelwidth));yt.attr("text-anchor","start").attr("dominant-baseline","central").attr("x",(t=>t.pxwidth+B)).attr("y",A/2);at.attr("fill-opacity",1);rt.attr("fill-opacity",1);it.attr("fill-opacity",1);ot.attr("stroke-opacity",0);kt.attr("fill-opacity",0);vt.attr("fill-opacity",0);K.transition().duration(Bt).attr("width",I+this.width+V);zt.transition().duration(Bt).attr("x",I+this.width+V-u);$.alpha(.3).restart()}));const Et=[];for(const t of e){if(t.gm&&t.gm.pdomains){Et.push(t)}}if(Et.length){let t=false;j.append("button").text("Protein domains").on("click",(()=>{if(!t){t=true;for(const t of Et){const e=N.append("div").style("margin-bottom","10px").style("padding","10px");e.append("div").style("margin-bottom","10px").html(t.gm.name+" "+t.gm.isoform).append("div");const n=d(t.gm);for(const a of n){const n=e.append("div");const r=n.append("div").style("display","inline-block").style("padding","2px 3px").style("border","solid 1px "+a.stroke).style("font-family","Courier").style("margin-right","10px").style("background-color",a.fill).style("cursor","default").html("&nbsp;").on("click",(e=>{if(t.gm.domain_hidden[a.key]){delete t.gm.domain_hidden[a.key]}else{t.gm.domain_hidden[a.key]=1}xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("height",(()=>{if(a.key in t.gm.domain_hidden){e.target.innerHTML="&times;";return 0}e.target.innerHTML="&nbsp;";return A}))}));n.append("input").attr("type","color").style("display","none").property("value",a.fill);n.append("span").text(a.name).attr("class","sja_clbtext2").style("margin-right","5px").property("title","Click to edit color of this domain").on("click",(e=>{R.clear().showunder(e.target);const n=R.d.append("input").attr("type","text").property("value",a.fill).style("width","100px").on("keyup",(e=>{if(!p(e))return;const n=e.target.value.trim();if(!n)return;r.style("background",n);xt.filter((e=>e.__scf.clipid==t.clipid&&e.name+e.description==a.key)).transition().attr("fill",n);t.gm.pdomains.forEach((t=>{if(t.name+t.description==a.key){t.color=n}}))})).node();n.focus();n.select();R.d.append("div").style("margin-top","10px").style("opacity",.5).style("font-size",".8em").html("To change the color of this domain,<br>type in a new color and press ENTER.")}));n.append("span").text(a.description).style("font-size",".7em").style("color","#858585")}}}if(N.style("display")=="none"){c(N)}else{m(N)}}))}j.append("button").text("SVG").on("click",(()=>{const t=e.map((t=>t.name));const n=K.append("g").style("font-family","Arial");let a=[];if(Et.length){for(const t of Et){const e={text:t.gm.name+" "+t.gm.isoform,items:[]};const n=d(t.gm);for(const a of n){if(!(a.key in t.gm.domain_hidden)){const t=[a.name,a.description];if(t[1].length>80){t[1]=t[1].substr(0,77)+"..."}e.items.push({fill:a.fill,text:t})}}a.push(e)}}const r=K.node().getBBox();const i=z({legendontop:false,svgw:r.width,svgh:r.height,legendhangleft:false,titleline:true,legendpadleft:10,legendfontsize:12,legendlinesep:true,samplecount4legend:false,h:{legend:a},handlers:{legend:{mouseover:()=>{}}}},(t=>t.fill),(t=>t.text),(t=>"#aaa"));i(n);const o=+K.attr("width");const s=+K.attr("height");const l=n.node().getBBox();K.attr("width",o+l.width).attr("height",s+l.height+10);zt.style("display","none");h(K.node(),t.join("-"));zt.style("display","");n.remove();K.attr("width",o).attr("height",s)}));j.append("a").attr("href","https://docs.google.com/document/d/1LgcMk_p1qyPgFPQChy4sLlU9GDL6oahffP7jJfD8ZwE/edit?usp=sharing").attr("target","_blank").text("Help").style("padding-left","10px")}}function B(t){if(t.gm){if(!Number.isFinite(t.position)){if(!Number.isFinite(t.rnaposition)){if(!Number.isFinite(t.codon))return"no position provided genome/rna/codon";t.rnaposition=(t.gm.utr5?t.gm.utr5.reduce(((t,e)=>t+e[1]-e[0]),0):0)+t.codon*3-1}if(!Number.isFinite(t.rnaposition))return"neither genomic or rna position given for node";t.position=g(t.rnaposition,t.gm);if(t.position==null)return"cannot map rnaposition "+t.rnaposition+" to "+t.gm.isoform}const e=a(t.position,t.gm,5);t.exonbp=e.rnapos;if(!Number.isFinite(t.codon))t.codon=e.aapos;t.atintron=e.atintron;t.exon=e.atexon;t.atutr3=e.atutr3;t.atutr5=e.atutr5;t.atupstream=e.atupstream;t.atdownstream=e.atdownstream}else{if(!t.chr||!t.position){return"missing genomic position for intergenic breakpoint"}}return false}function U(t,e,n){const a={};for(const e in t){a[e]=t[e]}if(!a.gm){a.label=a.chr+":"+a.position}else if(a.atupstream){a.label=a.atupstream.off+" bp upstream"}else if(a.atdownstream){a.label=a.atdownstream.off+" bp downstream"}else if(a.atutr3){if(a.atintron){a.label="intron "+a.atintron+", 3' UTR"}else{a.label="3' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atutr5){if(a.atintron){a.label="intron "+a.atintron+", 5' UTR"}else{a.label="5' UTR"+(a.exon?", exon "+a.exon:"")}}else if(a.atintron){a.label="intron "+a.atintron+(a.codon?", "+a.codon+" AA":"")}else{a.label=(a.exon?"exon "+a.exon+", ":"")+(a.codon?a.codon+" AA":a.exonbp+" bp")}if(a.strand&&a.gm){if(a.strand!=a.gm.strand){a.antisense=true}}n.nodes.push(a);e[a.scfid].nodes.push(a);return a}export{T as default};