@sjcrh/proteinpaint-client 2.76.0 → 2.76.1

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 (218) hide show
  1. package/dist/{2dmaf-74b99126.js → 2dmaf-593951c7.js} +1 -1
  2. package/dist/{AppHeader-cecb39c2.js → AppHeader-29b88e14.js} +1 -1
  3. package/dist/{ColorScale-21cab8d2.js → ColorScale-3d3c42dc.js} +1 -1
  4. package/dist/{DEanalysis-95bad59a.js → DEanalysis-f81e0f19.js} +1 -1
  5. package/dist/{Disco-a6e921a0.js → Disco-db386f7a.js} +1 -1
  6. package/dist/{Disco.UI-9ad999ed.js → Disco.UI-8ed9cb39.js} +1 -1
  7. package/dist/{DragControls-e3b6a937.js → DragControls-d6250d18.js} +1 -1
  8. package/dist/{DziViewer-354a790d.js → DziViewer-9352e224.js} +1 -1
  9. package/dist/{FilterRxComp-701a1480.js → FilterRxComp-0f35b322.js} +1 -1
  10. package/dist/{FilterStateless-54c0b763.js → FilterStateless-b1c6ee04.js} +1 -1
  11. package/dist/{HicApp-d5a946bf.js → HicApp-14b94b20.js} +1 -1
  12. package/dist/{OrbitControls-694652cd.js → OrbitControls-45f56ed4.js} +1 -1
  13. package/dist/{WSIViewer-dc7f8eb0.js → WSIViewer-80f60272.js} +1 -1
  14. package/dist/{adSandbox-f438e388.js → adSandbox-94424b88.js} +1 -1
  15. package/dist/app-2cd97738.js +1 -0
  16. package/dist/{app-3320ab6f.js → app-686b9547.js} +1 -1
  17. package/dist/app-f031940d.js +1 -0
  18. package/dist/app.js +1 -1
  19. package/dist/{bam-431875ef.js → bam-6631640f.js} +1 -1
  20. package/dist/barchart-3c5d734c.js +1 -0
  21. package/dist/{barchart.events-da29c90d.js → barchart.events-df44e666.js} +1 -1
  22. package/dist/{bars.renderer-dcfdd59b.js → bars.renderer-b232d882.js} +1 -1
  23. package/dist/{block-6aedd569.js → block-4134e823.js} +1 -1
  24. package/dist/block.lazyload-eda77d9b.js +1 -0
  25. package/dist/{block.legend-d3f61ef7.js → block.legend-d2b7f1cb.js} +1 -1
  26. package/dist/{block.mds-3ad17dfa.js → block.mds-ebe7b58d.js} +1 -1
  27. package/dist/{block.mds.cnv-857ba868.js → block.mds.cnv-99f0a414.js} +1 -1
  28. package/dist/{block.mds.expressionrank-7e3b208c.js → block.mds.expressionrank-96bf864b.js} +1 -1
  29. package/dist/{block.mds.expressionstat-f2d31c86.js → block.mds.expressionstat-dcab3fd1.js} +1 -1
  30. package/dist/{block.mds.geneboxplot-f0fbaf12.js → block.mds.geneboxplot-e5b2a4ce.js} +1 -1
  31. package/dist/{block.mds.junction-7f87f48f.js → block.mds.junction-534eef9b.js} +1 -1
  32. package/dist/{block.mds.svcnv-ac035c12.js → block.mds.svcnv-de6a3c7d.js} +1 -1
  33. package/dist/{block.mds.svcnv.share-886d9479.js → block.mds.svcnv.share-2c2c16db.js} +1 -1
  34. package/dist/{block.mds2-7852c1ee.js → block.mds2-373fcb4d.js} +1 -1
  35. package/dist/{block.svg-9b916fa6.js → block.svg-be5d741d.js} +1 -1
  36. package/dist/{block.tk.aicheck-6770e333.js → block.tk.aicheck-f2da5e81.js} +1 -1
  37. package/dist/{block.tk.ase-ee807e59.js → block.tk.ase-ef848944.js} +1 -1
  38. package/dist/{block.tk.bam-00fba6e8.js → block.tk.bam-11fcba17.js} +1 -1
  39. package/dist/{block.tk.bedgraphdot-7fda78e9.js → block.tk.bedgraphdot-a81b0709.js} +1 -1
  40. package/dist/{block.tk.bigwig.ui-cc1a42f3.js → block.tk.bigwig.ui-f8e5ba71.js} +1 -1
  41. package/dist/{block.tk.hicstraw-526470e3.js → block.tk.hicstraw-e7072b25.js} +1 -1
  42. package/dist/{block.tk.junction-b43a4cda.js → block.tk.junction-1c9a7854.js} +1 -1
  43. package/dist/{block.tk.junction.textmatrixui-a60ed78a.js → block.tk.junction.textmatrixui-ffecbb16.js} +1 -1
  44. package/dist/{block.tk.ld-d15bde41.js → block.tk.ld-274c3a82.js} +1 -1
  45. package/dist/{block.tk.menu-3aeb93c6.js → block.tk.menu-e970cd4a.js} +1 -1
  46. package/dist/{block.tk.pgv-9af2bd64.js → block.tk.pgv-f4d4dbf7.js} +1 -1
  47. package/dist/{boxplot-e17a17b7.js → boxplot-44d3b48f.js} +1 -1
  48. package/dist/{brainImaging-bf2ceee9.js → brainImaging-2eaa419d.js} +1 -1
  49. package/dist/{brush-aa175142.js → brush-bb4ae2fb.js} +1 -1
  50. package/dist/{categorical-a52014a1.js → categorical-db9b0175.js} +1 -1
  51. package/dist/{condition-c646e357.js → condition-4e788f7d.js} +1 -1
  52. package/dist/{controls-287e6efa.js → controls-3c1691d7.js} +1 -1
  53. package/dist/{controls.btns-79b805dd.js → controls.btns-5b1240c8.js} +1 -1
  54. package/dist/controls.config-81cd5749.js +1 -0
  55. package/dist/cuminc-c4db28f0.js +1 -0
  56. package/dist/{customdata.inputui-dc49d94b.js → customdata.inputui-f9234d1f.js} +1 -1
  57. package/dist/{dataDownload-3a3d4f33.js → dataDownload-a4dfa2d0.js} +1 -1
  58. package/dist/{databrowser.ui-d8d3f8fd.js → databrowser.ui-a64bab0c.js} +1 -1
  59. package/dist/{density-a82a8b1c.js → density-69a732f6.js} +1 -1
  60. package/dist/{dictionary-c5a19d90.js → dictionary-e2232e84.js} +1 -1
  61. package/dist/{drag-7b30ba17.js → drag-d8daa62f.js} +1 -1
  62. package/dist/{e2pca-82765817.js → e2pca-f9324654.js} +1 -1
  63. package/dist/{ep-d017ec2f.js → ep-a5c1ee3a.js} +1 -1
  64. package/dist/{facet-a9b44ef3.js → facet-98971c68.js} +1 -1
  65. package/dist/{fusion.parse-d40d0b9d.js → fusion.parse-466ded6d.js} +1 -1
  66. package/dist/{geneExpClustering-34c3f518.js → geneExpClustering-66c05fb1.js} +1 -1
  67. package/dist/{geneExpression-0d1b7244.js → geneExpression-5685eae2.js} +1 -1
  68. package/dist/{geneExpression-589f485b.js → geneExpression-b5d0261f.js} +1 -1
  69. package/dist/{geneExpression-7d14983f.js → geneExpression-ff46a389.js} +1 -1
  70. package/dist/{geneORA-903a780f.js → geneORA-f1a90d02.js} +1 -1
  71. package/dist/{geneVariant-92c4e870.js → geneVariant-1cf17b3b.js} +1 -1
  72. package/dist/{geneVariant-89601b34.js → geneVariant-d0b9e1cb.js} +1 -1
  73. package/dist/{genefusion.ui-7e22e811.js → genefusion.ui-89a727ea.js} +1 -1
  74. package/dist/{genesearch-a4e19f0d.js → genesearch-41cb55ce.js} +1 -1
  75. package/dist/{geneset-108a39d2.js → geneset-b63496eb.js} +1 -1
  76. package/dist/{genomeBrowser-12f86a36.js → genomeBrowser-ec8fbddc.js} +1 -1
  77. package/dist/{genomeBrowser.controls-d5067811.js → genomeBrowser.controls-2dcaf4f5.js} +1 -1
  78. package/dist/{groupsetting-b4416a96.js → groupsetting-3fef59f9.js} +1 -1
  79. package/dist/{gsea-543dab25.js → gsea-3075c82c.js} +1 -1
  80. package/dist/{hierCluster-26e14090.js → hierCluster-33a828a1.js} +1 -1
  81. package/dist/hierCluster.config-fa799d06.js +1 -0
  82. package/dist/{hierCluster.interactivity-e56f6542.js → hierCluster.interactivity-6d453881.js} +1 -1
  83. package/dist/{hierCluster.renderers-74a64cf5.js → hierCluster.renderers-6279d7fb.js} +1 -1
  84. package/dist/{html.legend-a3f4ebfe.js → html.legend-fac5cb07.js} +1 -1
  85. package/dist/{imagePlot-b9eae4ae.js → imagePlot-38254245.js} +1 -1
  86. package/dist/{lasso-f767f634.js → lasso-e8b9500e.js} +1 -1
  87. package/dist/{launch.adhoc-abca6af3.js → launch.adhoc-2799109b.js} +1 -1
  88. package/dist/{leftlabel.sample-24c2388d.js → leftlabel.sample-afcdcefd.js} +1 -1
  89. package/dist/{legacyDataset-e0e201ab.js → legacyDataset-3b08c91a.js} +1 -1
  90. package/dist/{log-99af3443.js → log-4d84c357.js} +1 -1
  91. package/dist/{lollipop-806f8fa4.js → lollipop-64c5cdfc.js} +1 -1
  92. package/dist/{maf-b06579e4.js → maf-fd4ffbd0.js} +1 -1
  93. package/dist/{maftimeline-4840a380.js → maftimeline-3e892da7.js} +1 -1
  94. package/dist/{matrix-00bb50ff.js → matrix-e371888a.js} +1 -1
  95. package/dist/{matrix.cells-914dd0c6.js → matrix.cells-eb4110a7.js} +1 -1
  96. package/dist/{matrix.cluster-783ceab0.js → matrix.cluster-0df274ed.js} +1 -1
  97. package/dist/{matrix.config-6ce74dfe.js → matrix.config-3ef822b9.js} +1 -1
  98. package/dist/{matrix.controls-7b2a6f95.js → matrix.controls-42bb2063.js} +1 -1
  99. package/dist/{matrix.data-dac4f1b7.js → matrix.data-27b8e3a9.js} +1 -1
  100. package/dist/{matrix.dom-4e10bbe9.js → matrix.dom-1bbe1f39.js} +1 -1
  101. package/dist/{matrix.groups-b9fca14a.js → matrix.groups-67606700.js} +1 -1
  102. package/dist/{matrix.interactivity-84169b43.js → matrix.interactivity-cdcc56c9.js} +1 -1
  103. package/dist/{matrix.layout-dd5a44fd.js → matrix.layout-857cd336.js} +1 -1
  104. package/dist/{matrix.legend-ac6d45e6.js → matrix.legend-09f6dc57.js} +1 -1
  105. package/dist/{matrix.renderers-78010275.js → matrix.renderers-d392fb69.js} +1 -1
  106. package/dist/{matrix.serieses-9b4fd744.js → matrix.serieses-b03b62aa.js} +1 -1
  107. package/dist/{matrix.sort-014d798d.js → matrix.sort-9440c86a.js} +1 -1
  108. package/dist/{matrix.sorterUi-9bf7e6f9.js → matrix.sorterUi-2c5eb35f.js} +1 -1
  109. package/dist/{mavb-c6be46fc.js → mavb-9d86df89.js} +1 -1
  110. package/dist/{mds.fimo-bff6a1ed.js → mds.fimo-bffccb9f.js} +1 -1
  111. package/dist/{mds.samplescatterplot-9a02b9fb.js → mds.samplescatterplot-b3908cc7.js} +1 -1
  112. package/dist/{mds.survivalplot-055549f4.js → mds.survivalplot-9ad7dabc.js} +1 -1
  113. package/dist/{metaboliteIntensity-fac92f8b.js → metaboliteIntensity-ec3176f4.js} +1 -1
  114. package/dist/niceNumLabels-5f45218a.js +1 -0
  115. package/dist/{nodrag-16ad4b03.js → nodrag-ab7d5a9f.js} +1 -1
  116. package/dist/{notify-224cccbd.js → notify-59f61230.js} +1 -1
  117. package/dist/{numeric-b0b17185.js → numeric-4853b665.js} +1 -1
  118. package/dist/{numeric.binary-1f9e93f2.js → numeric.binary-1dd9a2b4.js} +1 -1
  119. package/dist/{numeric.continuous-ebcd0567.js → numeric.continuous-ed132eea.js} +1 -1
  120. package/dist/{numeric.discrete-7b97044a.js → numeric.discrete-d780d076.js} +1 -1
  121. package/dist/{numeric.spline-1be88f3d.js → numeric.spline-abe07708.js} +1 -1
  122. package/dist/{numeric.toggle-7fa2a770.js → numeric.toggle-647423dd.js} +1 -1
  123. package/dist/oncomatrix-7ac995a2.js +1 -0
  124. package/dist/{parseData-21fe9822.js → parseData-567f3d70.js} +1 -1
  125. package/dist/{plot.2dvaf-18a35e4b.js → plot.2dvaf-4016e75e.js} +1 -1
  126. package/dist/plot.app-d6fe76e2.js +1 -0
  127. package/dist/plot.barplot-d2fc5020.js +1 -0
  128. package/dist/{plot.boxplot-fe3046c6.js → plot.boxplot-76229491.js} +1 -1
  129. package/dist/{plot.brainImaging-2ceb6023.js → plot.brainImaging-39b80a1c.js} +1 -1
  130. package/dist/{plot.disco-6011f87f.js → plot.disco-9a544f9a.js} +1 -1
  131. package/dist/{plot.dzi-6728a7c8.js → plot.dzi-f1658ebf.js} +1 -1
  132. package/dist/{plot.ssgq-5581dc56.js → plot.ssgq-aeb2dabc.js} +1 -1
  133. package/dist/{plot.vaf2cov-b2284c64.js → plot.vaf2cov-ba8332ed.js} +1 -1
  134. package/dist/{plot.wsi-9a9d4034.js → plot.wsi-2d802557.js} +1 -1
  135. package/dist/{profileBarchart-0476f1f8.js → profileBarchart-72adc533.js} +1 -1
  136. package/dist/{profileHome-32eb9b50.js → profileHome-37fd52e5.js} +1 -1
  137. package/dist/{profilePlot-c7e099e8.js → profilePlot-0b897a05.js} +1 -1
  138. package/dist/profilePolar-a7248d48.js +1 -0
  139. package/dist/profileRadar-1ba5d8fd.js +1 -0
  140. package/dist/profileRadarFacility-452e76ef.js +1 -0
  141. package/dist/{profileSummary-b114204f.js → profileSummary-7f0eacf0.js} +1 -1
  142. package/dist/{recover-49e09de0.js → recover-74f2e965.js} +1 -1
  143. package/dist/{regression.inputs-a761f40d.js → regression.inputs-ff00f74e.js} +1 -1
  144. package/dist/{regression.inputs.values.table-5929d25a.js → regression.inputs.values.table-1753d56b.js} +1 -1
  145. package/dist/{regression.results-69bc42d0.js → regression.results-6f85a5dc.js} +1 -1
  146. package/dist/{renderPvalueTable-dc5d15f2.js → renderPvalueTable-17558d6a.js} +1 -1
  147. package/dist/{sampleScatter-2d0ed680.js → sampleScatter-97917406.js} +1 -1
  148. package/dist/{sampleScatter.rendererThree-0b12ac61.js → sampleScatter.rendererThree-4649d1ec.js} +2 -2
  149. package/dist/{sampleView-484ab133.js → sampleView-f86dc5ea.js} +1 -1
  150. package/dist/{samplelst-689796e6.js → samplelst-4a5512df.js} +1 -1
  151. package/dist/{samplematrix-2b137a05.js → samplematrix-1192e5e2.js} +1 -1
  152. package/dist/{scatter-205e013f.js → scatter-cc1b0d07.js} +1 -1
  153. package/dist/{select2Terms-b21e184a.js → select2Terms-d4f6ed9e.js} +1 -1
  154. package/dist/{selectGenomeWithTklst-466995b4.js → selectGenomeWithTklst-b5cfd153.js} +1 -1
  155. package/dist/{singleCellCellType-5db730bb.js → singleCellCellType-d8c58253.js} +1 -1
  156. package/dist/{singleCellGeneExpression-7147a2d0.js → singleCellGeneExpression-b7209531.js} +1 -1
  157. package/dist/{singleCellPlot-73b2738f.js → singleCellPlot-e6f83b2a.js} +1 -1
  158. package/dist/{singlecell-bca774ed.js → singlecell-321dd973.js} +1 -1
  159. package/dist/{singlecell-24409b72.js → singlecell-879235b3.js} +1 -1
  160. package/dist/snp-541ec14d.js +1 -0
  161. package/dist/{snp-a8388ce4.js → snp-b046b7e6.js} +1 -1
  162. package/dist/snplocus-61ff1c10.js +1 -0
  163. package/dist/{spliceevent.a53ss.diagram-e2eab72b.js → spliceevent.a53ss.diagram-1a84db58.js} +1 -1
  164. package/dist/{spliceevent.exonskip.diagram-4d5df3a1.js → spliceevent.exonskip.diagram-da10648b.js} +1 -1
  165. package/dist/{spliceevent.exonskip.getdefault-a94aad6e.js → spliceevent.exonskip.getdefault-8028e522.js} +1 -1
  166. package/dist/{spliceevent.noeventdiagram-ea97b0fb.js → spliceevent.noeventdiagram-1d6d790d.js} +1 -1
  167. package/dist/{spliceevent.phrase-c5832470.js → spliceevent.phrase-2ca0ce59.js} +1 -1
  168. package/dist/{stattable-7c5ecc2f.js → stattable-c5f12d9c.js} +1 -1
  169. package/dist/{style.gdc-131f3c77.js → style.gdc-5b7d90c6.js} +1 -1
  170. package/dist/summary-0624f5e6.js +1 -0
  171. package/dist/{sunburst-533902a7.js → sunburst-30295714.js} +1 -1
  172. package/dist/{survival-e16e068f.js → survival-816e055a.js} +1 -1
  173. package/dist/{survival-92250664.js → survival-fcc7719f.js} +1 -1
  174. package/dist/{svg.download-35926549.js → svg.download-e89a7369.js} +1 -1
  175. package/dist/{svg.legend-8d490df2.js → svg.legend-c93f2980.js} +1 -1
  176. package/dist/{svgraph-6fac8cbc.js → svgraph-6ab3011b.js} +1 -1
  177. package/dist/{svmr-d07ff695.js → svmr-3ad3d600.js} +1 -1
  178. package/dist/{table-ad744310.js → table-4d3a771e.js} +1 -1
  179. package/dist/{table-29d5a973.js → table-f50a9344.js} +1 -1
  180. package/dist/{termInfo-bf99a37e.js → termInfo-d0a9e65f.js} +1 -1
  181. package/dist/{termdb.bins-8b656cc3.js → termdb.bins-01e8cce6.js} +1 -1
  182. package/dist/{termsetting-33ea66f1.js → termsetting-ad8c4f3a.js} +1 -1
  183. package/dist/{tk-071a7550.js → tk-e74c9beb.js} +1 -1
  184. package/dist/{toggleButtons-dbdbad01.js → toggleButtons-04c5ad7c.js} +1 -1
  185. package/dist/{tp.ui-9c2e9fc5.js → tp.ui-7b24f0ef.js} +1 -1
  186. package/dist/{tvs.density-f6128793.js → tvs.density-b2790080.js} +1 -1
  187. package/dist/{tvs.geneVariant-ca4bdbb1.js → tvs.geneVariant-418ed4ff.js} +1 -1
  188. package/dist/{tvs.numeric-0260a825.js → tvs.numeric-de14101f.js} +1 -1
  189. package/dist/{tvs.samplelst-cb71b3bf.js → tvs.samplelst-15bb62f1.js} +1 -1
  190. package/dist/{uiUtils-f1bd2bcc.js → uiUtils-ff2d4a6a.js} +1 -1
  191. package/dist/{variantBrowser-7c540224.js → variantBrowser-261373bf.js} +1 -1
  192. package/dist/{vcf-5cc55588.js → vcf-145bf5dd.js} +1 -1
  193. package/dist/violin-e647aac9.js +1 -0
  194. package/dist/{violin.interactivity-4da6d7a9.js → violin.interactivity-30a239fe.js} +1 -1
  195. package/dist/{violin.renderer-ce024265.js → violin.renderer-e29d2700.js} +1 -1
  196. package/dist/{violinRenderer-f7c96a60.js → violinRenderer-08b3b58c.js} +1 -1
  197. package/dist/{viridis-01ab20c5.js → viridis-d86ad99b.js} +1 -1
  198. package/dist/{y-67939f83.js → y-06b0d47c.js} +1 -1
  199. package/dist/{zoom-25dce8b9.js → zoom-d6ef6f3f.js} +1 -1
  200. package/package.json +1 -1
  201. package/dist/app-649f8357.js +0 -1
  202. package/dist/app-b369b169.js +0 -1
  203. package/dist/barchart-8277ed43.js +0 -1
  204. package/dist/block.lazyload-87b12654.js +0 -1
  205. package/dist/controls.config-28d6d6a8.js +0 -1
  206. package/dist/cuminc-9e275854.js +0 -1
  207. package/dist/hierCluster.config-98e82dff.js +0 -1
  208. package/dist/niceNumLabels-238aabce.js +0 -1
  209. package/dist/oncomatrix-351af2a0.js +0 -1
  210. package/dist/plot.app-30c4b8e5.js +0 -1
  211. package/dist/plot.barplot-7c4865a2.js +0 -1
  212. package/dist/profilePolar-6b981e63.js +0 -1
  213. package/dist/profileRadar-bca1cc03.js +0 -1
  214. package/dist/profileRadarFacility-bbb1ecd8.js +0 -1
  215. package/dist/snp-37d06246.js +0 -1
  216. package/dist/snplocus-7a1ea8c9.js +0 -1
  217. package/dist/summary-5ec455d3.js +0 -1
  218. package/dist/violin-2ba509eb.js +0 -1
@@ -1 +1 @@
1
- import{i as t,h as e,f as s}from"./termsetting-33ea66f1.js";import{d as r}from"./app-b369b169.js";import"./tslib.es6-c3c2d88f.js";import"path";function a(a){a.render=function(){const t=a.settings.matrix;const e=a.layout;const s=a.dimensions;const r=a.dom.svg.attr("width")?t.duration:0;a.dom.clipRect.attr("x",s.xOffset-1).attr("y",0).attr("width",s.mainw+3).attr("height",s.mainh+500);a.renderSerieses(t,e,s,r);a.renderLabels(t,e,s,r);a.renderDivideByLabel(t,e,s,r);a.dom.colBeam.attr("width",s.dx).attr("height",s.mainh).style("stroke",t.beamStroke);a.dom.rowBeam.attr("width",s.zoomedMainW).attr("height",t.rowh).style("stroke",t.beamStroke)};a.renderSerieses=function(t,e,s,r){if(a.prevUseCanvas!=t.useCanvas){a.dom.seriesesG.selectAll("g").remove()}if(t.useCanvas){const e=a.dom.seriesesG.selectAll("g");const n=a.dom.seriesesG.append("g").datum(this.serieses);a.renderCanvas(this.serieses,n,s,t,e,r)}else{a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);const t=a.dom.seriesesG.selectAll(".sjpp-mass-series-g").data(this.serieses,(t=>t.tw.$id));t.exit().remove();t.each(a.renderSeries);t.enter().append("g").attr("class","sjpp-mass-series-g").style("opacity",.001).each(a.renderSeries);a.mouseout()}a.prevUseCanvas=t.useCanvas};a.renderSeries=async function(t){const e=a.settings.matrix;a.dimensions;const s=r(this);s.attr("transform")?e.duration:0;s.attr("transform",`translate(${t.x},${t.y})`).style("opacity",1);const n=t.cells[t.cells.length-1];t.y+n?.y+e.rowh;const o=s.selectAll("rect").data(t.cells,(t=>t.sample+";;"+t.tw.$id+";;"+t.valueIndex));o.exit().remove();o.each(a.renderCell);o.enter().append("rect").each(a.renderCell)};a.renderCanvas=async function(t,e,s,r,n,o){const i=window.devicePixelRatio<=1?1:window.devicePixelRatio;e.selectAll("*").remove();const l=s.imgW;const c=a.dimensions.mainh;const d=window.OffscreenCanvas?new OffscreenCanvas(l*i,c*i):a.dom.holder.append("canvas").attr("width",i*l).attr("height",i*c).style("opacity",0).node();const m=d.getContext("2d");m.imageSmoothingEnabled=false;m.imageSmoothingQuality="high";m.scale(i,i);for(const e of t){for(const t of e.cells){a.renderCellWithCanvas(m,t,e,r,s,e.y)}}if(window.OffscreenCanvas){const t=new FileReader;t.addEventListener("load",(()=>{n?.remove();a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);e.selectAll("image").remove();e.append("image").attr("xlink:href",t.result).attr("x",s.xMin).attr("width",l).attr("height",c)}),false);const r=await d.convertToBlob({quality:1});t.readAsDataURL(r)}else{n?.remove();a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);const t=d.toDataURL();e.append("image").attr("width",l).attr("height",c).attr("xlink:href",t);if(!window.OffscreenCanvas)d.remove()}a.mouseout()};a.renderCellWithCanvas=function(t,e,s,r,o,i){if(!e.fill)e.fill=e.$id in a.colorScaleByTermId?a.colorScaleByTermId[e.$id](e.key):n(e);const l=e.x?e.x-o.xMin:0;const c=i?i+e.y:e.y||0;const d=r.useMinPixelWidth?Math.max(e.width||o.colw,o.pxw):e.width||o.colw;const m="height"in e?e.height:r.rowh;t.fillStyle=e.fill;t.fillRect(l,c,d,m)};a.renderCell=function(t){if(!t.fill)t.fill=t.$id in a.colorScaleByTermId?a.colorScaleByTermId[t.$id](t.key):n(t);const e=a.settings.matrix;r(this).attr("x",t.x||0).attr("y",t.y||0).attr("width",t.width||a.dimensions.colw).attr("height","height"in t?Math.max(0,t.height):e.rowh).attr("shape-rendering","crispEdges").attr("stroke-width",0).attr("fill",t.fill)};a.renderLabels=function(t,e,s,n){for(const o of["top","btm","left","right"]){const i=e[o];i.box.style("display",i.display||"").attr("transform",i.attr.boxTransform);const l=i.box.selectAll(".sjpp-matrix-label").data(i.data,i.key);l.exit().remove();l.each(c);l.enter().append("g").attr("class","sjpp-matrix-label").each(c);function c(e){const s=r(this);s.attr("transform",i.attr.labelGTransform);if(!s.select(":scope>text").size())s.append("text");const n=!i.isGroup&&e.grp?.type!=="hierCluster"&&e.tw?.q?.mode=="continuous";const o=i.label(e);const l=s.select(":scope>text").attr("fill","#000");l.attr("display",e.grp?.type==="hierCluster"&&t.clusterRowh<6?"none":i.attr.fontSize<6||o==="configure"?"none":"").attr("font-size",e.grp?.type==="hierCluster"?t.clusterRowh:i.attr.fontSize).attr("text-anchor",i.attr.labelAnchor).attr("transform",i.attr.labelTransform).attr("cursor","pointer").attr(i.attr.textpos.coord,i.attr.textpos.factor*(n?30:0));if(!Array.isArray(o)){l.text(o);l.attr("y",e.grp?.type!=="hierCluster"&&e.tw?.q?.mode=="continuous"?10:e.grp?.type==="hierCluster"?.3*t.clusterRowh:0)}else{l.text("");const t=l.selectAll("tspan").data(o);t.enter().append("tspan").attr("class",d).attr("dx",m).attr("font-size",p).text(f)}l.on("mouseover",o==="configure"?()=>l.attr("opacity",.5):null).on("mouseout",o==="configure"?()=>l.attr("opacity",0):null);const c=s.select(".sjpp-matrix-cell-axis").size()&&true;if(n&&o){if(!c){s.append("g").attr("class","sjpp-matrix-cell-axis").attr("shape-rendering","crispEdges")}const r=s.select(".sjpp-matrix-cell-axis");r.selectAll("*").remove();[e.counts.maxval,e.counts.minval];if(t.transpose);a.dimensions;const n=!t.transpose?0:e.tw.settings.gap-1-e.labelOffset;const o=!t.transpose?e.tw.settings.gap-1-e.labelOffset:0;r.attr("shape-rendering","crispEdges").attr("transform",`translate(${n},${o})`).call(i.attr.axisFxn(e.scales.full.domain(e.scales.tickValues)).tickValues(e.scales.tickValues))}else if(c){s.select(".sjpp-matrix-cell-axis").remove()}}function d(t){return t.cls}function m(t){return t.dx}function p(t){return t.fontSize||i.attr.fontSize}function f(t){return t.text}}};a.colLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;t.labelOffset=.8*r.colw;const n=t.grpIndex*s.colgspace+t.totalIndex*r.dx+t.labelOffset+t.totalHtAdjustments;const o=0;return`translate(${n+r.seriesXoffset},${o})`};a.colGrpLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*s.colgspace+t.prevGrpTotalIndex*r.dx+n*r.dx/2+s.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(${o+r.seriesXoffset},0)`};a.rowLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=0;t.labelOffset=.7*(t.grp.type=="hierCluster"?s.clusterRowh:s.rowh);const o=t.grpIndex*s.rowgspace+t.totalIndex*r.dy+t.labelOffset+t.totalHtAdjustments;return`translate(${n},${o})`};a.rowGrpLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*s.rowgspace+t.prevGrpTotalIndex*r.dy+n*r.dy/2+s.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(0,${o})`};a.rowAxisGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=0;const o=t.grpIndex*s.rowgspace+t.totalIndex*r.dy+.7*s.rowh+t.totalHtAdjustments;return`translate(${n},${o})`};a.renderDivideByLabel=async(r,n,o)=>{a.dom.mainG.selectAll(".sjpp-matrix-divide-by-label").remove();if(!a.config.divideBy)return;const i=a.config.divideBy?.term.name||"";const l=i.length<=r.rowlabelmaxchars?i:i.slice(0,r.rowlabelmaxchars)+"…";const c=!r.transpose?[n.left,n.right]:[n.top,n.bottom];const d=c.find((t=>!t.isGroup))?.box;const m=(r.collabelpos=="top"?o.mainh+r.collabelmaxchars:-r.collabelmaxchars)+8;const p=r.rowlabelpos=="left"?"end":"start";const f=r.controlLabels;const g=d.append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${m})`);g.append("text").attr("text-anchor",p).attr("font-style","italic").attr("y",-20).text(`${f.Samples} grouped by`);const h=d.datum({tw:a.config.divideBy}).append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${m})`);const x=h.append("text").attr("text-anchor",p).attr("font-weight",600).text(l).on("click",((t,e)=>{w.showMenu(t,x.node())}));h.append("title").text(`${f.Samples} are grouped by this gene or variable. Click to edit.`);const u=[];const y=t(a.config.divideBy.term)?"ranges":"values";if(a.config.legendValueFilter.lst?.find((t=>t.legendGrpName==a.config.divideBy.term.id||t.legendGrpName==a.config.divideBy.term.name))?.tvs[y]?.length){u.push({label:`Show filtered ${f.samples}`,callback:a.showDeletedSampleGroups})}const w=await e({menuOptions:"{edit,replace,remove}",customMenuOptions:u,vocabApi:a.app.vocabApi,vocab:a.state.vocab,holder:h,debug:a.opts.debug,usecase:{target:"matrix"},getBodyParams:()=>{const t=a.termOrder.filter((t=>t.tw.term.type==="geneVariant")).map((t=>t.tw.term.chr?`${t.tw.term.chr}:${t.tw.term.start}-${t.tw.term.stop}`:t.tw.term.gene||t.tw.term.name));return{currentGeneNames:t}},callback:async e=>{if(a.dom.loadingDiv&&a.dom.svg){a.dom.loadingDiv.selectAll("*").remove();a.dom.loadingDiv.html("").style("display","").style("position","relative").style("left","45%");a.dom.loadingDiv.html("Processing data ...");a.dom.svg.style("opacity",.1).style("pointer-events","none")}if(e&&!e.q)throw"data.q{} missing from pill callback";if(e?.term&&t(e.term)){e.q={...e.q,mode:"discrete"}}if(e)await s(e,a.app.vocabApi);await w.main(e?e:{term:null,q:null});d.datum({tw:e});a.app.dispatch({type:"plot_edit",id:a.id,config:{divideBy:e,legendValueFilter:a.mayRemoveTvsEntry(a.config.divideBy)}})}});const v={term:a.config.divideBy.term,q:a.config.divideBy.q};if(a.config.divideBy.$id)v.$id=a.config.divideBy.$id;w.main(v)};a.adjustSvgDimensions=async function(t){const e=a.settings.matrix;const s=a.settings.hierCluster||{};const r=s.yDendrogramHeight||0;const n=s.xDendrogramHeight||0;const i=a.dimensions;const l=a.dom.svg.attr("width")?e.duration:0;await o(t==e.transpose?l:e.duration);const c=a.layout;const d=c.top.box.node().getBBox();const m=c.btm.box.node().getBBox();const p=c.left.box.node().getBBox();const f=c.right.box.node().getBBox();const g=a.dom.legendG.node().getBBox();a.dom.seriesesG.node().getBBox();i.extraWidth=p.width+f.width+e.margin.left+e.margin.right+e.rowlabelgap*2;i.extraHeight=d.height+m.height+e.margin.top+e.margin.bottom+e.collabelgap*2;i.svgw=i.mainw+i.extraWidth+n;i.svgh=i.mainh+i.extraHeight+g.height+20+e.scrollHeight+r;a.dom.svg.attr("width",i.svgw).attr("height",i.svgh);let h=a.type=="hierCluster"?0:p.width;if(s.xDendrogramHeight){a.dom.termLabelG.selectAll(".sjpp-matrix-label").each((function(t){if(t.grp.type!=="hierCluster")return;const e=this.getBBox();if(e.width>h){h=e.width;t.label.length}}))}const x=-c.left.offset+n+h;const u=!s.xDendrogramHeight?0:Math.max(p.width-(s.xDendrogramHeight+h),0);const y=(c.top.display=="none"?0:d.height)-c.top.offset+r;a.dom.mainG.attr("transform",`translate(${x+u},${y})`);a.dom.clipRect.attr("y",-y).attr("height",i.mainh+500+y);const w=i.xOffset+(e.transpose?20:0);const v=i.yOffset+i.mainh+e.collabelgap+(c.btm.display=="none"?0:m.height)+20;a.dom.legendG.attr("transform",`translate(${w},${v})`);if(s.xDendrogramHeight){const t=h+u-c.left.offset+i.xOffset-i.dx/2;a.dom.hcClipRect.attr("x",t+n+i.dx/2).attr("y",0).attr("width",i.mainw+3).attr("height",i.mainh+s.yDendrogramHeight+500);a.topDendroX=t+i.seriesXoffset;a.dom.topDendrogram.attr("transform",`translate(${a.topDendroX}, 0)`);const r=c.top.display=="none"?0:d.height+e.collabelgap;a.dom.leftDendrogram.attr("transform",`translate(${t-h-10}, ${r})`)}}}function n(t){if(t.fill)return t.fill;const e=t.class||Array.isArray(t.values)&&t.values[0].class;return e?mclass[e].color:"#555"}function o(t){return new Promise((e=>setTimeout(e,t)))}export{a as setRenderers};
1
+ import{i as t,h as e,f as s}from"./termsetting-ad8c4f3a.js";import{d as r}from"./app-2cd97738.js";import"./tslib.es6-c3c2d88f.js";import"path";function a(a){a.render=function(){const t=a.settings.matrix;const e=a.layout;const s=a.dimensions;const r=a.dom.svg.attr("width")?t.duration:0;a.dom.clipRect.attr("x",s.xOffset-1).attr("y",0).attr("width",s.mainw+3).attr("height",s.mainh+500);a.renderSerieses(t,e,s,r);a.renderLabels(t,e,s,r);a.renderDivideByLabel(t,e,s,r);a.dom.colBeam.attr("width",s.dx).attr("height",s.mainh).style("stroke",t.beamStroke);a.dom.rowBeam.attr("width",s.zoomedMainW).attr("height",t.rowh).style("stroke",t.beamStroke)};a.renderSerieses=function(t,e,s,r){if(a.prevUseCanvas!=t.useCanvas){a.dom.seriesesG.selectAll("g").remove()}if(t.useCanvas){const e=a.dom.seriesesG.selectAll("g");const n=a.dom.seriesesG.append("g").datum(this.serieses);a.renderCanvas(this.serieses,n,s,t,e,r)}else{a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);const t=a.dom.seriesesG.selectAll(".sjpp-mass-series-g").data(this.serieses,(t=>t.tw.$id));t.exit().remove();t.each(a.renderSeries);t.enter().append("g").attr("class","sjpp-mass-series-g").style("opacity",.001).each(a.renderSeries);a.mouseout()}a.prevUseCanvas=t.useCanvas};a.renderSeries=async function(t){const e=a.settings.matrix;a.dimensions;const s=r(this);s.attr("transform")?e.duration:0;s.attr("transform",`translate(${t.x},${t.y})`).style("opacity",1);const n=t.cells[t.cells.length-1];t.y+n?.y+e.rowh;const o=s.selectAll("rect").data(t.cells,(t=>t.sample+";;"+t.tw.$id+";;"+t.valueIndex));o.exit().remove();o.each(a.renderCell);o.enter().append("rect").each(a.renderCell)};a.renderCanvas=async function(t,e,s,r,n,o){const i=window.devicePixelRatio<=1?1:window.devicePixelRatio;e.selectAll("*").remove();const l=s.imgW;const c=a.dimensions.mainh;const d=window.OffscreenCanvas?new OffscreenCanvas(l*i,c*i):a.dom.holder.append("canvas").attr("width",i*l).attr("height",i*c).style("opacity",0).node();const m=d.getContext("2d");m.imageSmoothingEnabled=false;m.imageSmoothingQuality="high";m.scale(i,i);for(const e of t){for(const t of e.cells){a.renderCellWithCanvas(m,t,e,r,s,e.y)}}if(window.OffscreenCanvas){const t=new FileReader;t.addEventListener("load",(()=>{n?.remove();a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);e.selectAll("image").remove();e.append("image").attr("xlink:href",t.result).attr("x",s.xMin).attr("width",l).attr("height",c)}),false);const r=await d.convertToBlob({quality:1});t.readAsDataURL(r)}else{n?.remove();a.dom.seriesesG.attr("transform",`translate(${s.xOffset+s.seriesXoffset},${s.yOffset})`);const t=d.toDataURL();e.append("image").attr("width",l).attr("height",c).attr("xlink:href",t);if(!window.OffscreenCanvas)d.remove()}a.mouseout()};a.renderCellWithCanvas=function(t,e,s,r,o,i){if(!e.fill)e.fill=e.$id in a.colorScaleByTermId?a.colorScaleByTermId[e.$id](e.key):n(e);const l=e.x?e.x-o.xMin:0;const c=i?i+e.y:e.y||0;const d=r.useMinPixelWidth?Math.max(e.width||o.colw,o.pxw):e.width||o.colw;const m="height"in e?e.height:r.rowh;t.fillStyle=e.fill;t.fillRect(l,c,d,m)};a.renderCell=function(t){if(!t.fill)t.fill=t.$id in a.colorScaleByTermId?a.colorScaleByTermId[t.$id](t.key):n(t);const e=a.settings.matrix;r(this).attr("x",t.x||0).attr("y",t.y||0).attr("width",t.width||a.dimensions.colw).attr("height","height"in t?Math.max(0,t.height):e.rowh).attr("shape-rendering","crispEdges").attr("stroke-width",0).attr("fill",t.fill)};a.renderLabels=function(t,e,s,n){for(const o of["top","btm","left","right"]){const i=e[o];i.box.style("display",i.display||"").attr("transform",i.attr.boxTransform);const l=i.box.selectAll(".sjpp-matrix-label").data(i.data,i.key);l.exit().remove();l.each(c);l.enter().append("g").attr("class","sjpp-matrix-label").each(c);function c(e){const s=r(this);s.attr("transform",i.attr.labelGTransform);if(!s.select(":scope>text").size())s.append("text");const n=!i.isGroup&&e.grp?.type!=="hierCluster"&&e.tw?.q?.mode=="continuous";const o=i.label(e);const l=s.select(":scope>text").attr("fill","#000");l.attr("display",e.grp?.type==="hierCluster"&&t.clusterRowh<6?"none":i.attr.fontSize<6||o==="configure"?"none":"").attr("font-size",e.grp?.type==="hierCluster"?t.clusterRowh:i.attr.fontSize).attr("text-anchor",i.attr.labelAnchor).attr("transform",i.attr.labelTransform).attr("cursor","pointer").attr(i.attr.textpos.coord,i.attr.textpos.factor*(n?30:0));if(!Array.isArray(o)){l.text(o);l.attr("y",e.grp?.type!=="hierCluster"&&e.tw?.q?.mode=="continuous"?10:e.grp?.type==="hierCluster"?.3*t.clusterRowh:0)}else{l.text("");const t=l.selectAll("tspan").data(o);t.enter().append("tspan").attr("class",d).attr("dx",m).attr("font-size",p).text(f)}l.on("mouseover",o==="configure"?()=>l.attr("opacity",.5):null).on("mouseout",o==="configure"?()=>l.attr("opacity",0):null);const c=s.select(".sjpp-matrix-cell-axis").size()&&true;if(n&&o){if(!c){s.append("g").attr("class","sjpp-matrix-cell-axis").attr("shape-rendering","crispEdges")}const r=s.select(".sjpp-matrix-cell-axis");r.selectAll("*").remove();[e.counts.maxval,e.counts.minval];if(t.transpose);a.dimensions;const n=!t.transpose?0:e.tw.settings.gap-1-e.labelOffset;const o=!t.transpose?e.tw.settings.gap-1-e.labelOffset:0;r.attr("shape-rendering","crispEdges").attr("transform",`translate(${n},${o})`).call(i.attr.axisFxn(e.scales.full.domain(e.scales.tickValues)).tickValues(e.scales.tickValues))}else if(c){s.select(".sjpp-matrix-cell-axis").remove()}}function d(t){return t.cls}function m(t){return t.dx}function p(t){return t.fontSize||i.attr.fontSize}function f(t){return t.text}}};a.colLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;t.labelOffset=.8*r.colw;const n=t.grpIndex*s.colgspace+t.totalIndex*r.dx+t.labelOffset+t.totalHtAdjustments;const o=0;return`translate(${n+r.seriesXoffset},${o})`};a.colGrpLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*s.colgspace+t.prevGrpTotalIndex*r.dx+n*r.dx/2+s.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(${o+r.seriesXoffset},0)`};a.rowLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=0;t.labelOffset=.7*(t.grp.type=="hierCluster"?s.clusterRowh:s.rowh);const o=t.grpIndex*s.rowgspace+t.totalIndex*r.dy+t.labelOffset+t.totalHtAdjustments;return`translate(${n},${o})`};a.rowGrpLabelGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=(t.processedLst||t.grp.lst).length;const o=t.grpIndex*s.rowgspace+t.prevGrpTotalIndex*r.dy+n*r.dy/2+s.grpLabelFontSize/2+t.totalHtAdjustments;return`translate(0,${o})`};a.rowAxisGTransform=(t,e)=>{const s=a.settings.matrix;const r=a.dimensions;const n=0;const o=t.grpIndex*s.rowgspace+t.totalIndex*r.dy+.7*s.rowh+t.totalHtAdjustments;return`translate(${n},${o})`};a.renderDivideByLabel=async(r,n,o)=>{a.dom.mainG.selectAll(".sjpp-matrix-divide-by-label").remove();if(!a.config.divideBy)return;const i=a.config.divideBy?.term.name||"";const l=i.length<=r.rowlabelmaxchars?i:i.slice(0,r.rowlabelmaxchars)+"…";const c=!r.transpose?[n.left,n.right]:[n.top,n.bottom];const d=c.find((t=>!t.isGroup))?.box;const m=(r.collabelpos=="top"?o.mainh+r.collabelmaxchars:-r.collabelmaxchars)+8;const p=r.rowlabelpos=="left"?"end":"start";const f=r.controlLabels;const g=d.append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${m})`);g.append("text").attr("text-anchor",p).attr("font-style","italic").attr("y",-20).text(`${f.Samples} grouped by`);const h=d.datum({tw:a.config.divideBy}).append("g").attr("class","sjpp-matrix-divide-by-label").attr("transform",`translate(0, ${m})`);const x=h.append("text").attr("text-anchor",p).attr("font-weight",600).text(l).on("click",((t,e)=>{w.showMenu(t,x.node())}));h.append("title").text(`${f.Samples} are grouped by this gene or variable. Click to edit.`);const u=[];const y=t(a.config.divideBy.term)?"ranges":"values";if(a.config.legendValueFilter.lst?.find((t=>t.legendGrpName==a.config.divideBy.term.id||t.legendGrpName==a.config.divideBy.term.name))?.tvs[y]?.length){u.push({label:`Show filtered ${f.samples}`,callback:a.showDeletedSampleGroups})}const w=await e({menuOptions:"{edit,replace,remove}",customMenuOptions:u,vocabApi:a.app.vocabApi,vocab:a.state.vocab,holder:h,debug:a.opts.debug,usecase:{target:"matrix"},getBodyParams:()=>{const t=a.termOrder.filter((t=>t.tw.term.type==="geneVariant")).map((t=>t.tw.term.chr?`${t.tw.term.chr}:${t.tw.term.start}-${t.tw.term.stop}`:t.tw.term.gene||t.tw.term.name));return{currentGeneNames:t}},callback:async e=>{if(a.dom.loadingDiv&&a.dom.svg){a.dom.loadingDiv.selectAll("*").remove();a.dom.loadingDiv.html("").style("display","").style("position","relative").style("left","45%");a.dom.loadingDiv.html("Processing data ...");a.dom.svg.style("opacity",.1).style("pointer-events","none")}if(e&&!e.q)throw"data.q{} missing from pill callback";if(e?.term&&t(e.term)){e.q={...e.q,mode:"discrete"}}if(e)await s(e,a.app.vocabApi);await w.main(e?e:{term:null,q:null});d.datum({tw:e});a.app.dispatch({type:"plot_edit",id:a.id,config:{divideBy:e,legendValueFilter:a.mayRemoveTvsEntry(a.config.divideBy)}})}});const v={term:a.config.divideBy.term,q:a.config.divideBy.q};if(a.config.divideBy.$id)v.$id=a.config.divideBy.$id;w.main(v)};a.adjustSvgDimensions=async function(t){const e=a.settings.matrix;const s=a.settings.hierCluster||{};const r=s.yDendrogramHeight||0;const n=s.xDendrogramHeight||0;const i=a.dimensions;const l=a.dom.svg.attr("width")?e.duration:0;await o(t==e.transpose?l:e.duration);const c=a.layout;const d=c.top.box.node().getBBox();const m=c.btm.box.node().getBBox();const p=c.left.box.node().getBBox();const f=c.right.box.node().getBBox();const g=a.dom.legendG.node().getBBox();a.dom.seriesesG.node().getBBox();i.extraWidth=p.width+f.width+e.margin.left+e.margin.right+e.rowlabelgap*2;i.extraHeight=d.height+m.height+e.margin.top+e.margin.bottom+e.collabelgap*2;i.svgw=i.mainw+i.extraWidth+n;i.svgh=i.mainh+i.extraHeight+g.height+20+e.scrollHeight+r;a.dom.svg.attr("width",i.svgw).attr("height",i.svgh);let h=a.type=="hierCluster"?0:p.width;if(s.xDendrogramHeight){a.dom.termLabelG.selectAll(".sjpp-matrix-label").each((function(t){if(t.grp.type!=="hierCluster")return;const e=this.getBBox();if(e.width>h){h=e.width;t.label.length}}))}const x=-c.left.offset+n+h;const u=!s.xDendrogramHeight?0:Math.max(p.width-(s.xDendrogramHeight+h),0);const y=(c.top.display=="none"?0:d.height)-c.top.offset+r;a.dom.mainG.attr("transform",`translate(${x+u},${y})`);a.dom.clipRect.attr("y",-y).attr("height",i.mainh+500+y);const w=i.xOffset+(e.transpose?20:0);const v=i.yOffset+i.mainh+e.collabelgap+(c.btm.display=="none"?0:m.height)+20;a.dom.legendG.attr("transform",`translate(${w},${v})`);if(s.xDendrogramHeight){const t=h+u-c.left.offset+i.xOffset-i.dx/2;a.dom.hcClipRect.attr("x",t+n+i.dx/2).attr("y",0).attr("width",i.mainw+3).attr("height",i.mainh+s.yDendrogramHeight+500);a.topDendroX=t+i.seriesXoffset;a.dom.topDendrogram.attr("transform",`translate(${a.topDendroX}, 0)`);const r=c.top.display=="none"?0:d.height+e.collabelgap;a.dom.leftDendrogram.attr("transform",`translate(${t-h-10}, ${r})`)}}}function n(t){if(t.fill)return t.fill;const e=t.class||Array.isArray(t.values)&&t.values[0].class;return e?mclass[e].color:"#555"}function o(t){return new Promise((e=>setTimeout(e,t)))}export{a as setRenderers};
@@ -1 +1 @@
1
- import{getEmptyCell as e,setCellProps as t,maySetEmptyCell as s}from"./matrix.cells-914dd0c6.js";import"./termsetting-33ea66f1.js";function i(i){const n=this.settings.matrix;const o=[];const{colw:l,dx:d,dy:a,xMin:c,xMax:p}=this.dimensions;const u=this.config.divideBy||{};const g="id"in u?u.id:u.name;const f={};this.colorScaleByTermId={};for(const i of this.termOrder){const r=i.tw.$id;const u="id"in i.tw.term?i.tw.term.id:i.tw.term.name;const m=u===g;const h=[];const v=i.grp.type=="hierCluster"?n.clusterRowh:a;const y=i.grp.type=="hierCluster"?0:i.totalHtAdjustments;const w=n.transpose?0:i.totalIndex*v+i.visibleGrpIndex*n.rowgspace+y;const x=(i.tw.settings?.gap||0)+w;const C={t:i,tw:i.tw,cells:[],y:w,hoverY0:x,hoverY1:x+(i.tw.settings?.barh||v)};for(const o of this.unfilteredSampleOrder){const{totalIndex:g,grpIndex:v,row:y}=o;C.x=!n.transpose?0:i.totalIndex*d+i.visibleGrpIndex*n.colgspace;const x=y[r];const $={s:o,sample:y.sample,tw:i.tw,term:i.tw.term,termid:u,$id:r,totalIndex:g,grpIndex:v,row:y,t:i,seriesY:w};if(!x){if(!o.grp.isExcluded&&(n.useCanvas||o.grp)){const t=e($,n,this.dimensions);C.cells.push(t)}continue}const I=x.key;const G=x.filteredValues||x.values||[x.value];const E=n.cellEncoding=="oncoprint"?1:G.length;const b=!n.transpose?n.rowh/E:l;const O=!n.transpose?l:l/G.length;const S=[];if(!x||!x.renderedValues?.length){if(!o.grp.isExcluded&&(n.useCanvas||o.grp)){const t=e($,n,this.dimensions);C.cells.push(t)}continue}for(const[e,s]of G.entries()){const l=Object.assign({key:I,siblingCells:S},$);l.valueIndex=e;let u;if(typeof i.tw.setCellProps=="function"){u=i.tw.setCellProps(l,x,s,n,i,this,O,b,d,a,e)}else{const r=i.grp.type=="hierCluster"?t["hierCluster"]:i.tw.term.type=="geneVariant"&&(i.tw?.q?.type=="predefined-groupset"||i.tw?.q?.type=="custom-groupset")?t["categorical"]:t[i.tw.term.type];u=r(l,i.tw,x,s,n,i,this,O,b,d,a,e)}if(!n.useCanvas&&(l.x+l.width<c||l.x-l.width>p))continue;if(u){for(const e of[f,o.grp.legendGroups]){if(!e)continue;if(!e[u.group]){e[u.group]={ref:u.ref,values:{},order:u.order,$id:r,origin:u.entry.origin};if(u.entry.dt)e[u.group].dt=[u.entry.dt]}const t=e[u.group];if(t.dt&&!t.dt.includes(u.entry.dt))t.dt.push(u.entry.dt);const s=u.entry.origin?u.entry.origin+u.value:u.value;if(!t.values[s]){t.values[s]=JSON.parse(JSON.stringify(u.entry));if(u.entry.scale)t.values[s].scale=u.entry.scale}if(!t.values[s].samples)t.values[s].samples=new Set;t.values[s].samples.add(y.sample);if(m){t.values[u.value].isExcluded=o.grp.isExcluded}}}if(!o.grp.isExcluded){if(x.renderedValues.includes(s))C.cells.push(l);S.push(l)}}if(n.showGrid=="rect"&&!o.grp.isExcluded){const t=i.grp.type=="hierCluster"?e($,n,this.dimensions):s[i.tw.term.type]?.(S,$,n,this.dimensions);if(t)h.push(t)}}if(h.length)C.cells.unshift(...h);if(C.cells.length)o.push(C)}r(f,this);this.legendData=this.getLegendData(f,i.refs,this);for(const e of this.sampleGroups){e.legendData=this.getLegendData(e.legendGroups,i.refs,this)}return o}function r(e,t){for(const s of t.config.legendValueFilter.lst){if(s.tvs.term.type=="categorical"&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}else if(s.tvs.term.type=="geneVariant"&&!e[s.legendGrpName]){e[s.legendGrpName]={ref:{},values:{},dt:[s.tvs.values[0].dt],origin:s.tvs.values[0].origin}}else if((s.tvs.term.type=="integer"||s.tvs.term.type=="float")&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}}}var n=Object.freeze({__proto__:null,getSerieses:i});export{n as m};
1
+ import{getEmptyCell as e,setCellProps as t,maySetEmptyCell as s}from"./matrix.cells-eb4110a7.js";import"./termsetting-ad8c4f3a.js";function i(i){const n=this.settings.matrix;const o=[];const{colw:l,dx:d,dy:a,xMin:c,xMax:p}=this.dimensions;const u=this.config.divideBy||{};const g="id"in u?u.id:u.name;const f={};this.colorScaleByTermId={};for(const i of this.termOrder){const r=i.tw.$id;const u="id"in i.tw.term?i.tw.term.id:i.tw.term.name;const m=u===g;const h=[];const v=i.grp.type=="hierCluster"?n.clusterRowh:a;const y=i.grp.type=="hierCluster"?0:i.totalHtAdjustments;const w=n.transpose?0:i.totalIndex*v+i.visibleGrpIndex*n.rowgspace+y;const x=(i.tw.settings?.gap||0)+w;const C={t:i,tw:i.tw,cells:[],y:w,hoverY0:x,hoverY1:x+(i.tw.settings?.barh||v)};for(const o of this.unfilteredSampleOrder){const{totalIndex:g,grpIndex:v,row:y}=o;C.x=!n.transpose?0:i.totalIndex*d+i.visibleGrpIndex*n.colgspace;const x=y[r];const $={s:o,sample:y.sample,tw:i.tw,term:i.tw.term,termid:u,$id:r,totalIndex:g,grpIndex:v,row:y,t:i,seriesY:w};if(!x){if(!o.grp.isExcluded&&(n.useCanvas||o.grp)){const t=e($,n,this.dimensions);C.cells.push(t)}continue}const I=x.key;const G=x.filteredValues||x.values||[x.value];const b=n.cellEncoding=="oncoprint"?1:G.length;const E=!n.transpose?n.rowh/b:l;const O=!n.transpose?l:l/G.length;const S=[];if(!x||!x.renderedValues?.length){if(!o.grp.isExcluded&&(n.useCanvas||o.grp)){const t=e($,n,this.dimensions);C.cells.push(t)}continue}for(const[e,s]of G.entries()){const l=Object.assign({key:I,siblingCells:S},$);l.valueIndex=e;let u;if(typeof i.tw.setCellProps=="function"){u=i.tw.setCellProps(l,x,s,n,i,this,O,E,d,a,e)}else{const r=i.grp.type=="hierCluster"?t["hierCluster"]:i.tw.term.type=="geneVariant"&&(i.tw?.q?.type=="predefined-groupset"||i.tw?.q?.type=="custom-groupset")?t["categorical"]:t[i.tw.term.type];u=r(l,i.tw,x,s,n,i,this,O,E,d,a,e)}if(!n.useCanvas&&(l.x+l.width<c||l.x-l.width>p))continue;if(u){for(const e of[f,o.grp.legendGroups]){if(!e)continue;if(!e[u.group]){e[u.group]={ref:u.ref,values:{},order:u.order,$id:r,origin:u.entry.origin};if(u.entry.dt)e[u.group].dt=[u.entry.dt]}const t=e[u.group];if(t.dt&&!t.dt.includes(u.entry.dt))t.dt.push(u.entry.dt);const s=u.entry.origin?u.entry.origin+u.value:u.value;if(!t.values[s]){t.values[s]=JSON.parse(JSON.stringify(u.entry));if(u.entry.scale)t.values[s].scale=u.entry.scale}if(!t.values[s].samples)t.values[s].samples=new Set;t.values[s].samples.add(y.sample);if(m){t.values[u.value].isExcluded=o.grp.isExcluded}}}if(!o.grp.isExcluded){if(x.renderedValues.includes(s))C.cells.push(l);S.push(l)}}if(n.showGrid=="rect"&&!o.grp.isExcluded){const t=i.grp.type=="hierCluster"?e($,n,this.dimensions):s[i.tw.term.type]?.(S,$,n,this.dimensions);if(t)h.push(t)}}if(h.length)C.cells.unshift(...h);if(C.cells.length)o.push(C)}r(f,this);this.legendData=this.getLegendData(f,i.refs,this);for(const e of this.sampleGroups){e.legendData=this.getLegendData(e.legendGroups,i.refs,this)}return o}function r(e,t){for(const s of t.config.legendValueFilter.lst){if(s.tvs.term.type=="categorical"&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}else if(s.tvs.term.type=="geneVariant"&&!e[s.legendGrpName]){e[s.legendGrpName]={ref:{},values:{},dt:[s.tvs.values[0].dt],origin:s.tvs.values[0].origin}}else if((s.tvs.term.type=="integer"||s.tvs.term.type=="float")&&!e[s.tvs.term.$id]){e[s.tvs.term.$id]={ref:{},values:{},$id:s.tvs.term.$id}}}}var n=Object.freeze({__proto__:null,getSerieses:i});export{n as m};
@@ -1 +1 @@
1
- import{b as e}from"./termsetting-33ea66f1.js";import{at as t,ak as r,ap as s,bE as i,bD as n}from"./app-b369b169.js";import"./tslib.es6-c3c2d88f.js";import"path";function o(t,r,s,i={}){const n=r;a(n);if(t.config.chartType=="hierCluster"&&t.config.settings.hierCluster.clusterSamples){return t.hcSampleSorter}if(n.sortSamplesBy=="asListed"){return(e,r)=>t.asListedSampleOrder.indexOf(e.sample)-t.asListedSampleOrder.indexOf(r.sample)}if(n.sortSamplesBy=="name"){return l}const o=n.sortOptions[n.sortSamplesBy];if(!o)throw`unsupported s.sortSamplesBy='${n.sortSamplesBy}'`;t.selectedTermsToSortAgainst=t.termOrder.filter((e=>e.tw.sortSamples));const p=t.selectedTermsToSortAgainst.map((e=>e.tw)).sort(((e,t)=>e.sortSamples.priority-t.sortSamples.priority));const m=[];const b=o.sortPriority;if(b){for(const e of p){const t=structuredClone(e);if(t.sortSamples?.by){m.push(Object.assign({},t));continue}for(const e of b){if(i.skipSorter?.(e,t))continue;if(!e.types.includes(t.term.type))continue;for(const r of e.tiebreakers){const e=Object.assign(structuredClone(t.sortSamples||{}),r);const s=Object.assign(structuredClone(t),{sortSamples:e});m.push(s)}}}}if(b){for(const e of b){for(const r of t.termOrder){if(p.find((e=>e.$id===r.tw.$id)))continue;if(i.skipSorter?.(e,r.tw))continue;if(!e.types.includes(r.tw.term.type))continue;for(const t of e.tiebreakers){m.push(Object.assign({},r.tw,{sortSamples:t}))}}}}else{const r=t.app.vocabApi.vocab?.dslabel=="PNET"?[]:t.termOrder.filter((t=>!t.tw.sortSamples&&e(t.tw.term.type)&&!p.find((e=>e.$id===t.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"values"}},e.tw)));const s=t.app.vocabApi.vocab?.dslabel=="PNET"?[]:t.termOrder.filter((t=>!t.tw.sortSamples&&!e(t.tw.term.type)&&!p.find((e=>e.$id===t.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"hits"}},e.tw)));m.push(...s,...r)}if(i.tiebreaker)m.push(i.tiebreaker);m.push(...n.sortSamplesTieBreakers.map((e=>e)));const h=[];t.maxSampleSet=new Set;for(const e of m){if(typeof e==="function")h.push(e);else if(e.$id=="sample")h.push(l);else if(e.sortSamples.by=="hits")h.push(u(e,t,s));else if(e.term.type!="geneVariant")h.push(d(e,t,s));else if(e.sortSamples.by=="values")h.push(d(e,t,s));else if(e.sortSamples.by=="dt")h.push(f(e));else if(e.sortSamples.by=="class")h.push(c(e,t));else throw`unsupported sortSamplesBy entry by='${e.sortSamples.by}'`}if(!h.find((e=>e.$id==="sample"))){h.push(l)}return(e,t)=>{for(const r of h){const s=r(e,t);if(s!==0)return s}}}function a(e){if(!e.sortOptions)e.sortOptions="custom";if(["selectedTerms","class","dt","hits"].includes(e.sortSamplesBy))e.sortSamplesBy="custom"}function l(e,t){if(e._ref_.label&&t._ref_.label){return e._ref_.label<t._ref_.label?-1:e._ref_.label>t._ref_.label?1:0}if(!e.sample&&!t.sample&&e.row.sample){return e.row.sample<t.row.sample?-1:e.row.sample>t.row.sample?1:0}return e.sample<t.sample?-1:e.sample>t.sample?1:0}function u(e,t,r,s){const{$id:i,sortSamples:n}=e;const o={};for(const e of r){if(!o[e.sample])o[e.sample]=0;if(i in e){o[e.sample]+=e[i].countedValues?.length||0}}return(e,t)=>o[e.sample]==o[t.sample]?0:o[e.sample]>o[t.sample]?-1:1}function d(e,t,r,s){const{$id:i,sortSamples:n}=e;const o=t.termOrder.find((e=>e.tw.$id===i));if(o.grp.type=="hierCluster"){return(e,t)=>{if(i in e&&i in t){return e[i]?.values[0].value-t[i]?.values[0].value}if(i in e)return-1;if(i in t)return 1;return 0}}if(o.tw.q?.mode=="continuous"){return(e,t)=>{if(i in e&&i in t){return e[i]?.value-t[i]?.value}if(i in e)return-1;if(i in t)return 1;return 0}}const a=[];if(o?.term?.values){for(const e of term.values){a.push(e.key)}a.sort(((e,t)=>term.values[e].order<term.values[e].order?-1:1))}else if(o?.ref?.bins){a.push(...o.ref.bins.map((e=>e.name)))}else{for(const e of r){if(!(i in e))continue;const t=e[i].override?.key||e[i].key;if(a.indexOf(t)==-1)a.push(t)}}return(e,t)=>{if(!e[i]&&!t[i])return 0;if(!e[i])return t[i].override?-1:1;if(!t[i])return e[i].override?1:-1;if(e[i].override&&t[i].override){const r="order"in e[i].override?e[i].override.order:a.indexOf(e[i].override.key);const s="order"in t[i].override?t[i].override.order:a.indexOf(t[i].override.key);return r-s}if(!e[i].override&&!t[i].override){return a.indexOf(e[i].key)-a.indexOf(t[i].key)}if(!e[i].override)return-1;if(!t[i].override)return 1;return 0}}function f(e,t,r,s){const{$id:i,sortSamples:n,term:o}=e;const a=n.order;const l=a.length+1;const u=new Map;function d(e){if(!(i in e)){u.set(e.sample,l);return}if(n.filter&&!p(e[i].values,n.filter.values)){u.set(e.sample,l);return}const t=e[i].values.map((e=>a.indexOf(e.dt))).filter((e=>e!==-1));u.set(e.sample,t.length?Math.min(...t):l)}return(e,t)=>{if(!u.has(e.sample))d(e);if(!u.has(t.sample))d(t);return u.get(e.sample)-u.get(t.sample)}}function c(e,t,r,s){const{$id:i,sortSamples:n}=e;if(n.disabled)return()=>0;const o=t.config.settings.matrix;const a=o.showMatrixMutation!="none"&&!o.allMatrixMutationHidden;const l=o.showMatrixCNV!="none"&&!o.allMatrixCNVHidden;const u=n.order.filter(a&&l?e=>!o.hiddenVariants.includes(e):!a&&!l?()=>false:a?e=>o.mutationClasses.includes(e)&&!o.hiddenVariants.includes(e):l?e=>e.startsWith("CNV_")&&!o.hiddenVariants.includes(e):e=>!e.startsWith("CNV_"));if(!u.length&&n.ignoreEmptyFilteredOrder)return()=>0;const d="z";const f=new Map;function c(e){if(!(i in e)){f.set(e.sample,d);return}const t=e[i].renderedValues||e[i].filteredValues||e[i].values;if(n.filter&&!p(t,n.filter.values)){f.set(e.sample,d);return}const r=t.map((e=>e.class));if(!u.find((e=>r.includes(e)))){f.set(e.sample,d);return}else if(!n.isOrdered){f.set(e.sample,"1")}else{const t=u.map((e=>r.includes(e)?"1":"x"));f.set(e.sample,t)}}return(e,t)=>{if(!f.has(e.sample))c(e);if(!f.has(t.sample))c(t);const r=f.get(e.sample);const s=f.get(t.sample);return r<s?-1:r>s?1:0}}function p(e,t){for(const r of e){for(const e of t){if((!e.dt||r.dt===e.dt)&&(!e.mclassLst||e.mclassLst.includes(r.class))&&(!e.class||e.class===r.class)&&(!e.origin||r.origin===e.origin)){return true}}}}function m(e,t,r){if(r?.type=="hierCluster")return e.hcTermSorter;if(t.sortTermsBy=="asListed"){return(e,t)=>e.index-t.index}if(t.sortTermsBy!="sampleCount"){throw`unsupported s.sortTermsBy='${t.sortTermsBy}'`}return(t,r)=>{if(e.app.vocabApi.vocab?.dslabel==="GDC"){if(t.tw?.term?.id&&!r.tw?.term?.id)return-1;if(!t.tw?.term?.id&&r.tw?.term?.id)return 1}if(r.counts.samples!==t.counts.samples)return r.counts.samples-t.counts.samples;if(r.counts.hits!==t.counts.hits)return r.counts.hits-t.counts.hits;return t.index-r.index}}function b(e,o={},a){const l=a||e?.matrix?.settings||{};const u=Object.assign({sample:"sample"},o,l.controlLabels||{});const d={};if(l.sortPriority){const e=1;Object.values(d).forEach((t=>{if(t.order>=e)t.order+=1}));d.custom={label:l.sortPriority.label||"Custom sort",value:"custom",order:e,sortPriority:l.sortPriority}}d.a=l.sortOptions?.a?v(l.sortOptions.a,u):{value:"a",order:1,sortPriority:[{label:`For each gene mutation, sort ${u.samples} by matching data`,types:["geneVariant"],tiebreakers:[{skip:!l.mutationClasses.includes("Fuserna"),label:`${u.Samples} with Fusion RNASeq > without`,filter:{values:[{dt:t}]},by:"class",isOrdered:false,order:["Fuserna"]},{label:`${u.Samples} with truncating mutations > without`,filter:{values:[{dt:r}]},by:"class",isOrdered:false,order:[...l.truncatingMutations],notUsed:[]},{label:`${u.Samples} with CNV data > without`,mayToggle:true,filter:{values:[{dt:s}]},by:"class",isOrdered:true,disabled:true,order:[i,n]},{disabled:false,mayToggle:true,label:`${u.Samples} with protein-changing mutations > without`,filter:{values:[{dt:r}]},by:"class",isOrdered:false,order:l.proteinChangingMutations.filter((e=>!l.truncatingMutations.includes(e))),notUsed:l.truncatingMutations}]},{label:`For each dictionary variable, sort ${u.samples} by matching data`,types:["categorical","integer","float","survival"],tiebreakers:[{label:"Values",by:"values"}]}]};d.name={label:`By ${u.sample} name, ID, or label`,value:"name",order:Object.values(d).length};return d}function h(e){const t=e.settings.matrix;if(t.sortSampleGrpsBy=="hits")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;return t.totalCountedValues-e.totalCountedValues};if(t.sortSampleGrpsBy=="sampleCount")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;if(e.lst.length==t.lst.length){return y(e,t)}return t.lst.length-e.lst.length};if(!e.config.divideBy?.$id)return y;const r=e.data.refs.byTermId[e.config.divideBy.$id];if(r&&!r.keyOrder)r.keyOrder=r.bins?r.bins.map((e=>e.name)):[];const s=e.data.refs.byTermId[e.config.divideBy.$id]?.keyOrder;if(!s)return y;return(e,t)=>{e.order=s.indexOf(e.id);if(e.order==-1)delete e.order;t.order=s.indexOf(t.id);if(t.order==-1)delete t.order;if("order"in e&&"order"in t)return e.order-t.order;if("order"in e)return-1;if("order"in t)return 1;if(e.tw?.term?.values?.[e.id]?.order&&t.tw?.term?.values?.[t.id]?.order){return e.tw.term.values[e.id].order-t.tw.term.values[t.id].order}return y(e,t)}}function y(e,t){return e.name<t.name?-1:1}function g(e){const t=e.settings.matrix;const r=t.sortOptions[t.sortSamplesBy].sortPriority?t.sortOptions[t.sortSamplesBy]:t.sortOptions.a;const s=[];r.sortPriority.forEach((e=>{if(e.types.includes("geneVariant")){e.tiebreakers.forEach((e=>{if(e.by=="class"&&e.order){s.push(...e.order.filter((e=>e!=="WT"&&e!=="Blank")))}}))}}));const i=(e,t)=>{const r=s.indexOf(e.class);const i=s.indexOf(t.class);return r==-1&&i==-1?0:s.indexOf(e.class)==-1?1:s.indexOf(t.class)==-1?-1:s.indexOf(e.class)-s.indexOf(t.class)};return i}function v(e,o){const a=o;let l;for(const t of e.sortPriority){if(t.types.includes("categorical")){if(!t.label)t.label=`For each dictionary variable, sort ${a.samples} by matching data`;continue}if(!t.types?.includes("geneVariant"))continue;if(!l){l=t;if(!t.label)t.label=`For each gene mutation, sort ${a.samples} by matching data`}else{l.tiebreakers.push(...t.tiebreakers);t.toBeDeleted=true}}for(const e of l.tiebreakers){if(e.filter?.values?.find((e=>e.dt==t))){const t={label:`${a.Samples} with Fusion RNASeq > without`,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}else if(e.filter?.values?.find((e=>e.dt==r))){const t=e.order.includes(i)||e.order.includes(n)?`${a.Samples} with SSM + CNV > SSM only`:`${a.Samples} with mutations`;const r={label:t,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,r,e)}else if(e.order.length==2&&e.order.includes(i)&&e.order.includes(n)){const t={label:`${a.Samples} with CNV only > without`,filter:{values:[{dt:s}]},by:"class",isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}}e.sortPriority=e.sortPriority.filter((e=>!e.toBeDeleted));return e}export{g as getMclassSorter,h as getSampleGroupSorter,o as getSampleSorter,b as getSortOptions,m as getTermSorter,v as reshapeSortPriority};
1
+ import{b as e}from"./termsetting-ad8c4f3a.js";import{at as t,ak as r,ap as s,bE as i,bD as n}from"./app-2cd97738.js";import"./tslib.es6-c3c2d88f.js";import"path";function o(t,r,s,i={}){const n=r;a(n);if(t.config.chartType=="hierCluster"&&t.config.settings.hierCluster.clusterSamples){return t.hcSampleSorter}if(n.sortSamplesBy=="asListed"){return(e,r)=>t.asListedSampleOrder.indexOf(e.sample)-t.asListedSampleOrder.indexOf(r.sample)}if(n.sortSamplesBy=="name"){return l}const o=n.sortOptions[n.sortSamplesBy];if(!o)throw`unsupported s.sortSamplesBy='${n.sortSamplesBy}'`;t.selectedTermsToSortAgainst=t.termOrder.filter((e=>e.tw.sortSamples));const p=t.selectedTermsToSortAgainst.map((e=>e.tw)).sort(((e,t)=>e.sortSamples.priority-t.sortSamples.priority));const m=[];const h=o.sortPriority;if(h){for(const e of p){const t=structuredClone(e);if(t.sortSamples?.by){m.push(Object.assign({},t));continue}for(const e of h){if(i.skipSorter?.(e,t))continue;if(!e.types.includes(t.term.type))continue;for(const r of e.tiebreakers){const e=Object.assign(structuredClone(t.sortSamples||{}),r);const s=Object.assign(structuredClone(t),{sortSamples:e});m.push(s)}}}}if(h){for(const e of h){for(const r of t.termOrder){if(p.find((e=>e.$id===r.tw.$id)))continue;if(i.skipSorter?.(e,r.tw))continue;if(!e.types.includes(r.tw.term.type))continue;for(const t of e.tiebreakers){m.push(Object.assign({},r.tw,{sortSamples:t}))}}}}else{const r=t.app.vocabApi.vocab?.dslabel=="PNET"?[]:t.termOrder.filter((t=>!t.tw.sortSamples&&e(t.tw.term.type)&&!p.find((e=>e.$id===t.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"values"}},e.tw)));const s=t.app.vocabApi.vocab?.dslabel=="PNET"?[]:t.termOrder.filter((t=>!t.tw.sortSamples&&!e(t.tw.term.type)&&!p.find((e=>e.$id===t.tw.$id)))).map((e=>Object.assign({sortSamples:{by:"hits"}},e.tw)));m.push(...s,...r)}if(i.tiebreaker)m.push(i.tiebreaker);m.push(...n.sortSamplesTieBreakers.map((e=>e)));const b=[];t.maxSampleSet=new Set;for(const e of m){if(typeof e==="function")b.push(e);else if(e.$id=="sample")b.push(l);else if(e.sortSamples.by=="hits")b.push(u(e,t,s));else if(e.term.type!="geneVariant")b.push(d(e,t,s));else if(e.sortSamples.by=="values")b.push(d(e,t,s));else if(e.sortSamples.by=="dt")b.push(f(e));else if(e.sortSamples.by=="class")b.push(c(e,t));else throw`unsupported sortSamplesBy entry by='${e.sortSamples.by}'`}if(!b.find((e=>e.$id==="sample"))){b.push(l)}return(e,t)=>{for(const r of b){const s=r(e,t);if(s!==0)return s}}}function a(e){if(!e.sortOptions)e.sortOptions="custom";if(["selectedTerms","class","dt","hits"].includes(e.sortSamplesBy))e.sortSamplesBy="custom"}function l(e,t){if(e._ref_.label&&t._ref_.label){return e._ref_.label<t._ref_.label?-1:e._ref_.label>t._ref_.label?1:0}if(!e.sample&&!t.sample&&e.row.sample){return e.row.sample<t.row.sample?-1:e.row.sample>t.row.sample?1:0}return e.sample<t.sample?-1:e.sample>t.sample?1:0}function u(e,t,r,s){const{$id:i,sortSamples:n}=e;const o={};for(const e of r){if(!o[e.sample])o[e.sample]=0;if(i in e){o[e.sample]+=e[i].countedValues?.length||0}}return(e,t)=>o[e.sample]==o[t.sample]?0:o[e.sample]>o[t.sample]?-1:1}function d(e,t,r,s){const{$id:i,sortSamples:n}=e;const o=t.termOrder.find((e=>e.tw.$id===i));if(o.grp.type=="hierCluster"){return(e,t)=>{if(i in e&&i in t){return e[i]?.values[0].value-t[i]?.values[0].value}if(i in e)return-1;if(i in t)return 1;return 0}}if(o.tw.q?.mode=="continuous"){return(e,t)=>{if(i in e&&i in t){return e[i]?.value-t[i]?.value}if(i in e)return-1;if(i in t)return 1;return 0}}const a=[];if(o?.term?.values){for(const e of term.values){a.push(e.key)}a.sort(((e,t)=>term.values[e].order<term.values[e].order?-1:1))}else if(o?.ref?.bins){a.push(...o.ref.bins.map((e=>e.name)))}else{for(const e of r){if(!(i in e))continue;const t=e[i].override?.key||e[i].key;if(a.indexOf(t)==-1)a.push(t)}}return(e,t)=>{if(!e[i]&&!t[i])return 0;if(!e[i])return t[i].override?-1:1;if(!t[i])return e[i].override?1:-1;if(e[i].override&&t[i].override){const r="order"in e[i].override?e[i].override.order:a.indexOf(e[i].override.key);const s="order"in t[i].override?t[i].override.order:a.indexOf(t[i].override.key);return r-s}if(!e[i].override&&!t[i].override){return a.indexOf(e[i].key)-a.indexOf(t[i].key)}if(!e[i].override)return-1;if(!t[i].override)return 1;return 0}}function f(e,t,r,s){const{$id:i,sortSamples:n,term:o}=e;const a=n.order;const l=a.length+1;const u=new Map;function d(e){if(!(i in e)){u.set(e.sample,l);return}if(n.filter&&!p(e[i].values,n.filter.values)){u.set(e.sample,l);return}const t=e[i].values.map((e=>a.indexOf(e.dt))).filter((e=>e!==-1));u.set(e.sample,t.length?Math.min(...t):l)}return(e,t)=>{if(!u.has(e.sample))d(e);if(!u.has(t.sample))d(t);return u.get(e.sample)-u.get(t.sample)}}function c(e,t,r,s){const{$id:i,sortSamples:n}=e;if(n.disabled)return()=>0;const o=t.config.settings.matrix;const a=o.showMatrixMutation!="none"&&!o.allMatrixMutationHidden;const l=o.showMatrixCNV!="none"&&!o.allMatrixCNVHidden;const u=n.order.filter(a&&l?e=>!o.hiddenVariants.includes(e):!a&&!l?()=>false:a?e=>o.mutationClasses.includes(e)&&!o.hiddenVariants.includes(e):l?e=>e.startsWith("CNV_")&&!o.hiddenVariants.includes(e):e=>!e.startsWith("CNV_"));if(!u.length&&n.ignoreEmptyFilteredOrder)return()=>0;const d="z";const f=new Map;function c(e){if(!(i in e)){f.set(e.sample,d);return}const t=e[i].renderedValues||e[i].filteredValues||e[i].values;if(n.filter&&!p(t,n.filter.values)){f.set(e.sample,d);return}const r=t.map((e=>e.class));if(!u.find((e=>r.includes(e)))){f.set(e.sample,d);return}else if(!n.isOrdered){f.set(e.sample,"1")}else{const t=u.map((e=>r.includes(e)?"1":"x"));f.set(e.sample,t)}}return(e,t)=>{if(!f.has(e.sample))c(e);if(!f.has(t.sample))c(t);const r=f.get(e.sample);const s=f.get(t.sample);return r<s?-1:r>s?1:0}}function p(e,t){for(const r of e){for(const e of t){if((!e.dt||r.dt===e.dt)&&(!e.mclassLst||e.mclassLst.includes(r.class))&&(!e.class||e.class===r.class)&&(!e.origin||r.origin===e.origin)){return true}}}}function m(e,t,r){if(r?.type=="hierCluster")return e.hcTermSorter;if(t.sortTermsBy=="asListed"){return(e,t)=>e.index-t.index}if(t.sortTermsBy!="sampleCount"){throw`unsupported s.sortTermsBy='${t.sortTermsBy}'`}return(t,r)=>{if(e.app.vocabApi.vocab?.dslabel==="GDC"){if(t.tw?.term?.id&&!r.tw?.term?.id)return-1;if(!t.tw?.term?.id&&r.tw?.term?.id)return 1}if(r.counts.samples!==t.counts.samples)return r.counts.samples-t.counts.samples;if(r.counts.hits!==t.counts.hits)return r.counts.hits-t.counts.hits;return t.index-r.index}}function h(e,o={},a){const l=a||e?.matrix?.settings||{};const u=Object.assign({sample:"sample"},o,l.controlLabels||{});const d={};if(l.sortPriority){const e=1;Object.values(d).forEach((t=>{if(t.order>=e)t.order+=1}));d.custom={label:l.sortPriority.label||"Custom sort",value:"custom",order:e,sortPriority:l.sortPriority}}d.a=l.sortOptions?.a?v(l.sortOptions.a,u):{value:"a",order:1,sortPriority:[{label:`For each gene mutation, sort ${u.samples} by matching data`,types:["geneVariant"],tiebreakers:[{skip:!l.mutationClasses.includes("Fuserna"),label:`${u.Samples} with Fusion RNASeq > without`,filter:{values:[{dt:t}]},by:"class",isOrdered:false,order:["Fuserna"]},{label:`${u.Samples} with truncating mutations > without`,filter:{values:[{dt:r}]},by:"class",isOrdered:false,order:[...l.truncatingMutations],notUsed:[]},{label:`${u.Samples} with CNV data > without`,mayToggle:true,filter:{values:[{dt:s}]},by:"class",isOrdered:true,disabled:true,order:[i,n]},{disabled:false,mayToggle:true,label:`${u.Samples} with protein-changing mutations > without`,filter:{values:[{dt:r}]},by:"class",isOrdered:false,order:l.proteinChangingMutations.filter((e=>!l.truncatingMutations.includes(e))),notUsed:l.truncatingMutations}]},{label:`For each dictionary variable, sort ${u.samples} by matching data`,types:["categorical","integer","float","survival"],tiebreakers:[{label:"Values",by:"values"}]}]};d.name={label:`By ${u.sample} name, ID, or label`,value:"name",order:Object.values(d).length};return d}function b(e){const t=e.settings.matrix;if(t.sortSampleGrpsBy=="hits")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;return t.totalCountedValues-e.totalCountedValues};if(t.sortSampleGrpsBy=="sampleCount")return(e,t)=>{if(e.lst.length&&!t.lst.length)return-1;if(!e.lst.length&&t.lst.length)return 1;if(e.lst.length==t.lst.length){return y(e,t)}return t.lst.length-e.lst.length};if(!e.config.divideBy?.$id)return y;const r=e.data.refs.byTermId[e.config.divideBy.$id];if(r&&!r.keyOrder)r.keyOrder=r.bins?r.bins.map((e=>e.name)):[];const s=e.data.refs.byTermId[e.config.divideBy.$id]?.keyOrder;if(!s)return y;return(e,t)=>{e.order=s.indexOf(e.id);if(e.order==-1)delete e.order;t.order=s.indexOf(t.id);if(t.order==-1)delete t.order;if("order"in e&&"order"in t)return e.order-t.order;if("order"in e)return-1;if("order"in t)return 1;if(e.tw?.term?.values?.[e.id]?.order&&t.tw?.term?.values?.[t.id]?.order){return e.tw.term.values[e.id].order-t.tw.term.values[t.id].order}return y(e,t)}}function y(e,t){return e.name<t.name?-1:1}function g(e){const t=e.settings.matrix;const r=t.sortOptions[t.sortSamplesBy].sortPriority?t.sortOptions[t.sortSamplesBy]:t.sortOptions.a;const s=[];r.sortPriority.forEach((e=>{if(e.types.includes("geneVariant")){e.tiebreakers.forEach((e=>{if(e.by=="class"&&e.order){s.push(...e.order.filter((e=>e!=="WT"&&e!=="Blank")))}}))}}));const i=(e,t)=>{const r=s.indexOf(e.class);const i=s.indexOf(t.class);return r==-1&&i==-1?0:s.indexOf(e.class)==-1?1:s.indexOf(t.class)==-1?-1:s.indexOf(e.class)-s.indexOf(t.class)};return i}function v(e,o){const a=o;let l;for(const t of e.sortPriority){if(t.types.includes("categorical")){if(!t.label)t.label=`For each dictionary variable, sort ${a.samples} by matching data`;continue}if(!t.types?.includes("geneVariant"))continue;if(!l){l=t;if(!t.label)t.label=`For each gene mutation, sort ${a.samples} by matching data`}else{l.tiebreakers.push(...t.tiebreakers);t.toBeDeleted=true}}for(const e of l.tiebreakers){if(e.filter?.values?.find((e=>e.dt==t))){const t={label:`${a.Samples} with Fusion RNASeq > without`,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}else if(e.filter?.values?.find((e=>e.dt==r))){const t=e.order.includes(i)||e.order.includes(n)?`${a.Samples} with SSM + CNV > SSM only`:`${a.Samples} with mutations`;const r={label:t,isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,r,e)}else if(e.order.length==2&&e.order.includes(i)&&e.order.includes(n)){const t={label:`${a.Samples} with CNV only > without`,filter:{values:[{dt:s}]},by:"class",isOrdered:true,disabled:false,mayToggle:true};Object.assign(e,t,e)}}e.sortPriority=e.sortPriority.filter((e=>!e.toBeDeleted));return e}export{g as getMclassSorter,b as getSampleGroupSorter,o as getSampleSorter,h as getSortOptions,m as getTermSorter,v as reshapeSortPriority};
@@ -1 +1 @@
1
- import{M as t,P as e,d as a,z as i}from"./app-b369b169.js";const n=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split("");function r(r){const{controls:s,holder:l}=r;const o=s.parent;const d=structuredClone(o.config.settings.matrix);const p=d.controlLabels;const c=new t({padding:"",parent_menu:o.app.tip?.d.node()});let y=[],g,u={};const h={dom:{tip:c},opts:r,highlightColor:"none",label:`Sort ${p.Samples}`,title:`Set how to sort ${p.samples}`,type:"custom",expanded:r.expanded||false,expandedSection:r.expandedSection||"",init(t={},s={}){c.clear().hide();if(o.config.settings.matrix!=d)e(d,o.config.settings.matrix);if(d!==t)e(d,t);h.settings=d;h.activeOption=structuredClone(d.sortOptions[d.sortSamplesBy]);g=[{label:`For each selected row, sort ${p.samples} by matching data`,notDraggable:true,tiebreakers:[],handler:U},...h.activeOption.sortPriority,{label:`Sort ${p.samples} by name, alphabetically`,notDraggable:true,tiebreakers:[]}];Object.assign(r,s);r.holder.selectAll("*").remove();const l=r.holder.append("div").style("text-align","right");l.append("button").html("Apply").on("click",j);l.append("button").html("Reset").on("click",((t,e)=>h.init()));const u=r.holder.append("table");const $=u.append("thead");$.append("th").html("Priority").style("text-align","left").style("max-width","0px");$.append("th").html("Description");$.append("th").html("Action");let I=0,M=0;for(const t of g){const e=t.tiebreakers?.[0]?.order||t.handler;const r=u.append("thead").datum(t).property("draggable",!t.notDraggable).attr("droppable",true).on("dragstart",f).on("dragover",m).on("dragleave",x).on("drop",v);y.push(a(r));const s=r.append("tr").style("background-color","#eee").on("mouseover",V);s.append("th").style("padding","5px").style("vertical-align","top").style("font-weight",400).html(n[M++]).on("click",e?b:null);const l=s.append("th").style("padding","5px").style("vertical-align","top").style("text-align","left").style("cursor",e?"pointer":"").on("click",e?b:null);l.append("span").style("margin-right","12px").style("font-weight",400).html(t.label);s.append("th").style("padding","5px").style("vertical-align","top").style("text-align","center").style("font-weight",400).style("cursor",e?"pointer":"").append("span").html(e?"Details":"&nbsp;").on("click",e?b:null);const o=u.append("tbody").datum(t).style("display",h.expandedSection=="all"||h.expandedSection==t.label?"":"none");for(const e of t.tiebreakers){if(e.skip)continue;if(!t.types?.includes("geneVariant")){continue}const a=o.append("tr").on("mouseover",V).datum(e).attr("draggable",!e.disabled&&t.types?.length!==0).attr("droppable",!e.disabled&&t.types?.length!==0).on("dragstart",k).on("dragover",O).on("dragleave",D).on("drop",A);if(!e.disabled)I++;const n=a.append("td").attr("title",e.disabled?`This tiebreaker is currently not being used to sort ${p.cases}. Check the box to use.`:`The number indicates the order in which this tiebreaker is used. Unched the box to skip.`).datum(e);n.style("padding","5px").style("vertical-align","top").style("text-align","center");n.append("span").html(!e.disabled?I:"");const r=a.append("td").style("opacity",e.disabled?.5:1).style("padding","5px").style("vertical-align","top").style("max-width","500px");r.append("span").html(e.label||"");if(!e.disabled){const t=r.append("label");t.append("span").html("<br>(use data list order ");if(!e.isOrdered)e.isOrdered=false;t.append("input").datum(e).attr("type","checkbox").property("checked",e.isOrdered).style("vertical-align","bottom").on("change",S);t.append("span").html(")");const a=e.order;r.append("div").attr("class","sjpp-matrix-sorter-ui-value").selectAll("div").data(a.map(((t,a)=>({lstName:"order",key:t,cls:i[t],tb:e,dragstart:P,dragover:w,dragleave:T,drop:_,filterByClass:d.filterByClass,index:a})))).enter().append("div").style("display",e.isOrdered?"block":"inline-block").each(C);if(e.notUsed?.length){const t=r.append("div");t.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-add").style("display","inline-block").style("padding","5x").style("vertical-align","top").style("padding","3px 5px").style("cursor","pointer").html(`+Add`).on("click",N)}}const s=a.append("td").style("text-align","center").style("vertical-align","top");if(e.mayToggle){s.append("button").datum(e).html(e.disabled?"Enable":"Disable").on("click",B)}}const c=o.append("tr").attr("draggable",true).on("mouseover",V);c.append("td").html("&nbsp;");const g=c.append("td").style("text-align","left").html(t.details&&!t.order?.length?t.details:"&nbsp;");if(t.handler)t.handler(g,c,o);c.append("td").html("&nbsp;")}},toggleSection:b,trackDraggedSection:f,highlightSection:m,unhighlightSection:x,adjustSortPriority:v,trackDraggedTieBreaker:k,highlightTieBreaker:O,unhighlightTieBreaker:D,adjustTieBreakers:A,trackDraggedValue:P,highlightValue:w,unhighlightValue:T,adjustValueOrder:_,apply:j};function b(t,e={label:"all"}){h.expandedSection=h.expandedSection===e.label?"":e.label;h.expanded=!!h.expandedSection;h.init()}function f(t,e){u.type="sortPriority";u.data=e;u.index=h.activeOption.sortPriority.indexOf(e)}function m(t,e){if(u.type!="sortPriority"||e==u.data)return;t.preventDefault();const i=h.activeOption.sortPriority.indexOf(e);const n=i<u.index?"border-top":i>u.index?"border-bottom":"";if(!n)return;a(this).selectAll("th").style(n,"2px solid blue")}function x(t,e){if(u.type!="sortPriority")return;t.preventDefault();a(this).selectAll("th").style("border","none")}function v(t,e){if(e==u.data)return;const a=h.activeOption.sortPriority.indexOf(e);const i=o.config.settings.matrix;h.activeOption.sortPriority.splice(u.index,1);h.activeOption.sortPriority.splice(a,0,u.data);h.init({sortOptions:{[i.sortSamplesBy]:h.activeOption}})}function k(t,e){u.type="tiebreaker";u.data=e;u.sectionData=t.target.closest("tbody").__data__;u.priorityIndex=h.activeOption.sortPriority.indexOf(u.sectionData);u.index=u.sectionData.tiebreakers.indexOf(e)}function O(t,e){if(u.type!="tiebreaker"||e==u.data)return;t.preventDefault();const i=u.sectionData.tiebreakers.indexOf(e);const n=i<u.index?"border-top":i>u.index?"border-bottom":"";if(!n)return;a(this).selectAll("td:nth-child(2)").style(n,"2px solid blue")}function D(t,e){if(u.type!="tiebreaker")return;t.preventDefault();a(this).selectAll("td:nth-child(2)").style("border","none")}function S(t,e){t.stopPropagation();e.isOrdered=!e.isOrdered;h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}function B(t,e){t.stopPropagation();e.disabled=!e.disabled;h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}function A(t,e){if(u.type!="tiebreaker"||e==u.data)return;t.preventDefault();const a=u.sectionData.tiebreakers.indexOf(e);const i=o.config.settings.matrix;u.sectionData.tiebreakers.splice(u.index,1);u.sectionData.tiebreakers.splice(a,0,u.data);h.init({sortOptions:{[i.sortSamplesBy]:h.activeOption}})}function C(t){const e=[];if(t.tb.notUsed?.includes(t.key))e.push(`- Click on this label to include in used data values.`);if(t.filterByClass[t.key])e.unshift("- Click on the corresponding entry in the matrix legend or Mutation/CNV menus to unhide");if(e.length)e.unshift(`To use this data value for sorting ${p.samples}:`);t.tb.notUsed?.includes(t.key);const i=t.filterByClass[t.key]=="value"?.5:1;const n=a(this).attr("aria-label",e.length?e.join("\n"):`Click to not use this data value to sort ${p.samples}`).attr("draggable",t.tb.isOrdered?true:false).attr("droppable",t.tb.isOrdered?true:false).style("width","fit-content").style("margin-right","10px").style("overflow","hidden").style("white-space","nowrap").style("opacity",i).style("cursor","pointer").on("dragstart",t.dragstart).on("dragover",t.dragover).on("dragleave",t.dragleave).on("drop",t.drop).on("mouseenter",(()=>r.style("opacity",1))).on("mouseleave",(()=>r.style("opacity",0))).on("click",(()=>{if(e.length){const a="sjpp-matrix-sorter-value-note";n.selectAll(`.${a}`).remove();const i=n.append("div").attr("class",a).style("max-width","200px").style("padding","5px");i.html(e.join("<br>"));if(t.filterByClass[t.key])return}const a=t.lstName=="order"?"notUsed":"order";if(!t.tb[a])t.tb[a]=[];const i=t.tb[a];t.tb[t.lstName].splice(t.index,1);if(t.lstName=="order")i.unshift(t.key);else i.push(t.key);h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}));n.append("div").style("display","inline-block").style("cursor","pointer").style("width","12px").style("height","12px").style("margin-right","3px").style("background-color",t.cls.color);n.append("span").style("cursor","pointer").style("text-decoration",t.filterByClass[t.key]=="case"?"line-through":"").html(t.cls.label+(t.filterByClass[t.key]?" (<i>not used since this value is hidden</i>)":""));const r=n.append("div").style("display","inline-block").style("width","12px").style("cursor","pointer").style("opacity",0).style("color",t.lstName=="order"?"red":"green").html(t.lstName=="order"?"&cross;":"&check;")}function P(t,e){t.stopPropagation?.();u.type="value";u.data=e;u.sectionData=t.target.closest("tbody").__data__;u.priorityIndex=h.activeOption.sortPriority.indexOf(u.sectionData);u.tiebreaker=t.target.closest("tr").__data__;u.tbIndex=u.sectionData.tiebreakers.indexOf(u.priorityIndex);u.order=u.tiebreaker.order}function w(t,e){t.stopPropagation?.();if(u.type!="value"||e==u.data)return;if(e.tb!=u.data.tb)return;t.preventDefault();u.order.indexOf(e);a(this).style("border","2px solid blue")}function T(t,e){t.stopPropagation?.();if(u.type!="value")return;t.preventDefault();a(this).style("border","none")}function _(t,e){t.stopPropagation?.();if(u.type!="value"||e==u.data)return;t.preventDefault();const a=h.settings;u.data.tb[u.data.lstName].splice(u.data.index,1);e.tb[e.lstName].splice(e.index,0,u.data.key);const i=a.hiddenVariants.indexOf(u.data.key);const n=structuredClone(a.hiddenVariants);const r=structuredClone(a.filterByClass);if(i!=-1){n.splice(i,1);r[u.data.key]=false}h.init({hiddenVariants:n,filterByClass:r,sortOptions:{[a.sortSamplesBy]:h.activeOption}})}function N(t,e){t?.stopPropagation();const a=c.clear().d.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-vals").style("margin-top","3px").style("vertical-align","top").style("padding-left","12px");a.selectAll("div").data(e.notUsed.map(((t,a)=>({lstName:"notUsed",key:t,cls:i[t],tb:e,dragstart:P,dragover:w,dragleave:T,drop:_,filterByClass:d.filterByClass,index:a})))).enter().append("div").style("display","block").each(C);c.showunder(t.target)}function j(){o.app.tip?.hide();o.app.dispatch({type:"plot_edit",id:o.id,config:{settings:{matrix:{sortOptions:{[d.sortSamplesBy]:h.activeOption}}}}})}function V(){}function U(t,e){if(!o.selectedTermsToSortAgainst?.length){t.html(`Click on a matrix row label and the left triangle to add an entry here`);return}const i=o.selectedTermsToSortAgainst.map((t=>({t:t,label:t.tw.term.name+(t.tw.term.type=="geneVariant"?" alterations":" values")})));const n=a(e.node().parentNode);n.selectAll("tr").remove();n.selectAll("tr").data(i).enter().append("tr").selectAll("td").data(((t,e)=>[{label:e+1,textAlign:"center",cursor:"",t:t.t},{label:t.label,textAlign:"left",cursor:""},{label:"Delete",textAlign:"center",cursor:"pointer",click:o.unsortSamplesAgainstTerm,data:t}])).enter().append("td").style("text-align",(t=>t.textAlign)).style("cursor",(t=>t.cursor)).html((t=>t.label)).on("click",((t,e)=>e.click?.(t,e)))}h.init();h.api={main:h.init,destroy:()=>{r.holder.selectAll("*").remove()}};if(r.debug)h.api.Inner=h;return h.api}export{r as getSorterUi};
1
+ import{M as t,P as e,d as a,z as i}from"./app-2cd97738.js";const n=`ABCDEFGHIJKLMNOPQRSTUVWXYZ`.split("");function r(r){const{controls:s,holder:l}=r;const o=s.parent;const d=structuredClone(o.config.settings.matrix);const p=d.controlLabels;const c=new t({padding:"",parent_menu:o.app.tip?.d.node()});let y=[],g,u={};const h={dom:{tip:c},opts:r,highlightColor:"none",label:`Sort ${p.Samples}`,title:`Set how to sort ${p.samples}`,type:"custom",expanded:r.expanded||false,expandedSection:r.expandedSection||"",init(t={},s={}){c.clear().hide();if(o.config.settings.matrix!=d)e(d,o.config.settings.matrix);if(d!==t)e(d,t);h.settings=d;h.activeOption=structuredClone(d.sortOptions[d.sortSamplesBy]);g=[{label:`For each selected row, sort ${p.samples} by matching data`,notDraggable:true,tiebreakers:[],handler:U},...h.activeOption.sortPriority,{label:`Sort ${p.samples} by name, alphabetically`,notDraggable:true,tiebreakers:[]}];Object.assign(r,s);r.holder.selectAll("*").remove();const l=r.holder.append("div").style("text-align","right");l.append("button").html("Apply").on("click",j);l.append("button").html("Reset").on("click",((t,e)=>h.init()));const u=r.holder.append("table");const $=u.append("thead");$.append("th").html("Priority").style("text-align","left").style("max-width","0px");$.append("th").html("Description");$.append("th").html("Action");let I=0,M=0;for(const t of g){const e=t.tiebreakers?.[0]?.order||t.handler;const r=u.append("thead").datum(t).property("draggable",!t.notDraggable).attr("droppable",true).on("dragstart",f).on("dragover",m).on("dragleave",x).on("drop",v);y.push(a(r));const s=r.append("tr").style("background-color","#eee").on("mouseover",V);s.append("th").style("padding","5px").style("vertical-align","top").style("font-weight",400).html(n[M++]).on("click",e?b:null);const l=s.append("th").style("padding","5px").style("vertical-align","top").style("text-align","left").style("cursor",e?"pointer":"").on("click",e?b:null);l.append("span").style("margin-right","12px").style("font-weight",400).html(t.label);s.append("th").style("padding","5px").style("vertical-align","top").style("text-align","center").style("font-weight",400).style("cursor",e?"pointer":"").append("span").html(e?"Details":"&nbsp;").on("click",e?b:null);const o=u.append("tbody").datum(t).style("display",h.expandedSection=="all"||h.expandedSection==t.label?"":"none");for(const e of t.tiebreakers){if(e.skip)continue;if(!t.types?.includes("geneVariant")){continue}const a=o.append("tr").on("mouseover",V).datum(e).attr("draggable",!e.disabled&&t.types?.length!==0).attr("droppable",!e.disabled&&t.types?.length!==0).on("dragstart",k).on("dragover",O).on("dragleave",D).on("drop",A);if(!e.disabled)I++;const n=a.append("td").attr("title",e.disabled?`This tiebreaker is currently not being used to sort ${p.cases}. Check the box to use.`:`The number indicates the order in which this tiebreaker is used. Unched the box to skip.`).datum(e);n.style("padding","5px").style("vertical-align","top").style("text-align","center");n.append("span").html(!e.disabled?I:"");const r=a.append("td").style("opacity",e.disabled?.5:1).style("padding","5px").style("vertical-align","top").style("max-width","500px");r.append("span").html(e.label||"");if(!e.disabled){const t=r.append("label");t.append("span").html("<br>(use data list order ");if(!e.isOrdered)e.isOrdered=false;t.append("input").datum(e).attr("type","checkbox").property("checked",e.isOrdered).style("vertical-align","bottom").on("change",S);t.append("span").html(")");const a=e.order;r.append("div").attr("class","sjpp-matrix-sorter-ui-value").selectAll("div").data(a.map(((t,a)=>({lstName:"order",key:t,cls:i[t],tb:e,dragstart:P,dragover:w,dragleave:T,drop:_,filterByClass:d.filterByClass,index:a})))).enter().append("div").style("display",e.isOrdered?"block":"inline-block").each(C);if(e.notUsed?.length){const t=r.append("div");t.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-add").style("display","inline-block").style("padding","5x").style("vertical-align","top").style("padding","3px 5px").style("cursor","pointer").html(`+Add`).on("click",N)}}const s=a.append("td").style("text-align","center").style("vertical-align","top");if(e.mayToggle){s.append("button").datum(e).html(e.disabled?"Enable":"Disable").on("click",B)}}const c=o.append("tr").attr("draggable",true).on("mouseover",V);c.append("td").html("&nbsp;");const g=c.append("td").style("text-align","left").html(t.details&&!t.order?.length?t.details:"&nbsp;");if(t.handler)t.handler(g,c,o);c.append("td").html("&nbsp;")}},toggleSection:b,trackDraggedSection:f,highlightSection:m,unhighlightSection:x,adjustSortPriority:v,trackDraggedTieBreaker:k,highlightTieBreaker:O,unhighlightTieBreaker:D,adjustTieBreakers:A,trackDraggedValue:P,highlightValue:w,unhighlightValue:T,adjustValueOrder:_,apply:j};function b(t,e={label:"all"}){h.expandedSection=h.expandedSection===e.label?"":e.label;h.expanded=!!h.expandedSection;h.init()}function f(t,e){u.type="sortPriority";u.data=e;u.index=h.activeOption.sortPriority.indexOf(e)}function m(t,e){if(u.type!="sortPriority"||e==u.data)return;t.preventDefault();const i=h.activeOption.sortPriority.indexOf(e);const n=i<u.index?"border-top":i>u.index?"border-bottom":"";if(!n)return;a(this).selectAll("th").style(n,"2px solid blue")}function x(t,e){if(u.type!="sortPriority")return;t.preventDefault();a(this).selectAll("th").style("border","none")}function v(t,e){if(e==u.data)return;const a=h.activeOption.sortPriority.indexOf(e);const i=o.config.settings.matrix;h.activeOption.sortPriority.splice(u.index,1);h.activeOption.sortPriority.splice(a,0,u.data);h.init({sortOptions:{[i.sortSamplesBy]:h.activeOption}})}function k(t,e){u.type="tiebreaker";u.data=e;u.sectionData=t.target.closest("tbody").__data__;u.priorityIndex=h.activeOption.sortPriority.indexOf(u.sectionData);u.index=u.sectionData.tiebreakers.indexOf(e)}function O(t,e){if(u.type!="tiebreaker"||e==u.data)return;t.preventDefault();const i=u.sectionData.tiebreakers.indexOf(e);const n=i<u.index?"border-top":i>u.index?"border-bottom":"";if(!n)return;a(this).selectAll("td:nth-child(2)").style(n,"2px solid blue")}function D(t,e){if(u.type!="tiebreaker")return;t.preventDefault();a(this).selectAll("td:nth-child(2)").style("border","none")}function S(t,e){t.stopPropagation();e.isOrdered=!e.isOrdered;h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}function B(t,e){t.stopPropagation();e.disabled=!e.disabled;h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}function A(t,e){if(u.type!="tiebreaker"||e==u.data)return;t.preventDefault();const a=u.sectionData.tiebreakers.indexOf(e);const i=o.config.settings.matrix;u.sectionData.tiebreakers.splice(u.index,1);u.sectionData.tiebreakers.splice(a,0,u.data);h.init({sortOptions:{[i.sortSamplesBy]:h.activeOption}})}function C(t){const e=[];if(t.tb.notUsed?.includes(t.key))e.push(`- Click on this label to include in used data values.`);if(t.filterByClass[t.key])e.unshift("- Click on the corresponding entry in the matrix legend or Mutation/CNV menus to unhide");if(e.length)e.unshift(`To use this data value for sorting ${p.samples}:`);t.tb.notUsed?.includes(t.key);const i=t.filterByClass[t.key]=="value"?.5:1;const n=a(this).attr("aria-label",e.length?e.join("\n"):`Click to not use this data value to sort ${p.samples}`).attr("draggable",t.tb.isOrdered?true:false).attr("droppable",t.tb.isOrdered?true:false).style("width","fit-content").style("margin-right","10px").style("overflow","hidden").style("white-space","nowrap").style("opacity",i).style("cursor","pointer").on("dragstart",t.dragstart).on("dragover",t.dragover).on("dragleave",t.dragleave).on("drop",t.drop).on("mouseenter",(()=>r.style("opacity",1))).on("mouseleave",(()=>r.style("opacity",0))).on("click",(()=>{if(e.length){const a="sjpp-matrix-sorter-value-note";n.selectAll(`.${a}`).remove();const i=n.append("div").attr("class",a).style("max-width","200px").style("padding","5px");i.html(e.join("<br>"));if(t.filterByClass[t.key])return}const a=t.lstName=="order"?"notUsed":"order";if(!t.tb[a])t.tb[a]=[];const i=t.tb[a];t.tb[t.lstName].splice(t.index,1);if(t.lstName=="order")i.unshift(t.key);else i.push(t.key);h.init({sortOptions:{[d.sortSamplesBy]:h.activeOption}})}));n.append("div").style("display","inline-block").style("cursor","pointer").style("width","12px").style("height","12px").style("margin-right","3px").style("background-color",t.cls.color);n.append("span").style("cursor","pointer").style("text-decoration",t.filterByClass[t.key]=="case"?"line-through":"").html(t.cls.label+(t.filterByClass[t.key]?" (<i>not used since this value is hidden</i>)":""));const r=n.append("div").style("display","inline-block").style("width","12px").style("cursor","pointer").style("opacity",0).style("color",t.lstName=="order"?"red":"green").html(t.lstName=="order"?"&cross;":"&check;")}function P(t,e){t.stopPropagation?.();u.type="value";u.data=e;u.sectionData=t.target.closest("tbody").__data__;u.priorityIndex=h.activeOption.sortPriority.indexOf(u.sectionData);u.tiebreaker=t.target.closest("tr").__data__;u.tbIndex=u.sectionData.tiebreakers.indexOf(u.priorityIndex);u.order=u.tiebreaker.order}function w(t,e){t.stopPropagation?.();if(u.type!="value"||e==u.data)return;if(e.tb!=u.data.tb)return;t.preventDefault();u.order.indexOf(e);a(this).style("border","2px solid blue")}function T(t,e){t.stopPropagation?.();if(u.type!="value")return;t.preventDefault();a(this).style("border","none")}function _(t,e){t.stopPropagation?.();if(u.type!="value"||e==u.data)return;t.preventDefault();const a=h.settings;u.data.tb[u.data.lstName].splice(u.data.index,1);e.tb[e.lstName].splice(e.index,0,u.data.key);const i=a.hiddenVariants.indexOf(u.data.key);const n=structuredClone(a.hiddenVariants);const r=structuredClone(a.filterByClass);if(i!=-1){n.splice(i,1);r[u.data.key]=false}h.init({hiddenVariants:n,filterByClass:r,sortOptions:{[a.sortSamplesBy]:h.activeOption}})}function N(t,e){t?.stopPropagation();const a=c.clear().d.append("div").attr("data-testid","sjpp-matrix-sorter-ui-hidden-vals").style("margin-top","3px").style("vertical-align","top").style("padding-left","12px");a.selectAll("div").data(e.notUsed.map(((t,a)=>({lstName:"notUsed",key:t,cls:i[t],tb:e,dragstart:P,dragover:w,dragleave:T,drop:_,filterByClass:d.filterByClass,index:a})))).enter().append("div").style("display","block").each(C);c.showunder(t.target)}function j(){o.app.tip?.hide();o.app.dispatch({type:"plot_edit",id:o.id,config:{settings:{matrix:{sortOptions:{[d.sortSamplesBy]:h.activeOption}}}}})}function V(){}function U(t,e){if(!o.selectedTermsToSortAgainst?.length){t.html(`Click on a matrix row label and the left triangle to add an entry here`);return}const i=o.selectedTermsToSortAgainst.map((t=>({t:t,label:t.tw.term.name+(t.tw.term.type=="geneVariant"?" alterations":" values")})));const n=a(e.node().parentNode);n.selectAll("tr").remove();n.selectAll("tr").data(i).enter().append("tr").selectAll("td").data(((t,e)=>[{label:e+1,textAlign:"center",cursor:"",t:t.t},{label:t.label,textAlign:"left",cursor:""},{label:"Delete",textAlign:"center",cursor:"pointer",click:o.unsortSamplesAgainstTerm,data:t}])).enter().append("td").style("text-align",(t=>t.textAlign)).style("cursor",(t=>t.cursor)).html((t=>t.label)).on("click",((t,e)=>e.click?.(t,e)))}h.init();h.api={main:h.init,destroy:()=>{r.holder.selectAll("*").remove()}};if(r.debug)h.api.Inner=h;return h.api}export{r as getSorterUi};
@@ -1 +1 @@
1
- import{M as t,bn as e,bo as a,Z as n,j as l,U as o,I as r,ag as s,a9 as i,d as c,ah as d,f as p}from"./app-b369b169.js";import{b as f}from"./block.lazyload-87b12654.js";import{d as u}from"./lasso-f767f634.js";import{b as g,a as m}from"./axis-747c801e.js";import"./drag-7b30ba17.js";import"./nodrag-16ad4b03.js";import"./pointer-c7475677.js";const h="#ffa200";const v=new t;function x(t,e,a,n){if(!t.dataname){t.dataname="Differential expression"}if(t.input){const l=t.input;delete t.input;const o=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},l.trim().split("\n"));if(o){e("Error with diferential gene expressionn data: "+o)}return}let l;if(t.url){l=new Request(t.hostURL+"/urltextfile",{method:"POST",body:JSON.stringify({url:t.url,jwt:n})});delete t.url}else if(t.file){l=new Request(t.hostURL+"/textfile",{method:"POST",body:JSON.stringify({file:t.file,jwt:n})});delete t.file}else{e("neither .input nor .url given for MA-Volcano plot");return}const o=a.append("div").style("margin","20px").style("color","#aaa").style("font-size","1.5em").text("Loading differential gene expression data ...");fetch(l).then((t=>t.json())).then((e=>{if(e.error)throw{message:e.error};if(!e.text)throw{message:"no data loaded"};const l=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},e.text.trim().split("\n"));if(l)throw{message:"Error with differential gene expression data: "+l}})).catch((t=>{e(t.message);if(t.stack)console.log(t.stack)})).then((()=>{o.remove()}))}function b(t,n,l,o,r){let s,i,c,d,p,f;if(o!==undefined)[i,c,d,p,f]=e(o,t);else{[s,i,c,d,p,f]=a(100,100,t);s.header.text("Differential gene expression viewer");s.body.style("margin","10px")}i.append("div").style("margin-top","30px").style("color","#858585").html(`\n\t\t<p>Interactive MA and Volcano plot for exploring differentially expressed genes.</p>\n\t\t<a href=https://docs.google.com/document/d/1gEhywyMzMQRM10NFvsObw1yDSWxVY7pxYjsQ2-nd6x4/edit?usp=sharing target=_blank>File format</a>\n\t\t`);function u(t,e){p.style("color",e?"red":"black").text(t)}const g=()=>{d.selectAll("*").remove();const e=d.append("input").attr("type","file").on("change",(e=>{const a=e.target.files[0];if(!a){g();return}if(!a.size){u("Invalid file "+a.name);g();return}const i=new FileReader;i.onload=e=>{const i=c.options[c.selectedIndex].innerHTML;const d=y({genome:t[i],filename:a.name,hostURL:n,jwt:l,holder:o,sandbox_header:r},e.target.result.trim().split("\n"));if(d){u(d,1);g();return}if(s)s.pane.remove()};i.onerror=function(){u("Error reading file "+a.name,1);g();return};i.readAsText(a,"utf8")}));setTimeout((()=>e.node().focus()),1100)};g()}function y(t,e){if(t.tracks){for(const e of t.tracks){e.iscustom=true}}const[a,o]=k(e[0].trim());if(a){return a}t.hastvalue=o.includes("tvalue");const r=[];let s=0;let i=0;let c=0;for(let a=1;a<e.length;a++){const n=e[a];if(n=="")continue;if(n[0]=="#")continue;const l=n.trim().split("\t");const d={};for(let t=0;t<o.length;t++){d[o[t]]=l[t]}if(!d.gene){return"(line "+(a+1)+") missing gene"}d.gene=d.gene.replace(/"/g,"");if(!d.logfoldchange){return"(line "+(a+1)+") missing log fold change"}{const t=Number.parseFloat(d.logfoldchange);if(Number.isNaN(t)){c++;continue}d.logfoldchange=t}if(!d.averagevalue){return"(line "+(a+1)+") missing average value"}{const t=Number.parseFloat(d.averagevalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for average value: "+d.averagevalue}d.averagevalue=t}if(!d.pvalue){s++;continue}else{const t=Number.parseFloat(d.pvalue);if(Number.isNaN(t)){s++;continue}d.pvalue=t}if(d.pvalueadj){const t=Number.parseFloat(d.pvalueadj);if(Number.isNaN(t)){i++;continue}d.pvalueadj=t}if(t.hastvalue){if(!d.tvalue){return"(line "+(a+1)+") missing T value"}{const t=Number.parseFloat(d.tvalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for T value: "+d.tvalue}d.tvalue=t}}r.push(d)}if(r.length==0){return"No valid data"}if(t.holder==undefined){const e=n({x:100,y:100});e.header.text(t.filename);t.holder=e.body}else{t.holder.selectAll("*").remove();if(t.sandbox_header!==undefined)t.holder.append("div").html('<span style="opacity:.5;font-size:.7em">FILE: </span> '+t.filename)}t.data=r;if(c+s+i>0){const e=t.holder.append("div").style("width","800px");if(c){l(e,c+" lines dropped for invalid log fold change value")}if(s){l(e,s+" lines dropped for invalid P value")}if(i){l(e,i+" lines dropped for invalid adjusted P value")}}_(t);return null}function k(t){const e=t.toLowerCase().split("\t");const a=t.split("\t");if(a.length<=1){return["invalid file header"]}const n=(...t)=>{for(const a of t){const t=e.indexOf(a);if(t!=-1)return t}return-1};let l=n("gene");if(l==-1)return["gene missing from header"];a[l]="gene";l=n("logfc","log.foldchange");if(l==-1)return["log.foldchange missing from header"];a[l]="logfoldchange";l=n("aveexpr","average.value");if(l==-1)return["average.value missing from header"];a[l]="averagevalue";l=n("t","t.value");if(l!=-1){a[l]="tvalue"}l=n("p.value");if(l==-1)return["p.value missing from header"];a[l]="pvalue";l=n("p.value.adjusted","adj.p.val","adjustedp-value(fdr)");if(l!=-1){a[l]="pvalueadj"}return[null,a]}function _(t){if(t.hastvalue){let e=Math.abs(t.data[0].tvalue);let a=0;for(const n of t.data){const t=Math.abs(n.tvalue);e=Math.min(e,t);a=Math.max(a,t)}t.tvaluemin=e;t.tvaluemax=a}const e=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const a=w(e,t);const n=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const l=M(n,t);const r=t.holder.append("div").style("margin","20px");const s=r.append("textarea").style("display","inline-block").attr("rows",5).attr("cols",10).style("resize","both").attr("placeholder","Enter genes, separate by space or newline");const i=r.append("div").style("display","inline-block").style("margin-left","10px").style("vertical-align","top");i.append("button").style("display","block").text("Show gene labels").on("click",(e=>{const a=s.property("value").trim();if(a=="")return;const n=new Set;for(const t of a.split(/[\s\n\t]+/)){n.add(t.toUpperCase())}if(n.size==0)return;for(const e of t.data){if(!e.ma_label&&n.has(e.gene.toUpperCase())){A(e,t)}}}));i.append("button").style("display","block").text("Remove all labels").on("click",(e=>{for(const e of t.data){if(e.ma_label){A(e,t)}}}));i.append("div").style("margin-top","10px").style("color","#858585").style("font-size",".8em").html('<span style="font-size:1.3em">TIP:</span> click circles to toggle highlight on genes;<br>drag to move a gene label around.');const c=r.append("div").style("display","inline-block").style("margin-left","30px").style("vertical-align","top");c.append("button").text("Get MA plot").style("display","block").on("click",(t=>{o(a.node(),"MAplot")}));c.append("button").text("Get volcano plot").style("display","block").on("click",(t=>{o(l.node(),"Volcano")}))}function w(t,e){const a=[];let n=0,l=0;for(const t of e.data){n=Math.min(n,t.logfoldchange);l=Math.max(l,t.logfoldchange);a.push(t.averagevalue)}a.sort(((t,e)=>t-e));const o=a[0];const i=a[a.length-1];let c,d,p,f,u,v,x,b=50,y=50,k;const _=t.append("svg");const w=_.append("g");const M=_.append("g");const A=_.append("text").text("Average expression value").attr("fill","black").attr("text-anchor","middle");const E=_.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");e.ma_dotarea=_.append("g");const P=e.ma_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const U=r().domain([o,i]);const z=r().domain([n,l]);let F;if(e.hastvalue){F=r().domain([e.tvaluemin,e.tvaluemax])}const S=e.ma_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.ma_g=this}));const T=S.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.ma_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const I=e.ma_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");const O=_.append("g");const Y=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const X=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const C=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const V=O.append("rect").attr("fill","white").attr("stroke",h).attr("shape-rendering","crispEdges");const D=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const q=a[Math.ceil(a.length*.05)];const J=a[Math.ceil(a.length*.95)];const G=a[Math.ceil(a.length*.25)];const Q=a[Math.ceil(a.length*.75)];const H=a[Math.ceil(a.length/2)];function W(t,a){p=t;f=a;c=Math.max(50,p/8);d=Math.max(50,f/8);k=Math.max(p,f)/80;const n=k*3;U.range([0,p]);z.range([f,0]);if(F)F.range([k,n]);T.each((t=>{t.ma_radius=F?F(Math.abs(t.tvalue)):k}));x=k*3;u=Math.max(n,p/50);v=Math.max(n,f/50);w.attr("transform","translate("+c+","+b+")");M.attr("transform","translate("+(c+u)+","+(b+f+v+x+v)+")");A.attr("x",c+u+p/2).attr("y",b+f+v+x+v+d-5);E.attr("transform","translate(15,"+(b+f/2)+") rotate(-90)");e.ma_dotarea.attr("transform","translate("+(c+u)+","+b+")");P.attr("width",p).attr("height",f);S.attr("transform",(t=>"translate("+U(t.averagevalue)+","+z(t.logfoldchange)+")"));T.attr("r",(t=>t.ma_radius));I.attr("x2",p).attr("y1",z(0)).attr("y2",z(0));O.attr("transform","translate("+(c+u)+","+(b+f+v)+")");const l=U(q),o=U(G),r=U(H),i=U(Q),h=U(J);X.attr("x1",l).attr("x2",l).attr("y2",x);C.attr("x1",h).attr("x2",h).attr("y2",x);D.attr("x1",r).attr("x2",r).attr("y2",x);V.attr("x",o).attr("width",i-o).attr("height",x);Y.attr("x1",l).attr("x2",h).attr("y1",x/2).attr("y2",x/2);_.attr("width",c+u+p+y).attr("height",b+f+v+x+v+d);s({axis:w.call(g().scale(z)),color:"black",showline:true});s({axis:M.call(m().scale(U)),color:"black",showline:true})}W(400,400);j(S.selectAll("circle"),_,"vo_circle");return _}function M(t,e){let a=0,n=0,l=0,o=0;for(const t of e.data){a=Math.min(a,t.logfoldchange);n=Math.max(n,t.logfoldchange);if(t.pvalue==0){continue}else{const e=-Math.log(t.pvalue,10);l=Math.min(l,e);o=Math.max(o,e)}}let i,c,d,p,f,u,v=50,x=50,b;const y=t.append("svg");const k=y.append("g");const _=y.append("g");const w=y.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const M=y.append("text").text("-log(P value)").attr("fill","black").attr("text-anchor","middle");e.vo_dotarea=y.append("g");const A=e.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const E=r().domain([a,n]);const P=r().domain([l,o]);let U;if(e.hastvalue)U=r().domain([e.tvaluemin,e.tvaluemax]);const z=e.vo_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.vo_g=this}));const F=z.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.vo_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const S=e.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function T(t,a){d=t;p=a;i=Math.max(50,d/8);c=Math.max(50,p/8);b=Math.max(d,p)/80;const n=b*3;if(U)U.range([b,n]);F.each((t=>{t.vo_radius=U?U(Math.abs(t.tvalue)):b}));f=Math.max(n,d/50);u=Math.max(n,p/50);k.attr("transform","translate("+i+","+v+")");_.attr("transform","translate("+(i+f)+","+(v+p+u)+")");w.attr("x",i+f+d/2).attr("y",v+p+u+c-5);M.attr("transform","translate(15,"+(v+p/2)+") rotate(-90)");e.vo_dotarea.attr("transform","translate("+(i+f)+","+v+")");A.attr("width",d).attr("height",p);E.range([0,d]);P.range([p,0]);z.attr("transform",(t=>"translate("+E(t.logfoldchange)+","+P(t.pvalue==0?o:-Math.log(t.pvalue,10))+")"));F.attr("r",(t=>t.vo_radius));S.attr("x1",E(0)).attr("x2",E(0)).attr("y2",p);y.attr("width",i+f+d+x).attr("height",v+p+u+c);s({axis:k.call(g().scale(P)),color:"black",showline:true});s({axis:_.call(m().scale(E)),color:"black",showline:true})}T(400,400);if(e.data[0].pvalueadj!=undefined){const a=t.append("div").style("margin","20px");a.append("span").text("Select P value for Volcano plot:");const n=a.append("select").style("margin-left","5px").on("change",(t=>{l=0;o=0;const a=n.node().selectedIndex==0;for(const t of e.data){const e=a?t.pvalue:t.pvalueadj;if(e==0)continue;const n=-Math.log(e,10);l=Math.min(l,n);o=Math.max(o,n)}P.domain([l,o]);s({axis:k.call(g().scale(P)),color:"black",showline:true});z.attr("transform",(t=>{const e=a?t.pvalue:t.pvalueadj;return"translate("+E(t.logfoldchange)+","+P(e==0?o:-Math.log(e,10))+")"}));M.text(a?"-log(P value)":"-log(adjusted P value)")}));n.append("option").text("Unadjusted P value");n.append("option").text("Adjusted P value")}j(z.selectAll("circle"),y,"ma_circle");return y}function j(t,e,a){const n=u().items(t).targetArea(e);function l(){e.selectAll(".possible").style("fill-opacity",0).classed("not_possible",true).classed("selected",false).each((t=>{c(t[a]).attr("fill-opacity",0)}))}function o(){n.possibleItems().style("fill-opacity",.9).classed("not_possible",false).classed("possible",true).each((t=>{c(t[a]).attr("fill-opacity",.9)}))}function r(){}n.on("start",l).on("draw",o).on("end",r);e.call(n)}function N(t,e){v.clear().show(t.clientX,t.clientY);const a=[{k:"gene",v:e.gene},{k:"average value",v:e.averagevalue},{k:"log fold change",v:e.logfoldchange},{k:"P value",v:e.pvalue}];if(e.pvalueadj!=undefined){a.push({k:"adjusted P value",v:e.pvalueadj})}if(e.tvalue!=undefined){a.push({k:"T value",v:e.tvalue})}for(const t in e){if(t=="gene"||t=="averagevalue"||t=="logfoldchange"||t=="pvalue"||t=="pvalueadj"||t=="tvalue"){continue}const n=e[t];if(typeof n!="string"){continue}a.push({k:t,v:n})}i(v.d,a);if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",.9);c(e.vo_circle).attr("fill-opacity",.9)}}function R(t,e){v.hide();if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",0);c(e.vo_circle).attr("fill-opacity",0)}}function A(t,e){if(t.ma_label){t.ma_label.remove();t.ma_labelbg.remove();t.ma_label=null;t.vo_label.remove();t.vo_labelbg.remove();t.vo_label=null;c(t.ma_circle).attr("fill-opacity",0);c(t.vo_circle).attr("fill-opacity",0);return}e.ma_dotarea.node().appendChild(t.ma_g);t.ma_labelbg=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.ma_label=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.ma_label,e.ma_labelbg,t)}));e.vo_dotarea.node().appendChild(t.vo_g);t.vo_labelbg=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.vo_label=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.vo_label,e.vo_labelbg,t)}));c(t.ma_circle).attr("fill-opacity",.8);c(t.vo_circle).attr("fill-opacity",.8)}function E(t,e,a){event.preventDefault();const n=Number.parseFloat(t.attr("x"));const l=Number.parseFloat(t.attr("y"));const o=a.clientX;const r=a.clientY;const s=c(document.body);s.on("mousemove",(a=>{t.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r);e.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r)})).on("mouseup",(t=>{s.on("mousemove",null).on("mouseup",null)}))}function L(t,e,a,l){if(e.tracks){if(!t.ma_label){const o=n({x:a+20,y:l-50});o.header.text(t.gene);P(e,t.gene,o.body)}}A(t,e)}function P(t,e,a){fetch(new Request(t.hostURL+"/genelookup",{method:"POST",body:JSON.stringify({deep:1,input:e,genome:t.genome.name,jwt:t.jwt})})).then((t=>t.json())).then((n=>{if(n.error)throw{message:n.error};if(!n.gmlst||n.gmlst.length==0)throw{message:"No genes can be found for "+e};const l=new Map;for(const t of n.gmlst){if(!l.has(t.chr)){l.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}l.get(t.chr).start=Math.min(t.start,l.get(t.chr).start);l.get(t.chr).stop=Math.max(t.stop,l.get(t.chr).stop)}const o=[...l][0][1];const r=[...t.tracks];p(t.genome,r);f({holder:a,hostURL:t.hostURL,jwt:t.jwt,genome:t.genome,chr:o.chr,start:o.start,stop:o.stop,tklst:r,nobox:true})})).catch((t=>{l(a,t.message);if(t.stack)console.log(t.stack)}))}export{x as mavbparseinput,b as mavbui};
1
+ import{M as t,bn as e,bo as a,Z as n,j as l,U as o,I as r,ag as s,a9 as i,d as c,ah as d,f as p}from"./app-2cd97738.js";import{b as f}from"./block.lazyload-eda77d9b.js";import{d as u}from"./lasso-e8b9500e.js";import{b as g,a as m}from"./axis-747c801e.js";import"./drag-d8daa62f.js";import"./nodrag-ab7d5a9f.js";import"./pointer-c7475677.js";const h="#ffa200";const v=new t;function x(t,e,a,n){if(!t.dataname){t.dataname="Differential expression"}if(t.input){const l=t.input;delete t.input;const o=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},l.trim().split("\n"));if(o){e("Error with diferential gene expressionn data: "+o)}return}let l;if(t.url){l=new Request(t.hostURL+"/urltextfile",{method:"POST",body:JSON.stringify({url:t.url,jwt:n})});delete t.url}else if(t.file){l=new Request(t.hostURL+"/textfile",{method:"POST",body:JSON.stringify({file:t.file,jwt:n})});delete t.file}else{e("neither .input nor .url given for MA-Volcano plot");return}const o=a.append("div").style("margin","20px").style("color","#aaa").style("font-size","1.5em").text("Loading differential gene expression data ...");fetch(l).then((t=>t.json())).then((e=>{if(e.error)throw{message:e.error};if(!e.text)throw{message:"no data loaded"};const l=y({genome:t.genome,filename:t.dataname,holder:a,tracks:t.tracks,hostURL:t.hostURL,jwt:n},e.text.trim().split("\n"));if(l)throw{message:"Error with differential gene expression data: "+l}})).catch((t=>{e(t.message);if(t.stack)console.log(t.stack)})).then((()=>{o.remove()}))}function b(t,n,l,o,r){let s,i,c,d,p,f;if(o!==undefined)[i,c,d,p,f]=e(o,t);else{[s,i,c,d,p,f]=a(100,100,t);s.header.text("Differential gene expression viewer");s.body.style("margin","10px")}i.append("div").style("margin-top","30px").style("color","#858585").html(`\n\t\t<p>Interactive MA and Volcano plot for exploring differentially expressed genes.</p>\n\t\t<a href=https://docs.google.com/document/d/1gEhywyMzMQRM10NFvsObw1yDSWxVY7pxYjsQ2-nd6x4/edit?usp=sharing target=_blank>File format</a>\n\t\t`);function u(t,e){p.style("color",e?"red":"black").text(t)}const g=()=>{d.selectAll("*").remove();const e=d.append("input").attr("type","file").on("change",(e=>{const a=e.target.files[0];if(!a){g();return}if(!a.size){u("Invalid file "+a.name);g();return}const i=new FileReader;i.onload=e=>{const i=c.options[c.selectedIndex].innerHTML;const d=y({genome:t[i],filename:a.name,hostURL:n,jwt:l,holder:o,sandbox_header:r},e.target.result.trim().split("\n"));if(d){u(d,1);g();return}if(s)s.pane.remove()};i.onerror=function(){u("Error reading file "+a.name,1);g();return};i.readAsText(a,"utf8")}));setTimeout((()=>e.node().focus()),1100)};g()}function y(t,e){if(t.tracks){for(const e of t.tracks){e.iscustom=true}}const[a,o]=k(e[0].trim());if(a){return a}t.hastvalue=o.includes("tvalue");const r=[];let s=0;let i=0;let c=0;for(let a=1;a<e.length;a++){const n=e[a];if(n=="")continue;if(n[0]=="#")continue;const l=n.trim().split("\t");const d={};for(let t=0;t<o.length;t++){d[o[t]]=l[t]}if(!d.gene){return"(line "+(a+1)+") missing gene"}d.gene=d.gene.replace(/"/g,"");if(!d.logfoldchange){return"(line "+(a+1)+") missing log fold change"}{const t=Number.parseFloat(d.logfoldchange);if(Number.isNaN(t)){c++;continue}d.logfoldchange=t}if(!d.averagevalue){return"(line "+(a+1)+") missing average value"}{const t=Number.parseFloat(d.averagevalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for average value: "+d.averagevalue}d.averagevalue=t}if(!d.pvalue){s++;continue}else{const t=Number.parseFloat(d.pvalue);if(Number.isNaN(t)){s++;continue}d.pvalue=t}if(d.pvalueadj){const t=Number.parseFloat(d.pvalueadj);if(Number.isNaN(t)){i++;continue}d.pvalueadj=t}if(t.hastvalue){if(!d.tvalue){return"(line "+(a+1)+") missing T value"}{const t=Number.parseFloat(d.tvalue);if(Number.isNaN(t)){return"(line "+(a+1)+") invalid value for T value: "+d.tvalue}d.tvalue=t}}r.push(d)}if(r.length==0){return"No valid data"}if(t.holder==undefined){const e=n({x:100,y:100});e.header.text(t.filename);t.holder=e.body}else{t.holder.selectAll("*").remove();if(t.sandbox_header!==undefined)t.holder.append("div").html('<span style="opacity:.5;font-size:.7em">FILE: </span> '+t.filename)}t.data=r;if(c+s+i>0){const e=t.holder.append("div").style("width","800px");if(c){l(e,c+" lines dropped for invalid log fold change value")}if(s){l(e,s+" lines dropped for invalid P value")}if(i){l(e,i+" lines dropped for invalid adjusted P value")}}_(t);return null}function k(t){const e=t.toLowerCase().split("\t");const a=t.split("\t");if(a.length<=1){return["invalid file header"]}const n=(...t)=>{for(const a of t){const t=e.indexOf(a);if(t!=-1)return t}return-1};let l=n("gene");if(l==-1)return["gene missing from header"];a[l]="gene";l=n("logfc","log.foldchange");if(l==-1)return["log.foldchange missing from header"];a[l]="logfoldchange";l=n("aveexpr","average.value");if(l==-1)return["average.value missing from header"];a[l]="averagevalue";l=n("t","t.value");if(l!=-1){a[l]="tvalue"}l=n("p.value");if(l==-1)return["p.value missing from header"];a[l]="pvalue";l=n("p.value.adjusted","adj.p.val","adjustedp-value(fdr)");if(l!=-1){a[l]="pvalueadj"}return[null,a]}function _(t){if(t.hastvalue){let e=Math.abs(t.data[0].tvalue);let a=0;for(const n of t.data){const t=Math.abs(n.tvalue);e=Math.min(e,t);a=Math.max(a,t)}t.tvaluemin=e;t.tvaluemax=a}const e=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const a=w(e,t);const n=t.holder.append("div").style("display","inline-block").style("vertical-align","top").style("margin","20px");const l=M(n,t);const r=t.holder.append("div").style("margin","20px");const s=r.append("textarea").style("display","inline-block").attr("rows",5).attr("cols",10).style("resize","both").attr("placeholder","Enter genes, separate by space or newline");const i=r.append("div").style("display","inline-block").style("margin-left","10px").style("vertical-align","top");i.append("button").style("display","block").text("Show gene labels").on("click",(e=>{const a=s.property("value").trim();if(a=="")return;const n=new Set;for(const t of a.split(/[\s\n\t]+/)){n.add(t.toUpperCase())}if(n.size==0)return;for(const e of t.data){if(!e.ma_label&&n.has(e.gene.toUpperCase())){A(e,t)}}}));i.append("button").style("display","block").text("Remove all labels").on("click",(e=>{for(const e of t.data){if(e.ma_label){A(e,t)}}}));i.append("div").style("margin-top","10px").style("color","#858585").style("font-size",".8em").html('<span style="font-size:1.3em">TIP:</span> click circles to toggle highlight on genes;<br>drag to move a gene label around.');const c=r.append("div").style("display","inline-block").style("margin-left","30px").style("vertical-align","top");c.append("button").text("Get MA plot").style("display","block").on("click",(t=>{o(a.node(),"MAplot")}));c.append("button").text("Get volcano plot").style("display","block").on("click",(t=>{o(l.node(),"Volcano")}))}function w(t,e){const a=[];let n=0,l=0;for(const t of e.data){n=Math.min(n,t.logfoldchange);l=Math.max(l,t.logfoldchange);a.push(t.averagevalue)}a.sort(((t,e)=>t-e));const o=a[0];const i=a[a.length-1];let c,d,p,f,u,v,x,b=50,y=50,k;const _=t.append("svg");const w=_.append("g");const M=_.append("g");const A=_.append("text").text("Average expression value").attr("fill","black").attr("text-anchor","middle");const E=_.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");e.ma_dotarea=_.append("g");const P=e.ma_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const U=r().domain([o,i]);const z=r().domain([n,l]);let F;if(e.hastvalue){F=r().domain([e.tvaluemin,e.tvaluemax])}const S=e.ma_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.ma_g=this}));const T=S.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.ma_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const I=e.ma_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");const O=_.append("g");const Y=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const X=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const C=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const V=O.append("rect").attr("fill","white").attr("stroke",h).attr("shape-rendering","crispEdges");const D=O.append("line").attr("stroke",h).attr("shape-rendering","crispEdges");const q=a[Math.ceil(a.length*.05)];const J=a[Math.ceil(a.length*.95)];const G=a[Math.ceil(a.length*.25)];const Q=a[Math.ceil(a.length*.75)];const H=a[Math.ceil(a.length/2)];function W(t,a){p=t;f=a;c=Math.max(50,p/8);d=Math.max(50,f/8);k=Math.max(p,f)/80;const n=k*3;U.range([0,p]);z.range([f,0]);if(F)F.range([k,n]);T.each((t=>{t.ma_radius=F?F(Math.abs(t.tvalue)):k}));x=k*3;u=Math.max(n,p/50);v=Math.max(n,f/50);w.attr("transform","translate("+c+","+b+")");M.attr("transform","translate("+(c+u)+","+(b+f+v+x+v)+")");A.attr("x",c+u+p/2).attr("y",b+f+v+x+v+d-5);E.attr("transform","translate(15,"+(b+f/2)+") rotate(-90)");e.ma_dotarea.attr("transform","translate("+(c+u)+","+b+")");P.attr("width",p).attr("height",f);S.attr("transform",(t=>"translate("+U(t.averagevalue)+","+z(t.logfoldchange)+")"));T.attr("r",(t=>t.ma_radius));I.attr("x2",p).attr("y1",z(0)).attr("y2",z(0));O.attr("transform","translate("+(c+u)+","+(b+f+v)+")");const l=U(q),o=U(G),r=U(H),i=U(Q),h=U(J);X.attr("x1",l).attr("x2",l).attr("y2",x);C.attr("x1",h).attr("x2",h).attr("y2",x);D.attr("x1",r).attr("x2",r).attr("y2",x);V.attr("x",o).attr("width",i-o).attr("height",x);Y.attr("x1",l).attr("x2",h).attr("y1",x/2).attr("y2",x/2);_.attr("width",c+u+p+y).attr("height",b+f+v+x+v+d);s({axis:w.call(g().scale(z)),color:"black",showline:true});s({axis:M.call(m().scale(U)),color:"black",showline:true})}W(400,400);j(S.selectAll("circle"),_,"vo_circle");return _}function M(t,e){let a=0,n=0,l=0,o=0;for(const t of e.data){a=Math.min(a,t.logfoldchange);n=Math.max(n,t.logfoldchange);if(t.pvalue==0){continue}else{const e=-Math.log(t.pvalue,10);l=Math.min(l,e);o=Math.max(o,e)}}let i,c,d,p,f,u,v=50,x=50,b;const y=t.append("svg");const k=y.append("g");const _=y.append("g");const w=y.append("text").text("log2(fold change)").attr("fill","black").attr("text-anchor","middle");const M=y.append("text").text("-log(P value)").attr("fill","black").attr("text-anchor","middle");e.vo_dotarea=y.append("g");const A=e.vo_dotarea.append("rect").attr("stroke","#ededed").attr("fill","none").attr("shape-rendering","crispEdges");const E=r().domain([a,n]);const P=r().domain([l,o]);let U;if(e.hastvalue)U=r().domain([e.tvaluemin,e.tvaluemax]);const z=e.vo_dotarea.selectAll().data(e.data).enter().append("g").each((function(t){t.vo_g=this}));const F=z.append("circle").attr("stroke","black").attr("stroke-opacity",.2).attr("stroke-width",1).attr("fill",h).attr("fill-opacity",0).each((function(t){t.vo_circle=this})).on("mouseover",N).on("mouseout",R).on("click",((t,a)=>{L(a,e,t.clientX,t.clientY)}));const S=e.vo_dotarea.append("line").attr("stroke","#ccc").attr("shape-rendering","crispEdges");function T(t,a){d=t;p=a;i=Math.max(50,d/8);c=Math.max(50,p/8);b=Math.max(d,p)/80;const n=b*3;if(U)U.range([b,n]);F.each((t=>{t.vo_radius=U?U(Math.abs(t.tvalue)):b}));f=Math.max(n,d/50);u=Math.max(n,p/50);k.attr("transform","translate("+i+","+v+")");_.attr("transform","translate("+(i+f)+","+(v+p+u)+")");w.attr("x",i+f+d/2).attr("y",v+p+u+c-5);M.attr("transform","translate(15,"+(v+p/2)+") rotate(-90)");e.vo_dotarea.attr("transform","translate("+(i+f)+","+v+")");A.attr("width",d).attr("height",p);E.range([0,d]);P.range([p,0]);z.attr("transform",(t=>"translate("+E(t.logfoldchange)+","+P(t.pvalue==0?o:-Math.log(t.pvalue,10))+")"));F.attr("r",(t=>t.vo_radius));S.attr("x1",E(0)).attr("x2",E(0)).attr("y2",p);y.attr("width",i+f+d+x).attr("height",v+p+u+c);s({axis:k.call(g().scale(P)),color:"black",showline:true});s({axis:_.call(m().scale(E)),color:"black",showline:true})}T(400,400);if(e.data[0].pvalueadj!=undefined){const a=t.append("div").style("margin","20px");a.append("span").text("Select P value for Volcano plot:");const n=a.append("select").style("margin-left","5px").on("change",(t=>{l=0;o=0;const a=n.node().selectedIndex==0;for(const t of e.data){const e=a?t.pvalue:t.pvalueadj;if(e==0)continue;const n=-Math.log(e,10);l=Math.min(l,n);o=Math.max(o,n)}P.domain([l,o]);s({axis:k.call(g().scale(P)),color:"black",showline:true});z.attr("transform",(t=>{const e=a?t.pvalue:t.pvalueadj;return"translate("+E(t.logfoldchange)+","+P(e==0?o:-Math.log(e,10))+")"}));M.text(a?"-log(P value)":"-log(adjusted P value)")}));n.append("option").text("Unadjusted P value");n.append("option").text("Adjusted P value")}j(z.selectAll("circle"),y,"ma_circle");return y}function j(t,e,a){const n=u().items(t).targetArea(e);function l(){e.selectAll(".possible").style("fill-opacity",0).classed("not_possible",true).classed("selected",false).each((t=>{c(t[a]).attr("fill-opacity",0)}))}function o(){n.possibleItems().style("fill-opacity",.9).classed("not_possible",false).classed("possible",true).each((t=>{c(t[a]).attr("fill-opacity",.9)}))}function r(){}n.on("start",l).on("draw",o).on("end",r);e.call(n)}function N(t,e){v.clear().show(t.clientX,t.clientY);const a=[{k:"gene",v:e.gene},{k:"average value",v:e.averagevalue},{k:"log fold change",v:e.logfoldchange},{k:"P value",v:e.pvalue}];if(e.pvalueadj!=undefined){a.push({k:"adjusted P value",v:e.pvalueadj})}if(e.tvalue!=undefined){a.push({k:"T value",v:e.tvalue})}for(const t in e){if(t=="gene"||t=="averagevalue"||t=="logfoldchange"||t=="pvalue"||t=="pvalueadj"||t=="tvalue"){continue}const n=e[t];if(typeof n!="string"){continue}a.push({k:t,v:n})}i(v.d,a);if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",.9);c(e.vo_circle).attr("fill-opacity",.9)}}function R(t,e){v.hide();if(!e.ma_label){c(e.ma_circle).attr("fill-opacity",0);c(e.vo_circle).attr("fill-opacity",0)}}function A(t,e){if(t.ma_label){t.ma_label.remove();t.ma_labelbg.remove();t.ma_label=null;t.vo_label.remove();t.vo_labelbg.remove();t.vo_label=null;c(t.ma_circle).attr("fill-opacity",0);c(t.vo_circle).attr("fill-opacity",0);return}e.ma_dotarea.node().appendChild(t.ma_g);t.ma_labelbg=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.ma_label=c(t.ma_g).append("text").text(t.gene).attr("x",t.ma_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.ma_label,e.ma_labelbg,t)}));e.vo_dotarea.node().appendChild(t.vo_g);t.vo_labelbg=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("font-family",d).attr("fill","none").attr("stroke","white").attr("stroke-width",3);t.vo_label=c(t.vo_g).append("text").text(t.gene).attr("x",t.vo_radius+5).attr("y",0).attr("dominant-baseline","central").attr("font-size",14).attr("fill","black").attr("font-family",d).on("mousedown",((t,e)=>{E(e.vo_label,e.vo_labelbg,t)}));c(t.ma_circle).attr("fill-opacity",.8);c(t.vo_circle).attr("fill-opacity",.8)}function E(t,e,a){event.preventDefault();const n=Number.parseFloat(t.attr("x"));const l=Number.parseFloat(t.attr("y"));const o=a.clientX;const r=a.clientY;const s=c(document.body);s.on("mousemove",(a=>{t.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r);e.attr("x",n+a.clientX-o).attr("y",l+a.clientY-r)})).on("mouseup",(t=>{s.on("mousemove",null).on("mouseup",null)}))}function L(t,e,a,l){if(e.tracks){if(!t.ma_label){const o=n({x:a+20,y:l-50});o.header.text(t.gene);P(e,t.gene,o.body)}}A(t,e)}function P(t,e,a){fetch(new Request(t.hostURL+"/genelookup",{method:"POST",body:JSON.stringify({deep:1,input:e,genome:t.genome.name,jwt:t.jwt})})).then((t=>t.json())).then((n=>{if(n.error)throw{message:n.error};if(!n.gmlst||n.gmlst.length==0)throw{message:"No genes can be found for "+e};const l=new Map;for(const t of n.gmlst){if(!l.has(t.chr)){l.set(t.chr,{chr:t.chr,start:t.start,stop:t.stop})}l.get(t.chr).start=Math.min(t.start,l.get(t.chr).start);l.get(t.chr).stop=Math.max(t.stop,l.get(t.chr).stop)}const o=[...l][0][1];const r=[...t.tracks];p(t.genome,r);f({holder:a,hostURL:t.hostURL,jwt:t.jwt,genome:t.genome,chr:o.chr,start:o.start,stop:o.stop,tklst:r,nobox:true})})).catch((t=>{l(a,t.message);if(t.stack)console.log(t.stack)}))}export{x as mavbparseinput,b as mavbui};
@@ -1 +1 @@
1
- import{M as t,k as e,p as a,q as n,ah as r,a9 as o,ag as i,I as s,w as l}from"./app-b369b169.js";import{c as p}from"./axis-747c801e.js";const f=80;const c=5;async function d(t){window.obj=t;t.errdiv=t.div.append("div");try{g(t);await h(t)}catch(e){t.errdiv.text(e.message||e);if(e.stack)console.log(e.stack)}}function g(a){a.motifrowheight=16;a.gaincolor="red";a.losscolor="blue";a.flankspan=15;if(!a.fimo_thresh)a.fimo_thresh=.001;if(!a.minabslogp)a.minabslogp=1;a.tip=new t;const n=a.div.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","10px");{const t=n.append("tr");t.append("td").text("Flanking sequence (#nt)");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.flankspan).on("keyup",(t=>{if(!e(t))return;const n=Number.parseInt(t.target.value);if(n<10){window.alert("Enter integer above 10");return}if(n==a.flankspan)return;a.flankspan=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("P-value cutoff");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.fimo_thresh).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a p value between 0 to 1");return}if(n==a.fimo_thresh)return;a.fimo_thresh=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("Minimum log10 p-value difference");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.minabslogp).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a number above 0");return}if(n==a.minabslogp)return;a.minabslogp=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}a.wait=a.div.append("div");a.svg=a.div.append("svg");a.dynamic_g=a.svg.append("g");a.legend={};a.legend.logpvaluediv=a.div.append("div");m(a)}function m(t){if(!t.factor_profiles)return;if(!Array.isArray(t.factor_profiles))throw"factor_profiles is not array";for(const e of t.factor_profiles){if(!e.name)throw"name missing for a profile";if(!e.leftpad)e.leftpad=20;if(!e.width)e.width=300;e.headerg=t.svg.append("g");e.textlabel=e.headerg.append("text").text(e.name).attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30);if(e.isgenevalue){e.color="green";e.axisg=e.headerg.append("g");continue}if(e.isgenevalueonesample){if(!e.samplename)throw"samplename missing for isgenevalueonesample";e.barcolor="#62945B";e.axisg=e.headerg.append("g");continue}throw"unknown profile type"}}function h(t){a(t.wait.text("Loading..."));t.dynamic_g.selectAll("*").remove();const e={genome:t.genome.name,m:t.m,fimo_thresh:t.fimo_thresh,flankspan:t.flankspan,minabslogp:t.minabslogp};return n("fimo",e).then((e=>{if(e.error)throw"Error: cannot do motif finding: "+e.error;if(t.callback_once){t.callback_once();delete t.callback_once}if(!e.items||e.items.length==0)throw"Found no motif change due to this mutation";t.wait.style("display","none");for(const t of e.items){if(t.attr){t.gene=t.attr["Transcription factor"]}else{t.gene=t.name}}return u(e,t)})).catch((e=>{t.wait.style("display","block").text(e.message||e);if(e.stack)console.log(e.stack)}))}async function u(t,e){x(t,e);if(e.factor_profiles){await v(t,e);let a=Number.parseInt(e.svg.attr("width"));for(const n of e.factor_profiles){n.headerg.attr("transform","translate("+(a+n.leftpad)+","+f+")");n.motifs=[];for(const e of t.items){const t=e.layer1_g.append("g").attr("transform","translate("+(a+n.leftpad)+",0)");n.motifs.push({motif:e,g:t,message:t.append("text").text("Loading...").attr("dominant-baseline","central").attr("fill","#ccc")})}a+=n.leftpad+n.width;e.svg.attr("width",a+5);await _(e,n);for(const e of t.items){e.bgbox.attr("width",a);e.coverbox.attr("width",a)}}}}function x(t,e){const a=14;const n=a*t.refseq.length;{const n=(e.m.pos-t.refstart+.5)*a;const r=e.dynamic_g.append("g").attr("transform","translate("+n+","+f+")");r.append("rect").attr("x",-a/2).attr("y",-10).attr("width",a).attr("height",10).attr("fill","#666");r.append("text").attr("y",-15).attr("text-anchor","middle").text(e.m.chr+":"+e.m.pos+" "+e.m.ref+">"+e.m.alt)}let o=f+c;const i=1;const s=e.dynamic_g.append("g").attr("transform","translate(0,"+o+")");for(const[o,l]of t.items.entries()){l.g=s.append("g").attr("transform","translate(0,"+(e.motifrowheight*(o+.5)+i*o)+")");l.layer1_g=l.g.append("g");l.layer2_g=l.g.append("g");l.bgbox=l.layer1_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white");const p=(l.start-t.refstart)*a;const f=(Math.min(l.stop,t.refstop)-l.start)*a;l.layer1_g.append("rect").attr("x",p).attr("y",-e.motifrowheight/2).attr("width",f).attr("height",e.motifrowheight).attr("fill",l.gain?e.gaincolor:e.losscolor).attr("fill-opacity",l.logpvaluediff/(l.gain?t.valuemax:t.valuemin));let c;if(l.strand=="+"){c="> "+l.name+" >"}else{c="< "+l.name+" <"}l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("stroke","white").attr("stroke-width",3).attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.coverbox=l.layer2_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white").attr("fill-opacity",0).on("mouseover",(t=>{l.bgbox.attr("fill","#f9fabd");y(l,e,t)})).on("mouseout",(()=>{l.bgbox.attr("fill","white");e.tip.hide()}))}o+=(i+e.motifrowheight)*t.items.length+20;b(t,e);e.svg.attr("width",n).attr("height",o)}function y(t,e,a){e.tip.clear();if(t.attr){e.tip.d.append("div").text("MOTIF").style("font-weight","bold");const a=[{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a);e.tip.d.append("div").text("FACTOR").style("font-weight","bold");const n=[];for(const e in t.attr){n.push({k:e,v:t.attr[e]})}o(e.tip.d,n)}else{const a=[{k:"TF",v:t.name},{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a)}e.tip.show(a.clientX,a.clientY)}function w(t,e){return(t.pvalue_ref==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">REF</span> not found</span>':'<span style="background-color:'+e.losscolor+';padding:2px;color:white;"><span style="font-size:.7em">REF</span> '+t.pvalue_ref+"</span>")+"<br>"+(t.pvalue_alt==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">ALT</span> not found</span>':'<span style="background-color:'+e.gaincolor+';padding:2px;color:white;"><span style="font-size:.7em">ALT</span> '+t.pvalue_alt+"</span>")}function b(t,e){e.legend.logpvaluediv.selectAll("*").remove();const a=50,n=4,o=12,l=55,f=20;e.legend.logpvaluediv.append("span").text("Log10 p-value difference");const c=e.legend.logpvaluediv.append("svg").attr("width",(a+l)*2).attr("height",o+n+f);const d=c.append("g").attr("transform","translate("+a+","+(o+n)+")");i({axis:d.call(p().scale(s().domain([t.valuemin,0,t.valuemax]).range([0,l,l*2])).tickValues([t.valuemin,0,t.valuemax]).tickSize(n))});const g=Math.random().toString();const m=Math.random().toString();const h=c.append("defs");{const t=h.append("linearGradient").attr("id",m);t.append("stop").attr("offset","0%").attr("stop-color",e.losscolor);t.append("stop").attr("offset","100%").attr("stop-color","white")}{const t=h.append("linearGradient").attr("id",g);t.append("stop").attr("offset","0%").attr("stop-color","white");t.append("stop").attr("offset","100%").attr("stop-color",e.gaincolor)}c.append("rect").attr("x",a).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+m+")");c.append("rect").attr("x",a+l).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+g+")");c.append("text").attr("x",a-5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("text-anchor","end").attr("dominant-baseline","central").attr("fill","black").text("Loss");c.append("text").attr("x",a+l*2+5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("dominant-baseline","central").attr("fill","black").text("Gain")}async function v(t,e){e.gene2position={};const a=new Set;for(const e of t.items){a.add(e.gene)}for(const t of a){const a=await k(t,e);if(a){e.gene2position[t]=a}}}function k(t,e){return n("genelookup",{genome:e.genome.name,input:t,deep:1}).then((t=>{if(!t.gmlst)return null;const e=l(t.gmlst);return e[0]}))}function _(t,e){if(e.isgenevalue){return M(t,e)}if(e.isgenevalueonesample){return E(t,e)}throw"unknown profile type"}async function E(t,e){const r={genome:t.genome.name,genes:[],sample:e.samplename};if(e.mdslabel){r.dslabel=e.mdslabel;r.querykey=e.querykey;if(e.samplegroup_attrlst){r.getgroup=e.samplegroup_attrlst}}else{r.iscustom=1;r.file=e.file;r.url=e.url;r.indexURL=e.indexURL}for(const e in t.gene2position){const a=t.gene2position[e];r.genes.push({gene:e,chr:a.chr,start:a.start,stop:a.stop})}return n("mdsgenevalueonesample",r).then((a=>{if(a.error)throw a.error;for(const t of e.motifs){t.message.text("No data")}if(a.nodata)return;if(!a.result)throw"error";let n=0,r=0;for(const t in a.result){n=Math.min(n,a.result[t]);r=Math.max(r,a.result[t])}const o=s().domain([n,r]).range([0,e.width]);i({axis:e.axisg.call(p().scale(o).ticks(4)),showline:1});for(const n of e.motifs){const r=a.result[n.motif.gene];if(Number.isFinite(r)){n.message.text("");n.g.append("rect").attr("y",-t.motifrowheight/2).attr("width",Math.max(1,o(r))).attr("height",t.motifrowheight).attr("shape-rendering","crispEdges").attr("fill",e.barcolor)}}e.textlabel.attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)})).catch((e=>{if(e.stack)console.log(e.stack);a(t.wait.text(e.message||e))}))}async function M(t,e){e.gene2result=new Map;for(const a in t.gene2position){const n=await L(t,e,a);if(n){z(t,e,a,n);e.gene2result.set(a,n);F(t,e)}}N(t,e)}function z(t,e,a,n){if(n.nodata)return;for(const t of e.motifs){if(t.motif.gene!=a)continue;t.boxplot={out:[]};if(n.w1!=undefined){t.boxplot.hline=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew1=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew2=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.box=t.g.append("rect").attr("fill","white").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linep50=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges")}if(n.out){for(const a of n.out){const n=t.g.append("circle").attr("stroke",e.color).attr("fill","white").attr("fill-opacity",0);t.boxplot.out.push({value:a.value,circle:n})}}}}function F(t,e){let a=0,n=0;for(const t of e.gene2result.values()){a=Math.min(a,t.min);n=Math.max(n,t.max)}const r=s().domain([a,n]).range([0,e.width]);const o=t.motifrowheight-2;for(const[t,a]of e.gene2result){for(const n of e.motifs){if(n.motif.gene!=t)continue;const e=n.boxplot;if(!e)continue;if(e.hline){const t=r(a.w1);const n=r(a.w2);const i=r(a.p25);const s=r(a.p50);const l=r(a.p75);e.hline.transition().attr("x1",t).attr("x2",n);e.linew1.transition().attr("x1",t).attr("x2",t).attr("y1",-o/2).attr("y2",o/2);e.linew2.transition().attr("x1",n).attr("x2",n).attr("y1",-o/2).attr("y2",o/2);e.box.transition().attr("x",i).attr("y",-o/2).attr("width",l-i).attr("height",o);e.linep50.transition().attr("x1",s).attr("x2",s).attr("y1",-o/2).attr("y2",o/2)}for(const t of e.out){t.circle.transition().attr("cx",r(t.value)).attr("r",o/3)}}}i({axis:e.axisg.transition().call(p().scale(r).ticks(4)),showline:1})}function L(t,e,a){const r=t.gene2position[a];const o={genome:t.genome.name,gene:a,chr:r.chr,start:r.start,stop:r.stop,getgroup2boxplot:1};if(e.mdslabel){o.dslabel=e.mdslabel;o.querykey=e.querykey;if(e.samplegroup_attrlst){o.getgroup=e.samplegroup_attrlst}}else{o.iscustom=1;o.file=e.file;o.url=e.url;o.indexURL=e.indexURL}return n("mdsgeneboxplot",o).then((t=>{if(t.error)throw"Error: "+t.error;if(t.nodata)throw"No data";for(const t of e.motifs){if(t.motif.gene==a){t.message.text("")}}return t})).catch((t=>{if(t.stack)console.log(t.stack);for(const n of e.motifs){if(n.motif.gene==a){n.message.text(t.message||t)}}}))}function N(t,e){let a=0;for(const t of e.gene2result.values()){a=Math.max(a,t.n)}e.textlabel.text(e.name+" (n="+a+")").attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)}export{d as init};
1
+ import{M as t,k as e,p as a,q as n,ah as r,a9 as o,ag as i,I as s,w as l}from"./app-2cd97738.js";import{c as p}from"./axis-747c801e.js";const f=80;const c=5;async function d(t){window.obj=t;t.errdiv=t.div.append("div");try{g(t);await h(t)}catch(e){t.errdiv.text(e.message||e);if(e.stack)console.log(e.stack)}}function g(a){a.motifrowheight=16;a.gaincolor="red";a.losscolor="blue";a.flankspan=15;if(!a.fimo_thresh)a.fimo_thresh=.001;if(!a.minabslogp)a.minabslogp=1;a.tip=new t;const n=a.div.append("table").style("border-spacing","3px").style("border-collapse","separate").style("margin","10px");{const t=n.append("tr");t.append("td").text("Flanking sequence (#nt)");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.flankspan).on("keyup",(t=>{if(!e(t))return;const n=Number.parseInt(t.target.value);if(n<10){window.alert("Enter integer above 10");return}if(n==a.flankspan)return;a.flankspan=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("P-value cutoff");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.fimo_thresh).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a p value between 0 to 1");return}if(n==a.fimo_thresh)return;a.fimo_thresh=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}{const t=n.append("tr");t.append("td").text("Minimum log10 p-value difference");const r=t.append("td");r.append("input").attr("type","number").style("margin","0px 10px").style("width","100px").property("value",a.minabslogp).on("keyup",(t=>{if(!e(t))return;const n=Number.parseFloat(t.target.value);if(n<=0){window.alert("Enter a number above 0");return}if(n==a.minabslogp)return;a.minabslogp=n;h(a)}));r.append("span").style("font-size","0.7em").style("opacity",.5).text("Press ENTER to update")}a.wait=a.div.append("div");a.svg=a.div.append("svg");a.dynamic_g=a.svg.append("g");a.legend={};a.legend.logpvaluediv=a.div.append("div");m(a)}function m(t){if(!t.factor_profiles)return;if(!Array.isArray(t.factor_profiles))throw"factor_profiles is not array";for(const e of t.factor_profiles){if(!e.name)throw"name missing for a profile";if(!e.leftpad)e.leftpad=20;if(!e.width)e.width=300;e.headerg=t.svg.append("g");e.textlabel=e.headerg.append("text").text(e.name).attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30);if(e.isgenevalue){e.color="green";e.axisg=e.headerg.append("g");continue}if(e.isgenevalueonesample){if(!e.samplename)throw"samplename missing for isgenevalueonesample";e.barcolor="#62945B";e.axisg=e.headerg.append("g");continue}throw"unknown profile type"}}function h(t){a(t.wait.text("Loading..."));t.dynamic_g.selectAll("*").remove();const e={genome:t.genome.name,m:t.m,fimo_thresh:t.fimo_thresh,flankspan:t.flankspan,minabslogp:t.minabslogp};return n("fimo",e).then((e=>{if(e.error)throw"Error: cannot do motif finding: "+e.error;if(t.callback_once){t.callback_once();delete t.callback_once}if(!e.items||e.items.length==0)throw"Found no motif change due to this mutation";t.wait.style("display","none");for(const t of e.items){if(t.attr){t.gene=t.attr["Transcription factor"]}else{t.gene=t.name}}return u(e,t)})).catch((e=>{t.wait.style("display","block").text(e.message||e);if(e.stack)console.log(e.stack)}))}async function u(t,e){x(t,e);if(e.factor_profiles){await b(t,e);let a=Number.parseInt(e.svg.attr("width"));for(const n of e.factor_profiles){n.headerg.attr("transform","translate("+(a+n.leftpad)+","+f+")");n.motifs=[];for(const e of t.items){const t=e.layer1_g.append("g").attr("transform","translate("+(a+n.leftpad)+",0)");n.motifs.push({motif:e,g:t,message:t.append("text").text("Loading...").attr("dominant-baseline","central").attr("fill","#ccc")})}a+=n.leftpad+n.width;e.svg.attr("width",a+5);await _(e,n);for(const e of t.items){e.bgbox.attr("width",a);e.coverbox.attr("width",a)}}}}function x(t,e){const a=14;const n=a*t.refseq.length;{const n=(e.m.pos-t.refstart+.5)*a;const r=e.dynamic_g.append("g").attr("transform","translate("+n+","+f+")");r.append("rect").attr("x",-a/2).attr("y",-10).attr("width",a).attr("height",10).attr("fill","#666");r.append("text").attr("y",-15).attr("text-anchor","middle").text(e.m.chr+":"+e.m.pos+" "+e.m.ref+">"+e.m.alt)}let o=f+c;const i=1;const s=e.dynamic_g.append("g").attr("transform","translate(0,"+o+")");for(const[o,l]of t.items.entries()){l.g=s.append("g").attr("transform","translate(0,"+(e.motifrowheight*(o+.5)+i*o)+")");l.layer1_g=l.g.append("g");l.layer2_g=l.g.append("g");l.bgbox=l.layer1_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white");const p=(l.start-t.refstart)*a;const f=(Math.min(l.stop,t.refstop)-l.start)*a;l.layer1_g.append("rect").attr("x",p).attr("y",-e.motifrowheight/2).attr("width",f).attr("height",e.motifrowheight).attr("fill",l.gain?e.gaincolor:e.losscolor).attr("fill-opacity",l.logpvaluediff/(l.gain?t.valuemax:t.valuemin));let c;if(l.strand=="+"){c="> "+l.name+" >"}else{c="< "+l.name+" <"}l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("stroke","white").attr("stroke-width",3).attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.layer1_g.append("text").text(c).attr("x",p+f/2).attr("dominant-baseline","central").attr("text-anchor","middle").attr("font-size",e.motifrowheight-3).attr("font-family",r).style("white-space","pre");l.coverbox=l.layer2_g.append("rect").attr("y",-e.motifrowheight/2).attr("width",n).attr("height",e.motifrowheight).attr("fill","white").attr("fill-opacity",0).on("mouseover",(t=>{l.bgbox.attr("fill","#f9fabd");y(l,e,t)})).on("mouseout",(()=>{l.bgbox.attr("fill","white");e.tip.hide()}))}o+=(i+e.motifrowheight)*t.items.length+20;v(t,e);e.svg.attr("width",n).attr("height",o)}function y(t,e,a){e.tip.clear();if(t.attr){e.tip.d.append("div").text("MOTIF").style("font-weight","bold");const a=[{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a);e.tip.d.append("div").text("FACTOR").style("font-weight","bold");const n=[];for(const e in t.attr){n.push({k:e,v:t.attr[e]})}o(e.tip.d,n)}else{const a=[{k:"TF",v:t.name},{k:"P-values",v:w(t,e)},{k:"Strand",v:t.strand}];o(e.tip.d,a)}e.tip.show(a.clientX,a.clientY)}function w(t,e){return(t.pvalue_ref==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">REF</span> not found</span>':'<span style="background-color:'+e.losscolor+';padding:2px;color:white;"><span style="font-size:.7em">REF</span> '+t.pvalue_ref+"</span>")+"<br>"+(t.pvalue_alt==undefined?'<span style="opacity:.5;padding:2px"><span style="font-size:.7em">ALT</span> not found</span>':'<span style="background-color:'+e.gaincolor+';padding:2px;color:white;"><span style="font-size:.7em">ALT</span> '+t.pvalue_alt+"</span>")}function v(t,e){e.legend.logpvaluediv.selectAll("*").remove();const a=50,n=4,o=12,l=55,f=20;e.legend.logpvaluediv.append("span").text("Log10 p-value difference");const c=e.legend.logpvaluediv.append("svg").attr("width",(a+l)*2).attr("height",o+n+f);const d=c.append("g").attr("transform","translate("+a+","+(o+n)+")");i({axis:d.call(p().scale(s().domain([t.valuemin,0,t.valuemax]).range([0,l,l*2])).tickValues([t.valuemin,0,t.valuemax]).tickSize(n))});const g=Math.random().toString();const m=Math.random().toString();const h=c.append("defs");{const t=h.append("linearGradient").attr("id",m);t.append("stop").attr("offset","0%").attr("stop-color",e.losscolor);t.append("stop").attr("offset","100%").attr("stop-color","white")}{const t=h.append("linearGradient").attr("id",g);t.append("stop").attr("offset","0%").attr("stop-color","white");t.append("stop").attr("offset","100%").attr("stop-color",e.gaincolor)}c.append("rect").attr("x",a).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+m+")");c.append("rect").attr("x",a+l).attr("y",o+n).attr("width",l).attr("height",f).attr("fill","url(#"+g+")");c.append("text").attr("x",a-5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("text-anchor","end").attr("dominant-baseline","central").attr("fill","black").text("Loss");c.append("text").attr("x",a+l*2+5).attr("y",o+n+f/2).attr("font-family",r).attr("font-size",o).attr("dominant-baseline","central").attr("fill","black").text("Gain")}async function b(t,e){e.gene2position={};const a=new Set;for(const e of t.items){a.add(e.gene)}for(const t of a){const a=await k(t,e);if(a){e.gene2position[t]=a}}}function k(t,e){return n("genelookup",{genome:e.genome.name,input:t,deep:1}).then((t=>{if(!t.gmlst)return null;const e=l(t.gmlst);return e[0]}))}function _(t,e){if(e.isgenevalue){return M(t,e)}if(e.isgenevalueonesample){return E(t,e)}throw"unknown profile type"}async function E(t,e){const r={genome:t.genome.name,genes:[],sample:e.samplename};if(e.mdslabel){r.dslabel=e.mdslabel;r.querykey=e.querykey;if(e.samplegroup_attrlst){r.getgroup=e.samplegroup_attrlst}}else{r.iscustom=1;r.file=e.file;r.url=e.url;r.indexURL=e.indexURL}for(const e in t.gene2position){const a=t.gene2position[e];r.genes.push({gene:e,chr:a.chr,start:a.start,stop:a.stop})}return n("mdsgenevalueonesample",r).then((a=>{if(a.error)throw a.error;for(const t of e.motifs){t.message.text("No data")}if(a.nodata)return;if(!a.result)throw"error";let n=0,r=0;for(const t in a.result){n=Math.min(n,a.result[t]);r=Math.max(r,a.result[t])}const o=s().domain([n,r]).range([0,e.width]);i({axis:e.axisg.call(p().scale(o).ticks(4)),showline:1});for(const n of e.motifs){const r=a.result[n.motif.gene];if(Number.isFinite(r)){n.message.text("");n.g.append("rect").attr("y",-t.motifrowheight/2).attr("width",Math.max(1,o(r))).attr("height",t.motifrowheight).attr("shape-rendering","crispEdges").attr("fill",e.barcolor)}}e.textlabel.attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)})).catch((e=>{if(e.stack)console.log(e.stack);a(t.wait.text(e.message||e))}))}async function M(t,e){e.gene2result=new Map;for(const a in t.gene2position){const n=await L(t,e,a);if(n){z(t,e,a,n);e.gene2result.set(a,n);F(t,e)}}N(t,e)}function z(t,e,a,n){if(n.nodata)return;for(const t of e.motifs){if(t.motif.gene!=a)continue;t.boxplot={out:[]};if(n.w1!=undefined){t.boxplot.hline=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew1=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linew2=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.box=t.g.append("rect").attr("fill","white").attr("stroke",e.color).attr("shape-rendering","crispEdges");t.boxplot.linep50=t.g.append("line").attr("stroke",e.color).attr("shape-rendering","crispEdges")}if(n.out){for(const a of n.out){const n=t.g.append("circle").attr("stroke",e.color).attr("fill","white").attr("fill-opacity",0);t.boxplot.out.push({value:a.value,circle:n})}}}}function F(t,e){let a=0,n=0;for(const t of e.gene2result.values()){a=Math.min(a,t.min);n=Math.max(n,t.max)}const r=s().domain([a,n]).range([0,e.width]);const o=t.motifrowheight-2;for(const[t,a]of e.gene2result){for(const n of e.motifs){if(n.motif.gene!=t)continue;const e=n.boxplot;if(!e)continue;if(e.hline){const t=r(a.w1);const n=r(a.w2);const i=r(a.p25);const s=r(a.p50);const l=r(a.p75);e.hline.transition().attr("x1",t).attr("x2",n);e.linew1.transition().attr("x1",t).attr("x2",t).attr("y1",-o/2).attr("y2",o/2);e.linew2.transition().attr("x1",n).attr("x2",n).attr("y1",-o/2).attr("y2",o/2);e.box.transition().attr("x",i).attr("y",-o/2).attr("width",l-i).attr("height",o);e.linep50.transition().attr("x1",s).attr("x2",s).attr("y1",-o/2).attr("y2",o/2)}for(const t of e.out){t.circle.transition().attr("cx",r(t.value)).attr("r",o/3)}}}i({axis:e.axisg.transition().call(p().scale(r).ticks(4)),showline:1})}function L(t,e,a){const r=t.gene2position[a];const o={genome:t.genome.name,gene:a,chr:r.chr,start:r.start,stop:r.stop,getgroup2boxplot:1};if(e.mdslabel){o.dslabel=e.mdslabel;o.querykey=e.querykey;if(e.samplegroup_attrlst){o.getgroup=e.samplegroup_attrlst}}else{o.iscustom=1;o.file=e.file;o.url=e.url;o.indexURL=e.indexURL}return n("mdsgeneboxplot",o).then((t=>{if(t.error)throw"Error: "+t.error;if(t.nodata)throw"No data";for(const t of e.motifs){if(t.motif.gene==a){t.message.text("")}}return t})).catch((t=>{if(t.stack)console.log(t.stack);for(const n of e.motifs){if(n.motif.gene==a){n.message.text(t.message||t)}}}))}function N(t,e){let a=0;for(const t of e.gene2result.values()){a=Math.max(a,t.n)}e.textlabel.text(e.name+" (n="+a+")").attr("x",e.width/2).attr("text-anchor","middle").attr("y",-30)}export{d as init};