@sjcrh/proteinpaint-client 2.74.2 → 2.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/{2dmaf-b2d78c57.js → 2dmaf-74b99126.js} +1 -1
  2. package/dist/AppHeader-cecb39c2.js +1 -0
  3. package/dist/{ColorScale-9c76aef3.js → ColorScale-21cab8d2.js} +1 -1
  4. package/dist/DEanalysis-95bad59a.js +1 -0
  5. package/dist/Disco-a6e921a0.js +1 -0
  6. package/dist/Disco.UI-9ad999ed.js +1 -0
  7. package/dist/{DragControls-586f72db.js → DragControls-e3b6a937.js} +1 -1
  8. package/dist/{DziViewer-6311327c.js → DziViewer-354a790d.js} +1 -1
  9. package/dist/FilterRxComp-701a1480.js +1 -0
  10. package/dist/{FilterStateless-046081c2.js → FilterStateless-54c0b763.js} +1 -1
  11. package/dist/{HicApp-40e44cba.js → HicApp-d5a946bf.js} +1 -1
  12. package/dist/{OrbitControls-0cda1772.js → OrbitControls-694652cd.js} +1 -1
  13. package/dist/WSIViewer-dc7f8eb0.js +1 -0
  14. package/dist/adSandbox-f438e388.js +1 -0
  15. package/dist/app-3320ab6f.js +1 -0
  16. package/dist/app-649f8357.js +1 -0
  17. package/dist/app-b369b169.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/bam-431875ef.js +1 -0
  20. package/dist/barchart-8277ed43.js +1 -0
  21. package/dist/barchart.events-da29c90d.js +1 -0
  22. package/dist/{bars.renderer-5f7a4174.js → bars.renderer-dcfdd59b.js} +1 -1
  23. package/dist/block-6aedd569.js +1 -0
  24. package/dist/block.lazyload-87b12654.js +1 -0
  25. package/dist/block.legend-d3f61ef7.js +1 -0
  26. package/dist/{block.mds-effc078d.js → block.mds-3ad17dfa.js} +1 -1
  27. package/dist/{block.mds.cnv-ec861a26.js → block.mds.cnv-857ba868.js} +1 -1
  28. package/dist/{block.mds.expressionrank-a2ad7c80.js → block.mds.expressionrank-7e3b208c.js} +1 -1
  29. package/dist/{block.mds.expressionstat-31dc5595.js → block.mds.expressionstat-f2d31c86.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-3ca857ce.js → block.mds.geneboxplot-f0fbaf12.js} +1 -1
  31. package/dist/{block.mds.junction-debba938.js → block.mds.junction-7f87f48f.js} +1 -1
  32. package/dist/{block.mds.svcnv-8dc5abdf.js → block.mds.svcnv-ac035c12.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-81e62600.js → block.mds.svcnv.share-886d9479.js} +1 -1
  34. package/dist/block.mds2-7852c1ee.js +1 -0
  35. package/dist/{block.svg-9121e8e7.js → block.svg-9b916fa6.js} +1 -1
  36. package/dist/{block.tk.aicheck-c1b478e9.js → block.tk.aicheck-6770e333.js} +1 -1
  37. package/dist/{block.tk.ase-0f6ded48.js → block.tk.ase-ee807e59.js} +1 -1
  38. package/dist/{block.tk.bam-7cd06aee.js → block.tk.bam-00fba6e8.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-3ef8b94e.js → block.tk.bedgraphdot-7fda78e9.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-d1248810.js → block.tk.bigwig.ui-cc1a42f3.js} +1 -1
  41. package/dist/{block.tk.hicstraw-ee731e55.js → block.tk.hicstraw-526470e3.js} +1 -1
  42. package/dist/{block.tk.junction-4d8cab4d.js → block.tk.junction-b43a4cda.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-a6430b27.js → block.tk.junction.textmatrixui-a60ed78a.js} +1 -1
  44. package/dist/{block.tk.ld-8429a18b.js → block.tk.ld-d15bde41.js} +1 -1
  45. package/dist/{block.tk.menu-3f31f958.js → block.tk.menu-3aeb93c6.js} +1 -1
  46. package/dist/{block.tk.pgv-07e46705.js → block.tk.pgv-9af2bd64.js} +1 -1
  47. package/dist/boxplot-e17a17b7.js +1 -0
  48. package/dist/brainImaging-bf2ceee9.js +1 -0
  49. package/dist/{brush-c386fe3d.js → brush-aa175142.js} +1 -1
  50. package/dist/categorical-a52014a1.js +1 -0
  51. package/dist/condition-c646e357.js +1 -0
  52. package/dist/controls-287e6efa.js +1 -0
  53. package/dist/{controls.btns-1cb2bfab.js → controls.btns-79b805dd.js} +1 -1
  54. package/dist/controls.config-28d6d6a8.js +1 -0
  55. package/dist/cuminc-9e275854.js +1 -0
  56. package/dist/{customdata.inputui-cbd712ea.js → customdata.inputui-dc49d94b.js} +1 -1
  57. package/dist/dataDownload-3a3d4f33.js +1 -0
  58. package/dist/databrowser.ui-d8d3f8fd.js +1 -0
  59. package/dist/{density-19266ebf.js → density-a82a8b1c.js} +1 -1
  60. package/dist/dictionary-c5a19d90.js +1 -0
  61. package/dist/{drag-0b968811.js → drag-7b30ba17.js} +1 -1
  62. package/dist/{e2pca-b8752945.js → e2pca-82765817.js} +1 -1
  63. package/dist/{ep-a86b185a.js → ep-d017ec2f.js} +1 -1
  64. package/dist/facet-a9b44ef3.js +1 -0
  65. package/dist/{fusion.parse-244b2b97.js → fusion.parse-d40d0b9d.js} +1 -1
  66. package/dist/geneExpClustering-34c3f518.js +1 -0
  67. package/dist/geneExpression-0d1b7244.js +1 -0
  68. package/dist/{geneExpression-e0430f2e.js → geneExpression-589f485b.js} +1 -1
  69. package/dist/{geneExpression-387205bf.js → geneExpression-7d14983f.js} +1 -1
  70. package/dist/geneORA-903a780f.js +1 -0
  71. package/dist/{geneVariant-7de021b6.js → geneVariant-89601b34.js} +1 -1
  72. package/dist/geneVariant-92c4e870.js +1 -0
  73. package/dist/{genefusion.ui-a331de19.js → genefusion.ui-7e22e811.js} +1 -1
  74. package/dist/{genesearch-ea59f5d4.js → genesearch-a4e19f0d.js} +1 -1
  75. package/dist/geneset-108a39d2.js +1 -0
  76. package/dist/genomeBrowser-12f86a36.js +1 -0
  77. package/dist/genomeBrowser.controls-d5067811.js +1 -0
  78. package/dist/{groupsetting-20ffef77.js → groupsetting-b4416a96.js} +1 -1
  79. package/dist/gsea-543dab25.js +1 -0
  80. package/dist/hierCluster-26e14090.js +1 -0
  81. package/dist/hierCluster.config-98e82dff.js +1 -0
  82. package/dist/{hierCluster.interactivity-9b433033.js → hierCluster.interactivity-e56f6542.js} +1 -1
  83. package/dist/hierCluster.renderers-74a64cf5.js +1 -0
  84. package/dist/{html.legend-abb5452e.js → html.legend-a3f4ebfe.js} +1 -1
  85. package/dist/imagePlot-b9eae4ae.js +1 -0
  86. package/dist/{lasso-55cf4057.js → lasso-f767f634.js} +1 -1
  87. package/dist/launch.adhoc-abca6af3.js +1 -0
  88. package/dist/leftlabel.sample-24c2388d.js +1 -0
  89. package/dist/legacyDataset-e0e201ab.js +1 -0
  90. package/dist/{log-cf45fcf2.js → log-99af3443.js} +1 -1
  91. package/dist/{lollipop-c5b6e615.js → lollipop-806f8fa4.js} +1 -1
  92. package/dist/{maf-7535f1f9.js → maf-b06579e4.js} +1 -1
  93. package/dist/{maftimeline-1292ab62.js → maftimeline-4840a380.js} +1 -1
  94. package/dist/matrix-00bb50ff.js +1 -0
  95. package/dist/matrix.cells-914dd0c6.js +1 -0
  96. package/dist/{matrix.cluster-168bc96b.js → matrix.cluster-783ceab0.js} +1 -1
  97. package/dist/matrix.config-6ce74dfe.js +1 -0
  98. package/dist/matrix.controls-7b2a6f95.js +1 -0
  99. package/dist/{matrix.data-b1d0febe.js → matrix.data-dac4f1b7.js} +1 -1
  100. package/dist/{matrix.dom-00defa30.js → matrix.dom-4e10bbe9.js} +1 -1
  101. package/dist/matrix.groups-b9fca14a.js +1 -0
  102. package/dist/matrix.interactivity-84169b43.js +1 -0
  103. package/dist/{matrix.layout-c2345231.js → matrix.layout-dd5a44fd.js} +1 -1
  104. package/dist/matrix.legend-ac6d45e6.js +1 -0
  105. package/dist/matrix.renderers-78010275.js +1 -0
  106. package/dist/matrix.serieses-9b4fd744.js +1 -0
  107. package/dist/matrix.sort-014d798d.js +1 -0
  108. package/dist/{matrix.sorterUi-a741ba2e.js → matrix.sorterUi-9bf7e6f9.js} +1 -1
  109. package/dist/{mavb-92136d17.js → mavb-c6be46fc.js} +1 -1
  110. package/dist/{mds.fimo-c03115b4.js → mds.fimo-bff6a1ed.js} +1 -1
  111. package/dist/mds.samplescatterplot-9a02b9fb.js +1 -0
  112. package/dist/{mds.survivalplot-366db380.js → mds.survivalplot-055549f4.js} +1 -1
  113. package/dist/{metaboliteIntensity-ddb6e480.js → metaboliteIntensity-fac92f8b.js} +1 -1
  114. package/dist/niceNumLabels-238aabce.js +1 -0
  115. package/dist/{nodrag-2c046d31.js → nodrag-16ad4b03.js} +1 -1
  116. package/dist/{notify-44ebc0df.js → notify-224cccbd.js} +1 -1
  117. package/dist/{numeric-918d4686.js → numeric-b0b17185.js} +1 -1
  118. package/dist/numeric.binary-1f9e93f2.js +1 -0
  119. package/dist/numeric.continuous-ebcd0567.js +1 -0
  120. package/dist/numeric.discrete-7b97044a.js +1 -0
  121. package/dist/numeric.spline-1be88f3d.js +1 -0
  122. package/dist/numeric.toggle-7fa2a770.js +1 -0
  123. package/dist/oncomatrix-351af2a0.js +1 -0
  124. package/dist/{parseData-e66308cd.js → parseData-21fe9822.js} +1 -1
  125. package/dist/partjson.esm-b3f1fc21.js +1 -0
  126. package/dist/{plot.2dvaf-73dbfbd1.js → plot.2dvaf-18a35e4b.js} +1 -1
  127. package/dist/plot.app-30c4b8e5.js +1 -0
  128. package/dist/plot.barplot-7c4865a2.js +1 -0
  129. package/dist/{plot.boxplot-641da058.js → plot.boxplot-fe3046c6.js} +1 -1
  130. package/dist/plot.brainImaging-2ceb6023.js +1 -0
  131. package/dist/plot.disco-6011f87f.js +1 -0
  132. package/dist/{plot.dzi-41ea26e5.js → plot.dzi-6728a7c8.js} +1 -1
  133. package/dist/plot.ssgq-5581dc56.js +1 -0
  134. package/dist/{plot.vaf2cov-80e58833.js → plot.vaf2cov-b2284c64.js} +1 -1
  135. package/dist/{plot.wsi-51cc48ef.js → plot.wsi-9a9d4034.js} +1 -1
  136. package/dist/profileBarchart-0476f1f8.js +1 -0
  137. package/dist/profileHome-32eb9b50.js +1 -0
  138. package/dist/profilePlot-c7e099e8.js +1 -0
  139. package/dist/profilePolar-6b981e63.js +1 -0
  140. package/dist/profileRadar-bca1cc03.js +1 -0
  141. package/dist/profileRadarFacility-bbb1ecd8.js +1 -0
  142. package/dist/profileSummary-b114204f.js +1 -0
  143. package/dist/recover-49e09de0.js +1 -0
  144. package/dist/regression.inputs-a761f40d.js +1 -0
  145. package/dist/regression.inputs.values.table-5929d25a.js +1 -0
  146. package/dist/regression.results-69bc42d0.js +1 -0
  147. package/dist/{renderPvalueTable-895a72c2.js → renderPvalueTable-dc5d15f2.js} +1 -1
  148. package/dist/sampleScatter-2d0ed680.js +1 -0
  149. package/dist/{sampleScatter.rendererThree-5e686004.js → sampleScatter.rendererThree-0b12ac61.js} +2 -2
  150. package/dist/sampleView-484ab133.js +1 -0
  151. package/dist/samplelst-689796e6.js +1 -0
  152. package/dist/{samplematrix-2a1d7d82.js → samplematrix-2b137a05.js} +1 -1
  153. package/dist/scatter-205e013f.js +1 -0
  154. package/dist/{select2Terms-b4fffc50.js → select2Terms-b21e184a.js} +1 -1
  155. package/dist/{selectGenomeWithTklst-acf7e568.js → selectGenomeWithTklst-466995b4.js} +1 -1
  156. package/dist/singleCellCellType-5db730bb.js +1 -0
  157. package/dist/{singleCellGeneExpression-6de17162.js → singleCellGeneExpression-7147a2d0.js} +1 -1
  158. package/dist/singleCellPlot-73b2738f.js +1 -0
  159. package/dist/{singlecell-f76c856a.js → singlecell-24409b72.js} +1 -1
  160. package/dist/singlecell-bca774ed.js +1 -0
  161. package/dist/{snp-9590a1b4.js → snp-37d06246.js} +1 -1
  162. package/dist/snp-a8388ce4.js +1 -0
  163. package/dist/snplocus-7a1ea8c9.js +1 -0
  164. package/dist/{snplst-007a1926.js → snplst-6865d7c7.js} +1 -1
  165. package/dist/{spliceevent.a53ss.diagram-63dfef69.js → spliceevent.a53ss.diagram-e2eab72b.js} +1 -1
  166. package/dist/{spliceevent.exonskip.diagram-76fa9af8.js → spliceevent.exonskip.diagram-4d5df3a1.js} +1 -1
  167. package/dist/spliceevent.exonskip.getdefault-a94aad6e.js +1 -0
  168. package/dist/{spliceevent.noeventdiagram-64a099e0.js → spliceevent.noeventdiagram-ea97b0fb.js} +1 -1
  169. package/dist/{spliceevent.phrase-770c8cac.js → spliceevent.phrase-c5832470.js} +1 -1
  170. package/dist/{stattable-f1189f0f.js → stattable-7c5ecc2f.js} +1 -1
  171. package/dist/{style.gdc-89cfdb0f.js → style.gdc-131f3c77.js} +1 -1
  172. package/dist/summary-5ec455d3.js +1 -0
  173. package/dist/{sunburst-d5379952.js → sunburst-533902a7.js} +1 -1
  174. package/dist/survival-92250664.js +1 -0
  175. package/dist/survival-e16e068f.js +1 -0
  176. package/dist/{svg.download-86850940.js → svg.download-35926549.js} +1 -1
  177. package/dist/{svg.legend-a94b0697.js → svg.legend-8d490df2.js} +1 -1
  178. package/dist/{svgraph-c57b9ae3.js → svgraph-6fac8cbc.js} +1 -1
  179. package/dist/{svmr-cf6f1b27.js → svmr-d07ff695.js} +1 -1
  180. package/dist/table-29d5a973.js +1 -0
  181. package/dist/table-ad744310.js +1 -0
  182. package/dist/termInfo-bf99a37e.js +1 -0
  183. package/dist/{termdb.bins-9faa5170.js → termdb.bins-8b656cc3.js} +1 -1
  184. package/dist/termsetting-33ea66f1.js +1 -0
  185. package/dist/tk-071a7550.js +1 -0
  186. package/dist/{toggleButtons-002aeda1.js → toggleButtons-dbdbad01.js} +1 -1
  187. package/dist/tp.ui-9c2e9fc5.js +1 -0
  188. package/dist/tslib.es6-c3c2d88f.js +1 -0
  189. package/dist/tvs.density-f6128793.js +1 -0
  190. package/dist/{tvs.geneVariant-3a65ad94.js → tvs.geneVariant-ca4bdbb1.js} +1 -1
  191. package/dist/tvs.numeric-0260a825.js +1 -0
  192. package/dist/{tvs.samplelst-1eeb586b.js → tvs.samplelst-cb71b3bf.js} +1 -1
  193. package/dist/{uiUtils-1336bad7.js → uiUtils-f1bd2bcc.js} +1 -1
  194. package/dist/{variantBrowser-f0c812c1.js → variantBrowser-7c540224.js} +1 -1
  195. package/dist/{vcf-c4a23924.js → vcf-5cc55588.js} +1 -1
  196. package/dist/violin-2ba509eb.js +1 -0
  197. package/dist/violin.interactivity-4da6d7a9.js +1 -0
  198. package/dist/{violin.renderer-dafd89fa.js → violin.renderer-ce024265.js} +1 -1
  199. package/dist/{violinRenderer-8215f40d.js → violinRenderer-f7c96a60.js} +1 -1
  200. package/dist/{viridis-ffd14c4d.js → viridis-01ab20c5.js} +1 -1
  201. package/dist/{y-dd197cc9.js → y-67939f83.js} +1 -1
  202. package/dist/{zoom-9c63e74c.js → zoom-25dce8b9.js} +1 -1
  203. package/package.json +6 -4
  204. package/dist/AppHeader-a2a7e518.js +0 -1
  205. package/dist/DEanalysis-a6b50e49.js +0 -1
  206. package/dist/Disco-1c71b7dd.js +0 -1
  207. package/dist/Disco.UI-4c16ee50.js +0 -1
  208. package/dist/FilterRxComp-242f4615.js +0 -1
  209. package/dist/WSIViewer-d90032d7.js +0 -1
  210. package/dist/adSandbox-3528c372.js +0 -1
  211. package/dist/app-07dee349.js +0 -1
  212. package/dist/app-a8c4854a.js +0 -1
  213. package/dist/app-ade9c62a.js +0 -1
  214. package/dist/bam-92483a98.js +0 -1
  215. package/dist/barchart-3e69d094.js +0 -1
  216. package/dist/barchart.events-9b11d97e.js +0 -1
  217. package/dist/block-dcb130fb.js +0 -1
  218. package/dist/block.lazyload-9f031cac.js +0 -1
  219. package/dist/block.legend-b2987cd9.js +0 -1
  220. package/dist/block.mds2-de6e0986.js +0 -1
  221. package/dist/boxplot-1178fffc.js +0 -1
  222. package/dist/brainImaging-98ed7aa2.js +0 -1
  223. package/dist/categorical-26528ce8.js +0 -1
  224. package/dist/condition-b0d74550.js +0 -1
  225. package/dist/controls-0bacec22.js +0 -1
  226. package/dist/controls.config-0ccc9d79.js +0 -1
  227. package/dist/controls.divide-a9fe9466.js +0 -1
  228. package/dist/controls.overlay-fe20d41d.js +0 -1
  229. package/dist/controls.term1-faa2efcf.js +0 -1
  230. package/dist/cuminc-7e2cac2d.js +0 -1
  231. package/dist/dataDownload-ade8d840.js +0 -1
  232. package/dist/databrowser.ui-716f0519.js +0 -1
  233. package/dist/dictionary-3f83ce63.js +0 -1
  234. package/dist/facet-6850cfed.js +0 -1
  235. package/dist/geneExpClustering-7fd3c87e.js +0 -1
  236. package/dist/geneExpression-6462537d.js +0 -1
  237. package/dist/geneORA-7eb818c4.js +0 -1
  238. package/dist/geneVariant-b58e924a.js +0 -1
  239. package/dist/geneset-9f69ad3f.js +0 -1
  240. package/dist/genomeBrowser-1b2b83f7.js +0 -1
  241. package/dist/genomeBrowser.controls-cd8ddeb1.js +0 -1
  242. package/dist/gsea-36376589.js +0 -1
  243. package/dist/hierCluster-f1e30c19.js +0 -1
  244. package/dist/hierCluster.config-da3510b1.js +0 -1
  245. package/dist/hierCluster.renderers-610d8860.js +0 -1
  246. package/dist/imagePlot-7089bdff.js +0 -1
  247. package/dist/launch.adhoc-d229fd55.js +0 -1
  248. package/dist/leftlabel.sample-a919168c.js +0 -1
  249. package/dist/legacyDataset-1cbcb67d.js +0 -1
  250. package/dist/matrix-0614794d.js +0 -1
  251. package/dist/matrix.cells-819d4991.js +0 -1
  252. package/dist/matrix.config-c54ca273.js +0 -1
  253. package/dist/matrix.controls-5eca7822.js +0 -1
  254. package/dist/matrix.groups-4660dd70.js +0 -1
  255. package/dist/matrix.interactivity-23d83183.js +0 -1
  256. package/dist/matrix.legend-2e647224.js +0 -1
  257. package/dist/matrix.renderers-43445f4f.js +0 -1
  258. package/dist/matrix.serieses-972fbe5d.js +0 -1
  259. package/dist/matrix.sort-80d9b788.js +0 -1
  260. package/dist/mds.samplescatterplot-1623e6d0.js +0 -1
  261. package/dist/niceNumLabels-6cfc1508.js +0 -1
  262. package/dist/numeric.binary-80467e8b.js +0 -1
  263. package/dist/numeric.continuous-69a62a15.js +0 -1
  264. package/dist/numeric.discrete-86181905.js +0 -1
  265. package/dist/numeric.spline-1b07fd13.js +0 -1
  266. package/dist/numeric.toggle-37c4bee8.js +0 -1
  267. package/dist/oncomatrix-475271da.js +0 -1
  268. package/dist/plot.app-aa916e0e.js +0 -1
  269. package/dist/plot.barplot-8b440a2b.js +0 -1
  270. package/dist/plot.brainImaging-2f796b0c.js +0 -1
  271. package/dist/plot.disco-43e18d2f.js +0 -1
  272. package/dist/plot.ssgq-e49cb70b.js +0 -1
  273. package/dist/profileBarchart-91463ab6.js +0 -1
  274. package/dist/profileHome-d37a6821.js +0 -1
  275. package/dist/profilePlot-9ca577cb.js +0 -1
  276. package/dist/profilePolar-19c7da5b.js +0 -1
  277. package/dist/profileRadar-8bf094e3.js +0 -1
  278. package/dist/profileRadarFacility-f9fd8971.js +0 -1
  279. package/dist/profileSummary-93999c14.js +0 -1
  280. package/dist/recover-36ada47f.js +0 -1
  281. package/dist/regression.inputs-cb57ece6.js +0 -1
  282. package/dist/regression.inputs.values.table-908bb37a.js +0 -1
  283. package/dist/regression.results-c186a8dc.js +0 -1
  284. package/dist/roundValue-b0d0517c.js +0 -1
  285. package/dist/sampleScatter-9d5b3630.js +0 -1
  286. package/dist/sampleView-2d895023.js +0 -1
  287. package/dist/samplelst-9f8343ff.js +0 -1
  288. package/dist/scatter-b4992f64.js +0 -1
  289. package/dist/singleCellCellType-84a0c2cf.js +0 -1
  290. package/dist/singleCellPlot-2f2b8619.js +0 -1
  291. package/dist/singlecell-90567dde.js +0 -1
  292. package/dist/snp-79ec95ba.js +0 -1
  293. package/dist/snplocus-cb629be1.js +0 -1
  294. package/dist/spliceevent.exonskip.getdefault-31d2950c.js +0 -1
  295. package/dist/summary-b77bef3c.js +0 -1
  296. package/dist/survival-61ab375a.js +0 -1
  297. package/dist/survival-80a0ade9.js +0 -1
  298. package/dist/table-79e3e776.js +0 -1
  299. package/dist/table-eee91e14.js +0 -1
  300. package/dist/termInfo-f851b415.js +0 -1
  301. package/dist/tk-75566002.js +0 -1
  302. package/dist/tp.ui-02911b56.js +0 -1
  303. package/dist/tslib.es6-1f85f553.js +0 -1
  304. package/dist/tvs.density-026fca97.js +0 -1
  305. package/dist/tvs.numeric-3f3d9919.js +0 -1
  306. package/dist/violin-1515c3e6.js +0 -1
  307. package/dist/violin.interactivity-8e2f480d.js +0 -1
@@ -1 +1 @@
1
- import{ad as t,ah as e,bV as o,bW as n,a7 as a,aF as i,bX as s,a8 as r,af as l,I as c,ag as f,d,l as h,p as u,aE as p,ae as m,j as g,M as x,ab as v,k}from"./app-a8c4854a.js";import{l as y}from"./block.legend-b2987cd9.js";import{s as b}from"./spliceevent.phrase-770c8cac.js";import{e as w}from"./spliceevent.exonskip.getdefault-31d2950c.js";import{c as j,a as _}from"./_commonjsHelpers-318dc0aa.js";import{l as M}from"./log-cf45fcf2.js";import{d as z}from"./axis-747c801e.js";import"./vcf-c4a23924.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./legacy-d3-polyfill-bdb2d792.js";function A(t,e){for(const e of t){e.exonleft=[];e.exonright=[];e.exonleftin=[];e.exonrightin=[];e.intronleft=[];e.intronright=[];e.leftout=[];e.rightout=[];e.matchisoform=[]}const o=[];for(const n of e){let e=false;for(const o of t){if(n.chr==o.chr&&Math.max(n.start,o.start)<Math.min(n.stop,o.stop)){e=true;break}}if(e){o.push(n)}}if(o.length==0){return}const n=new Map;const a=new Map;for(const e of t){if(!n.has(e.start)){n.set(e.start,[])}n.get(e.start).push(e);if(!a.has(e.stop)){a.set(e.stop,[])}a.get(e.stop).push(e)}for(const[t,e]of n){for(const n of o){if(!n.exon)continue;for(let o=0;o<n.exon.length;o++){if(n.exon[o][1]-1==t){for(const t of e){t.exonleft.push({gm:n,exonidx:o})}}if(n.exon[o][0]<=t&&n.exon[o][1]-1>t){for(const t of e){t.exonleftin.push({gm:n,exonidx:o})}}}if(n.intron){for(let o=0;o<n.intron.length;o++){if(n.intron[o][0]<=t&&n.intron[o][1]>t){for(const t of e){t.intronleft.push({gm:n,intronidx:o})}}}}}}for(const[t,e]of a){for(const n of o){if(!n.exon)continue;for(let o=0;o<n.exon.length;o++){if(n.exon[o][0]==t){for(const t of e){t.exonright.push({gm:n,exonidx:o})}}if(n.exon[o][0]<t&&n.exon[o][1]>t){for(const t of e){t.exonrightin.push({gm:n,exonidx:o})}}}if(n.intron){for(let o=0;o<n.intron.length;o++){if(n.intron[o][0]<=t&&n.intron[o][1]>t){for(const t of e){t.intronright.push({gm:n,intronidx:o})}}}}}}for(const e of t){{const t=new Set;for(const o of e.exonleft)t.add(o.gm.isoform);for(const o of e.exonleftin)t.add(o.gm.isoform);for(const o of e.intronleft)t.add(o.gm.isoform);if(t.size){for(const n of o){if(!t.has(n.isoform))continue;if(n.stop<=e.stop){e.rightout.push({gm:n})}}}}{const t=new Set;for(const o of e.exonright)t.add(o.gm.isoform);for(const o of e.exonrightin)t.add(o.gm.isoform);for(const o of e.intronright)t.add(o.gm.isoform);if(t.size){for(const n of o){if(!t.has(n.isoform))continue;if(n.start>e.start){e.leftout.push({gm:n})}}}}}for(const e of t){if(e.exonleft.length==0||e.exonright.length==0)continue;for(const t of e.exonleft){for(const o of e.exonright){if(t.gm.isoform==o.gm.isoform){e.matchisoform.push({gm:t.gm,leftexonidx:t.exonidx,rightexonidx:o.exonidx})}}}}}const B="#99004d";const T="#004d99";function E(t,e,o){const n=[];for(const a of e){if(!a.matchisoform||a.matchisoform.length==0){continue}for(const i of a.matchisoform){const s=Math.min(i.leftexonidx,i.rightexonidx);const r=Math.max(i.leftexonidx,i.rightexonidx);if(r-s<=1){continue}const l=a;const c={skippedexon:[],junctionB:l,junctionAlst:[]};for(let t=s+1;t<r;t++){c.skippedexon.push(t)}let f=null;for(const t of o){if(!t.intron)continue;for(const e of t.intron){if(e[0]-1==l.start&&e[1]==l.stop){f=t;break}}if(f){break}}if(f){c.isaltexon=true;c.color=T;c.gmA=i.gm;c.gmB=f}else{c.isskipexon=true;c.color=B;c.gm=i.gm;const[t,e,o]=C(c.skippedexon,c.gm);if(t)c.utr3=true;if(e)c.utr5=true;if(o)c.coding=true}{const t=q(e,i.gm,s,r);for(const e of t){c.junctionAlst.push(e)}}if(c.isskipexon){N(c,i.gm,e)}if(t){if(!l.data){console.error("exonskip: jB.data missing when it is multi-sample");continue}if(l.data.length==0){console.error("exonskip: jB.data.length==0");continue}let t=0;for(const e of l.data){const o=e.v;let n=0;for(const t of c.junctionAlst){if(!t){continue}if(!t.data){console.log("exonskip: jA.data missing when multi-sample");continue}for(const o of t.data){if(o.tkid==e.tkid){n+=o.v;break}}}t+=100*o/(o+n/c.junctionAlst.length)}c.percentage=Math.ceil(t/l.data.length)}else{let t=0;for(const e of c.junctionAlst){t+=e?e.data[0].v:0}c.percentage=Math.ceil(100*c.junctionB.data[0].v/(c.junctionB.data[0].v+t/c.junctionAlst.length))}n.push(c)}}const a=new Map;for(const t of n){const e=[];for(const o of t.skippedexon){let n;if(t.isskipexon){n=t.gm.exon[o]}else{n=t.gmA.exon[o]}e.push(n[0]);e.push(n[1])}if(e.length==0){console.error("not possible: no skipped exon position for exon-skip");console.log(t);continue}e.sort();const o=e.join(".")+"|"+t.junctionB.start+"."+t.junctionB.stop;if(!a.has(o)){a.set(o,[])}a.get(o).push(t)}const i=[];for(const e of a.values()){const o={eventlst:e,exonlst:[]};i.push(o);const n=e[0];for(const t of n.skippedexon){const e=n.isskipexon?n.gm:n.gmA;const a=e.exon[t];o.exonlst.push({chr:e.chr,start:a[0],stop:a[1]})}let a=0,s=0;for(const t of e){if(t.isskipexon){a++}else{s++}}o.color=a>0?B:T;const r=new Set;for(const t of e){const e=[];for(const o of t.skippedexon){e.push(o+1)}r.add(e.join(","))}if(r.size==1){o.toplabelsays="exon "+[...r][0]+" "}else{o.toplabelsays="exon "}o.toplabelsays+=a?"skip"+(s?"|alt":""):"alt";if(t){let t=0;for(const o of e){t=Math.max(t,o.junctionB.data.length)}o.middlelabelsays=t+" sample"+(t>1?"s":"")}o.bottomlabelsays=n.percentage+"%"}return i}function P(t,e,o){const n=Math.min(e,o);const a=Math.max(e,o);for(const e of t){if(e.start==n&&e.stop==a)return e}return null}function q(t,e,o,n){const a=[];const i=Math.min(o,n);const s=Math.max(o,n);if(e.strand=="+"){for(let o=i;o<s;o++){const n=e.exon[o][1]-1;const i=e.exon[o+1][0];a.push(P(t,n,i))}}else{for(let o=s;o>i;o--){const n=e.exon[o][1]-1;const i=e.exon[o-1][0];a.unshift(P(t,n,i))}}return a}function N(t,e,o){let n=t.skippedexon[0];if(n>1){let a,i;if(e.strand=="+"){a=e.exon[n-2][1]-1;i=e.exon[n-1][0]}else{a=e.exon[n-1][1]-1;i=e.exon[n-2][0]}t.up1junction=P(o,a,i)}n=t.skippedexon[t.skippedexon.length-1];if(n<e.exon.length-2){let a,i;if(e.strand=="+"){a=e.exon[n+1][1]-1;i=e.exon[n+2][0]}else{a=e.exon[n+2][1]-1;i=e.exon[n+1][0]}t.down1junction=P(o,a,i)}}function C(t,e){if(!e.coding){return[false,false,false]}let o=e.exon[t[0]][0];let n=e.exon[t[0]][1];for(const a of t){o=Math.min(e.exon[a][0],o);n=Math.max(e.exon[a][1],n)}const a=e.strand=="+";let i=false,s=false,r=false;if(n<=e.codingstart){if(a){s=true}else{i=true}}else if(o>=e.codingstop){if(a){i=true}else{s=true}}else{r=true}return[i,s,r]}function L(o,n){if(o.eventsg){o.eventsg.selectAll("*").remove()}if(o.type!=t.junction){return}if(!o.data){return}if(o.data.length==0){return}const[a,i]=J(n);if(a){const t=12;const i=2;o.eventsg.append("rect").attr("width",n.width).attr("height",i*2+t).attr("fill","#f1f1f1");o.eventsg.append("text").text(a).attr("font-family",e).attr("font-size",t).attr("fill","#858585").attr("text-anchor","middle").attr("x",n.width/2).attr("y",i+t/2).attr("dominant-baseline","central");o.height_main+=i*2+t;n.block_setheight();return}if(!i){return}for(const t of o.data){delete t.spliceevents}A(o.data,i);const s=[];const r=E(o.totalsamplecount>1,o.data,i);if(r.length>0){for(const t of r){if(F(t.exonlst,n)){continue}s.push(t);for(const e of t.eventlst){if(!e.junctionB.spliceevents){e.junctionB.spliceevents=[]}e.junctionB.spliceevents.push(e)}}}if(s.length){R(s,o,n)}}function R(t,n,a){const i=10;const s=1;const r=2;let l;if(n.totalsamplecount>1){l=i*3+s*2}else{l=i*2+s}for(const s of t){s.g=n.eventsg.append("g");const t=s.eventlst[0].junctionB;const c=t.chr+"-"+t.start+"-"+t.stop;s.toplabel=s.g.append("text").text(s.toplabelsays).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",i/2).attr("dominant-baseline","central");if(n.totalsamplecount>1){s.middlelabel=s.g.append("text").text(s.middlelabelsays).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",i*1.5).attr("dominant-baseline","central")}let f=false;let d=null;for(const t of s.eventlst){if(t.isaltexon){t.framenocheck=true;continue}if(t.isskipexon){if(!t.gm.coding){t.framenocheck=true;continue}if(t.utr3||t.utr5){t.framenocheck=true;continue}}f=true;if(a.genome.junctionframecache.has(c)){let e;if(t.isskipexon){e=t.gm.isoform}const n=a.genome.junctionframecache.get(c).get(e);if(n==undefined);else{t.frame=n;if(d==null){d=n}else{if(n==o){d=o}}}}}s.bottomlabel=s.g.append("text").text(s.bottomlabelsays+(f?", "+(d==null?"checking":d==o?"IN":"OUT"):"")).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",l-i/2).attr("dominant-baseline","central");if(f&&d==null){for(const t of s.eventlst){let e;if(t.isaltexon){e=t.gmB}else if(t.isskipexon){e=t.gm}if(!a.genome.junctionframecache.has(c)){I({jbstr:c,evt:t,gm:e,block:a,eventset:s});continue}if(!a.genome.junctionframecache.get(c).has(e.isoform)){I({jbstr:c,evt:t,gm:e,block:a,eventset:s})}}}const h=[];let u=null,p;for(const t of s.exonlst){const e=a.seekcoord(t.chr,t.start)[0];if(!e){console.log("skipped exon start position not mapped: "+t.start);return}const o=a.seekcoord(t.chr,t.stop-1)[0];if(!o){console.log("skipped exon stop position not mapped: "+t.stop);return}const n={x:Math.min(e.x,o.x),w:Math.max(1,Math.abs(e.x-o.x))};n.rect=s.g.append("rect").attr("fill",s.color).attr("width",n.w).attr("height",l).attr("shape-rendering","crispEdges").on("click",(()=>{console.log(s)}));if(u==null){u=n.x;p=n.x+n.w}else{u=Math.min(u,n.x);p=Math.max(p,n.x+n.w)}h.push(n)}for(const t of h){t.rect.attr("x",t.x-u)}s.boxstart=u;s.boxwidth=p-u;if(s.exonlst.length>1){s.g.append("line").attr("stroke",s.color).attr("stroke-opacity",.2).attr("stroke-width",2).attr("shape-rendering","crispEdges").attr("x1",0).attr("x2",s.boxwidth).attr("y1",l/2-.5).attr("y2",l/2-.5)}s.toplabel.each((function(){s.labelwidth=this.getBBox().width}));if(s.middlelabel){s.middlelabel.each((function(){s.labelwidth=this.getBBox().width}))}s.bottomlabel.each((function(){s.labelwidth=Math.max(s.labelwidth,this.getBBox().width)}));if(s.labelwidth>s.boxstart){s.labelonright=true;s.toplabel.attr("x",s.boxwidth+r);s.bottomlabel.attr("x",s.boxwidth+r);if(s.middlelabel){s.middlelabel.attr("x",s.boxwidth+r)}}else{s.toplabel.attr("text-anchor","end").attr("x",-r);s.bottomlabel.attr("text-anchor","end").attr("x",-r);if(s.middlelabel){s.middlelabel.attr("text-anchor","end").attr("x",-r)}}s.cover=s.g.append("rect").attr("x",s.labelonright?0:-s.labelwidth-r).attr("width",s.labelwidth+r+s.boxwidth).attr("height",l).attr("fill","#858585").attr("fill-opacity",0).on("mouseover",(()=>{s.cover.attr("fill-opacity",.1)})).on("mouseout",(()=>{s.cover.attr("fill-opacity",0)})).on("click",(()=>{n.tktip.clear();U(s.eventlst,n.tktip.d);n.tktip.showunder(s.cover.node())}))}const c=[0];for(const e of t){let t=e.boxstart-(e.labelonright?0:r+e.labelwidth);let o=e.boxstart+e.boxwidth+(e.labelonright?r+e.labelwidth:0);for(let n=0;n<c.length;n++){if(t>c[n]){e.stackidx=n;c[n]=o;break}if(!e.labelonright){const t=e.boxstart;const o=e.boxstart+e.boxwidth+r+e.labelwidth;if(t>c[n]&&o<=a.width){e.labelonright=true;e.stackidx=n;c[n]=o;e.toplabel.attr("x",e.boxwidth+r).attr("text-anchor","start");e.bottomlabel.attr("x",e.boxwidth+r).attr("text-anchor","start");if(e.middlelabel){e.middlelabel.attr("x",e.boxwidth+r).attr("text-anchor","start")}e.cover.attr("x",0);break}}}if(e.stackidx==undefined){e.stackidx=c.length;c.push(o)}e.g.attr("transform","translate("+e.boxstart+","+e.stackidx*(l+s)+")")}n.height_main+=c.length*(l+s)+n.bottompad;a.block_setheight()}function I(t){if(!t.block.genome.junctionframecache.has(t.jbstr)){t.block.genome.junctionframecache.set(t.jbstr,new Map)}if(!t.gm.coding){t.block.genome.junctionframecache.get(t.jbstr).set(t.gm.isoform,false);S(t);return}const e=n(t.gm,t.evt);a("translategm",{method:"POST",body:JSON.stringify({genome:t.block.genome.name,gm:e})}).then((e=>{if(!e){console.log("server error");return}if(e.error){console.log(e.error);return}if(typeof e.frame!="boolean"){console.log("invalid result from translategm: "+e.frame);return}t.evt.frame=e.frame;t.block.genome.junctionframecache.get(t.jbstr).set(t.gm.isoform,e.frame);S(t)}))}function S(t){if(!t.block.genome.junctionframecache.has(t.jbstr)){return}let e=s;for(const n of t.eventset.eventlst){if(n.framenocheck){continue}let a;if(n.isskipexon){a=n.gm.isoform}const i=t.block.genome.junctionframecache.get(t.jbstr).get(a);if(i==undefined){return}if(i==o){e=o}}t.eventset.bottomlabel.text(t.eventset.bottomlabelsays+", "+(e==o?"IN":"OUT"))}function U(t,e){const o=w(t);if(t.length>1){e.append("div").style("margin","3px 0px").style("color","#858585").text("Additional interpretations:");const a=Math.random().toString();for(const[i,s]of t.entries()){const r=a+i;const l=e.append("div").style("margin-top","3px");l.append("input").attr("type","radio").property("checked",i==o).attr("name",a).attr("id",r).on("change",(()=>{O(t,i,n)}));l.append("label").attr("for",r).html("&nbsp;"+b(s))}}const n=e.append("div");O(t,o,n)}function O(t,e,o){o.selectAll("*").remove();import("./spliceevent.exonskip.diagram-76fa9af8.js").then((n=>{n.default({event:t[e],holder:o,nophrase:t.length>1})}))}function F(t,e){const o=t[0].chr;let n=t[0].start;let a=t[0].stop;for(const e of t){n=Math.min(n,e.start);a=Math.max(a,e.stop)}const i=e.seekcoord(o,n)[0];const s=e.seekcoord(o,a)[0];if(!i||!s){return true}let r=false;let l=false;if(i.x<=0){r=true}else if(i.x>=e.width){l=true}let c=false;let f=false;if(s.x<=0){c=true}else if(s.x>=e.width){f=true}if(r&&c)return true;if(l&&f)return true;return false}function J(t){if(!t.gmmode||t.gmmode==i.genomic){const e=[];for(const o of t.tklst){if(o.__isgene){e.push(o)}}if(e.length==0){return["Add a gene track to analyze splice junctions."]}const o=[];for(const t of e){if(t.gmdata){for(const e of t.gmdata){o.push(e)}}}if(o.length==0){return[null]}const n=[];for(const t of o){let e=false;for(const o of n){if(Math.max(o.start,t.start)<Math.min(o.stop,t.stop)){e=true;o.start=Math.min(o.start,t.start);o.stop=Math.max(o.stop,t.stop);break}}if(!e){n.push({start:t.start,stop:t.stop})}}if(n.length>=3){return["Zoom in on a single gene to analyze splice junctions."]}return[null,o]}if(t.gmmode==i.gmsum){if(!t.allgm){return["Error: block.allgm[] is missing"]}return[null,t.allgm]}if(!t.usegm){return["Error: block.usegm is missing"]}return[null,[t.usegm]]}var V=j((function(t,e){(function(t,o){o(e)})(_,(function(t){function e(){var t=[];var e=4;var o="horizontal";var n="symetric";var a=function(t){return t.x};var i;var s;var r;var l;var c;var f;var d,h,u,p,m,g;function x(){}x.data=function(e){if(!arguments.length){return t}t=e;return x};x.radius=function(t){if(!arguments.length){return e}e=t;return x};x.orientation=function(t){if(!arguments.length){return o}if(t==="horizontal"||t==="vertical"){o=t}return x};x.side=function(t){if(!arguments.length){return n}if(t==="symetric"||t==="positive"||t==="negative"){n=t}return x};x.distributeOn=function(t){if(!arguments.length){return a}a=t;return x};x.arrange=function(){v();f.forEach((function(t){var e=-Infinity,n,a=b(t);if(a.length===0){e=0}else{c.clear();c.addMany(a);t.free=0;if(!T(t,c.closestTo0())){e=0;m+=p;if(p>g){g=p}p=0;u+=1}else{a.forEach((function(o){n=_(o,t);M(t,o,n);if(w(t)&&j(t,e)&&!T(t,c.dln(o))){e=t.free}m+=p;if(p>g){g=p}p=0;u+=1;z(t,o,n);if(w(t)&&j(t,e)&&!T(t,c.dln(o))){e=t.free}m+=p;if(p>g){g=p}p=0;u+=1}))}}t.free=e;if(o==="horizontal"){t.x=t.fixed;t.y=e}else{t.x=e;t.y=t.fixed}l.add(t)}));return f};x.metrics=function(){return{totalPossibleColliders:d,maxPossibleColliders:h,totalTestedPlacements:u,visitedColliderCount:p,totalVisitedColliders:m,maxVisitedColliders:g}};function v(){f=t.map((function(t,e){return{datum:t,id:e,fixed:a(t),free:-Infinity}}));i=2*e;s=Math.pow(i,2);r=(new E).valueAccessor((function(t){return t.fixed})).addMany(f);l=(new E).valueAccessor((function(t){return t.fixed}));c=(new E).valueAccessor((function(t){return t.free}));d=h=0;u=0;p=m=g=0}function k(t,e,o){if(e===null){return null}else if(o==="prev"?t.value-e.value>i:e.value-t.value>i){return null}else{if(isFinite(e.datum.free)){return e.datum}return k(t,e[o],o)}}function y(t,e,o,n){if(e===null){return}else if(o==="prev"?t.value-e.value>i:e.value-t.value>i){return}else{n.push(e.datum);y(t,e[o],o,n)}}function b(t){var e=[];var o=r.dln(t);var n=k(o,o.prev,"prev");var a=k(o,o.next,"next");if(n!=null){o=l.dln(n);y(o,o,"prev",e)}if(a!=null){o=l.dln(a);y(o,o,"next",e)}d+=e.length;if(e.length>h){h=e.length}return e}function w(t){if(n==="symetric"){return true}else if(n==="positive"){return t.free>=0}else{return t.free<=0}}function j(t,e){return Math.abs(t.free)<Math.abs(e)}function _(t,e){return Math.sqrt(s-Math.pow(e.fixed-t.fixed,2))+1e-6}function M(t,e,o){t.free=e.free-o}function z(t,e,o){t.free=e.free+o}function A(t,e){p++;return Math.pow(e.free-t.free,2)+Math.pow(e.fixed-t.fixed,2)<s}function B(t,e,o,n){if(e===null){return false}else if(o==="prev"?t.free-e.datum.free>i:e.datum.free-t.free>i){return false}else if(A(t,e.datum)){return true}else{return B(t,e[o],o)}}function T(t,e){if(B(t,e,"prev")){return true}else{return B(t,e,"next")}}function E(){this._valueAccesor=function(t){return t.value};this._min=null;this._max=null;this._closestTo0=null;this.size=0;this._idToNode={}}E.prototype.valueAccessor=function(t){if(!arguments.length){return this._valueAccesor}this._valueAccesor=t;return this};E.prototype.closestTo0=function(){return this._closestTo0};E.prototype.clear=function(){this._min=null;this._max=null;this._closestTo0=null;this.size=0;this._idToNode={};return this};E.prototype.dln=function(t){return this._idToNode[t.id]};E.prototype.addMany=function(t){t.forEach((function(t,e){this.add(t)}),this);return this};E.prototype.add=function(t){var e={datum:t,value:this._valueAccesor(t),prev:null,next:null};if(this.size===0){this._min=this._max=this._closestTo0=e}else{if(e.value<=this._min.value){e.next=this._min;e.next.prev=e;this._min=e}else if(e.value>=this._max.value){e.prev=this._max;e.prev.next=e;this._max=e}else{var o=this._max;while(o.value>e.value){o=o.prev}e.prev=o;e.next=o.next;e.next.prev=e;e.prev.next=e}if(Math.abs(e.value)<Math.abs(this._closestTo0.value)){this._closestTo0=e}}this._idToNode[e.datum.id]=e;this.size++;return this};E.prototype.remove=function(t){var e=this.dln(t);if(this.size===1){this._min=this._max=this._closestTo0=null}else{if(e===this._closestTo0){if(this._closestTo0.next===null){this._closestTo0=e.prev}else if(this.closestToZero.prev===null){this._closestTo0=e.prev}else{var o=Math.abs(this._closestTo0.prev.value);var n=Math.abs(this._closestTo0.next.value);if(o<n){this._closestTo0=this._closestTo0.prev}else{this._closestTo0=this._closestTo0.next}}}if(e===this._min){this._min=this._min.next;this._min.prev=null}else if(e===this._max){this._max=this._max.prev;this._max.next=null}else{e.next.prev=e.prev;e.prev.next=e.next}}e=null;delete this._idToNode[t.id];this.size--;return this};return x}t.beeswarm=e;Object.defineProperty(t,"__esModule",{value:true})}))}));const Z=r(l);const D=12;function H(t,o,n){if(o.data){const e=new Map;for(const t of o.data){e.set(t.chr+"."+t.start+"."+t.stop,t)}const a=Number.isInteger(n.pannedpx)?n.pannedpx:0;for(const o of t){const t=e.get(o.chr+"."+o.start+"."+o.stop);if(t){o.x=t.x+a;o.mode=t.mode;o.modefix=t.modefix;if(o.mode==pt){o.mode=ut}}}}o.data=t;o.glider.selectAll("*").remove();o.leftaxis.selectAll("*").remove();if(o.readcountcutoff){const t=[];for(const e of o.data){if(e.data){const n=[];for(const t of e.data){if(t.v>=o.readcountcutoff){n.push(t)}}if(n.length==0){continue}e.data=n;t.push(e)}else{if(e.v>=o.readcountcutoff){t.push(e)}}}o.data=t}if(o.data.length==0){o.height_main=50;n.tkcloakoff(o,{error:o.name+": No junction in view range"});o.label_mcount.text("");if(o.label_samplecount){o.label_samplecount.text("")}ft(o);n.setllabel();n.block_setheight();return}o.label_mcount.text(o.data.length+" junction"+(o.data.length>1?"s":""));ft(o);n.setllabel();it(o,n);const a=o.glider.append("g");o.data.sort(((t,e)=>t._x-e._x));let i=0;if(o.totalsamplecount>1){i=o.data.reduce(((t,e)=>Math.max(t,e.data.length)),0);const t=5;let n=0;const s=Math.pow(t,2)*Math.PI;if(i<=10){n=s*i*.9}else if(i<=100){n=s*10}else if(i<=1e3){n=s*14}else{n=s*20}const r=c().domain([1,i*.5+.1,i*.6+.1,i*.7+.1,i*.8+.1,i]).range([s,s+(n-s)*.8,s+(n-s)*.85,s+(n-s)*.9,s+(n-s)*.95,n]);let l=0;for(const t of o.data){t.radius=Math.sqrt(r(t.data.length)/Math.PI);if(t.data.length>1){a.append("text").attr("font-family",e).attr("font-size",Math.max(D,t.radius)).text(t.data.length).each((function(){const e=this.getBBox();const o=Math.sqrt(Math.pow(e.width,2)+Math.pow(e.height,2))/2;t.radius=Math.max(t.radius,o)})).remove()}t.rimwidth=t.rimcount?Math.max(2,t.radius/6):0;t.radius2=t.radius+t.rimwidth+(t.rimwidth>0?1:0);l=Math.max(l,t.radius2)}o.maxradius=l}else{i=o.data.reduce(((t,e)=>Math.max(t,e.data[0].v)),0);const t=5;let e=0;const n=Math.pow(t,2)*Math.PI;if(i<=10){e=n*i*.9}else if(i<=100){e=n*5}else if(i<=1e3){e=n*7}else{e=n*10}const a=c().domain([1,i*.5+.1,i*.6+.1,i*.7+.1,i*.8+.1,i]).range([n,n+(e-n)*.8,n+(e-n)*.85,n+(e-n)*.9,n+(e-n)*.95,e]);let s=0;for(const t of o.data){t.radius=Math.sqrt(a(t.data[0].v)/Math.PI);t.rimwidth=t.rimcount?Math.max(2,t.radius/6):0;t.radius2=t.radius+t.rimwidth+(t.rimwidth>0?1:0);s=Math.max(s,t.radius2)}o.maxradius=s}let s=0,r=0;for(const t of o.data){for(const e of t.data){s=Math.max(e.v,s)}if(t.data.length==1){t.median=t.data[0].v}else{const e=t.data.map((t=>t.v));e.sort(((t,e)=>t-e));t.median=e[Math.floor(t.data.length/2)]}if(t.median>r){r=t.median;t.radius}}o.yscale=M().domain([o.readcountcutoff||1,s]).range([o.axisheight,0]);f({axis:o.leftaxis.call(z().scale(o.yscale).ticks(6,".0f")),color:"black",showline:true});o.height_main=o.toppad+o.axisheight+o.maxradius*4+o.padheight+o.lowpad+o.legheight+o.bottompad;o.eventsg=o.glider.append("g").attr("transform","translate(0,"+(o.height_main-o.toppad)+")");X(o,null,n.width);a.attr("transform","translate(0,"+(o.height_main-o.toppad-o.bottompad)+")");{const t=-o.legheight-o.lowpad-o.maxradius*4-o.padheight-o.axisheight;a.append("line").attr("x1",0).attr("y1",t).attr("y2",t).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("shape-rendering","crispEdges");a.append("line").attr("x1",0).attr("y1",t+o.axisheight).attr("y2",t+o.axisheight).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("shape-rendering","crispEdges");let e=10;while(e<=s){a.append("line").attr("x1",0).attr("y1",t+o.yscale(e)).attr("y2",t+o.yscale(e)).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("stroke-dasharray","4,4").attr("shape-rendering","crispEdges");e*=10}}const l=a.selectAll().data(o.data).enter().append("g").attr("transform",(t=>G(t))).each((function(t){t.jugg=this}));o.jug=l;if(o.hljunctions){l.attr("class",(t=>{for(const e of o.hljunctions){if(t.chr==e.chr&&t.start==e.start&&t.stop==e.stop){return"sja_pulse"}}return null}))}l.append("line").attr("stroke",(t=>t.color)).attr("x1",(t=>K(t))).attr("y2",(t=>et(t,o))).attr("stroke-opacity",(t=>u())).each((function(t){t.leg1=this})).classed("sja_jug_leg1",true);l.append("line").attr("stroke",(t=>t.color)).attr("x2",(t=>Q(t))).attr("y1",(t=>et(t,o))).attr("stroke-opacity",(t=>u())).classed("sja_jug_leg2",true).each((function(t){t.leg2=this}));const h=l.append("g").attr("class","sja_jug_jug2").attr("transform",(t=>ot(t,o)));h.append("line").attr("stroke",(t=>t.color)).classed("sja_jug_stem",true).attr("stroke-dasharray","2,2").attr("shape-rendering","crispEdges").attr("y1",(t=>$(t))).attr("y2",(t=>nt(t,o))).attr("stroke-opacity",(t=>u())).each((function(t){t.stem=this}));h.append("circle").attr("r",(t=>t.radius)).attr("fill",(t=>t.color)).attr("stroke","white").attr("fill-opacity",.5);h.filter((t=>t.data.length>1)).append("text").text((t=>t.data.length)).attr("font-size",(t=>Math.max(D,t.radius))).attr("fill-opacity",(t=>Y(t))).classed("sja_jug_discnum",true).attr("fill","white").attr("font-family",e).attr("text-anchor","middle").attr("dominant-baseline","central");h.append("circle").attr("r",(t=>t.radius)).attr("stroke",(t=>t.color)).classed("sja_aa_disckick",true).attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mouseover",((t,e)=>{l.selectAll(".sja_jug_leg1").attr("stroke-opacity",.2);l.selectAll(".sja_jug_leg2").attr("stroke-opacity",.2);l.selectAll(".sja_jug_stem").attr("stroke-opacity",.2);d(e.leg1).attr("stroke-opacity",1);d(e.leg2).attr("stroke-opacity",1);d(e.stem).attr("stroke-opacity",1);if(e.mode==ht){st(e,o);return}const n=t.target.getBoundingClientRect();rt(e,o,n)})).on("mouseout",(()=>{o.pica.g.selectAll("*").remove();o.tktip.hide();l.selectAll(".sja_jug_leg1").attr("stroke-opacity",(t=>u()));l.selectAll(".sja_jug_leg2").attr("stroke-opacity",(t=>u()));l.selectAll(".sja_jug_stem").attr("stroke-opacity",(t=>u()))})).on("mousedown",(t=>{t.stopPropagation()})).on("click",((t,e)=>{if(e.mode==ht){e.mode=ut}else if(e.mode==ut){if(e.data.length==1){e.mode=ht}else{e.mode=pt;lt(e,o)}}else{e.mode=ht}e.modefix=true;W(o.data,n.width,o)}));W(o.data,n.width,o);function u(t){return.5}n.onloadalltk.push((()=>{L(o,n)}));n.tkcloakoff(o,{});n.block_setheight()}function W(t,e,o){for(const o of t){if(o.x0<0){o.tox=o.x1-o.radius2*2}else if(o.x1>e){o.tox=o.x0+o.radius2*2}else{o.tox=o._x}if(o.mode==ht){o.x=o.tox}}for(const e of t){e.x=e.tox}at(o);return}function X(t,e,o){for(const e of t.data){if(!e.mode)e.mode=ut}return}function G(t){return"translate("+t.x+",0)"}function K(t){return t.x0-t.x}function Q(t){return t.x1-t.x}function Y(t){return t.mode==ht?0:1}function $(t){if(t.mode==ht)return t.radius;return t.radius2}function tt(t,e){if(t.mode==pt)return"translate(0,-"+(e.legheight+e.maxradius*4+e.lowpad+e.padheight)+") scale(1)";return"translate(0,0) scale(0)"}function et(t,e){if(t.mode==ht)return-e.legheight;return-e.legheight-e.lowpad-e.maxradius*2}function ot(t,e){if(t.mode==ht)return"translate(0,-"+(e.legheight+e.lowpad+t.radius)+")";if(t.mode==ut)return"translate(0,-"+(e.legheight+e.lowpad+e.maxradius*4+e.padheight+e.axisheight-e.yscale(t.median))+")";return"translate(0,-"+(e.legheight+e.lowpad+e.maxradius*3+e.padheight)+")"}function nt(t,e){if(t.mode==ht)return t.radius+e.lowpad;if(t.mode==ut)return e.padheight+e.maxradius*2+e.axisheight-e.yscale(t.median);return e.maxradius+e.padheight}function at(t){const e=500;if(t.totalsamplecount>1){t.jug.selectAll(".sja_jug_qmg").transition().duration(e).attr("transform",(e=>tt(e,t)));t.jug.selectAll(".sja_jug_discnum").transition().duration(e).attr("fill-opacity",(t=>Y(t)))}t.jug.selectAll(".sja_jug_leg1").transition().duration(e).attr("y2",(e=>et(e,t))).attr("x1",(t=>K(t)));t.jug.selectAll(".sja_jug_leg2").transition().duration(e).attr("y1",(e=>et(e,t))).attr("x2",(t=>Q(t)));t.jug.selectAll(".sja_jug_jug2").transition().duration(e).attr("transform",(e=>ot(e,t)));t.jug.selectAll(".sja_jug_stem").transition().duration(e).attr("y2",(e=>nt(e,t))).attr("y1",(t=>$(t)));t.jug.transition().duration(e).attr("transform",(t=>G(t)))}function it(t,e){for(const e of t.data){e.color=h}if(t.nocatepreconfig){let o={};if(t.categories){o=t.categories}let n=false;for(const e of t.data){if(e.type){if(!o[e.type]){n=true;o[e.type]={label:e.type};if(e.type.toLowerCase()=="known"){o[e.type].color="#0C72A8"}else if(e.type.toLowerCase()=="novel"){o[e.type].color="#A80C33"}else{o[e.type].color=Z(e.type)}}}}if(n){t.categories=o;if(!t.tr_legend){const[o,n]=y(e,t.name);t.tr_legend=o;t.td_legend=n;o.style("display","none");u(o,"table-row")}p(t.categories,t.td_legend)}}if(t.categories){for(const e of t.data){if(e.type&&t.categories[e.type]){e.color=t.categories[e.type].color}}}}function st(t,o){const n=15;let a=5,i=a,s=0;const r=o.pica.g.append("rect").attr("stroke",t.color).attr("shape-rendering","crispEdges").attr("fill","white").attr("fill-opacity",.8);if(t.type){o.pica.g.append("text").text(t.type).attr("fill",t.color).attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=this.getBBox().width}));i+=n}if(t.data){o.pica.g.append("text").text(t.data.length+" sample"+(t.data.length>1?"s":"")).attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n;o.pica.g.append("text").text(t.median+" median").attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n}else{o.pica.g.append("text").text(t.v+" reads").attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n}i+=a;r.attr("width",a*2+s).attr("height",i);o.pica.g.append("line").attr("stroke",t.color).attr("shape-rendering","crispEdges").attr("x1",30).attr("x2",30).attr("y1",i).attr("y2",i+15);i+=15;o.pica.g.attr("transform","translate("+(t.x-30)+","+(o.toppad+o.axisheight+o.maxradius*4+o.padheight-t.radius*2-i)+")")}function rt(t,e,o){e.tktip.clear();const n=e.tktip.d;if(t.type){n.append("div").style("display","inline-block").text(t.type).classed("sja_mcdot",true).style("background-color",t.color).style("padding","1px 8px").style("margin-bottom","3px")}n.append("div").html(m(t.stop-t.start)+' <span style="font-size:.8em;">'+t.chr+":"+(t.start+1)+"-"+(t.stop+1)+"</span>");if(t.data){if(t.data.length>1){n.append("div").html(t.data.length+' <span style="font-size:.8em;color:#858585">samples</span>');if(t.rimcount){n.append("div").html(t.rimcount+' <span style="font-size:.8em;color:#858585">show '+e.rimwhat+"</span>")}n.append("div").html(t.median+' <span style="font-size:.8em;color:#858585">median read count</span>')}else if(t.data.length==1){ct(t,t.data[0],e,n)}}else{n.append("div").html(t.v+' <span style="font-size:.8em;color:#858585">read count</span>')}if(t.spliceevents&&t.spliceevents.length>0){const e=n.append("div").style("margin","10px 0px");U(t.spliceevents,e)}e.tktip.show(o.left+o.width,o.top-50)}function lt(t,e,o){if(t.qmg){t.qmg.remove()}if(e.cohortsetting&&e.cohortsetting.uselevelidx!=undefined){for(const o of t.data){if(!o[e.cohortsetting.cohort.levels[0].k]){o.color="gray";continue}const t=[];for(let n=0;n<=e.cohortsetting.uselevelidx;n++){const a=o[e.cohortsetting.cohort.levels[n].k];if(a){t.push(a)}}const n=t.join(e.cohortsetting.levelseparator);o.color=e.cohortsetting.colorfunc(n)}}t.swarm=V.beeswarm().data(t.data).distributeOn((t=>e.axisheight-e.yscale(t.v))).radius(e.qmradius).orientation("vertical").side("symetric").arrange();const n=d(t.jugg);t.qmg=n.append("g").attr("class","sja_jug_qmg").attr("transform",tt(t,e));const a=.8;t.qmg.selectAll().data(t.swarm).enter().append("circle").attr("cx",0).attr("cy",(t=>-t.y)).attr("r",e.qmradius).attr("fill",(t=>t.datum.color||"green")).attr("fill-opacity",a).on("mousedown",(t=>t.stopPropagation())).on("mousemove",(t=>t.stopPropagation())).on("mouseover",((o,n)=>{d(o.target).attr("fill-opacity",1);const a=o.target.getBoundingClientRect();e.tktip.clear();e.tktip.show(a.left+20,a.top-40);ct(t,n.datum,e,e.tktip.d)})).on("mouseout",(t=>d(t.target).attr("fill-opacity",a))).on("click",((t,o)=>{if(e.tracks){return}})).transition().attr("cx",(t=>t.x))}function ct(t,e,o,n){if(e.sample){n.append("div").html(e.sample)}else if(e.name){n.append("div").html(e.name)}else if(e.patient||e.sampletype){if(e.patient){n.append("div").html(e.patient+' <span style="font-size:.7em;color:#858585">patient</span>')}if(e.sampletype){n.append("div").html(e.sampletype+' <span style="font-size:.7em;color:#858585">sample type</span>')}}else if(e.tkid){for(const t of o.tracks){if(t.tkid==e.tkid){n.append("div").text(t.name||"unnamed member");break}}}if(o.cohortsetting&&o.cohortsetting.cohort&&o.cohortsetting.cohort.levels){for(const t of o.cohortsetting.cohort.levels){if(e[t.k]){n.append("div").html(e[t.k]+' <span style="font-size:.7em;color:#858585">'+t.label+"</span>")}}}n.append("div").html(e.v+' <span style="font-size:.7em;color:#858585">read count</span>');if(e.metadata){n.append("div").html('<span style="background-color:'+e.metadata.color+'" class=sja_mcdot>&nbsp;</span> '+e.metadata.value+' <span style="font-size:.7em;color:#858585">'+o.metadata.m.label+"</span>")}if(e.hasrim){n.append("div").text(o.rimwhat)}if(t.spliceevents){const o=w(t.spliceevents);const a=t.spliceevents[o];const i="exon "+a.skippedexon.map((t=>t+1)).join(",")+" "+(a.isskipexon?"skip":"alt. use");let s=0;if(a.junctionB&&a.junctionB.data){for(const t of a.junctionB.data){if(t.tkid==e.tkid){s=t.v;break}}}let r=0;if(a.junctionAlst){for(const t of a.junctionAlst){if(t&&t.data){for(const o of t.data){if(o.tkid==e.tkid){r+=o.v;break}}}}}let l;if(s==0){l=0}else{l=Math.ceil(100*s/(s+r/a.junctionAlst.length))}n.append("div").html(l+'% <span style="font-size:.7em;color:#858585;">'+i+"</span>")}}function ft(t){const e=[];t.tklabel.each((function(){e.push(this.getBBox().width)}));if(t.label_mcount){t.label_mcount.each((function(){e.push(this.getBBox().width)}))}t.leftLabelMaxwidth=Math.max(...e)}const dt=5;const ht=1;const ut=2;const pt=3;const mt=5;function gt(t,e){t.leftaxis=t.gleft.append("g");let o=mt+e.labelfontsize;const n=new x({padding:"none"});t.label_mcount=e.maketklefthandle(t,o).on("click",(o=>{kt(t,e,n)}));o+=mt+e.labelfontsize;t.totalsamplecount=0;t.height_main=100;t.config_handle=e.maketkconfighandle(t).on("click",(o=>bt(t,e)));if(t.categories||t.cohortsetting){const[o,n]=y(e,t.name);t.tr_legend=o;t.td_legend=n}if(t.categories){p(t.categories,t.td_legend)}if(t.cohortsetting){t.cohortsetting.holder=t.td_legend.append("div").style("margin-top","10px");t.cohortsetting.legendholder=t.cohortsetting.holder.append("div")}}function xt(t,e){if(t.uninitialized){gt(t,e);delete t.uninitialized}if((e.zoomedin||e.resized)&&t.data){const o=[];for(const n of t.data){const t=n.x;const a=vt(n,e);if(a){continue}if(n.x0>=0&&n.x0<=e.width||n.x1>=0&&n.x1<=e.width){n.x=t;o.push(n)}}H(o,t,e);return}if(t.fixeddata){e.tkcloakon(t);const o=[];for(const n of t.fixeddata){const t={chr:n.chr,start:n.start,stop:n.stop,data:n.data,type:n.type};const a=vt(t,e);if(a){continue}o.push(t)}t.totalsamplecount=t.tracks[0].samplecount;t.axisheight=200;t.legheight=50;t.bottompad=0;t.qmradius=2;t.lowpad=15;t.padheight=10;H(o,t,e);return}if(!t.tracks){e.tkcloakoff(t,{error:"neither .tracks[] or .fixeddata[] are available"});t.height_main=50;e.block_setheight();return}e.block_setheight();e.tkcloakon(t);const o=Math.ceil(e.width/dt);let n=0;const i=[];for(const s of t.tracks){const r=new Promise(((e,o)=>{if(s.rnapegfile){s.samplecount=1;return e()}if(s.samplecount!=undefined&&s.checkedheader)return e();const n=[];if(s.file){n.push("file="+s.file)}else{n.push("url="+s.url);if(s.indexURL)n.push("indexURL="+s.indexURL)}a("tabixheader?"+n.join("&")).then((n=>{if(n.error)return o("cannot load header for member track "+s.name+": "+n.error);s.checkedheader=true;const a=n.lines.join("");if(!a);else{const e=a.trim().split("\t");s.headersamples=[];for(let t=5;t<e.length;t++){const o=e[t];let n=null;if(o[0]=="{"&&o[o.length-1]=="}"){try{n=JSON.parse(o)}catch(e){console.error("header line field ["+t+"] is broken json: "+o)}}if(n){n.tkid=Math.random().toString();s.headersamples.push(n)}else{s.headersamples.push({name:e[t],tkid:Math.random().toString()})}}s.samplecount=s.headersamples.length;t.totalsamplecount+=s.samplecount}e()}))}));const l=new Promise(((i,l)=>{r.then((()=>{const r=["rglst="+JSON.stringify(e.tkarg_maygm(s))];if(o)r.push("bincount="+o);if(s.file||s.rnapegfile){r.push("file="+(s.file||s.rnapegfile))}else{r.push("url="+s.url);if(s.indexURL)r.push("indexURL="+s.indexURL)}if(s.rnapegfile){r.push("isrnapeg=1")}a("junction?"+r.join("&")).then((o=>{n++;if(t.tracks.length>1){e.tkprogress(t,n/t.tracks.length)}if(!o)l("server error for getting member track "+s.name);if(o.error)l("Cannot get data: "+o.error);if(!o.lst&&!o.bins)l("wrong response when getting data for "+s.name);if(o.lst){if(o.lst[0]&&o.lst[0].rawdata&&s.samplecount==undefined){s.samplecount=o.lst[0].rawdata.length;t.totalsamplecount+=s.samplecount}{const t=[];for(const e of o.lst){e.data=[];for(let t=0;t<e.rawdata.length;t++){const o=e.rawdata[t];if(!Number.isInteger(o)||o<=0){continue}const n={v:o};if(s.headersamples){const e=s.headersamples[t];if(e){for(const t in e){n[t]=e[t]}}}else{if(s.name)n.name=s.name;if(s.sample)n.sample=s.sample;if(s.patient)n.patient=s.patient;if(s.sampeltype)n.sampletype=s.sampletype;if(s.tkid)n.tkid=s.tkid;if(s.file)n.file=s.file;if(s.url)n.url=s.url;if(s.indexURL)n.indexURL=s.indexURL}e.data.push(n)}delete e.rawdata;t.push(e)}i(t)}}}))})).catch((t=>l(t)))}));i.push(l)}Promise.all(i).then((o=>{const n=[];o.forEach((t=>{if(!t)return;t.forEach((t=>{let e=true;for(const o of n){if(o.start==t.start&&o.stop==t.stop){o.data=o.data.concat(t.data);e=false;break}}if(e){n.push(t)}}))}));for(const t of n){vt(t,e)}for(const t of n){}if(!t.axisheight){if(t.totalsamplecount>1){t.axisheight=200;t.legheight=50;t.bottompad=0;t.qmradius=2;t.lowpad=15;t.padheight=10}else{t.axisheight=100;t.legheight=20;t.bottompad=0;t.lowpad=10;t.padheight=10}if(t.cohortsetting){wt(t)}}H(n,t,e)})).catch((o=>{t.glider.selectAll("*").remove();e.tkcloakoff(t,{error:o});e.block_setheight()}))}function vt(t,e){const o=e.seekcoord(t.chr,t.start)[0];if(!o){return true}const n=e.seekcoord(t.chr,t.stop)[0];if(!n){return true}const a=o.x<0||o.x>e.width;const i=n.x<0||n.x>e.width;if(a&&i){return true}t.x0=o.x;t.x1=n.x;t.x=(t.x0+t.x1)/2;t._x=t.x;if(!t.modefix){t.mode=ut}return false}function kt(t,e,o){o.clear();const n=o.d;const a=new Map;for(const e of t.data){if(!e.type)continue;if(!a.has(e.type)){a.set(e.type,[])}if(e.data){a.get(e.type).push(e.data.map((t=>t.v)))}else{a.get(e.type).push(e.v)}}if(a.size){const e=n.append("div").style("margin","8px");for(const[o,n]of a){e.append("div").style("margin","2px").html(n.length+' <span style="font-size:.8em;color:'+t.categories[o].color+'">'+o+" junction"+(n.length>1?"s":"")+"</span>");let a=n;if(t.tracks){a=[];for(const t of n){a.push(...t)}}if(a.length==1);else{e.append("table").style("margin-left","20px").html('<tr><td style="text-align:right;">'+Math.max(...a)+'</td><td style="color:#858585;font-size:.7em">max read count</td></tr>'+'<tr><td style="text-align:right;">'+Math.min(...a)+'</td><td style="color:#858585;font-size:.7em">min</td></tr>'+'<tr><td style="text-align:right;">'+Math.ceil(a.reduce(((t,e)=>e+t),0)/a.length)+'</td><td style="color:#858585;font-size:.7em">mean</td></tr>')}}}else{let e=[];if(t.tracks){for(const o of t.data){e.push(...o.data.map((t=>t.v)))}}else{e=t.data.map((t=>t.v))}if(e.length>1){n.append("table").html('<tr><td style="text-align:right;">'+Math.max(...e)+'</td><td style="color:#858585;font-size:.7em">max read count</td></tr>'+'<tr><td style="text-align:right;">'+Math.min(...e)+'</td><td style="color:#858585;font-size:.7em">min</td></tr>'+'<tr><td style="text-align:right;">'+Math.ceil(e.reduce(((t,e)=>e+t),0)/e.length)+'</td><td style="color:#858585;font-size:.7em">mean</td></tr>')}}n.append("div").text("Fold").classed("sja_menuoption",true).on("click",(n=>{o.hide();for(const e of t.data){e.mode=ht;e.modefix=true}W(t.data,e.width,t)}));n.append("div").text("Expand").classed("sja_menuoption",true).on("click",(n=>{o.hide();for(const e of t.data){e.modefix=false}X(t,null,e.width);for(const e of t.data){e.modefix=true}W(t.data,e.width,t)}));n.append("div").text("Download").classed("sja_menuoption",true).on("click",(e=>{o.hide();yt(t)}));o.showunder(t.label_mcount.node())}function yt(t){const e=[];if(t.file||t.url){if(t.data){e.push("chromosome\tstart\tstop\tread_count"+(t.categories?"\ttype":""));for(const o of t.data){e.push(o.chr+"\t"+o.start+"\t"+o.stop+"\t"+o.v+(t.categories?"\t"+o.type:""))}}}else if(t.tracks){if(t.data){const o=["chromosome\tstart\tstop"+(t.categories?"\ttype":"")];for(const e of t.tracks){const t=[];if(e.patient)t.push(e.patient);if(e.sampletype)t.push(e.sampletype);if(t.length==0){t.push(e.name)}o.push(t.join(", "))}e.push(o.join("\t"));for(const o of t.data){const n=[o.chr+"\t"+o.start+"\t"+o.stop+(t.categories?"\t"+o.type:"")];const a=new Map;for(const t of o.data){a.set(t.tkid,t.v)}for(const e of t.tracks){n.push(a.has(e.tkid)?a.get(e.tkid):"")}e.push(n.join("\t"))}}}v(t.name,[{label:"Splice junction",text:e.join("\n")}])}function bt(t,e){t.tkconfigtip.clear().showunder(t.config_handle.node());const o=t.tkconfigtip.d;{const n=o.append("div").style("margin-bottom","10px");n.append("span").html("Read count cutoff&nbsp;");n.append("input").property("value",t.readcountcutoff||0).attr("type","number").style("width","50px").on("keyup",(o=>{if(!k(o))return;const n=Number.parseFloat(o.target.value);if(n==0){if(t.readcountcutoff){t.readcountcutoff=0;xt(t,e)}return}if(!n||n<0){return}if(t.readcountcutoff){if(t.readcountcutoff==n);else if(t.readcountcutoff>n){t.readcountcutoff=n;xt(t,e)}else{t.readcountcutoff=n;H(t.data,t,e)}}else{t.readcountcutoff=n;xt(t,e)}}));const a=n.append("div").style("font-size",".7em").style("color","#858585");if(t.totalsamplecount>1){a.text("For a junction, samples with read count lower than cutoff will not be shown.")}else{a.text("Junctions with read count lower than cutoff will not be shown.")}}}function wt(t,e){if(!t.cohortsetting.cohort){g(t.cohortsetting.holder,".cohort missing from tk.cohortsetting");return}if(!t.cohortsetting.cohort.levels){g(t.cohortsetting.holder,".levels missing from tk.cohortsetting.cohort");return}if(!t.cohortsetting.cohort.levels[0]){g(t.cohortsetting.holder,"tk.cohortsetting.cohort.levels[0] is invalid");return}t.cohortsetting.levelseperator=".";t.cohortsetting.uselevelidx=0;jt(t)}function jt(t,e){t.cohortsetting.legendholder.selectAll("*").remove();t.cohortsetting.colorfunc=r(l);const o=new Map;for(const e of t.tracks){for(const n of e.headersamples){if(!n[t.cohortsetting.cohort.levels[0].k]){continue}const e=[];for(let o=0;o<=t.cohortsetting.uselevelidx;o++){const a=n[t.cohortsetting.cohort.levels[o].k];if(a){e.push(a)}}const a=e.join(t.cohortsetting.levelseperator);if(!o.has(a)){o.set(a,{count:0,label:n[t.cohortsetting.cohort.levels[t.cohortsetting.uselevelidx].full]})}o.get(a).count++}}const n=[...o].sort(((t,e)=>e[1].count-t[1].count));for(const e of n){const o=t.cohortsetting.colorfunc(e[0]);const n=e[1].label;const a=t.cohortsetting.legendholder.append("div").style("margin-top","5px");a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background-color",o).style("margin-right","10px").html("&nbsp;&nbsp;");a.append("div").style("display","inline-block").text(n)}}export{xt as junctionload,ht as modefold,ut as moderaise,pt as modesample};
1
+ import{ad as t,ah as e,bV as o,bW as n,a7 as a,aF as i,bX as s,a8 as r,af as l,I as c,ag as f,d,l as h,p as u,aE as p,ae as m,j as g,M as x,ab as v,k}from"./app-b369b169.js";import{l as y}from"./block.legend-d3f61ef7.js";import{s as b}from"./spliceevent.phrase-c5832470.js";import{e as w}from"./spliceevent.exonskip.getdefault-a94aad6e.js";import{c as j,a as _}from"./_commonjsHelpers-318dc0aa.js";import{l as M}from"./log-99af3443.js";import{d as z}from"./axis-747c801e.js";import"./vcf-5cc55588.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./legacy-d3-polyfill-bdb2d792.js";function A(t,e){for(const e of t){e.exonleft=[];e.exonright=[];e.exonleftin=[];e.exonrightin=[];e.intronleft=[];e.intronright=[];e.leftout=[];e.rightout=[];e.matchisoform=[]}const o=[];for(const n of e){let e=false;for(const o of t){if(n.chr==o.chr&&Math.max(n.start,o.start)<Math.min(n.stop,o.stop)){e=true;break}}if(e){o.push(n)}}if(o.length==0){return}const n=new Map;const a=new Map;for(const e of t){if(!n.has(e.start)){n.set(e.start,[])}n.get(e.start).push(e);if(!a.has(e.stop)){a.set(e.stop,[])}a.get(e.stop).push(e)}for(const[t,e]of n){for(const n of o){if(!n.exon)continue;for(let o=0;o<n.exon.length;o++){if(n.exon[o][1]-1==t){for(const t of e){t.exonleft.push({gm:n,exonidx:o})}}if(n.exon[o][0]<=t&&n.exon[o][1]-1>t){for(const t of e){t.exonleftin.push({gm:n,exonidx:o})}}}if(n.intron){for(let o=0;o<n.intron.length;o++){if(n.intron[o][0]<=t&&n.intron[o][1]>t){for(const t of e){t.intronleft.push({gm:n,intronidx:o})}}}}}}for(const[t,e]of a){for(const n of o){if(!n.exon)continue;for(let o=0;o<n.exon.length;o++){if(n.exon[o][0]==t){for(const t of e){t.exonright.push({gm:n,exonidx:o})}}if(n.exon[o][0]<t&&n.exon[o][1]>t){for(const t of e){t.exonrightin.push({gm:n,exonidx:o})}}}if(n.intron){for(let o=0;o<n.intron.length;o++){if(n.intron[o][0]<=t&&n.intron[o][1]>t){for(const t of e){t.intronright.push({gm:n,intronidx:o})}}}}}}for(const e of t){{const t=new Set;for(const o of e.exonleft)t.add(o.gm.isoform);for(const o of e.exonleftin)t.add(o.gm.isoform);for(const o of e.intronleft)t.add(o.gm.isoform);if(t.size){for(const n of o){if(!t.has(n.isoform))continue;if(n.stop<=e.stop){e.rightout.push({gm:n})}}}}{const t=new Set;for(const o of e.exonright)t.add(o.gm.isoform);for(const o of e.exonrightin)t.add(o.gm.isoform);for(const o of e.intronright)t.add(o.gm.isoform);if(t.size){for(const n of o){if(!t.has(n.isoform))continue;if(n.start>e.start){e.leftout.push({gm:n})}}}}}for(const e of t){if(e.exonleft.length==0||e.exonright.length==0)continue;for(const t of e.exonleft){for(const o of e.exonright){if(t.gm.isoform==o.gm.isoform){e.matchisoform.push({gm:t.gm,leftexonidx:t.exonidx,rightexonidx:o.exonidx})}}}}}const B="#99004d";const T="#004d99";function E(t,e,o){const n=[];for(const a of e){if(!a.matchisoform||a.matchisoform.length==0){continue}for(const i of a.matchisoform){const s=Math.min(i.leftexonidx,i.rightexonidx);const r=Math.max(i.leftexonidx,i.rightexonidx);if(r-s<=1){continue}const l=a;const c={skippedexon:[],junctionB:l,junctionAlst:[]};for(let t=s+1;t<r;t++){c.skippedexon.push(t)}let f=null;for(const t of o){if(!t.intron)continue;for(const e of t.intron){if(e[0]-1==l.start&&e[1]==l.stop){f=t;break}}if(f){break}}if(f){c.isaltexon=true;c.color=T;c.gmA=i.gm;c.gmB=f}else{c.isskipexon=true;c.color=B;c.gm=i.gm;const[t,e,o]=C(c.skippedexon,c.gm);if(t)c.utr3=true;if(e)c.utr5=true;if(o)c.coding=true}{const t=q(e,i.gm,s,r);for(const e of t){c.junctionAlst.push(e)}}if(c.isskipexon){N(c,i.gm,e)}if(t){if(!l.data){console.error("exonskip: jB.data missing when it is multi-sample");continue}if(l.data.length==0){console.error("exonskip: jB.data.length==0");continue}let t=0;for(const e of l.data){const o=e.v;let n=0;for(const t of c.junctionAlst){if(!t){continue}if(!t.data){console.log("exonskip: jA.data missing when multi-sample");continue}for(const o of t.data){if(o.tkid==e.tkid){n+=o.v;break}}}t+=100*o/(o+n/c.junctionAlst.length)}c.percentage=Math.ceil(t/l.data.length)}else{let t=0;for(const e of c.junctionAlst){t+=e?e.data[0].v:0}c.percentage=Math.ceil(100*c.junctionB.data[0].v/(c.junctionB.data[0].v+t/c.junctionAlst.length))}n.push(c)}}const a=new Map;for(const t of n){const e=[];for(const o of t.skippedexon){let n;if(t.isskipexon){n=t.gm.exon[o]}else{n=t.gmA.exon[o]}e.push(n[0]);e.push(n[1])}if(e.length==0){console.error("not possible: no skipped exon position for exon-skip");console.log(t);continue}e.sort();const o=e.join(".")+"|"+t.junctionB.start+"."+t.junctionB.stop;if(!a.has(o)){a.set(o,[])}a.get(o).push(t)}const i=[];for(const e of a.values()){const o={eventlst:e,exonlst:[]};i.push(o);const n=e[0];for(const t of n.skippedexon){const e=n.isskipexon?n.gm:n.gmA;const a=e.exon[t];o.exonlst.push({chr:e.chr,start:a[0],stop:a[1]})}let a=0,s=0;for(const t of e){if(t.isskipexon){a++}else{s++}}o.color=a>0?B:T;const r=new Set;for(const t of e){const e=[];for(const o of t.skippedexon){e.push(o+1)}r.add(e.join(","))}if(r.size==1){o.toplabelsays="exon "+[...r][0]+" "}else{o.toplabelsays="exon "}o.toplabelsays+=a?"skip"+(s?"|alt":""):"alt";if(t){let t=0;for(const o of e){t=Math.max(t,o.junctionB.data.length)}o.middlelabelsays=t+" sample"+(t>1?"s":"")}o.bottomlabelsays=n.percentage+"%"}return i}function P(t,e,o){const n=Math.min(e,o);const a=Math.max(e,o);for(const e of t){if(e.start==n&&e.stop==a)return e}return null}function q(t,e,o,n){const a=[];const i=Math.min(o,n);const s=Math.max(o,n);if(e.strand=="+"){for(let o=i;o<s;o++){const n=e.exon[o][1]-1;const i=e.exon[o+1][0];a.push(P(t,n,i))}}else{for(let o=s;o>i;o--){const n=e.exon[o][1]-1;const i=e.exon[o-1][0];a.unshift(P(t,n,i))}}return a}function N(t,e,o){let n=t.skippedexon[0];if(n>1){let a,i;if(e.strand=="+"){a=e.exon[n-2][1]-1;i=e.exon[n-1][0]}else{a=e.exon[n-1][1]-1;i=e.exon[n-2][0]}t.up1junction=P(o,a,i)}n=t.skippedexon[t.skippedexon.length-1];if(n<e.exon.length-2){let a,i;if(e.strand=="+"){a=e.exon[n+1][1]-1;i=e.exon[n+2][0]}else{a=e.exon[n+2][1]-1;i=e.exon[n+1][0]}t.down1junction=P(o,a,i)}}function C(t,e){if(!e.coding){return[false,false,false]}let o=e.exon[t[0]][0];let n=e.exon[t[0]][1];for(const a of t){o=Math.min(e.exon[a][0],o);n=Math.max(e.exon[a][1],n)}const a=e.strand=="+";let i=false,s=false,r=false;if(n<=e.codingstart){if(a){s=true}else{i=true}}else if(o>=e.codingstop){if(a){i=true}else{s=true}}else{r=true}return[i,s,r]}function L(o,n){if(o.eventsg){o.eventsg.selectAll("*").remove()}if(o.type!=t.junction){return}if(!o.data){return}if(o.data.length==0){return}const[a,i]=J(n);if(a){const t=12;const i=2;o.eventsg.append("rect").attr("width",n.width).attr("height",i*2+t).attr("fill","#f1f1f1");o.eventsg.append("text").text(a).attr("font-family",e).attr("font-size",t).attr("fill","#858585").attr("text-anchor","middle").attr("x",n.width/2).attr("y",i+t/2).attr("dominant-baseline","central");o.height_main+=i*2+t;n.block_setheight();return}if(!i){return}for(const t of o.data){delete t.spliceevents}A(o.data,i);const s=[];const r=E(o.totalsamplecount>1,o.data,i);if(r.length>0){for(const t of r){if(F(t.exonlst,n)){continue}s.push(t);for(const e of t.eventlst){if(!e.junctionB.spliceevents){e.junctionB.spliceevents=[]}e.junctionB.spliceevents.push(e)}}}if(s.length){R(s,o,n)}}function R(t,n,a){const i=10;const s=1;const r=2;let l;if(n.totalsamplecount>1){l=i*3+s*2}else{l=i*2+s}for(const s of t){s.g=n.eventsg.append("g");const t=s.eventlst[0].junctionB;const c=t.chr+"-"+t.start+"-"+t.stop;s.toplabel=s.g.append("text").text(s.toplabelsays).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",i/2).attr("dominant-baseline","central");if(n.totalsamplecount>1){s.middlelabel=s.g.append("text").text(s.middlelabelsays).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",i*1.5).attr("dominant-baseline","central")}let f=false;let d=null;for(const t of s.eventlst){if(t.isaltexon){t.framenocheck=true;continue}if(t.isskipexon){if(!t.gm.coding){t.framenocheck=true;continue}if(t.utr3||t.utr5){t.framenocheck=true;continue}}f=true;if(a.genome.junctionframecache.has(c)){let e;if(t.isskipexon){e=t.gm.isoform}const n=a.genome.junctionframecache.get(c).get(e);if(n==undefined);else{t.frame=n;if(d==null){d=n}else{if(n==o){d=o}}}}}s.bottomlabel=s.g.append("text").text(s.bottomlabelsays+(f?", "+(d==null?"checking":d==o?"IN":"OUT"):"")).attr("font-size",i).attr("font-family",e).attr("fill",s.color).attr("y",l-i/2).attr("dominant-baseline","central");if(f&&d==null){for(const t of s.eventlst){let e;if(t.isaltexon){e=t.gmB}else if(t.isskipexon){e=t.gm}if(!a.genome.junctionframecache.has(c)){I({jbstr:c,evt:t,gm:e,block:a,eventset:s});continue}if(!a.genome.junctionframecache.get(c).has(e.isoform)){I({jbstr:c,evt:t,gm:e,block:a,eventset:s})}}}const h=[];let u=null,p;for(const t of s.exonlst){const e=a.seekcoord(t.chr,t.start)[0];if(!e){console.log("skipped exon start position not mapped: "+t.start);return}const o=a.seekcoord(t.chr,t.stop-1)[0];if(!o){console.log("skipped exon stop position not mapped: "+t.stop);return}const n={x:Math.min(e.x,o.x),w:Math.max(1,Math.abs(e.x-o.x))};n.rect=s.g.append("rect").attr("fill",s.color).attr("width",n.w).attr("height",l).attr("shape-rendering","crispEdges").on("click",(()=>{console.log(s)}));if(u==null){u=n.x;p=n.x+n.w}else{u=Math.min(u,n.x);p=Math.max(p,n.x+n.w)}h.push(n)}for(const t of h){t.rect.attr("x",t.x-u)}s.boxstart=u;s.boxwidth=p-u;if(s.exonlst.length>1){s.g.append("line").attr("stroke",s.color).attr("stroke-opacity",.2).attr("stroke-width",2).attr("shape-rendering","crispEdges").attr("x1",0).attr("x2",s.boxwidth).attr("y1",l/2-.5).attr("y2",l/2-.5)}s.toplabel.each((function(){s.labelwidth=this.getBBox().width}));if(s.middlelabel){s.middlelabel.each((function(){s.labelwidth=this.getBBox().width}))}s.bottomlabel.each((function(){s.labelwidth=Math.max(s.labelwidth,this.getBBox().width)}));if(s.labelwidth>s.boxstart){s.labelonright=true;s.toplabel.attr("x",s.boxwidth+r);s.bottomlabel.attr("x",s.boxwidth+r);if(s.middlelabel){s.middlelabel.attr("x",s.boxwidth+r)}}else{s.toplabel.attr("text-anchor","end").attr("x",-r);s.bottomlabel.attr("text-anchor","end").attr("x",-r);if(s.middlelabel){s.middlelabel.attr("text-anchor","end").attr("x",-r)}}s.cover=s.g.append("rect").attr("x",s.labelonright?0:-s.labelwidth-r).attr("width",s.labelwidth+r+s.boxwidth).attr("height",l).attr("fill","#858585").attr("fill-opacity",0).on("mouseover",(()=>{s.cover.attr("fill-opacity",.1)})).on("mouseout",(()=>{s.cover.attr("fill-opacity",0)})).on("click",(()=>{n.tktip.clear();U(s.eventlst,n.tktip.d);n.tktip.showunder(s.cover.node())}))}const c=[0];for(const e of t){let t=e.boxstart-(e.labelonright?0:r+e.labelwidth);let o=e.boxstart+e.boxwidth+(e.labelonright?r+e.labelwidth:0);for(let n=0;n<c.length;n++){if(t>c[n]){e.stackidx=n;c[n]=o;break}if(!e.labelonright){const t=e.boxstart;const o=e.boxstart+e.boxwidth+r+e.labelwidth;if(t>c[n]&&o<=a.width){e.labelonright=true;e.stackidx=n;c[n]=o;e.toplabel.attr("x",e.boxwidth+r).attr("text-anchor","start");e.bottomlabel.attr("x",e.boxwidth+r).attr("text-anchor","start");if(e.middlelabel){e.middlelabel.attr("x",e.boxwidth+r).attr("text-anchor","start")}e.cover.attr("x",0);break}}}if(e.stackidx==undefined){e.stackidx=c.length;c.push(o)}e.g.attr("transform","translate("+e.boxstart+","+e.stackidx*(l+s)+")")}n.height_main+=c.length*(l+s)+n.bottompad;a.block_setheight()}function I(t){if(!t.block.genome.junctionframecache.has(t.jbstr)){t.block.genome.junctionframecache.set(t.jbstr,new Map)}if(!t.gm.coding){t.block.genome.junctionframecache.get(t.jbstr).set(t.gm.isoform,false);S(t);return}const e=n(t.gm,t.evt);a("translategm",{method:"POST",body:JSON.stringify({genome:t.block.genome.name,gm:e})}).then((e=>{if(!e){console.log("server error");return}if(e.error){console.log(e.error);return}if(typeof e.frame!="boolean"){console.log("invalid result from translategm: "+e.frame);return}t.evt.frame=e.frame;t.block.genome.junctionframecache.get(t.jbstr).set(t.gm.isoform,e.frame);S(t)}))}function S(t){if(!t.block.genome.junctionframecache.has(t.jbstr)){return}let e=s;for(const n of t.eventset.eventlst){if(n.framenocheck){continue}let a;if(n.isskipexon){a=n.gm.isoform}const i=t.block.genome.junctionframecache.get(t.jbstr).get(a);if(i==undefined){return}if(i==o){e=o}}t.eventset.bottomlabel.text(t.eventset.bottomlabelsays+", "+(e==o?"IN":"OUT"))}function U(t,e){const o=w(t);if(t.length>1){e.append("div").style("margin","3px 0px").style("color","#858585").text("Additional interpretations:");const a=Math.random().toString();for(const[i,s]of t.entries()){const r=a+i;const l=e.append("div").style("margin-top","3px");l.append("input").attr("type","radio").property("checked",i==o).attr("name",a).attr("id",r).on("change",(()=>{O(t,i,n)}));l.append("label").attr("for",r).html("&nbsp;"+b(s))}}const n=e.append("div");O(t,o,n)}function O(t,e,o){o.selectAll("*").remove();import("./spliceevent.exonskip.diagram-4d5df3a1.js").then((n=>{n.default({event:t[e],holder:o,nophrase:t.length>1})}))}function F(t,e){const o=t[0].chr;let n=t[0].start;let a=t[0].stop;for(const e of t){n=Math.min(n,e.start);a=Math.max(a,e.stop)}const i=e.seekcoord(o,n)[0];const s=e.seekcoord(o,a)[0];if(!i||!s){return true}let r=false;let l=false;if(i.x<=0){r=true}else if(i.x>=e.width){l=true}let c=false;let f=false;if(s.x<=0){c=true}else if(s.x>=e.width){f=true}if(r&&c)return true;if(l&&f)return true;return false}function J(t){if(!t.gmmode||t.gmmode==i.genomic){const e=[];for(const o of t.tklst){if(o.__isgene){e.push(o)}}if(e.length==0){return["Add a gene track to analyze splice junctions."]}const o=[];for(const t of e){if(t.gmdata){for(const e of t.gmdata){o.push(e)}}}if(o.length==0){return[null]}const n=[];for(const t of o){let e=false;for(const o of n){if(Math.max(o.start,t.start)<Math.min(o.stop,t.stop)){e=true;o.start=Math.min(o.start,t.start);o.stop=Math.max(o.stop,t.stop);break}}if(!e){n.push({start:t.start,stop:t.stop})}}if(n.length>=3){return["Zoom in on a single gene to analyze splice junctions."]}return[null,o]}if(t.gmmode==i.gmsum){if(!t.allgm){return["Error: block.allgm[] is missing"]}return[null,t.allgm]}if(!t.usegm){return["Error: block.usegm is missing"]}return[null,[t.usegm]]}var V=j((function(t,e){(function(t,o){o(e)})(_,(function(t){function e(){var t=[];var e=4;var o="horizontal";var n="symetric";var a=function(t){return t.x};var i;var s;var r;var l;var c;var f;var d,h,u,p,m,g;function x(){}x.data=function(e){if(!arguments.length){return t}t=e;return x};x.radius=function(t){if(!arguments.length){return e}e=t;return x};x.orientation=function(t){if(!arguments.length){return o}if(t==="horizontal"||t==="vertical"){o=t}return x};x.side=function(t){if(!arguments.length){return n}if(t==="symetric"||t==="positive"||t==="negative"){n=t}return x};x.distributeOn=function(t){if(!arguments.length){return a}a=t;return x};x.arrange=function(){v();f.forEach((function(t){var e=-Infinity,n,a=b(t);if(a.length===0){e=0}else{c.clear();c.addMany(a);t.free=0;if(!T(t,c.closestTo0())){e=0;m+=p;if(p>g){g=p}p=0;u+=1}else{a.forEach((function(o){n=_(o,t);M(t,o,n);if(w(t)&&j(t,e)&&!T(t,c.dln(o))){e=t.free}m+=p;if(p>g){g=p}p=0;u+=1;z(t,o,n);if(w(t)&&j(t,e)&&!T(t,c.dln(o))){e=t.free}m+=p;if(p>g){g=p}p=0;u+=1}))}}t.free=e;if(o==="horizontal"){t.x=t.fixed;t.y=e}else{t.x=e;t.y=t.fixed}l.add(t)}));return f};x.metrics=function(){return{totalPossibleColliders:d,maxPossibleColliders:h,totalTestedPlacements:u,visitedColliderCount:p,totalVisitedColliders:m,maxVisitedColliders:g}};function v(){f=t.map((function(t,e){return{datum:t,id:e,fixed:a(t),free:-Infinity}}));i=2*e;s=Math.pow(i,2);r=(new E).valueAccessor((function(t){return t.fixed})).addMany(f);l=(new E).valueAccessor((function(t){return t.fixed}));c=(new E).valueAccessor((function(t){return t.free}));d=h=0;u=0;p=m=g=0}function k(t,e,o){if(e===null){return null}else if(o==="prev"?t.value-e.value>i:e.value-t.value>i){return null}else{if(isFinite(e.datum.free)){return e.datum}return k(t,e[o],o)}}function y(t,e,o,n){if(e===null){return}else if(o==="prev"?t.value-e.value>i:e.value-t.value>i){return}else{n.push(e.datum);y(t,e[o],o,n)}}function b(t){var e=[];var o=r.dln(t);var n=k(o,o.prev,"prev");var a=k(o,o.next,"next");if(n!=null){o=l.dln(n);y(o,o,"prev",e)}if(a!=null){o=l.dln(a);y(o,o,"next",e)}d+=e.length;if(e.length>h){h=e.length}return e}function w(t){if(n==="symetric"){return true}else if(n==="positive"){return t.free>=0}else{return t.free<=0}}function j(t,e){return Math.abs(t.free)<Math.abs(e)}function _(t,e){return Math.sqrt(s-Math.pow(e.fixed-t.fixed,2))+1e-6}function M(t,e,o){t.free=e.free-o}function z(t,e,o){t.free=e.free+o}function A(t,e){p++;return Math.pow(e.free-t.free,2)+Math.pow(e.fixed-t.fixed,2)<s}function B(t,e,o,n){if(e===null){return false}else if(o==="prev"?t.free-e.datum.free>i:e.datum.free-t.free>i){return false}else if(A(t,e.datum)){return true}else{return B(t,e[o],o)}}function T(t,e){if(B(t,e,"prev")){return true}else{return B(t,e,"next")}}function E(){this._valueAccesor=function(t){return t.value};this._min=null;this._max=null;this._closestTo0=null;this.size=0;this._idToNode={}}E.prototype.valueAccessor=function(t){if(!arguments.length){return this._valueAccesor}this._valueAccesor=t;return this};E.prototype.closestTo0=function(){return this._closestTo0};E.prototype.clear=function(){this._min=null;this._max=null;this._closestTo0=null;this.size=0;this._idToNode={};return this};E.prototype.dln=function(t){return this._idToNode[t.id]};E.prototype.addMany=function(t){t.forEach((function(t,e){this.add(t)}),this);return this};E.prototype.add=function(t){var e={datum:t,value:this._valueAccesor(t),prev:null,next:null};if(this.size===0){this._min=this._max=this._closestTo0=e}else{if(e.value<=this._min.value){e.next=this._min;e.next.prev=e;this._min=e}else if(e.value>=this._max.value){e.prev=this._max;e.prev.next=e;this._max=e}else{var o=this._max;while(o.value>e.value){o=o.prev}e.prev=o;e.next=o.next;e.next.prev=e;e.prev.next=e}if(Math.abs(e.value)<Math.abs(this._closestTo0.value)){this._closestTo0=e}}this._idToNode[e.datum.id]=e;this.size++;return this};E.prototype.remove=function(t){var e=this.dln(t);if(this.size===1){this._min=this._max=this._closestTo0=null}else{if(e===this._closestTo0){if(this._closestTo0.next===null){this._closestTo0=e.prev}else if(this.closestToZero.prev===null){this._closestTo0=e.prev}else{var o=Math.abs(this._closestTo0.prev.value);var n=Math.abs(this._closestTo0.next.value);if(o<n){this._closestTo0=this._closestTo0.prev}else{this._closestTo0=this._closestTo0.next}}}if(e===this._min){this._min=this._min.next;this._min.prev=null}else if(e===this._max){this._max=this._max.prev;this._max.next=null}else{e.next.prev=e.prev;e.prev.next=e.next}}e=null;delete this._idToNode[t.id];this.size--;return this};return x}t.beeswarm=e;Object.defineProperty(t,"__esModule",{value:true})}))}));const Z=r(l);const D=12;function H(t,o,n){if(o.data){const e=new Map;for(const t of o.data){e.set(t.chr+"."+t.start+"."+t.stop,t)}const a=Number.isInteger(n.pannedpx)?n.pannedpx:0;for(const o of t){const t=e.get(o.chr+"."+o.start+"."+o.stop);if(t){o.x=t.x+a;o.mode=t.mode;o.modefix=t.modefix;if(o.mode==pt){o.mode=ut}}}}o.data=t;o.glider.selectAll("*").remove();o.leftaxis.selectAll("*").remove();if(o.readcountcutoff){const t=[];for(const e of o.data){if(e.data){const n=[];for(const t of e.data){if(t.v>=o.readcountcutoff){n.push(t)}}if(n.length==0){continue}e.data=n;t.push(e)}else{if(e.v>=o.readcountcutoff){t.push(e)}}}o.data=t}if(o.data.length==0){o.height_main=50;n.tkcloakoff(o,{error:o.name+": No junction in view range"});o.label_mcount.text("");if(o.label_samplecount){o.label_samplecount.text("")}ft(o);n.setllabel();n.block_setheight();return}o.label_mcount.text(o.data.length+" junction"+(o.data.length>1?"s":""));ft(o);n.setllabel();it(o,n);const a=o.glider.append("g");o.data.sort(((t,e)=>t._x-e._x));let i=0;if(o.totalsamplecount>1){i=o.data.reduce(((t,e)=>Math.max(t,e.data.length)),0);const t=5;let n=0;const s=Math.pow(t,2)*Math.PI;if(i<=10){n=s*i*.9}else if(i<=100){n=s*10}else if(i<=1e3){n=s*14}else{n=s*20}const r=c().domain([1,i*.5+.1,i*.6+.1,i*.7+.1,i*.8+.1,i]).range([s,s+(n-s)*.8,s+(n-s)*.85,s+(n-s)*.9,s+(n-s)*.95,n]);let l=0;for(const t of o.data){t.radius=Math.sqrt(r(t.data.length)/Math.PI);if(t.data.length>1){a.append("text").attr("font-family",e).attr("font-size",Math.max(D,t.radius)).text(t.data.length).each((function(){const e=this.getBBox();const o=Math.sqrt(Math.pow(e.width,2)+Math.pow(e.height,2))/2;t.radius=Math.max(t.radius,o)})).remove()}t.rimwidth=t.rimcount?Math.max(2,t.radius/6):0;t.radius2=t.radius+t.rimwidth+(t.rimwidth>0?1:0);l=Math.max(l,t.radius2)}o.maxradius=l}else{i=o.data.reduce(((t,e)=>Math.max(t,e.data[0].v)),0);const t=5;let e=0;const n=Math.pow(t,2)*Math.PI;if(i<=10){e=n*i*.9}else if(i<=100){e=n*5}else if(i<=1e3){e=n*7}else{e=n*10}const a=c().domain([1,i*.5+.1,i*.6+.1,i*.7+.1,i*.8+.1,i]).range([n,n+(e-n)*.8,n+(e-n)*.85,n+(e-n)*.9,n+(e-n)*.95,e]);let s=0;for(const t of o.data){t.radius=Math.sqrt(a(t.data[0].v)/Math.PI);t.rimwidth=t.rimcount?Math.max(2,t.radius/6):0;t.radius2=t.radius+t.rimwidth+(t.rimwidth>0?1:0);s=Math.max(s,t.radius2)}o.maxradius=s}let s=0,r=0;for(const t of o.data){for(const e of t.data){s=Math.max(e.v,s)}if(t.data.length==1){t.median=t.data[0].v}else{const e=t.data.map((t=>t.v));e.sort(((t,e)=>t-e));t.median=e[Math.floor(t.data.length/2)]}if(t.median>r){r=t.median;t.radius}}o.yscale=M().domain([o.readcountcutoff||1,s]).range([o.axisheight,0]);f({axis:o.leftaxis.call(z().scale(o.yscale).ticks(6,".0f")),color:"black",showline:true});o.height_main=o.toppad+o.axisheight+o.maxradius*4+o.padheight+o.lowpad+o.legheight+o.bottompad;o.eventsg=o.glider.append("g").attr("transform","translate(0,"+(o.height_main-o.toppad)+")");X(o,null,n.width);a.attr("transform","translate(0,"+(o.height_main-o.toppad-o.bottompad)+")");{const t=-o.legheight-o.lowpad-o.maxradius*4-o.padheight-o.axisheight;a.append("line").attr("x1",0).attr("y1",t).attr("y2",t).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("shape-rendering","crispEdges");a.append("line").attr("x1",0).attr("y1",t+o.axisheight).attr("y2",t+o.axisheight).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("shape-rendering","crispEdges");let e=10;while(e<=s){a.append("line").attr("x1",0).attr("y1",t+o.yscale(e)).attr("y2",t+o.yscale(e)).attr("x2",n.width).attr("stroke","#858585").attr("stroke-opacity",.2).attr("stroke-dasharray","4,4").attr("shape-rendering","crispEdges");e*=10}}const l=a.selectAll().data(o.data).enter().append("g").attr("transform",(t=>G(t))).each((function(t){t.jugg=this}));o.jug=l;if(o.hljunctions){l.attr("class",(t=>{for(const e of o.hljunctions){if(t.chr==e.chr&&t.start==e.start&&t.stop==e.stop){return"sja_pulse"}}return null}))}l.append("line").attr("stroke",(t=>t.color)).attr("x1",(t=>K(t))).attr("y2",(t=>et(t,o))).attr("stroke-opacity",(t=>u())).each((function(t){t.leg1=this})).classed("sja_jug_leg1",true);l.append("line").attr("stroke",(t=>t.color)).attr("x2",(t=>Q(t))).attr("y1",(t=>et(t,o))).attr("stroke-opacity",(t=>u())).classed("sja_jug_leg2",true).each((function(t){t.leg2=this}));const h=l.append("g").attr("class","sja_jug_jug2").attr("transform",(t=>ot(t,o)));h.append("line").attr("stroke",(t=>t.color)).classed("sja_jug_stem",true).attr("stroke-dasharray","2,2").attr("shape-rendering","crispEdges").attr("y1",(t=>$(t))).attr("y2",(t=>nt(t,o))).attr("stroke-opacity",(t=>u())).each((function(t){t.stem=this}));h.append("circle").attr("r",(t=>t.radius)).attr("fill",(t=>t.color)).attr("stroke","white").attr("fill-opacity",.5);h.filter((t=>t.data.length>1)).append("text").text((t=>t.data.length)).attr("font-size",(t=>Math.max(D,t.radius))).attr("fill-opacity",(t=>Y(t))).classed("sja_jug_discnum",true).attr("fill","white").attr("font-family",e).attr("text-anchor","middle").attr("dominant-baseline","central");h.append("circle").attr("r",(t=>t.radius)).attr("stroke",(t=>t.color)).classed("sja_aa_disckick",true).attr("fill","white").attr("fill-opacity",0).attr("stroke-opacity",0).on("mouseover",((t,e)=>{l.selectAll(".sja_jug_leg1").attr("stroke-opacity",.2);l.selectAll(".sja_jug_leg2").attr("stroke-opacity",.2);l.selectAll(".sja_jug_stem").attr("stroke-opacity",.2);d(e.leg1).attr("stroke-opacity",1);d(e.leg2).attr("stroke-opacity",1);d(e.stem).attr("stroke-opacity",1);if(e.mode==ht){st(e,o);return}const n=t.target.getBoundingClientRect();rt(e,o,n)})).on("mouseout",(()=>{o.pica.g.selectAll("*").remove();o.tktip.hide();l.selectAll(".sja_jug_leg1").attr("stroke-opacity",(t=>u()));l.selectAll(".sja_jug_leg2").attr("stroke-opacity",(t=>u()));l.selectAll(".sja_jug_stem").attr("stroke-opacity",(t=>u()))})).on("mousedown",(t=>{t.stopPropagation()})).on("click",((t,e)=>{if(e.mode==ht){e.mode=ut}else if(e.mode==ut){if(e.data.length==1){e.mode=ht}else{e.mode=pt;lt(e,o)}}else{e.mode=ht}e.modefix=true;W(o.data,n.width,o)}));W(o.data,n.width,o);function u(t){return.5}n.onloadalltk.push((()=>{L(o,n)}));n.tkcloakoff(o,{});n.block_setheight()}function W(t,e,o){for(const o of t){if(o.x0<0){o.tox=o.x1-o.radius2*2}else if(o.x1>e){o.tox=o.x0+o.radius2*2}else{o.tox=o._x}if(o.mode==ht){o.x=o.tox}}for(const e of t){e.x=e.tox}at(o);return}function X(t,e,o){for(const e of t.data){if(!e.mode)e.mode=ut}return}function G(t){return"translate("+t.x+",0)"}function K(t){return t.x0-t.x}function Q(t){return t.x1-t.x}function Y(t){return t.mode==ht?0:1}function $(t){if(t.mode==ht)return t.radius;return t.radius2}function tt(t,e){if(t.mode==pt)return"translate(0,-"+(e.legheight+e.maxradius*4+e.lowpad+e.padheight)+") scale(1)";return"translate(0,0) scale(0)"}function et(t,e){if(t.mode==ht)return-e.legheight;return-e.legheight-e.lowpad-e.maxradius*2}function ot(t,e){if(t.mode==ht)return"translate(0,-"+(e.legheight+e.lowpad+t.radius)+")";if(t.mode==ut)return"translate(0,-"+(e.legheight+e.lowpad+e.maxradius*4+e.padheight+e.axisheight-e.yscale(t.median))+")";return"translate(0,-"+(e.legheight+e.lowpad+e.maxradius*3+e.padheight)+")"}function nt(t,e){if(t.mode==ht)return t.radius+e.lowpad;if(t.mode==ut)return e.padheight+e.maxradius*2+e.axisheight-e.yscale(t.median);return e.maxradius+e.padheight}function at(t){const e=500;if(t.totalsamplecount>1){t.jug.selectAll(".sja_jug_qmg").transition().duration(e).attr("transform",(e=>tt(e,t)));t.jug.selectAll(".sja_jug_discnum").transition().duration(e).attr("fill-opacity",(t=>Y(t)))}t.jug.selectAll(".sja_jug_leg1").transition().duration(e).attr("y2",(e=>et(e,t))).attr("x1",(t=>K(t)));t.jug.selectAll(".sja_jug_leg2").transition().duration(e).attr("y1",(e=>et(e,t))).attr("x2",(t=>Q(t)));t.jug.selectAll(".sja_jug_jug2").transition().duration(e).attr("transform",(e=>ot(e,t)));t.jug.selectAll(".sja_jug_stem").transition().duration(e).attr("y2",(e=>nt(e,t))).attr("y1",(t=>$(t)));t.jug.transition().duration(e).attr("transform",(t=>G(t)))}function it(t,e){for(const e of t.data){e.color=h}if(t.nocatepreconfig){let o={};if(t.categories){o=t.categories}let n=false;for(const e of t.data){if(e.type){if(!o[e.type]){n=true;o[e.type]={label:e.type};if(e.type.toLowerCase()=="known"){o[e.type].color="#0C72A8"}else if(e.type.toLowerCase()=="novel"){o[e.type].color="#A80C33"}else{o[e.type].color=Z(e.type)}}}}if(n){t.categories=o;if(!t.tr_legend){const[o,n]=y(e,t.name);t.tr_legend=o;t.td_legend=n;o.style("display","none");u(o,"table-row")}p(t.categories,t.td_legend)}}if(t.categories){for(const e of t.data){if(e.type&&t.categories[e.type]){e.color=t.categories[e.type].color}}}}function st(t,o){const n=15;let a=5,i=a,s=0;const r=o.pica.g.append("rect").attr("stroke",t.color).attr("shape-rendering","crispEdges").attr("fill","white").attr("fill-opacity",.8);if(t.type){o.pica.g.append("text").text(t.type).attr("fill",t.color).attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=this.getBBox().width}));i+=n}if(t.data){o.pica.g.append("text").text(t.data.length+" sample"+(t.data.length>1?"s":"")).attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n;o.pica.g.append("text").text(t.median+" median").attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n}else{o.pica.g.append("text").text(t.v+" reads").attr("fill","#858585").attr("font-size",n-2).attr("font-family",e).attr("x",a).attr("y",i+n/2).attr("dominant-baseline","central").each((function(){s=Math.max(s,this.getBBox().width)}));i+=n}i+=a;r.attr("width",a*2+s).attr("height",i);o.pica.g.append("line").attr("stroke",t.color).attr("shape-rendering","crispEdges").attr("x1",30).attr("x2",30).attr("y1",i).attr("y2",i+15);i+=15;o.pica.g.attr("transform","translate("+(t.x-30)+","+(o.toppad+o.axisheight+o.maxradius*4+o.padheight-t.radius*2-i)+")")}function rt(t,e,o){e.tktip.clear();const n=e.tktip.d;if(t.type){n.append("div").style("display","inline-block").text(t.type).classed("sja_mcdot",true).style("background-color",t.color).style("padding","1px 8px").style("margin-bottom","3px")}n.append("div").html(m(t.stop-t.start)+' <span style="font-size:.8em;">'+t.chr+":"+(t.start+1)+"-"+(t.stop+1)+"</span>");if(t.data){if(t.data.length>1){n.append("div").html(t.data.length+' <span style="font-size:.8em;color:#858585">samples</span>');if(t.rimcount){n.append("div").html(t.rimcount+' <span style="font-size:.8em;color:#858585">show '+e.rimwhat+"</span>")}n.append("div").html(t.median+' <span style="font-size:.8em;color:#858585">median read count</span>')}else if(t.data.length==1){ct(t,t.data[0],e,n)}}else{n.append("div").html(t.v+' <span style="font-size:.8em;color:#858585">read count</span>')}if(t.spliceevents&&t.spliceevents.length>0){const e=n.append("div").style("margin","10px 0px");U(t.spliceevents,e)}e.tktip.show(o.left+o.width,o.top-50)}function lt(t,e,o){if(t.qmg){t.qmg.remove()}if(e.cohortsetting&&e.cohortsetting.uselevelidx!=undefined){for(const o of t.data){if(!o[e.cohortsetting.cohort.levels[0].k]){o.color="gray";continue}const t=[];for(let n=0;n<=e.cohortsetting.uselevelidx;n++){const a=o[e.cohortsetting.cohort.levels[n].k];if(a){t.push(a)}}const n=t.join(e.cohortsetting.levelseparator);o.color=e.cohortsetting.colorfunc(n)}}t.swarm=V.beeswarm().data(t.data).distributeOn((t=>e.axisheight-e.yscale(t.v))).radius(e.qmradius).orientation("vertical").side("symetric").arrange();const n=d(t.jugg);t.qmg=n.append("g").attr("class","sja_jug_qmg").attr("transform",tt(t,e));const a=.8;t.qmg.selectAll().data(t.swarm).enter().append("circle").attr("cx",0).attr("cy",(t=>-t.y)).attr("r",e.qmradius).attr("fill",(t=>t.datum.color||"green")).attr("fill-opacity",a).on("mousedown",(t=>t.stopPropagation())).on("mousemove",(t=>t.stopPropagation())).on("mouseover",((o,n)=>{d(o.target).attr("fill-opacity",1);const a=o.target.getBoundingClientRect();e.tktip.clear();e.tktip.show(a.left+20,a.top-40);ct(t,n.datum,e,e.tktip.d)})).on("mouseout",(t=>d(t.target).attr("fill-opacity",a))).on("click",((t,o)=>{if(e.tracks){return}})).transition().attr("cx",(t=>t.x))}function ct(t,e,o,n){if(e.sample){n.append("div").html(e.sample)}else if(e.name){n.append("div").html(e.name)}else if(e.patient||e.sampletype){if(e.patient){n.append("div").html(e.patient+' <span style="font-size:.7em;color:#858585">patient</span>')}if(e.sampletype){n.append("div").html(e.sampletype+' <span style="font-size:.7em;color:#858585">sample type</span>')}}else if(e.tkid){for(const t of o.tracks){if(t.tkid==e.tkid){n.append("div").text(t.name||"unnamed member");break}}}if(o.cohortsetting&&o.cohortsetting.cohort&&o.cohortsetting.cohort.levels){for(const t of o.cohortsetting.cohort.levels){if(e[t.k]){n.append("div").html(e[t.k]+' <span style="font-size:.7em;color:#858585">'+t.label+"</span>")}}}n.append("div").html(e.v+' <span style="font-size:.7em;color:#858585">read count</span>');if(e.metadata){n.append("div").html('<span style="background-color:'+e.metadata.color+'" class=sja_mcdot>&nbsp;</span> '+e.metadata.value+' <span style="font-size:.7em;color:#858585">'+o.metadata.m.label+"</span>")}if(e.hasrim){n.append("div").text(o.rimwhat)}if(t.spliceevents){const o=w(t.spliceevents);const a=t.spliceevents[o];const i="exon "+a.skippedexon.map((t=>t+1)).join(",")+" "+(a.isskipexon?"skip":"alt. use");let s=0;if(a.junctionB&&a.junctionB.data){for(const t of a.junctionB.data){if(t.tkid==e.tkid){s=t.v;break}}}let r=0;if(a.junctionAlst){for(const t of a.junctionAlst){if(t&&t.data){for(const o of t.data){if(o.tkid==e.tkid){r+=o.v;break}}}}}let l;if(s==0){l=0}else{l=Math.ceil(100*s/(s+r/a.junctionAlst.length))}n.append("div").html(l+'% <span style="font-size:.7em;color:#858585;">'+i+"</span>")}}function ft(t){const e=[];t.tklabel.each((function(){e.push(this.getBBox().width)}));if(t.label_mcount){t.label_mcount.each((function(){e.push(this.getBBox().width)}))}t.leftLabelMaxwidth=Math.max(...e)}const dt=5;const ht=1;const ut=2;const pt=3;const mt=5;function gt(t,e){t.leftaxis=t.gleft.append("g");let o=mt+e.labelfontsize;const n=new x({padding:"none"});t.label_mcount=e.maketklefthandle(t,o).on("click",(o=>{kt(t,e,n)}));o+=mt+e.labelfontsize;t.totalsamplecount=0;t.height_main=100;t.config_handle=e.maketkconfighandle(t).on("click",(o=>bt(t,e)));if(t.categories||t.cohortsetting){const[o,n]=y(e,t.name);t.tr_legend=o;t.td_legend=n}if(t.categories){p(t.categories,t.td_legend)}if(t.cohortsetting){t.cohortsetting.holder=t.td_legend.append("div").style("margin-top","10px");t.cohortsetting.legendholder=t.cohortsetting.holder.append("div")}}function xt(t,e){if(t.uninitialized){gt(t,e);delete t.uninitialized}if((e.zoomedin||e.resized)&&t.data){const o=[];for(const n of t.data){const t=n.x;const a=vt(n,e);if(a){continue}if(n.x0>=0&&n.x0<=e.width||n.x1>=0&&n.x1<=e.width){n.x=t;o.push(n)}}H(o,t,e);return}if(t.fixeddata){e.tkcloakon(t);const o=[];for(const n of t.fixeddata){const t={chr:n.chr,start:n.start,stop:n.stop,data:n.data,type:n.type};const a=vt(t,e);if(a){continue}o.push(t)}t.totalsamplecount=t.tracks[0].samplecount;t.axisheight=200;t.legheight=50;t.bottompad=0;t.qmradius=2;t.lowpad=15;t.padheight=10;H(o,t,e);return}if(!t.tracks){e.tkcloakoff(t,{error:"neither .tracks[] or .fixeddata[] are available"});t.height_main=50;e.block_setheight();return}e.block_setheight();e.tkcloakon(t);const o=Math.ceil(e.width/dt);let n=0;const i=[];for(const s of t.tracks){const r=new Promise(((e,o)=>{if(s.rnapegfile){s.samplecount=1;return e()}if(s.samplecount!=undefined&&s.checkedheader)return e();const n=[];if(s.file){n.push("file="+s.file)}else{n.push("url="+s.url);if(s.indexURL)n.push("indexURL="+s.indexURL)}a("tabixheader?"+n.join("&")).then((n=>{if(n.error)return o("cannot load header for member track "+s.name+": "+n.error);s.checkedheader=true;const a=n.lines.join("");if(!a);else{const e=a.trim().split("\t");s.headersamples=[];for(let t=5;t<e.length;t++){const o=e[t];let n=null;if(o[0]=="{"&&o[o.length-1]=="}"){try{n=JSON.parse(o)}catch(e){console.error("header line field ["+t+"] is broken json: "+o)}}if(n){n.tkid=Math.random().toString();s.headersamples.push(n)}else{s.headersamples.push({name:e[t],tkid:Math.random().toString()})}}s.samplecount=s.headersamples.length;t.totalsamplecount+=s.samplecount}e()}))}));const l=new Promise(((i,l)=>{r.then((()=>{const r=["rglst="+JSON.stringify(e.tkarg_maygm(s))];if(o)r.push("bincount="+o);if(s.file||s.rnapegfile){r.push("file="+(s.file||s.rnapegfile))}else{r.push("url="+s.url);if(s.indexURL)r.push("indexURL="+s.indexURL)}if(s.rnapegfile){r.push("isrnapeg=1")}a("junction?"+r.join("&")).then((o=>{n++;if(t.tracks.length>1){e.tkprogress(t,n/t.tracks.length)}if(!o)l("server error for getting member track "+s.name);if(o.error)l("Cannot get data: "+o.error);if(!o.lst&&!o.bins)l("wrong response when getting data for "+s.name);if(o.lst){if(o.lst[0]&&o.lst[0].rawdata&&s.samplecount==undefined){s.samplecount=o.lst[0].rawdata.length;t.totalsamplecount+=s.samplecount}{const t=[];for(const e of o.lst){e.data=[];for(let t=0;t<e.rawdata.length;t++){const o=e.rawdata[t];if(!Number.isInteger(o)||o<=0){continue}const n={v:o};if(s.headersamples){const e=s.headersamples[t];if(e){for(const t in e){n[t]=e[t]}}}else{if(s.name)n.name=s.name;if(s.sample)n.sample=s.sample;if(s.patient)n.patient=s.patient;if(s.sampeltype)n.sampletype=s.sampletype;if(s.tkid)n.tkid=s.tkid;if(s.file)n.file=s.file;if(s.url)n.url=s.url;if(s.indexURL)n.indexURL=s.indexURL}e.data.push(n)}delete e.rawdata;t.push(e)}i(t)}}}))})).catch((t=>l(t)))}));i.push(l)}Promise.all(i).then((o=>{const n=[];o.forEach((t=>{if(!t)return;t.forEach((t=>{let e=true;for(const o of n){if(o.start==t.start&&o.stop==t.stop){o.data=o.data.concat(t.data);e=false;break}}if(e){n.push(t)}}))}));for(const t of n){vt(t,e)}for(const t of n){}if(!t.axisheight){if(t.totalsamplecount>1){t.axisheight=200;t.legheight=50;t.bottompad=0;t.qmradius=2;t.lowpad=15;t.padheight=10}else{t.axisheight=100;t.legheight=20;t.bottompad=0;t.lowpad=10;t.padheight=10}if(t.cohortsetting){wt(t)}}H(n,t,e)})).catch((o=>{t.glider.selectAll("*").remove();e.tkcloakoff(t,{error:o});e.block_setheight()}))}function vt(t,e){const o=e.seekcoord(t.chr,t.start)[0];if(!o){return true}const n=e.seekcoord(t.chr,t.stop)[0];if(!n){return true}const a=o.x<0||o.x>e.width;const i=n.x<0||n.x>e.width;if(a&&i){return true}t.x0=o.x;t.x1=n.x;t.x=(t.x0+t.x1)/2;t._x=t.x;if(!t.modefix){t.mode=ut}return false}function kt(t,e,o){o.clear();const n=o.d;const a=new Map;for(const e of t.data){if(!e.type)continue;if(!a.has(e.type)){a.set(e.type,[])}if(e.data){a.get(e.type).push(e.data.map((t=>t.v)))}else{a.get(e.type).push(e.v)}}if(a.size){const e=n.append("div").style("margin","8px");for(const[o,n]of a){e.append("div").style("margin","2px").html(n.length+' <span style="font-size:.8em;color:'+t.categories[o].color+'">'+o+" junction"+(n.length>1?"s":"")+"</span>");let a=n;if(t.tracks){a=[];for(const t of n){a.push(...t)}}if(a.length==1);else{e.append("table").style("margin-left","20px").html('<tr><td style="text-align:right;">'+Math.max(...a)+'</td><td style="color:#858585;font-size:.7em">max read count</td></tr>'+'<tr><td style="text-align:right;">'+Math.min(...a)+'</td><td style="color:#858585;font-size:.7em">min</td></tr>'+'<tr><td style="text-align:right;">'+Math.ceil(a.reduce(((t,e)=>e+t),0)/a.length)+'</td><td style="color:#858585;font-size:.7em">mean</td></tr>')}}}else{let e=[];if(t.tracks){for(const o of t.data){e.push(...o.data.map((t=>t.v)))}}else{e=t.data.map((t=>t.v))}if(e.length>1){n.append("table").html('<tr><td style="text-align:right;">'+Math.max(...e)+'</td><td style="color:#858585;font-size:.7em">max read count</td></tr>'+'<tr><td style="text-align:right;">'+Math.min(...e)+'</td><td style="color:#858585;font-size:.7em">min</td></tr>'+'<tr><td style="text-align:right;">'+Math.ceil(e.reduce(((t,e)=>e+t),0)/e.length)+'</td><td style="color:#858585;font-size:.7em">mean</td></tr>')}}n.append("div").text("Fold").classed("sja_menuoption",true).on("click",(n=>{o.hide();for(const e of t.data){e.mode=ht;e.modefix=true}W(t.data,e.width,t)}));n.append("div").text("Expand").classed("sja_menuoption",true).on("click",(n=>{o.hide();for(const e of t.data){e.modefix=false}X(t,null,e.width);for(const e of t.data){e.modefix=true}W(t.data,e.width,t)}));n.append("div").text("Download").classed("sja_menuoption",true).on("click",(e=>{o.hide();yt(t)}));o.showunder(t.label_mcount.node())}function yt(t){const e=[];if(t.file||t.url){if(t.data){e.push("chromosome\tstart\tstop\tread_count"+(t.categories?"\ttype":""));for(const o of t.data){e.push(o.chr+"\t"+o.start+"\t"+o.stop+"\t"+o.v+(t.categories?"\t"+o.type:""))}}}else if(t.tracks){if(t.data){const o=["chromosome\tstart\tstop"+(t.categories?"\ttype":"")];for(const e of t.tracks){const t=[];if(e.patient)t.push(e.patient);if(e.sampletype)t.push(e.sampletype);if(t.length==0){t.push(e.name)}o.push(t.join(", "))}e.push(o.join("\t"));for(const o of t.data){const n=[o.chr+"\t"+o.start+"\t"+o.stop+(t.categories?"\t"+o.type:"")];const a=new Map;for(const t of o.data){a.set(t.tkid,t.v)}for(const e of t.tracks){n.push(a.has(e.tkid)?a.get(e.tkid):"")}e.push(n.join("\t"))}}}v(t.name,[{label:"Splice junction",text:e.join("\n")}])}function bt(t,e){t.tkconfigtip.clear().showunder(t.config_handle.node());const o=t.tkconfigtip.d;{const n=o.append("div").style("margin-bottom","10px");n.append("span").html("Read count cutoff&nbsp;");n.append("input").property("value",t.readcountcutoff||0).attr("type","number").style("width","50px").on("keyup",(o=>{if(!k(o))return;const n=Number.parseFloat(o.target.value);if(n==0){if(t.readcountcutoff){t.readcountcutoff=0;xt(t,e)}return}if(!n||n<0){return}if(t.readcountcutoff){if(t.readcountcutoff==n);else if(t.readcountcutoff>n){t.readcountcutoff=n;xt(t,e)}else{t.readcountcutoff=n;H(t.data,t,e)}}else{t.readcountcutoff=n;xt(t,e)}}));const a=n.append("div").style("font-size",".7em").style("color","#858585");if(t.totalsamplecount>1){a.text("For a junction, samples with read count lower than cutoff will not be shown.")}else{a.text("Junctions with read count lower than cutoff will not be shown.")}}}function wt(t,e){if(!t.cohortsetting.cohort){g(t.cohortsetting.holder,".cohort missing from tk.cohortsetting");return}if(!t.cohortsetting.cohort.levels){g(t.cohortsetting.holder,".levels missing from tk.cohortsetting.cohort");return}if(!t.cohortsetting.cohort.levels[0]){g(t.cohortsetting.holder,"tk.cohortsetting.cohort.levels[0] is invalid");return}t.cohortsetting.levelseperator=".";t.cohortsetting.uselevelidx=0;jt(t)}function jt(t,e){t.cohortsetting.legendholder.selectAll("*").remove();t.cohortsetting.colorfunc=r(l);const o=new Map;for(const e of t.tracks){for(const n of e.headersamples){if(!n[t.cohortsetting.cohort.levels[0].k]){continue}const e=[];for(let o=0;o<=t.cohortsetting.uselevelidx;o++){const a=n[t.cohortsetting.cohort.levels[o].k];if(a){e.push(a)}}const a=e.join(t.cohortsetting.levelseperator);if(!o.has(a)){o.set(a,{count:0,label:n[t.cohortsetting.cohort.levels[t.cohortsetting.uselevelidx].full]})}o.get(a).count++}}const n=[...o].sort(((t,e)=>e[1].count-t[1].count));for(const e of n){const o=t.cohortsetting.colorfunc(e[0]);const n=e[1].label;const a=t.cohortsetting.legendholder.append("div").style("margin-top","5px");a.append("div").style("display","inline-block").attr("class","sja_mcdot").style("background-color",o).style("margin-right","10px").html("&nbsp;&nbsp;");a.append("div").style("display","inline-block").text(n)}}export{xt as junctionload,ht as modefold,ut as moderaise,pt as modesample};
@@ -1 +1 @@
1
- import{bn as t,bo as n,ad as e,f as o}from"./app-a8c4854a.js";function i(i,r,a,p){let c,l,u,d,h,f;if(p!==undefined)[l,u,d,h,f]=t(p,i);else{[c,l,u,d,h,f]=n(100,100,i);c.header.text("Splice junctions by sample matrix visualization")}d.append("p").text("Enter junction-by-sample read count matrix data:");const m=d.append("ul").style("color","#858585").style("font-size",".8em");m.append("li").text("The matrix is tab-delimited, junctions on rows, samples on columns.");m.append("li").text("First row lists sample names");m.append("li").text("Each row is one junction, with read count in each sample");m.append("li").text("Junction position example: chr21:39739570:+,chr21:39817327:+[,type], the type is optional");m.append("li").text("Junction start and stop positions are 1-based and should be exonic bases but not intronic.");const x=d.append("div").append("textarea").attr("rows",6).attr("cols",50).attr("placeholder","junction-by-sample matrix");setTimeout((()=>x.node().focus()),1100);const b=d.append("p");b.append("button").text("Submit").on("click",(()=>{h.text("");const t=u.options[u.selectedIndex].innerHTML;const n=i[t];if(!n){h.text("invalid genome name: "+t);return}const d=x.property("value");if(d==""){return}const[f,m,b]=s(d,n);if(f){h.text(f);return}const g=new Map;for(const t of m){if(!g.has(t.chr)){g.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}g.get(t.chr).start=Math.min(t.start,g.get(t.chr).start);g.get(t.chr).stop=Math.max(t.stop,g.get(t.chr).stop)}const y=[...g][0][1];const w=[{type:e.junction,name:"Junction",fixeddata:m,tracks:[{samplecount:b.length}],iscustom:true}];o(n,w);import("./block-dcb130fb.js").then((function(t){return t.c})).then((t=>new t.Block({hostURL:r,jwt:a,holder:p!==undefined?p:c.body.append("div"),genome:n,chr:y.chr,start:y.start,stop:Math.min(y.start+1e5,y.stop),nobox:true,tklst:w})));l.remove()}));b.append("button").text("Clear").on("click",(()=>{x.property("value","")}));d.append("p").html("<a href=https://www.dropbox.com/s/xu52ke9cify24hw/junction.txt?dl=0 target=_blank>Example file</a>")}function s(t,n){const o=t.trim().split("\n");if(o.length<=1){return["input should be at least 2 lines"]}const i=o[0].split("\t");const s=[];for(let t=1;t<i.length;t++){s.push({tkid:Math.random().toString(),type:e.junction,name:i[t]})}const a=[];for(let t=1;t<o.length;t++){const e=o[t].split("\t")[0];const[i,s]=r(e,n);if(i)return["Error parsing junction "+e+": "+i];s.data=[];a.push(s)}if(a.length==0){return["No valid junctions"]}for(let t=1;t<o.length;t++){const n=o[t].split("\t");for(let e=1;e<n.length;e++){if(n[e]==""){continue}const o=Number.parseInt(n[e]);if(Number.isNaN(o)||o<0){return["invalid read count "+n[e]+" at line "+(t+1)]}if(o==0){continue}a[t-1].data.push({tkid:s[e-1].tkid,sample:s[e-1].name,v:o})}}return[null,a,s]}function r(t,n){const e=t.split(",");if(e.length<2)return["expecting two fields separated by comma"];const o=e[0].split(":"),i=e[1].split(":"),s=e[2];if(o.length!=3)return["left position not 3 fields by :"];if(i.length!=3)return["right position not 3 fields by :"];if(o[0]!=i[0])return["disagreeing chromosomes"];const r=Number.parseInt(o[1]);const a=Number.parseInt(i[1]);if(isNaN(r))return["invalid position 1"];if(isNaN(a))return["invalid position 2"];const p=Math.min(r,a)-1;const c=Math.max(r,a)-1;let l=o[0].toLowerCase();if(l.indexOf("chr")!=0){l="chr"+l}const u=n.chrlookup[l.toUpperCase()];if(!u)return["invalid chromosome"];if(p<=0||p>=u.len)return["position 1 out of bound"];if(c<=0||c>=u.len)return["position 2 out of bound"];if(p>=c)return["start greater than stop"];const d={chr:u.name,start:p,stop:c};if(s){d.type=s}return[null,d]}export{i as default};
1
+ import{bn as t,bo as n,ad as e,f as o}from"./app-b369b169.js";function i(i,r,a,p){let c,l,u,d,h,f;if(p!==undefined)[l,u,d,h,f]=t(p,i);else{[c,l,u,d,h,f]=n(100,100,i);c.header.text("Splice junctions by sample matrix visualization")}d.append("p").text("Enter junction-by-sample read count matrix data:");const m=d.append("ul").style("color","#858585").style("font-size",".8em");m.append("li").text("The matrix is tab-delimited, junctions on rows, samples on columns.");m.append("li").text("First row lists sample names");m.append("li").text("Each row is one junction, with read count in each sample");m.append("li").text("Junction position example: chr21:39739570:+,chr21:39817327:+[,type], the type is optional");m.append("li").text("Junction start and stop positions are 1-based and should be exonic bases but not intronic.");const x=d.append("div").append("textarea").attr("rows",6).attr("cols",50).attr("placeholder","junction-by-sample matrix");setTimeout((()=>x.node().focus()),1100);const b=d.append("p");b.append("button").text("Submit").on("click",(()=>{h.text("");const t=u.options[u.selectedIndex].innerHTML;const n=i[t];if(!n){h.text("invalid genome name: "+t);return}const d=x.property("value");if(d==""){return}const[f,m,b]=s(d,n);if(f){h.text(f);return}const g=new Map;for(const t of m){if(!g.has(t.chr)){g.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}g.get(t.chr).start=Math.min(t.start,g.get(t.chr).start);g.get(t.chr).stop=Math.max(t.stop,g.get(t.chr).stop)}const y=[...g][0][1];const w=[{type:e.junction,name:"Junction",fixeddata:m,tracks:[{samplecount:b.length}],iscustom:true}];o(n,w);import("./block-6aedd569.js").then((function(t){return t.c})).then((t=>new t.Block({hostURL:r,jwt:a,holder:p!==undefined?p:c.body.append("div"),genome:n,chr:y.chr,start:y.start,stop:Math.min(y.start+1e5,y.stop),nobox:true,tklst:w})));l.remove()}));b.append("button").text("Clear").on("click",(()=>{x.property("value","")}));d.append("p").html("<a href=https://www.dropbox.com/s/xu52ke9cify24hw/junction.txt?dl=0 target=_blank>Example file</a>")}function s(t,n){const o=t.trim().split("\n");if(o.length<=1){return["input should be at least 2 lines"]}const i=o[0].split("\t");const s=[];for(let t=1;t<i.length;t++){s.push({tkid:Math.random().toString(),type:e.junction,name:i[t]})}const a=[];for(let t=1;t<o.length;t++){const e=o[t].split("\t")[0];const[i,s]=r(e,n);if(i)return["Error parsing junction "+e+": "+i];s.data=[];a.push(s)}if(a.length==0){return["No valid junctions"]}for(let t=1;t<o.length;t++){const n=o[t].split("\t");for(let e=1;e<n.length;e++){if(n[e]==""){continue}const o=Number.parseInt(n[e]);if(Number.isNaN(o)||o<0){return["invalid read count "+n[e]+" at line "+(t+1)]}if(o==0){continue}a[t-1].data.push({tkid:s[e-1].tkid,sample:s[e-1].name,v:o})}}return[null,a,s]}function r(t,n){const e=t.split(",");if(e.length<2)return["expecting two fields separated by comma"];const o=e[0].split(":"),i=e[1].split(":"),s=e[2];if(o.length!=3)return["left position not 3 fields by :"];if(i.length!=3)return["right position not 3 fields by :"];if(o[0]!=i[0])return["disagreeing chromosomes"];const r=Number.parseInt(o[1]);const a=Number.parseInt(i[1]);if(isNaN(r))return["invalid position 1"];if(isNaN(a))return["invalid position 2"];const p=Math.min(r,a)-1;const c=Math.max(r,a)-1;let l=o[0].toLowerCase();if(l.indexOf("chr")!=0){l="chr"+l}const u=n.chrlookup[l.toUpperCase()];if(!u)return["invalid chromosome"];if(p<=0||p>=u.len)return["position 1 out of bound"];if(c<=0||c>=u.len)return["position 2 out of bound"];if(p>=c)return["start greater than stop"];const d={chr:u.name,start:p,stop:c};if(s){d.type=s}return[null,d]}export{i as default};
@@ -1 +1 @@
1
- import{b as t,bL as e}from"./app-a8c4854a.js";import{l as i}from"./block.legend-b2987cd9.js";import{s as o}from"./regression.results-c186a8dc.js";import"./vcf-c4a23924.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./axis-747c801e.js";import"./legacy-d3-polyfill-bdb2d792.js";import"./axisstyle-fac7f76b.js";import"./ColorScale-9c76aef3.js";import"./log-cf45fcf2.js";async function a(e,i){if(e.uninitiated){r(e,i)}i.tkcloakon(e);try{const o={genome:i.genome.name,file:e.file,rglst:i.tkarg_rglst(e),width:i.width,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1};const a=await t("tkld",{method:"POST",body:o});if(a.error)throw a.error;e.rglstG.selectAll("*").remove();let r=0;for(const t of a.rglst){const i=e.rglstG.append("g");if(t.rangetoobig){t.text_rangetoobig=i.append("text").text(t.rangetoobig).attr("text-anchor","middle").attr("dominant-baseline","central").attr("x",t.width/2);r=Math.max(r,50);continue}if(t.img){i.append("image").attr("width",t.width).attr("height",t.img.height).attr("xlink:href",t.img.src);r=Math.max(r,t.img.height);continue}}e.height_main=e.toppad+r+e.bottompad;i.tkcloakoff(e,{})}catch(t){e.height_main=50;i.tkcloakoff(e,{error:t.message||t})}i.block_setheight(e)}function r(t,a){delete t.uninitiated;t.rglstG=t.glider.append("g");const[r,n]=i(a,t.name);t.tr_legend=r;t.legend={div:n.append("div")};t.legend.div.html("LD r<sup>2</sup>");const s=e("white","red");o(t.legend.div,s)}export{a as loadTk};
1
+ import{b as t,bL as e}from"./app-b369b169.js";import{l as i}from"./block.legend-d3f61ef7.js";import{s as o}from"./regression.results-69bc42d0.js";import"./vcf-5cc55588.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./axis-747c801e.js";import"./legacy-d3-polyfill-bdb2d792.js";import"./axisstyle-fac7f76b.js";import"./ColorScale-21cab8d2.js";import"./log-99af3443.js";async function a(e,i){if(e.uninitiated){r(e,i)}i.tkcloakon(e);try{const o={genome:i.genome.name,file:e.file,rglst:i.tkarg_rglst(e),width:i.width,devicePixelRatio:window.devicePixelRatio>1?window.devicePixelRatio:1};const a=await t("tkld",{method:"POST",body:o});if(a.error)throw a.error;e.rglstG.selectAll("*").remove();let r=0;for(const t of a.rglst){const i=e.rglstG.append("g");if(t.rangetoobig){t.text_rangetoobig=i.append("text").text(t.rangetoobig).attr("text-anchor","middle").attr("dominant-baseline","central").attr("x",t.width/2);r=Math.max(r,50);continue}if(t.img){i.append("image").attr("width",t.width).attr("height",t.img.height).attr("xlink:href",t.img.src);r=Math.max(r,t.img.height);continue}}e.height_main=e.toppad+r+e.bottompad;i.tkcloakoff(e,{})}catch(t){e.height_main=50;i.tkcloakoff(e,{error:t.message||t})}i.block_setheight(e)}function r(t,a){delete t.uninitiated;t.rglstG=t.glider.append("g");const[r,n]=i(a,t.name);t.tr_legend=r;t.legend={div:n.append("div")};t.legend.div.html("LD r<sup>2</sup>");const s=e("white","red");o(t.legend.div,s)}export{a as loadTk};
@@ -1 +1 @@
1
- import{ac as t,a8 as e,af as n,ad as a,p as s,Z as o,M as p,aF as l,aV as i}from"./app-a8c4854a.js";const r=e(n);function c(e,n,a,s){n.clear();const o=n.d;d(e,o);b(e,o,n);for(const n of e.genome.tkset){if(n.facetlst){for(const e of n.facetlst){if(e.facetpane){t(e.facetpane.pane)}}}if(n.facetpane){t(n.facetpane.pane)}}f(e,o);if(!JSON.parse(sessionStorage.getItem("optionalFeatures")).disableCustomTrackUI){o.append("div").html("Add custom track &raquo;").style("padding","15px").style("text-align","center").attr("class","sja_menuoption").on("click",(()=>{u(e,o)}))}n.show(a,s)}function d(t,e){let n=0;for(const e of t.genome.tkset){n+=e.tklst.length}if(n==0){return}const a=e.append("div").style("margin",n==0?"0px":"15px 15px 5px 15px");const s=a.append("input").attr("size",15).attr("placeholder","Search "+n+" tracks");const o=a.append("span").style("font-size",".8em").style("padding-left","10px");s.on("keyup",(e=>{p.selectAll("*").remove();o.text("");const n=e.target.value;if(n.length<2){return}const a=n.toLowerCase();let s=0;for(const e of t.genome.tkset){const n=[];for(const t of e.tklst){if(t.name&&t.name.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.patient&&t.patient.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.sampletype&&t.sampletype.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.assayname&&t.assayname.toLowerCase().indexOf(a)!=-1){n.push(t);continue}}s+=n.length;if(n.length==0)continue;const o=r(e.name);const l=p.append("table").style("border-spacing","0px").append("tr");const i=l.append("td").style("padding","0px 10px 0px 20px").append("div").style("border","solid 1px "+o);if(n.length>13){i.style("padding","10px 10px 10px 0px").style("height","300px").style("overflow-y","scroll").style("resize","vertical")}const c=i.append("table").style("border-spacing","1px");l.append("td").style("color",o).style("font-size",".8em").style("font-weight","bold").text(e.name);for(const e of n){let n=null;for(const a of t.tklst){if(a.id==e.id&&a.file==e.file&&a.url==e.url){n=a;break}}const a=c.append("tr");const s=a.append("td").style("color","#aaa").style("font-size",".7em");if(n){s.text("SHOWN")}const o=a.append("td").classed("sja_menuoption",true).text(C(e,t));if(n){o.on("click",(()=>S(t,n,s)))}else{o.on("click",(()=>S(t,e,s)))}}}o.text(s==0?"No tracks found":"Found "+s+" track"+(s>1?"s":""))}));const p=e.append("div").style("margin-top","3px")}function f(t,e){const n=e.append("div").style("margin","20px");{const e=new Set;for(const n of t.tklst){e.add(n.name)}for(const n of t.genome.tracks){e.add(n.name)}if(e.size>13){n.style("border-top","solid 1px #eee").style("border-bottom","solid 1px #eee").style("padding","10px 10px 10px 0px").style("height","300px").style("overflow-y","scroll").style("resize","vertical")}}const a=n.append("table");for(const e of t.tklst){const n=a.append("tr");const s=n.append("td");s.text("SHOWN").style("color","#aaa").style("font-size",".7em");const o=n.append("td").text(C(e,t));if(L(e)){o.style("padding","5px 10px")}else{o.attr("class","sja_menuoption").on("click",(()=>{S(t,e,s)}))}}for(const e of t.genome.tracks){let n=false;for(const a of t.tklst){if(a.tkid==e.tkid){n=true;break}}if(n){continue}const s=a.append("tr");const o=s.append("td").style("color","#aaa").style("font-size",".7em");const p=s.append("td").attr("class","sja_menuoption").text(C(e,t));p.on("click",(()=>{S(t,e,o)}))}}function u(t,e){e.selectAll("*").remove();e.append("div").style("margin","30px").style("text-align","center").style("color","#858585").text("Add track for "+t.genome.name+" genome");const n=e.append("div").style("margin","20px");n.append("div").attr("class","sja_menuoption").html('bigWig <span style="opacity:.5;font-size:.8em">numerical data</span>').on("click",(()=>y(t,e)));n.append("div").attr("class","sja_menuoption").html('JSON-BED <span style="opacity:.5;font-size:.8em">positional annotations</span>').on("click",(()=>k(t,e)));n.append("div").attr("class","sja_menuoption").text("Splice junction").on("click",(()=>h(t,e)));n.append("div").attr("class","sja_menuoption").html('VCF <span style="opacity:.5;font-size:.8em">SNV/indel</span>').on("click",(()=>g(t,e)));n.append("div").attr("class","sja_menuoption").html('Interaction <span style="opacity:.5;font-size:.8em">pairs of genomic regions</span>').on("click",(()=>x(t,e)));const a=e.append("div").style("margin","20px");a.append("p").style("color","#858585").text("Declare tracks as JSON text:");const s=a.append("textarea").attr("rows",5).attr("cols","30").attr("placeholder","Enter JSON text");const o=a.append("div").style("margin-top","3px");o.append("button").text("Submit").on("click",(()=>{const e=s.property("value");if(e=="")return;let n;try{n=JSON.parse(e)}catch(t){alert("Invalid JSON: "+t);return}if(!Array.isArray(n)){n=[n]}for(const e of n){if(e.hidden){delete e.hidden;t.genome.tracks.push(e)}else{const n=t.block_addtk_template(e);if(n){t.tk_load(n)}}}}));o.append("button").text("Clear").on("click",(()=>s.property("value","")));o.append("span").style("padding-left","10px").html("<a href=https://docs.google.com/document/d/1ZnPZKSSajWyNISSLELMozKxrZHQbdxQkkkQFnxw6zTs/edit?usp=sharing target=_blank>Track format</a>");o.append("span").style("padding-left","10px").html("<a href=https://jsonlint.com/ target=_blank>debug</a>")}function m(t,e,n){const a=i(t,e.genome.tracks);if(a){if(i(t,e.tklst)){window.alert("The track is already shown")}else{const t=e.block_addtk_template(a);e.tk_load(t);u(e,n)}}else{t.tkid=Math.random().toString();e.genome.tracks.push(t);const a=e.block_addtk_template(t);e.tk_load(a);u(e,n)}}function y(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));{const n=e.append("div").style("margin","0px 20px 20px 20px");n.append("p").text("Add a single track").style("color","#858585").style("font-size",".7em");const s=n.append("p").append("input").attr("type","text").attr("placeholder","bigWig track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add bigWig track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.bigwig,name:s.property("value").trim()||"bigwig track",scale:{auto:1},file:p,url:l,iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""))}{const n=e.append("div").style("margin","0px 20px 20px 20px");n.append("p").text("Add multiple tracks").style("color","#858585").style("font-size",".7em");const s=n.append("p").append("textarea").attr("placeholder","one track per line: [track name],[path/to/file.bw or URL]").attr("rows",2).attr("cols",50);const o=n.append("p");o.append("button").text("Add tracks").on("click",(()=>{const e=s.property("value").trim();if(e=="")return;for(const n of e.split(/[\r\n]/)){const e=n.split(",");if(e[0]&&e[1]){const n={type:a.bigwig,name:e[0].trim(),scale:{auto:1},iscustom:true};const s=e[1].trim();if(A(s))n.url=s;else n.file=s;const o=t.block_addtk_template(n);t.tk_load(o)}}}));o.append("button").text("Clear").on("click",(()=>s.node().value=""))}e.append("div").style("margin","20px").html("<a href=https://genome.ucsc.edu/goldenpath/help/bigWig.html target=_blank>bigWig file format</a>")}function k(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","JSON-BED track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add JSON-BED track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.bedj,name:s.property("value").trim()||"JSON-BED",file:p,url:l,iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://drive.google.com/open?id=1GP81rer7YEb0RpIej2XXfx-k7SCAL1Od9At_oczf06A target=_blank>JSON-BED format</a>")}function h(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","Junction track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add junction track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.junction,name:s.property("value").trim()||"junction",tracks:[{file:p,url:l}],iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://docs.google.com/document/d/1PFva3Mn-U4VPNW0vHHC-CSnYBeotRnqbhCMQPmyLQG4/edit?usp=sharing target=_blank>Junction track format</a>")}function g(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","VCF track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add VCF track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i=Math.random().toString();const r={label:s.property("value").trim()||"VCF",id2vcf:{}};r.id2vcf[i]={vcfid:i,file:p,url:l,headernotloaded:true};const c={type:a.ds,ds:r,isvcf:true,iscustom:true};m(c,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://drive.google.com/open?id=1dbuYeQR6cgkpzcPaIChRFtXwolJVheoTr9NEW_Mfthw target=_blank>VCF format</a>");n.append("p").style("color","#858585").style("font-size",".8em").text("SNV/indel data only")}function x(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","Interaction track name").attr("size",20);const o=n.append("table").append("tr");o.append("td").text("Data source").style("opacity",.5).style("vertical-align","top").style("padding-right","10px");const p=o.append("td");const l=Math.random().toString();{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+1).property("checked",1).on("change",(()=>d(1)));t.append("label").attr("class","sja_clbtext").html("&nbsp;Hi-C, juicebox format").attr("for",l+1)}{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+2).on("change",(()=>d(2)));t.append("label").attr("class","sja_clbtext").html("&nbsp;BED file, compressed and indexed").attr("for",l+2)}{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+3).on("change",(()=>d(3)));t.append("label").attr("class","sja_clbtext").html("&nbsp;Text input").attr("for",l+3)}const i=n.append("div");{i.append("p").html("Juicebox: <a href=https://github.com/theaidenlab/Juicebox target=_blank>github.com/theaidenlab/Juicebox</a>");const n=i.append("p").append("input").attr("type","text").attr("placeholder","*.hic file URL or server-side path").attr("size",40);let o;if(t.genome.hicenzymefragment){const e=i.append("p");e.append("span").html("Restriction enzyme:&nbsp;");o=e.append("select");o.append("option").text("none");for(const e of t.genome.hicenzymefragment){o.append("option").text(e.enzyme).property("value",e.enzyme)}}i.append("p").append("button").text("Add track").on("click",(()=>{const p=n.property("value");if(!p)return;const l={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:true,mode_arc:false,iscustom:1};if(A(p))l.url=p;else l.file=p;if(o){const t=o.node();l.enzyme=t.options[t.selectedIndex].value;if(l.enzyme=="none")delete l.enzyme}m(l,t,e)}))}const r=n.append("div").style("display","none");{r.append("p").html("<a href=https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq target=_blank>BED file format</a>");const n=r.append("p").append("input").attr("type","text").attr("placeholder","*.gz file URL or server-side path").attr("size",40);r.append("p").append("button").text("Add track").on("click",(()=>{const o=n.property("value");if(!o)return;const p={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:false,mode_arc:true,iscustom:1};if(A(o))p.bedurl=o;else p.bedfile=o;m(p,t,e)}))}const c=n.append("div").style("display","none");{c.append("p").html("Enter interaction data as <a href=https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq target=_blank>tab-delimited text</a>.");const n=c.append("textarea").attr("placeholder","One line per interaction").attr("cols",45).attr("rows",5);c.append("p").append("button").text("Add track").on("click",(()=>{const o=n.property("value");if(!o)return;const p={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:false,mode_arc:true,iscustom:1,textdata:{raw:o}};m(p,t,e)}))}const d=t=>{i.style("display",t==1?"block":"none");r.style("display",t==2?"block":"none");c.style("display",t==3?"block":"none")}}function b(t,e,n){const a=[];for(const e of t.genome.tkset){if(e.facetlst){a.push(e);continue}if(e.isfacet){a.push(e);continue}console.log("the .isfacet flag is missing on this tkset and may need to be supported")}if(a.length==0){return}const p=e.append("div").style("margin","15px");p.append("div").text("FACET").style("color","#858585").style("font-size",".7em");for(const e of a){if(e.facetlst){for(const a of e.facetlst){p.append("div").style("display","inline-block").attr("class","sja_menuoption").text((a.name?a.name+": ":"")+e.name).on("click",(p=>{n.hide();if(a.facetpane){document.body.appendChild(a.facetpane.pane.node());s(a.facetpane.pane)}else{const t=o({x:p.clientX-100,y:p.clientY-20,closekeep:true});a.facetpane=t}v(t,e,a)}))}continue}p.append("div").style("display","inline-block").attr("class","sja_menuoption").text(e.tklst.length+" tracks from "+e.name).on("click",(a=>{n.hide();if(e.facetpane){document.body.appendChild(e.facetpane.pane.node());s(e.facetpane.pane)}else{const t=o({x:a.clientX-100,y:a.clientY-20,closekeep:true});e.facetpane=t}v(t,e)}))}}function v(t,e,n){const a=new p;const s=(n||e).facetpane;s.header.html('<span style="color:#858585;font-size:.8em">Tracks from</span> '+e.name);s.body.selectAll("*").remove();z(e.tklst);const[o,l,i,r,c]=_(e,n);const[d]=w(o,n);const f=s.body.append("div");if(l.size>50){f.style("height","500px").style("overflow-y","scroll").style("resize","vertical")}const u=f.append("table").style("margin","10px").style("border-spacing","3px").style("border-collapse","separate").attr("class","sja_simpletable");const m=u.append("tr");if(r){m.append("td");m.append("td")}else if(i){m.append("td")}m.append("td");for(const t of d){m.append("td").text(t).attr("class","sja_clbtext").on("click",(()=>{k(t)}))}if(r){for(const[t,e]of r){let n=0;for(const t of e.values()){n+=t.size}let a=u.append("tr");let s=false;a.append("td").text(t).attr("class","sja_clbtext").attr("rowspan",n).on("click",(()=>{h({L1:t})}));for(const[n,o]of e){if(s)a=u.append("tr");let e=false;a.append("td").text(n).attr("rowspan",o.size).attr("class","sja_clbtext").on("click",(()=>{h({L1:t,L2:n})}));for(const s of o){if(e)a=u.append("tr");a.append("td").text(s).attr("class","sja_clbtext").on("click",(()=>{h({L1:t,L2:n,sample:s})}));for(const t of d){y(s,t,a)}e=true}s=true}}}if(i){for(const[t,e]of i){let n=u.append("tr");let a=false;const s=n.append("td").text(t).attr("rowspan",e.size).attr("class","sja_clbtext").on("click",(()=>{h({level:t})}));if(r){s.attr("colspan",2)}for(const s of e){if(a)n=u.append("tr");n.append("td").text(s).attr("class","sja_clbtext").on("click",(()=>{h({level:t,sample:s})}));for(const t of d){y(s,t,n)}a=true}a=true}}for(const[t,e]of l){if(c.has(t))continue;const e=u.append("tr");const n=e.append("td").text(t).attr("class","sja_clbtext").on("click",(()=>{h({sample:t})}));if(r){n.attr("colspan",3)}else if(i){n.attr("colspan",2)}for(const n of d){y(t,n,e)}}function y(e,n,s){const o=s.append("td");const p=l.get(e);if(!p)return;const i=p.get(n);if(!i)return;o.attr("class","sja_menuoption").style("font-size",".7em").style("text-align","center");for(const e of i){if(j(t,e.tkid));}if(i.length>1){o.text(i.length).on("click",(e=>{a.clear().show(e.clientX,e.clientY);const n=a.d.append("table");for(const e of i){const a=n.append("tr");const s=a.append("td").style("color","#858585").style("font-size",".7em");if(j(t,e.tkid)){s.text("SHOWN")}a.append("td").text(e.partname||e.name).attr("class","sja_menuoption").on("click",(()=>{S(t,e,s)}))}}))}else{if(j(t,i[0].tkid)){o.text("SHOWN")}o.on("click",(()=>{S(t,i[0],o)}))}}function k(a){const s=[];for(const t of e.tklst){if(n){if(!o.has(t.assay))continue}if(t.assay==a){s.push(t)}}g(s);v(t,e,n)}function h({L1:a,L2:s,level:p,sample:l}){const i=[];for(const t of e.tklst){if(n){if(!o.has(t.assay))continue}const e=t.level1;const r=t.level2;if(a){if(e!=a)continue;if(s){if(r!=s)continue;if(l){if(t.sample==l)i.push(t)}else{i.push(t)}}else{i.push(t)}}else if(p){if(e&&r||!e&&!r)continue;const n=e||r;if(n!=p)continue;if(l){if(t.sample==l)i.push(t)}else{i.push(t)}}else if(l){if(e||r)continue;if(t.sample==l)i.push(t)}}g(i);v(t,e,n)}function g(e){if(e.length==0)return;const n=[];for(const a of e){if(!j(t,a.tkid)){n.push(a)}}if(n.length){for(const e of n){const n=t.block_addtk_template(e);if(n){t.tk_load(n)}}}else{for(const n of e){for(let e=0;e<t.tklst.length;e++){if(t.tklst[e].tkid==n.tkid){t.tk_remove(e);break}}}}}}function _(t,e){const n=new Map;const a=new Map;let s;let o;const p=new Set;if(e){for(const t of e.assays){n.set(t,0)}for(const t of e.samples){a.set(t,new Map)}for(const e of t.tklst){if(!n.has(e.assay))continue;const t=e.patient||e.sample;if(!a.has(t))continue;n.set(e.assay,n.get(e.assay)+1);if(!a.get(t).has(e.assay))a.get(t).set(e.assay,[]);a.get(t).get(e.assay).push(e)}return[n,a,null,null,p]}for(const e of t.tklst){if(!n.has(e.assay))n.set(e.assay,0);n.set(e.assay,n.get(e.assay)+1)}let l=false,i=false;for(const e of t.tklst){if(e.level1)l=true;if(e.level2)i=true}if(l||i){s=new Map;if(l&&i){o=new Map}}for(const e of t.tklst){const t=e.sample;const n=e.assay;if(!n||!t){continue}if(!a.has(t))a.set(t,new Map);if(!a.get(t).has(n))a.get(t).set(n,[]);a.get(t).get(n).push(e);const l=e.level1,i=e.level2;if(l||i){p.add(t);if(l&&i){if(!o.has(l))o.set(l,new Map);if(!o.get(l).has(i))o.get(l).set(i,new Set);o.get(l).get(i).add(t)}else{const e=l||i;if(!s.has(e))s.set(e,new Set);s.get(e).add(t)}}}return[n,a,s,o,p]}function w(t,e){let n;if(e&&e.nosortassay){n=[...t].map((t=>t[0]))}else{n=[...t].sort(((t,e)=>{const[n,a]=t;const[s,o]=e;if(a==o){if(n<s)return-1;return 1}else{return o-a}})).map((t=>t[0]))}return[n]}function z(t){for(const e of t){if(e.assayname){e.assay=e.assayname;delete e.assayname}if(!e.assay)continue;if(e.patient){if(e.sampletype&&e.patient==e.sampletype){delete e.sampletype}if(!e.sample){e.sample=e.patient;delete e.patient}}if(!e.sample)continue;if(e.patient){e.level1=e.patient;delete e.patient;if(e.sampletype){e.level2=e.sampletype;delete e.sampletype}}}}function j(t,e){for(const n of t.tklst){if(n.tkid==e)return true}return false}function S(t,e,n){for(let a=0;a<t.tklst.length;a++){const s=t.tklst[a];let o=false;if(e.ds&&e.ds.iscustom){if(s.ds&&s.ds.label==e.ds.label){o=true}}else if(e.tkid){if(s.tkid==e.tkid)o=true}else if(e.id){if(s.id==e.id&&s.file==e.file&&s.url==e.url){o=true}}if(o){t.tk_remove(a);t.tkchangeaffectlegend(e);if(n){n.text("")}return}}let s;if(e.type==a.ds){const n={type:e.type,tkid:e.tkid,ds:e.ds,isvcf:e.isvcf,itemlabelname:e.itemlabelname,iscustom:e.iscustom,vcfinfofilter:e.vcfinfofilter,populationfrequencyfilter:e.populationfrequencyfilter,url4variant:e.url4variant,button4variant:e.button4variant,viewrangeupperlimit:e.viewrangeupperlimit};if(e.ds.iscustom){t.addchilddsnoload(e.ds)}s=t.block_addtk_template(n)}else{s=t.block_addtk_template(e)}t.tk_load(s);if(n){n.text("SHOWN")}}function C(t,e){let n;if(t.type==a.usegm){if(e){switch(e.gmmode){case l.gmsum:const a=e.allgm.reduce(((t,e)=>t+(e.hidden?0:1)),0);n=t.name+", sum of "+(a<e.allgm.length?a+" of "+e.allgm.length:a)+" isoforms";break;case l.splicingrna:n=t.name+" exons";break;case l.exononly:n=t.name+" RNA";break;case l.genomic:n=t.name+" genomic view";break;case l.protein:n=t.name+" protein";break}}else{n=t.name}}else if(t.type==a.ds){n=t.ds.label}else if(t.name){n=t.name}else{if(t.dslabel){n=t.dslabel}else{const e=[];if(t.patient)e.push(t.patient);if(t.sampletype)e.push(t.sampletype);if(t.assayname)e.push(t.assayname);n=e.join(" ")}}if(t.type==a.junction){if(t.totalsamplecount==undefined){return n}if(t.totalsamplecount==1){return n}return`${n} (${t.totalsamplecount})`}if(!t.tracks||t.tracks.length==1){return n}return`${n} (${t.tracks.length})`}function A(t){const e=t.toLowerCase();if(e.startsWith("http://"))return true;if(e.startsWith("https://"))return true;if(e.startsWith("ftp://"))return true;return false}function L(t){if(t.type==a.usegm)return true;if(t.type=="mds3"&&t.dslabel)return true;if(t.type=="bam"&&t.gdcFile)return true;return false}export{c as default};
1
+ import{ac as t,a8 as e,af as n,ad as a,p as s,Z as o,M as p,aF as l,aV as i}from"./app-b369b169.js";const r=e(n);function c(e,n,a,s){n.clear();const o=n.d;d(e,o);b(e,o,n);for(const n of e.genome.tkset){if(n.facetlst){for(const e of n.facetlst){if(e.facetpane){t(e.facetpane.pane)}}}if(n.facetpane){t(n.facetpane.pane)}}f(e,o);if(!JSON.parse(sessionStorage.getItem("optionalFeatures")).disableCustomTrackUI){o.append("div").html("Add custom track &raquo;").style("padding","15px").style("text-align","center").attr("class","sja_menuoption").on("click",(()=>{u(e,o)}))}n.show(a,s)}function d(t,e){let n=0;for(const e of t.genome.tkset){n+=e.tklst.length}if(n==0){return}const a=e.append("div").style("margin",n==0?"0px":"15px 15px 5px 15px");const s=a.append("input").attr("size",15).attr("placeholder","Search "+n+" tracks");const o=a.append("span").style("font-size",".8em").style("padding-left","10px");s.on("keyup",(e=>{p.selectAll("*").remove();o.text("");const n=e.target.value;if(n.length<2){return}const a=n.toLowerCase();let s=0;for(const e of t.genome.tkset){const n=[];for(const t of e.tklst){if(t.name&&t.name.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.patient&&t.patient.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.sampletype&&t.sampletype.toLowerCase().indexOf(a)!=-1){n.push(t);continue}if(t.assayname&&t.assayname.toLowerCase().indexOf(a)!=-1){n.push(t);continue}}s+=n.length;if(n.length==0)continue;const o=r(e.name);const l=p.append("table").style("border-spacing","0px").append("tr");const i=l.append("td").style("padding","0px 10px 0px 20px").append("div").style("border","solid 1px "+o);if(n.length>13){i.style("padding","10px 10px 10px 0px").style("height","300px").style("overflow-y","scroll").style("resize","vertical")}const c=i.append("table").style("border-spacing","1px");l.append("td").style("color",o).style("font-size",".8em").style("font-weight","bold").text(e.name);for(const e of n){let n=null;for(const a of t.tklst){if(a.id==e.id&&a.file==e.file&&a.url==e.url){n=a;break}}const a=c.append("tr");const s=a.append("td").style("color","#aaa").style("font-size",".7em");if(n){s.text("SHOWN")}const o=a.append("td").classed("sja_menuoption",true).text(C(e,t));if(n){o.on("click",(()=>S(t,n,s)))}else{o.on("click",(()=>S(t,e,s)))}}}o.text(s==0?"No tracks found":"Found "+s+" track"+(s>1?"s":""))}));const p=e.append("div").style("margin-top","3px")}function f(t,e){const n=e.append("div").style("margin","20px");{const e=new Set;for(const n of t.tklst){e.add(n.name)}for(const n of t.genome.tracks){e.add(n.name)}if(e.size>13){n.style("border-top","solid 1px #eee").style("border-bottom","solid 1px #eee").style("padding","10px 10px 10px 0px").style("height","300px").style("overflow-y","scroll").style("resize","vertical")}}const a=n.append("table");for(const e of t.tklst){const n=a.append("tr");const s=n.append("td");s.text("SHOWN").style("color","#aaa").style("font-size",".7em");const o=n.append("td").text(C(e,t));if(L(e)){o.style("padding","5px 10px")}else{o.attr("class","sja_menuoption").on("click",(()=>{S(t,e,s)}))}}for(const e of t.genome.tracks){let n=false;for(const a of t.tklst){if(a.tkid==e.tkid){n=true;break}}if(n){continue}const s=a.append("tr");const o=s.append("td").style("color","#aaa").style("font-size",".7em");const p=s.append("td").attr("class","sja_menuoption").text(C(e,t));p.on("click",(()=>{S(t,e,o)}))}}function u(t,e){e.selectAll("*").remove();e.append("div").style("margin","30px").style("text-align","center").style("color","#858585").text("Add track for "+t.genome.name+" genome");const n=e.append("div").style("margin","20px");n.append("div").attr("class","sja_menuoption").html('bigWig <span style="opacity:.5;font-size:.8em">numerical data</span>').on("click",(()=>y(t,e)));n.append("div").attr("class","sja_menuoption").html('JSON-BED <span style="opacity:.5;font-size:.8em">positional annotations</span>').on("click",(()=>k(t,e)));n.append("div").attr("class","sja_menuoption").text("Splice junction").on("click",(()=>h(t,e)));n.append("div").attr("class","sja_menuoption").html('VCF <span style="opacity:.5;font-size:.8em">SNV/indel</span>').on("click",(()=>g(t,e)));n.append("div").attr("class","sja_menuoption").html('Interaction <span style="opacity:.5;font-size:.8em">pairs of genomic regions</span>').on("click",(()=>x(t,e)));const a=e.append("div").style("margin","20px");a.append("p").style("color","#858585").text("Declare tracks as JSON text:");const s=a.append("textarea").attr("rows",5).attr("cols","30").attr("placeholder","Enter JSON text");const o=a.append("div").style("margin-top","3px");o.append("button").text("Submit").on("click",(()=>{const e=s.property("value");if(e=="")return;let n;try{n=JSON.parse(e)}catch(t){alert("Invalid JSON: "+t);return}if(!Array.isArray(n)){n=[n]}for(const e of n){if(e.hidden){delete e.hidden;t.genome.tracks.push(e)}else{const n=t.block_addtk_template(e);if(n){t.tk_load(n)}}}}));o.append("button").text("Clear").on("click",(()=>s.property("value","")));o.append("span").style("padding-left","10px").html("<a href=https://docs.google.com/document/d/1ZnPZKSSajWyNISSLELMozKxrZHQbdxQkkkQFnxw6zTs/edit?usp=sharing target=_blank>Track format</a>");o.append("span").style("padding-left","10px").html("<a href=https://jsonlint.com/ target=_blank>debug</a>")}function m(t,e,n){const a=i(t,e.genome.tracks);if(a){if(i(t,e.tklst)){window.alert("The track is already shown")}else{const t=e.block_addtk_template(a);e.tk_load(t);u(e,n)}}else{t.tkid=Math.random().toString();e.genome.tracks.push(t);const a=e.block_addtk_template(t);e.tk_load(a);u(e,n)}}function y(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));{const n=e.append("div").style("margin","0px 20px 20px 20px");n.append("p").text("Add a single track").style("color","#858585").style("font-size",".7em");const s=n.append("p").append("input").attr("type","text").attr("placeholder","bigWig track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add bigWig track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.bigwig,name:s.property("value").trim()||"bigwig track",scale:{auto:1},file:p,url:l,iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""))}{const n=e.append("div").style("margin","0px 20px 20px 20px");n.append("p").text("Add multiple tracks").style("color","#858585").style("font-size",".7em");const s=n.append("p").append("textarea").attr("placeholder","one track per line: [track name],[path/to/file.bw or URL]").attr("rows",2).attr("cols",50);const o=n.append("p");o.append("button").text("Add tracks").on("click",(()=>{const e=s.property("value").trim();if(e=="")return;for(const n of e.split(/[\r\n]/)){const e=n.split(",");if(e[0]&&e[1]){const n={type:a.bigwig,name:e[0].trim(),scale:{auto:1},iscustom:true};const s=e[1].trim();if(A(s))n.url=s;else n.file=s;const o=t.block_addtk_template(n);t.tk_load(o)}}}));o.append("button").text("Clear").on("click",(()=>s.node().value=""))}e.append("div").style("margin","20px").html("<a href=https://genome.ucsc.edu/goldenpath/help/bigWig.html target=_blank>bigWig file format</a>")}function k(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","JSON-BED track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add JSON-BED track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.bedj,name:s.property("value").trim()||"JSON-BED",file:p,url:l,iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://drive.google.com/open?id=1GP81rer7YEb0RpIej2XXfx-k7SCAL1Od9At_oczf06A target=_blank>JSON-BED format</a>")}function h(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","Junction track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add junction track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i={type:a.junction,name:s.property("value").trim()||"junction",tracks:[{file:p,url:l}],iscustom:true};m(i,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://docs.google.com/document/d/1PFva3Mn-U4VPNW0vHHC-CSnYBeotRnqbhCMQPmyLQG4/edit?usp=sharing target=_blank>Junction track format</a>")}function g(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","VCF track name").attr("size",20);const o=n.append("p").append("input").attr("type","text").attr("placeholder","URL or server-side file path").attr("size",40);const p=n.append("p");p.append("button").text("Add VCF track").on("click",(()=>{const n=o.property("value").trim();if(n=="")return;let p,l;if(A(n)){l=n}else{p=n}const i=Math.random().toString();const r={label:s.property("value").trim()||"VCF",id2vcf:{}};r.id2vcf[i]={vcfid:i,file:p,url:l,headernotloaded:true};const c={type:a.ds,ds:r,isvcf:true,iscustom:true};m(c,t,e)}));p.append("button").text("Clear").on("click",(()=>o.node().value=s.node().value=""));n.append("p").html("<a href=https://drive.google.com/open?id=1dbuYeQR6cgkpzcPaIChRFtXwolJVheoTr9NEW_Mfthw target=_blank>VCF format</a>");n.append("p").style("color","#858585").style("font-size",".8em").text("SNV/indel data only")}function x(t,e){e.selectAll("*").remove();e.append("div").style("margin","20px").style("display","inline-block").html("&lt; go back").attr("class","sja_menuoption").on("click",(()=>u(t,e)));const n=e.append("div").style("margin","20px");const s=n.append("p").append("input").attr("type","text").attr("placeholder","Interaction track name").attr("size",20);const o=n.append("table").append("tr");o.append("td").text("Data source").style("opacity",.5).style("vertical-align","top").style("padding-right","10px");const p=o.append("td");const l=Math.random().toString();{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+1).property("checked",1).on("change",(()=>d(1)));t.append("label").attr("class","sja_clbtext").html("&nbsp;Hi-C, juicebox format").attr("for",l+1)}{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+2).on("change",(()=>d(2)));t.append("label").attr("class","sja_clbtext").html("&nbsp;BED file, compressed and indexed").attr("for",l+2)}{const t=p.append("div");t.append("input").attr("type","radio").attr("name",l).attr("id",l+3).on("change",(()=>d(3)));t.append("label").attr("class","sja_clbtext").html("&nbsp;Text input").attr("for",l+3)}const i=n.append("div");{i.append("p").html("Juicebox: <a href=https://github.com/theaidenlab/Juicebox target=_blank>github.com/theaidenlab/Juicebox</a>");const n=i.append("p").append("input").attr("type","text").attr("placeholder","*.hic file URL or server-side path").attr("size",40);let o;if(t.genome.hicenzymefragment){const e=i.append("p");e.append("span").html("Restriction enzyme:&nbsp;");o=e.append("select");o.append("option").text("none");for(const e of t.genome.hicenzymefragment){o.append("option").text(e.enzyme).property("value",e.enzyme)}}i.append("p").append("button").text("Add track").on("click",(()=>{const p=n.property("value");if(!p)return;const l={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:true,mode_arc:false,iscustom:1};if(A(p))l.url=p;else l.file=p;if(o){const t=o.node();l.enzyme=t.options[t.selectedIndex].value;if(l.enzyme=="none")delete l.enzyme}m(l,t,e)}))}const r=n.append("div").style("display","none");{r.append("p").html("<a href=https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq target=_blank>BED file format</a>");const n=r.append("p").append("input").attr("type","text").attr("placeholder","*.gz file URL or server-side path").attr("size",40);r.append("p").append("button").text("Add track").on("click",(()=>{const o=n.property("value");if(!o)return;const p={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:false,mode_arc:true,iscustom:1};if(A(o))p.bedurl=o;else p.bedfile=o;m(p,t,e)}))}const c=n.append("div").style("display","none");{c.append("p").html("Enter interaction data as <a href=https://docs.google.com/document/d/1MQ0Z_AD5moDmaSx2tcn7DyVKGp49TS63pO0cceGL_Ns/edit#heading=h.kr6p4w2zhhwq target=_blank>tab-delimited text</a>.");const n=c.append("textarea").attr("placeholder","One line per interaction").attr("cols",45).attr("rows",5);c.append("p").append("button").text("Add track").on("click",(()=>{const o=n.property("value");if(!o)return;const p={type:a.hicstraw,name:s.property("value")||"Custom interaction",mode_hm:false,mode_arc:true,iscustom:1,textdata:{raw:o}};m(p,t,e)}))}const d=t=>{i.style("display",t==1?"block":"none");r.style("display",t==2?"block":"none");c.style("display",t==3?"block":"none")}}function b(t,e,n){const a=[];for(const e of t.genome.tkset){if(e.facetlst){a.push(e);continue}if(e.isfacet){a.push(e);continue}console.log("the .isfacet flag is missing on this tkset and may need to be supported")}if(a.length==0){return}const p=e.append("div").style("margin","15px");p.append("div").text("FACET").style("color","#858585").style("font-size",".7em");for(const e of a){if(e.facetlst){for(const a of e.facetlst){p.append("div").style("display","inline-block").attr("class","sja_menuoption").text((a.name?a.name+": ":"")+e.name).on("click",(p=>{n.hide();if(a.facetpane){document.body.appendChild(a.facetpane.pane.node());s(a.facetpane.pane)}else{const t=o({x:p.clientX-100,y:p.clientY-20,closekeep:true});a.facetpane=t}v(t,e,a)}))}continue}p.append("div").style("display","inline-block").attr("class","sja_menuoption").text(e.tklst.length+" tracks from "+e.name).on("click",(a=>{n.hide();if(e.facetpane){document.body.appendChild(e.facetpane.pane.node());s(e.facetpane.pane)}else{const t=o({x:a.clientX-100,y:a.clientY-20,closekeep:true});e.facetpane=t}v(t,e)}))}}function v(t,e,n){const a=new p;const s=(n||e).facetpane;s.header.html('<span style="color:#858585;font-size:.8em">Tracks from</span> '+e.name);s.body.selectAll("*").remove();z(e.tklst);const[o,l,i,r,c]=_(e,n);const[d]=w(o,n);const f=s.body.append("div");if(l.size>50){f.style("height","500px").style("overflow-y","scroll").style("resize","vertical")}const u=f.append("table").style("margin","10px").style("border-spacing","3px").style("border-collapse","separate").attr("class","sja_simpletable");const m=u.append("tr");if(r){m.append("td");m.append("td")}else if(i){m.append("td")}m.append("td");for(const t of d){m.append("td").text(t).attr("class","sja_clbtext").on("click",(()=>{k(t)}))}if(r){for(const[t,e]of r){let n=0;for(const t of e.values()){n+=t.size}let a=u.append("tr");let s=false;a.append("td").text(t).attr("class","sja_clbtext").attr("rowspan",n).on("click",(()=>{h({L1:t})}));for(const[n,o]of e){if(s)a=u.append("tr");let e=false;a.append("td").text(n).attr("rowspan",o.size).attr("class","sja_clbtext").on("click",(()=>{h({L1:t,L2:n})}));for(const s of o){if(e)a=u.append("tr");a.append("td").text(s).attr("class","sja_clbtext").on("click",(()=>{h({L1:t,L2:n,sample:s})}));for(const t of d){y(s,t,a)}e=true}s=true}}}if(i){for(const[t,e]of i){let n=u.append("tr");let a=false;const s=n.append("td").text(t).attr("rowspan",e.size).attr("class","sja_clbtext").on("click",(()=>{h({level:t})}));if(r){s.attr("colspan",2)}for(const s of e){if(a)n=u.append("tr");n.append("td").text(s).attr("class","sja_clbtext").on("click",(()=>{h({level:t,sample:s})}));for(const t of d){y(s,t,n)}a=true}a=true}}for(const[t,e]of l){if(c.has(t))continue;const e=u.append("tr");const n=e.append("td").text(t).attr("class","sja_clbtext").on("click",(()=>{h({sample:t})}));if(r){n.attr("colspan",3)}else if(i){n.attr("colspan",2)}for(const n of d){y(t,n,e)}}function y(e,n,s){const o=s.append("td");const p=l.get(e);if(!p)return;const i=p.get(n);if(!i)return;o.attr("class","sja_menuoption").style("font-size",".7em").style("text-align","center");for(const e of i){if(j(t,e.tkid));}if(i.length>1){o.text(i.length).on("click",(e=>{a.clear().show(e.clientX,e.clientY);const n=a.d.append("table");for(const e of i){const a=n.append("tr");const s=a.append("td").style("color","#858585").style("font-size",".7em");if(j(t,e.tkid)){s.text("SHOWN")}a.append("td").text(e.partname||e.name).attr("class","sja_menuoption").on("click",(()=>{S(t,e,s)}))}}))}else{if(j(t,i[0].tkid)){o.text("SHOWN")}o.on("click",(()=>{S(t,i[0],o)}))}}function k(a){const s=[];for(const t of e.tklst){if(n){if(!o.has(t.assay))continue}if(t.assay==a){s.push(t)}}g(s);v(t,e,n)}function h({L1:a,L2:s,level:p,sample:l}){const i=[];for(const t of e.tklst){if(n){if(!o.has(t.assay))continue}const e=t.level1;const r=t.level2;if(a){if(e!=a)continue;if(s){if(r!=s)continue;if(l){if(t.sample==l)i.push(t)}else{i.push(t)}}else{i.push(t)}}else if(p){if(e&&r||!e&&!r)continue;const n=e||r;if(n!=p)continue;if(l){if(t.sample==l)i.push(t)}else{i.push(t)}}else if(l){if(e||r)continue;if(t.sample==l)i.push(t)}}g(i);v(t,e,n)}function g(e){if(e.length==0)return;const n=[];for(const a of e){if(!j(t,a.tkid)){n.push(a)}}if(n.length){for(const e of n){const n=t.block_addtk_template(e);if(n){t.tk_load(n)}}}else{for(const n of e){for(let e=0;e<t.tklst.length;e++){if(t.tklst[e].tkid==n.tkid){t.tk_remove(e);break}}}}}}function _(t,e){const n=new Map;const a=new Map;let s;let o;const p=new Set;if(e){for(const t of e.assays){n.set(t,0)}for(const t of e.samples){a.set(t,new Map)}for(const e of t.tklst){if(!n.has(e.assay))continue;const t=e.patient||e.sample;if(!a.has(t))continue;n.set(e.assay,n.get(e.assay)+1);if(!a.get(t).has(e.assay))a.get(t).set(e.assay,[]);a.get(t).get(e.assay).push(e)}return[n,a,null,null,p]}for(const e of t.tklst){if(!n.has(e.assay))n.set(e.assay,0);n.set(e.assay,n.get(e.assay)+1)}let l=false,i=false;for(const e of t.tklst){if(e.level1)l=true;if(e.level2)i=true}if(l||i){s=new Map;if(l&&i){o=new Map}}for(const e of t.tklst){const t=e.sample;const n=e.assay;if(!n||!t){continue}if(!a.has(t))a.set(t,new Map);if(!a.get(t).has(n))a.get(t).set(n,[]);a.get(t).get(n).push(e);const l=e.level1,i=e.level2;if(l||i){p.add(t);if(l&&i){if(!o.has(l))o.set(l,new Map);if(!o.get(l).has(i))o.get(l).set(i,new Set);o.get(l).get(i).add(t)}else{const e=l||i;if(!s.has(e))s.set(e,new Set);s.get(e).add(t)}}}return[n,a,s,o,p]}function w(t,e){let n;if(e&&e.nosortassay){n=[...t].map((t=>t[0]))}else{n=[...t].sort(((t,e)=>{const[n,a]=t;const[s,o]=e;if(a==o){if(n<s)return-1;return 1}else{return o-a}})).map((t=>t[0]))}return[n]}function z(t){for(const e of t){if(e.assayname){e.assay=e.assayname;delete e.assayname}if(!e.assay)continue;if(e.patient){if(e.sampletype&&e.patient==e.sampletype){delete e.sampletype}if(!e.sample){e.sample=e.patient;delete e.patient}}if(!e.sample)continue;if(e.patient){e.level1=e.patient;delete e.patient;if(e.sampletype){e.level2=e.sampletype;delete e.sampletype}}}}function j(t,e){for(const n of t.tklst){if(n.tkid==e)return true}return false}function S(t,e,n){for(let a=0;a<t.tklst.length;a++){const s=t.tklst[a];let o=false;if(e.ds&&e.ds.iscustom){if(s.ds&&s.ds.label==e.ds.label){o=true}}else if(e.tkid){if(s.tkid==e.tkid)o=true}else if(e.id){if(s.id==e.id&&s.file==e.file&&s.url==e.url){o=true}}if(o){t.tk_remove(a);t.tkchangeaffectlegend(e);if(n){n.text("")}return}}let s;if(e.type==a.ds){const n={type:e.type,tkid:e.tkid,ds:e.ds,isvcf:e.isvcf,itemlabelname:e.itemlabelname,iscustom:e.iscustom,vcfinfofilter:e.vcfinfofilter,populationfrequencyfilter:e.populationfrequencyfilter,url4variant:e.url4variant,button4variant:e.button4variant,viewrangeupperlimit:e.viewrangeupperlimit};if(e.ds.iscustom){t.addchilddsnoload(e.ds)}s=t.block_addtk_template(n)}else{s=t.block_addtk_template(e)}t.tk_load(s);if(n){n.text("SHOWN")}}function C(t,e){let n;if(t.type==a.usegm){if(e){switch(e.gmmode){case l.gmsum:const a=e.allgm.reduce(((t,e)=>t+(e.hidden?0:1)),0);n=t.name+", sum of "+(a<e.allgm.length?a+" of "+e.allgm.length:a)+" isoforms";break;case l.splicingrna:n=t.name+" exons";break;case l.exononly:n=t.name+" RNA";break;case l.genomic:n=t.name+" genomic view";break;case l.protein:n=t.name+" protein";break}}else{n=t.name}}else if(t.type==a.ds){n=t.ds.label}else if(t.name){n=t.name}else{if(t.dslabel){n=t.dslabel}else{const e=[];if(t.patient)e.push(t.patient);if(t.sampletype)e.push(t.sampletype);if(t.assayname)e.push(t.assayname);n=e.join(" ")}}if(t.type==a.junction){if(t.totalsamplecount==undefined){return n}if(t.totalsamplecount==1){return n}return`${n} (${t.totalsamplecount})`}if(!t.tracks||t.tracks.length==1){return n}return`${n} (${t.tracks.length})`}function A(t){const e=t.toLowerCase();if(e.startsWith("http://"))return true;if(e.startsWith("https://"))return true;if(e.startsWith("ftp://"))return true;return false}function L(t){if(t.type==a.usegm)return true;if(t.type=="mds3"&&t.dslabel)return true;if(t.type=="bam"&&t.gdcFile)return true;return false}export{c as default};
@@ -1 +1 @@
1
- import{ad as e,b as t,I as a,ag as n,a8 as i,af as l,a9 as o,W as s,ah as r,M as g,aE as c,d,aB as p}from"./app-a8c4854a.js";import{l as f}from"./block.legend-b2987cd9.js";import{b as m,a as h}from"./block-dcb130fb.js";import{b as k,c as u}from"./axis-747c801e.js";import"./vcf-c4a23924.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./legacy-d3-polyfill-bdb2d792.js";import"./checkbox-96437f4d.js";import"./pointer-c7475677.js";const b=13;const v="#668CFF";const y=150;const w=-2;function x(t,a){const n=t._template;delete t._template;if(!n.tracks)throw".tracks[] missing from "+t.name+" track";if(n.tracks.length==0)throw".tracks[] length 0 from "+t.name+" track";t.tracks=[];const i=new Set;for(const e of n.tracks){const a={};for(const t in e){a[t]=e[t]}if(!a.name)throw"no name for member track of "+t.name+": "+JSON.stringify(a);if(i.has(a.name))throw"duplicating member track name: "+a.name;i.add(a.name);if(!a.type)throw"no type for member track of "+t.name+": "+JSON.stringify(a);if(!a.file&&!a.url)throw'neither file or url given for member "'+a.name+'" of '+t.name;if(a.type=="bedj");else if(a.type=="bigwig"){m(a,e)}else{throw"invalid type of member track of "+t.name+": "+a.type}a.toppad=a.toppad==undefined?4:a.toppad;a.bottompad=a.bottompad==undefined?4:a.bottompad;a.y=0;t.tracks.push(a)}t.geneset=new Set;if(n.genevaluetrack){if(!n.genevaluetrack.file&&n.genevaluetrack.url)throw"no .file or .url for genevaluetrack";t.genevaluetrack={file:n.genevaluetrack.file,url:n.genevaluetrack.url}}if(n.genevaluetklst){if(!Array.isArray(n.genevaluetklst))throw".genevaluetklst should be an array";if(n.genevaluetklst.length==0)throw"zero length of .genevaluetklst";t.genevaluetklst=[];for(const e of n.genevaluetklst){if(!e.name)throw"name missing for one genevalue track";if(!e.file&&!e.url)throw"no file or url for genevalue track "+e.name;const a={};for(const t in e)a[t]=e[t];t.genevaluetklst.push(a)}}if(n.bigwigsetting){t.bigwigsetting={};if(n.bigwigsetting.scale){if(n.bigwigsetting.scale.max){if(!Number.isFinite(n.bigwigsetting.scale.max))throw"invalid max value in bigwigsetting.scale";if(!Number.isFinite(n.bigwigsetting.scale.min))throw"invalid or missing min value in bigwigsetting.scale";if(n.bigwigsetting.scale.max<=n.bigwigsetting.scale.min)throw"max <= min in bigwigsetting.scale";t.bigwigsetting.scale={min:n.bigwigsetting.scale.min,max:n.bigwigsetting.scale.max}}}for(const e of t.tracks){if(e.type!="bigwig")continue;if(t.bigwigsetting.scale){if(t.bigwigsetting.scale.max!=undefined){delete e.scale.auto;e.scale={min:t.bigwigsetting.scale.min,max:t.bigwigsetting.scale.max}}else if(t.bigwigsetting.scale.percentile){delete e.scale.auto;e.scale.percentile=t.bigwigsetting.scale.percentile}}if(t.bigwigsetting.pcolor)e.pcolor=t.bigwigsetting.pcolor;if(t.bigwigsetting.ncolor)e.ncolor=t.bigwigsetting.ncolor;if(t.bigwigsetting.pcolor2)e.pcolor=t.bigwigsetting.pcolor2;if(t.bigwigsetting.ncolor2)e.ncolor=t.bigwigsetting.ncolor2}}if(t.genevaluetrack){const e=t.genevaluetrack;delete t.genevaluetrack;e.name=t.genevaluetype;delete t.genevaluetype;if(t.genevaluematchname){e.matchname=t.genevaluematchname;delete t.genevaluematchname}if(t.genebarcolor){e.barcolor=t.genebarcolor;delete t.genebarcolor}if(t.genebarwidth){e.barwidth=t.genebarwidth;delete t.genebarwidth}if(!t.genevaluetklst){t.genevaluetklst=[]}t.genevaluetklst.push(e)}if(t.genevaluetklst){for(const e of t.genevaluetklst){e.axisg=t.gright.append("g");e.label=t.gright.append("text").attr("font-size",t.axisfontsize+2).attr("font-family",r).attr("class","sja_clbtext").on("click",(()=>{I(e,t,a)}));if(!e.barcolor)e.barcolor=v;if(!e.barwidth)e.barwidth=y}t.toppad=t.genevaluetklst.length==1?20:40;if(t.genevaluetklst.length==1){t.genevaluetklst[0].label.attr("text-anchor","end").attr("x",-a.rpad).attr("y",w)}else{for(const e of t.genevaluetklst){e.label.attr("y",t.axisfontsize+2-t.toppad).attr("text-anchor","middle")}}t.sample2gvtk2gene=new Map;t.genelsttip=new g({padding:"5px"});A(t,a);t.config_handle=a.maketklefthandle(t,-a.labelfontsize+w).text("CONFIG").attr("fill","#858585").attr("x",5).attr("text-anchor","begin");t.changegenelabel=t.gright.append("text").attr("text-anchor","end").attr("font-size",t.axisfontsize).attr("font-family",r).attr("x",-a.rpad).attr("y",w).attr("class","sja_clbtext").on("click",(()=>{N(t.changegenelabel,t,a)}));if(t.genevaluematchname){for(const e of t.genevaluetklst){if(!e.matchname)e.matchname=t.genevaluematchname}delete t.genevaluematchname}}else{t.toppad=20;t.config_handle=a.maketkconfighandle(t).attr("y",-5)}t.config_handle.on("click",(()=>{M(t,a)}));const l=[t.tklabel.attr("y",-10).node().getBBox().width];if(a.legend&&a.legend.holder){let e=false;if(t.legendimg&&t.legendimg.file){e=true}else if(t.categories){e=true}else if(t.genevaluetklst){e=t.genevaluetklst.find((e=>e.multivaluekey))}if(e){const[e,n]=f(a,t.name);t.tr_legend=e;t.td_legend=n;t.legendtip=new g({padding:""})}if(t.legendimg&&t.legendimg.file){a.make_legend_img(t.legendimg,t.td_legend)}else if(t.categories){c(t.categories,t.td_legend)}if(t.genevaluetklst){for(const e of t.genevaluetklst){if(e.multivaluekey){e.legend={div:t.td_legend.append("div"),gene2hiddenkeys:new Map};e.legend.label_genespecific=e.legend.div.append("div").style("display","inline-block").style("margin","5px 10px 10px 0px").style("color","#858585").style("vertical-align","top");e.legend.contentdiv=e.legend.div.append("div").style("display","inline-block").style("margin","0px 10px 10px 0px").style("vertical-align","top").style("width","800px")}}}}for(const n of t.tracks){n.g=t.glider.append("g").attr("transform","translate(0,0)");n.errg=n.g.append("g");n.immobileg=n.g.append("g").attr("transform","translate(0,0)");n.tktip=t.tktip;n.tklabel=n.immobileg.append("text").attr("font-size",t.axisfontsize).attr("font-family",r).attr("text-anchor","end").attr("dominant-baseline","central").attr("x",a.tkleftlabel_xshift).attr("y",0).text(n.name).on("mousedown",(e=>{e.stopPropagation();e.preventDefault();S(n,t,e.clientY)}));if(n.list_description){n.tklabel.on("mouseover",(e=>{n.tktip.clear().show(e.clientX,e.clientY);o(n.tktip.d,n.list_description).style("margin","")})).on("mouseout",(()=>n.tktip.hide()))}l.push(n.tklabel.node().getBBox().width);if(t.genevaluetklst){n.genevg=n.immobileg.append("g");n.gvtkattr=new Map;for(const e of t.genevaluetklst){const t={};t.gvtk_g_xshift=n.genevg.append("g");t.hline=t.gvtk_g_xshift.append("line").attr("stroke","#ccc").attr("stroke-dasharray","2,3").attr("shape-rendering","crispEdges");t.gvtk_g=t.gvtk_g_xshift.append("g");if(e.multivaluekey);else{t.bar=t.gvtk_g.append("rect").attr("width",1)}n.gvtkattr.set(e.name,t)}}if(n.type==e.bedj){n.img=n.g.append("image")}else if(n.type==e.bigwig){n.img=n.g.append("image");n.leftaxis=n.immobileg.append("g")}}t.leftLabelMaxwidth=Math.max(...l);a.setllabel()}async function _(i,l){if(i.uninitiated){x(i,l);delete i.uninitiated}l.tkcloakon(i);const o=[];for(const s of i.tracks){s.height=20;s.errg.selectAll("*").remove();if(s.type==e.bedj){const e=l.tkarg_bedj(s);if(i.categories){e.categories=i.categories}const a=t("tkbedj",{method:"POST",body:JSON.stringify(e)}).then((e=>{if(e.error)throw e.error;s.height=s.toppad+e.height+s.bottompad;s.img.attr("width",l.width).attr("height",e.height).attr("xlink:href",e.src);if(l.pannedpx!=undefined){s.img.attr("x",l.pannedpx*-1)}l.bedj_tooltip(s,e)})).catch((e=>C(s,e.message||e)));o.push(a)}else if(s.type==e.bigwig){const e=l.tkarg_q(s);const i=t("tkbigwig",{method:"POST",body:JSON.stringify(e)}).then((e=>{if(e.error)throw e.error;s.height=s.toppad+s.barheight+s.bottompad;s.img.attr("width",l.width).attr("height",s.barheight).attr("xlink:href",e.src);if(l.pannedpx!=undefined){s.img.attr("x",l.pannedpx*-1)}if(e.minv!=undefined){s.scale.min=e.minv}if(e.maxv!=undefined){s.scale.max=e.maxv}s.leftaxis.selectAll("*").remove();if(e.nodata);else{const e=a().domain([s.scale.min,s.scale.max]).range([s.barheight,0]);n({axis:s.leftaxis.call(k().scale(e).tickValues([s.scale.min,s.scale.max])),color:"black",showline:true})}})).catch((e=>C(s,e.message||e)));o.push(i)}}if(i.genevaluetklst){i.sample2gvtk2gene.clear();i.geneset.clear();for(const e of i.genevaluetklst){const a=l.tkarg_bedj(e);a.getdata=1;const n=t("tkbedj",{method:"POST",body:JSON.stringify(a)}).then((t=>{if(t.error)throw t.error;if(t.items&&t.items.length>0){for(const a of t.items){if(!a.gene||!a.sample)continue;i.geneset.add(a.gene);if(!i.sample2gvtk2gene.has(a.sample)){i.sample2gvtk2gene.set(a.sample,new Map)}if(!i.sample2gvtk2gene.get(a.sample).has(e.name)){i.sample2gvtk2gene.get(a.sample).set(e.name,new Map)}if(e.multivaluekey){if(!i.sample2gvtk2gene.get(a.sample).get(e.name).has(a.gene)){i.sample2gvtk2gene.get(a.sample).get(e.name).set(a.gene,[])}i.sample2gvtk2gene.get(a.sample).get(e.name).get(a.gene).push({name:a[e.multivaluekey],value:a.value})}else{i.sample2gvtk2gene.get(a.sample).get(e.name).set(a.gene,a.value)}}}}));o.push(n)}}try{await Promise.all(o);j(i,l);l.tkcloakoff(i,{})}catch(e){if(e.stack)console.log(e.stack);l.tkcloakoff(i,{error:e.message||e})}for(const e of i.tracks){e.immobileg.attr("transform","translate(0,0)")}l.block_setheight()}function j(t,a){t.height_main=0;for(const a of t.tracks){a.y=t.height_main;a.g.transition().attr("transform","translate(0,"+a.y+")");if(a.type==e.bedj){a.img.attr("x",0);a.tklabel.attr("y",(a.height-a.toppad-a.bottompad)/2)}else if(a.type==e.bigwig){a.img.attr("x",0);a.tklabel.attr("y",a.barheight/2)}t.height_main+=a.height}t.height_main+=t.toppad+t.bottompad;if(t.genevaluetklst){if(t.geneset.size>0){const e=[...t.geneset][0];z(t,a,e)}else{for(const e of t.genevaluetklst){e.label.text("")}for(const e of t.tracks){for(const t of e.gvtkattr.values()){t.hline.transition().attr("x2",0);if(t.bar){t.bar.transition().attr("width",0)}else{t.gvtk_g.selectAll("*").remove()}}}for(const e of t.genevaluetklst){e.axisg.selectAll("*").remove()}}}}function z(e,t,r){e.__usegene=r;let g=0;for(const c of e.genevaluetklst){let d=0;let p=0;const f=c.matchname||"name";let m;if(c.multivaluekey){c.runtimekey2color_genespecific=new Map;m=i(l)}for(const t of e.tracks){t.gvtkattr.get(c.name).value=undefined;const a=t[f];if(!e.sample2gvtk2gene.has(a)){continue}if(!e.sample2gvtk2gene.get(a).has(c.name)){continue}const n=e.sample2gvtk2gene.get(a).get(c.name).get(r);if(n==undefined)continue;t.gvtkattr.get(c.name).value=n;if(c.multivaluekey){for(const e of n){if(!e.name){continue}if(!c.runtimekey2color_genespecific.has(e.name)){c.runtimekey2color_genespecific.set(e.name,m(e.name))}p=Math.max(p,e.value)}}else{p=Math.max(p,n)}}for(const a of e.tracks){a.genevg.attr("transform","translate("+(t.width+t.rpad)+",0)");const n=a.gvtkattr.get(c.name);const i=(a.height-a.toppad-a.bottompad)/2;n.gvtk_g_xshift.transition().attr("transform","translate("+g+",0)");n.hline.transition().attr("y1",i).attr("y2",i).attr("x2",n.value==undefined?0:c.barwidth);if(c.multivaluekey){n.gvtk_g.selectAll("*").remove();if(n.value){const t=Math.min(8,i);let l=n.value;if(c.legend.gene2hiddenkeys.has(e.__usegene)){l=n.value.filter((t=>!c.legend.gene2hiddenkeys.get(e.__usegene).has(t.name)))}n.dotg=n.gvtk_g.selectAll().data(l).enter().append("g").attr("transform",(e=>"translate("+c.barwidth*e.value/p+","+i+")"));n.dotg.append("circle").attr("r",t).attr("fill",(e=>c.runtimekey2color_genespecific.get(e.name))).attr("fill-opacity",.2).attr("stroke",(e=>c.runtimekey2color_genespecific.get(e.name))).on("mouseover",((t,n)=>{const i=n.name;for(const t of e.tracks){const e=t.gvtkattr.get(c.name);if(!e.dotg)continue;e.dotg.filter((e=>e.name==i)).select("circle").attr("fill-opacity",1)}const l=t.target.getBoundingClientRect();e.tktip.clear().show(l.left,l.top);const s=[{k:"sample",v:a.name},{k:c.multivaluekey,v:n.name},{k:"value",v:n.value}];setTimeout(o(e.tktip.d,s),500)})).on("mouseout",((t,a)=>{const n=a.name;for(const t of e.tracks){const e=t.gvtkattr.get(c.name);if(!e.dotg)continue;e.dotg.filter((e=>e.name==n)).select("circle").attr("fill-opacity",.2)}e.tktip.hide()}))}}else{if(!Number.isFinite(n.value)||n.value==0){n.bar.transition().attr("width",0)}else{n.bar.attr("fill",c.barcolor).attr("height",a.height-a.toppad-a.bottompad).transition().attr("width",Math.max(1,c.barwidth*n.value/p))}}}if(e.genevaluetklst.length>1){c.label.transition().attr("x",g+c.barwidth/2)}c.label.text(r+" "+c.name);{const e=u().ticks(3).scale(a().domain([d,p]).range([0,c.barwidth]));if(c.axistickformat){e.tickFormat(s(c.axistickformat))}n({axis:c.axisg.transition().attr("transform","translate("+g+","+w+")").call(e),color:"black",showline:true})}g+=c.barwidth+b}if(e.geneset.size==1){e.changegenelabel.text("")}else{e.changegenelabel.text("CHANGE GENE");if(e.genevaluetklst.length==1){const a=e.genevaluetklst[0].label.node().getBBox().width;e.changegenelabel.attr("x",-t.rpad-a-10)}}E(e,t)}function E(e,t){if(!e.genevaluetklst||!e.tr_legend)return;for(const a of e.genevaluetklst){if(a.runtimekey2color_genespecific){a.legend.label_genespecific.text(e.__usegene+" "+a.name+" "+a.multivaluekey);a.legend.contentdiv.selectAll("*").remove();const n=[];for(const[e,t]of a.runtimekey2color_genespecific.entries()){n.push({name:e,color:t})}if(a.sitekeytrickysort){n.sort(((e,t)=>Number.parseInt(e.name.substr(1))-Number.parseInt(t.name.substr(1))))}for(const{name:i,color:l}of n){const n=a.legend.contentdiv.append("div").style("display","inline-block").attr("class","sja_clb").on("click",(()=>{e.legendtip.clear().showunder(n.node());if(a.legend.gene2hiddenkeys.has(e.__usegene)&&a.legend.gene2hiddenkeys.get(e.__usegene).has(i)){e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show").on("click",(()=>{e.legendtip.hide();a.legend.gene2hiddenkeys.get(e.__usegene).delete(i);z(e,t,e.__usegene)}))}else{e.legendtip.d.append("div").attr("class","sja_menuoption").text("Hide").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))a.legend.gene2hiddenkeys.set(e.__usegene,new Set);a.legend.gene2hiddenkeys.get(e.__usegene).add(i);z(e,t,e.__usegene)}))}e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show only").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))a.legend.gene2hiddenkeys.set(e.__usegene,new Set);a.legend.gene2hiddenkeys.get(e.__usegene).clear();for(const t of a.runtimekey2color_genespecific.keys()){if(t!=i)a.legend.gene2hiddenkeys.get(e.__usegene).add(t)}z(e,t,e.__usegene)}));e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show all").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))return;a.legend.gene2hiddenkeys.get(e.__usegene).clear();z(e,t,e.__usegene)}))}));if(a.legend.gene2hiddenkeys.has(e.__usegene)&&a.legend.gene2hiddenkeys.get(e.__usegene).has(i)){n.append("span").style("color","#858585").style("text-decoration","line-through").text(i)}else{n.append("span").attr("class","sja_mcdot").style("background-color",l).style("margin-left","3px").html("&nbsp;&nbsp;");n.append("span").text(i)}}}}}function N(e,t,a){t.tkconfigtip.clear().showunder(e.node());const n=Math.random().toString();for(const e of t.geneset){const i=t.tkconfigtip.d.append("div").style("padding-bottom","3px");const l=Math.random().toString();const o=i.append("input").attr("type","radio").attr("id",l).attr("name",n).on("change",(()=>{z(t,a,e)}));if(e==t.__usegene){o.attr("checked",1)}i.append("label").attr("for",l).html("&nbsp;"+e)}}function S(e,t,a){const n=d(document.body);n.on("mousemove",(n=>{const i=n.clientY-a;e.g.attr("transform","translate(0,"+(e.y+i)+")");let l=0;for(let a=0;a<t.tracks.length;a++){if(t.tracks[a].name==e.name){l=a;break}}if(i<0&&l>0){let o=l-1,s=t.tracks[o];while(s.hidden){o--;if(o<0){return}s=t.tracks[o]}if(!s){return}if(-i>=s.height){t.tracks[o]=e;t.tracks[l]=s;e.y=s.y;s.y+=e.height;s.g.transition().attr("transform","translate(0,"+s.y+")");a=n.clientY}}else if(i>0&&l<t.tracks.length-1){let o=l+1,s=t.tracks[o];while(s.hidden){o++;if(o>=t.tracks.length){return}s=t.tracks[o]}if(!s){return}if(i>=s.height){t.tracks[o]=e;t.tracks[l]=s;s.y=e.y;e.y+=s.height;s.g.transition().attr("transform","translate(0,"+s.y+")");a=n.clientY}}}));n.on("mouseup",(()=>{e.g.transition().attr("transform","translate(0,"+e.y+")");n.on("mousemove",null).on("mouseup",null)}))}function M(t,a){t.tkconfigtip.clear().showunder(t.config_handle.node());const n=t.tkconfigtip.d;{const i=t.tracks.find((t=>t.type==e.bigwig));if(i){n.append("div").append("div").style("margin-bottom","15px").style("display","inline-block").attr("class","sja_menuoption").text("Common settings for all bigWig member tracks").on("click",(()=>{O(t,a)}))}}B(n,t,a);F(n,t,a);n.append("div").style("margin-top","5px").style("color","#858585").text("To reorder member tracks, drag on track name on the left of track display.")}function A(e,t){e.rightheadw_tk=30;if(e.genevaluetklst){for(const t of e.genevaluetklst){e.rightheadw_tk+=t.barwidth}e.rightheadw_tk+=b*(e.genevaluetklst.length-1)}t.rightheadw=0;for(const e of t.tklst){t.rightheadw=Math.max(t.rightheadw,e.rightheadw_tk)}t.blocksetw()}function O(t,a){t.tkconfigtip.clear();const n={scale:{auto:1},normalize:{disable:1}};if(t.bigwigsetting){for(const e in t.bigwigsetting){n[e]=t.bigwigsetting[e]}if(t.bigwigsetting.scale){delete n.scale.auto;for(const e in t.bigwigsetting.scale)n.scale[e]=t.bigwigsetting.scale[e]}}{const a=t.tracks.find((t=>t.type==e.bigwig));if(!n.pcolor)n.pcolor=a.pcolor;if(!n.pcolor2)n.pcolor2=a.pcolor2;if(!n.ncolor)n.ncolor=a.ncolor;if(!n.ncolor2)n.ncolor2=a.ncolor2;if(!n.barheight)n.barheight=a.barheight}h(n,a,t.tkconfigtip.d,(i=>{if(!t.bigwigsetting)t.bigwigsetting={};if(!t.bigwigsetting.scale)t.bigwigsetting.scale={};switch(i){case p.height:t.bigwigsetting.barheight=n.barheight;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.barheight=n.barheight}));break;case p.pcolor:t.bigwigsetting.pcolor=n.pcolor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.pcolor=n.pcolor}));break;case p.ncolor:t.bigwigsetting.ncolor=n.ncolor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.ncolor=n.ncolor}));break;case p.pcolor2:t.bigwigsetting.pcolor2=n.pcolor2;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.pcolor2=n.pcolor2}));break;case p.ncolor2:t.bigwigsetting.ncolor2=n.ncolor2;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.ncolor2=n.ncolor2}));break;case p.autoscale:t.bigwigsetting.scale.auto=1;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.scale.auto=1}));break;case p.fixedscale:delete t.bigwigsetting.scale.auto;t.bigwigsetting.scale.min=n.scale.min;t.bigwigsetting.scale.max=n.scale.max;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.scale.auto;t.scale.min=n.scale.min;t.scale.max=n.scale.max}}));break;case p.percentilescale:delete t.bigwigsetting.scale.auto;t.bigwigsetting.scale.percentile=n.scale.percentile;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.scale.auto;t.scale.percentile=n.scale.percentile}}));break;case p.nodotplot:delete t.bigwigsetting.dotplotfactor;t.tracks.forEach((t=>{if(t.type==e.bigwig)delete t.dotplotfactor}));break;case p.usedotplot:t.bigwigsetting.dotplotfactor=n.dotplotfactor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.dotplotfactor=n.dotplotfactor}));break;case p.usedividefactor:delete t.bigwigsetting.normalize.disable;t.bigwigsetting.normalize.dividefactor=n.normalize.dividefactor;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.normalize.disable;t.normalize.dividefactor=n.normalize.dividefactor}}));break;case p.nodividefactor:t.bigwigsetting.normalize.disable=1;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.normalize.disable=1}));break}_(t,a)}))}function B(t,a,n){const i=t.append("div").style("margin-bottom","10px");i.append("span").style("color","#858585").html("Set uniform height to all member tracks&nbsp;");let l=0;for(const t of a.tracks){switch(t.type){case e.bigwig:l=Math.max(l,t.barheight);break;case e.bedj:l=Math.max(l,t.stackheight);break}}i.append("input").attr("type","number").property("value",l).attr("min",5).style("width","80px").on("keyup",(t=>{if(t.code!="Enter")return;const i=Number.parseInt(t.target.value);for(const t of a.tracks){switch(t.type){case e.bigwig:t.barheight=i;break;case e.bedj:t.stackheight=i;break}}n.tk_load(a)}))}function F(t,a,n){t.append("div").style("margin-bottom","5px").style("color","#858585").text("Set height for each track:");let i=t;if(a.tracks.length>8){i=t.append("div").style("display","inline-block").style("height","200px").style("resize","vertical").style("overflow-y","scroll")}const l=i.append("table").style("margin-left","20px");for(const t of a.tracks){const i=l.append("tr");i.append("td").text(t.name).style("vertical-align","top");const o=i.append("td");let s;switch(t.type){case e.bigwig:s=t.barheight;break;case e.bedj:s=t.stackheight;break}o.append("input").attr("type","number").property("value",s).attr("min",5).style("width","80px").on("keyup",(i=>{if(i.code!="Enter")return;const l=Number.parseInt(i.target.value);switch(t.type){case e.bigwig:t.barheight=l;break;case e.bedj:t.stackheight=l;break}n.tk_load(a)}))}}function I(e,t,a){t.tkconfigtip.clear().showunder(e.label.node());{const a=t.tkconfigtip.d.append("div").style("margin-bottom","10px").style("color","#858585");a.append("span").text(e.name);a.append("span").html("&nbsp;CONFIG").style("font-size",".7em")}const n=t.tkconfigtip.d.append("table");{const i=n.append("tr");i.append("td").text("Max bar width");i.append("td").append("input").attr("type","number").property("value",e.barwidth).attr("min",50).style("width","50px").on("keyup",(n=>{if(n.code!="Enter"&&n.code!="NumpadEnter")return;const i=Number.parseInt(n.target.value);if(Number.isNaN(i)||i<50)return;e.barwidth=i;A(t,a);z(t,a,t.__usegene)}))}if(!e.multivaluekey){const i=n.append("tr");i.append("td").text("Bar color");i.append("td").append("input").attr("type","color").property("value",e.barcolor).on("change",(a=>{e.barcolor=a.target.value;if(e.multivaluekey);else{for(const a of t.tracks){a.gvtkattr.get(e.name).bar.attr("fill",e.barcolor)}}}));n.append("tr").append("td").attr("colspan",2).append("button").text("Sort samples").on("click",(()=>{t.tracks.sort(((t,a)=>{const n=t.gvtkattr.get(e.name).value;const i=a.gvtkattr.get(e.name).value;if(i==undefined){if(n==undefined)return 0;return-1}if(n==undefined)return 1;return i-n}));const n=t.__usegene;j(t,a);z(t,a,n);t.tkconfigtip.hide()}))}if(e.multivaluekey);}function C(e,t){e.errg.append("text").text(t).attr("font-size",12).attr("y",14)}export{_ as loadTk};
1
+ import{ad as e,b as t,I as a,ag as n,a8 as i,af as l,a9 as o,W as s,ah as r,M as g,aE as c,d,aB as p}from"./app-b369b169.js";import{l as f}from"./block.legend-d3f61ef7.js";import{b as m,a as h}from"./block-6aedd569.js";import{b as k,c as u}from"./axis-747c801e.js";import"./vcf-5cc55588.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";import"./legacy-d3-polyfill-bdb2d792.js";import"./checkbox-96437f4d.js";import"./pointer-c7475677.js";const b=13;const v="#668CFF";const y=150;const w=-2;function x(t,a){const n=t._template;delete t._template;if(!n.tracks)throw".tracks[] missing from "+t.name+" track";if(n.tracks.length==0)throw".tracks[] length 0 from "+t.name+" track";t.tracks=[];const i=new Set;for(const e of n.tracks){const a={};for(const t in e){a[t]=e[t]}if(!a.name)throw"no name for member track of "+t.name+": "+JSON.stringify(a);if(i.has(a.name))throw"duplicating member track name: "+a.name;i.add(a.name);if(!a.type)throw"no type for member track of "+t.name+": "+JSON.stringify(a);if(!a.file&&!a.url)throw'neither file or url given for member "'+a.name+'" of '+t.name;if(a.type=="bedj");else if(a.type=="bigwig"){m(a,e)}else{throw"invalid type of member track of "+t.name+": "+a.type}a.toppad=a.toppad==undefined?4:a.toppad;a.bottompad=a.bottompad==undefined?4:a.bottompad;a.y=0;t.tracks.push(a)}t.geneset=new Set;if(n.genevaluetrack){if(!n.genevaluetrack.file&&n.genevaluetrack.url)throw"no .file or .url for genevaluetrack";t.genevaluetrack={file:n.genevaluetrack.file,url:n.genevaluetrack.url}}if(n.genevaluetklst){if(!Array.isArray(n.genevaluetklst))throw".genevaluetklst should be an array";if(n.genevaluetklst.length==0)throw"zero length of .genevaluetklst";t.genevaluetklst=[];for(const e of n.genevaluetklst){if(!e.name)throw"name missing for one genevalue track";if(!e.file&&!e.url)throw"no file or url for genevalue track "+e.name;const a={};for(const t in e)a[t]=e[t];t.genevaluetklst.push(a)}}if(n.bigwigsetting){t.bigwigsetting={};if(n.bigwigsetting.scale){if(n.bigwigsetting.scale.max){if(!Number.isFinite(n.bigwigsetting.scale.max))throw"invalid max value in bigwigsetting.scale";if(!Number.isFinite(n.bigwigsetting.scale.min))throw"invalid or missing min value in bigwigsetting.scale";if(n.bigwigsetting.scale.max<=n.bigwigsetting.scale.min)throw"max <= min in bigwigsetting.scale";t.bigwigsetting.scale={min:n.bigwigsetting.scale.min,max:n.bigwigsetting.scale.max}}}for(const e of t.tracks){if(e.type!="bigwig")continue;if(t.bigwigsetting.scale){if(t.bigwigsetting.scale.max!=undefined){delete e.scale.auto;e.scale={min:t.bigwigsetting.scale.min,max:t.bigwigsetting.scale.max}}else if(t.bigwigsetting.scale.percentile){delete e.scale.auto;e.scale.percentile=t.bigwigsetting.scale.percentile}}if(t.bigwigsetting.pcolor)e.pcolor=t.bigwigsetting.pcolor;if(t.bigwigsetting.ncolor)e.ncolor=t.bigwigsetting.ncolor;if(t.bigwigsetting.pcolor2)e.pcolor=t.bigwigsetting.pcolor2;if(t.bigwigsetting.ncolor2)e.ncolor=t.bigwigsetting.ncolor2}}if(t.genevaluetrack){const e=t.genevaluetrack;delete t.genevaluetrack;e.name=t.genevaluetype;delete t.genevaluetype;if(t.genevaluematchname){e.matchname=t.genevaluematchname;delete t.genevaluematchname}if(t.genebarcolor){e.barcolor=t.genebarcolor;delete t.genebarcolor}if(t.genebarwidth){e.barwidth=t.genebarwidth;delete t.genebarwidth}if(!t.genevaluetklst){t.genevaluetklst=[]}t.genevaluetklst.push(e)}if(t.genevaluetklst){for(const e of t.genevaluetklst){e.axisg=t.gright.append("g");e.label=t.gright.append("text").attr("font-size",t.axisfontsize+2).attr("font-family",r).attr("class","sja_clbtext").on("click",(()=>{I(e,t,a)}));if(!e.barcolor)e.barcolor=v;if(!e.barwidth)e.barwidth=y}t.toppad=t.genevaluetklst.length==1?20:40;if(t.genevaluetklst.length==1){t.genevaluetklst[0].label.attr("text-anchor","end").attr("x",-a.rpad).attr("y",w)}else{for(const e of t.genevaluetklst){e.label.attr("y",t.axisfontsize+2-t.toppad).attr("text-anchor","middle")}}t.sample2gvtk2gene=new Map;t.genelsttip=new g({padding:"5px"});A(t,a);t.config_handle=a.maketklefthandle(t,-a.labelfontsize+w).text("CONFIG").attr("fill","#858585").attr("x",5).attr("text-anchor","begin");t.changegenelabel=t.gright.append("text").attr("text-anchor","end").attr("font-size",t.axisfontsize).attr("font-family",r).attr("x",-a.rpad).attr("y",w).attr("class","sja_clbtext").on("click",(()=>{N(t.changegenelabel,t,a)}));if(t.genevaluematchname){for(const e of t.genevaluetklst){if(!e.matchname)e.matchname=t.genevaluematchname}delete t.genevaluematchname}}else{t.toppad=20;t.config_handle=a.maketkconfighandle(t).attr("y",-5)}t.config_handle.on("click",(()=>{M(t,a)}));const l=[t.tklabel.attr("y",-10).node().getBBox().width];if(a.legend&&a.legend.holder){let e=false;if(t.legendimg&&t.legendimg.file){e=true}else if(t.categories){e=true}else if(t.genevaluetklst){e=t.genevaluetklst.find((e=>e.multivaluekey))}if(e){const[e,n]=f(a,t.name);t.tr_legend=e;t.td_legend=n;t.legendtip=new g({padding:""})}if(t.legendimg&&t.legendimg.file){a.make_legend_img(t.legendimg,t.td_legend)}else if(t.categories){c(t.categories,t.td_legend)}if(t.genevaluetklst){for(const e of t.genevaluetklst){if(e.multivaluekey){e.legend={div:t.td_legend.append("div"),gene2hiddenkeys:new Map};e.legend.label_genespecific=e.legend.div.append("div").style("display","inline-block").style("margin","5px 10px 10px 0px").style("color","#858585").style("vertical-align","top");e.legend.contentdiv=e.legend.div.append("div").style("display","inline-block").style("margin","0px 10px 10px 0px").style("vertical-align","top").style("width","800px")}}}}for(const n of t.tracks){n.g=t.glider.append("g").attr("transform","translate(0,0)");n.errg=n.g.append("g");n.immobileg=n.g.append("g").attr("transform","translate(0,0)");n.tktip=t.tktip;n.tklabel=n.immobileg.append("text").attr("font-size",t.axisfontsize).attr("font-family",r).attr("text-anchor","end").attr("dominant-baseline","central").attr("x",a.tkleftlabel_xshift).attr("y",0).text(n.name).on("mousedown",(e=>{e.stopPropagation();e.preventDefault();S(n,t,e.clientY)}));if(n.list_description){n.tklabel.on("mouseover",(e=>{n.tktip.clear().show(e.clientX,e.clientY);o(n.tktip.d,n.list_description).style("margin","")})).on("mouseout",(()=>n.tktip.hide()))}l.push(n.tklabel.node().getBBox().width);if(t.genevaluetklst){n.genevg=n.immobileg.append("g");n.gvtkattr=new Map;for(const e of t.genevaluetklst){const t={};t.gvtk_g_xshift=n.genevg.append("g");t.hline=t.gvtk_g_xshift.append("line").attr("stroke","#ccc").attr("stroke-dasharray","2,3").attr("shape-rendering","crispEdges");t.gvtk_g=t.gvtk_g_xshift.append("g");if(e.multivaluekey);else{t.bar=t.gvtk_g.append("rect").attr("width",1)}n.gvtkattr.set(e.name,t)}}if(n.type==e.bedj){n.img=n.g.append("image")}else if(n.type==e.bigwig){n.img=n.g.append("image");n.leftaxis=n.immobileg.append("g")}}t.leftLabelMaxwidth=Math.max(...l);a.setllabel()}async function _(i,l){if(i.uninitiated){x(i,l);delete i.uninitiated}l.tkcloakon(i);const o=[];for(const s of i.tracks){s.height=20;s.errg.selectAll("*").remove();if(s.type==e.bedj){const e=l.tkarg_bedj(s);if(i.categories){e.categories=i.categories}const a=t("tkbedj",{method:"POST",body:JSON.stringify(e)}).then((e=>{if(e.error)throw e.error;s.height=s.toppad+e.height+s.bottompad;s.img.attr("width",l.width).attr("height",e.height).attr("xlink:href",e.src);if(l.pannedpx!=undefined){s.img.attr("x",l.pannedpx*-1)}l.bedj_tooltip(s,e)})).catch((e=>C(s,e.message||e)));o.push(a)}else if(s.type==e.bigwig){const e=l.tkarg_q(s);const i=t("tkbigwig",{method:"POST",body:JSON.stringify(e)}).then((e=>{if(e.error)throw e.error;s.height=s.toppad+s.barheight+s.bottompad;s.img.attr("width",l.width).attr("height",s.barheight).attr("xlink:href",e.src);if(l.pannedpx!=undefined){s.img.attr("x",l.pannedpx*-1)}if(e.minv!=undefined){s.scale.min=e.minv}if(e.maxv!=undefined){s.scale.max=e.maxv}s.leftaxis.selectAll("*").remove();if(e.nodata);else{const e=a().domain([s.scale.min,s.scale.max]).range([s.barheight,0]);n({axis:s.leftaxis.call(k().scale(e).tickValues([s.scale.min,s.scale.max])),color:"black",showline:true})}})).catch((e=>C(s,e.message||e)));o.push(i)}}if(i.genevaluetklst){i.sample2gvtk2gene.clear();i.geneset.clear();for(const e of i.genevaluetklst){const a=l.tkarg_bedj(e);a.getdata=1;const n=t("tkbedj",{method:"POST",body:JSON.stringify(a)}).then((t=>{if(t.error)throw t.error;if(t.items&&t.items.length>0){for(const a of t.items){if(!a.gene||!a.sample)continue;i.geneset.add(a.gene);if(!i.sample2gvtk2gene.has(a.sample)){i.sample2gvtk2gene.set(a.sample,new Map)}if(!i.sample2gvtk2gene.get(a.sample).has(e.name)){i.sample2gvtk2gene.get(a.sample).set(e.name,new Map)}if(e.multivaluekey){if(!i.sample2gvtk2gene.get(a.sample).get(e.name).has(a.gene)){i.sample2gvtk2gene.get(a.sample).get(e.name).set(a.gene,[])}i.sample2gvtk2gene.get(a.sample).get(e.name).get(a.gene).push({name:a[e.multivaluekey],value:a.value})}else{i.sample2gvtk2gene.get(a.sample).get(e.name).set(a.gene,a.value)}}}}));o.push(n)}}try{await Promise.all(o);j(i,l);l.tkcloakoff(i,{})}catch(e){if(e.stack)console.log(e.stack);l.tkcloakoff(i,{error:e.message||e})}for(const e of i.tracks){e.immobileg.attr("transform","translate(0,0)")}l.block_setheight()}function j(t,a){t.height_main=0;for(const a of t.tracks){a.y=t.height_main;a.g.transition().attr("transform","translate(0,"+a.y+")");if(a.type==e.bedj){a.img.attr("x",0);a.tklabel.attr("y",(a.height-a.toppad-a.bottompad)/2)}else if(a.type==e.bigwig){a.img.attr("x",0);a.tklabel.attr("y",a.barheight/2)}t.height_main+=a.height}t.height_main+=t.toppad+t.bottompad;if(t.genevaluetklst){if(t.geneset.size>0){const e=[...t.geneset][0];z(t,a,e)}else{for(const e of t.genevaluetklst){e.label.text("")}for(const e of t.tracks){for(const t of e.gvtkattr.values()){t.hline.transition().attr("x2",0);if(t.bar){t.bar.transition().attr("width",0)}else{t.gvtk_g.selectAll("*").remove()}}}for(const e of t.genevaluetklst){e.axisg.selectAll("*").remove()}}}}function z(e,t,r){e.__usegene=r;let g=0;for(const c of e.genevaluetklst){let d=0;let p=0;const f=c.matchname||"name";let m;if(c.multivaluekey){c.runtimekey2color_genespecific=new Map;m=i(l)}for(const t of e.tracks){t.gvtkattr.get(c.name).value=undefined;const a=t[f];if(!e.sample2gvtk2gene.has(a)){continue}if(!e.sample2gvtk2gene.get(a).has(c.name)){continue}const n=e.sample2gvtk2gene.get(a).get(c.name).get(r);if(n==undefined)continue;t.gvtkattr.get(c.name).value=n;if(c.multivaluekey){for(const e of n){if(!e.name){continue}if(!c.runtimekey2color_genespecific.has(e.name)){c.runtimekey2color_genespecific.set(e.name,m(e.name))}p=Math.max(p,e.value)}}else{p=Math.max(p,n)}}for(const a of e.tracks){a.genevg.attr("transform","translate("+(t.width+t.rpad)+",0)");const n=a.gvtkattr.get(c.name);const i=(a.height-a.toppad-a.bottompad)/2;n.gvtk_g_xshift.transition().attr("transform","translate("+g+",0)");n.hline.transition().attr("y1",i).attr("y2",i).attr("x2",n.value==undefined?0:c.barwidth);if(c.multivaluekey){n.gvtk_g.selectAll("*").remove();if(n.value){const t=Math.min(8,i);let l=n.value;if(c.legend.gene2hiddenkeys.has(e.__usegene)){l=n.value.filter((t=>!c.legend.gene2hiddenkeys.get(e.__usegene).has(t.name)))}n.dotg=n.gvtk_g.selectAll().data(l).enter().append("g").attr("transform",(e=>"translate("+c.barwidth*e.value/p+","+i+")"));n.dotg.append("circle").attr("r",t).attr("fill",(e=>c.runtimekey2color_genespecific.get(e.name))).attr("fill-opacity",.2).attr("stroke",(e=>c.runtimekey2color_genespecific.get(e.name))).on("mouseover",((t,n)=>{const i=n.name;for(const t of e.tracks){const e=t.gvtkattr.get(c.name);if(!e.dotg)continue;e.dotg.filter((e=>e.name==i)).select("circle").attr("fill-opacity",1)}const l=t.target.getBoundingClientRect();e.tktip.clear().show(l.left,l.top);const s=[{k:"sample",v:a.name},{k:c.multivaluekey,v:n.name},{k:"value",v:n.value}];setTimeout(o(e.tktip.d,s),500)})).on("mouseout",((t,a)=>{const n=a.name;for(const t of e.tracks){const e=t.gvtkattr.get(c.name);if(!e.dotg)continue;e.dotg.filter((e=>e.name==n)).select("circle").attr("fill-opacity",.2)}e.tktip.hide()}))}}else{if(!Number.isFinite(n.value)||n.value==0){n.bar.transition().attr("width",0)}else{n.bar.attr("fill",c.barcolor).attr("height",a.height-a.toppad-a.bottompad).transition().attr("width",Math.max(1,c.barwidth*n.value/p))}}}if(e.genevaluetklst.length>1){c.label.transition().attr("x",g+c.barwidth/2)}c.label.text(r+" "+c.name);{const e=u().ticks(3).scale(a().domain([d,p]).range([0,c.barwidth]));if(c.axistickformat){e.tickFormat(s(c.axistickformat))}n({axis:c.axisg.transition().attr("transform","translate("+g+","+w+")").call(e),color:"black",showline:true})}g+=c.barwidth+b}if(e.geneset.size==1){e.changegenelabel.text("")}else{e.changegenelabel.text("CHANGE GENE");if(e.genevaluetklst.length==1){const a=e.genevaluetklst[0].label.node().getBBox().width;e.changegenelabel.attr("x",-t.rpad-a-10)}}E(e,t)}function E(e,t){if(!e.genevaluetklst||!e.tr_legend)return;for(const a of e.genevaluetklst){if(a.runtimekey2color_genespecific){a.legend.label_genespecific.text(e.__usegene+" "+a.name+" "+a.multivaluekey);a.legend.contentdiv.selectAll("*").remove();const n=[];for(const[e,t]of a.runtimekey2color_genespecific.entries()){n.push({name:e,color:t})}if(a.sitekeytrickysort){n.sort(((e,t)=>Number.parseInt(e.name.substr(1))-Number.parseInt(t.name.substr(1))))}for(const{name:i,color:l}of n){const n=a.legend.contentdiv.append("div").style("display","inline-block").attr("class","sja_clb").on("click",(()=>{e.legendtip.clear().showunder(n.node());if(a.legend.gene2hiddenkeys.has(e.__usegene)&&a.legend.gene2hiddenkeys.get(e.__usegene).has(i)){e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show").on("click",(()=>{e.legendtip.hide();a.legend.gene2hiddenkeys.get(e.__usegene).delete(i);z(e,t,e.__usegene)}))}else{e.legendtip.d.append("div").attr("class","sja_menuoption").text("Hide").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))a.legend.gene2hiddenkeys.set(e.__usegene,new Set);a.legend.gene2hiddenkeys.get(e.__usegene).add(i);z(e,t,e.__usegene)}))}e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show only").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))a.legend.gene2hiddenkeys.set(e.__usegene,new Set);a.legend.gene2hiddenkeys.get(e.__usegene).clear();for(const t of a.runtimekey2color_genespecific.keys()){if(t!=i)a.legend.gene2hiddenkeys.get(e.__usegene).add(t)}z(e,t,e.__usegene)}));e.legendtip.d.append("div").attr("class","sja_menuoption").text("Show all").on("click",(()=>{e.legendtip.hide();if(!a.legend.gene2hiddenkeys.has(e.__usegene))return;a.legend.gene2hiddenkeys.get(e.__usegene).clear();z(e,t,e.__usegene)}))}));if(a.legend.gene2hiddenkeys.has(e.__usegene)&&a.legend.gene2hiddenkeys.get(e.__usegene).has(i)){n.append("span").style("color","#858585").style("text-decoration","line-through").text(i)}else{n.append("span").attr("class","sja_mcdot").style("background-color",l).style("margin-left","3px").html("&nbsp;&nbsp;");n.append("span").text(i)}}}}}function N(e,t,a){t.tkconfigtip.clear().showunder(e.node());const n=Math.random().toString();for(const e of t.geneset){const i=t.tkconfigtip.d.append("div").style("padding-bottom","3px");const l=Math.random().toString();const o=i.append("input").attr("type","radio").attr("id",l).attr("name",n).on("change",(()=>{z(t,a,e)}));if(e==t.__usegene){o.attr("checked",1)}i.append("label").attr("for",l).html("&nbsp;"+e)}}function S(e,t,a){const n=d(document.body);n.on("mousemove",(n=>{const i=n.clientY-a;e.g.attr("transform","translate(0,"+(e.y+i)+")");let l=0;for(let a=0;a<t.tracks.length;a++){if(t.tracks[a].name==e.name){l=a;break}}if(i<0&&l>0){let o=l-1,s=t.tracks[o];while(s.hidden){o--;if(o<0){return}s=t.tracks[o]}if(!s){return}if(-i>=s.height){t.tracks[o]=e;t.tracks[l]=s;e.y=s.y;s.y+=e.height;s.g.transition().attr("transform","translate(0,"+s.y+")");a=n.clientY}}else if(i>0&&l<t.tracks.length-1){let o=l+1,s=t.tracks[o];while(s.hidden){o++;if(o>=t.tracks.length){return}s=t.tracks[o]}if(!s){return}if(i>=s.height){t.tracks[o]=e;t.tracks[l]=s;s.y=e.y;e.y+=s.height;s.g.transition().attr("transform","translate(0,"+s.y+")");a=n.clientY}}}));n.on("mouseup",(()=>{e.g.transition().attr("transform","translate(0,"+e.y+")");n.on("mousemove",null).on("mouseup",null)}))}function M(t,a){t.tkconfigtip.clear().showunder(t.config_handle.node());const n=t.tkconfigtip.d;{const i=t.tracks.find((t=>t.type==e.bigwig));if(i){n.append("div").append("div").style("margin-bottom","15px").style("display","inline-block").attr("class","sja_menuoption").text("Common settings for all bigWig member tracks").on("click",(()=>{O(t,a)}))}}B(n,t,a);F(n,t,a);n.append("div").style("margin-top","5px").style("color","#858585").text("To reorder member tracks, drag on track name on the left of track display.")}function A(e,t){e.rightheadw_tk=30;if(e.genevaluetklst){for(const t of e.genevaluetklst){e.rightheadw_tk+=t.barwidth}e.rightheadw_tk+=b*(e.genevaluetklst.length-1)}t.rightheadw=0;for(const e of t.tklst){t.rightheadw=Math.max(t.rightheadw,e.rightheadw_tk)}t.blocksetw()}function O(t,a){t.tkconfigtip.clear();const n={scale:{auto:1},normalize:{disable:1}};if(t.bigwigsetting){for(const e in t.bigwigsetting){n[e]=t.bigwigsetting[e]}if(t.bigwigsetting.scale){delete n.scale.auto;for(const e in t.bigwigsetting.scale)n.scale[e]=t.bigwigsetting.scale[e]}}{const a=t.tracks.find((t=>t.type==e.bigwig));if(!n.pcolor)n.pcolor=a.pcolor;if(!n.pcolor2)n.pcolor2=a.pcolor2;if(!n.ncolor)n.ncolor=a.ncolor;if(!n.ncolor2)n.ncolor2=a.ncolor2;if(!n.barheight)n.barheight=a.barheight}h(n,a,t.tkconfigtip.d,(i=>{if(!t.bigwigsetting)t.bigwigsetting={};if(!t.bigwigsetting.scale)t.bigwigsetting.scale={};switch(i){case p.height:t.bigwigsetting.barheight=n.barheight;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.barheight=n.barheight}));break;case p.pcolor:t.bigwigsetting.pcolor=n.pcolor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.pcolor=n.pcolor}));break;case p.ncolor:t.bigwigsetting.ncolor=n.ncolor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.ncolor=n.ncolor}));break;case p.pcolor2:t.bigwigsetting.pcolor2=n.pcolor2;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.pcolor2=n.pcolor2}));break;case p.ncolor2:t.bigwigsetting.ncolor2=n.ncolor2;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.ncolor2=n.ncolor2}));break;case p.autoscale:t.bigwigsetting.scale.auto=1;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.scale.auto=1}));break;case p.fixedscale:delete t.bigwigsetting.scale.auto;t.bigwigsetting.scale.min=n.scale.min;t.bigwigsetting.scale.max=n.scale.max;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.scale.auto;t.scale.min=n.scale.min;t.scale.max=n.scale.max}}));break;case p.percentilescale:delete t.bigwigsetting.scale.auto;t.bigwigsetting.scale.percentile=n.scale.percentile;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.scale.auto;t.scale.percentile=n.scale.percentile}}));break;case p.nodotplot:delete t.bigwigsetting.dotplotfactor;t.tracks.forEach((t=>{if(t.type==e.bigwig)delete t.dotplotfactor}));break;case p.usedotplot:t.bigwigsetting.dotplotfactor=n.dotplotfactor;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.dotplotfactor=n.dotplotfactor}));break;case p.usedividefactor:delete t.bigwigsetting.normalize.disable;t.bigwigsetting.normalize.dividefactor=n.normalize.dividefactor;t.tracks.forEach((t=>{if(t.type==e.bigwig){delete t.normalize.disable;t.normalize.dividefactor=n.normalize.dividefactor}}));break;case p.nodividefactor:t.bigwigsetting.normalize.disable=1;t.tracks.forEach((t=>{if(t.type==e.bigwig)t.normalize.disable=1}));break}_(t,a)}))}function B(t,a,n){const i=t.append("div").style("margin-bottom","10px");i.append("span").style("color","#858585").html("Set uniform height to all member tracks&nbsp;");let l=0;for(const t of a.tracks){switch(t.type){case e.bigwig:l=Math.max(l,t.barheight);break;case e.bedj:l=Math.max(l,t.stackheight);break}}i.append("input").attr("type","number").property("value",l).attr("min",5).style("width","80px").on("keyup",(t=>{if(t.code!="Enter")return;const i=Number.parseInt(t.target.value);for(const t of a.tracks){switch(t.type){case e.bigwig:t.barheight=i;break;case e.bedj:t.stackheight=i;break}}n.tk_load(a)}))}function F(t,a,n){t.append("div").style("margin-bottom","5px").style("color","#858585").text("Set height for each track:");let i=t;if(a.tracks.length>8){i=t.append("div").style("display","inline-block").style("height","200px").style("resize","vertical").style("overflow-y","scroll")}const l=i.append("table").style("margin-left","20px");for(const t of a.tracks){const i=l.append("tr");i.append("td").text(t.name).style("vertical-align","top");const o=i.append("td");let s;switch(t.type){case e.bigwig:s=t.barheight;break;case e.bedj:s=t.stackheight;break}o.append("input").attr("type","number").property("value",s).attr("min",5).style("width","80px").on("keyup",(i=>{if(i.code!="Enter")return;const l=Number.parseInt(i.target.value);switch(t.type){case e.bigwig:t.barheight=l;break;case e.bedj:t.stackheight=l;break}n.tk_load(a)}))}}function I(e,t,a){t.tkconfigtip.clear().showunder(e.label.node());{const a=t.tkconfigtip.d.append("div").style("margin-bottom","10px").style("color","#858585");a.append("span").text(e.name);a.append("span").html("&nbsp;CONFIG").style("font-size",".7em")}const n=t.tkconfigtip.d.append("table");{const i=n.append("tr");i.append("td").text("Max bar width");i.append("td").append("input").attr("type","number").property("value",e.barwidth).attr("min",50).style("width","50px").on("keyup",(n=>{if(n.code!="Enter"&&n.code!="NumpadEnter")return;const i=Number.parseInt(n.target.value);if(Number.isNaN(i)||i<50)return;e.barwidth=i;A(t,a);z(t,a,t.__usegene)}))}if(!e.multivaluekey){const i=n.append("tr");i.append("td").text("Bar color");i.append("td").append("input").attr("type","color").property("value",e.barcolor).on("change",(a=>{e.barcolor=a.target.value;if(e.multivaluekey);else{for(const a of t.tracks){a.gvtkattr.get(e.name).bar.attr("fill",e.barcolor)}}}));n.append("tr").append("td").attr("colspan",2).append("button").text("Sort samples").on("click",(()=>{t.tracks.sort(((t,a)=>{const n=t.gvtkattr.get(e.name).value;const i=a.gvtkattr.get(e.name).value;if(i==undefined){if(n==undefined)return 0;return-1}if(n==undefined)return 1;return i-n}));const n=t.__usegene;j(t,a);z(t,a,n);t.tkconfigtip.hide()}))}if(e.multivaluekey);}function C(e,t){e.errg.append("text").text(t).attr("font-size",12).attr("y",14)}export{_ as loadTk};
@@ -0,0 +1 @@
1
+ import{h as t,U as e,I as o,W as a,ag as s,a8 as i,af as r,ah as n}from"./app-b369b169.js";import{controlsInit as l}from"./controls-287e6efa.js";import{s as p}from"./legacy-d3-polyfill-bdb2d792.js";import{b as d}from"./axis-747c801e.js";import"./controls.btns-79b805dd.js";import"./controls.config-28d6d6a8.js";import"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";class c{constructor(t){this.type="boxplot"}async init(){const t=this.opts.holder;const e=this.opts.controls?t:t.append("div");const o=e.append("svg").style("margin-right","20px").style("display","inline-block");this.dom={header:this.opts.header,controls:this.opts.controls?null:t.append("div"),div:e,svg:o,yaxis_g:o.append("g"),graph_g:o.append("g")};if(this.dom.header)this.dom.header.html("Boxplot");await this.setControls();h(this);m(this)}async setControls(){if(this.opts.controls){this.opts.controls.on("downloadClick.boxplot",this.download)}else{this.components={controls:await l({app:this.app,id:this.id,holder:this.dom.controls.attr("class","pp-termdb-plot-controls"),inputs:["term1","overlay","divideBy"]})};this.components.controls.on("downloadClick.boxplot",this.download)}}getState(t,e){const o=t.plots.find((t=>t.id===this.id));if(!o){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{activeCohort:t.activeCohort,termfilter:t.termfilter,config:{term:o.term,term2:o.term2,settings:{common:o.settings.common,boxplot:o.settings.boxplot}}}}async main(){try{this.config=structuredClone(this.state.config);const t=this.config.term2;if(!t||!t.termtype=="float"){this.dom.div.style("display","none");throw`${t?"numeric ":""}term2 is required for boxplot view`}if(this.dom.header)this.dom.header.html(this.config.term.term.name+" vs "+t.term.name);const e=this.getDataRequestOpts();this.data=await this.app.vocabApi.getNestedChartSeriesData(e);this.app.vocabApi.syncTermData(this.state.config,this.data);const[o,a]=this.processData(this.data);this.dom.div.style("display","block");this.render(o.filter((t=>t!=null)),a)}catch(t){throw t}}getDataRequestOpts(){const t=this.config;const e={term:t.term,filter:this.state.termfilter.filter};if(t.term2)e.term2=t.term2;if(t.term0)e.term0=t.term0;if(this.state.ssid)e.ssid=this.state.ssid;return e}processData(t){t.refs.rows;let e=0;const o=t.refs.cols.map((o=>{const a=t.charts[0].serieses.find((t=>t.seriesId==o));if(!a)return null;if(e<a.max)e=a.max;return{label:o,vvalue:o,value:a.total,boxplot:a.boxplot}}));return[o,e]}}function h(t){t.download=()=>{if(!t.state||!t.state.isVisible)return;const o=t.config.term.term.name+" boxplot";e(t.dom.svg.node(),o,{apply_dom_styles:true})}}function m(t){t.render=function(e,l){t.items=e;t.config.settings.boxplot.yscale_max=l;const c=t.config.settings.common;const h=t.config.settings.boxplot;const m=t.get_max_labelheight(h);const b=4;const f=t.items.length*(h.barwidth+h.barspace)+h.yaxis_width;const g=h.toppad+h.barheight+m+b;t.y_scale=o().domain([h.yscale_max,0]).range([0,h.barheight]);t.dom.svg.transition().attr("width",f).attr("height",g);t.dom.yaxis_g.attr("transform","translate("+(h.yaxis_width-2)+","+h.toppad+")").transition().call(d().scale(t.y_scale).ticks(10,a("d")));s({axis:t.dom.yaxis_g,showline:true,fontsize:h.barwidth*.8,color:"black"});if(t.items[0].lst){const e=new Set;for(const o of t.items){for(const t of o.lst){e.add(t.label)}}if(e.size>10){i(p)}else{i(r)}}let x=h.yaxis_width+h.barspace+h.barwidth/2;t.dom.graph_g.attr("transform","translate("+x+","+(h.toppad+h.barheight)+")").selectAll("*").remove();t.items.forEach(((e,o)=>{if(!e.boxplot)return;const a=t.dom.graph_g.append("g").datum(e).attr("transform","translate("+o*(h.barwidth+h.barspace)+",0)");const s=a.append("text").text(e.label).attr("transform","translate(0,"+b+") rotate(-65)").attr("text-anchor","end").attr("font-size",h.label_fontsize).attr("font-family",n).attr("dominant-baseline","central");let i="";if("w1"in e.boxplot){a.append("line").attr("x1",0).attr("y1",t.y_scale(e.boxplot.w1)-h.barheight).attr("x2",0).attr("y2",t.y_scale(e.boxplot.w2)-h.barheight).attr("stroke-width",2).attr("stroke","black");a.append("rect").attr("x",-h.barwidth/2).attr("y",t.y_scale(e.boxplot.p75)-h.barheight).attr("width",h.barwidth).attr("height",h.barheight-t.y_scale(c.use_logscale?e.boxplot.p75/e.boxplot.p25:e.boxplot.p75-e.boxplot.p25)).attr("fill","#901739").on("mouseover",(o=>{t.app.tip.clear().show(o.clientX,o.clientY).d.append("div").html(`<table class='sja_simpletable'>\n\t <tr>\n\t <td style='padding: 3px; color:#aaa'>${t.config.term.term.name}</td>\n\t <td style='padding: 3px'>${e.label}</td>\n\t </tr>\n\t <tr>\n\t <td style='padding: 3px; color:#aaa'>Mean</td>\n\t <td style='padding: 3px'>${e.boxplot.mean.toPrecision(4)}</td>\n\t </tr>\n\t <tr>\n\t <td style='padding: 3px; color:#aaa'>Median</td>\n\t <td style='padding: 3px'>${e.boxplot.p50.toPrecision(4)}</td>\n\t </tr>\n\t <tr>\n\t <td style='padding: 3px; color:#aaa'>1st to 3rd Quartile</td>\n\t <td style='padding: 3px'>${e.boxplot.p25.toPrecision(4)} to ${e.boxplot.p75.toPrecision(4)}</td>\n\t </tr>\n\t <tr>\n\t <td style='padding: 3px; color:#aaa'>Std. Deviation</td>\n\t <td style='padding: 3px'>${e.boxplot.sd.toPrecision(4)}</td>\n\t </tr>\n\t </table>`)})).on("mouseout",(()=>t.app.tip.hide()));a.append("line").attr("x1",-h.barwidth/2.2).attr("y1",t.y_scale(e.boxplot.w1)-h.barheight).attr("x2",h.barwidth/2.2).attr("y2",t.y_scale(e.boxplot.w1)-h.barheight).attr("stroke-width",2).attr("stroke","black");a.append("line").attr("x1",-h.barwidth/2.2).attr("y1",t.y_scale(e.boxplot.p50)-h.barheight).attr("x2",h.barwidth/2.2).attr("y2",t.y_scale(e.boxplot.p50)-h.barheight).attr("stroke-width",1.5).attr("stroke","white");a.append("line").attr("x1",-h.barwidth/2.2).attr("y1",t.y_scale(e.boxplot.w2)-h.barheight).attr("x2",h.barwidth/2.2).attr("y2",t.y_scale(e.boxplot.w2)-h.barheight).attr("stroke-width",2).attr("stroke","black")}for(const o of e.boxplot.out){a.append("circle").attr("cx",0).attr("cy",t.y_scale(o.value)-h.barheight).attr("r",2).attr("fill","#901739").on("mouseover",(e=>{t.app.tip.clear().show(e.clientX,e.clientY).d.append("div").html(t.config.term2.term.name+" "+o.value.toPrecision(4))})).on("mouseout",(()=>{t.app.tip.hide()}))}if(e.lst){s.on("mouseover",(o=>{t.app.tip.clear().show(o.clientX,o.clientY).d.append("div").html(t.config.term.term.name+": "+e.label+"<br>"+"# patients: "+e.value+"<br>"+i)})).on("mouseout",(()=>{t.app.tip.hide()}))}else{s.on("mouseover",(o=>{t.app.tip.clear().show(o.clientX,o.clientY).d.append("div").html(t.config.term.term.name+": "+e.label+"<br>"+"# patients: "+e.value)})).on("mouseout",(()=>{t.app.tip.hide()}))}}))};t.get_max_labelheight=function(e){let o=0;for(const a of t.items){t.dom.svg.append("text").text(a.label).attr("font-family",n).attr("font-size",e.label_fontsize).each((function(){o=Math.max(o,this.getBBox().width)})).remove()}return o}}const b=t(c);export{b as boxplotInit};
@@ -0,0 +1 @@
1
+ import{b as t,h as e,P as a,K as i}from"./app-b369b169.js";import{topBarInit as s}from"./controls.btns-79b805dd.js";import{configUiInit as n}from"./controls.config-28d6d6a8.js";import{r as o}from"./table-29d5a973.js";import"./termsetting-33ea66f1.js";import"./tslib.es6-c3c2d88f.js";import"path";class r{constructor(t){this.opts=t;this.type="brainImaging";this.isOpen=true}async init(){const t=this.opts.holder;const e=t.append("div").style("display","inline-block").style("vertical-align","top");const a=e.append("div");const o=e.append("div");const r=this.getConfigInputsOptions();this.features=await i({topbar:s({app:this.app,id:this.id,downloadHandler:()=>{const e=t.select('div[id="sjpp_brainImaging_holder_div"] img').node();const a="brainImaging";const i=document.createElement("a");document.body.appendChild(i);i.addEventListener("click",(()=>{i.download=a+".png";i.href=e.src;document.body.removeChild(i)}),false);i.click()},callback:()=>this.toggleVisibility(this.isOpen),isOpen:()=>this.isOpen,holder:a}),config:n({app:this.app,id:this.id,holder:o,isOpen:()=>this.isOpen,inputs:r})})}getConfigInputsOptions(){const t=[{label:"Sagittal",type:"number",chartType:"brainImaging",settingsKey:"brainImageL",title:"Sagittal",min:0,max:192},{label:"Coronal",type:"number",chartType:"brainImaging",settingsKey:"brainImageF",title:"Coronal",min:0,max:228},{label:"Axial",type:"number",chartType:"brainImaging",settingsKey:"brainImageT",title:"Axial",min:0,max:192}];return t}async main(){const e=this.state.settings;this.isOpen=e.brainImaging.isOpen;this.opts.holder.select('div[id="sjpp_brainImaging_holder_div"]').remove();const a=this.opts.holder.append("div").attr("id","sjpp_brainImaging_holder_div").style("display","inline-block");if(this.opts.header)this.opts.header.style("padding-left","7px").style("color","rgb(85, 85, 85)").text(`Brain Imaging: ${this.state.queryKey}`);const i=this.app.getState();for(const t in this.features){this.features[t].update({state:this.state,appState:i})}const s={genome:i.vocab.genome,dslabel:i.vocab.dslabel,refKey:this.state.queryKey,l:e.brainImaging.brainImageL,f:e.brainImaging.brainImageF,t:e.brainImaging.brainImageT,selectedSampleFileNames:this.state.selectedSampleFileNames};const n=await t("brainImaging",{body:s});if(n.error)throw n.error;const o=await n.brainImage;const r=new Image;r.onload=()=>{a.append("img").attr("width",r.width*2).attr("height",r.height*2).attr("src",o)};r.src=o}getState(t){return t.plots.find((t=>t.id===this.id))}toggleVisibility(t){this.app.dispatch({type:"plot_edit",id:this.opts.id,config:{settings:{brainImaging:{isOpen:!t}}}})}}function p(e,a){a.dom.tip.clear();const i=e.append("div");if(a.state.termdbConfig.queries.NIdata){for(const[e,s]of Object.entries(a.state.termdbConfig.queries.NIdata)){const n=i.append("div");const r=n.append("div").attr("class","sja_menuoption sja_sharp_border").text(e).on("click",(async()=>{r.attr("class","sja_menuoption_not_interactive");r.on("click",null);const i={genome:a.opts.vocab.genome,dslabel:a.opts.vocab.dslabel,refKey:e,samplesOnly:true};const p=await t("brainImaging",{body:i});const l=p.brainImage;const[c,d]=await m(a,l,a.state,e);const g={text:"APPLY",class:"sjpp_apply_btn sja_filter_tag_btn",callback:t=>{a.dom.tip.hide();const i=t.map((t=>l[t].sample+".nii"));const n={chartType:"brainImaging",queryKey:e,settings:{brainImaging:{brainImageL:s.parameters.l,brainImageF:s.parameters.f,brainImageT:s.parameters.t}},selectedSampleFileNames:i};a.app.dispatch({type:"plot_create",config:n})}};o({rows:c,columns:d,resize:true,singleMode:false,div:n.append("div"),maxHeight:"40vh",buttons:[g]})}))}}}const l=e(r);const c=l;async function d(t){const e={brainImaging:{brainImageL:76,brainImageF:116,brainImageT:80}};const i={chartType:"brainImaging",settings:e};return a(i,t)}async function m(t,e,a,i){const s=[];for(const t of e){const e=[{value:t.sample}];for(const s of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){e.push({value:t[s.termid]})}s.push(e)}const n=[{label:"Sample"}];for(const e of a.termdbConfig.queries.NIdata[i].sampleColumns||[]){n.push({label:(await t.app.vocabApi.getterm(e.termid)).name,width:"15vw"})}return[s,n]}export{l as brainImaging,c as componentInit,d as getPlotConfig,p as makeChartBtnMenu};